diff --git a/ComfyUI-GGUF/.github/workflows/registry.yaml b/ComfyUI-GGUF/.github/workflows/registry.yaml new file mode 100644 index 0000000000000000000000000000000000000000..aaed69c2aa9af79a0c9a9459d971cd36bcfddc6e --- /dev/null +++ b/ComfyUI-GGUF/.github/workflows/registry.yaml @@ -0,0 +1,21 @@ +name: ComfyUI Registry publish +on: + workflow_dispatch: + push: + branches: + - stable + paths: + - "pyproject.toml" + +jobs: + publish-node: + name: ComfyUI Registry publish + runs-on: ubuntu-latest + if: github.event.repository.fork == false + steps: + - name: Check out code + uses: actions/checkout@v4 + - name: Publish Custom Node + uses: Comfy-Org/publish-node-action@main + with: + personal_access_token: ${{ secrets.REGISTRY_ACCESS_TOKEN }} diff --git a/ComfyUI-GGUF/.gitignore b/ComfyUI-GGUF/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..44fe82fdbad306e07e27f784d6c906f0708956e2 --- /dev/null +++ b/ComfyUI-GGUF/.gitignore @@ -0,0 +1,167 @@ +*.bin +*.gguf +*.safetensors +tools/llama.cpp* + +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +share/python-wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.nox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +*.py,cover +.hypothesis/ +.pytest_cache/ +cover/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py +db.sqlite3 +db.sqlite3-journal + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +.pybuilder/ +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# IPython +profile_default/ +ipython_config.py + +# pyenv +# For a library or package, you might want to ignore these files since the code is +# intended to run in multiple environments; otherwise, check them in: +# .python-version + +# pipenv +# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. +# However, in case of collaboration, if having platform-specific dependencies or dependencies +# having no cross-platform support, pipenv may install dependencies that don't work, or not +# install all needed dependencies. +#Pipfile.lock + +# poetry +# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control. +# This is especially recommended for binary packages to ensure reproducibility, and is more +# commonly ignored for libraries. +# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control +#poetry.lock + +# pdm +# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control. +#pdm.lock +# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it +# in version control. +# https://pdm.fming.dev/latest/usage/project/#working-with-version-control +.pdm.toml +.pdm-python +.pdm-build/ + +# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm +__pypackages__/ + +# Celery stuff +celerybeat-schedule +celerybeat.pid + +# SageMath parsed files +*.sage.py + +# Environments +.env +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ +.dmypy.json +dmypy.json + +# Pyre type checker +.pyre/ + +# pytype static type analyzer +.pytype/ + +# Cython debug symbols +cython_debug/ + +# PyCharm +# JetBrains specific template is maintained in a separate JetBrains.gitignore that can +# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore +# and can be added to the global gitignore or merged into this file. For a more nuclear +# option (not recommended) you can uncomment the following to ignore the entire idea folder. +#.idea/ diff --git a/ComfyUI-GGUF/.tracking b/ComfyUI-GGUF/.tracking new file mode 100644 index 0000000000000000000000000000000000000000..d8edce34b48c9af4fab6f69a8bf7ea333965b532 --- /dev/null +++ b/ComfyUI-GGUF/.tracking @@ -0,0 +1,17 @@ +.github/workflows/registry.yaml +.gitignore +LICENSE +README.md +__init__.py +dequant.py +loader.py +nodes.py +ops.py +pyproject.toml +requirements.txt +tools/README.md +tools/convert.py +tools/fix_5d_tensors.py +tools/fix_lines_ending.py +tools/lcpp.patch +tools/read_tensors.py \ No newline at end of file diff --git a/ComfyUI-GGUF/LICENSE b/ComfyUI-GGUF/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..261eeb9e9f8b2b4b0d119366dda99c6fd7d35c64 --- /dev/null +++ b/ComfyUI-GGUF/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/ComfyUI-GGUF/README.md b/ComfyUI-GGUF/README.md new file mode 100644 index 0000000000000000000000000000000000000000..6915927e1b61cc3c1113732e4e581e2af627a791 --- /dev/null +++ b/ComfyUI-GGUF/README.md @@ -0,0 +1,49 @@ +# ComfyUI-GGUF +GGUF Quantization support for native ComfyUI models + +This is currently very much WIP. These custom nodes provide support for model files stored in the GGUF format popularized by [llama.cpp](https://github.com/ggerganov/llama.cpp). + +While quantization wasn't feasible for regular UNET models (conv2d), transformer/DiT models such as flux seem less affected by quantization. This allows running it in much lower bits per weight variable bitrate quants on low-end GPUs. For further VRAM savings, a node to load a quantized version of the T5 text encoder is also included. + +![Comfy_Flux1_dev_Q4_0_GGUF_1024](https://github.com/user-attachments/assets/70d16d97-c522-4ef4-9435-633f128644c8) + +Note: The "Force/Set CLIP Device" is **NOT** part of this node pack. Do not install it if you only have one GPU. Do not set it to cuda:0 then complain about OOM errors if you do not undestand what it is for. There is not need to copy the workflow above, just use your own workflow and replace the stock "Load Diffusion Model" with the "Unet Loader (GGUF)" node. + +## Installation + +> [!IMPORTANT] +> Make sure your ComfyUI is on a recent-enough version to support custom ops when loading the UNET-only. + +To install the custom node normally, git clone this repository into your custom nodes folder (`ComfyUI/custom_nodes`) and install the only dependency for inference (`pip install --upgrade gguf`) + +``` +git clone https://github.com/city96/ComfyUI-GGUF +``` + +To install the custom node on a standalone ComfyUI release, open a CMD inside the "ComfyUI_windows_portable" folder (where your `run_nvidia_gpu.bat` file is) and use the following commands: + +``` +git clone https://github.com/city96/ComfyUI-GGUF ComfyUI/custom_nodes/ComfyUI-GGUF +.\python_embeded\python.exe -s -m pip install -r .\ComfyUI\custom_nodes\ComfyUI-GGUF\requirements.txt +``` + +On MacOS sequoia, torch 2.4.1 seems to be required, as 2.6.X nightly versions cause a "M1 buffer is not large enough" error. See [this issue](https://github.com/city96/ComfyUI-GGUF/issues/107) for more information/workarounds. + +## Usage + +Simply use the GGUF Unet loader found under the `bootleg` category. Place the .gguf model files in your `ComfyUI/models/unet` folder. + +LoRA loading is experimental but it should work with just the built-in LoRA loader node(s). + +Pre-quantized models: + +- [flux1-dev GGUF](https://huggingface.co/city96/FLUX.1-dev-gguf) +- [flux1-schnell GGUF](https://huggingface.co/city96/FLUX.1-schnell-gguf) +- [stable-diffusion-3.5-large GGUF](https://huggingface.co/city96/stable-diffusion-3.5-large-gguf) +- [stable-diffusion-3.5-large-turbo GGUF](https://huggingface.co/city96/stable-diffusion-3.5-large-turbo-gguf) + +Initial support for quantizing T5 has also been added recently, these can be used using the various `*CLIPLoader (gguf)` nodes which can be used inplace of the regular ones. For the CLIP model, use whatever model you were using before for CLIP. The loader can handle both types of files - `gguf` and regular `safetensors`/`bin`. + +- [t5_v1.1-xxl GGUF](https://huggingface.co/city96/t5-v1_1-xxl-encoder-gguf) + +See the instructions in the [tools](https://github.com/city96/ComfyUI-GGUF/tree/main/tools) folder for how to create your own quants. diff --git a/ComfyUI-GGUF/__init__.py b/ComfyUI-GGUF/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..a03726e3b0a08957ded67cdd21beb9544a3f6e4d --- /dev/null +++ b/ComfyUI-GGUF/__init__.py @@ -0,0 +1,9 @@ +# only import if running as a custom node +try: + import comfy.utils +except ImportError: + pass +else: + from .nodes import NODE_CLASS_MAPPINGS + NODE_DISPLAY_NAME_MAPPINGS = {k:v.TITLE for k,v in NODE_CLASS_MAPPINGS.items()} + __all__ = ['NODE_CLASS_MAPPINGS', 'NODE_DISPLAY_NAME_MAPPINGS'] diff --git a/ComfyUI-GGUF/__pycache__/__init__.cpython-310.pyc b/ComfyUI-GGUF/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b3bd8fa1380cb43cb7c6e783e07ff95b4bd14200 Binary files /dev/null and b/ComfyUI-GGUF/__pycache__/__init__.cpython-310.pyc differ diff --git a/ComfyUI-GGUF/__pycache__/dequant.cpython-310.pyc b/ComfyUI-GGUF/__pycache__/dequant.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..40636fa6edce344679e1ed25a7d7332bc4bc6efb Binary files /dev/null and b/ComfyUI-GGUF/__pycache__/dequant.cpython-310.pyc differ diff --git a/ComfyUI-GGUF/__pycache__/loader.cpython-310.pyc b/ComfyUI-GGUF/__pycache__/loader.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..486ef64d4d0e543a16396351d9a3ea121370f335 Binary files /dev/null and b/ComfyUI-GGUF/__pycache__/loader.cpython-310.pyc differ diff --git a/ComfyUI-GGUF/__pycache__/nodes.cpython-310.pyc b/ComfyUI-GGUF/__pycache__/nodes.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f8cc81427b2fbf1d987e617b72a8a47867413205 Binary files /dev/null and b/ComfyUI-GGUF/__pycache__/nodes.cpython-310.pyc differ diff --git a/ComfyUI-GGUF/__pycache__/ops.cpython-310.pyc b/ComfyUI-GGUF/__pycache__/ops.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..614129f3bcc6cdc066581fbf134dc4ed31e069b5 Binary files /dev/null and b/ComfyUI-GGUF/__pycache__/ops.cpython-310.pyc differ diff --git a/ComfyUI-GGUF/dequant.py b/ComfyUI-GGUF/dequant.py new file mode 100644 index 0000000000000000000000000000000000000000..78f5f266aaffd1a7f2502e0bf924a8260e7cf9b4 --- /dev/null +++ b/ComfyUI-GGUF/dequant.py @@ -0,0 +1,301 @@ +# (c) City96 || Apache-2.0 (apache.org/licenses/LICENSE-2.0) +import gguf +import torch +from tqdm import tqdm + + +TORCH_COMPATIBLE_QTYPES = (None, gguf.GGMLQuantizationType.F32, gguf.GGMLQuantizationType.F16) + +def is_torch_compatible(tensor): + return tensor is None or getattr(tensor, "tensor_type", None) in TORCH_COMPATIBLE_QTYPES + +def is_quantized(tensor): + return not is_torch_compatible(tensor) + +def dequantize_tensor(tensor, dtype=None, dequant_dtype=None): + qtype = getattr(tensor, "tensor_type", None) + oshape = getattr(tensor, "tensor_shape", tensor.shape) + + if qtype in TORCH_COMPATIBLE_QTYPES: + return tensor.to(dtype) + elif qtype in dequantize_functions: + dequant_dtype = dtype if dequant_dtype == "target" else dequant_dtype + return dequantize(tensor.data, qtype, oshape, dtype=dequant_dtype).to(dtype) + else: + # this is incredibly slow + tqdm.write(f"Falling back to numpy dequant for qtype: {getattr(qtype, 'name', repr(qtype))}") + new = gguf.quants.dequantize(tensor.cpu().numpy(), qtype) + return torch.from_numpy(new).to(tensor.device, dtype=dtype) + +def dequantize(data, qtype, oshape, dtype=None): + """ + Dequantize tensor back to usable shape/dtype + """ + block_size, type_size = gguf.GGML_QUANT_SIZES[qtype] + dequantize_blocks = dequantize_functions[qtype] + + rows = data.reshape( + (-1, data.shape[-1]) + ).view(torch.uint8) + + n_blocks = rows.numel() // type_size + blocks = rows.reshape((n_blocks, type_size)) + blocks = dequantize_blocks(blocks, block_size, type_size, dtype) + return blocks.reshape(oshape) + +def to_uint32(x): + # no uint32 :( + x = x.view(torch.uint8).to(torch.int32) + return (x[:, 0] | x[:, 1] << 8 | x[:, 2] << 16 | x[:, 3] << 24).unsqueeze(1) + +def to_uint16(x): + x = x.view(torch.uint8).to(torch.int32) + return (x[:, 0] | x[:, 1] << 8).unsqueeze(1) + +def split_block_dims(blocks, *args): + n_max = blocks.shape[1] + dims = list(args) + [n_max - sum(args)] + return torch.split(blocks, dims, dim=1) + +# Full weights # +def dequantize_blocks_BF16(blocks, block_size, type_size, dtype=None): + return (blocks.view(torch.int16).to(torch.int32) << 16).view(torch.float32) + +# Legacy Quants # +def dequantize_blocks_Q8_0(blocks, block_size, type_size, dtype=None): + d, x = split_block_dims(blocks, 2) + d = d.view(torch.float16).to(dtype) + x = x.view(torch.int8) + return (d * x) + +def dequantize_blocks_Q5_1(blocks, block_size, type_size, dtype=None): + n_blocks = blocks.shape[0] + + d, m, qh, qs = split_block_dims(blocks, 2, 2, 4) + d = d.view(torch.float16).to(dtype) + m = m.view(torch.float16).to(dtype) + qh = to_uint32(qh) + + qh = qh.reshape((n_blocks, 1)) >> torch.arange(32, device=d.device, dtype=torch.int32).reshape(1, 32) + ql = qs.reshape((n_blocks, -1, 1, block_size // 2)) >> torch.tensor([0, 4], device=d.device, dtype=torch.uint8).reshape(1, 1, 2, 1) + qh = (qh & 1).to(torch.uint8) + ql = (ql & 0x0F).reshape((n_blocks, -1)) + + qs = (ql | (qh << 4)) + return (d * qs) + m + +def dequantize_blocks_Q5_0(blocks, block_size, type_size, dtype=None): + n_blocks = blocks.shape[0] + + d, qh, qs = split_block_dims(blocks, 2, 4) + d = d.view(torch.float16).to(dtype) + qh = to_uint32(qh) + + qh = qh.reshape(n_blocks, 1) >> torch.arange(32, device=d.device, dtype=torch.int32).reshape(1, 32) + ql = qs.reshape(n_blocks, -1, 1, block_size // 2) >> torch.tensor([0, 4], device=d.device, dtype=torch.uint8).reshape(1, 1, 2, 1) + + qh = (qh & 1).to(torch.uint8) + ql = (ql & 0x0F).reshape(n_blocks, -1) + + qs = (ql | (qh << 4)).to(torch.int8) - 16 + return (d * qs) + +def dequantize_blocks_Q4_1(blocks, block_size, type_size, dtype=None): + n_blocks = blocks.shape[0] + + d, m, qs = split_block_dims(blocks, 2, 2) + d = d.view(torch.float16).to(dtype) + m = m.view(torch.float16).to(dtype) + + qs = qs.reshape((n_blocks, -1, 1, block_size // 2)) >> torch.tensor([0, 4], device=d.device, dtype=torch.uint8).reshape(1, 1, 2, 1) + qs = (qs & 0x0F).reshape(n_blocks, -1) + + return (d * qs) + m + +def dequantize_blocks_Q4_0(blocks, block_size, type_size, dtype=None): + n_blocks = blocks.shape[0] + + d, qs = split_block_dims(blocks, 2) + d = d.view(torch.float16).to(dtype) + + qs = qs.reshape((n_blocks, -1, 1, block_size // 2)) >> torch.tensor([0, 4], device=d.device, dtype=torch.uint8).reshape((1, 1, 2, 1)) + qs = (qs & 0x0F).reshape((n_blocks, -1)).to(torch.int8) - 8 + return (d * qs) + +# K Quants # +QK_K = 256 +K_SCALE_SIZE = 12 + +def get_scale_min(scales): + n_blocks = scales.shape[0] + scales = scales.view(torch.uint8) + scales = scales.reshape((n_blocks, 3, 4)) + + d, m, m_d = torch.split(scales, scales.shape[-2] // 3, dim=-2) + + sc = torch.cat([d & 0x3F, (m_d & 0x0F) | ((d >> 2) & 0x30)], dim=-1) + min = torch.cat([m & 0x3F, (m_d >> 4) | ((m >> 2) & 0x30)], dim=-1) + + return (sc.reshape((n_blocks, 8)), min.reshape((n_blocks, 8))) + +def dequantize_blocks_Q6_K(blocks, block_size, type_size, dtype=None): + n_blocks = blocks.shape[0] + + ql, qh, scales, d, = split_block_dims(blocks, QK_K // 2, QK_K // 4, QK_K // 16) + + scales = scales.view(torch.int8).to(dtype) + d = d.view(torch.float16).to(dtype) + d = (d * scales).reshape((n_blocks, QK_K // 16, 1)) + + ql = ql.reshape((n_blocks, -1, 1, 64)) >> torch.tensor([0, 4], device=d.device, dtype=torch.uint8).reshape((1, 1, 2, 1)) + ql = (ql & 0x0F).reshape((n_blocks, -1, 32)) + qh = qh.reshape((n_blocks, -1, 1, 32)) >> torch.tensor([0, 2, 4, 6], device=d.device, dtype=torch.uint8).reshape((1, 1, 4, 1)) + qh = (qh & 0x03).reshape((n_blocks, -1, 32)) + q = (ql | (qh << 4)).to(torch.int8) - 32 + q = q.reshape((n_blocks, QK_K // 16, -1)) + + return (d * q).reshape((n_blocks, QK_K)) + +def dequantize_blocks_Q5_K(blocks, block_size, type_size, dtype=None): + n_blocks = blocks.shape[0] + + d, dmin, scales, qh, qs = split_block_dims(blocks, 2, 2, K_SCALE_SIZE, QK_K // 8) + + d = d.view(torch.float16).to(dtype) + dmin = dmin.view(torch.float16).to(dtype) + + sc, m = get_scale_min(scales) + + d = (d * sc).reshape((n_blocks, -1, 1)) + dm = (dmin * m).reshape((n_blocks, -1, 1)) + + ql = qs.reshape((n_blocks, -1, 1, 32)) >> torch.tensor([0, 4], device=d.device, dtype=torch.uint8).reshape((1, 1, 2, 1)) + qh = qh.reshape((n_blocks, -1, 1, 32)) >> torch.tensor([i for i in range(8)], device=d.device, dtype=torch.uint8).reshape((1, 1, 8, 1)) + ql = (ql & 0x0F).reshape((n_blocks, -1, 32)) + qh = (qh & 0x01).reshape((n_blocks, -1, 32)) + q = (ql | (qh << 4)) + + return (d * q - dm).reshape((n_blocks, QK_K)) + +def dequantize_blocks_Q4_K(blocks, block_size, type_size, dtype=None): + n_blocks = blocks.shape[0] + + d, dmin, scales, qs = split_block_dims(blocks, 2, 2, K_SCALE_SIZE) + d = d.view(torch.float16).to(dtype) + dmin = dmin.view(torch.float16).to(dtype) + + sc, m = get_scale_min(scales) + + d = (d * sc).reshape((n_blocks, -1, 1)) + dm = (dmin * m).reshape((n_blocks, -1, 1)) + + qs = qs.reshape((n_blocks, -1, 1, 32)) >> torch.tensor([0, 4], device=d.device, dtype=torch.uint8).reshape((1, 1, 2, 1)) + qs = (qs & 0x0F).reshape((n_blocks, -1, 32)) + + return (d * qs - dm).reshape((n_blocks, QK_K)) + +def dequantize_blocks_Q3_K(blocks, block_size, type_size, dtype=None): + n_blocks = blocks.shape[0] + + hmask, qs, scales, d = split_block_dims(blocks, QK_K // 8, QK_K // 4, 12) + d = d.view(torch.float16).to(dtype) + + lscales, hscales = scales[:, :8], scales[:, 8:] + lscales = lscales.reshape((n_blocks, 1, 8)) >> torch.tensor([0, 4], device=d.device, dtype=torch.uint8).reshape((1, 2, 1)) + lscales = lscales.reshape((n_blocks, 16)) + hscales = hscales.reshape((n_blocks, 1, 4)) >> torch.tensor([0, 2, 4, 6], device=d.device, dtype=torch.uint8).reshape((1, 4, 1)) + hscales = hscales.reshape((n_blocks, 16)) + scales = (lscales & 0x0F) | ((hscales & 0x03) << 4) + scales = (scales.to(torch.int8) - 32) + + dl = (d * scales).reshape((n_blocks, 16, 1)) + + ql = qs.reshape((n_blocks, -1, 1, 32)) >> torch.tensor([0, 2, 4, 6], device=d.device, dtype=torch.uint8).reshape((1, 1, 4, 1)) + qh = hmask.reshape(n_blocks, -1, 1, 32) >> torch.tensor([i for i in range(8)], device=d.device, dtype=torch.uint8).reshape((1, 1, 8, 1)) + ql = ql.reshape((n_blocks, 16, QK_K // 16)) & 3 + qh = (qh.reshape((n_blocks, 16, QK_K // 16)) & 1) ^ 1 + q = (ql.to(torch.int8) - (qh << 2).to(torch.int8)) + + return (dl * q).reshape((n_blocks, QK_K)) + +def dequantize_blocks_Q2_K(blocks, block_size, type_size, dtype=None): + n_blocks = blocks.shape[0] + + scales, qs, d, dmin = split_block_dims(blocks, QK_K // 16, QK_K // 4, 2) + d = d.view(torch.float16).to(dtype) + dmin = dmin.view(torch.float16).to(dtype) + + # (n_blocks, 16, 1) + dl = (d * (scales & 0xF)).reshape((n_blocks, QK_K // 16, 1)) + ml = (dmin * (scales >> 4)).reshape((n_blocks, QK_K // 16, 1)) + + shift = torch.tensor([0, 2, 4, 6], device=d.device, dtype=torch.uint8).reshape((1, 1, 4, 1)) + + qs = (qs.reshape((n_blocks, -1, 1, 32)) >> shift) & 3 + qs = qs.reshape((n_blocks, QK_K // 16, 16)) + qs = dl * qs - ml + + return qs.reshape((n_blocks, -1)) + +# IQ quants +KVALUES = torch.tensor([-127, -104, -83, -65, -49, -35, -22, -10, 1, 13, 25, 38, 53, 69, 89, 113], dtype=torch.int8) + +def dequantize_blocks_IQ4_NL(blocks, block_size, type_size, dtype=None): + n_blocks = blocks.shape[0] + + d, qs = split_block_dims(blocks, 2) + d = d.view(torch.float16).to(dtype) + + qs = qs.reshape((n_blocks, -1, 1, block_size//2)) >> torch.tensor([0, 4], device=d.device, dtype=torch.uint8).reshape((1, 1, 2, 1)) + qs = (qs & 0x0F).reshape((n_blocks, -1, 1)).to(torch.int64) + + kvalues = KVALUES.to(qs.device).expand(*qs.shape[:-1], 16) + qs = torch.gather(kvalues, dim=-1, index=qs).reshape((n_blocks, -1)) + del kvalues # should still be view, but just to be safe + + return (d * qs) + +def dequantize_blocks_IQ4_XS(blocks, block_size, type_size, dtype=None): + n_blocks = blocks.shape[0] + d, scales_h, scales_l, qs = split_block_dims(blocks, 2, 2, QK_K // 64) + d = d.view(torch.float16).to(dtype) + scales_h = to_uint16(scales_h) + + shift_a = torch.tensor([0, 4], device=d.device, dtype=torch.uint8).reshape((1, 1, 2)) + shift_b = torch.tensor([2 * i for i in range(QK_K // 32)], device=d.device, dtype=torch.uint8).reshape((1, -1, 1)) + + scales_l = scales_l.reshape((n_blocks, -1, 1)) >> shift_a.reshape((1, 1, 2)) + scales_h = scales_h.reshape((n_blocks, -1, 1)) >> shift_b.reshape((1, -1, 1)) + + scales_l = scales_l.reshape((n_blocks, -1)) & 0x0F + scales_h = scales_h.reshape((n_blocks, -1)).to(torch.uint8) & 0x03 + + scales = (scales_l | (scales_h << 4)).to(torch.int8) - 32 + dl = (d * scales.to(dtype)).reshape((n_blocks, -1, 1)) + + qs = qs.reshape((n_blocks, -1, 1, 16)) >> shift_a.reshape((1, 1, 2, 1)) + qs = qs.reshape((n_blocks, -1, 32, 1)) & 0x0F + + kvalues = KVALUES.to(qs.device).expand(*qs.shape[:-1], 16) + qs = torch.gather(kvalues, dim=-1, index=qs.to(torch.int64)).reshape((n_blocks, -1, 32)) + del kvalues # see IQ4_NL + del shift_a + del shift_b + + return (dl * qs).reshape((n_blocks, -1)) + +dequantize_functions = { + gguf.GGMLQuantizationType.BF16: dequantize_blocks_BF16, + gguf.GGMLQuantizationType.Q8_0: dequantize_blocks_Q8_0, + gguf.GGMLQuantizationType.Q5_1: dequantize_blocks_Q5_1, + gguf.GGMLQuantizationType.Q5_0: dequantize_blocks_Q5_0, + gguf.GGMLQuantizationType.Q4_1: dequantize_blocks_Q4_1, + gguf.GGMLQuantizationType.Q4_0: dequantize_blocks_Q4_0, + gguf.GGMLQuantizationType.Q6_K: dequantize_blocks_Q6_K, + gguf.GGMLQuantizationType.Q5_K: dequantize_blocks_Q5_K, + gguf.GGMLQuantizationType.Q4_K: dequantize_blocks_Q4_K, + gguf.GGMLQuantizationType.Q3_K: dequantize_blocks_Q3_K, + gguf.GGMLQuantizationType.Q2_K: dequantize_blocks_Q2_K, + gguf.GGMLQuantizationType.IQ4_NL: dequantize_blocks_IQ4_NL, + gguf.GGMLQuantizationType.IQ4_XS: dequantize_blocks_IQ4_XS, +} diff --git a/ComfyUI-GGUF/loader.py b/ComfyUI-GGUF/loader.py new file mode 100644 index 0000000000000000000000000000000000000000..7cefb113bb7f9d85585f6478ebbece9f5f3e9919 --- /dev/null +++ b/ComfyUI-GGUF/loader.py @@ -0,0 +1,506 @@ +# (c) City96 || Apache-2.0 (apache.org/licenses/LICENSE-2.0) +import warnings +import logging +import torch +import gguf +import re +import os + +from .ops import GGMLTensor +from .dequant import is_quantized, dequantize_tensor + +IMG_ARCH_LIST = {"flux", "sd1", "sdxl", "sd3", "aura", "hidream", "cosmos", "ltxv", "hyvid", "wan", "lumina2", "qwen_image"} +TXT_ARCH_LIST = {"t5", "t5encoder", "llama", "qwen2vl", "qwen3", "qwen3vl", "gemma3"} +VIS_TYPE_LIST = {"clip-vision", "mmproj"} + +def get_orig_shape(reader, tensor_name): + field_key = f"comfy.gguf.orig_shape.{tensor_name}" + field = reader.get_field(field_key) + if field is None: + return None + # Has original shape metadata, so we try to decode it. + if len(field.types) != 2 or field.types[0] != gguf.GGUFValueType.ARRAY or field.types[1] != gguf.GGUFValueType.INT32: + raise TypeError(f"Bad original shape metadata for {field_key}: Expected ARRAY of INT32, got {field.types}") + return torch.Size(tuple(int(field.parts[part_idx][0]) for part_idx in field.data)) + +def get_field(reader, field_name, field_type): + field = reader.get_field(field_name) + if field is None: + return None + elif field_type == str: + # extra check here as this is used for checking arch string + if len(field.types) != 1 or field.types[0] != gguf.GGUFValueType.STRING: + raise TypeError(f"Bad type for GGUF {field_name} key: expected string, got {field.types!r}") + return str(field.parts[field.data[-1]], encoding="utf-8") + elif field_type in [int, float, bool]: + return field_type(field.parts[field.data[-1]].item()) + else: + raise TypeError(f"Unknown field type {field_type}") + +def get_list_field(reader, field_name, field_type): + field = reader.get_field(field_name) + if field is None: + return None + elif field_type == str: + return tuple(str(field.parts[part_idx], encoding="utf-8") for part_idx in field.data) + elif field_type in [int, float, bool]: + return tuple(field_type(field.parts[part_idx][0]) for part_idx in field.data) + else: + raise TypeError(f"Unknown field type {field_type}") + +def get_gguf_metadata(reader): + """Extract all simple metadata fields like safetensors""" + metadata = {} + for field_name in reader.fields: + try: + field = reader.get_field(field_name) + if len(field.types) == 1: # Simple scalar fields only + if field.types[0] == gguf.GGUFValueType.STRING: + metadata[field_name] = str(field.parts[field.data[-1]], "utf-8") + elif field.types[0] == gguf.GGUFValueType.INT32: + metadata[field_name] = int(field.parts[field.data[-1]]) + elif field.types[0] == gguf.GGUFValueType.F32: + metadata[field_name] = float(field.parts[field.data[-1]]) + elif field.types[0] == gguf.GGUFValueType.BOOL: + metadata[field_name] = bool(field.parts[field.data[-1]]) + except: + continue + return metadata + +def gguf_sd_loader(path, handle_prefix="model.diffusion_model.", is_text_model=False): + """ + Read state dict as fake tensors + """ + reader = gguf.GGUFReader(path) + + # filter and strip prefix + has_prefix = False + if handle_prefix is not None: + prefix_len = len(handle_prefix) + tensor_names = set(tensor.name for tensor in reader.tensors) + has_prefix = any(s.startswith(handle_prefix) for s in tensor_names) + + tensors = [] + for tensor in reader.tensors: + sd_key = tensor_name = tensor.name + if has_prefix: + if not tensor_name.startswith(handle_prefix): + continue + sd_key = tensor_name[prefix_len:] + tensors.append((sd_key, tensor)) + + # detect and verify architecture + compat = None + arch_str = get_field(reader, "general.architecture", str) + type_str = get_field(reader, "general.type", str) + if arch_str in [None, "pig", "cow"]: + if is_text_model: + raise ValueError(f"This gguf file is incompatible with llama.cpp!\nConsider using safetensors or a compatible gguf file\n({path})") + compat = "sd.cpp" if arch_str is None else arch_str + # import here to avoid changes to convert.py breaking regular models + from .tools.convert import detect_arch + try: + arch_str = detect_arch(set(val[0] for val in tensors)).arch + except Exception as e: + raise ValueError(f"This model is not currently supported - ({e})") + elif arch_str not in TXT_ARCH_LIST and is_text_model: + if type_str not in VIS_TYPE_LIST: + raise ValueError(f"Unexpected text model architecture type in GGUF file: {arch_str!r}") + elif arch_str not in IMG_ARCH_LIST and not is_text_model: + raise ValueError(f"Unexpected architecture type in GGUF file: {arch_str!r}") + + if compat: + logging.warning(f"Warning: This gguf model file is loaded in compatibility mode '{compat}' [arch:{arch_str}]") + + # main loading loop + state_dict = {} + qtype_dict = {} + for sd_key, tensor in tensors: + tensor_name = tensor.name + # torch_tensor = torch.from_numpy(tensor.data) # mmap + + # NOTE: line above replaced with this block to avoid persistent numpy warning about mmap + with warnings.catch_warnings(): + warnings.filterwarnings("ignore", message="The given NumPy array is not writable") + torch_tensor = torch.from_numpy(tensor.data) # mmap + + shape = get_orig_shape(reader, tensor_name) + if shape is None: + shape = torch.Size(tuple(int(v) for v in reversed(tensor.shape))) + # Workaround for stable-diffusion.cpp SDXL detection. + if compat == "sd.cpp" and arch_str == "sdxl": + if any([tensor_name.endswith(x) for x in (".proj_in.weight", ".proj_out.weight")]): + while len(shape) > 2 and shape[-1] == 1: + shape = shape[:-1] + + # add to state dict + if tensor.tensor_type in {gguf.GGMLQuantizationType.F32, gguf.GGMLQuantizationType.F16}: + torch_tensor = torch_tensor.view(*shape) + state_dict[sd_key] = GGMLTensor(torch_tensor, tensor_type=tensor.tensor_type, tensor_shape=shape) + + # 1D tensors shouldn't be quantized, this is a fix for BF16 + if len(shape) <= 1 and tensor.tensor_type == gguf.GGMLQuantizationType.BF16: + state_dict[sd_key] = dequantize_tensor(state_dict[sd_key], dtype=torch.float32) + + # keep track of loaded tensor types + tensor_type_str = getattr(tensor.tensor_type, "name", repr(tensor.tensor_type)) + qtype_dict[tensor_type_str] = qtype_dict.get(tensor_type_str, 0) + 1 + + # print loaded tensor type counts + logging.info("gguf qtypes: " + ", ".join(f"{k} ({v})" for k, v in qtype_dict.items())) + + # mark largest tensor for vram estimation + qsd = {k:v for k,v in state_dict.items() if is_quantized(v)} + if len(qsd) > 0: + max_key = max(qsd.keys(), key=lambda k: qsd[k].numel()) + state_dict[max_key].is_largest_weight = True + + # extra info to return + extra = { + "arch_str": arch_str, + "metadata": get_gguf_metadata(reader) + } + return (state_dict, extra) + +# for remapping llama.cpp -> original key names +T5_SD_MAP = { + "enc.": "encoder.", + ".blk.": ".block.", + "token_embd": "shared", + "output_norm": "final_layer_norm", + "attn_q": "layer.0.SelfAttention.q", + "attn_k": "layer.0.SelfAttention.k", + "attn_v": "layer.0.SelfAttention.v", + "attn_o": "layer.0.SelfAttention.o", + "attn_norm": "layer.0.layer_norm", + "attn_rel_b": "layer.0.SelfAttention.relative_attention_bias", + "ffn_up": "layer.1.DenseReluDense.wi_1", + "ffn_down": "layer.1.DenseReluDense.wo", + "ffn_gate": "layer.1.DenseReluDense.wi_0", + "ffn_norm": "layer.1.layer_norm", +} + +LLAMA_SD_MAP = { + "blk.": "model.layers.", + "attn_norm": "input_layernorm", + "attn_q_norm.": "self_attn.q_norm.", + "attn_k_norm.": "self_attn.k_norm.", + "attn_v_norm.": "self_attn.v_norm.", + "attn_q": "self_attn.q_proj", + "attn_k": "self_attn.k_proj", + "attn_v": "self_attn.v_proj", + "attn_output": "self_attn.o_proj", + "ffn_up": "mlp.up_proj", + "ffn_down": "mlp.down_proj", + "ffn_gate": "mlp.gate_proj", + "ffn_norm": "post_attention_layernorm", + "token_embd": "model.embed_tokens", + "output_norm": "model.norm", + "output.weight": "lm_head.weight", +} + +GEMMA3_SD_MAP = LLAMA_SD_MAP.copy() +GEMMA3_SD_MAP.update({ + "ffn_norm": "pre_feedforward_layernorm", + "post_ffw_norm": "post_feedforward_layernorm", + "post_attention_norm": "post_attention_layernorm", +}) + +CLIP_VISION_SD_MAP = { + "mm.": "visual.merger.mlp.", + "v.post_ln.": "visual.merger.ln_q.", + "v.patch_embd": "visual.patch_embed.proj", + "v.blk.": "visual.blocks.", + "ffn_up": "mlp.up_proj", + "ffn_down": "mlp.down_proj", + "ffn_gate": "mlp.gate_proj", + "attn_out.": "attn.proj.", + "ln1.": "norm1.", + "ln2.": "norm2.", +} + +def sd_map_replace(raw_sd, key_map): + sd = {} + for k,v in raw_sd.items(): + for s,d in key_map.items(): + k = k.replace(s,d) + sd[k] = v + return sd + +def llama_permute(raw_sd, n_head, n_head_kv): + # Reverse version of LlamaModel.permute in llama.cpp convert script + sd = {} + permute = lambda x,h: x.reshape(h, x.shape[0] // h // 2, 2, *x.shape[1:]).swapaxes(1, 2).reshape(x.shape) + for k,v in raw_sd.items(): + if k.endswith(("q_proj.weight", "q_proj.bias")): + v.data = permute(v.data, n_head) + if k.endswith(("k_proj.weight", "k_proj.bias")): + v.data = permute(v.data, n_head_kv) + sd[k] = v + return sd + +def gemma3_norm_corrections(sd): + # Reverse change from Gemma3Model modify_tensors in llama.cpp convert script + norm_patterns = [ + "input_layernorm.weight", + "post_attention_layernorm.weight", + "pre_feedforward_layernorm.weight", + "post_feedforward_layernorm.weight", + "self_attn.q_norm.weight", + "self_attn.k_norm.weight", + "model.norm.weight" + ] + corrected = 0 + for key in list(sd.keys()): + if any(p in key for p in norm_patterns): + if is_quantized(sd[key]): + sd[key] = dequantize_tensor(sd[key], dtype=torch.float32) - 1.0 + else: + sd[key] = sd[key].float() - 1.0 + corrected += 1 + #logging.info(f"Gemma3: Applied -1 norm correction to {corrected} tensors") + return sd + +def strip_quant_suffix(name): + pattern = r"[-_]?(?:ud-)?i?q[0-9]_[a-z0-9_\-]{1,8}$" + match = re.search(pattern, name, re.IGNORECASE) + if match: + name = name[:match.start()] + return name + +def gguf_mmproj_loader(path): + # Reverse version of Qwen2VLVisionModel.modify_tensors + logging.info("Attenpting to find mmproj file for text encoder...") + + # get name to match w/o quant suffix + tenc_fname = os.path.basename(path) + tenc = os.path.splitext(tenc_fname)[0].lower() + tenc = strip_quant_suffix(tenc) + + # try and find matching mmproj + target = [] + root = os.path.dirname(path) + for fname in os.listdir(root): + name, ext = os.path.splitext(fname) + if ext.lower() != ".gguf": + continue + if "mmproj" not in name.lower(): + continue + if tenc in name.lower(): + target.append(fname) + + if len(target) == 0: + logging.error(f"Error: Can't find mmproj file for '{tenc_fname}' (matching:'{tenc}')! Qwen-Image-Edit will be broken!") + return {} + if len(target) > 1: + logging.error(f"Ambiguous mmproj for text encoder '{tenc_fname}', will use first match.") + + logging.info(f"Using mmproj '{target[0]}' for text encoder '{tenc_fname}'.") + target = os.path.join(root, target[0]) + vsd, _ = gguf_sd_loader(target, is_text_model=True) + + # concat 4D to 5D + if "v.patch_embd.weight.1" in vsd: + w1 = dequantize_tensor(vsd.pop("v.patch_embd.weight"), dtype=torch.float32) + w2 = dequantize_tensor(vsd.pop("v.patch_embd.weight.1"), dtype=torch.float32) + vsd["v.patch_embd.weight"] = torch.stack([w1, w2], dim=2) + + # run main replacement + vsd = sd_map_replace(vsd, CLIP_VISION_SD_MAP) + + # handle split Q/K/V + if "visual.blocks.0.attn_q.weight" in vsd: + attns = {} + # filter out attentions + group + for k,v in vsd.items(): + if any(x in k for x in ["attn_q", "attn_k", "attn_v"]): + k_attn, k_name = k.rsplit(".attn_", 1) + k_attn += ".attn.qkv." + k_name.split(".")[-1] + if k_attn not in attns: + attns[k_attn] = {} + attns[k_attn][k_name] = dequantize_tensor( + v, dtype=(torch.bfloat16 if is_quantized(v) else torch.float16) + ) + + # recombine + for k,v in attns.items(): + suffix = k.split(".")[-1] + vsd[k] = torch.cat([ + v[f"q.{suffix}"], + v[f"k.{suffix}"], + v[f"v.{suffix}"], + ], dim=0) + del attns + + return vsd + +def gguf_tokenizer_loader(path, temb_shape): + # convert gguf tokenizer to spiece + logging.info("Attempting to recreate sentencepiece tokenizer from GGUF file metadata...") + try: + from sentencepiece import sentencepiece_model_pb2 as model + except ImportError: + raise ImportError("Please make sure sentencepiece and protobuf are installed.\npip install sentencepiece protobuf") + spm = model.ModelProto() + + reader = gguf.GGUFReader(path) + + if get_field(reader, "tokenizer.ggml.model", str) == "t5": + if temb_shape == (256384, 4096): # probably UMT5 + spm.trainer_spec.model_type == 1 # Unigram (do we have a T5 w/ BPE?) + else: + raise NotImplementedError("Unknown model, can't set tokenizer!") + else: + raise NotImplementedError("Unknown model, can't set tokenizer!") + + spm.normalizer_spec.add_dummy_prefix = get_field(reader, "tokenizer.ggml.add_space_prefix", bool) + spm.normalizer_spec.remove_extra_whitespaces = get_field(reader, "tokenizer.ggml.remove_extra_whitespaces", bool) + + tokens = get_list_field(reader, "tokenizer.ggml.tokens", str) + scores = get_list_field(reader, "tokenizer.ggml.scores", float) + toktypes = get_list_field(reader, "tokenizer.ggml.token_type", int) + + for idx, (token, score, toktype) in enumerate(zip(tokens, scores, toktypes)): + # # These aren't present in the original? + # if toktype == 5 and idx >= temb_shape[0]%1000): + # continue + + piece = spm.SentencePiece() + piece.piece = token + piece.score = score + piece.type = toktype + spm.pieces.append(piece) + + # unsure if any of these are correct + spm.trainer_spec.byte_fallback = True + spm.trainer_spec.vocab_size = len(tokens) # split off unused? + spm.trainer_spec.max_sentence_length = 4096 + spm.trainer_spec.eos_id = get_field(reader, "tokenizer.ggml.eos_token_id", int) + spm.trainer_spec.pad_id = get_field(reader, "tokenizer.ggml.padding_token_id", int) + + logging.info(f"Created tokenizer with vocab size of {len(spm.pieces)}") + del reader + return torch.ByteTensor(list(spm.SerializeToString())) + +def gguf_tekken_tokenizer_loader(path, temb_shape): + # convert ggml (hf) tokenizer metadata to tekken/comfy data + logging.info("Attempting to recreate tekken tokenizer from GGUF file metadata...") + import json + import base64 + from transformers.convert_slow_tokenizer import bytes_to_unicode + + reader = gguf.GGUFReader(path) + + model_str = get_field(reader, "tokenizer.ggml.model", str) + if model_str == "gpt2": + if temb_shape == (131072, 5120): # probably Mistral + data = { + "config": {"num_vocab_tokens": 150000, "default_vocab_size": 131072}, + "vocab": [], + "special_tokens": [], + } + else: + raise NotImplementedError("Unknown model, can't set tokenizer!") + else: + raise NotImplementedError("Unknown model, can't set tokenizer!") + + tokens = get_list_field(reader, "tokenizer.ggml.tokens", str) + toktypes = get_list_field(reader, "tokenizer.ggml.token_type", int) + + decoder = {v: k for k, v in bytes_to_unicode().items()} + for idx, (token, toktype) in enumerate(zip(tokens, toktypes)): + if toktype == 3: + data["special_tokens"].append( + {'rank': idx, 'token_str': token, 'is_control': True} + ) + else: + tok = bytes([decoder[char] for char in token]) + data["vocab"].append({ + "rank": len(data["vocab"]), + "token_bytes": base64.b64encode(tok).decode("ascii"), + "token_str": tok.decode("utf-8", errors="replace") # ? + }) + + logging.info(f"Created tekken tokenizer with vocab size of {len(data['vocab'])} (+{len(data['special_tokens'])})") + del reader + return torch.ByteTensor(list(json.dumps(data).encode('utf-8'))) + +def gguf_gemma3_tokenizer_loader(path): + #TODO: merge into gguf_tokenizer_loader + logging.info("Attempting to recreate sentencepiece tokenizer from GGUF file metadata...") + try: + from sentencepiece import sentencepiece_model_pb2 as model + except ImportError: + raise ImportError("Please install sentencepiece and protobuf.\npip install sentencepiece protobuf") + spm = model.ModelProto() + reader = gguf.GGUFReader(path) + + spm.normalizer_spec.name = "identity" + spm.normalizer_spec.add_dummy_prefix = False + spm.trainer_spec.model_type = 2 + spm.trainer_spec.input_format = "tsv" + spm.trainer_spec.byte_fallback = True + spm.trainer_spec.max_sentence_length = 4192 + spm.trainer_spec.bos_piece = "" + + tokens = get_list_field(reader, "tokenizer.ggml.tokens", str) + scores = get_list_field(reader, "tokenizer.ggml.scores", float) + toktype = get_list_field(reader, "tokenizer.ggml.token_type", int) + + if not tokens or not scores or not toktype: + raise ValueError("Missing tokenizer metadata") + + for idx in range(len(tokens)): + piece = spm.SentencePiece() + piece.piece = tokens[idx] + if idx == 3: # UNK position + piece.type = 2 # UNK Token + piece.score = 0.0 # UNK Score + else: + piece.type = toktype[idx] + piece.score = scores[idx] + spm.pieces.append(piece) + + spm.trainer_spec.vocab_size = len(spm.pieces) + logging.info(f"Created tokenizer with vocab size of {len(spm.pieces)}") + + del reader + return torch.ByteTensor(list(spm.SerializeToString())) + +def gguf_clip_loader(path): + sd, extra = gguf_sd_loader(path, is_text_model=True) + arch = extra.get("arch_str", None) + if arch in {"t5", "t5encoder"}: + temb_key = "token_embd.weight" + if temb_key in sd and sd[temb_key].shape == (256384, 4096): + # non-standard Comfy-Org tokenizer + sd["spiece_model"] = gguf_tokenizer_loader(path, sd[temb_key].shape) + # TODO: dequantizing token embed here is janky but otherwise we OOM due to tensor being massive. + logging.warning(f"Dequantizing {temb_key} to prevent runtime OOM.") + sd[temb_key] = dequantize_tensor(sd[temb_key], dtype=torch.float16) + sd = sd_map_replace(sd, T5_SD_MAP) + elif arch in {"llama", "qwen2vl", "qwen3", "qwen3vl", "gemma3"}: + # TODO: pass model_options["vocab_size"] to loader somehow + temb_key = "token_embd.weight" + if temb_key in sd and sd[temb_key].shape[0] >= (64 * 1024): + if arch == "llama" and sd[temb_key].shape == (131072, 5120): + # non-standard Comfy-Org tokenizer + sd["tekken_model"] = gguf_tekken_tokenizer_loader(path, sd[temb_key].shape) + elif arch == "gemma3": + sd["spiece_model"] = gguf_gemma3_tokenizer_loader(path) + # See note above for T5. + logging.warning(f"Dequantizing {temb_key} to prevent runtime OOM.") + sd[temb_key] = dequantize_tensor(sd[temb_key], dtype=torch.float16) + if arch == "gemma3": + sd = sd_map_replace(sd, GEMMA3_SD_MAP) + sd = gemma3_norm_corrections(sd) + else: + sd = sd_map_replace(sd, LLAMA_SD_MAP) + if arch == "llama": + sd = llama_permute(sd, 32, 8) # L3 / Mistral + if arch == "qwen2vl": + vsd = gguf_mmproj_loader(path) + sd.update(vsd) + else: + pass + return sd diff --git a/ComfyUI-GGUF/nodes.py b/ComfyUI-GGUF/nodes.py new file mode 100644 index 0000000000000000000000000000000000000000..468351467cf0edb3070f2c1d48319631fcc39bb4 --- /dev/null +++ b/ComfyUI-GGUF/nodes.py @@ -0,0 +1,329 @@ +# (c) City96 || Apache-2.0 (apache.org/licenses/LICENSE-2.0) +import torch +import logging +import inspect +import collections + +import nodes +import comfy.sd +import comfy.lora +import comfy.float +import comfy.utils +import comfy.model_patcher +import comfy.model_management +import folder_paths + +from .ops import GGMLOps, move_patch_to_device +from .loader import gguf_sd_loader, gguf_clip_loader +from .dequant import is_quantized, is_torch_compatible + +def update_folder_names_and_paths(key, targets=[]): + # check for existing key + base = folder_paths.folder_names_and_paths.get(key, ([], {})) + base = base[0] if isinstance(base[0], (list, set, tuple)) else [] + # find base key & add w/ fallback, sanity check + warning + target = next((x for x in targets if x in folder_paths.folder_names_and_paths), targets[0]) + orig, _ = folder_paths.folder_names_and_paths.get(target, ([], {})) + folder_paths.folder_names_and_paths[key] = (orig or base, {".gguf"}) + if base and base != orig: + logging.warning(f"Unknown file list already present on key {key}: {base}") + +# Add a custom keys for files ending in .gguf +update_folder_names_and_paths("unet_gguf", ["diffusion_models", "unet"]) +update_folder_names_and_paths("clip_gguf", ["text_encoders", "clip"]) + +class GGUFModelPatcher(comfy.model_patcher.ModelPatcher): + patch_on_device = False + + 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) + + patches = self.patches[key] + if is_quantized(weight): + out_weight = weight.to(device_to) + patches = move_patch_to_device(patches, self.load_device if self.patch_on_device else self.offload_device) + # TODO: do we ever have legitimate duplicate patches? (i.e. patch on top of patched weight) + out_weight.patches = [(patches, key)] + else: + inplace_update = self.weight_inplace_update or inplace_update + if key not in self.backup: + self.backup[key] = collections.namedtuple('Dimension', ['weight', 'inplace_update'])( + weight.to(device=self.offload_device, copy=inplace_update), inplace_update + ) + + if device_to is not None: + 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(patches, temp_weight, key) + out_weight = comfy.float.stochastic_rounding(out_weight, weight.dtype) + + if inplace_update: + comfy.utils.copy_to_param(self.model, key, out_weight) + else: + comfy.utils.set_attr_param(self.model, key, out_weight) + + def unpatch_model(self, device_to=None, unpatch_weights=True): + if unpatch_weights: + for p in self.model.parameters(): + if is_torch_compatible(p): + continue + patches = getattr(p, "patches", []) + if len(patches) > 0: + p.patches = [] + # TODO: Find another way to not unload after patches + return super().unpatch_model(device_to=device_to, unpatch_weights=unpatch_weights) + + + def pin_weight_to_device(self, key): + op_key = key.rsplit('.', 1)[0] + if not self.mmap_released and op_key in self.named_modules_to_munmap: + # TODO: possible to OOM, find better way to detach + self.named_modules_to_munmap[op_key].to(self.load_device).to(self.offload_device) + del self.named_modules_to_munmap[op_key] + super().pin_weight_to_device(key) + + mmap_released = False + named_modules_to_munmap = {} + + def load(self, *args, force_patch_weights=False, **kwargs): + if not self.mmap_released: + self.named_modules_to_munmap = dict(self.model.named_modules()) + + # always call `patch_weight_to_device` even for lowvram + super().load(*args, force_patch_weights=True, **kwargs) + + # make sure nothing stays linked to mmap after first load + if not self.mmap_released: + linked = [] + if kwargs.get("lowvram_model_memory", 0) > 0: + for n, m in self.named_modules_to_munmap.items(): + if hasattr(m, "weight"): + device = getattr(m.weight, "device", None) + if device == self.offload_device: + linked.append((n, m)) + continue + if hasattr(m, "bias"): + device = getattr(m.bias, "device", None) + if device == self.offload_device: + linked.append((n, m)) + continue + if linked and self.load_device != self.offload_device: + logging.info(f"Attempting to release mmap ({len(linked)})") + for n, m in linked: + # TODO: possible to OOM, find better way to detach + m.to(self.load_device).to(self.offload_device) + self.mmap_released = True + self.named_modules_to_munmap = {} + + def clone(self, *args, **kwargs): + src_cls = self.__class__ + self.__class__ = GGUFModelPatcher + n = super().clone(*args, **kwargs) + n.__class__ = GGUFModelPatcher + self.__class__ = src_cls + # GGUF specific clone values below + n.patch_on_device = getattr(self, "patch_on_device", False) + n.mmap_released = getattr(self, "mmap_released", False) + if src_cls != GGUFModelPatcher: + n.size = 0 # force recalc + return n + +class UnetLoaderGGUF: + @classmethod + def INPUT_TYPES(s): + unet_names = [x for x in folder_paths.get_filename_list("unet_gguf")] + return { + "required": { + "unet_name": (unet_names,), + } + } + + RETURN_TYPES = ("MODEL",) + FUNCTION = "load_unet" + CATEGORY = "bootleg" + TITLE = "Unet Loader (GGUF)" + + def load_unet(self, unet_name, dequant_dtype=None, patch_dtype=None, patch_on_device=None): + ops = GGMLOps() + + if dequant_dtype in ("default", None): + ops.Linear.dequant_dtype = None + elif dequant_dtype in ["target"]: + ops.Linear.dequant_dtype = dequant_dtype + else: + ops.Linear.dequant_dtype = getattr(torch, dequant_dtype) + + if patch_dtype in ("default", None): + ops.Linear.patch_dtype = None + elif patch_dtype in ["target"]: + ops.Linear.patch_dtype = patch_dtype + else: + ops.Linear.patch_dtype = getattr(torch, patch_dtype) + + # init model + unet_path = folder_paths.get_full_path("unet", unet_name) + sd, extra = gguf_sd_loader(unet_path) + + kwargs = {} + valid_params = inspect.signature(comfy.sd.load_diffusion_model_state_dict).parameters + if "metadata" in valid_params: + kwargs["metadata"] = extra.get("metadata", {}) + + model = comfy.sd.load_diffusion_model_state_dict( + sd, model_options={"custom_operations": ops}, **kwargs, + ) + if model is None: + logging.error("ERROR UNSUPPORTED UNET {}".format(unet_path)) + raise RuntimeError("ERROR: Could not detect model type of: {}".format(unet_path)) + model = GGUFModelPatcher.clone(model) + model.patch_on_device = patch_on_device + return (model,) + +class UnetLoaderGGUFAdvanced(UnetLoaderGGUF): + @classmethod + def INPUT_TYPES(s): + unet_names = [x for x in folder_paths.get_filename_list("unet_gguf")] + return { + "required": { + "unet_name": (unet_names,), + "dequant_dtype": (["default", "target", "float32", "float16", "bfloat16"], {"default": "default"}), + "patch_dtype": (["default", "target", "float32", "float16", "bfloat16"], {"default": "default"}), + "patch_on_device": ("BOOLEAN", {"default": False}), + } + } + TITLE = "Unet Loader (GGUF/Advanced)" + +class CLIPLoaderGGUF: + @classmethod + def INPUT_TYPES(s): + base = nodes.CLIPLoader.INPUT_TYPES() + return { + "required": { + "clip_name": (s.get_filename_list(),), + "type": base["required"]["type"], + } + } + + RETURN_TYPES = ("CLIP",) + FUNCTION = "load_clip" + CATEGORY = "bootleg" + TITLE = "CLIPLoader (GGUF)" + + @classmethod + def get_filename_list(s): + files = [] + files += folder_paths.get_filename_list("clip") + files += folder_paths.get_filename_list("clip_gguf") + return sorted(files) + + def load_data(self, ckpt_paths): + clip_data = [] + for p in ckpt_paths: + if p.endswith(".gguf"): + sd = gguf_clip_loader(p) + else: + sd = comfy.utils.load_torch_file(p, safe_load=True) + if "scaled_fp8" in sd: # NOTE: Scaled FP8 would require different custom ops, but only one can be active + raise NotImplementedError(f"Mixing scaled FP8 with GGUF is not supported! Use regular CLIP loader or switch model(s)\n({p})") + clip_data.append(sd) + return clip_data + + def load_patcher(self, clip_paths, clip_type, clip_data): + clip = comfy.sd.load_text_encoder_state_dicts( + clip_type = clip_type, + state_dicts = clip_data, + model_options = { + "custom_operations": GGMLOps, + "initial_device": comfy.model_management.text_encoder_offload_device() + }, + embedding_directory = folder_paths.get_folder_paths("embeddings"), + ) + clip.patcher = GGUFModelPatcher.clone(clip.patcher) + return clip + + def load_clip(self, clip_name, type="stable_diffusion"): + clip_path = folder_paths.get_full_path("clip", clip_name) + clip_type = getattr(comfy.sd.CLIPType, type.upper(), comfy.sd.CLIPType.STABLE_DIFFUSION) + return (self.load_patcher([clip_path], clip_type, self.load_data([clip_path])),) + +class DualCLIPLoaderGGUF(CLIPLoaderGGUF): + @classmethod + def INPUT_TYPES(s): + base = nodes.DualCLIPLoader.INPUT_TYPES() + file_options = (s.get_filename_list(), ) + return { + "required": { + "clip_name1": file_options, + "clip_name2": file_options, + "type": base["required"]["type"], + } + } + + TITLE = "DualCLIPLoader (GGUF)" + + 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_paths = (clip_path1, clip_path2) + clip_type = getattr(comfy.sd.CLIPType, type.upper(), comfy.sd.CLIPType.STABLE_DIFFUSION) + return (self.load_patcher(clip_paths, clip_type, self.load_data(clip_paths)),) + +class TripleCLIPLoaderGGUF(CLIPLoaderGGUF): + @classmethod + def INPUT_TYPES(s): + file_options = (s.get_filename_list(), ) + return { + "required": { + "clip_name1": file_options, + "clip_name2": file_options, + "clip_name3": file_options, + } + } + + TITLE = "TripleCLIPLoader (GGUF)" + + def load_clip(self, clip_name1, clip_name2, clip_name3, type="sd3"): + 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_paths = (clip_path1, clip_path2, clip_path3) + clip_type = getattr(comfy.sd.CLIPType, type.upper(), comfy.sd.CLIPType.STABLE_DIFFUSION) + return (self.load_patcher(clip_paths, clip_type, self.load_data(clip_paths)),) + +class QuadrupleCLIPLoaderGGUF(CLIPLoaderGGUF): + @classmethod + def INPUT_TYPES(s): + file_options = (s.get_filename_list(), ) + return { + "required": { + "clip_name1": file_options, + "clip_name2": file_options, + "clip_name3": file_options, + "clip_name4": file_options, + } + } + + TITLE = "QuadrupleCLIPLoader (GGUF)" + + def load_clip(self, clip_name1, clip_name2, clip_name3, clip_name4, type="stable_diffusion"): + 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_path4 = folder_paths.get_full_path("clip", clip_name4) + clip_paths = (clip_path1, clip_path2, clip_path3, clip_path4) + clip_type = getattr(comfy.sd.CLIPType, type.upper(), comfy.sd.CLIPType.STABLE_DIFFUSION) + return (self.load_patcher(clip_paths, clip_type, self.load_data(clip_paths)),) + +NODE_CLASS_MAPPINGS = { + "UnetLoaderGGUF": UnetLoaderGGUF, + "CLIPLoaderGGUF": CLIPLoaderGGUF, + "DualCLIPLoaderGGUF": DualCLIPLoaderGGUF, + "TripleCLIPLoaderGGUF": TripleCLIPLoaderGGUF, + "QuadrupleCLIPLoaderGGUF": QuadrupleCLIPLoaderGGUF, + "UnetLoaderGGUFAdvanced": UnetLoaderGGUFAdvanced, +} + diff --git a/ComfyUI-GGUF/ops.py b/ComfyUI-GGUF/ops.py new file mode 100644 index 0000000000000000000000000000000000000000..88a352e2abc78055a7a6e3933fc46b77b8a5c4ac --- /dev/null +++ b/ComfyUI-GGUF/ops.py @@ -0,0 +1,281 @@ +# (c) City96 || Apache-2.0 (apache.org/licenses/LICENSE-2.0) +import gguf +import torch +import logging + +import comfy.ops +import comfy.lora +import comfy.model_management +from .dequant import dequantize_tensor, is_quantized + +def chained_hasattr(obj, chained_attr): + probe = obj + for attr in chained_attr.split('.'): + if hasattr(probe, attr): + probe = getattr(probe, attr) + else: + return False + return True + +# A bakcward and forward compatible way to get `torch.compiler.disable`. +def get_torch_compiler_disable_decorator(): + def dummy_decorator(*args, **kwargs): + def noop(x): + return x + return noop + + from packaging import version + + if not chained_hasattr(torch, "compiler.disable"): + logging.info("ComfyUI-GGUF: Torch too old for torch.compile - bypassing") + return dummy_decorator # torch too old + elif version.parse(torch.__version__) >= version.parse("2.8"): + logging.info("ComfyUI-GGUF: Allowing full torch compile") + return dummy_decorator # torch compile works + if chained_hasattr(torch, "_dynamo.config.nontraceable_tensor_subclasses"): + logging.info("ComfyUI-GGUF: Allowing full torch compile (nightly)") + return dummy_decorator # torch compile works, nightly before 2.8 release + else: + logging.info("ComfyUI-GGUF: Partial torch compile only, consider updating pytorch") + return torch.compiler.disable + +torch_compiler_disable = get_torch_compiler_disable_decorator() + +class GGMLTensor(torch.Tensor): + """ + Main tensor-like class for storing quantized weights + """ + def __init__(self, *args, tensor_type, tensor_shape, patches=[], **kwargs): + super().__init__() + self.tensor_type = tensor_type + self.tensor_shape = tensor_shape + self.patches = patches + + def __new__(cls, *args, tensor_type, tensor_shape, patches=[], **kwargs): + return super().__new__(cls, *args, **kwargs) + + def to(self, *args, **kwargs): + new = super().to(*args, **kwargs) + new.tensor_type = getattr(self, "tensor_type", None) + new.tensor_shape = getattr(self, "tensor_shape", new.data.shape) + new.patches = getattr(self, "patches", []).copy() + return new + + def clone(self, *args, **kwargs): + return self + + def detach(self, *args, **kwargs): + return self + + def copy_(self, *args, **kwargs): + # fixes .weight.copy_ in comfy/clip_model/CLIPTextModel + try: + return super().copy_(*args, **kwargs) + except Exception as e: + logging.warning(f"ignoring 'copy_' on tensor: {e}") + + def new_empty(self, size, *args, **kwargs): + # Intel Arc fix, ref#50 + new_tensor = super().new_empty(size, *args, **kwargs) + return GGMLTensor( + new_tensor, + tensor_type = getattr(self, "tensor_type", None), + tensor_shape = size, + patches = getattr(self, "patches", []).copy() + ) + + @property + def shape(self): + if not hasattr(self, "tensor_shape"): + self.tensor_shape = self.size() + return self.tensor_shape + +class GGMLLayer(torch.nn.Module): + """ + This (should) be responsible for de-quantizing on the fly + """ + comfy_cast_weights = True + dequant_dtype = None + patch_dtype = None + largest_layer = False + torch_compatible_tensor_types = {None, gguf.GGMLQuantizationType.F32, gguf.GGMLQuantizationType.F16} + + def is_ggml_quantized(self, *, weight=None, bias=None): + if weight is None: + weight = self.weight + if bias is None: + bias = self.bias + return is_quantized(weight) or is_quantized(bias) + + def _load_from_state_dict(self, state_dict, prefix, *args, **kwargs): + weight, bias = state_dict.get(f"{prefix}weight"), state_dict.get(f"{prefix}bias") + # NOTE: using modified load for linear due to not initializing on creation, see GGMLOps todo + if self.is_ggml_quantized(weight=weight, bias=bias) or isinstance(self, torch.nn.Linear): + return self.ggml_load_from_state_dict(state_dict, prefix, *args, **kwargs) + # Not strictly required, but fixes embedding shape mismatch. Threshold set in loader.py + if isinstance(self, torch.nn.Embedding) and self.weight.shape[0] >= (64 * 1024): + return self.ggml_load_from_state_dict(state_dict, prefix, *args, **kwargs) + return super()._load_from_state_dict(state_dict, prefix, *args, **kwargs) + + def ggml_load_from_state_dict(self, state_dict, prefix, local_metadata, strict, missing_keys, unexpected_keys, error_msgs): + prefix_len = len(prefix) + for k,v in state_dict.items(): + if k[prefix_len:] == "weight": + self.weight = torch.nn.Parameter(v, requires_grad=False) + elif k[prefix_len:] == "bias" and v is not None: + self.bias = torch.nn.Parameter(v, requires_grad=False) + else: + unexpected_keys.append(k) + + # For Linear layer with missing weight + if self.weight is None and isinstance(self, torch.nn.Linear): + v = torch.zeros(self.in_features, self.out_features) + self.weight = torch.nn.Parameter(v, requires_grad=False) + missing_keys.append(prefix+"weight") + + # for vram estimation (TODO: less fragile logic?) + if getattr(self.weight, "is_largest_weight", False): + self.largest_layer = True + + def _save_to_state_dict(self, *args, **kwargs): + if self.is_ggml_quantized(): + return self.ggml_save_to_state_dict(*args, **kwargs) + return super()._save_to_state_dict(*args, **kwargs) + + def ggml_save_to_state_dict(self, destination, prefix, keep_vars): + # This is a fake state dict for vram estimation + weight = torch.zeros_like(self.weight, device=torch.device("meta")) + destination[prefix + "weight"] = weight + if self.bias is not None: + bias = torch.zeros_like(self.bias, device=torch.device("meta")) + destination[prefix + "bias"] = bias + + # Take into account space required for dequantizing the largest tensor + if self.largest_layer: + shape = getattr(self.weight, "tensor_shape", self.weight.shape) + dtype = self.dequant_dtype if self.dequant_dtype and self.dequant_dtype != "target" else torch.float16 + temp = torch.empty(*shape, device=torch.device("meta"), dtype=dtype) + destination[prefix + "temp.weight"] = temp + + return + # This would return the dequantized state dict + destination[prefix + "weight"] = self.get_weight(self.weight) + if bias is not None: + destination[prefix + "bias"] = self.get_weight(self.bias) + + def get_weight(self, tensor, dtype): + if tensor is None: + return + + # consolidate and load patches to GPU in async + patch_list = [] + device = tensor.device + for patches, key in getattr(tensor, "patches", []): + patch_list += move_patch_to_device(patches, device) + + # dequantize tensor while patches load + weight = dequantize_tensor(tensor, dtype, self.dequant_dtype) + + # prevent propagating custom tensor class + if isinstance(weight, GGMLTensor): + weight = torch.Tensor(weight) + + # apply patches + if len(patch_list) > 0: + if self.patch_dtype is None: + weight = comfy.lora.calculate_weight(patch_list, weight, key) + else: + # for testing, may degrade image quality + patch_dtype = dtype if self.patch_dtype == "target" else self.patch_dtype + weight = comfy.lora.calculate_weight(patch_list, weight, key, patch_dtype) + return weight + + @torch_compiler_disable() + def cast_bias_weight(s, input=None, dtype=None, device=None, bias_dtype=None): + if input is not None: + if dtype is None: + dtype = getattr(input, "dtype", torch.float32) + if bias_dtype is None: + bias_dtype = dtype + if device is None: + device = input.device + + bias = None + non_blocking = comfy.model_management.device_supports_non_blocking(device) + if s.bias is not None: + bias = s.get_weight(s.bias.to(device), dtype) + bias = comfy.ops.cast_to(bias, bias_dtype, device, non_blocking=non_blocking, copy=False) + + weight = s.get_weight(s.weight.to(device), dtype) + weight = comfy.ops.cast_to(weight, dtype, device, non_blocking=non_blocking, copy=False) + return weight, bias + + def forward_comfy_cast_weights(self, input, *args, **kwargs): + if self.is_ggml_quantized(): + out = self.forward_ggml_cast_weights(input, *args, **kwargs) + else: + out = super().forward_comfy_cast_weights(input, *args, **kwargs) + + # non-ggml forward might still propagate custom tensor class + if isinstance(out, GGMLTensor): + out = torch.Tensor(out) + return out + + def forward_ggml_cast_weights(self, input): + raise NotImplementedError + +class GGMLOps(comfy.ops.manual_cast): + """ + Dequantize weights on the fly before doing the compute + """ + class Linear(GGMLLayer, comfy.ops.manual_cast.Linear): + def __init__(self, in_features, out_features, bias=True, device=None, dtype=None): + torch.nn.Module.__init__(self) + # TODO: better workaround for reserved memory spike on windows + # Issue is with `torch.empty` still reserving the full memory for the layer + # Windows doesn't over-commit memory so without this 24GB+ of pagefile is used + self.in_features = in_features + self.out_features = out_features + self.weight = None + self.bias = None + + def forward_ggml_cast_weights(self, input): + weight, bias = self.cast_bias_weight(input) + return torch.nn.functional.linear(input, weight, bias) + + class Conv2d(GGMLLayer, comfy.ops.manual_cast.Conv2d): + def forward_ggml_cast_weights(self, input): + weight, bias = self.cast_bias_weight(input) + return self._conv_forward(input, weight, bias) + + class Embedding(GGMLLayer, comfy.ops.manual_cast.Embedding): + def forward_ggml_cast_weights(self, input, out_dtype=None): + output_dtype = out_dtype + if self.weight.dtype == torch.float16 or self.weight.dtype == torch.bfloat16: + out_dtype = None + weight, _bias = self.cast_bias_weight(self, device=input.device, dtype=out_dtype) + return torch.nn.functional.embedding( + input, weight, self.padding_idx, self.max_norm, self.norm_type, self.scale_grad_by_freq, self.sparse + ).to(dtype=output_dtype) + + class LayerNorm(GGMLLayer, comfy.ops.manual_cast.LayerNorm): + def forward_ggml_cast_weights(self, input): + if self.weight is None: + return super().forward_comfy_cast_weights(input) + weight, bias = self.cast_bias_weight(input) + return torch.nn.functional.layer_norm(input, self.normalized_shape, weight, bias, self.eps) + + class GroupNorm(GGMLLayer, comfy.ops.manual_cast.GroupNorm): + def forward_ggml_cast_weights(self, input): + weight, bias = self.cast_bias_weight(input) + return torch.nn.functional.group_norm(input, self.num_groups, weight, bias, self.eps) + +def move_patch_to_device(item, device): + if isinstance(item, torch.Tensor): + return item.to(device, non_blocking=True) + elif isinstance(item, tuple): + return tuple(move_patch_to_device(x, device) for x in item) + elif isinstance(item, list): + return [move_patch_to_device(x, device) for x in item] + else: + return item diff --git a/ComfyUI-GGUF/pyproject.toml b/ComfyUI-GGUF/pyproject.toml new file mode 100644 index 0000000000000000000000000000000000000000..5ed7f7a628fee542ceb31bfc9730c11d7bdbd496 --- /dev/null +++ b/ComfyUI-GGUF/pyproject.toml @@ -0,0 +1,14 @@ +[project] +name = "ComfyUI-GGUF" +description = "GGUF Quantization support for native ComfyUI models." +version = "1.1.10" # 2.0.0 = GitHub main, 1.X.X = ComfyUI Registry +license = { file = "LICENSE" } +dependencies = ["gguf>=0.13.0", "sentencepiece", "protobuf"] + +[project.urls] +Repository = "https://github.com/city96/ComfyUI-GGUF" + +[tool.comfy] +PublisherId = "city96" +DisplayName = "ComfyUI-GGUF" +Icon = "" diff --git a/ComfyUI-GGUF/requirements.txt b/ComfyUI-GGUF/requirements.txt new file mode 100644 index 0000000000000000000000000000000000000000..f49905c79e1ea579a8e4fde0fbec966dcff2f2f8 --- /dev/null +++ b/ComfyUI-GGUF/requirements.txt @@ -0,0 +1,5 @@ +# main +gguf>=0.13.0 +# optional - tokenizer +sentencepiece +protobuf diff --git a/ComfyUI-GGUF/tools/README.md b/ComfyUI-GGUF/tools/README.md new file mode 100644 index 0000000000000000000000000000000000000000..228bc220593d7878ca854032638bdc2682c76a71 --- /dev/null +++ b/ComfyUI-GGUF/tools/README.md @@ -0,0 +1,93 @@ +## Converting initial model + +To convert your initial safetensors/ckpt model to FP16/BF16 GGUF, run the following command: + +``` +python convert.py --src E:\models\unet\flux1-dev.safetensors +``` +Make sure `gguf>=0.13.0` is installed for this step. Optionally, specify the output gguf file with the `--dst` arg. + +> [!NOTE] +> Do not use the diffusers UNET format for flux, it won't work, use the default/reference checkpoint key format. This is due to q/k/v being merged into one qkv key. +> You can convert it by loading it in ComfyUI and saving it using the built-in "ModelSave" node. + +> [!WARNING] +> For hunyuan video/wan 2.1, you will see a warning about 5D tensors. This means the script will save a **non functional** model to disk first, that you can quantize. I recommend saving these in a separate `raw` folder to avoid confusion. +> +> After quantization, you will have to run `fix_5d_tensor.py` manually to add back the missing key that was saved by the conversion code. + +## Quantizing using custom llama.cpp + +Depending on your git settings, you may need to run the following script first in order to make sure the patch file is valid. It will convert Windows (CRLF) line endings to Unix (LF) ones. + +``` +python fix_lines_ending.py +``` + +Git clone llama.cpp into the current folder: + +``` +git clone https://github.com/ggerganov/llama.cpp +``` + +Check out the correct branch, then apply the custom patch needed to add image model support to the repo you just cloned. + +``` +cd llama.cpp +git checkout tags/b3962 +git apply ..\lcpp.patch +``` + +Compile the llama-quantize binary. This example uses cmake, on linux you can just use make. + +### Visual Studio 2019, Linux, etc... + +``` +mkdir build +cmake -B build +cmake --build build --config Debug -j10 --target llama-quantize +cd .. +``` + +### Visual Studio 2022 + +``` +mkdir build +cmake -B build -DCMAKE_CXX_STANDARD=17 -DCMAKE_CXX_STANDARD_REQUIRED=ON -DCMAKE_CXX_FLAGS="-std=c++17" +``` + +Edit the `llama.cpp\common\log.cpp` file, inserts two lines after the existing first line: + +``` +#include "log.h" + +#define _SILENCE_CXX23_CHRONO_DEPRECATION_WARNING +#include +``` + +Then you can build the project: +``` +cmake --build build --config Debug -j10 --target llama-quantize +cd .. +``` + +### Quantize your model + + +Now you can use the newly build binary to quantize your model to the desired format: +``` +llama.cpp\build\bin\Debug\llama-quantize.exe E:\models\unet\flux1-dev-BF16.gguf E:\models\unet\flux1-dev-Q4_K_S.gguf Q4_K_S +``` + +You can extract the patch again with `git diff src\llama.cpp > lcpp.patch` if you wish to change something and contribute back. + +> [!WARNING] +> For hunyuan video/wan 2.1, you will have to run `fix_5d_tensor.py` after the quantization step is done. +> +> Example usage: `fix_5d_tensors.py --src E:\models\video\raw\wan2.1-t2v-1.3b-Q8_0.gguf --dst E:\models\video\wan2.1-t2v-1.3b-Q8_0.gguf` +> +> By default, this also saves a `fix_5d_tensors_[arch].safetensors` file in the `ComfyUI-GGUF/tools` folder, it's recommended to delete this after all models have been converted. + +> [!NOTE] +> Do not quantize SDXL / SD1 / other Conv2D heavy models. If you do, make sure to **extract the UNET model first**. +>This should be obvious, but also don't use the resulting llama-quantize binary with LLMs. diff --git a/ComfyUI-GGUF/tools/convert.py b/ComfyUI-GGUF/tools/convert.py new file mode 100644 index 0000000000000000000000000000000000000000..5029c874277358559f8855d3f1032963437a3e91 --- /dev/null +++ b/ComfyUI-GGUF/tools/convert.py @@ -0,0 +1,365 @@ +# (c) City96 || Apache-2.0 (apache.org/licenses/LICENSE-2.0) +import os +import gguf +import torch +import logging +import argparse +from tqdm import tqdm +from safetensors.torch import load_file, save_file + +QUANTIZATION_THRESHOLD = 1024 +REARRANGE_THRESHOLD = 512 +MAX_TENSOR_NAME_LENGTH = 127 +MAX_TENSOR_DIMS = 4 + +class ModelTemplate: + arch = "invalid" # string describing architecture + shape_fix = False # whether to reshape tensors + keys_detect = [] # list of lists to match in state dict + keys_banned = [] # list of keys that should mark model as invalid for conversion + keys_hiprec = [] # list of keys that need to be kept in fp32 for some reason + keys_ignore = [] # list of strings to ignore keys by when found + + def handle_nd_tensor(self, key, data): + raise NotImplementedError(f"Tensor detected that exceeds dims supported by C++ code! ({key} @ {data.shape})") + +class ModelFlux(ModelTemplate): + arch = "flux" + keys_detect = [ + ("transformer_blocks.0.attn.norm_added_k.weight",), + ("double_blocks.0.img_attn.proj.weight",), + ] + keys_banned = ["transformer_blocks.0.attn.norm_added_k.weight",] + +class ModelSD3(ModelTemplate): + arch = "sd3" + keys_detect = [ + ("transformer_blocks.0.attn.add_q_proj.weight",), + ("joint_blocks.0.x_block.attn.qkv.weight",), + ] + keys_banned = ["transformer_blocks.0.attn.add_q_proj.weight",] + +class ModelAura(ModelTemplate): + arch = "aura" + keys_detect = [ + ("double_layers.3.modX.1.weight",), + ("joint_transformer_blocks.3.ff_context.out_projection.weight",), + ] + keys_banned = ["joint_transformer_blocks.3.ff_context.out_projection.weight",] + +class ModelHiDream(ModelTemplate): + arch = "hidream" + keys_detect = [ + ( + "caption_projection.0.linear.weight", + "double_stream_blocks.0.block.ff_i.shared_experts.w3.weight" + ) + ] + keys_hiprec = [ + # nn.parameter, can't load from BF16 ver + ".ff_i.gate.weight", + "img_emb.emb_pos" + ] + +class CosmosPredict2(ModelTemplate): + arch = "cosmos" + keys_detect = [ + ( + "blocks.0.mlp.layer1.weight", + "blocks.0.adaln_modulation_cross_attn.1.weight", + ) + ] + keys_hiprec = ["pos_embedder"] + keys_ignore = ["_extra_state", "accum_"] + +class ModelHyVid(ModelTemplate): + arch = "hyvid" + keys_detect = [ + ( + "double_blocks.0.img_attn_proj.weight", + "txt_in.individual_token_refiner.blocks.1.self_attn_qkv.weight", + ) + ] + + def handle_nd_tensor(self, key, data): + # hacky but don't have any better ideas + path = f"./fix_5d_tensors_{self.arch}.safetensors" # TODO: somehow get a path here?? + if os.path.isfile(path): + raise RuntimeError(f"5D tensor fix file already exists! {path}") + fsd = {key: torch.from_numpy(data)} + tqdm.write(f"5D key found in state dict! Manual fix required! - {key} {data.shape}") + save_file(fsd, path) + +class ModelWan(ModelHyVid): + arch = "wan" + keys_detect = [ + ( + "blocks.0.self_attn.norm_q.weight", + "text_embedding.2.weight", + "head.modulation", + ) + ] + keys_hiprec = [ + ".modulation" # nn.parameter, can't load from BF16 ver + ] + +class ModelLTXV(ModelTemplate): + arch = "ltxv" + keys_detect = [ + ( + "adaln_single.emb.timestep_embedder.linear_2.weight", + "transformer_blocks.27.scale_shift_table", + "caption_projection.linear_2.weight", + ) + ] + keys_hiprec = [ + "scale_shift_table" # nn.parameter, can't load from BF16 base quant + ] + +class ModelSDXL(ModelTemplate): + arch = "sdxl" + shape_fix = True + keys_detect = [ + ("down_blocks.0.downsamplers.0.conv.weight", "add_embedding.linear_1.weight",), + ( + "input_blocks.3.0.op.weight", "input_blocks.6.0.op.weight", + "output_blocks.2.2.conv.weight", "output_blocks.5.2.conv.weight", + ), # Non-diffusers + ("label_emb.0.0.weight",), + ] + +class ModelSD1(ModelTemplate): + arch = "sd1" + shape_fix = True + keys_detect = [ + ("down_blocks.0.downsamplers.0.conv.weight",), + ( + "input_blocks.3.0.op.weight", "input_blocks.6.0.op.weight", "input_blocks.9.0.op.weight", + "output_blocks.2.1.conv.weight", "output_blocks.5.2.conv.weight", "output_blocks.8.2.conv.weight" + ), # Non-diffusers + ] + +class ModelLumina2(ModelTemplate): + arch = "lumina2" + keys_detect = [ + ("cap_embedder.1.weight", "context_refiner.0.attention.qkv.weight") + ] + +arch_list = [ModelFlux, ModelSD3, ModelAura, ModelHiDream, CosmosPredict2, + ModelLTXV, ModelHyVid, ModelWan, ModelSDXL, ModelSD1, ModelLumina2] + +def is_model_arch(model, state_dict): + # check if model is correct + matched = False + invalid = False + for match_list in model.keys_detect: + if all(key in state_dict for key in match_list): + matched = True + invalid = any(key in state_dict for key in model.keys_banned) + break + assert not invalid, "Model architecture not allowed for conversion! (i.e. reference VS diffusers format)" + return matched + +def detect_arch(state_dict): + model_arch = None + for arch in arch_list: + if is_model_arch(arch, state_dict): + model_arch = arch() + break + assert model_arch is not None, "Unknown model architecture!" + return model_arch + +def parse_args(): + parser = argparse.ArgumentParser(description="Generate F16 GGUF files from single UNET") + parser.add_argument("--src", required=True, help="Source model ckpt file.") + parser.add_argument("--dst", help="Output unet gguf file.") + args = parser.parse_args() + + if not os.path.isfile(args.src): + parser.error("No input provided!") + + return args + +def strip_prefix(state_dict): + # prefix for mixed state dict + prefix = None + for pfx in ["model.diffusion_model.", "model."]: + if any([x.startswith(pfx) for x in state_dict.keys()]): + prefix = pfx + break + + # prefix for uniform state dict + if prefix is None: + for pfx in ["net."]: + if all([x.startswith(pfx) for x in state_dict.keys()]): + prefix = pfx + break + + # strip prefix if found + if prefix is not None: + logging.info(f"State dict prefix found: '{prefix}'") + sd = {} + for k, v in state_dict.items(): + if prefix not in k: + continue + k = k.replace(prefix, "") + sd[k] = v + else: + logging.debug("State dict has no prefix") + sd = state_dict + + return sd + +def load_state_dict(path): + if any(path.endswith(x) for x in [".ckpt", ".pt", ".bin", ".pth"]): + state_dict = torch.load(path, map_location="cpu", weights_only=True) + for subkey in ["model", "module"]: + if subkey in state_dict: + state_dict = state_dict[subkey] + break + if len(state_dict) < 20: + raise RuntimeError(f"pt subkey load failed: {state_dict.keys()}") + else: + state_dict = load_file(path) + + return strip_prefix(state_dict) + +def handle_tensors(writer, state_dict, model_arch): + name_lengths = tuple(sorted( + ((key, len(key)) for key in state_dict.keys()), + key=lambda item: item[1], + reverse=True, + )) + if not name_lengths: + return + max_name_len = name_lengths[0][1] + if max_name_len > MAX_TENSOR_NAME_LENGTH: + bad_list = ", ".join(f"{key!r} ({namelen})" for key, namelen in name_lengths if namelen > MAX_TENSOR_NAME_LENGTH) + raise ValueError(f"Can only handle tensor names up to {MAX_TENSOR_NAME_LENGTH} characters. Tensors exceeding the limit: {bad_list}") + for key, data in tqdm(state_dict.items()): + old_dtype = data.dtype + + if any(x in key for x in model_arch.keys_ignore): + tqdm.write(f"Filtering ignored key: '{key}'") + continue + + if data.dtype == torch.bfloat16: + data = data.to(torch.float32).numpy() + # this is so we don't break torch 2.0.X + elif data.dtype in [getattr(torch, "float8_e4m3fn", "_invalid"), getattr(torch, "float8_e5m2", "_invalid")]: + data = data.to(torch.float16).numpy() + else: + data = data.numpy() + + n_dims = len(data.shape) + data_shape = data.shape + if old_dtype == torch.bfloat16: + data_qtype = gguf.GGMLQuantizationType.BF16 + # elif old_dtype == torch.float32: + # data_qtype = gguf.GGMLQuantizationType.F32 + else: + data_qtype = gguf.GGMLQuantizationType.F16 + + # The max no. of dimensions that can be handled by the quantization code is 4 + if len(data.shape) > MAX_TENSOR_DIMS: + model_arch.handle_nd_tensor(key, data) + continue # needs to be added back later + + # get number of parameters (AKA elements) in this tensor + n_params = 1 + for dim_size in data_shape: + n_params *= dim_size + + if old_dtype in (torch.float32, torch.bfloat16): + if n_dims == 1: + # one-dimensional tensors should be kept in F32 + # also speeds up inference due to not dequantizing + data_qtype = gguf.GGMLQuantizationType.F32 + + elif n_params <= QUANTIZATION_THRESHOLD: + # very small tensors + data_qtype = gguf.GGMLQuantizationType.F32 + + elif any(x in key for x in model_arch.keys_hiprec): + # tensors that require max precision + data_qtype = gguf.GGMLQuantizationType.F32 + + if (model_arch.shape_fix # NEVER reshape for models such as flux + and n_dims > 1 # Skip one-dimensional tensors + and n_params >= REARRANGE_THRESHOLD # Only rearrange tensors meeting the size requirement + and (n_params / 256).is_integer() # Rearranging only makes sense if total elements is divisible by 256 + and not (data.shape[-1] / 256).is_integer() # Only need to rearrange if the last dimension is not divisible by 256 + ): + orig_shape = data.shape + data = data.reshape(n_params // 256, 256) + writer.add_array(f"comfy.gguf.orig_shape.{key}", tuple(int(dim) for dim in orig_shape)) + + try: + data = gguf.quants.quantize(data, data_qtype) + except (AttributeError, gguf.QuantError) as e: + tqdm.write(f"falling back to F16: {e}") + data_qtype = gguf.GGMLQuantizationType.F16 + data = gguf.quants.quantize(data, data_qtype) + + new_name = key # do we need to rename? + + shape_str = f"{{{', '.join(str(n) for n in reversed(data.shape))}}}" + tqdm.write(f"{f'%-{max_name_len + 4}s' % f'{new_name}'} {old_dtype} --> {data_qtype.name}, shape = {shape_str}") + + writer.add_tensor(new_name, data, raw_dtype=data_qtype) + +def convert_file(path, dst_path=None, interact=True, overwrite=False): + # load & run model detection logic + state_dict = load_state_dict(path) + model_arch = detect_arch(state_dict) + logging.info(f"* Architecture detected from input: {model_arch.arch}") + + # detect & set dtype for output file + dtypes = [x.dtype for x in state_dict.values()] + dtypes = {x:dtypes.count(x) for x in set(dtypes)} + main_dtype = max(dtypes, key=dtypes.get) + + if main_dtype == torch.bfloat16: + ftype_name = "BF16" + ftype_gguf = gguf.LlamaFileType.MOSTLY_BF16 + # elif main_dtype == torch.float32: + # ftype_name = "F32" + # ftype_gguf = None + else: + ftype_name = "F16" + ftype_gguf = gguf.LlamaFileType.MOSTLY_F16 + + if dst_path is None: + dst_path = f"{os.path.splitext(path)[0]}-{ftype_name}.gguf" + elif "{ftype}" in dst_path: # lcpp logic + dst_path = dst_path.replace("{ftype}", ftype_name) + + if os.path.isfile(dst_path) and not overwrite: + if interact: + input("Output exists enter to continue or ctrl+c to abort!") + else: + raise OSError("Output exists and overwriting is disabled!") + + # handle actual file + writer = gguf.GGUFWriter(path=None, arch=model_arch.arch) + writer.add_quantization_version(gguf.GGML_QUANT_VERSION) + if ftype_gguf is not None: + writer.add_file_type(ftype_gguf) + + handle_tensors(writer, state_dict, model_arch) + writer.write_header_to_file(path=dst_path) + writer.write_kv_data_to_file() + writer.write_tensors_to_file(progress=True) + writer.close() + + fix = f"./fix_5d_tensors_{model_arch.arch}.safetensors" + if os.path.isfile(fix): + logging.warning(f"\n### Warning! Fix file found at '{fix}'") + logging.warning(" you most likely need to run 'fix_5d_tensors.py' after quantization.") + + return dst_path, model_arch + +if __name__ == "__main__": + args = parse_args() + convert_file(args.src, args.dst) + diff --git a/ComfyUI-GGUF/tools/fix_5d_tensors.py b/ComfyUI-GGUF/tools/fix_5d_tensors.py new file mode 100644 index 0000000000000000000000000000000000000000..0e61d1c2e5f2572c3d9fa12eba38c84f13689a53 --- /dev/null +++ b/ComfyUI-GGUF/tools/fix_5d_tensors.py @@ -0,0 +1,82 @@ +# (c) City96 || Apache-2.0 (apache.org/licenses/LICENSE-2.0) +import os +import gguf +import torch +import argparse +from tqdm import tqdm +from safetensors.torch import load_file + +def get_args(): + parser = argparse.ArgumentParser() + parser.add_argument("--src", required=True) + parser.add_argument("--dst", required=True) + parser.add_argument("--fix", required=False, help="Defaults to ./fix_5d_tensors_[arch].pt") + parser.add_argument("--overwrite", action="store_true") + args = parser.parse_args() + + if not os.path.isfile(args.src): + parser.error(f"Invalid source file '{args.src}'") + if not args.overwrite and os.path.exists(args.dst): + parser.error(f"Output exists, use '--overwrite' ({args.dst})") + + return args + +def get_arch_str(reader): + field = reader.get_field("general.architecture") + return str(field.parts[field.data[-1]], encoding="utf-8") + +def get_file_type(reader): + field = reader.get_field("general.file_type") + ft = int(field.parts[field.data[-1]]) + return gguf.LlamaFileType(ft) + +if __name__ == "__main__": + args = get_args() + + # read existing + reader = gguf.GGUFReader(args.src) + arch = get_arch_str(reader) + file_type = get_file_type(reader) + print(f"Detected arch: '{arch}' (ftype: {str(file_type)})") + + # prep fix + if args.fix is None: + args.fix = f"./fix_5d_tensors_{arch}.safetensors" + + if not os.path.isfile(args.fix): + raise OSError(f"No 5D tensor fix file: {args.fix}") + + sd5d = load_file(args.fix) + sd5d = {k:v.numpy() for k,v in sd5d.items()} + print("5D tensors:", sd5d.keys()) + + # prep output + writer = gguf.GGUFWriter(path=None, arch=arch) + writer.add_quantization_version(gguf.GGML_QUANT_VERSION) + writer.add_file_type(file_type) + + added = [] + def add_extra_key(writer, key, data): + global added + data_qtype = gguf.GGMLQuantizationType.F32 + data = gguf.quants.quantize(data, data_qtype) + tqdm.write(f"Adding key {key} ({data.shape})") + writer.add_tensor(key, data, raw_dtype=data_qtype) + added.append(key) + + # main loop to add missing 5D tensor(s) + for tensor in tqdm(reader.tensors): + writer.add_tensor(tensor.name, tensor.data, raw_dtype=tensor.tensor_type) + key5d = tensor.name.replace(".bias", ".weight") + if key5d in sd5d.keys(): + add_extra_key(writer, key5d, sd5d[key5d]) + + # brute force for any missed + for key, data in sd5d.items(): + if key not in added: + add_extra_key(writer, key, data) + + writer.write_header_to_file(path=args.dst) + writer.write_kv_data_to_file() + writer.write_tensors_to_file(progress=True) + writer.close() diff --git a/ComfyUI-GGUF/tools/fix_lines_ending.py b/ComfyUI-GGUF/tools/fix_lines_ending.py new file mode 100644 index 0000000000000000000000000000000000000000..346e3501fb7682fa3754f175965aa750241fe4ac --- /dev/null +++ b/ComfyUI-GGUF/tools/fix_lines_ending.py @@ -0,0 +1,31 @@ +import os + +files = ["lcpp.patch", "lcpp_sd3.patch"] + +def has_unix_line_endings(file_path): + try: + with open(file_path, 'rb') as file: + content = file.read() + return b'\r\n' not in content + except Exception as e: + print(f"Error checking '{file_path}': {e}") + return False + +def convert_to_linux_format(file_path): + try: + with open(file_path, 'rb') as file: + content = file.read().replace(b'\r\n', b'\n') + with open(file_path, 'wb') as file: + file.write(content) + print(f"'{file_path}' converted to Linux line endings (LF).") + except Exception as e: + print(f"Error processing '{file_path}': {e}") + +for file in files: + if os.path.exists(file): + if has_unix_line_endings(file): + print(f"'{file}' already has Unix line endings (LF). No conversion needed.") + else: + convert_to_linux_format(file) + else: + print(f"File '{file}' does not exist.") diff --git a/ComfyUI-GGUF/tools/lcpp.patch b/ComfyUI-GGUF/tools/lcpp.patch new file mode 100644 index 0000000000000000000000000000000000000000..92396e17b4ecf281265f07603232d23111ee9baa --- /dev/null +++ b/ComfyUI-GGUF/tools/lcpp.patch @@ -0,0 +1,451 @@ +diff --git a/ggml/include/ggml.h b/ggml/include/ggml.h +index de3c706f..0267c1fa 100644 +--- a/ggml/include/ggml.h ++++ b/ggml/include/ggml.h +@@ -223,7 +223,7 @@ + #define GGML_MAX_OP_PARAMS 64 + + #ifndef GGML_MAX_NAME +-# define GGML_MAX_NAME 64 ++# define GGML_MAX_NAME 128 + #endif + + #define GGML_DEFAULT_N_THREADS 4 +@@ -2449,6 +2449,7 @@ extern "C" { + + // manage tensor info + GGML_API void gguf_add_tensor(struct gguf_context * ctx, const struct ggml_tensor * tensor); ++ GGML_API void gguf_set_tensor_ndim(struct gguf_context * ctx, const char * name, int n_dim); + GGML_API void gguf_set_tensor_type(struct gguf_context * ctx, const char * name, enum ggml_type type); + GGML_API void gguf_set_tensor_data(struct gguf_context * ctx, const char * name, const void * data, size_t size); + +diff --git a/ggml/src/ggml.c b/ggml/src/ggml.c +index b16c462f..6d1568f1 100644 +--- a/ggml/src/ggml.c ++++ b/ggml/src/ggml.c +@@ -22960,6 +22960,14 @@ void gguf_add_tensor( + ctx->header.n_tensors++; + } + ++void gguf_set_tensor_ndim(struct gguf_context * ctx, const char * name, const int n_dim) { ++ const int idx = gguf_find_tensor(ctx, name); ++ if (idx < 0) { ++ GGML_ABORT("tensor not found"); ++ } ++ ctx->infos[idx].n_dims = n_dim; ++} ++ + void gguf_set_tensor_type(struct gguf_context * ctx, const char * name, enum ggml_type type) { + const int idx = gguf_find_tensor(ctx, name); + if (idx < 0) { +diff --git a/src/llama.cpp b/src/llama.cpp +index 24e1f1f0..25db4c69 100644 +--- a/src/llama.cpp ++++ b/src/llama.cpp +@@ -205,6 +205,17 @@ enum llm_arch { + LLM_ARCH_GRANITE, + LLM_ARCH_GRANITE_MOE, + LLM_ARCH_CHAMELEON, ++ LLM_ARCH_FLUX, ++ LLM_ARCH_SD1, ++ LLM_ARCH_SDXL, ++ LLM_ARCH_SD3, ++ LLM_ARCH_AURA, ++ LLM_ARCH_LTXV, ++ LLM_ARCH_HYVID, ++ LLM_ARCH_WAN, ++ LLM_ARCH_HIDREAM, ++ LLM_ARCH_COSMOS, ++ LLM_ARCH_LUMINA2, + LLM_ARCH_UNKNOWN, + }; + +@@ -258,6 +269,17 @@ static const std::map LLM_ARCH_NAMES = { + { LLM_ARCH_GRANITE, "granite" }, + { LLM_ARCH_GRANITE_MOE, "granitemoe" }, + { LLM_ARCH_CHAMELEON, "chameleon" }, ++ { LLM_ARCH_FLUX, "flux" }, ++ { LLM_ARCH_SD1, "sd1" }, ++ { LLM_ARCH_SDXL, "sdxl" }, ++ { LLM_ARCH_SD3, "sd3" }, ++ { LLM_ARCH_AURA, "aura" }, ++ { LLM_ARCH_LTXV, "ltxv" }, ++ { LLM_ARCH_HYVID, "hyvid" }, ++ { LLM_ARCH_WAN, "wan" }, ++ { LLM_ARCH_HIDREAM, "hidream" }, ++ { LLM_ARCH_COSMOS, "cosmos" }, ++ { LLM_ARCH_LUMINA2, "lumina2" }, + { LLM_ARCH_UNKNOWN, "(unknown)" }, + }; + +@@ -1531,6 +1553,17 @@ static const std::map> LLM_TENSOR_N + { LLM_TENSOR_ATTN_K_NORM, "blk.%d.attn_k_norm" }, + }, + }, ++ { LLM_ARCH_FLUX, {}}, ++ { LLM_ARCH_SD1, {}}, ++ { LLM_ARCH_SDXL, {}}, ++ { LLM_ARCH_SD3, {}}, ++ { LLM_ARCH_AURA, {}}, ++ { LLM_ARCH_LTXV, {}}, ++ { LLM_ARCH_HYVID, {}}, ++ { LLM_ARCH_WAN, {}}, ++ { LLM_ARCH_HIDREAM, {}}, ++ { LLM_ARCH_COSMOS, {}}, ++ { LLM_ARCH_LUMINA2, {}}, + { + LLM_ARCH_UNKNOWN, + { +@@ -5403,6 +5436,25 @@ static void llm_load_hparams( + // get general kv + ml.get_key(LLM_KV_GENERAL_NAME, model.name, false); + ++ // Disable LLM metadata for image models ++ switch (model.arch) { ++ case LLM_ARCH_FLUX: ++ case LLM_ARCH_SD1: ++ case LLM_ARCH_SDXL: ++ case LLM_ARCH_SD3: ++ case LLM_ARCH_AURA: ++ case LLM_ARCH_LTXV: ++ case LLM_ARCH_HYVID: ++ case LLM_ARCH_WAN: ++ case LLM_ARCH_HIDREAM: ++ case LLM_ARCH_COSMOS: ++ case LLM_ARCH_LUMINA2: ++ model.ftype = ml.ftype; ++ return; ++ default: ++ break; ++ } ++ + // get hparams kv + ml.get_key(LLM_KV_VOCAB_SIZE, hparams.n_vocab, false) || ml.get_arr_n(LLM_KV_TOKENIZER_LIST, hparams.n_vocab); + +@@ -18016,6 +18068,134 @@ static void llama_tensor_dequantize_internal( + workers.clear(); + } + ++static ggml_type img_tensor_get_type(quantize_state_internal & qs, ggml_type new_type, const ggml_tensor * tensor, llama_ftype ftype) { ++ // Special function for quantizing image model tensors ++ const std::string name = ggml_get_name(tensor); ++ const llm_arch arch = qs.model.arch; ++ ++ // Sanity check ++ if ( ++ (name.find("model.diffusion_model.") != std::string::npos) || ++ (name.find("first_stage_model.") != std::string::npos) || ++ (name.find("single_transformer_blocks.") != std::string::npos) || ++ (name.find("joint_transformer_blocks.") != std::string::npos) ++ ) { ++ throw std::runtime_error("Invalid input GGUF file. This is not a supported UNET model"); ++ } ++ ++ // Unsupported quant types - exclude all IQ quants for now ++ if (ftype == LLAMA_FTYPE_MOSTLY_IQ2_XXS || ftype == LLAMA_FTYPE_MOSTLY_IQ2_XS || ++ ftype == LLAMA_FTYPE_MOSTLY_IQ2_S || ftype == LLAMA_FTYPE_MOSTLY_IQ2_M || ++ ftype == LLAMA_FTYPE_MOSTLY_IQ3_XXS || ftype == LLAMA_FTYPE_MOSTLY_IQ1_S || ++ ftype == LLAMA_FTYPE_MOSTLY_IQ1_M || ftype == LLAMA_FTYPE_MOSTLY_IQ4_NL || ++ ftype == LLAMA_FTYPE_MOSTLY_IQ4_XS || ftype == LLAMA_FTYPE_MOSTLY_IQ3_S || ++ ftype == LLAMA_FTYPE_MOSTLY_IQ3_M || ftype == LLAMA_FTYPE_MOSTLY_Q4_0_4_4 || ++ ftype == LLAMA_FTYPE_MOSTLY_Q4_0_4_8 || ftype == LLAMA_FTYPE_MOSTLY_Q4_0_8_8) { ++ throw std::runtime_error("Invalid quantization type for image model (Not supported)"); ++ } ++ ++ if ( // Rules for to_v attention ++ (name.find("attn_v.weight") != std::string::npos) || ++ (name.find(".to_v.weight") != std::string::npos) || ++ (name.find(".v.weight") != std::string::npos) || ++ (name.find(".attn.w1v.weight") != std::string::npos) || ++ (name.find(".attn.w2v.weight") != std::string::npos) || ++ (name.find("_attn.v_proj.weight") != std::string::npos) ++ ){ ++ if (ftype == LLAMA_FTYPE_MOSTLY_Q2_K) { ++ new_type = GGML_TYPE_Q3_K; ++ } ++ else if (ftype == LLAMA_FTYPE_MOSTLY_Q3_K_M) { ++ new_type = qs.i_attention_wv < 2 ? GGML_TYPE_Q5_K : GGML_TYPE_Q4_K; ++ } ++ else if (ftype == LLAMA_FTYPE_MOSTLY_Q3_K_L) { ++ new_type = GGML_TYPE_Q5_K; ++ } ++ else if (ftype == LLAMA_FTYPE_MOSTLY_Q4_K_M || ftype == LLAMA_FTYPE_MOSTLY_Q5_K_M) { ++ new_type = GGML_TYPE_Q6_K; ++ } ++ else if (ftype == LLAMA_FTYPE_MOSTLY_Q4_K_S && qs.i_attention_wv < 4) { ++ new_type = GGML_TYPE_Q5_K; ++ } ++ ++qs.i_attention_wv; ++ } else if ( // Rules for fused qkv attention ++ (name.find("attn_qkv.weight") != std::string::npos) || ++ (name.find("attn.qkv.weight") != std::string::npos) || ++ (name.find("attention.qkv.weight") != std::string::npos) ++ ) { ++ if (ftype == LLAMA_FTYPE_MOSTLY_Q3_K_M || ftype == LLAMA_FTYPE_MOSTLY_Q3_K_L) { ++ new_type = GGML_TYPE_Q4_K; ++ } ++ else if (ftype == LLAMA_FTYPE_MOSTLY_Q4_K_M) { ++ new_type = GGML_TYPE_Q5_K; ++ } ++ else if (ftype == LLAMA_FTYPE_MOSTLY_Q5_K_M) { ++ new_type = GGML_TYPE_Q6_K; ++ } ++ } else if ( // Rules for ffn ++ (name.find("ffn_down") != std::string::npos) || ++ ((name.find("experts.") != std::string::npos) && (name.find(".w2.weight") != std::string::npos)) || ++ (name.find(".ffn.2.weight") != std::string::npos) || // is this even the right way around? ++ (name.find(".ff.net.2.weight") != std::string::npos) || ++ (name.find(".mlp.layer2.weight") != std::string::npos) || ++ (name.find(".adaln_modulation_mlp.2.weight") != std::string::npos) || ++ (name.find(".feed_forward.w2.weight") != std::string::npos) ++ ) { ++ // TODO: add back `layer_info` with some model specific logic + logic further down ++ if (ftype == LLAMA_FTYPE_MOSTLY_Q3_K_M) { ++ new_type = GGML_TYPE_Q4_K; ++ } ++ else if (ftype == LLAMA_FTYPE_MOSTLY_Q3_K_L) { ++ new_type = GGML_TYPE_Q5_K; ++ } ++ else if (ftype == LLAMA_FTYPE_MOSTLY_Q4_K_S) { ++ new_type = GGML_TYPE_Q5_K; ++ } ++ else if (ftype == LLAMA_FTYPE_MOSTLY_Q4_K_M) { ++ new_type = GGML_TYPE_Q6_K; ++ } ++ else if (ftype == LLAMA_FTYPE_MOSTLY_Q5_K_M) { ++ new_type = GGML_TYPE_Q6_K; ++ } ++ else if (ftype == LLAMA_FTYPE_MOSTLY_Q4_0) { ++ new_type = GGML_TYPE_Q4_1; ++ } ++ else if (ftype == LLAMA_FTYPE_MOSTLY_Q5_0) { ++ new_type = GGML_TYPE_Q5_1; ++ } ++ ++qs.i_ffn_down; ++ } ++ ++ // Sanity check for row shape ++ bool convert_incompatible_tensor = false; ++ if (new_type == GGML_TYPE_Q2_K || new_type == GGML_TYPE_Q3_K || new_type == GGML_TYPE_Q4_K || ++ new_type == GGML_TYPE_Q5_K || new_type == GGML_TYPE_Q6_K) { ++ int nx = tensor->ne[0]; ++ int ny = tensor->ne[1]; ++ if (nx % QK_K != 0) { ++ LLAMA_LOG_WARN("\n\n%s : tensor cols %d x %d are not divisible by %d, required for %s", __func__, nx, ny, QK_K, ggml_type_name(new_type)); ++ convert_incompatible_tensor = true; ++ } else { ++ ++qs.n_k_quantized; ++ } ++ } ++ if (convert_incompatible_tensor) { ++ // TODO: Possibly reenable this in the future ++ // switch (new_type) { ++ // case GGML_TYPE_Q2_K: ++ // case GGML_TYPE_Q3_K: ++ // case GGML_TYPE_Q4_K: new_type = GGML_TYPE_Q5_0; break; ++ // case GGML_TYPE_Q5_K: new_type = GGML_TYPE_Q5_1; break; ++ // case GGML_TYPE_Q6_K: new_type = GGML_TYPE_Q8_0; break; ++ // default: throw std::runtime_error("\nUnsupported tensor size encountered\n"); ++ // } ++ new_type = GGML_TYPE_F16; ++ LLAMA_LOG_WARN(" - using fallback quantization %s\n", ggml_type_name(new_type)); ++ ++qs.n_fallback; ++ } ++ return new_type; ++} ++ + static ggml_type llama_tensor_get_type(quantize_state_internal & qs, ggml_type new_type, const ggml_tensor * tensor, llama_ftype ftype) { + const std::string name = ggml_get_name(tensor); + +@@ -18513,7 +18693,9 @@ static void llama_model_quantize_internal(const std::string & fname_inp, const s + if (llama_model_has_encoder(&model)) { + n_attn_layer *= 3; + } +- GGML_ASSERT((qs.n_attention_wv == n_attn_layer) && "n_attention_wv is unexpected"); ++ if (model.arch != LLM_ARCH_HYVID) { // TODO: Check why this fails ++ GGML_ASSERT((qs.n_attention_wv == n_attn_layer) && "n_attention_wv is unexpected"); ++ } + } + + size_t total_size_org = 0; +@@ -18547,6 +18729,51 @@ static void llama_model_quantize_internal(const std::string & fname_inp, const s + ctx_outs[i_split] = gguf_init_empty(); + } + gguf_add_tensor(ctx_outs[i_split], tensor); ++ // SD3 pos_embed needs special fix as first dim is 1, which gets truncated here ++ if (model.arch == LLM_ARCH_SD3) { ++ const std::string name = ggml_get_name(tensor); ++ if (name == "pos_embed" && tensor->ne[2] == 1) { ++ const int n_dim = 3; ++ gguf_set_tensor_ndim(ctx_outs[i_split], "pos_embed", n_dim); ++ LLAMA_LOG_INFO("\n%s: Correcting pos_embed shape for SD3: [key:%s]\n", __func__, tensor->name); ++ } ++ } ++ // same goes for auraflow ++ if (model.arch == LLM_ARCH_AURA) { ++ const std::string name = ggml_get_name(tensor); ++ if (name == "positional_encoding" && tensor->ne[2] == 1) { ++ const int n_dim = 3; ++ gguf_set_tensor_ndim(ctx_outs[i_split], "positional_encoding", n_dim); ++ LLAMA_LOG_INFO("\n%s: Correcting positional_encoding shape for AuraFlow: [key:%s]\n", __func__, tensor->name); ++ } ++ if (name == "register_tokens" && tensor->ne[2] == 1) { ++ const int n_dim = 3; ++ gguf_set_tensor_ndim(ctx_outs[i_split], "register_tokens", n_dim); ++ LLAMA_LOG_INFO("\n%s: Correcting register_tokens shape for AuraFlow: [key:%s]\n", __func__, tensor->name); ++ } ++ } ++ // conv3d fails due to max dims - unsure what to do here as we never even reach this check ++ if (model.arch == LLM_ARCH_HYVID) { ++ const std::string name = ggml_get_name(tensor); ++ if (name == "img_in.proj.weight" && tensor->ne[5] != 1 ) { ++ throw std::runtime_error("img_in.proj.weight size failed for HyVid"); ++ } ++ } ++ // All the modulation layers also have dim1, and I think conv3d fails here too but we segfaul way before that... ++ if (model.arch == LLM_ARCH_WAN) { ++ const std::string name = ggml_get_name(tensor); ++ if (name.find(".modulation") != std::string::npos && tensor->ne[2] == 1) { ++ const int n_dim = 3; ++ gguf_set_tensor_ndim(ctx_outs[i_split], tensor->name, n_dim); ++ LLAMA_LOG_INFO("\n%s: Correcting shape for Wan: [key:%s]\n", __func__, tensor->name); ++ } ++ // FLF2V model only ++ if (name == "img_emb.emb_pos") { ++ const int n_dim = 3; ++ gguf_set_tensor_ndim(ctx_outs[i_split], tensor->name, n_dim); ++ LLAMA_LOG_INFO("\n%s: Correcting shape for Wan FLF2V: [key:%s]\n", __func__, tensor->name); ++ } ++ } + } + + // Set split info if needed +@@ -18647,6 +18874,110 @@ static void llama_model_quantize_internal(const std::string & fname_inp, const s + // do not quantize relative position bias (T5) + quantize &= name.find("attn_rel_b.weight") == std::string::npos; + ++ // rules for image models ++ bool image_model = false; ++ if (model.arch == LLM_ARCH_FLUX) { ++ image_model = true; ++ quantize &= name.find("txt_in.") == std::string::npos; ++ quantize &= name.find("img_in.") == std::string::npos; ++ quantize &= name.find("time_in.") == std::string::npos; ++ quantize &= name.find("vector_in.") == std::string::npos; ++ quantize &= name.find("guidance_in.") == std::string::npos; ++ quantize &= name.find("final_layer.") == std::string::npos; ++ } ++ if (model.arch == LLM_ARCH_SD1 || model.arch == LLM_ARCH_SDXL) { ++ image_model = true; ++ quantize &= name.find("class_embedding.") == std::string::npos; ++ quantize &= name.find("time_embedding.") == std::string::npos; ++ quantize &= name.find("add_embedding.") == std::string::npos; ++ quantize &= name.find("time_embed.") == std::string::npos; ++ quantize &= name.find("label_emb.") == std::string::npos; ++ quantize &= name.find("conv_in.") == std::string::npos; ++ quantize &= name.find("conv_out.") == std::string::npos; ++ quantize &= name != "input_blocks.0.0.weight"; ++ quantize &= name != "out.2.weight"; ++ } ++ if (model.arch == LLM_ARCH_SD3) { ++ image_model = true; ++ quantize &= name.find("final_layer.") == std::string::npos; ++ quantize &= name.find("time_text_embed.") == std::string::npos; ++ quantize &= name.find("context_embedder.") == std::string::npos; ++ quantize &= name.find("t_embedder.") == std::string::npos; ++ quantize &= name.find("y_embedder.") == std::string::npos; ++ quantize &= name.find("x_embedder.") == std::string::npos; ++ quantize &= name != "proj_out.weight"; ++ quantize &= name != "pos_embed"; ++ } ++ if (model.arch == LLM_ARCH_AURA) { ++ image_model = true; ++ quantize &= name.find("t_embedder.") == std::string::npos; ++ quantize &= name.find("init_x_linear.") == std::string::npos; ++ quantize &= name != "modF.1.weight"; ++ quantize &= name != "cond_seq_linear.weight"; ++ quantize &= name != "final_linear.weight"; ++ quantize &= name != "final_linear.weight"; ++ quantize &= name != "positional_encoding"; ++ quantize &= name != "register_tokens"; ++ } ++ if (model.arch == LLM_ARCH_LTXV) { ++ image_model = true; ++ quantize &= name.find("adaln_single.") == std::string::npos; ++ quantize &= name.find("caption_projection.") == std::string::npos; ++ quantize &= name.find("patchify_proj.") == std::string::npos; ++ quantize &= name.find("proj_out.") == std::string::npos; ++ quantize &= name.find("scale_shift_table") == std::string::npos; // last block too ++ } ++ if (model.arch == LLM_ARCH_HYVID) { ++ image_model = true; ++ quantize &= name.find("txt_in.") == std::string::npos; ++ quantize &= name.find("img_in.") == std::string::npos; ++ quantize &= name.find("time_in.") == std::string::npos; ++ quantize &= name.find("vector_in.") == std::string::npos; ++ quantize &= name.find("guidance_in.") == std::string::npos; ++ quantize &= name.find("final_layer.") == std::string::npos; ++ } ++ if (model.arch == LLM_ARCH_WAN) { ++ image_model = true; ++ quantize &= name.find("modulation.") == std::string::npos; ++ quantize &= name.find("patch_embedding.") == std::string::npos; ++ quantize &= name.find("text_embedding.") == std::string::npos; ++ quantize &= name.find("time_projection.") == std::string::npos; ++ quantize &= name.find("time_embedding.") == std::string::npos; ++ quantize &= name.find("img_emb.") == std::string::npos; ++ quantize &= name.find("head.") == std::string::npos; ++ } ++ if (model.arch == LLM_ARCH_HIDREAM) { ++ image_model = true; ++ quantize &= name.find("p_embedder.") == std::string::npos; ++ quantize &= name.find("t_embedder.") == std::string::npos; ++ quantize &= name.find("x_embedder.") == std::string::npos; ++ quantize &= name.find("final_layer.") == std::string::npos; ++ quantize &= name.find(".ff_i.gate.weight") == std::string::npos; ++ quantize &= name.find("caption_projection.") == std::string::npos; ++ } ++ if (model.arch == LLM_ARCH_COSMOS) { ++ image_model = true; ++ quantize &= name.find("p_embedder.") == std::string::npos; ++ quantize &= name.find("t_embedder.") == std::string::npos; ++ quantize &= name.find("t_embedding_norm.") == std::string::npos; ++ quantize &= name.find("x_embedder.") == std::string::npos; ++ quantize &= name.find("pos_embedder.") == std::string::npos; ++ quantize &= name.find("final_layer.") == std::string::npos; ++ } ++ if (model.arch == LLM_ARCH_LUMINA2) { ++ image_model = true; ++ quantize &= name.find("t_embedder.") == std::string::npos; ++ quantize &= name.find("x_embedder.") == std::string::npos; ++ quantize &= name.find("final_layer.") == std::string::npos; ++ quantize &= name.find("cap_embedder.") == std::string::npos; ++ quantize &= name.find("context_refiner.") == std::string::npos; ++ quantize &= name.find("noise_refiner.") == std::string::npos; ++ } ++ // ignore 3D/4D tensors for image models as the code was never meant to handle these ++ if (image_model) { ++ quantize &= ggml_n_dims(tensor) == 2; ++ } ++ + enum ggml_type new_type; + void * new_data; + size_t new_size; +@@ -18655,6 +18986,9 @@ static void llama_model_quantize_internal(const std::string & fname_inp, const s + new_type = default_type; + + // get more optimal quantization type based on the tensor shape, layer, etc. ++ if (image_model) { ++ new_type = img_tensor_get_type(qs, new_type, tensor, ftype); ++ } else { + if (!params->pure && ggml_is_quantized(default_type)) { + new_type = llama_tensor_get_type(qs, new_type, tensor, ftype); + } +@@ -18664,6 +18998,7 @@ static void llama_model_quantize_internal(const std::string & fname_inp, const s + if (params->output_tensor_type < GGML_TYPE_COUNT && strcmp(tensor->name, "output.weight") == 0) { + new_type = params->output_tensor_type; + } ++ } + + // If we've decided to quantize to the same type the tensor is already + // in then there's nothing to do. diff --git a/ComfyUI-GGUF/tools/read_tensors.py b/ComfyUI-GGUF/tools/read_tensors.py new file mode 100644 index 0000000000000000000000000000000000000000..1bdff028a787c09b38e5616ef75a2f070c672445 --- /dev/null +++ b/ComfyUI-GGUF/tools/read_tensors.py @@ -0,0 +1,21 @@ +#!/usr/bin/python3 +import os +import sys +import gguf + +def read_tensors(path): + reader = gguf.GGUFReader(path) + for tensor in reader.tensors: + if tensor.tensor_type == gguf.GGMLQuantizationType.F32: + continue + print(f"{str(tensor.tensor_type):32}: {tensor.name}") + +try: + path = sys.argv[1] + assert os.path.isfile(path), "Invalid path" + print(f"input: {path}") +except Exception as e: + input(f"failed: {e}") +else: + read_tensors(path) + input() diff --git a/ComfyUI-Jjk-Nodes/LICENSE b/ComfyUI-Jjk-Nodes/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..4d1e6d611aac50a630ad6706894628368f786d3a --- /dev/null +++ b/ComfyUI-Jjk-Nodes/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2023 jjkramhoeft + +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. diff --git a/ComfyUI-Jjk-Nodes/README.md b/ComfyUI-Jjk-Nodes/README.md new file mode 100644 index 0000000000000000000000000000000000000000..0539c32f270d4f29fe7bbbf18728e171f0c16b63 --- /dev/null +++ b/ComfyUI-Jjk-Nodes/README.md @@ -0,0 +1,4 @@ +# ComfyUI-Jjk-Nodes +A set of custom nodes for ComfyUI - focused on text and parameter utility + +Minimal code to get a few nodes working diff --git a/ComfyUI-Jjk-Nodes/__init__.py b/ComfyUI-Jjk-Nodes/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..7bede04e96634d6e6025929cb740bd0131dadef7 --- /dev/null +++ b/ComfyUI-Jjk-Nodes/__init__.py @@ -0,0 +1,27 @@ +import os +import shutil + +from .jjk_util import * + +# A dictionary that contains all nodes you want to export with their names +# NOTE: names should be globally unique +NODE_CLASS_MAPPINGS = { + "SDXLRecommendedImageSize": SDXLRecommendedImageSize, + "JjkText": JjkText, + "JjkShowText": JjkShowText, + "JjkConcat": JjkConcat, +} + +__all__ = ['NODE_CLASS_MAPPINGS'] + +THIS_DIR=os.path.dirname(os.path.abspath(__file__)) +DIR_DEV_JS=os.path.abspath(f'{THIS_DIR}/js') +DIR_PY=os.path.abspath(f'{THIS_DIR}/py') +DIR_WEB_JS=os.path.abspath(f'{THIS_DIR}/../../web/extensions/jjk_util') + +if not os.path.exists(DIR_WEB_JS): + os.makedirs(DIR_WEB_JS) + +shutil.copytree(DIR_DEV_JS, DIR_WEB_JS, dirs_exist_ok=True) + +print("jjk_util loding") diff --git a/ComfyUI-Jjk-Nodes/__pycache__/__init__.cpython-310.pyc b/ComfyUI-Jjk-Nodes/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..45d2eaa467bc18ee1baf848963a12203427841a5 Binary files /dev/null and b/ComfyUI-Jjk-Nodes/__pycache__/__init__.cpython-310.pyc differ diff --git a/ComfyUI-Jjk-Nodes/__pycache__/jjk_util.cpython-310.pyc b/ComfyUI-Jjk-Nodes/__pycache__/jjk_util.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d072fe0993cf7b805116bc24f891e2862b487970 Binary files /dev/null and b/ComfyUI-Jjk-Nodes/__pycache__/jjk_util.cpython-310.pyc differ diff --git a/ComfyUI-Jjk-Nodes/jjk_util.py b/ComfyUI-Jjk-Nodes/jjk_util.py new file mode 100644 index 0000000000000000000000000000000000000000..87a3eb5d8a19a269d0749e39fd79f92e242d6089 --- /dev/null +++ b/ComfyUI-Jjk-Nodes/jjk_util.py @@ -0,0 +1,179 @@ +import nodes + +""" + + + Simple utility custom nodes for ComfyUI regarding experimentation with SDXL + + By Jens Jakob Kramhøft + + Copyright (c) 2023 + +""" + +MANIFEST = { + "name": "JJKUtil", + "version": (0,1,1), + "author": "Jens Jakob Kramhøft", + "project": "https://github.com/jjkramhoeft/util-nodes-for-comfyui", + "description": "A small node suite for ComfyUI", +} + +#---------------------------------------------------------------------------------------------------------------------------------------------------# + +class SDXLRecommendedImageSize: + RESOLUTIONS = ["Cinema (1536x640)", "Widescreen (1344x768)", "Photo (1216x832)", "TV (1152x896)", "Square (1024x1024)"] + ASPECT = ["Landscape", "Portrait"] + + @classmethod + def INPUT_TYPES(s): + return {"required": { + "resolution": (SDXLRecommendedImageSize.RESOLUTIONS, {"default": "Square (1024x1024)"}), + "aspect": (SDXLRecommendedImageSize.ASPECT, {"default": "Portrait"}) + }, + } + + RETURN_TYPES = ("INT", "INT", ) + RETURN_NAMES = ("width", "height", ) + FUNCTION = "get_value" + + CATEGORY = "jjk" + + def get_value(self, resolution, aspect, ): + if resolution == "Cinema (1536x640)": + if aspect == "Landscape": + return (1536, 640) + else: + return (640, 1536) + if resolution == "Widescreen (1344x768)": + if aspect == "Landscape": + return (1344, 768) + else: + return (768, 1344) + if resolution == "Photo (1216x832)": + if aspect == "Landscape": + return (1216, 832) + else: + return (832, 1216) + if resolution == "TV (1152x896)": + if aspect == "Landscape": + return (1152, 896) + else: + return (896, 1152) + if resolution == "Square (1024x1024)": + return (1024, 1024) + +#---------------------------------------------------------------------------------------------------------------------------------------------------# + +class JjkText: + @classmethod + def INPUT_TYPES(s): + return {"required": {"text": ("STRING", {"multiline": True})}} + + RETURN_TYPES = ("STRING",) + RETURN_NAMES = ("text",) + FUNCTION = "get_value" + CATEGORY = "jjk" + + def get_value(self, text): + return (text,) + +#---------------------------------------------------------------------------------------------------------------------------------------------------# + +class JjkShowText: + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "text": ("STRING", {"forceInput": True}), + } + } + + INPUT_IS_LIST = True + RETURN_TYPES = ("STRING",) + RETURN_NAMES = ("text",) + FUNCTION = "show_value" + CATEGORY = "jjk" + OUTPUT_NODE = True + OUTPUT_IS_LIST = (True,) + + def show_value(self, text): + print(f"show text: {text}") + return {"ui": {"text": text}, "result": (text,)} + + +#---------------------------------------------------------------------------------------------------------------------------------------------------# + +class JjkConcat: + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "delimmitor": (["none", "space", "comma"],), + }, + "optional": { + "text1": ("STRING", {"forceInput": True}), + "text2": ("STRING", {"forceInput": True}), + "text3": ("STRING", {"forceInput": True}), + "text4": ("STRING", {"forceInput": True}), + "text5": ("STRING", {"forceInput": True}), + } + } + + RETURN_TYPES = ("STRING",) + RETURN_NAMES = ("text",) + FUNCTION = "get_value" + CATEGORY = "jjk" + + def get_value(self, delimmitor, text1=None, text2=None, text3=None, text4=None, text5=None): + needdelim = False + delim = "" + if delimmitor == "space": + delim = " " + if delimmitor == "comma": + delim = ", " + + concatenated = "" + + if text1: + concatenated = text1 + needdelim = True + + if text2: + if needdelim: + concatenated += delim + concatenated += text2 + needdelim = True + + if text3: + if needdelim: + concatenated += delim + concatenated += text3 + needdelim = True + + if text4: + if needdelim: + concatenated += delim + concatenated += text4 + needdelim = True + + if text5: + if needdelim: + concatenated += delim + concatenated += text5 + needdelim = True + + return (concatenated,) + +#---------------------------------------------------------------------------------------------------------------------------------------------------# + + + + +# A dictionary that contains the friendly/humanly readable titles for the nodes +NODE_DISPLAY_NAME_MAPPINGS = { + "SDXLRecommendedImageSize": "SDXL Recommended image sizes", + "JjkText": "Text", + "JjkShowText": "ShowText", + "JjkConcat": "Concatenate", +} diff --git a/ComfyUI-Jjk-Nodes/js/jjkShowText.js b/ComfyUI-Jjk-Nodes/js/jjkShowText.js new file mode 100644 index 0000000000000000000000000000000000000000..478d574f5f14501a9d955a16d201827e243b4e9e --- /dev/null +++ b/ComfyUI-Jjk-Nodes/js/jjkShowText.js @@ -0,0 +1,36 @@ +import { app } from "../../scripts/app.js"; +import { ComfyWidgets } from "../../scripts/widgets.js"; + +// Displays input text on a node + +app.registerExtension({ + name: "jjk_util.JjkShowText", + async beforeRegisterNodeDef(nodeType, nodeData, app) { + if (nodeData.name === "JjkShowText") { + // When the node is executed we will be sent the input text, display this in the widget + const onExecuted = nodeType.prototype.onExecuted; + nodeType.prototype.onExecuted = function (message) { + onExecuted?.apply(this, arguments); + + if (this.widgets) { + const pos = this.widgets.findIndex((w) => w.name === "text"); + if (pos !== -1) { + for (let i = pos; i < this.widgets.length; i++) { + this.widgets[i].onRemove?.(); + } + this.widgets.length = pos; + } + } + + for (const list of message.text) { + const w = ComfyWidgets["STRING"](this, "text", ["STRING", { multiline: true }], app).widget; + w.inputEl.readOnly = true; + w.inputEl.style.opacity = 0.6; + w.value = list; + } + + this.onResize?.(this.size); + }; + } + }, +}); diff --git a/ComfyUI-JoyCaption/.github/workflows/publish.yml b/ComfyUI-JoyCaption/.github/workflows/publish.yml new file mode 100644 index 0000000000000000000000000000000000000000..4da900f13c5b13ea8502956299a98b71fe01e82e --- /dev/null +++ b/ComfyUI-JoyCaption/.github/workflows/publish.yml @@ -0,0 +1,25 @@ +name: Publish to Comfy registry +on: + workflow_dispatch: + push: + branches: + - main + paths: + - "pyproject.toml" + +permissions: + issues: write + +jobs: + publish-node: + name: Publish Custom Node to registry + runs-on: ubuntu-latest + if: ${{ github.repository_owner == '1038lab' }} + steps: + - name: Check out code + uses: actions/checkout@v4 + - name: Publish Custom Node + uses: Comfy-Org/publish-node-action@v1 + with: + ## Add your own personal access token to your Github Repository secrets and reference it here. + personal_access_token: ${{ secrets.REGISTRY_ACCESS_TOKEN }} diff --git a/ComfyUI-JoyCaption/.tracking b/ComfyUI-JoyCaption/.tracking new file mode 100644 index 0000000000000000000000000000000000000000..8ef614cd70aeda9e07ecd9e2783873bf64b0ed37 --- /dev/null +++ b/ComfyUI-JoyCaption/.tracking @@ -0,0 +1,36 @@ +.github/workflows/publish.yml +CaptionTools.py +JC.py +JC_GGUF.py +LICENSE +README.md +README_ZH.md +__init__.py +custom_models.md +custom_models_example.json +example_workflows/JoyCaption-GGUF.json +example_workflows/JoyCaption-GGUF.png +example_workflows/Joycaption_node.json +example_workflows/Joycaption_node.png +example_workflows/batch_image_text_output.jpg +example_workflows/batch_image_text_output.json +jc_data.json +llama_cpp_install/llama_cpp_install.md +llama_cpp_install/llama_cpp_install.py +llama_cpp_install/llama_cpp_install_zh.md +locales/en/main.json +locales/en/nodeDefs.json +locales/fr/main.json +locales/fr/nodeDefs.json +locales/ja/main.json +locales/ja/nodeDefs.json +locales/ko/main.json +locales/ko/nodeDefs.json +locales/ru/main.json +locales/ru/nodeDefs.json +locales/zh/main.json +locales/zh/nodeDefs.json +pyproject.toml +requirements.txt +requirements_gguf.txt +update.md \ No newline at end of file diff --git a/ComfyUI-JoyCaption/CaptionTools.py b/ComfyUI-JoyCaption/CaptionTools.py new file mode 100644 index 0000000000000000000000000000000000000000..fe479aa81e9b738cab35a3902a030c68c4749e78 --- /dev/null +++ b/ComfyUI-JoyCaption/CaptionTools.py @@ -0,0 +1,153 @@ +import os +from pathlib import Path +import torch +import numpy as np +from PIL import Image, ImageOps + +class ImageBatchPath: + @classmethod + def INPUT_TYPES(s): + return { + "required": {"image_dir": ("STRING", {"default": "", "multiline": True, "placeholder": "Input directory containing images"})}, + "optional": { + "batch_size": ("INT", {"default": 0, "min": 0, "step": 1, "tooltip": "Number of images to load (0 = all images)"}), + "start_from": ("INT", {"default": 1, "min": 1, "step": 1, "tooltip": "Start from Nth image (1 = first image)"}), + "sort_method": (["sequential", "reverse", "random"], {"default": "sequential", "tooltip": "Image loading order: sequential/reverse/random"}) + } + } + + RETURN_TYPES = ("IMAGE", "STRING") + RETURN_NAMES = ("IMAGE", "IMAGE_PATH") + OUTPUT_IS_LIST = (True, True) + FUNCTION = "load_image_batch" + CATEGORY = "🧪AILab/📝JoyCaption" + + @classmethod + def IS_CHANGED(cls, **kwargs): + if 'sort_method' in kwargs and kwargs['sort_method'] == "random": + return float("NaN") + return hash(frozenset(kwargs)) + + def load_image_batch(self, image_dir: str, batch_size: int = 0, start_from: int = 1, sort_method: str = "sequential"): + if not os.path.isdir(image_dir): + raise FileNotFoundError(f"Directory '{image_dir}' cannot be found.") + + valid_extensions = ['.jpg', '.jpeg', '.png', '.webp'] + image_files = [f for f in os.listdir(image_dir) if any(f.lower().endswith(ext) for ext in valid_extensions)] + + if not image_files: + raise FileNotFoundError(f"No valid images found in '{image_dir}'.") + + if sort_method == "sequential": + image_files.sort() + elif sort_method == "reverse": + image_files.sort(reverse=True) + elif sort_method == "random": + import random + random.shuffle(image_files) + + start_index = min(start_from - 1, len(image_files) - 1) + image_files = image_files[start_index:] + if batch_size > 0: + image_files = image_files[:batch_size] + + images = [] + image_paths = [] + for filename in image_files: + img_path = os.path.join(image_dir, filename) + try: + image = ImageOps.exif_transpose(Image.open(img_path)).convert("RGB") + image = torch.from_numpy(np.array(image).astype(np.float32) / 255.0)[None,] + images.append(image) + image_paths.append(img_path) + except Exception as e: + print(f'\033[91mError loading {filename}: {str(e)}\033[0m') + continue + + return (images, image_paths) + +class CaptionSaver: + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + "string": ("STRING", {"forceInput": True}), + "image_path": ("STRING", {"forceInput": True}), + }, + "optional": { + "image": ("IMAGE",), + "custom_output_path": ("STRING", {"default": "", "multiline": True, "placeholder": "Custom output directory path. If empty, will use the directory of image_path"}), + "custom_file_name": ("STRING", {"default": "", "multiline": False, "placeholder": "Custom filename (without extension)"}), + "overwrite": ("BOOLEAN", {"default": True, "tooltip": "if true, will overwrite the existing txt file, if false, will add a number to the filename to make it unique"}) + } + } + + RETURN_TYPES = () + FUNCTION = "save_caption" + CATEGORY = "🧪AILab/📝JoyCaption" + OUTPUT_NODE = True + + def get_unique_filename(self, base_path: Path) -> Path: + """Get a unique filename by adding numbers if file exists.""" + if not base_path.exists(): + return base_path + + counter = 1 + while True: + new_path = base_path.parent / f"{base_path.stem}_{counter:02d}{base_path.suffix}" + if not new_path.exists(): + return new_path + counter += 1 + + def save_caption(self, string, image_path, image=None, custom_output_path="", custom_file_name="", overwrite=True): + try: + image_path = Path(image_path) + save_dir = Path(custom_output_path.strip()) if custom_output_path.strip() else image_path.parent + save_dir.mkdir(parents=True, exist_ok=True) + + try: + base_name = custom_file_name.strip() if custom_file_name.strip() else image_path.stem + txt_path = save_dir / f"{base_name}.txt" + + if not overwrite and txt_path.exists(): + txt_path = self.get_unique_filename(txt_path) + base_name = txt_path.stem + + with open(txt_path, 'w', encoding='utf-8') as f: + f.write(string) + print(f'\033[93m[{txt_path.name}]:\033[0m {string}') + + if image is not None and custom_output_path.strip(): + try: + if isinstance(image, torch.Tensor): + while len(image.shape) > 3: + image = image.squeeze(0) + + image = (image.cpu().numpy() * 255).astype(np.uint8) + if image.shape[-1] != 3: + image = np.transpose(image, (1, 2, 0)) + image = Image.fromarray(image) + + img_out_path = save_dir / f"{base_name}{image_path.suffix}" + image.save(img_out_path) + + except Exception as e: + print(f'\033[91mFailed to copy image: {str(e)}\033[0m') + + except Exception as e: + print(f'\033[91mError saving caption: {str(e)}\033[0m') + + except Exception as e: + print(f'\033[91mCritical error: {str(e)}\033[0m') + + return () + +NODE_CLASS_MAPPINGS = { + "ImageBatchPath": ImageBatchPath, + "CaptionSaver": CaptionSaver +} + +NODE_DISPLAY_NAME_MAPPINGS = { + "ImageBatchPath": "Image Batch Path 🖼️", + "CaptionSaver": "Caption Saver 📝" +} \ No newline at end of file diff --git a/ComfyUI-JoyCaption/JC.py b/ComfyUI-JoyCaption/JC.py new file mode 100644 index 0000000000000000000000000000000000000000..4452f828528b8f955260edbd6d04f13b43a19e50 --- /dev/null +++ b/ComfyUI-JoyCaption/JC.py @@ -0,0 +1,443 @@ +import torch +from transformers import AutoProcessor, LlavaForConditionalGeneration, BitsAndBytesConfig +import folder_paths +from pathlib import Path +from PIL import Image +from torchvision.transforms import ToPILImage +import json +import gc +import os + +class ModelLoadError(Exception): + pass + +def handle_model_error(e, cleanup_func=None): + if cleanup_func: + cleanup_func() + if torch.cuda.is_available(): + torch.cuda.empty_cache() + gc.collect() + raise ModelLoadError(f"Error loading model: {str(e)}") + +def cleanup_model_resources(model=None, processor=None): + if model is not None: + del model + if processor is not None: + del processor + if torch.cuda.is_available(): + torch.cuda.empty_cache() + gc.collect() + +def validate_model_parameters(quantization, valid_modes): + if quantization not in valid_modes: + raise ValueError(f"Invalid quantization mode: {quantization}. Valid modes: {', '.join(valid_modes)}") + +with open(Path(__file__).parent / "jc_data.json", "r", encoding="utf-8") as f: + config = json.load(f) + CAPTION_TYPE_MAP = config["caption_type_map"] + EXTRA_OPTIONS = config["extra_options"] + MEMORY_EFFICIENT_CONFIGS = config["memory_efficient_configs"] + MODEL_SETTINGS = config["model_settings"] + CAPTION_LENGTH_CHOICES = config["caption_length_choices"] + HF_MODELS = config["hf_models"] + +# --- Custom Models Merge Logic (for HF models only) --- +custom_path = Path(__file__).parent / "custom_models.json" + +if custom_path.exists(): + try: + with open(custom_path, "r", encoding="utf-8") as f: + custom_data = json.load(f) or {} + HF_MODELS.update(custom_data.get("hf_models", {})) + print("[JoyCaption] ✅ Loaded custom HF custom models.") + except Exception as e: + print(f"[JoyCaption] ⚠️ Failed to load custom models → {e}") +else: + print("[JoyCaption] ℹ️ No custom models found, skipping user-defined HF models.") +# ------------------------------------------------------ + +def build_prompt(caption_type: str, caption_length: str | int, extra_options: list[str], name_input: str) -> str: + """Constructs the prompt for the model based on user selections.""" + if caption_length == "any": + map_idx = 0 + elif isinstance(caption_length, str) and caption_length.isdigit(): + map_idx = 1 + else: + map_idx = 2 + + prompt = CAPTION_TYPE_MAP[caption_type][map_idx] + + if extra_options: + prompt += " " + " ".join(extra_options) + + return prompt.format( + name=name_input or "{NAME}", + length=caption_length, + word_count=caption_length, + ) + +_MODEL_CACHE = {} + +class JC_Models: + """Handles loading, caching, and running the LLaVA models.""" + def __init__(self, model: str, memory_mode: str): + cache_key = f"{model}_{memory_mode}" + + if cache_key in _MODEL_CACHE: + try: + self.processor = _MODEL_CACHE[cache_key]["processor"] + self.model = _MODEL_CACHE[cache_key]["model"] + self.device = _MODEL_CACHE[cache_key]["device"] + if not next(self.model.parameters()).is_cuda: + raise RuntimeError("Cached model not on GPU") + print(f"Using cached model: {cache_key}") + return + except Exception as e: + print(f"Cache validation failed: {e}, reloading model...") + if cache_key in _MODEL_CACHE: + del _MODEL_CACHE[cache_key] + torch.cuda.empty_cache() + + checkpoint_path = Path(folder_paths.models_dir) / "LLM" / Path(model).stem + if not checkpoint_path.exists(): + from huggingface_hub import snapshot_download + snapshot_download(repo_id=model, local_dir=str(checkpoint_path), force_download=False, local_files_only=False) + + self.device = "cuda" if torch.cuda.is_available() else "cpu" + + if self.device == "cuda": + torch.backends.cudnn.benchmark = True + if hasattr(torch.backends, 'cuda'): + if hasattr(torch.backends.cuda, 'matmul'): + torch.backends.cuda.matmul.allow_tf32 = True + if hasattr(torch.backends.cuda, 'allow_tf32'): + torch.backends.cuda.allow_tf32 = True + + os.environ["PYTORCH_CUDA_ALLOC_CONF"] = "max_split_size_mb:128" + + self.processor = AutoProcessor.from_pretrained( + str(checkpoint_path), + use_fast=True, + image_processor_type="CLIPImageProcessor", + image_size=336 + ) + + if hasattr(self.processor, 'image_processor') and hasattr(self.processor.image_processor, 'size'): + expected_size = self.processor.image_processor.size + if isinstance(expected_size, dict): + self.target_size = (expected_size.get('height', 336), expected_size.get('width', 336)) + elif isinstance(expected_size, (list, tuple)): + self.target_size = tuple(expected_size) if len(expected_size) == 2 else (expected_size[0], expected_size[0]) + else: + self.target_size = (expected_size, expected_size) + else: + self.target_size = (336, 336) + + model_kwargs = { + "device_map": "cuda" if self.device == "cuda" else "cpu", + } + + try: + if "FP8-Dynamic" in model: + print("Loading FP8 model with automatic configuration...") + self.model = LlavaForConditionalGeneration.from_pretrained( + str(checkpoint_path), + torch_dtype="auto", + **model_kwargs + ) + elif memory_mode == "Full Precision (bf16)": + self.model = LlavaForConditionalGeneration.from_pretrained( + str(checkpoint_path), + torch_dtype=torch.bfloat16, + **model_kwargs + ) + elif memory_mode == "Balanced (8-bit)": + qnt_config = BitsAndBytesConfig( + load_in_8bit=True, + bnb_8bit_compute_dtype=torch.float16, + bnb_8bit_use_double_quant=True, + llm_int8_skip_modules=["vision_tower", "multi_modal_projector"], + llm_int8_enable_fp32_cpu_offload=True + ) + self.model = LlavaForConditionalGeneration.from_pretrained( + str(checkpoint_path), + torch_dtype=torch.float16, + quantization_config=qnt_config, + **model_kwargs + ) + else: + qnt_config = BitsAndBytesConfig( + load_in_4bit=True, + bnb_4bit_compute_dtype=torch.float16, + bnb_4bit_quant_type="nf4", + bnb_4bit_use_double_quant=True, + llm_int8_skip_modules=["vision_tower", "multi_modal_projector"], + llm_int8_enable_fp32_cpu_offload=True + ) + self.model = LlavaForConditionalGeneration.from_pretrained( + str(checkpoint_path), + torch_dtype="auto", + quantization_config=qnt_config, + **model_kwargs + ) + + self.model.eval() + + if self.device == "cuda" and not next(self.model.parameters()).is_cuda: + raise RuntimeError("Model failed to load on GPU") + + if memory_mode == "Global Cache": + _MODEL_CACHE[cache_key] = { + "processor": self.processor, + "model": self.model, + "device": self.device + } + + except Exception as e: + cleanup_model_resources(self.model, self.processor) + handle_model_error(e) + + @torch.inference_mode() + def generate(self, image: Image.Image, system: str, prompt: str, max_new_tokens: int, temperature: float, top_p: float, top_k: int) -> str: + """Generates a caption for the given image.""" + convo = [ + {"role": "system", "content": system.strip()}, + {"role": "user", "content": prompt.strip()}, + ] + + convo_string = self.processor.apply_chat_template(convo, tokenize=False, add_generation_prompt=True) + assert isinstance(convo_string, str) + + if image.mode != 'RGB': + image = image.convert('RGB') + + image = image.resize(self.target_size, Image.Resampling.LANCZOS) + + inputs = self.processor(text=[convo_string], images=[image], return_tensors="pt").to(self.device) + + if hasattr(inputs, 'pixel_values') and inputs['pixel_values'] is not None: + inputs['pixel_values'] = inputs['pixel_values'].to(self.model.dtype) + + with torch.cuda.amp.autocast(enabled=True): + generate_ids = self.model.generate( + **inputs, + max_new_tokens=max_new_tokens, + do_sample=True if temperature > 0 else False, + suppress_tokens=None, + use_cache=True, + temperature=temperature, + top_k=None if top_k == 0 else top_k, + top_p=top_p, + )[0] + + generate_ids = generate_ids[inputs['input_ids'].shape[1]:] + caption = self.processor.tokenizer.decode(generate_ids, skip_special_tokens=True, clean_up_tokenization_spaces=False) + return caption.strip() + +class JC_ExtraOptions: + """A node to collect extra options for captioning.""" + @classmethod + def INPUT_TYPES(cls): + inputs = {"required": {}} + for key, value in EXTRA_OPTIONS.items(): + inputs["required"][key] = ("BOOLEAN", {"default": value["default"]}) + inputs["required"]["character_name"] = ("STRING", {"default": "", "multiline": True, "placeholder": "Character Name"}) + return inputs + + RETURN_TYPES = ("JOYCAPTION_EXTRA_OPTIONS",) + RETURN_NAMES = ("extra_options",) + FUNCTION = "get_extra_options" + CATEGORY = "🧪AILab/📝JoyCaption" + + def get_extra_options(self, character_name, **kwargs): + ret_list = [] + for key, value in EXTRA_OPTIONS.items(): + if kwargs.get(key, False): + ret_list.append(value["description"]) + return ([ret_list, character_name],) + +class JC: + """The main, simple JoyCaption node.""" + @classmethod + def INPUT_TYPES(cls): + model_list = list(HF_MODELS.keys()) + return { + "required": { + "image": ("IMAGE",), + "model": (model_list, {"default": model_list[1], "tooltip": "Select the AI model to use for caption generation"}), + "quantization": (list(MEMORY_EFFICIENT_CONFIGS.keys()), {"default": "Balanced (8-bit)", "tooltip": "Choose between speed and quality. 8-bit is recommended for most users"}), + "prompt_style": (list(CAPTION_TYPE_MAP.keys()), {"default": "Descriptive", "tooltip": "Select the style of caption you want to generate"}), + "caption_length": (CAPTION_LENGTH_CHOICES, {"default": "any", "tooltip": "Control the length of the generated caption"}), + "memory_management": (["Keep in Memory", "Clear After Run", "Global Cache"], {"default": "Keep in Memory", "tooltip": "Choose how to manage model memory. 'Keep in Memory' for faster processing, 'Clear After Run' for limited VRAM, 'Global Cache' for fastest processing if you have enough VRAM"}), + }, + "optional": { + "extra_options": ("JOYCAPTION_EXTRA_OPTIONS", {"tooltip": "Additional options to customize the caption generation"}), + } + } + + RETURN_TYPES = ("STRING",) + RETURN_NAMES = ("STRING",) + FUNCTION = "generate" + CATEGORY = "🧪AILab/📝JoyCaption" + + def __init__(self): + self.predictor = None + self.current_memory_mode = None + self.current_model = None + + def generate(self, image, model, quantization, prompt_style, caption_length, memory_management, extra_options=None): + try: + validate_model_parameters(quantization, list(MEMORY_EFFICIENT_CONFIGS.keys())) + + if memory_management == "Global Cache": + try: + model_name = HF_MODELS[model]["name"] + self.predictor = JC_Models(model_name, quantization) + except Exception as e: + return (f"Error loading model: {e}",) + elif self.predictor is None or self.current_memory_mode != quantization or self.current_model != model: + if self.predictor is not None: + del self.predictor + self.predictor = None + torch.cuda.empty_cache() + gc.collect() + try: + model_name = HF_MODELS[model]["name"] + self.predictor = JC_Models(model_name, quantization) + self.current_memory_mode = quantization + self.current_model = model + except Exception as e: + return (f"Error loading model: {e}",) + + prompt = build_prompt(prompt_style, caption_length, extra_options[0] if extra_options else [], extra_options[1] if extra_options else "{NAME}") + system_prompt = MODEL_SETTINGS["default_system_prompt"] + pil_image = ToPILImage()(image[0].permute(2, 0, 1)) + + response = self.predictor.generate( + image=pil_image, + system=system_prompt, + prompt=prompt, + max_new_tokens=MODEL_SETTINGS["default_max_tokens"], + temperature=MODEL_SETTINGS["default_temperature"], + top_p=MODEL_SETTINGS["default_top_p"], + top_k=MODEL_SETTINGS["default_top_k"], + ) + + if memory_management == "Clear After Run": + del self.predictor + self.predictor = None + torch.cuda.empty_cache() + gc.collect() + + return (response,) + except Exception as e: + if memory_management == "Clear After Run": + del self.predictor + self.predictor = None + torch.cuda.empty_cache() + gc.collect() + raise e + +class JC_adv: + """The advanced JoyCaption node with more settings.""" + @classmethod + def INPUT_TYPES(cls): + model_list = list(HF_MODELS.keys()) + return { + "required": { + "image": ("IMAGE",), + "model": (model_list, {"default": model_list[1], "tooltip": "Select the AI model to use for caption generation"}), + "quantization": (list(MEMORY_EFFICIENT_CONFIGS.keys()), {"default": "Balanced (8-bit)", "tooltip": "Choose between speed and quality. 8-bit is recommended for most users"}), + "prompt_style": (list(CAPTION_TYPE_MAP.keys()), {"default": "Descriptive", "tooltip": "Select the style of caption you want to generate"}), + "caption_length": (CAPTION_LENGTH_CHOICES, {"default": "any", "tooltip": "Control the length of the generated caption"}), + "max_new_tokens": ("INT", {"default": MODEL_SETTINGS["default_max_tokens"], "min": 1, "max": 2048, "tooltip": "Maximum number of tokens to generate. Higher values allow longer captions"}), + "temperature": ("FLOAT", {"default": MODEL_SETTINGS["default_temperature"], "min": 0.0, "max": 2.0, "step": 0.05, "tooltip": "Control the randomness of the output. Higher values make the output more creative but less predictable"}), + "top_p": ("FLOAT", {"default": MODEL_SETTINGS["default_top_p"], "min": 0.0, "max": 1.0, "step": 0.01, "tooltip": "Control the diversity of the output. Higher values allow more diverse word choices"}), + "top_k": ("INT", {"default": MODEL_SETTINGS["default_top_k"], "min": 0, "max": 100, "tooltip": "Limit the number of possible next tokens. Lower values make the output more focused"}), + "custom_prompt": ("STRING", {"default": "", "multiline": True, "tooltip": "Custom prompt template. If empty, will use the selected prompt style"}), + "memory_management": (["Keep in Memory", "Clear After Run", "Global Cache"], {"default": "Keep in Memory", "tooltip": "Choose how to manage model memory. 'Keep in Memory' for faster processing, 'Clear After Run' for limited VRAM, 'Global Cache' for fastest processing if you have enough VRAM"}), + }, + "optional": { + "extra_options": ("JOYCAPTION_EXTRA_OPTIONS", {"tooltip": "Additional options to customize the caption generation"}), + } + } + + RETURN_TYPES = ("STRING", "STRING") + RETURN_NAMES = ("PROMPT", "STRING") + FUNCTION = "generate" + CATEGORY = "🧪AILab/📝JoyCaption" + + def __init__(self): + self.predictor = None + self.current_memory_mode = None + self.current_model = None + + def generate(self, image, model, quantization, prompt_style, caption_length, max_new_tokens, temperature, top_p, top_k, custom_prompt, memory_management, extra_options=None): + try: + validate_model_parameters(quantization, list(MEMORY_EFFICIENT_CONFIGS.keys())) + + if memory_management == "Global Cache": + try: + model_name = HF_MODELS[model]["name"] + self.predictor = JC_Models(model_name, quantization) + except Exception as e: + return (f"Error loading model: {e}", "") + elif self.predictor is None or self.current_memory_mode != quantization or self.current_model != model: + if self.predictor is not None: + del self.predictor + self.predictor = None + torch.cuda.empty_cache() + gc.collect() + try: + model_name = HF_MODELS[model]["name"] + self.predictor = JC_Models(model_name, quantization) + self.current_memory_mode = quantization + self.current_model = model + except Exception as e: + return (f"Error loading model: {e}", "") + + if custom_prompt and custom_prompt.strip(): + prompt = custom_prompt.strip() + else: + prompt = build_prompt(prompt_style, caption_length, extra_options[0] if extra_options else [], extra_options[1] if extra_options else "{NAME}") + + system_prompt = MODEL_SETTINGS["default_system_prompt"] + pil_image = ToPILImage()(image[0].permute(2, 0, 1)) + + response = self.predictor.generate( + image=pil_image, + system=system_prompt, + prompt=prompt, + max_new_tokens=max_new_tokens, + temperature=temperature, + top_p=top_p, + top_k=top_k, + ) + + if memory_management == "Clear After Run": + del self.predictor + self.predictor = None + torch.cuda.empty_cache() + gc.collect() + + return (prompt, response) + except Exception as e: + if memory_management == "Clear After Run": + del self.predictor + self.predictor = None + torch.cuda.empty_cache() + gc.collect() + raise e + +NODE_CLASS_MAPPINGS = { + "JC": JC, + "JC_adv": JC_adv, + "JC_ExtraOptions": JC_ExtraOptions, +} + +NODE_DISPLAY_NAME_MAPPINGS = { + "JC": "JoyCaption", + "JC_adv": "JoyCaption (Advanced)", + "JC_ExtraOptions": "JoyCaption Extra Options", +} + diff --git a/ComfyUI-JoyCaption/JC_GGUF.py b/ComfyUI-JoyCaption/JC_GGUF.py new file mode 100644 index 0000000000000000000000000000000000000000..cf999ce1da4675e2c4596f3687adf03ad05cc3da --- /dev/null +++ b/ComfyUI-JoyCaption/JC_GGUF.py @@ -0,0 +1,388 @@ +import torch +import folder_paths +from pathlib import Path +from PIL import Image +from torchvision.transforms import ToPILImage +import json +from llama_cpp import Llama +from llama_cpp.llama_chat_format import Llava15ChatHandler +import base64 +import io +import sys +import gc +import os +from huggingface_hub import hf_hub_download + +class ModelLoadError(Exception): + pass + +def suppress_output(func): + import sys + import io + def wrapper(*args, **kwargs): + old_stdout = sys.stdout + old_stderr = sys.stderr + try: + sys.stdout = io.StringIO() + sys.stderr = io.StringIO() + return func(*args, **kwargs) + finally: + sys.stdout = old_stdout + sys.stderr = old_stderr + return wrapper + +os.environ['TRANSFORMERS_VERBOSITY'] = 'error' +os.environ['TOKENIZERS_PARALLELISM'] = 'false' + +if torch.cuda.is_available(): + torch.backends.cudnn.benchmark = True + if hasattr(torch.backends, 'cuda'): + if hasattr(torch.backends.cuda, 'matmul'): + torch.backends.cuda.matmul.allow_tf32 = True + if hasattr(torch.backends.cuda, 'allow_tf32'): + torch.backends.cuda.allow_tf32 = True + os.environ["PYTORCH_CUDA_ALLOC_CONF"] = "max_split_size_mb:128" + +with open(Path(__file__).parent / "jc_data.json", "r", encoding="utf-8") as f: + config = json.load(f) + CAPTION_TYPE_MAP = config["caption_type_map"] + EXTRA_OPTIONS = config["extra_options"] + MODEL_SETTINGS = config["model_settings"] + CAPTION_LENGTH_CHOICES = config["caption_length_choices"] + GGUF_MODELS = config["gguf_models"] + GGUF_SETTINGS = config["gguf_settings"] + +# --- Custom Models Merge Logic (for GGUF models only) --- +custom_path = Path(__file__).parent / "custom_models.json" + +if custom_path.exists(): + try: + with open(custom_path, "r", encoding="utf-8") as f: + custom_data = json.load(f) or {} + GGUF_MODELS.update(custom_data.get("gguf_models", {})) + print("[JoyCaption GGUF] ✅ Loaded custom GGUF custom models") + except Exception as e: + print(f"[JoyCaption GGUF] ⚠️ Failed to load custom models → {e}") +else: + print("[JoyCaption GGUF] ℹ️ No custom models found, skipping user-defined GGUF models.") +# ------------------------------------------------------- + +_MODEL_CACHE = {} + +def build_prompt(caption_type: str, caption_length: str | int, extra_options: list[str], name_input: str) -> str: + if caption_length == "any": + map_idx = 0 + elif isinstance(caption_length, str) and caption_length.isdigit(): + map_idx = 1 + else: + map_idx = 2 + + prompt = CAPTION_TYPE_MAP[caption_type][map_idx] + if extra_options: + prompt += " " + " ".join(extra_options) + return prompt.format(name=name_input or "{NAME}", length=caption_length, word_count=caption_length) + +class JC_GGUF_Models: + def __init__(self, model: str, processing_mode: str): + try: + models_dir = Path(folder_paths.models_dir).resolve() + llm_models_dir = (models_dir / "LLM" / "GGUF").resolve() + llm_models_dir.mkdir(parents=True, exist_ok=True) + + model_filename = Path(model).name + local_path = llm_models_dir / model_filename + + if not local_path.exists(): + if "/" not in model: + raise ValueError("Invalid model path") + repo_path, filename = model.rsplit("/", 1) + local_path = Path(hf_hub_download( + repo_id=repo_path, + filename=filename, + local_dir=str(llm_models_dir), + local_dir_use_symlinks=False + )).resolve() + + mmproj_filename = GGUF_SETTINGS["mmproj_filename"] + mmproj_path = llm_models_dir / mmproj_filename + if not mmproj_path.exists(): + mmproj_path = Path(hf_hub_download( + repo_id="concedo/llama-joycaption-beta-one-hf-llava-mmproj-gguf", + filename=mmproj_filename, + local_dir=str(llm_models_dir), + local_dir_use_symlinks=False + )).resolve() + + n_ctx = MODEL_SETTINGS["context_window"] + n_batch = 2048 + n_threads = max(4, MODEL_SETTINGS["cpu_threads"]) + if processing_mode == "Auto": + n_gpu_layers = -1 if torch.cuda.is_available() else 0 + elif processing_mode == "GPU": + n_gpu_layers = -1 + else: # CPU + n_gpu_layers = 0 + + self.model = self._initialize_model(local_path, mmproj_path, n_ctx, n_batch, n_threads, n_gpu_layers) + + except Exception as e: + raise ModelLoadError(f"Model initialization failed: {str(e)}") + + @suppress_output + def _initialize_model(self, local_path, mmproj_path, n_ctx, n_batch, n_threads, n_gpu_layers): + """Initialize the GGUF model with suppressed output""" + return Llama( + model_path=str(local_path), + n_ctx=n_ctx, + n_batch=n_batch, + n_threads=n_threads, + n_gpu_layers=n_gpu_layers, + verbose=False, + chat_handler=Llava15ChatHandler(clip_model_path=str(mmproj_path)), + offload_kqv=True, + numa=True + ) + + def generate(self, image: Image.Image, system: str, prompt: str, max_new_tokens: int, temperature: float, top_p: float, top_k: int) -> str: + try: + if image.mode != 'RGB': + image = image.convert('RGB') + + image = image.resize(GGUF_SETTINGS["default_image_size"], Image.Resampling.BILINEAR) + + import io + import base64 + + img_buffer = io.BytesIO() + image.save(img_buffer, format='PNG') + img_buffer.seek(0) + + img_base64 = base64.b64encode(img_buffer.read()).decode('utf-8') + data_uri = f"data:image/png;base64,{img_base64}" + + messages = [ + {"role": "system", "content": system.strip()}, + { + "role": "user", + "content": [ + {"type": "text", "text": prompt.strip()}, + {"type": "image_url", "image_url": {"url": data_uri}} + ] + } + ] + + completion_params = { + "messages": messages, + "max_tokens": max_new_tokens, + "temperature": temperature, + "top_p": top_p, + "stop": ["", "User:", "Assistant:"], + "stream": False, + "repeat_penalty": 1.1, + "mirostat_mode": 0 + } + + if top_k > 0: + completion_params["top_k"] = top_k + + response = self._create_completion(completion_params) + + del messages + + return response["choices"][0]["message"]["content"].strip() + + except Exception as e: + return f"Generation error: {str(e)}" + finally: + gc.collect() + + @suppress_output + def _create_completion(self, completion_params): + """Create chat completion with suppressed output""" + return self.model.create_chat_completion(**completion_params) + +class JC_GGUF: + @classmethod + def INPUT_TYPES(cls): + model_list = list(GGUF_MODELS.keys()) + return { + "required": { + "image": ("IMAGE",), + "model": (model_list, {"default": model_list[0], "tooltip": "Select the GGUF model to use for caption generation"}), + "processing_mode": (["Auto", "GPU", "CPU"], {"default": "Auto", "tooltip": "Auto: Automatically detect best mode\nGPU: Faster but requires more VRAM\nCPU: Slower but saves VRAM"}), + "prompt_style": (list(CAPTION_TYPE_MAP.keys()), {"default": "Descriptive", "tooltip": "Select the style of caption you want to generate"}), + "caption_length": (CAPTION_LENGTH_CHOICES, {"default": "any", "tooltip": "Control the length of the generated caption"}), + "memory_management": (["Keep in Memory", "Clear After Run", "Global Cache"], {"default": "Keep in Memory", "tooltip": "Choose how to manage model memory. 'Keep in Memory' for faster processing, 'Clear After Run' for limited VRAM, 'Global Cache' for fastest processing if you have enough VRAM"}), + }, + "optional": { + "extra_options": ("JOYCAPTION_EXTRA_OPTIONS", {"tooltip": "Additional options to customize the caption generation"}), + } + } + + RETURN_TYPES = ("STRING",) + RETURN_NAMES = ("STRING",) + FUNCTION = "generate" + CATEGORY = "🧪AILab/📝JoyCaption" + + def __init__(self): + self.predictor = None + self.current_processing_mode = None + self.current_model = None + + def generate(self, image, model, processing_mode, prompt_style, caption_length, memory_management, extra_options=None): + try: + print(f"JoyCaption GGUF: Processing image with {model} ({processing_mode} mode)") + cache_key = f"{model}_{processing_mode}" + + if memory_management == "Global Cache": + try: + if cache_key in _MODEL_CACHE: + self.predictor = _MODEL_CACHE[cache_key] + else: + model_name = GGUF_MODELS[model]["name"] + self.predictor = JC_GGUF_Models(model_name, processing_mode) + _MODEL_CACHE[cache_key] = self.predictor + except Exception as e: + return (f"Error loading model: {e}",) + elif self.predictor is None or self.current_processing_mode != processing_mode or self.current_model != model: + if self.predictor is not None: + del self.predictor + self.predictor = None + torch.cuda.empty_cache() + try: + model_name = GGUF_MODELS[model]["name"] + self.predictor = JC_GGUF_Models(model_name, processing_mode) + self.current_processing_mode = processing_mode + self.current_model = model + except Exception as e: + return (f"Error loading model: {e}",) + + prompt_text = build_prompt(prompt_style, caption_length, extra_options[0] if extra_options else [], extra_options[1] if extra_options else "{NAME}") + + print("JoyCaption GGUF: Generating caption...") + with torch.inference_mode(): + pil_image = ToPILImage()(image[0].permute(2, 0, 1)) + response = self.predictor.generate( + image=pil_image, + system=MODEL_SETTINGS["default_system_prompt"], + prompt=prompt_text, + max_new_tokens=MODEL_SETTINGS["default_max_tokens"], + temperature=MODEL_SETTINGS["default_temperature"], + top_p=MODEL_SETTINGS["default_top_p"], + top_k=MODEL_SETTINGS["default_top_k"], + ) + print("JoyCaption GGUF: Caption generation completed") + + if memory_management == "Clear After Run": + del self.predictor + self.predictor = None + torch.cuda.empty_cache() + gc.collect() + + return (response,) + except Exception as e: + if memory_management == "Clear After Run": + del self.predictor + self.predictor = None + torch.cuda.empty_cache() + gc.collect() + raise e + +class JC_GGUF_adv: + @classmethod + def INPUT_TYPES(cls): + model_list = list(GGUF_MODELS.keys()) + return { + "required": { + "image": ("IMAGE",), + "model": (model_list, {"default": model_list[0], "tooltip": "Select the GGUF model to use for caption generation"}), + "processing_mode": (["Auto", "GPU", "CPU"], {"default": "Auto", "tooltip": "Auto: Automatically detect best mode\nGPU: Faster but requires more VRAM\nCPU: Slower but saves VRAM"}), + "prompt_style": (list(CAPTION_TYPE_MAP.keys()), {"default": "Descriptive", "tooltip": "Select the style of caption you want to generate"}), + "caption_length": (CAPTION_LENGTH_CHOICES, {"default": "any", "tooltip": "Control the length of the generated caption"}), + "max_new_tokens": ("INT", {"default": MODEL_SETTINGS["default_max_tokens"], "min": 1, "max": 2048, "tooltip": "Maximum number of tokens to generate. Higher values allow longer captions"}), + "temperature": ("FLOAT", {"default": MODEL_SETTINGS["default_temperature"], "min": 0.0, "max": 2.0, "step": 0.05, "tooltip": "Control the randomness of the output. Higher values make the output more creative but less predictable"}), + "top_p": ("FLOAT", {"default": MODEL_SETTINGS["default_top_p"], "min": 0.0, "max": 1.0, "step": 0.01, "tooltip": "Control the diversity of the output. Higher values allow more diverse word choices"}), + "top_k": ("INT", {"default": MODEL_SETTINGS["default_top_k"], "min": 0, "max": 100, "tooltip": "Limit the number of possible next tokens. Lower values make the output more focused"}), + "custom_prompt": ("STRING", {"default": "", "multiline": True, "tooltip": "Custom prompt template. If empty, will use the selected prompt style"}), + "memory_management": (["Keep in Memory", "Clear After Run", "Global Cache"], {"default": "Keep in Memory", "tooltip": "Choose how to manage model memory. 'Keep in Memory' for faster processing, 'Clear After Run' for limited VRAM, 'Global Cache' for fastest processing if you have enough VRAM"}), + }, + "optional": { + "extra_options": ("JOYCAPTION_EXTRA_OPTIONS", {"tooltip": "Additional options to customize the caption generation"}), + } + } + + RETURN_TYPES = ("STRING", "STRING") + RETURN_NAMES = ("PROMPT", "STRING") + FUNCTION = "generate" + CATEGORY = "🧪AILab/📝JoyCaption" + + def __init__(self): + self.predictor = None + self.current_processing_mode = None + self.current_model = None + + def generate(self, image, model, processing_mode, prompt_style, caption_length, max_new_tokens, temperature, top_p, top_k, custom_prompt, memory_management, extra_options=None): + try: + cache_key = f"{model}_{processing_mode}" + + if memory_management == "Global Cache": + try: + if cache_key in _MODEL_CACHE: + self.predictor = _MODEL_CACHE[cache_key] + else: + model_name = GGUF_MODELS[model]["name"] + self.predictor = JC_GGUF_Models(model_name, processing_mode) + _MODEL_CACHE[cache_key] = self.predictor + except Exception as e: + return ("", f"Error loading model: {e}") + elif self.predictor is None or self.current_processing_mode != processing_mode or self.current_model != model: + if self.predictor is not None: + del self.predictor + self.predictor = None + torch.cuda.empty_cache() + try: + model_name = GGUF_MODELS[model]["name"] + self.predictor = JC_GGUF_Models(model_name, processing_mode) + self.current_processing_mode = processing_mode + self.current_model = model + except Exception as e: + return ("", f"Error loading model: {e}") + + prompt = custom_prompt if custom_prompt.strip() else build_prompt(prompt_style, caption_length, extra_options[0] if extra_options else [], extra_options[1] if extra_options else "{NAME}") + system_prompt = MODEL_SETTINGS["default_system_prompt"] + + pil_image = ToPILImage()(image[0].permute(2, 0, 1)) + response = self.predictor.generate( + image=pil_image, + system=system_prompt, + prompt=prompt, + max_new_tokens=max_new_tokens, + temperature=temperature, + top_p=top_p, + top_k=top_k, + ) + + if memory_management == "Clear After Run": + del self.predictor + self.predictor = None + torch.cuda.empty_cache() + gc.collect() + + return (prompt, response) + except Exception as e: + if memory_management == "Clear After Run": + del self.predictor + self.predictor = None + torch.cuda.empty_cache() + gc.collect() + return ("", f"Error: {str(e)}") + +NODE_CLASS_MAPPINGS = { + "JC_GGUF": JC_GGUF, + "JC_GGUF_adv": JC_GGUF_adv, +} + +NODE_DISPLAY_NAME_MAPPINGS = { + "JC_GGUF": "JoyCaption GGUF", + "JC_GGUF_adv": "JoyCaption GGUF (Advanced)", +} \ No newline at end of file diff --git a/ComfyUI-JoyCaption/LICENSE b/ComfyUI-JoyCaption/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..f288702d2fa16d3cdf0035b15a9fcbc552cd88e7 --- /dev/null +++ b/ComfyUI-JoyCaption/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/ComfyUI-JoyCaption/README.md b/ComfyUI-JoyCaption/README.md new file mode 100644 index 0000000000000000000000000000000000000000..5fc58f776e22a97d0d3ca3fd280804adfd5c0d63 --- /dev/null +++ b/ComfyUI-JoyCaption/README.md @@ -0,0 +1,334 @@ +# ComfyUI-JoyCaption + +Joy Caption is a ComfyUI custom node powered by the LLaVA model for efficient, stylized image captioning. Caption Tools nodes handle batch image processing and automatic separation of caption text. + +![Joycaption_node](example_workflows/Joycaption_node.png) + +## News & Updates +- **2025/10/27**: Added Custom Models **v2.0.2** ( [update.md](https://github.com/1038lab/ComfyUI-JoyCaption/blob/main/update.md#v202-2025-10-27) ) +- **2025/10/20**: Update and bug fix ComfyUI-JoyCaption to **v2.0.1** ( [update.md](https://github.com/1038lab/ComfyUI-JoyCaption/blob/main/update.md#v201-2025-10-20) ) +- **2025/08/22**: Update ComfyUI-JoyCaption to **v2.0.0** ( [update.md](https://github.com/1038lab/ComfyUI-JoyCaption/blob/main/update.md#v200-2025-08-22) ) + ![Joycaption GGUF](example_workflows/JoyCaption-GGUF.png) + - Added GGUF model support for better performance and compatibility + - Fixed critical parameter handling issues (top_k, image format) + - Improved console output (no more base64 spam) + - Enhanced error handling and stability + - Added JoyCaption GGUF and JoyCaption GGUF (Advanced) nodes + - **Enhanced GGUF Support**: Comprehensive support for 12 quantization levels (Q2_K to F16) + - **llama_cpp_install folder**: [Complete installation guides](https://github.com/1038lab/ComfyUI-JoyCaption/blob/main/llama_cpp_install/llama_cpp_install.md) and automated scripts for llama-cpp-python + - **Simplified Installation**: [One-click llama-cpp-python installation](https://github.com/1038lab/ComfyUI-JoyCaption/tree/main/llama_cpp_install) with automatic CUDA support + - **Cross-Platform Support**: Windows, macOS, and Linux installation guides + - **Performance Improvements**: Optimized model loading and memory management + +- **2025/06/15**: Update ComfyUI-JoyCaption to **v1.2.0** ( [update.md](https://github.com/1038lab/ComfyUI-JoyCaption/blob/main/update.md#v120-20250615) ) + - Enhanced CUDA performance optimization + - Improved memory management strategies + - Added Global Cache mode for faster processing + +![v1 2 0](https://github.com/user-attachments/assets/bcb6cadd-1294-4fd0-a5b4-fe8cd3784801) + +- **2025/06/07**: Update ComfyUI-JoyCaption to **v1.1.1** ( [update.md](https://github.com/1038lab/ComfyUI-JoyCaption/blob/main/update.md#v111-20250607) ) + +- **2025/06/05**: Update ComfyUI-JoyCaption to **v1.1.0** ( [update.md](https://github.com/1038lab/ComfyUI-JoyCaption/blob/main/update.md#v110-20250605) ) +- Add Caption tools + +[![Joycaption_node](example_workflows/batch_image_text_output.jpg)](https://github.com/1038lab/ComfyUI-JoyCaption/blob/main/example_workflows/batch_image_text_output.json) + +## Features + +- Simple and user-friendly interface +- Multiple caption types support +- Flexible length control +- Memory optimization options +- **GGUF model support** - Efficient quantized models for better performance and lower memory usage +- **Automatic model download** - Models will be downloaded automatically and properly renamed on first use +- Support for multiple caption types +- Support for advanced customization options +- Multiple precision options (fp32, bf16, fp16, 8-bit, 4-bit) +- Enhanced memory management with Global Cache mode +- Clean console output (no debug spam) +- Robust error handling and parameter validation +- **llama_cpp_install folder** - Complete installation guides and automated scripts for llama-cpp-python + +## Installation + +1. Clone this repository to your `ComfyUI/custom_nodes` directory: +```bash +cd ComfyUI/custom_nodes +git clone https://github.com/1038lab/ComfyUI-JoyCaption.git +``` + +2. Install the required dependencies: +```bash +cd ComfyUI/custom_nodes/ComfyUI-JoyCaption +pip install -r requirements.txt +``` + +3. **For GGUF Models (Recommended)**: Install llama-cpp-python with CUDA support: +```bash +# Option 1: Automated installation (Recommended) +python llama_cpp_install/llama_cpp_install.py + +# Option 2: Manual installation +pip install -r requirements_gguf.txt +``` + +**Installation Guides Available:** +- **English**: [llama_cpp_install/llama_cpp_install.md](llama_cpp_install/llama_cpp_install.md) +- **中文**: [llama_cpp_install/llama_cpp_install_zh.md](llama_cpp_install/llama_cpp_install_zh.md) + +## Download Models +The models will be automatically downloaded and renamed on first use, or you can manually download them: + +### Standard Models (HuggingFace Format) +| Model | Link | Memory Usage | +| ----- | ---- | ------------ | +| JoyCaption Beta One | [Download](https://huggingface.co/fancyfeast/llama-joycaption-beta-one-hf-llava) | ~8-16GB | +| JoyCaption Alpha Two | [Download](https://huggingface.co/fancyfeast/llama-joycaption-alpha-two-hf-llava) | ~8-16GB | + +### GGUF Models (Quantized, Recommended) +| Model | Size | Memory Usage | Quality | Recommended For | Link | +| ----- | ---- | ------------ | ------- | --------------- | ---- | +| JoyCaption Beta One (Q2_K) | 3.18GB | ~4GB | Good | Low VRAM (6GB+) | [Download](https://huggingface.co/mradermacher/llama-joycaption-beta-one-hf-llava-GGUF/resolve/main/llama-joycaption-beta-one-hf-llava.Q2_K.gguf) | +| JoyCaption Beta One (Q3_K_S) | 3.66GB | ~5GB | Good+ | Budget systems (8GB+) | [Download](https://huggingface.co/mradermacher/llama-joycaption-beta-one-hf-llava-GGUF/resolve/main/llama-joycaption-beta-one-hf-llava.Q3_K_S.gguf) | +| JoyCaption Beta One (Q3_K_M) | 4.02GB | ~5GB | Better | Balanced performance | [Download](https://huggingface.co/mradermacher/llama-joycaption-beta-one-hf-llava-GGUF/resolve/main/llama-joycaption-beta-one-hf-llava.Q3_K_M.gguf) | +| JoyCaption Beta One (Q3_K_L) | 4.32GB | ~6GB | Better+ | Good quality/size ratio | [Download](https://huggingface.co/mradermacher/llama-joycaption-beta-one-hf-llava-GGUF/resolve/main/llama-joycaption-beta-one-hf-llava.Q3_K_L.gguf) | +| JoyCaption Beta One (IQ4_XS) | 4.48GB | ~6GB | Very Good | **Recommended** (8GB+) | [Download](https://huggingface.co/mradermacher/llama-joycaption-beta-one-hf-llava-GGUF/resolve/main/llama-joycaption-beta-one-hf-llava.IQ4_XS.gguf) | +| JoyCaption Beta One (Q4_K_S) | 4.69GB | ~6GB | Very Good | Quality focused | [Download](https://huggingface.co/mradermacher/llama-joycaption-beta-one-hf-llava-GGUF/resolve/main/llama-joycaption-beta-one-hf-llava.Q4_K_S.gguf) | +| JoyCaption Beta One (Q4_K_M) | 4.92GB | ~7GB | Very Good+ | Balanced choice | [Download](https://huggingface.co/mradermacher/llama-joycaption-beta-one-hf-llava-GGUF/resolve/main/llama-joycaption-beta-one-hf-llava.Q4_K_M.gguf) | +| JoyCaption Beta One (Q5_K_S) | 5.60GB | ~7GB | Excellent | High quality (10GB+) | [Download](https://huggingface.co/mradermacher/llama-joycaption-beta-one-hf-llava-GGUF/resolve/main/llama-joycaption-beta-one-hf-llava.Q5_K_S.gguf) | +| JoyCaption Beta One (Q5_K_M) | 5.73GB | ~8GB | Excellent+ | Premium quality | [Download](https://huggingface.co/mradermacher/llama-joycaption-beta-one-hf-llava-GGUF/resolve/main/llama-joycaption-beta-one-hf-llava.Q5_K_M.gguf) | +| JoyCaption Beta One (Q6_K) | 6.60GB | ~8GB | Near Original | Maximum quality (12GB+) | [Download](https://huggingface.co/mradermacher/llama-joycaption-beta-one-hf-llava-GGUF/resolve/main/llama-joycaption-beta-one-hf-llava.Q6_K.gguf) | +| JoyCaption Beta One (Q8_0) | 8.54GB | ~10GB | Original- | Full precision alternative | [Download](https://huggingface.co/mradermacher/llama-joycaption-beta-one-hf-llava-GGUF/resolve/main/llama-joycaption-beta-one-hf-llava.Q8_0.gguf) | +| JoyCaption Beta One (F16) | 16.1GB | ~18GB | Original | Full precision (24GB+) | [Download](https://huggingface.co/mradermacher/llama-joycaption-beta-one-hf-llava-GGUF/resolve/main/llama-joycaption-beta-one-hf-llava.f16.gguf) | + +#### Alternative GGUF Sources +| Model | Size | Source | Link | +| ----- | ---- | ------ | ---- | +| JoyCaption Beta One (Q4_K) | 4.92GB | concedo | [Download](https://huggingface.co/concedo/llama-joycaption-beta-one-hf-llava-mmproj-gguf/resolve/main/Llama-Joycaption-Beta-One-Hf-Llava-Q4_K.gguf) | +| JoyCaption Beta One (Q8_0) | 8.54GB | concedo | [Download](https://huggingface.co/concedo/llama-joycaption-beta-one-hf-llava-mmproj-gguf/resolve/main/Llama-Joycaption-Beta-One-Hf-Llava-Q8_0.gguf) | +| JoyCaption Beta One (F16) | 16.1GB | concedo | [Download](https://huggingface.co/concedo/llama-joycaption-beta-one-hf-llava-mmproj-gguf/resolve/main/Llama-Joycaption-Beta-One-Hf-Llava-F16.gguf) | + +**Note**: GGUF models also require the vision projection model: +- [llama-joycaption-beta-one-llava-mmproj-model-f16.gguf](https://huggingface.co/concedo/llama-joycaption-beta-one-hf-llava-mmproj-gguf/resolve/main/llama-joycaption-beta-one-llava-mmproj-model-f16.gguf) + +After downloading, place the model files in your `ComfyUI/models/LLM/GGUF` directory. + +## Basic Usage + +### Standard Nodes (HuggingFace Models) + +#### Basic Node +1. Add the "JoyCaption" node from the `🧪AILab/📝JoyCaption` category +2. Connect an image source to the node +3. Select the model file (defaults to `llama-joycaption-beta-one-hf-llava`) +4. Adjust the parameters as needed +5. Run the workflow + +#### Advanced Node +1. Add the "JoyCaption (Advanced)" node from the `🧪AILab/📝JoyCaption` category +2. Connect an image source to the node +3. Select the caption type +4. Adjust the parameters as needed +5. Run the workflow + +### GGUF Nodes (Recommended for Better Performance) + +#### GGUF Basic Node +1. Add the "JoyCaption GGUF" node from the `🧪AILab/📝JoyCaption-GGUF` category +2. Connect an image source to the node +3. Select the GGUF model (e.g., "JoyCaption Beta One (IQ4_XS)") +4. Choose processing mode (GPU/CPU) +5. Select caption style and length +6. Run the workflow + +#### GGUF Advanced Node +1. Add the "JoyCaption GGUF (Advanced)" node from the `🧪AILab/📝JoyCaption-GGUF` category +2. Connect an image source to the node +3. Configure all generation parameters (temperature, top_p, top_k, etc.) +4. Set custom prompts if needed +5. Run the workflow + +## Caption Tools + +### Image Batch Path 🖼️ + +This node allows you to load multiple images from a directory for batch processing: + +| Parameter | Description | +| --------- | ----------- | +| **image_dir** | Directory path containing images | +| **batch_size** | Number of images to load (0 = all images) | +| **start_from** | Start from Nth image (1 = first image) | +| **sort_method** | Image loading order: sequential/reverse/random | + +### Caption Saver 📝 + +This node saves generated captions to text files: + +| Parameter | Description | +| --------- | ----------- | +| **string** | Caption text to save | +| **image_path** | Path to the image being captioned | +| **image** | (Optional) Image to save alongside the caption | +| **custom_output_path** | (Optional) Custom output directory path | +| **custom_file_name** | (Optional) Custom filename (without extension) | +| **overwrite** | If true, will overwrite existing files; if false, will add a number to make the filename unique | + +### Parameters + +#### Standard Nodes + +##### Basic Node +| Parameter | Description | Default | Range | +| --------- | ----------- | ------- | ----- | +| **Model** | The JoyCaption model to use | `llama-joycaption-beta-one-hf-llava` | - | +| **Memory Control** | Memory optimization settings | Default | Default (fp32), Balanced (8-bit), Maximum Savings (4-bit) | +| **Caption Type** | Caption style selection | Descriptive | Descriptive, Descriptive (Casual), Straightforward, Tags, Technical, Artistic | +| **Caption Length** | Output length control | medium | any, very short, short, medium, long, very long | + +#### GGUF Nodes + +##### GGUF Basic Node +| Parameter | Description | Default | Range | +| --------- | ----------- | ------- | ----- | +| **Model** | GGUF model to use | JoyCaption Beta One (IQ4_XS) | Q2_K, IQ4_XS, Q5_K_M, Q6_K | +| **Processing Mode** | Hardware acceleration | GPU | GPU, CPU | +| **Caption Type** | Caption style selection | Descriptive | Descriptive, Descriptive (Casual), Straightforward, Tags, Technical, Artistic | +| **Caption Length** | Output length control | any | any, very short, short, medium, long, very long | +| **Memory Management** | Model memory handling | Keep in Memory | Keep in Memory, Clear After Run, Global Cache | + +##### GGUF Advanced Node +| Parameter | Description | Default | Range | +| --------- | ----------- | ------- | ----- | +| **Model** | GGUF model to use | JoyCaption Beta One (IQ4_XS) | Q2_K, IQ4_XS, Q5_K_M, Q6_K | +| **Processing Mode** | Hardware acceleration | GPU | GPU, CPU | +| **Max New Tokens** | Maximum tokens to generate | 512 | 1-2048 | +| **Temperature** | Generation randomness | 0.6 | 0.0-2.0 | +| **Top-p** | Nucleus sampling | 0.9 | 0.0-1.0 | +| **Top-k** | Top-k sampling | 0 | 0-100 | +| **Custom Prompt** | Custom prompt template | "" | Any text | +| **Memory Management** | Model memory handling | Keep in Memory | Keep in Memory, Clear After Run, Global Cache | + + +### Quantization Options + +#### Standard Models (HuggingFace) +| Mode | Precision | Memory Usage | Speed | Quality | Recommended GPU | +|------|-----------|--------------|-------|---------|----------------| +| Default | fp32 | ~16GB | 1x | Best | 24GB+ | +| Default | bf16 | ~8GB | 1.5x | Excellent | 16GB+ | +| Default | fp16 | ~8GB | 2x | Very Good | 16GB+ | +| Balanced | 8-bit | ~4GB | 2.5x | Good | 12GB+ | +| Maximum Savings | 4-bit | ~2GB | 3x | Acceptable | 8GB+ | + +#### GGUF Models (Recommended) +| Quantization | Model Size | Memory Usage | Speed | Quality | Recommended GPU | +|-------------|------------|--------------|-------|---------|----------------| +| Q2_K | 3.18GB | ~4GB | 4x | Good | 6GB+ | +| Q3_K_S | 3.66GB | ~5GB | 3.5x | Good+ | 8GB+ | +| Q3_K_M | 4.02GB | ~5GB | 3.5x | Better | 8GB+ | +| Q3_K_L | 4.32GB | ~6GB | 3x | Better+ | 8GB+ | +| IQ4_XS | 4.48GB | ~6GB | 3x | Very Good | 8GB+ | +| Q4_K_S | 4.69GB | ~6GB | 3x | Very Good | 8GB+ | +| Q4_K_M | 4.92GB | ~7GB | 2.5x | Very Good+ | 10GB+ | +| Q5_K_S | 5.60GB | ~7GB | 2.5x | Excellent | 10GB+ | +| Q5_K_M | 5.73GB | ~8GB | 2.5x | Excellent+ | 12GB+ | +| Q6_K | 6.60GB | ~8GB | 2x | Near Original | 12GB+ | +| Q8_0 | 8.54GB | ~10GB | 1.8x | Original- | 16GB+ | +| F16 | 16.1GB | ~18GB | 1.5x | Original | 24GB+ | + +**Note**: GGUF models provide better performance and lower memory usage compared to standard models. IQ4_XS offers the best balance of quality and efficiency. + +#### Advanced Node + +| Parameter | Description | Default | Range | +| --------- | ----------- | ------- | ----- | +| **Extra Options** | Additional feature options | [] | Multiple options | +| **Person Name** | Name for person descriptions | "" | Any text | +| **Max New Tokens** | Maximum tokens to generate | 512 | 1-2048 | +| **Temperature** | Generation temperature | 0.6 | 0.0-2.0 | +| **Top-p** | Sampling parameter | 0.9 | 0.0-1.0 | +| **Top-k** | Top-k sampling | 0 | 0-100 | +| **Precision** | Use fp32 for best quality, bf16 for balanced performance, fp16 for maximum speed. 8-bit and 4-bit quantization provide significant memory savings with minimal quality impact | + +### Memory Management Options + +| Mode | Description | Recommended Use | +|------|-------------|-----------------| +| Global Cache | Keeps model in memory for fastest processing | High VRAM GPUs (16GB+) | +| Keep in Memory | Maintains model in memory until workflow ends | Medium VRAM GPUs (8GB+) | +| Clear After Run | Clears model after each generation | Low VRAM GPUs (<8GB) | + +## Setting Tips + +| Setting | Recommendation | +| ------- | -------------- | +| **Model Choice** | Use GGUF models for better performance and lower memory usage. IQ4_XS offers the best balance of quality and efficiency | +| **Memory Mode** | Based on GPU VRAM: 24GB+ use Global Cache, 12GB+ use Keep in Memory, 8GB+ use Clear After Run | +| **Processing Mode** | Use GPU mode for faster processing, CPU mode for systems with limited VRAM | +| **Input Resolution** | The model works best with images of 512x512 or higher resolution | +| **Memory Usage** | If you encounter memory issues, try GGUF Q2_K model or use Clear After Run mode | +| **Performance** | For batch processing, consider using Global Cache mode with GGUF models if you have sufficient VRAM | +| **Temperature** | Lower values (0.6-0.7) for more stable results, higher values (0.8-1.0) for more diverse results | +| **Top-k Parameter** | Set to 0 to disable, or use values like 40-50 for more focused generation | + +## About Model + +This implementation uses LLaVA-based image captioning models, optimized to provide fast and accurate image descriptions. + +Model features: +* Free and open weights +* Uncensored content coverage +* Broad style diversity (digital art, photoreal, anime, etc.) +* Fast processing with bfloat16 precision +* High-quality caption generation +* Memory-efficient operation +* Consistent results across various image types +* Support for multiple caption styles +* Optimized for training diffusion models + +The models are trained on diverse datasets, ensuring: +* Balanced representation across different image types +* High accuracy in various scenarios +* Robust performance with complex scenes +* Support for both SFW and NSFW content +* Equal coverage of different styles and concepts + +## Roadmap + +### ✅ Completed (v1.3.0) +* ✅ GGUF model support for better performance +* ✅ Support for 12 GGUF quantization formats (Q2_K to F16) +* ✅ Enhanced error handling and parameter validation +* ✅ Clean console output (no debug spam) +* ✅ Improved memory management options +* ✅ Batch processing support (Caption Tools) +* ✅ Performance optimizations for CPU processing (GGUF CPU mode) +* ✅ Enhanced batch processing features with memory management + +### 🔄 Future Plans +* More caption style options and custom prompts +* Advanced fine-tuning support for custom models +* Real-time processing optimizations +* Multi-language caption support +* Integration with more vision-language models + +## Credits + +* **Original JoyCaption Model**: [fancyfeast](https://huggingface.co/fancyfeast) - Creator of the base JoyCaption models +* **GGUF Quantized Models**: [mradermacher](https://huggingface.co/mradermacher) - Provider of comprehensive GGUF quantized models (Q2_K to F16) +* **Alternative GGUF Models**: [concedo](https://huggingface.co/concedo) - Provider of alternative GGUF models with vision projection +* **ComfyUI Integration**: [1038lab](https://github.com/1038lab) - Developer of this ComfyUI custom node +* **LLaVA Framework**: Microsoft Research - Base vision-language model architecture +* **llama-cpp-python**: [abetlen](https://github.com/abetlen/llama-cpp-python) - Python bindings for llama.cpp + +## License + + +This repository's code is released under the GPL-3.0 License. + + + + + diff --git a/ComfyUI-JoyCaption/README_ZH.md b/ComfyUI-JoyCaption/README_ZH.md new file mode 100644 index 0000000000000000000000000000000000000000..2fde91af26962605c31c5c0200a4b6d0246f0e6e --- /dev/null +++ b/ComfyUI-JoyCaption/README_ZH.md @@ -0,0 +1,300 @@ +# ComfyUI-JoyCaption + +[English](README.md) | [简体中文](README_ZH.md) + +ComfyUI 自定义节点,基于 LLaVA VLM 提供高级图像描述功能,支持自定义风格和内存优化推理。 + +## 功能特点 + +- 简单友好的用户界面 +- 支持多种描述类型 +- 灵活的长度控制 +- 内存优化选项 +- **GGUF 模型支持** - 高效的量化模型,提供更好的性能和更低的内存使用 +- **自动模型下载** - 首次使用时自动下载并正确重命名模型 +- 支持多种描述类型 +- 支持高级自定义选项 +- 多种精度选项 (fp32, bf16, fp16, 8-bit, 4-bit) +- 增强的内存管理,支持全局缓存模式 +- 干净的控制台输出(无调试垃圾信息) +- 强大的错误处理和参数验证 +- **llama_cpp_install文件夹** - 完整的llama-cpp-python安装指南和自动化脚本 + +## 安装 + +1. 将此仓库克隆到您的 `ComfyUI/custom_nodes` 目录: +```bash +cd ComfyUI/custom_nodes +git clone https://github.com/1038lab/ComfyUI-JoyCaption.git +``` + +2. 安装所需依赖: +```bash +cd ComfyUI/custom_nodes/ComfyUI-JoyCaption +pip install -r requirements.txt +``` + +3. **GGUF模型(推荐)**: 安装支持CUDA的llama-cpp-python: +```bash +# 选项1: 自动化安装(推荐) +python llama_cpp_install/llama_cpp_install.py + +# 选项2: 手动安装 +pip install -r requirements_gguf.txt +``` + +**可用安装指南:** +- **English**: [llama_cpp_install/llama_cpp_install.md](llama_cpp_install/llama_cpp_install.md) +- **中文**: [llama_cpp_install/llama_cpp_install_zh.md](llama_cpp_install/llama_cpp_install_zh.md) + +## 下载模型 +模型将在首次使用时自动下载并重命名,或者您可以手动下载: + +### 标准模型(HuggingFace 格式) +| 模型 | 链接 | 内存使用 | +| ----- | ---- | ------------ | +| JoyCaption Beta One | [下载](https://huggingface.co/fancyfeast/llama-joycaption-beta-one-hf-llava) | ~8-16GB | +| JoyCaption Alpha Two | [下载](https://huggingface.co/fancyfeast/llama-joycaption-alpha-two-hf-llava) | ~8-16GB | + +### GGUF 模型(量化,推荐) +| 模型 | 大小 | 内存使用 | 质量 | 推荐用途 | 链接 | +| ----- | ---- | ------------ | ------- | --------------- | ---- | +| JoyCaption Beta One (Q2_K) | 3.18GB | ~4GB | 良好 | 低显存 (6GB+) | [下载](https://huggingface.co/mradermacher/llama-joycaption-beta-one-hf-llava-GGUF/resolve/main/llama-joycaption-beta-one-hf-llava.Q2_K.gguf) | +| JoyCaption Beta One (Q3_K_S) | 3.66GB | ~5GB | 良好+ | 预算系统 (8GB+) | [下载](https://huggingface.co/mradermacher/llama-joycaption-beta-one-hf-llava-GGUF/resolve/main/llama-joycaption-beta-one-hf-llava.Q3_K_S.gguf) | +| JoyCaption Beta One (Q3_K_M) | 4.02GB | ~5GB | 更好 | 平衡性能 | [下载](https://huggingface.co/mradermacher/llama-joycaption-beta-one-hf-llava-GGUF/resolve/main/llama-joycaption-beta-one-hf-llava.Q3_K_M.gguf) | +| JoyCaption Beta One (Q3_K_L) | 4.32GB | ~6GB | 更好+ | 质量/大小平衡 | [下载](https://huggingface.co/mradermacher/llama-joycaption-beta-one-hf-llava-GGUF/resolve/main/llama-joycaption-beta-one-hf-llava.Q3_K_L.gguf) | +| JoyCaption Beta One (IQ4_XS) | 4.48GB | ~6GB | 很好 | **推荐** (8GB+) | [下载](https://huggingface.co/mradermacher/llama-joycaption-beta-one-hf-llava-GGUF/resolve/main/llama-joycaption-beta-one-hf-llava.IQ4_XS.gguf) | +| JoyCaption Beta One (Q4_K_S) | 4.69GB | ~6GB | 很好 | 质量导向 | [下载](https://huggingface.co/mradermacher/llama-joycaption-beta-one-hf-llava-GGUF/resolve/main/llama-joycaption-beta-one-hf-llava.Q4_K_S.gguf) | +| JoyCaption Beta One (Q4_K_M) | 4.92GB | ~7GB | 很好+ | 平衡选择 | [下载](https://huggingface.co/mradermacher/llama-joycaption-beta-one-hf-llava-GGUF/resolve/main/llama-joycaption-beta-one-hf-llava.Q4_K_M.gguf) | +| JoyCaption Beta One (Q5_K_S) | 5.60GB | ~7GB | 优秀 | 高质量 (10GB+) | [下载](https://huggingface.co/mradermacher/llama-joycaption-beta-one-hf-llava-GGUF/resolve/main/llama-joycaption-beta-one-hf-llava.Q5_K_S.gguf) | +| JoyCaption Beta One (Q5_K_M) | 5.73GB | ~8GB | 优秀+ | 高端质量 | [下载](https://huggingface.co/mradermacher/llama-joycaption-beta-one-hf-llava-GGUF/resolve/main/llama-joycaption-beta-one-hf-llava.Q5_K_M.gguf) | +| JoyCaption Beta One (Q6_K) | 6.60GB | ~8GB | 接近原版 | 最高质量 (12GB+) | [下载](https://huggingface.co/mradermacher/llama-joycaption-beta-one-hf-llava-GGUF/resolve/main/llama-joycaption-beta-one-hf-llava.Q6_K.gguf) | +| JoyCaption Beta One (Q8_0) | 8.54GB | ~10GB | 原版- | 全精度替代 | [下载](https://huggingface.co/mradermacher/llama-joycaption-beta-one-hf-llava-GGUF/resolve/main/llama-joycaption-beta-one-hf-llava.Q8_0.gguf) | +| JoyCaption Beta One (F16) | 16.1GB | ~18GB | 原版 | 全精度 (24GB+) | [下载](https://huggingface.co/mradermacher/llama-joycaption-beta-one-hf-llava-GGUF/resolve/main/llama-joycaption-beta-one-hf-llava.f16.gguf) | + +#### 备选 GGUF 源 +| 模型 | 大小 | 来源 | 链接 | +| ----- | ---- | ------ | ---- | +| JoyCaption Beta One (Q4_K) | 4.92GB | concedo | [下载](https://huggingface.co/concedo/llama-joycaption-beta-one-hf-llava-mmproj-gguf/resolve/main/Llama-Joycaption-Beta-One-Hf-Llava-Q4_K.gguf) | +| JoyCaption Beta One (Q8_0) | 8.54GB | concedo | [下载](https://huggingface.co/concedo/llama-joycaption-beta-one-hf-llava-mmproj-gguf/resolve/main/Llama-Joycaption-Beta-One-Hf-Llava-Q8_0.gguf) | +| JoyCaption Beta One (F16) | 16.1GB | concedo | [下载](https://huggingface.co/concedo/llama-joycaption-beta-one-hf-llava-mmproj-gguf/resolve/main/Llama-Joycaption-Beta-One-Hf-Llava-F16.gguf) | + +**注意**:GGUF 模型还需要视觉投影模型: +- [llama-joycaption-beta-one-llava-mmproj-model-f16.gguf](https://huggingface.co/concedo/llama-joycaption-beta-one-hf-llava-mmproj-gguf/resolve/main/llama-joycaption-beta-one-llava-mmproj-model-f16.gguf) + +下载后,将模型文件放置在 `ComfyUI/models/LLM/GGUF` 目录中。 + +## 基本使用 + +### 标准节点(HuggingFace 模型) + +#### 基础节点 +1. 从 `🧪AILab/📝JoyCaption` 类别添加 "JoyCaption" 节点 +2. 将图像源连接到节点 +3. 选择模型文件(默认为 `llama-joycaption-beta-one-hf-llava`) +4. 根据需要调整参数 +5. 运行工作流 + +#### 高级节点 +1. 从 `🧪AILab/📝JoyCaption` 类别添加 "JoyCaption (Advanced)" 节点 +2. 将图像源连接到节点 +3. 选择描述类型 +4. 根据需要调整参数 +5. 运行工作流 + +### GGUF 节点(推荐,性能更佳) + +#### GGUF 基础节点 +1. 从 `🧪AILab/📝JoyCaption-GGUF` 类别添加 "JoyCaption GGUF" 节点 +2. 将图像源连接到节点 +3. 选择 GGUF 模型(例如 "JoyCaption Beta One (IQ4_XS)") +4. 选择处理模式(GPU/CPU) +5. 选择描述风格和长度 +6. 运行工作流 + +#### GGUF 高级节点 +1. 从 `🧪AILab/📝JoyCaption-GGUF` 类别添加 "JoyCaption GGUF (Advanced)" 节点 +2. 将图像源连接到节点 +3. 配置所有生成参数(temperature、top_p、top_k 等) +4. 如需要可设置自定义提示 +5. 运行工作流 + +## 描述工具 + +### 图像批处理路径 🖼️ + +此节点允许您从目录中加载多个图像进行批处理: + +| 参数 | 描述 | +| --------- | ----------- | +| **image_dir** | 包含图像的目录路径 | +| **batch_size** | 要加载的图像数量(0 = 所有图像) | +| **start_from** | 从第N张图像开始(1 = 第一张图像) | +| **sort_method** | 图像加载顺序:顺序/倒序/随机 | + +### 描述保存器 📝 + +此节点将生成的描述保存到文本文件: + +| 参数 | 描述 | +| --------- | ----------- | +| **string** | 要保存的描述文本 | +| **image_path** | 被描述图像的路径 | +| **image** | (可选)要与描述一起保存的图像 | +| **custom_output_path** | (可选)自定义输出目录路径 | +| **custom_file_name** | (可选)自定义文件名(不带扩展名) | +| **overwrite** | 如果为true,将覆盖现有文件;如果为false,将添加数字使文件名唯一 | + +### 参数说明 + +#### 标准节点 + +##### 基础节点 +| 参数 | 描述 | 默认值 | 范围 | +| --------- | ----------- | ------- | ----- | +| **Model** | 使用的 JoyCaption 模型 | `llama-joycaption-beta-one-hf-llava` | - | +| **Memory Control** | 内存优化设置 | Default | Default (fp32), Balanced (8-bit), Maximum Savings (4-bit) | +| **Caption Type** | 描述风格选择 | Descriptive | Descriptive, Descriptive (Casual), Straightforward, Tags, Technical, Artistic | +| **Caption Length** | 输出长度控制 | medium | any, very short, short, medium, long, very long | + +#### GGUF 节点 + +##### GGUF 基础节点 +| 参数 | 描述 | 默认值 | 范围 | +| --------- | ----------- | ------- | ----- | +| **Model** | 使用的 GGUF 模型 | JoyCaption Beta One (IQ4_XS) | Q2_K, IQ4_XS, Q5_K_M, Q6_K | +| **Processing Mode** | 硬件加速 | GPU | GPU, CPU | +| **Caption Type** | 描述风格选择 | Descriptive | Descriptive, Descriptive (Casual), Straightforward, Tags, Technical, Artistic | +| **Caption Length** | 输出长度控制 | any | any, very short, short, medium, long, very long | +| **Memory Management** | 模型内存处理 | Keep in Memory | Keep in Memory, Clear After Run, Global Cache | + +##### GGUF 高级节点 +| 参数 | 描述 | 默认值 | 范围 | +| --------- | ----------- | ------- | ----- | +| **Model** | 使用的 GGUF 模型 | JoyCaption Beta One (IQ4_XS) | Q2_K, IQ4_XS, Q5_K_M, Q6_K | +| **Processing Mode** | 硬件加速 | GPU | GPU, CPU | +| **Max New Tokens** | 最大生成标记数 | 512 | 1-2048 | +| **Temperature** | 生成随机性 | 0.6 | 0.0-2.0 | +| **Top-p** | 核采样 | 0.9 | 0.0-1.0 | +| **Top-k** | Top-k 采样 | 0 | 0-100 | +| **Custom Prompt** | 自定义提示模板 | "" | 任意文本 | +| **Memory Management** | 模型内存处理 | Keep in Memory | Keep in Memory, Clear After Run, Global Cache | + +### 量化选项 + +#### 标准模型(HuggingFace) +| 模式 | 精度 | 内存使用 | 速度 | 质量 | 推荐 GPU | +|------|-----------|--------------|-------|---------|----------------| +| Default | fp32 | ~16GB | 1x | 最佳 | 24GB+ | +| Default | bf16 | ~8GB | 1.5x | 优秀 | 16GB+ | +| Default | fp16 | ~8GB | 2x | 很好 | 16GB+ | +| Balanced | 8-bit | ~4GB | 2.5x | 良好 | 12GB+ | +| Maximum Savings | 4-bit | ~2GB | 3x | 可接受 | 8GB+ | + +#### GGUF 模型(推荐) +| 量化 | 模型大小 | 内存使用 | 速度 | 质量 | 推荐 GPU | +|-------------|------------|--------------|-------|---------|----------------| +| Q2_K | 3.18GB | ~4GB | 4x | 良好 | 6GB+ | +| Q3_K_S | 3.66GB | ~5GB | 3.5x | 良好+ | 8GB+ | +| Q3_K_M | 4.02GB | ~5GB | 3.5x | 更好 | 8GB+ | +| Q3_K_L | 4.32GB | ~6GB | 3x | 更好+ | 8GB+ | +| IQ4_XS | 4.48GB | ~6GB | 3x | 很好 | 8GB+ | +| Q4_K_S | 4.69GB | ~6GB | 3x | 很好 | 8GB+ | +| Q4_K_M | 4.92GB | ~7GB | 2.5x | 很好+ | 10GB+ | +| Q5_K_S | 5.60GB | ~7GB | 2.5x | 优秀 | 10GB+ | +| Q5_K_M | 5.73GB | ~8GB | 2.5x | 优秀+ | 12GB+ | +| Q6_K | 6.60GB | ~8GB | 2x | 接近原版 | 12GB+ | +| Q8_0 | 8.54GB | ~10GB | 1.8x | 原版- | 16GB+ | +| F16 | 16.1GB | ~18GB | 1.5x | 原版 | 24GB+ | + +**注意**:GGUF 模型相比标准模型提供更好的性能和更低的内存使用。IQ4_XS 提供质量和效率的最佳平衡。 + +#### 高级节点 + +| 参数 | 描述 | 默认值 | 范围 | +| --------- | ----------- | ------- | ----- | +| **Extra Options** | 额外功能选项 | [] | 多个选项 | +| **Person Name** | 人物描述名称 | "" | 任意文本 | +| **Max New Tokens** | 最大生成标记数 | 512 | 1-2048 | +| **Temperature** | 生成温度 | 0.6 | 0.0-2.0 | +| **Top-p** | 采样参数 | 0.9 | 0.0-1.0 | +| **Top-k** | Top-k 采样 | 0 | 0-100 | + +### 内存管理选项 + +| 模式 | 描述 | 推荐使用 | +|------|-------------|-----------------| +| 全局缓存 | 将模型保持在内存中以获得最快的处理速度 | 高显存 GPU (16GB+) | +| 保持内存 | 在工作流结束前保持模型在内存中 | 中等显存 GPU (8GB+) | +| 运行后清除 | 每次生成后清除模型 | 低显存 GPU (<8GB) | + +## 设置建议 + +| 设置 | 建议 | +| ------- | -------------- | +| **模型选择** | 使用 GGUF 模型获得更好的性能和更低的内存使用。IQ4_XS 提供质量和效率的最佳平衡 | +| **内存模式** | 根据 GPU 显存:24GB+ 使用全局缓存,12GB+ 使用保持内存,8GB+ 使用运行后清除 | +| **处理模式** | 使用 GPU 模式获得更快处理速度,CPU 模式适用于显存有限的系统 | +| **输入分辨率** | 模型最适合 512x512 或更高分辨率的图像 | +| **内存使用** | 如果遇到内存问题,尝试 GGUF Q2_K 模型或使用运行后清除模式 | +| **性能** | 对于批处理,如果有足够的显存,考虑使用 GGUF 模型的全局缓存模式 | +| **Temperature** | 较低值 (0.6-0.7) 获得更稳定的结果,较高值 (0.8-1.0) 获得更多样化的结果 | +| **Top-k 参数** | 设置为 0 禁用,或使用 40-50 等值获得更集中的生成 | + +## 关于模型 + +本实现使用基于 LLaVA 的图像描述模型,经过优化以提供快速准确的图像描述。 + +模型特点: +* 免费开源权重 +* 无内容审查限制 +* 广泛的风格多样性(数字艺术、照片级真实感、动漫等) +* 使用 bfloat16 精度快速处理 +* 高质量描述生成 +* 内存高效运行 +* 在各种图像类型上保持一致性 +* 支持多种描述风格 +* 针对扩散模型训练优化 + +模型在多样化数据集上训练,确保: +* 不同图像类型的平衡表示 +* 各种场景下的高准确性 +* 复杂场景的稳健性能 +* 支持 SFW 和 NSFW 内容 +* 不同风格和概念的平等覆盖 + +## 路线图 + +### ✅ 已完成(v1.3.0) +* ✅ GGUF 模型支持,提供更好的性能 +* ✅ 支持 12 种 GGUF 量化格式(Q2_K 到 F16) +* ✅ 增强的错误处理和参数验证 +* ✅ 干净的控制台输出(无调试垃圾信息) +* ✅ 改进的内存管理选项 +* ✅ 批处理支持(描述工具) +* ✅ CPU 处理性能优化(GGUF CPU 模式) +* ✅ 增强的批处理功能与内存管理 + +### 🔄 未来计划 +* 更多描述风格选项和自定义提示 +* 高级微调支持自定义模型 +* 实时处理优化 +* 多语言描述支持 +* 集成更多视觉-语言模型 + +## 致谢 + +* **原始 JoyCaption 模型**: [fancyfeast](https://huggingface.co/fancyfeast) - 基础 JoyCaption 模型的创建者 +* **GGUF 量化模型**: [mradermacher](https://huggingface.co/mradermacher) - 提供全面的 GGUF 量化模型 (Q2_K 到 F16) +* **备选 GGUF 模型**: [concedo](https://huggingface.co/concedo) - 提供带视觉投影的备选 GGUF 模型 +* **ComfyUI 集成**: [1038lab](https://github.com/1038lab) - 此 ComfyUI 自定义节点的开发者 +* **LLaVA 框架**: Microsoft Research - 基础视觉-语言模型架构 +* **llama-cpp-python**: [abetlen](https://github.com/abetlen/llama-cpp-python) - llama.cpp 的 Python 绑定 + +## 许可证 + +本仓库代码基于 GPL-3.0 许可证发布。 + + +模型采用 GPL-3.0 许可证发布。请参阅 [LICENSE](LICENSE) 文件了解详情。 + diff --git a/ComfyUI-JoyCaption/__init__.py b/ComfyUI-JoyCaption/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..a68e3083738d0ecb059aa6025455d81c583ec43c --- /dev/null +++ b/ComfyUI-JoyCaption/__init__.py @@ -0,0 +1,71 @@ +import os +import importlib +import sys +from pathlib import Path + +current_dir = Path(__file__).parent + +if str(current_dir) not in sys.path: + sys.path.insert(0, str(current_dir)) + +NODE_CLASS_MAPPINGS = {} +NODE_DISPLAY_NAME_MAPPINGS = {} + +EXCLUDE_FILES = ['__init__.py', '__pycache__'] + +# Enable Windows color support +if sys.platform == 'win32': + os.system('color') + +# Check if llama-cpp-python is available for GGUF functionality +GGUF_AVAILABLE = False +try: + import llama_cpp + GGUF_AVAILABLE = True +except ImportError: + # Use Windows color codes for better visibility + print("\n" + "=" * 80) + print("\033[91mWARNING: llama-cpp-python library not found, GGUF functionality is not available\033[0m") + print("\033[93mTo use GGUF features, install additional dependencies:\033[0m") + print("\033[96mpip install -r requirements_gguf.txt\033[0m") + + # Check if installation guide exists and provide link + install_guide = current_dir / "llama_cpp_install.md" + if install_guide.exists(): + print("\033[93mFor detailed installation instructions with CUDA support, please see:\033[0m") + print(f"\033[96m{install_guide}\033[0m") + + print("\033[92mBasic JoyCaption functionality is still available\033[0m") + print("=" * 80 + "\n") +except Exception as e: + print("\n" + "=" * 80) + print(f"\033[91mError loading GGUF dependencies: {str(e)}\033[0m") + print("\033[92mBasic JoyCaption functionality is still available\033[0m") + print("=" * 80 + "\n") + +# Process all Python files in a deterministic order to avoid import-time races +for file in sorted(current_dir.glob('*.py')): + if file.name not in EXCLUDE_FILES: + try: + module_name = file.stem + spec = importlib.util.spec_from_file_location(module_name, str(file)) + module = importlib.util.module_from_spec(spec) + sys.modules[module_name] = module + + # Skip GGUF module if llama-cpp-python is not available + if not GGUF_AVAILABLE and module_name == 'JC_GGUF': + continue + + spec.loader.exec_module(module) + + if hasattr(module, 'NODE_CLASS_MAPPINGS'): + NODE_CLASS_MAPPINGS.update(module.NODE_CLASS_MAPPINGS) + + if hasattr(module, 'NODE_DISPLAY_NAME_MAPPINGS'): + NODE_DISPLAY_NAME_MAPPINGS.update(module.NODE_DISPLAY_NAME_MAPPINGS) + except Exception as e: + print(f"Error loading module {module_name}: {str(e)}") + if module_name != 'JC_GGUF': # Only show warning for non-GGUF modules + print(f"Warning: Failed to load {module_name} module") + +__all__ = ['NODE_CLASS_MAPPINGS', 'NODE_DISPLAY_NAME_MAPPINGS'] \ No newline at end of file diff --git a/ComfyUI-JoyCaption/__pycache__/CaptionTools.cpython-310.pyc b/ComfyUI-JoyCaption/__pycache__/CaptionTools.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2285bdbfc0950835adc69278497de256e2d9da64 Binary files /dev/null and b/ComfyUI-JoyCaption/__pycache__/CaptionTools.cpython-310.pyc differ diff --git a/ComfyUI-JoyCaption/__pycache__/JC.cpython-310.pyc b/ComfyUI-JoyCaption/__pycache__/JC.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..47817ebc4bbc538f8b4d6da027ca71cf5c34e61b Binary files /dev/null and b/ComfyUI-JoyCaption/__pycache__/JC.cpython-310.pyc differ diff --git a/ComfyUI-JoyCaption/__pycache__/__init__.cpython-310.pyc b/ComfyUI-JoyCaption/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f90a06ff9313896c05f0f675fc6bb6dd346f3d84 Binary files /dev/null and b/ComfyUI-JoyCaption/__pycache__/__init__.cpython-310.pyc differ diff --git a/ComfyUI-JoyCaption/custom_models.md b/ComfyUI-JoyCaption/custom_models.md new file mode 100644 index 0000000000000000000000000000000000000000..a3d772c2e6805fe9a1a86c250ae871886998e1c9 --- /dev/null +++ b/ComfyUI-JoyCaption/custom_models.md @@ -0,0 +1,154 @@ +# 🧩 JoyCaption Custom Models Guide +Supports both **HF** and **GGUF** model customization. + +--- + +## 💡 Overview +Starting from **JoyCaption v2.0.2**, users can register **their own models** — +without modifying any of the repository’s internal configuration files. + +This makes it easy to: +- Test your own LLaVA / Phi / Qwen / Mistral etc. models +- Add new quantized GGUF models +- Keep your changes persistent between JoyCaption updates + +--- + +## 📁 File Location +Create or edit this file in your JoyCaption directory: + +``` + +ComfyUI/custom_nodes/ComfyUI-JoyCaption/custom_models.json + +```` + +If the file doesn’t exist, JoyCaption will **skip it safely** (no errors). +You can also copy the provided `custom_models_example.json` and rename it. + +--- + +## ⚙️ File Structure + +```json +{ + "hf_models": { + "My-LLaVA-Model": { + "name": "myusername/llava-custom-model", + "description": "Example Hugging Face model for JoyCaption (HF format)." + } + }, + "gguf_models": { + "My-GGUF-Caption-Model": { + "name": "myusername/llava-custom-gguf/model.gguf", + "description": "Example GGUF model with image captioning support." + } + } +} +```` + +### 🧱 Explanation + +| Key | Description | +| ------------- | --------------------------------------------------------------------- | +| `hf_models` | Models loaded through HuggingFace / Transformers (used by `JC.py`) | +| `gguf_models` | Models using llama.cpp GGUF format (used by `JC_GGUF.py`) | +| `name` | Model identifier — either full HF repo path or local `.gguf` filename | +| `description` | Optional. Appears as tooltip in ComfyUI node interface | + +--- + +## 🧩 Empty Default File + +For users who haven’t added anything yet, +you can safely ship this minimal empty version in the repo: + +```json +{ + "hf_models": {}, + "gguf_models": {} +} +``` + +If the file is empty or missing, JoyCaption will continue using built-in models. + +--- + +## 🧱 Example Template + +An example file `custom_models_example.json` is provided in the repository root: + +```json +{ + "__comment__": "Example for user customization", + "hf_models": { + "My-Phi-Vision": { + "name": "myusername/phi-vision-captioner", + "description": "Custom Phi-based visual captioning model." + } + }, + "gguf_models": { + "My-Gemma-GGUF": { + "name": "mlabonne/gemma-3-27b-it-abliterated-GGUF", + "description": "High-quality GGUF model for image captioning." + } + } +} +``` + +Rename this file to `custom_models.json` to activate it. + +--- + +## 🧰 Behavior Notes + +* ✅ The system merges your `custom_models.json` entries with internal presets. +* ⚙️ The merging happens **at runtime** — no need to modify `jc_data.json`. +* 🧼 Safe: if parsing fails, JoyCaption prints a warning and continues running. +* 🔒 Your file is ignored during updates (no overwriting by git pulls). +* 🖥️ Works for both `JC.py` and `JC_GGUF.py` independently. + +--- + +## 📘 Related Files + +| File | Purpose | +| ---------------------------- | ------------------------------------------------ | +| `JC.py` | Handles HF-based models (e.g., LLaVA, Phi, Qwen) | +| `JC_GGUF.py` | Handles quantized GGUF models | +| `custom_models.json` | Your personal model definitions | +| `custom_models_example.json` | Example reference file | + +--- + +## 🧠 Tips for Power Users + +* You can define **multiple entries** under each section. +* Hugging Face repos can include **subfolders or filenames** if needed: + + ``` + "name": "myrepo/models/llava-custom-4bit/ggml-model-q4_k.gguf" + ``` +* For local models, use the **relative path** under your `ComfyUI/models` directory. +* Descriptions are optional but highly recommended. + +--- + +## 🪄 Troubleshooting + +| Issue | Possible Cause | Fix | +| ------------------------------------------- | ----------------------------------------------------- | -------------------------------------------- | +| Model not showing in dropdown | JSON syntax error or missing section | Validate JSON format | +| “Failed to load custom_models.json” warning | Invalid JSON content | Check braces/quotes | +| Model loads but errors on inference | Wrong path or unsupported format | Verify `name` path and model type | +| GGUF model missing mmproj | Ensure `GGUF_SETTINGS["mmproj_filename"]` file exists | Download via `hf_hub_download` automatically | + +--- + +## 🏁 Summary + +✅ **No internal edits needed** +✅ **Both HF and GGUF supported** +✅ **Safe and optional** +✅ **Updatable without conflicts** + diff --git a/ComfyUI-JoyCaption/custom_models_example.json b/ComfyUI-JoyCaption/custom_models_example.json new file mode 100644 index 0000000000000000000000000000000000000000..3071dcb4542fdd06dc87cb4bab010626e3ee8722 --- /dev/null +++ b/ComfyUI-JoyCaption/custom_models_example.json @@ -0,0 +1,29 @@ +{ + "hf_models": { + "__comment__": "For HuggingFace-format models (handled by JC.py). Each key appears in the dropdown list.", + + "My-LLaVA-Model": { + "name": "myusername/llava-custom-model", + "description": "Example custom Hugging Face model with image captioning capability (LLaVA-based)." + }, + + "My-Phi-Vision": { + "name": "myusername/phi-vision-captioner", + "description": "Optional: a different HF model supporting visual-language tasks." + } + }, + + "gguf_models": { + "__comment__": "For GGUF-format models (handled by JC_GGUF.py). Each key appears in the GGUF model dropdown.", + + "My-GGUF-Caption-Model": { + "name": "myusername/llava-custom-gguf-model/model.gguf", + "description": "Example GGUF model file from Hugging Face (must include correct mmproj if needed)." + }, + + "My-Gemma-GGUF": { + "name": "mlabonne/gemma-3-27b-it-abliterated-GGUF", + "description": "Example: large GGUF model known to work well with JoyCaption." + } + } +} \ No newline at end of file diff --git a/ComfyUI-JoyCaption/example_workflows/JoyCaption-GGUF.json b/ComfyUI-JoyCaption/example_workflows/JoyCaption-GGUF.json new file mode 100644 index 0000000000000000000000000000000000000000..12b850670ce12d1e109b877e52e3bb67ff8b1625 --- /dev/null +++ b/ComfyUI-JoyCaption/example_workflows/JoyCaption-GGUF.json @@ -0,0 +1,345 @@ +{ + "id": "6cdda1b6-9bfc-4b5f-9d6b-60ef9a9d93fc", + "revision": 0, + "last_node_id": 22, + "last_link_id": 26, + "nodes": [ + { + "id": 16, + "type": "ImageBatchPath", + "pos": [ + -611.5386352539062, + 298.06317138671875 + ], + "size": [ + 242.22389221191406, + 180 + ], + "flags": {}, + "order": 0, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "shape": 6, + "type": "IMAGE", + "links": [ + 26 + ] + }, + { + "name": "IMAGE_PATH", + "shape": 6, + "type": "STRING", + "links": [] + } + ], + "properties": { + "Node name for S&R": "ImageBatchPath" + }, + "widgets_values": [ + "O:\\images", + 1, + 2, + "sequential" + ] + }, + { + "id": 19, + "type": "JC_GGUF", + "pos": [ + 235.76669311523438, + 298.06317138671875 + ], + "size": [ + 298.5727233886719, + 174 + ], + "flags": {}, + "order": 2, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 20 + }, + { + "name": "extra_options", + "shape": 7, + "type": "JOYCAPTION_EXTRA_OPTIONS", + "link": null + } + ], + "outputs": [ + { + "name": "STRING", + "type": "STRING", + "links": [ + 22 + ] + } + ], + "properties": { + "Node name for S&R": "JC_GGUF" + }, + "widgets_values": [ + "JoyCaption Beta One (IQ4_XS)", + "GPU", + "Descriptive", + "any", + "Keep in Memory" + ] + }, + { + "id": 11, + "type": "PreviewAny", + "pos": [ + 563.1483154296875, + 782.4658813476562 + ], + "size": [ + 551.0270385742188, + 254.4538116455078 + ], + "flags": {}, + "order": 6, + "mode": 0, + "inputs": [ + { + "name": "source", + "type": "*", + "link": 24 + } + ], + "outputs": [], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.3.49", + "Node name for S&R": "PreviewAny" + }, + "widgets_values": [] + }, + { + "id": 20, + "type": "JC_GGUF_adv", + "pos": [ + 239.39669799804688, + 712.919677734375 + ], + "size": [ + 298.3599853515625, + 324 + ], + "flags": {}, + "order": 3, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 21 + }, + { + "name": "extra_options", + "shape": 7, + "type": "JOYCAPTION_EXTRA_OPTIONS", + "link": null + } + ], + "outputs": [ + { + "name": "PROMPT", + "type": "STRING", + "links": [ + 23 + ] + }, + { + "name": "STRING", + "type": "STRING", + "links": [ + 24 + ] + } + ], + "properties": { + "Node name for S&R": "JC_GGUF_adv" + }, + "widgets_values": [ + "JoyCaption Beta One (IQ4_XS)", + "GPU", + "Stable Diffusion Prompt", + "any", + 512, + 0.6, + 0.9, + 0, + "", + "Keep in Memory" + ] + }, + { + "id": 17, + "type": "AILab_ImagePreview", + "pos": [ + -348.1651306152344, + 298.06317138671875 + ], + "size": [ + 551.80078125, + 738.8565063476562 + ], + "flags": {}, + "order": 1, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 26 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 20, + 21 + ] + } + ], + "properties": { + "cnr_id": "comfyui-rmbg", + "ver": "c36a6a819fef2208316693c29c055b5c558c89e8", + "Node name for S&R": "AILab_ImagePreview" + }, + "widgets_values": [], + "color": "#2e3e57", + "bgcolor": "#4b5b73" + }, + { + "id": 9, + "type": "PreviewAny", + "pos": [ + 557.0983276367188, + 298.06317138671875 + ], + "size": [ + 546.5134887695312, + 241.1837158203125 + ], + "flags": {}, + "order": 4, + "mode": 0, + "inputs": [ + { + "name": "source", + "type": "*", + "link": 22 + } + ], + "outputs": [], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.3.49", + "Node name for S&R": "PreviewAny" + }, + "widgets_values": [] + }, + { + "id": 21, + "type": "PreviewAny", + "pos": [ + 563.1483154296875, + 629.5003051757812 + ], + "size": [ + 385.2570495605469, + 88 + ], + "flags": {}, + "order": 5, + "mode": 0, + "inputs": [ + { + "name": "source", + "type": "*", + "link": 23 + } + ], + "outputs": [], + "properties": { + "cnr_id": "comfy-core", + "ver": "0.3.49", + "Node name for S&R": "PreviewAny" + }, + "widgets_values": [] + } + ], + "links": [ + [ + 20, + 17, + 0, + 19, + 0, + "IMAGE" + ], + [ + 21, + 17, + 0, + 20, + 0, + "IMAGE" + ], + [ + 22, + 19, + 0, + 9, + 0, + "*" + ], + [ + 23, + 20, + 0, + 21, + 0, + "*" + ], + [ + 24, + 20, + 1, + 11, + 0, + "*" + ], + [ + 26, + 16, + 0, + 17, + 0, + "IMAGE" + ] + ], + "groups": [], + "config": {}, + "extra": { + "ds": { + "scale": 0.8264462809917356, + "offset": [ + 751.8155895059733, + 96.63700520386863 + ] + }, + "frontendVersion": "1.24.4" + }, + "version": 0.4 +} \ No newline at end of file diff --git a/ComfyUI-JoyCaption/example_workflows/Joycaption_node.json b/ComfyUI-JoyCaption/example_workflows/Joycaption_node.json new file mode 100644 index 0000000000000000000000000000000000000000..9ee8feb17170504ddfddafe68e18e0350385ff49 --- /dev/null +++ b/ComfyUI-JoyCaption/example_workflows/Joycaption_node.json @@ -0,0 +1,526 @@ +{ + "id": "00000000-0000-0000-0000-000000000000", + "revision": 0, + "last_node_id": 51, + "last_link_id": 77, + "nodes": [ + { + "id": 39, + "type": "JC", + "pos": [ + 1864.2611083984375, + 930 + ], + "size": [ + 290, + 150 + ], + "flags": {}, + "order": 3, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 68 + }, + { + "name": "extra_options", + "shape": 7, + "type": "JOYCAPTION_EXTRA_OPTIONS", + "link": 64 + } + ], + "outputs": [ + { + "name": "STRING", + "type": "STRING", + "links": [ + 73 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "Node name for S&R": "JC", + "widget_ue_connectable": {} + }, + "widgets_values": [ + "joycaption-alpha-two", + "Balanced (8-bit)", + "Stable Diffusion Prompt", + "any" + ], + "color": "#233", + "bgcolor": "#355" + }, + { + "id": 40, + "type": "JC_adv", + "pos": [ + 1864.2611083984375, + 1260 + ], + "size": [ + 290, + 300 + ], + "flags": {}, + "order": 4, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 69 + }, + { + "name": "extra_options", + "shape": 7, + "type": "JOYCAPTION_EXTRA_OPTIONS", + "link": 65 + } + ], + "outputs": [ + { + "name": "PROMPT", + "type": "STRING", + "links": [ + 74 + ] + }, + { + "name": "STRING", + "type": "STRING", + "links": [ + 75 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "Node name for S&R": "JC_adv", + "widget_ue_connectable": {} + }, + "widgets_values": [ + "joycaption-beta-one", + "Balanced (8-bit)", + "Descriptive", + "very long", + 512, + 0.6, + 0.9, + 0, + "" + ], + "color": "#233", + "bgcolor": "#355" + }, + { + "id": 41, + "type": "JC_ExtraOptions", + "pos": [ + 1425.7388916015625, + 1024 + ], + "size": [ + 382.783203125, + 736 + ], + "flags": {}, + "order": 0, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "extra_options", + "type": "JOYCAPTION_EXTRA_OPTIONS", + "links": [ + 64, + 65 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "Node name for S&R": "JC_ExtraOptions", + "widget_ue_connectable": {} + }, + "widgets_values": [ + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + true, + "Amy" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 42, + "type": "AILab_LoadImage", + "pos": [ + 1020, + 930 + ], + "size": [ + 350, + 830 + ], + "flags": {}, + "order": 1, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 67 + ] + }, + { + "name": "MASK", + "type": "MASK", + "links": null + }, + { + "name": "MASK_IMAGE", + "type": "IMAGE", + "links": null + }, + { + "name": "WIDTH", + "type": "INT", + "links": null + }, + { + "name": "HEIGHT", + "type": "INT", + "links": null + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui-rmbg", + "ver": "4faa7c7c12147db95345ee78b30f38273443ff99", + "widget_ue_connectable": {}, + "Node name for S&R": "AILab_LoadImage" + }, + "widgets_values": [ + "ComfyUI_temp_jbrru_00003_.png", + "alpha", + 1, + "longest_side", + 0, + "image" + ] + }, + { + "id": 43, + "type": "Reroute", + "pos": [ + 1730, + 930 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 2, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 67 + } + ], + "outputs": [ + { + "name": "", + "type": "IMAGE", + "links": [ + 68, + 69 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 47, + "type": "ShowText|pysssss", + "pos": [ + 2210, + 930 + ], + "size": [ + 600, + 260 + ], + "flags": {}, + "order": 5, + "mode": 0, + "inputs": [ + { + "name": "text", + "type": "STRING", + "link": 73 + } + ], + "outputs": [ + { + "name": "STRING", + "shape": 6, + "type": "STRING", + "links": [] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui-custom-scripts", + "ver": "aac13aa7ce35b07d43633c3bbe654a38c00d74f5", + "widget_ue_connectable": {}, + "Node name for S&R": "ShowText|pysssss" + }, + "widgets_values": [ + "Photo of a young Asian woman walking barefoot on a city street at night, wearing a white t-shirt and high-waisted white shorts with a gold belt, short black hair, full body, long legs, slender physique, fair skin, urban setting, streetlights, blurry background, people walking, trees, plants in planters, casual attire, confident pose, high quality, jpeg artifacts" + ] + }, + { + "id": 48, + "type": "ShowText|pysssss", + "pos": [ + 2210, + 1260 + ], + "size": [ + 600, + 170 + ], + "flags": {}, + "order": 6, + "mode": 0, + "inputs": [ + { + "name": "text", + "type": "STRING", + "link": 74 + } + ], + "outputs": [ + { + "name": "STRING", + "shape": 6, + "type": "STRING", + "links": [] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui-custom-scripts", + "ver": "aac13aa7ce35b07d43633c3bbe654a38c00d74f5", + "widget_ue_connectable": {}, + "Node name for S&R": "ShowText|pysssss" + }, + "widgets_values": [ + "Write a very long detailed description for this image." + ] + }, + { + "id": 49, + "type": "ShowText|pysssss", + "pos": [ + 2210, + 1500 + ], + "size": [ + 600, + 260 + ], + "flags": {}, + "order": 7, + "mode": 0, + "inputs": [ + { + "name": "text", + "type": "STRING", + "link": 75 + } + ], + "outputs": [ + { + "name": "STRING", + "shape": 6, + "type": "STRING", + "links": null + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui-custom-scripts", + "ver": "aac13aa7ce35b07d43633c3bbe654a38c00d74f5", + "widget_ue_connectable": {}, + "Node name for S&R": "ShowText|pysssss" + }, + "widgets_values": [ + "The image is a photograph taken at night on a bustling urban sidewalk. The central subject is an Asian woman with a slim, toned physique and medium-sized breasts. She has straight, shoulder-length black hair with bangs, and her skin tone is light. She is wearing a simple, fitted white t-shirt and matching white high-waisted shorts that accentuate her long legs. She is barefoot, walking confidently down the sidewalk, her feet slightly apart.\n\nIn the background, the sidewalk is lined with people, some of whom are blurred, indicating motion. The people are dressed in casual summer clothing, including t-shirts, shorts, and backpacks. To the left, there is a black lamppost, and to the right, a wooden planter with green foliage. The background also features a mix of storefronts with illuminated signs and trees, adding a sense of depth and urban vibrancy to the scene. The lighting is soft and warm, with streetlights and neon signs creating a cozy, late-night atmosphere. The overall composition of the photograph emphasizes the woman's poised and confident presence amidst the busy cityscape. The textures in the image range from the smoothness of her clothing to the roughness of the sidewalk and the soft glow of the streetlights." + ] + } + ], + "links": [ + [ + 64, + 41, + 0, + 39, + 1, + "JOYCAPTION_EXTRA_OPTIONS" + ], + [ + 65, + 41, + 0, + 40, + 1, + "JOYCAPTION_EXTRA_OPTIONS" + ], + [ + 67, + 42, + 0, + 43, + 0, + "*" + ], + [ + 68, + 43, + 0, + 39, + 0, + "IMAGE" + ], + [ + 69, + 43, + 0, + 40, + 0, + "IMAGE" + ], + [ + 73, + 39, + 0, + 47, + 0, + "STRING" + ], + [ + 74, + 40, + 0, + 48, + 0, + "STRING" + ], + [ + 75, + 40, + 1, + 49, + 0, + "STRING" + ] + ], + "groups": [], + "config": {}, + "extra": { + "ds": { + "scale": 0.6830134553650705, + "offset": [ + -175.6426170595139, + -471.9308396036945 + ] + }, + "ue_links": [], + "links_added_by_ue": [], + "frontendVersion": "1.19.9", + "VHS_latentpreview": false, + "VHS_latentpreviewrate": 0, + "VHS_MetadataImage": true, + "VHS_KeepIntermediate": true + }, + "version": 0.4 +} \ No newline at end of file diff --git a/ComfyUI-JoyCaption/example_workflows/batch_image_text_output.jpg b/ComfyUI-JoyCaption/example_workflows/batch_image_text_output.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b0a9bdab57872f8b1491d49665298549028d2f48 Binary files /dev/null and b/ComfyUI-JoyCaption/example_workflows/batch_image_text_output.jpg differ diff --git a/ComfyUI-JoyCaption/example_workflows/batch_image_text_output.json b/ComfyUI-JoyCaption/example_workflows/batch_image_text_output.json new file mode 100644 index 0000000000000000000000000000000000000000..0a6080beef737337b1430309960a527bad63678b --- /dev/null +++ b/ComfyUI-JoyCaption/example_workflows/batch_image_text_output.json @@ -0,0 +1,342 @@ +{ + "id": "d7f22f6a-de79-4884-b925-2621f86c6dc6", + "revision": 0, + "last_node_id": 11, + "last_link_id": 11, + "nodes": [ + { + "id": 3, + "type": "JC_adv", + "pos": [ + 1043.3333740234375, + 0 + ], + "size": [ + 400, + 380 + ], + "flags": {}, + "order": 1, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 8 + }, + { + "name": "extra_options", + "shape": 7, + "type": "JOYCAPTION_EXTRA_OPTIONS", + "link": null + } + ], + "outputs": [ + { + "name": "PROMPT", + "type": "STRING", + "links": [] + }, + { + "name": "STRING", + "type": "STRING", + "links": [ + 6 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "Node name for S&R": "JC_adv", + "widget_ue_connectable": {} + }, + "widgets_values": [ + "joycaption-beta-one", + "Maximum Savings (4-bit)", + "Descriptive", + "short", + 512, + 0.6, + 0.9, + 0, + "", + "Keep in Memory" + ] + }, + { + "id": 8, + "type": "CaptionSaver", + "pos": [ + 1870, + -80 + ], + "size": [ + 400, + 200 + ], + "flags": {}, + "order": 4, + "mode": 0, + "inputs": [ + { + "name": "string", + "type": "STRING", + "link": 7 + }, + { + "name": "image_path", + "type": "STRING", + "link": 5 + }, + { + "name": "image", + "shape": 7, + "type": "IMAGE", + "link": 11 + } + ], + "outputs": [], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "Node name for S&R": "CaptionSaver", + "widget_ue_connectable": {} + }, + "widgets_values": [ + "C:\\Images\\JC", + "JC_img", + false + ] + }, + { + "id": 9, + "type": "ImageBatchPath", + "pos": [ + 630, + -60 + ], + "size": [ + 400, + 200 + ], + "flags": {}, + "order": 0, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE_PATH", + "shape": 6, + "type": "STRING", + "links": [ + 5 + ] + }, + { + "name": "IMAGE", + "shape": 6, + "type": "IMAGE", + "links": [ + 8, + 10 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "Node name for S&R": "ImageBatchPath", + "widget_ue_connectable": {} + }, + "widgets_values": [ + "C:\\Images", + 0, + 1, + "sequential" + ] + }, + { + "id": 10, + "type": "ShowText|pysssss", + "pos": [ + 1456.6666259765625, + 0 + ], + "size": [ + 400, + 380 + ], + "flags": {}, + "order": 3, + "mode": 0, + "inputs": [ + { + "name": "text", + "type": "STRING", + "link": 6 + } + ], + "outputs": [ + { + "name": "STRING", + "shape": 6, + "type": "STRING", + "links": [ + 7 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui-custom-scripts", + "ver": "aac13aa7ce35b07d43633c3bbe654a38c00d74f5", + "Node name for S&R": "ShowText|pysssss", + "widget_ue_connectable": {} + }, + "widgets_values": [ + "Monochromatic digital drawing of a young woman with wavy, shoulder-length blonde hair, wearing a white collared shirt. She has a serene expression, large eyes, and subtle makeup. The background is a gradient grey, emphasizing her delicate features. The style is realistic with smooth textures and fine lines.", + "Digital grayscale portrait of a young woman with wavy, shoulder-length hair, light skin, and delicate features. She wears a simple necklace, long earrings, and a sleeveless top. Her expression is calm and confident, with subtle shadows enhancing her facial contours. The background is a smooth gradient.", + "Digital black-and-white portrait of a young, handsome man with short, slightly tousled hair, light stubble, and serious expression. He wears a collared shirt with visible buttons, set against a plain grey background. The detailed shading and realistic texture emphasize his facial features and subtle skin texture.", + "Realistic black-and-white digital portrait of an elderly man with wavy, gray hair, a trimmed beard, and deep wrinkles. He wears a collared shirt with a zip-up jacket. The background is a plain, light gray gradient. The detailed texture highlights his aged skin and expressive eyes, creating a lifelike, somber effect." + ] + }, + { + "id": 11, + "type": "AILab_ImagePreview", + "pos": [ + 1043.3333740234375, + -380 + ], + "size": [ + 810, + 330 + ], + "flags": {}, + "order": 2, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 10 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 11 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui-rmbg", + "ver": "4faa7c7c12147db95345ee78b30f38273443ff99", + "Node name for S&R": "AILab_ImagePreview", + "widget_ue_connectable": {} + }, + "widgets_values": [], + "color": "#2e3e57", + "bgcolor": "#4b5b73" + } + ], + "links": [ + [ + 5, + 9, + 0, + 8, + 1, + "STRING" + ], + [ + 6, + 3, + 1, + 10, + 0, + "STRING" + ], + [ + 7, + 10, + 0, + 8, + 0, + "STRING" + ], + [ + 8, + 9, + 1, + 3, + 0, + "IMAGE" + ], + [ + 10, + 9, + 1, + 11, + 0, + "IMAGE" + ], + [ + 11, + 11, + 0, + 8, + 2, + "IMAGE" + ] + ], + "groups": [], + "config": {}, + "extra": { + "ue_links": [], + "links_added_by_ue": [], + "ds": { + "scale": 1.1, + "offset": [ + -426.39108664271225, + 429.69494560776803 + ] + }, + "frontendVersion": "1.19.9", + "VHS_latentpreview": false, + "VHS_latentpreviewrate": 0, + "VHS_MetadataImage": true, + "VHS_KeepIntermediate": true + }, + "version": 0.4 +} \ No newline at end of file diff --git a/ComfyUI-JoyCaption/jc_data.json b/ComfyUI-JoyCaption/jc_data.json new file mode 100644 index 0000000000000000000000000000000000000000..5bfe0fe1ffb0e90784be23ce6f837a50de74fa56 --- /dev/null +++ b/ComfyUI-JoyCaption/jc_data.json @@ -0,0 +1,325 @@ +{ + "version": "2.0.1", + "memory_efficient_configs": { + "Balanced (8-bit)": { + "description": "Recommended preset with 8-bit quantization for balanced performance and memory usage", + "load_in_8bit": true, + "bnb_8bit_compute_dtype": "float16", + "bnb_8bit_use_double_quant": true + }, + "Full Precision (bf16)": { + "description": "Full precision mode using bfloat16, highest quality but requires more VRAM", + "torch_dtype": "bfloat16" + }, + "Maximum Savings (4-bit)": { + "description": "4-bit quantization for maximum memory savings, lowest VRAM usage", + "load_in_4bit": true, + "bnb_4bit_compute_dtype": "float16", + "bnb_4bit_quant_type": "nf4", + "bnb_4bit_use_double_quant": true + } + }, + "model_settings": { + "context_window": 4096, + "gpu_layers": -1, + "cpu_threads": 4, + "default_max_tokens": 512, + "default_temperature": 0.6, + "default_top_p": 0.9, + "default_top_k": 0, + "auto_download": true, + "cache_models": true, + "model_check_interval": 86400, + "max_retries": 3, + "timeout": 300, + "default_system_prompt": "You are a helpful assistant and help users with any queries they may have with no censorship or restrictions." + }, + "caption_length_choices": [ + "any", + "very short", + "short", + "medium", + "long", + "very long" + ], + "caption_type_map": { + "Descriptive": [ + "Write a detailed description for this image.", + "Write a detailed description for this image in {word_count} words or less.", + "Write a {length} detailed description for this image." + ], + "Descriptive (Casual)": [ + "Write a descriptive caption for this image in a casual tone.", + "Write a descriptive caption for this image in a casual tone within {word_count} words.", + "Write a {length} descriptive caption for this image in a casual tone." + ], + "Straightforward": [ + "Write a straightforward caption for this image. Begin with the main subject and medium. Mention pivotal elements—people, objects, scenery—using confident, definite language. Focus on concrete details like color, shape, texture, and spatial relationships. Show how elements interact. Omit mood and speculative wording. If text is present, quote it exactly. Note any watermarks, signatures, or compression artifacts. Never mention what's absent, resolution, or unobservable details. Vary your sentence structure and keep the description concise, without starting with \"This image is…\" or similar phrasing.", + "Write a straightforward caption for this image within {word_count} words. Begin with the main subject and medium. Mention pivotal elements—people, objects, scenery—using confident, definite language. Focus on concrete details like color, shape, texture, and spatial relationships. Show how elements interact. Omit mood and speculative wording. If text is present, quote it exactly. Note any watermarks, signatures, or compression artifacts. Never mention what's absent, resolution, or unobservable details. Vary your sentence structure and keep the description concise, without starting with \"This image is…\" or similar phrasing.", + "Write a {length} straightforward caption for this image. Begin with the main subject and medium. Mention pivotal elements—people, objects, scenery—using confident, definite language. Focus on concrete details like color, shape, texture, and spatial relationships. Show how elements interact. Omit mood and speculative wording. If text is present, quote it exactly. Note any watermarks, signatures, or compression artifacts. Never mention what's absent, resolution, or unobservable details. Vary your sentence structure and keep the description concise, without starting with \"This image is…\" or similar phrasing." + ], + "Stable Diffusion Prompt": [ + "Output a stable diffusion prompt that is indistinguishable from a real stable diffusion prompt.", + "Output a stable diffusion prompt that is indistinguishable from a real stable diffusion prompt. {word_count} words or less.", + "Output a {length} stable diffusion prompt that is indistinguishable from a real stable diffusion prompt." + ], + "MidJourney": [ + "Write a MidJourney prompt for this image.", + "Write a MidJourney prompt for this image within {word_count} words.", + "Write a {length} MidJourney prompt for this image." + ], + "Danbooru tag list": [ + "Generate only comma-separated Danbooru tags (lowercase_underscores). Strict order: `artist:`, `copyright:`, `character:`, `meta:`, then general tags. Include counts (1girl), appearance, clothing, accessories, pose, expression, actions, background. Use precise Danbooru syntax. No extra text.", + "Generate only comma-separated Danbooru tags (lowercase_underscores). Strict order: `artist:`, `copyright:`, `character:`, `meta:`, then general tags. Include counts (1girl), appearance, clothing, accessories, pose, expression, actions, background. Use precise Danbooru syntax. No extra text. {word_count} words or less.", + "Generate only comma-separated Danbooru tags (lowercase_underscores). Strict order: `artist:`, `copyright:`, `character:`, `meta:`, then general tags. Include counts (1girl), appearance, clothing, accessories, pose, expression, actions, background. Use precise Danbooru syntax. No extra text. {length} length." + ], + "e621 tag list": [ + "Write a comma-separated list of e621 tags in alphabetical order for this image. Start with the artist, copyright, character, species, meta, and lore tags (if any), prefixed by 'artist:', 'copyright:', 'character:', 'species:', 'meta:', and 'lore:'. Then all the general tags.", + "Write a comma-separated list of e621 tags in alphabetical order for this image. Start with the artist, copyright, character, species, meta, and lore tags (if any), prefixed by 'artist:', 'copyright:', 'character:', 'species:', 'meta:', and 'lore:'. Then all the general tags. Keep it under {word_count} words.", + "Write a {length} comma-separated list of e621 tags in alphabetical order for this image. Start with the artist, copyright, character, species, meta, and lore tags (if any), prefixed by 'artist:', 'copyright:', 'character:', 'species:', 'meta:', and 'lore:'. Then all the general tags." + ], + "Rule34 tag list": [ + "Write a comma-separated list of rule34 tags in alphabetical order for this image. Start with the artist, copyright, character, and meta tags (if any), prefixed by 'artist:', 'copyright:', 'character:', and 'meta:'. Then all the general tags.", + "Write a comma-separated list of rule34 tags in alphabetical order for this image. Start with the artist, copyright, character, and meta tags (if any), prefixed by 'artist:', 'copyright:', 'character:', and 'meta:'. Then all the general tags. Keep it under {word_count} words.", + "Write a {length} comma-separated list of rule34 tags in alphabetical order for this image. Start with the artist, copyright, character, and meta tags (if any), prefixed by 'artist:', 'copyright:', 'character:', and 'meta:'. Then all the general tags." + ], + "Booru-like tag list": [ + "Write a list of Booru-like tags for this image.", + "Write a list of Booru-like tags for this image within {word_count} words.", + "Write a {length} list of Booru-like tags for this image." + ], + "Art Critic": [ + "Analyze this image like an art critic would with information about its composition, style, symbolism, the use of color, light, any artistic movement it might belong to, etc.", + "Analyze this image like an art critic would with information about its composition, style, symbolism, the use of color, light, any artistic movement it might belong to, etc. Keep it within {word_count} words.", + "Analyze this image like an art critic would with information about its composition, style, symbolism, the use of color, light, any artistic movement it might belong to, etc. Keep it {length}." + ], + "Product Listing": [ + "Write a caption for this image as though it were a product listing.", + "Write a caption for this image as though it were a product listing. Keep it under {word_count} words.", + "Write a {length} caption for this image as though it were a product listing." + ], + "Social Media Post": [ + "Write a caption for this image as if it were being used for a social media post.", + "Write a caption for this image as if it were being used for a social media post. Limit the caption to {word_count} words.", + "Write a {length} caption for this image as if it were being used for a social media post." + ] + }, + "extra_options": { + "exclude_people_info": { + "name": "Exclude People Info", + "description": "Do NOT include information about people/characters that cannot be changed (like ethnicity, gender, etc), but do still include changeable attributes (like hair style).", + "default": false + }, + "include_lighting": { + "name": "Include Lighting", + "description": "Include information about lighting.", + "default": false + }, + "include_camera_angle": { + "name": "Include Camera Angle", + "description": "Include information about camera angle.", + "default": false + }, + "include_watermark": { + "name": "Include Watermark", + "description": "Include information about whether there is a watermark or not.", + "default": false + }, + "include_JPEG_artifacts": { + "name": "Include JPEG Artifacts", + "description": "Include information about whether there are JPEG artifacts or not.", + "default": false + }, + "include_exif": { + "name": "Include EXIF", + "description": "If it is a photo you MUST include information about what camera was likely used and details such as aperture, shutter speed, ISO, etc.", + "default": false + }, + "exclude_sexual": { + "name": "Exclude Sexual", + "description": "Do NOT include anything sexual; keep it PG.", + "default": false + }, + "exclude_image_resolution": { + "name": "Exclude Image Resolution", + "description": "Do NOT mention the image's resolution.", + "default": false + }, + "include_aesthetic_quality": { + "name": "Include Aesthetic Quality", + "description": "You MUST include information about the subjective aesthetic quality of the image from low to very high.", + "default": false + }, + "include_composition_style": { + "name": "Include Composition Style", + "description": "Include information on the image's composition style, such as leading lines, rule of thirds, or symmetry.", + "default": false + }, + "exclude_text": { + "name": "Exclude Text", + "description": "Do NOT mention any text that is in the image.", + "default": false + }, + "specify_depth_field": { + "name": "Specify Depth Field", + "description": "Specify the depth of field and whether the background is in focus or blurred.", + "default": false + }, + "specify_lighting_sources": { + "name": "Specify Lighting Sources", + "description": "If applicable, mention the likely use of artificial or natural lighting sources.", + "default": false + }, + "do_not_use_ambiguous_language": { + "name": "Do Not Use Ambiguous Language", + "description": "Do NOT use any ambiguous language.", + "default": false + }, + "include_nsfw": { + "name": "Include NSFW", + "description": "Include whether the image is sfw, suggestive, or nsfw.", + "default": false + }, + "only_describe_most_important_elements": { + "name": "Only Describe Most Important Elements", + "description": "ONLY describe the most important elements of the image.", + "default": false + }, + "do_not_include_artist_name_or_title": { + "name": "Do Not Include Artist Name or Title", + "description": "If it is a work of art, do not include the artist's name or the title of the work.", + "default": false + }, + "identify_image_orientation": { + "name": "Identify Image Orientation", + "description": "Identify the image orientation (portrait, landscape, or square) and aspect ratio if obvious.", + "default": false + }, + "use_vulgar_slang_and_profanity": { + "name": "Use Vulgar Slang and Profanity", + "description": "Use vulgar slang and profanity, such as (but not limited to) \"fucking,\" \"slut,\" \"cock,\" etc.", + "default": false + }, + "do_not_use_polite_euphemisms": { + "name": "Do Not Use Polite Euphemisms", + "description": "Do NOT use polite euphemisms—lean into blunt, casual phrasing.", + "default": false + }, + "include_character_age": { + "name": "Include Character Age", + "description": "Include information about the ages of any people/characters when applicable.", + "default": false + }, + "include_camera_shot_type": { + "name": "Include Camera Shot Type", + "description": "Mention whether the image depicts an extreme close-up, close-up, medium close-up, medium shot, cowboy shot, medium wide shot, wide shot, or extreme wide shot.", + "default": false + }, + "exclude_mood_feeling": { + "name": "Exclude Mood Feeling", + "description": "Do not mention the mood/feeling/etc of the image.", + "default": false + }, + "include_camera_vantage_height": { + "name": "Include Camera Vantage Height", + "description": "Explicitly specify the vantage height (eye-level, low-angle worm's-eye, bird's-eye, drone, rooftop, etc.).", + "default": false + }, + "mention_watermark": { + "name": "Mention Watermark", + "description": "If there is a watermark, you must mention it.", + "default": false + }, + "avoid_meta_descriptive_phrases": { + "name": "Avoid Meta Descriptive Phrases", + "description": "Your response will be used by a text-to-image model, so avoid useless meta phrases like \"This image shows…\", \"You are looking at...\", etc.", + "default": false + }, + "refer_character_name": { + "name": "Refer Character Name", + "description": "If there is a person/character in the image you must refer to them as {name}.", + "default": false + } + }, + "gguf_settings": { + "mmproj_filename": "llama-joycaption-beta-one-llava-mmproj-model-f16.gguf", + "default_image_size": [336, 336] + }, + "hf_models": { + "joycaption-beta-one-fp8": { + "name": "JKCHSTR/llama-joycaption-alpha-two-hf-llava-FP8-Dynamic", + "description": "JoyCaption Beta One - FP8 Dynamic Quantization of llama-joycaption-beta-one" + }, + "joycaption-beta-one": { + "name": "1038lab/llama-joycaption-beta-one", + "description": "JoyCaption Beta One - Latest version with improved performance and quality" + }, + "joycaption-alpha-two": { + "name": "1038lab/llama-joycaption-alpha-two", + "description": "JoyCaption Alpha Two - Previous version, still available for compatibility" + } + }, + "gguf_models": { + "JoyCaption Beta One (IQ4_XS)": { + "name": "mradermacher/llama-joycaption-beta-one-hf-llava-GGUF/llama-joycaption-beta-one-hf-llava.IQ4_XS.gguf", + "description": "4.48 GB - IQ4 Extra Small model" + }, + "JoyCaption Beta One (Q2_K)": { + "name": "mradermacher/llama-joycaption-beta-one-hf-llava-GGUF/llama-joycaption-beta-one-hf-llava.Q2_K.gguf", + "description": "3.18 GB - 2-bit K-quants model" + }, + "JoyCaption Beta One (Q3_K_L)": { + "name": "mradermacher/llama-joycaption-beta-one-hf-llava-GGUF/llama-joycaption-beta-one-hf-llava.Q3_K_L.gguf", + "description": "4.32 GB - 3-bit K-quants Large model" + }, + "JoyCaption Beta One (Q3_K_M)": { + "name": "mradermacher/llama-joycaption-beta-one-hf-llava-GGUF/llama-joycaption-beta-one-hf-llava.Q3_K_M.gguf", + "description": "4.02 GB - 3-bit K-quants Medium model" + }, + "JoyCaption Beta One (Q3_K_S)": { + "name": "mradermacher/llama-joycaption-beta-one-hf-llava-GGUF/llama-joycaption-beta-one-hf-llava.Q3_K_S.gguf", + "description": "3.66 GB - 3-bit K-quants Small model" + }, + "JoyCaption Beta One (Q4_K_M)": { + "name": "mradermacher/llama-joycaption-beta-one-hf-llava-GGUF/llama-joycaption-beta-one-hf-llava.Q4_K_M.gguf", + "description": "4.92 GB - 4-bit K-quants Medium model" + }, + "JoyCaption Beta One (Q4_K_S)": { + "name": "mradermacher/llama-joycaption-beta-one-hf-llava-GGUF/llama-joycaption-beta-one-hf-llava.Q4_K_S.gguf", + "description": "4.69 GB - 4-bit K-quants Small model" + }, + "JoyCaption Beta One (Q5_K_M)": { + "name": "mradermacher/llama-joycaption-beta-one-hf-llava-GGUF/llama-joycaption-beta-one-hf-llava.Q5_K_M.gguf", + "description": "5.73 GB - 5-bit K-quants Medium model" + }, + "JoyCaption Beta One (Q5_K_S)": { + "name": "mradermacher/llama-joycaption-beta-one-hf-llava-GGUF/llama-joycaption-beta-one-hf-llava.Q5_K_S.gguf", + "description": "5.6 GB - 5-bit K-quants Small model" + }, + "JoyCaption Beta One (Q6_K)": { + "name": "mradermacher/llama-joycaption-beta-one-hf-llava-GGUF/llama-joycaption-beta-one-hf-llava.Q6_K.gguf", + "description": "6.6 GB - 6-bit K-quants model" + }, + "JoyCaption Beta One (Q8_0)": { + "name": "mradermacher/llama-joycaption-beta-one-hf-llava-GGUF/llama-joycaption-beta-one-hf-llava.Q8_0.gguf", + "description": "8.54 GB - 8-bit base model" + }, + "JoyCaption Beta One (F16)": { + "name": "mradermacher/llama-joycaption-beta-one-hf-llava-GGUF/llama-joycaption-beta-one-hf-llava.f16.gguf", + "description": "16.1 GB - Full precision F16 model" + }, + "joycaption-beta-one-gguf-q4_k": { + "name": "concedo/llama-joycaption-beta-one-hf-llava-mmproj-gguf/Llama-Joycaption-Beta-One-Hf-Llava-Q4_K.gguf", + "description": "JoyCaption Beta One GGUF - Q4_K quantized model (4.92 GB)" + }, + "joycaption-beta-one-gguf-q8_0": { + "name": "concedo/llama-joycaption-beta-one-hf-llava-mmproj-gguf/Llama-Joycaption-Beta-One-Hf-Llava-Q8_0.gguf", + "description": "JoyCaption Beta One GGUF - Q8_0 quantized model (8.54 GB)" + }, + "joycaption-beta-one-gguf-f16": { + "name": "concedo/llama-joycaption-beta-one-hf-llava-mmproj-gguf/Llama-Joycaption-Beta-One-Hf-Llava-F16.gguf", + "description": "JoyCaption Beta One GGUF - F16 full precision model (16.1 GB)" + } + } + +} diff --git a/ComfyUI-JoyCaption/llama_cpp_install/llama_cpp_install.md b/ComfyUI-JoyCaption/llama_cpp_install/llama_cpp_install.md new file mode 100644 index 0000000000000000000000000000000000000000..38c925d8bd136273f9a31c25be7e2e1d7d88b274 --- /dev/null +++ b/ComfyUI-JoyCaption/llama_cpp_install/llama_cpp_install.md @@ -0,0 +1,83 @@ +# `llama-cpp-python` CUDA Installation for ComfyUI Portable + +This guide helps you install `llama-cpp-python` with GPU (CUDA) support for ComfyUI's Windows portable version. + +--- + +### **1. Open ComfyUI's Command Prompt** + +* Go to `C:\ComfyUI_windows_portable\python_embeded` +* In the address bar, type `cmd` and press Enter. + +--- + +### **2. Install Build Tools (If you haven't already)** + +* **Install Visual Studio Build Tools:** + * Download from [https://visualstudio.microsoft.com/downloads/](https://visualstudio.microsoft.com/downloads/) (under "Tools for Visual Studio"). + * Run installer, select **"Desktop development with C++"** workload. +* **Install NVIDIA CUDA Toolkit:** + * Download your CUDA version (e.g., 12.6) from [https://developer.nvidia.com/cuda-toolkit-archive](https://developer.nvidia.com/cuda-toolkit-archive). + * Run installer, ensure **"Visual Studio Integration"** is selected. + +## **Automatic Installation Script (Recommended)** + +* Make sure the installation script is saved here: + `.\ComfyUI\custom_nodes\ComfyUI-JoyCaption\install_llama_official.py` + +* In the command prompt (opened in step 1), run the script with: + + ```bash + .\python_embeded\python.exe llama_cpp_install.py + ``` + +The script will: + +* Upgrade pip +* Clear pip cache +* Install minimal build dependencies (scikit-build-core, cmake) +* Detect GPU and build llama-cpp-python with CUDA support if available + +🕒 This process may take 5–20+ minutes depending on your system. + +### ** Restart ComfyUI** + +* Close ComfyUI. +* Restart ComfyUI. +* Hard refresh your browser with Ctrl+F5 (Windows) or Cmd+Shift+R (macOS). + + + + +## **Manuelly Installation** +--- + +### **1. Prepare Python Environment** + +* In the command prompt, run: + ```bash + .\python.exe -m pip install --upgrade pip + .\python.exe -m pip cache purge + .\python.exe -m pip install scikit-build-core cmake + ``` + +--- + +### **2. Compile and Install `llama-cpp-python`** + +* In the command prompt, run: + ```bash + set CMAKE_ARGS="-DGGML_CUDA=on" && .\python.exe -m pip install llama-cpp-python --no-cache-dir && set CMAKE_ARGS= + ``` + * **Wait patiently.** This takes time (5-20+ minutes). + +--- + +### **3. Restart ComfyUI** + +* Close ComfyUI. +* Restart ComfyUI. +* Hard refresh your web browser (`Ctrl+F5` or `Cmd+Shift+R`). + +--- + diff --git a/ComfyUI-JoyCaption/llama_cpp_install/llama_cpp_install.py b/ComfyUI-JoyCaption/llama_cpp_install/llama_cpp_install.py new file mode 100644 index 0000000000000000000000000000000000000000..48b00a98ca6866c2474c021d1ca4ce640d089153 --- /dev/null +++ b/ComfyUI-JoyCaption/llama_cpp_install/llama_cpp_install.py @@ -0,0 +1,34 @@ +import subprocess +import sys +import os + +def run(cmd): + print(f"\n>> {cmd}") + subprocess.check_call(cmd, shell=True) + +def install_llama(): + print("Installing llama-cpp-python for ComfyUI (with CUDA support if available)...") + + run(f"{sys.executable} -m pip install --upgrade pip") + run(f"{sys.executable} -m pip cache purge") + run(f"{sys.executable} -m pip install scikit-build-core cmake") + + try: + import torch + has_gpu = torch.cuda.is_available() + except ImportError: + has_gpu = False + + if has_gpu: + os.environ["CMAKE_ARGS"] = "-DGGML_CUDA=on" + print("✅ GPU detected — building with CUDA support") + else: + print("🖥️ No GPU detected — building CPU-only version") + + run(f"{sys.executable} -m pip install llama-cpp-python --no-cache-dir") + os.environ.pop("CMAKE_ARGS", None) + + print("\n✅ Installation complete. Please restart ComfyUI.") + +if __name__ == "__main__": + install_llama() diff --git a/ComfyUI-JoyCaption/llama_cpp_install/llama_cpp_install_zh.md b/ComfyUI-JoyCaption/llama_cpp_install/llama_cpp_install_zh.md new file mode 100644 index 0000000000000000000000000000000000000000..935a0d000118aa89fb2be85a681e5b05cdd44c93 --- /dev/null +++ b/ComfyUI-JoyCaption/llama_cpp_install/llama_cpp_install_zh.md @@ -0,0 +1,79 @@ +# ComfyUI 便携版 `llama-cpp-python` CUDA 安装指南 + +本指南帮助您为 ComfyUI 的 Windows 便携版安装支持 GPU (CUDA) 的 `llama-cpp-python`。 + +--- + +### **1. 打开 ComfyUI 的命令提示符** + +* 进入 `C:\ComfyUI_windows_portable\python_embeded` +* 在地址栏中输入 `cmd` 并按回车键。 + +--- + +### **2. 安装构建工具(如果尚未安装)** + +* **安装 Visual Studio Build Tools:** + * 从 [https://visualstudio.microsoft.com/downloads/](https://visualstudio.microsoft.com/downloads/) 下载(在"Tools for Visual Studio"下)。 + * 运行安装程序,选择 **"Desktop development with C++"** 工作负载。 +* **安装 NVIDIA CUDA Toolkit:** + * 从 [https://developer.nvidia.com/cuda-toolkit-archive](https://developer.nvidia.com/cuda-toolkit-archive) 下载您的 CUDA 版本(例如 12.6)。 + * 运行安装程序,确保选中 **"Visual Studio Integration"**。 + +## **自动安装脚本(推荐)** + +* 确保安装脚本保存在这里: + `.\ComfyUI\custom_nodes\ComfyUI-JoyCaption\llama_cpp_install\llama_cpp_install.py` + +* 在命令提示符中(在步骤 1 中打开的),运行脚本: + + ```bash + .\python_embeded\python.exe llama_cpp_install.py + ``` + +脚本将执行以下操作: + +* 升级 pip +* 清除 pip 缓存 +* 安装最小构建依赖项(scikit-build-core, cmake) +* 检测 GPU 并在可用时构建支持 CUDA 的 llama-cpp-python + +🕒 此过程可能需要 5-20+ 分钟,具体取决于您的系统。 + +### **重启 ComfyUI** + +* 关闭 ComfyUI。 +* 重启 ComfyUI。 +* 使用 Ctrl+F5(Windows)或 Cmd+Shift+R(macOS)硬刷新浏览器。 + +## **手动安装** +--- + +### **1. 准备 Python 环境** + +* 在命令提示符中运行: + ```bash + .\python.exe -m pip install --upgrade pip + .\python.exe -m pip cache purge + .\python.exe -m pip install scikit-build-core cmake + ``` + +--- + +### **2. 编译并安装 `llama-cpp-python`** + +* 在命令提示符中运行: + ```bash + set CMAKE_ARGS="-DGGML_CUDA=on" && .\python.exe -m pip install llama-cpp-python --no-cache-dir && set CMAKE_ARGS= + ``` + * **耐心等待。** 这需要时间(5-20+ 分钟)。 + +--- + +### **3. 重启 ComfyUI** + +* 关闭 ComfyUI。 +* 重启 ComfyUI。 +* 硬刷新网页浏览器(`Ctrl+F5` 或 `Cmd+Shift+R`)。 + +--- \ No newline at end of file diff --git a/ComfyUI-JoyCaption/locales/en/main.json b/ComfyUI-JoyCaption/locales/en/main.json new file mode 100644 index 0000000000000000000000000000000000000000..eb48b0c831c6090b39fdbc1495bd3da95fb929b0 --- /dev/null +++ b/ComfyUI-JoyCaption/locales/en/main.json @@ -0,0 +1,5 @@ +{ + "nodeCategories": { + "🧪AILab/📝MiniCPM": "🧪AILab/📝MiniCPM" + } +} \ No newline at end of file diff --git a/ComfyUI-JoyCaption/locales/en/nodeDefs.json b/ComfyUI-JoyCaption/locales/en/nodeDefs.json new file mode 100644 index 0000000000000000000000000000000000000000..1f6fc18e5e9029100b9bdb275281bde86bb80b78 --- /dev/null +++ b/ComfyUI-JoyCaption/locales/en/nodeDefs.json @@ -0,0 +1,192 @@ +{ + "MiniCPM_V": { + "display_name": "MiniCPM-V", + "inputs": { + "image": { + "name": "image" + }, + "video": { + "name": "video" + }, + "model": { + "name": "model" + }, + "preset_prompt": { + "name": "preset_prompt" + }, + "custom_prompt": { + "name": "custom_prompt" + }, + "device": { + "name": "device" + }, + "memory_management": { + "name": "memory_management" + }, + "seed": { + "name": "seed" + } + }, + "outputs": { + "0": { + "name": "STRING" + } + } + }, + "MiniCPM_V_adv": { + "display_name": "MiniCPM-V (Advanced)", + "inputs": { + "image": { + "name": "image" + }, + "video": { + "name": "video" + }, + "model": { + "name": "model" + }, + "preset_prompt": { + "name": "preset_prompt" + }, + "custom_prompt": { + "name": "custom_prompt" + }, + "system_prompt": { + "name": "system_prompt" + }, + "max_new_tokens": { + "name": "max_new_tokens" + }, + "temperature": { + "name": "temperature" + }, + "top_p": { + "name": "top_p" + }, + "top_k": { + "name": "top_k" + }, + "repetition_penalty": { + "name": "repetition_penalty" + }, + "video_max_num_frames": { + "name": "video_max_num_frames" + }, + "video_max_slice_nums": { + "name": "video_max_slice_nums" + }, + "device": { + "name": "device" + }, + "memory_management": { + "name": "memory_management" + }, + "seed": { + "name": "seed" + } + }, + "outputs": { + "0": { + "name": "PROMPT" + }, + "1": { + "name": "STRING" + } + } + }, + "MiniCPM_V_GGUF": { + "display_name": "MiniCPM-V GGUF", + "inputs": { + "image": { + "name": "image" + }, + "video": { + "name": "video" + }, + "model": { + "name": "model" + }, + "preset_prompt": { + "name": "preset_prompt" + }, + "custom_prompt": { + "name": "custom_prompt" + }, + "device": { + "name": "device" + }, + "memory_management": { + "name": "memory_management" + }, + "seed": { + "name": "seed" + } + }, + "outputs": { + "0": { + "name": "STRING" + } + } + }, + "MiniCPM_V_GGUF_adv": { + "display_name": "MiniCPM-V GGUF (Advanced)", + "inputs": { + "image": { + "name": "image" + }, + "video": { + "name": "video" + }, + "model": { + "name": "model" + }, + "preset_prompt": { + "name": "preset_prompt" + }, + "custom_prompt": { + "name": "custom_prompt" + }, + "system_prompt": { + "name": "system_prompt" + }, + "max_new_tokens": { + "name": "max_new_tokens" + }, + "temperature": { + "name": "temperature" + }, + "top_p": { + "name": "top_p" + }, + "top_k": { + "name": "top_k" + }, + "repetition_penalty": { + "name": "repetition_penalty" + }, + "video_max_num_frames": { + "name": "video_max_num_frames" + }, + "video_max_slice_nums": { + "name": "video_max_slice_nums" + }, + "device": { + "name": "device" + }, + "memory_management": { + "name": "memory_management" + }, + "seed": { + "name": "seed" + } + }, + "outputs": { + "0": { + "name": "PROMPT" + }, + "1": { + "name": "STRING" + } + } + } +} \ No newline at end of file diff --git a/ComfyUI-JoyCaption/locales/fr/main.json b/ComfyUI-JoyCaption/locales/fr/main.json new file mode 100644 index 0000000000000000000000000000000000000000..eb48b0c831c6090b39fdbc1495bd3da95fb929b0 --- /dev/null +++ b/ComfyUI-JoyCaption/locales/fr/main.json @@ -0,0 +1,5 @@ +{ + "nodeCategories": { + "🧪AILab/📝MiniCPM": "🧪AILab/📝MiniCPM" + } +} \ No newline at end of file diff --git a/ComfyUI-JoyCaption/locales/fr/nodeDefs.json b/ComfyUI-JoyCaption/locales/fr/nodeDefs.json new file mode 100644 index 0000000000000000000000000000000000000000..03033e2a60f9b3295c5c5a53556eb9d0d78c9734 --- /dev/null +++ b/ComfyUI-JoyCaption/locales/fr/nodeDefs.json @@ -0,0 +1,192 @@ +{ + "MiniCPM_V": { + "display_name": "MiniCPM-V", + "inputs": { + "image": { + "name": "image" + }, + "video": { + "name": "vidéo" + }, + "model": { + "name": "modèle" + }, + "preset_prompt": { + "name": "invite_prédéfinie" + }, + "custom_prompt": { + "name": "invite_personnalisée" + }, + "device": { + "name": "appareil" + }, + "memory_management": { + "name": "gestion_mémoire" + }, + "seed": { + "name": "graine" + } + }, + "outputs": { + "0": { + "name": "CHAÎNE" + } + } + }, + "MiniCPM_V_adv": { + "display_name": "MiniCPM-V (Avancé)", + "inputs": { + "image": { + "name": "image" + }, + "video": { + "name": "vidéo" + }, + "model": { + "name": "modèle" + }, + "preset_prompt": { + "name": "invite_prédéfinie" + }, + "custom_prompt": { + "name": "invite_personnalisée" + }, + "system_prompt": { + "name": "invite_système" + }, + "max_new_tokens": { + "name": "max_nouveaux_tokens" + }, + "temperature": { + "name": "température" + }, + "top_p": { + "name": "top_p" + }, + "top_k": { + "name": "top_k" + }, + "repetition_penalty": { + "name": "pénalité_répétition" + }, + "video_max_num_frames": { + "name": "vidéo_max_nb_images" + }, + "video_max_slice_nums": { + "name": "vidéo_max_nb_tranches" + }, + "device": { + "name": "appareil" + }, + "memory_management": { + "name": "gestion_mémoire" + }, + "seed": { + "name": "graine" + } + }, + "outputs": { + "0": { + "name": "INVITE" + }, + "1": { + "name": "CHAÎNE" + } + } + }, + "MiniCPM_V_GGUF": { + "display_name": "MiniCPM-V GGUF", + "inputs": { + "image": { + "name": "image" + }, + "video": { + "name": "vidéo" + }, + "model": { + "name": "modèle" + }, + "preset_prompt": { + "name": "invite_prédéfinie" + }, + "custom_prompt": { + "name": "invite_personnalisée" + }, + "device": { + "name": "appareil" + }, + "memory_management": { + "name": "gestion_mémoire" + }, + "seed": { + "name": "graine" + } + }, + "outputs": { + "0": { + "name": "CHAÎNE" + } + } + }, + "MiniCPM_V_GGUF_adv": { + "display_name": "MiniCPM-V GGUF (Avancé)", + "inputs": { + "image": { + "name": "image" + }, + "video": { + "name": "vidéo" + }, + "model": { + "name": "modèle" + }, + "preset_prompt": { + "name": "invite_prédéfinie" + }, + "custom_prompt": { + "name": "invite_personnalisée" + }, + "system_prompt": { + "name": "invite_système" + }, + "max_new_tokens": { + "name": "max_nouveaux_tokens" + }, + "temperature": { + "name": "température" + }, + "top_p": { + "name": "top_p" + }, + "top_k": { + "name": "top_k" + }, + "repetition_penalty": { + "name": "pénalité_répétition" + }, + "video_max_num_frames": { + "name": "vidéo_max_nb_images" + }, + "video_max_slice_nums": { + "name": "vidéo_max_nb_tranches" + }, + "device": { + "name": "appareil" + }, + "memory_management": { + "name": "gestion_mémoire" + }, + "seed": { + "name": "graine" + } + }, + "outputs": { + "0": { + "name": "INVITE" + }, + "1": { + "name": "CHAÎNE" + } + } + } +} \ No newline at end of file diff --git a/ComfyUI-JoyCaption/locales/ja/main.json b/ComfyUI-JoyCaption/locales/ja/main.json new file mode 100644 index 0000000000000000000000000000000000000000..eb48b0c831c6090b39fdbc1495bd3da95fb929b0 --- /dev/null +++ b/ComfyUI-JoyCaption/locales/ja/main.json @@ -0,0 +1,5 @@ +{ + "nodeCategories": { + "🧪AILab/📝MiniCPM": "🧪AILab/📝MiniCPM" + } +} \ No newline at end of file diff --git a/ComfyUI-JoyCaption/locales/ja/nodeDefs.json b/ComfyUI-JoyCaption/locales/ja/nodeDefs.json new file mode 100644 index 0000000000000000000000000000000000000000..8a47ced79fbde336829a14b638eb95a9126f6bf2 --- /dev/null +++ b/ComfyUI-JoyCaption/locales/ja/nodeDefs.json @@ -0,0 +1,192 @@ +{ + "MiniCPM_V": { + "display_name": "MiniCPM-V", + "inputs": { + "image": { + "name": "画像" + }, + "video": { + "name": "ビデオ" + }, + "model": { + "name": "モデル" + }, + "preset_prompt": { + "name": "プリセットプロンプト" + }, + "custom_prompt": { + "name": "カスタムプロンプト" + }, + "device": { + "name": "デバイス" + }, + "memory_management": { + "name": "メモリ管理" + }, + "seed": { + "name": "シード" + } + }, + "outputs": { + "0": { + "name": "文字列" + } + } + }, + "MiniCPM_V_adv": { + "display_name": "MiniCPM-V(上級)", + "inputs": { + "image": { + "name": "画像" + }, + "video": { + "name": "ビデオ" + }, + "model": { + "name": "モデル" + }, + "preset_prompt": { + "name": "プリセットプロンプト" + }, + "custom_prompt": { + "name": "カスタムプロンプト" + }, + "system_prompt": { + "name": "システムプロンプト" + }, + "max_new_tokens": { + "name": "最大新規トークン数" + }, + "temperature": { + "name": "温度" + }, + "top_p": { + "name": "トップP" + }, + "top_k": { + "name": "トップK" + }, + "repetition_penalty": { + "name": "繰り返しペナルティ" + }, + "video_max_num_frames": { + "name": "ビデオ最大フレーム数" + }, + "video_max_slice_nums": { + "name": "ビデオ最大スライス数" + }, + "device": { + "name": "デバイス" + }, + "memory_management": { + "name": "メモリ管理" + }, + "seed": { + "name": "シード" + } + }, + "outputs": { + "0": { + "name": "プロンプト" + }, + "1": { + "name": "文字列" + } + } + }, + "MiniCPM_V_GGUF": { + "display_name": "MiniCPM-V GGUF", + "inputs": { + "image": { + "name": "画像" + }, + "video": { + "name": "ビデオ" + }, + "model": { + "name": "モデル" + }, + "preset_prompt": { + "name": "プリセットプロンプト" + }, + "custom_prompt": { + "name": "カスタムプロンプト" + }, + "device": { + "name": "デバイス" + }, + "memory_management": { + "name": "メモリ管理" + }, + "seed": { + "name": "シード" + } + }, + "outputs": { + "0": { + "name": "文字列" + } + } + }, + "MiniCPM_V_GGUF_adv": { + "display_name": "MiniCPM-V GGUF(上級)", + "inputs": { + "image": { + "name": "画像" + }, + "video": { + "name": "ビデオ" + }, + "model": { + "name": "モデル" + }, + "preset_prompt": { + "name": "プリセットプロンプト" + }, + "custom_prompt": { + "name": "カスタムプロンプト" + }, + "system_prompt": { + "name": "システムプロンプト" + }, + "max_new_tokens": { + "name": "最大新規トークン数" + }, + "temperature": { + "name": "温度" + }, + "top_p": { + "name": "トップP" + }, + "top_k": { + "name": "トップK" + }, + "repetition_penalty": { + "name": "繰り返しペナルティ" + }, + "video_max_num_frames": { + "name": "ビデオ最大フレーム数" + }, + "video_max_slice_nums": { + "name": "ビデオ最大スライス数" + }, + "device": { + "name": "デバイス" + }, + "memory_management": { + "name": "メモリ管理" + }, + "seed": { + "name": "シード" + } + }, + "outputs": { + "0": { + "name": "プロンプト" + }, + "1": { + "name": "文字列" + } + } + } +} \ No newline at end of file diff --git a/ComfyUI-JoyCaption/locales/ko/main.json b/ComfyUI-JoyCaption/locales/ko/main.json new file mode 100644 index 0000000000000000000000000000000000000000..eb48b0c831c6090b39fdbc1495bd3da95fb929b0 --- /dev/null +++ b/ComfyUI-JoyCaption/locales/ko/main.json @@ -0,0 +1,5 @@ +{ + "nodeCategories": { + "🧪AILab/📝MiniCPM": "🧪AILab/📝MiniCPM" + } +} \ No newline at end of file diff --git a/ComfyUI-JoyCaption/locales/ko/nodeDefs.json b/ComfyUI-JoyCaption/locales/ko/nodeDefs.json new file mode 100644 index 0000000000000000000000000000000000000000..3e2bfff47cf9dcf2948cd27f4d37bfd01c214327 --- /dev/null +++ b/ComfyUI-JoyCaption/locales/ko/nodeDefs.json @@ -0,0 +1,192 @@ +{ + "MiniCPM_V": { + "display_name": "MiniCPM-V", + "inputs": { + "image": { + "name": "이미지" + }, + "video": { + "name": "비디오" + }, + "model": { + "name": "모델" + }, + "preset_prompt": { + "name": "프리셋 프롬프트" + }, + "custom_prompt": { + "name": "사용자 지정 프롬프트" + }, + "device": { + "name": "디바이스" + }, + "memory_management": { + "name": "메모리 관리" + }, + "seed": { + "name": "시드" + } + }, + "outputs": { + "0": { + "name": "문자열" + } + } + }, + "MiniCPM_V_adv": { + "display_name": "MiniCPM-V (고급)", + "inputs": { + "image": { + "name": "이미지" + }, + "video": { + "name": "비디오" + }, + "model": { + "name": "모델" + }, + "preset_prompt": { + "name": "프리셋 프롬프트" + }, + "custom_prompt": { + "name": "사용자 지정 프롬프트" + }, + "system_prompt": { + "name": "시스템 프롬프트" + }, + "max_new_tokens": { + "name": "최대 신규 토큰" + }, + "temperature": { + "name": "온도" + }, + "top_p": { + "name": "top_p" + }, + "top_k": { + "name": "top_k" + }, + "repetition_penalty": { + "name": "반복 패널티" + }, + "video_max_num_frames": { + "name": "비디오 최대 프레임 수" + }, + "video_max_slice_nums": { + "name": "비디오 최대 슬라이스 수" + }, + "device": { + "name": "디바이스" + }, + "memory_management": { + "name": "메모리 관리" + }, + "seed": { + "name": "시드" + } + }, + "outputs": { + "0": { + "name": "프롬프트" + }, + "1": { + "name": "문자열" + } + } + }, + "MiniCPM_V_GGUF": { + "display_name": "MiniCPM-V GGUF", + "inputs": { + "image": { + "name": "이미지" + }, + "video": { + "name": "비디오" + }, + "model": { + "name": "모델" + }, + "preset_prompt": { + "name": "프리셋 프롬프트" + }, + "custom_prompt": { + "name": "사용자 지정 프롬프트" + }, + "device": { + "name": "디바이스" + }, + "memory_management": { + "name": "메모리 관리" + }, + "seed": { + "name": "시드" + } + }, + "outputs": { + "0": { + "name": "문자열" + } + } + }, + "MiniCPM_V_GGUF_adv": { + "display_name": "MiniCPM-V GGUF (고급)", + "inputs": { + "image": { + "name": "이미지" + }, + "video": { + "name": "비디오" + }, + "model": { + "name": "모델" + }, + "preset_prompt": { + "name": "프리셋 프롬프트" + }, + "custom_prompt": { + "name": "사용자 지정 프롬프트" + }, + "system_prompt": { + "name": "시스템 프롬프트" + }, + "max_new_tokens": { + "name": "최대 신규 토큰" + }, + "temperature": { + "name": "온도" + }, + "top_p": { + "name": "top_p" + }, + "top_k": { + "name": "top_k" + }, + "repetition_penalty": { + "name": "반복 패널티" + }, + "video_max_num_frames": { + "name": "비디오 최대 프레임 수" + }, + "video_max_slice_nums": { + "name": "비디오 최대 슬라이스 수" + }, + "device": { + "name": "디바이스" + }, + "memory_management": { + "name": "메모리 관리" + }, + "seed": { + "name": "시드" + } + }, + "outputs": { + "0": { + "name": "프롬프트" + }, + "1": { + "name": "문자열" + } + } + } +} \ No newline at end of file diff --git a/ComfyUI-JoyCaption/locales/ru/main.json b/ComfyUI-JoyCaption/locales/ru/main.json new file mode 100644 index 0000000000000000000000000000000000000000..eb48b0c831c6090b39fdbc1495bd3da95fb929b0 --- /dev/null +++ b/ComfyUI-JoyCaption/locales/ru/main.json @@ -0,0 +1,5 @@ +{ + "nodeCategories": { + "🧪AILab/📝MiniCPM": "🧪AILab/📝MiniCPM" + } +} \ No newline at end of file diff --git a/ComfyUI-JoyCaption/locales/ru/nodeDefs.json b/ComfyUI-JoyCaption/locales/ru/nodeDefs.json new file mode 100644 index 0000000000000000000000000000000000000000..9027deef5bdbbb4b60cf5c74980c154e8e58d0ab --- /dev/null +++ b/ComfyUI-JoyCaption/locales/ru/nodeDefs.json @@ -0,0 +1,192 @@ +{ + "MiniCPM_V": { + "display_name": "MiniCPM-V", + "inputs": { + "image": { + "name": "изображение" + }, + "video": { + "name": "видео" + }, + "model": { + "name": "модель" + }, + "preset_prompt": { + "name": "предустановленный_промпт" + }, + "custom_prompt": { + "name": "пользовательский_промпт" + }, + "device": { + "name": "устройство" + }, + "memory_management": { + "name": "управление_памятью" + }, + "seed": { + "name": "seed" + } + }, + "outputs": { + "0": { + "name": "СТРОКА" + } + } + }, + "MiniCPM_V_adv": { + "display_name": "MiniCPM-V (Расширенный)", + "inputs": { + "image": { + "name": "изображение" + }, + "video": { + "name": "видео" + }, + "model": { + "name": "модель" + }, + "preset_prompt": { + "name": "предустановленный_промпт" + }, + "custom_prompt": { + "name": "пользовательский_промпт" + }, + "system_prompt": { + "name": "системный_промпт" + }, + "max_new_tokens": { + "name": "макс_новых_токенов" + }, + "temperature": { + "name": "температура" + }, + "top_p": { + "name": "top_p" + }, + "top_k": { + "name": "top_k" + }, + "repetition_penalty": { + "name": "штраф_за_повтор" + }, + "video_max_num_frames": { + "name": "макс_кадров_видео" + }, + "video_max_slice_nums": { + "name": "макс_срезов_видео" + }, + "device": { + "name": "устройство" + }, + "memory_management": { + "name": "управление_памятью" + }, + "seed": { + "name": "seed" + } + }, + "outputs": { + "0": { + "name": "ПРОМПТ" + }, + "1": { + "name": "СТРОКА" + } + } + }, + "MiniCPM_V_GGUF": { + "display_name": "MiniCPM-V GGUF", + "inputs": { + "image": { + "name": "изображение" + }, + "video": { + "name": "видео" + }, + "model": { + "name": "модель" + }, + "preset_prompt": { + "name": "предустановленный_промпт" + }, + "custom_prompt": { + "name": "пользовательский_промпт" + }, + "device": { + "name": "устройство" + }, + "memory_management": { + "name": "управление_памятью" + }, + "seed": { + "name": "seed" + } + }, + "outputs": { + "0": { + "name": "СТРОКА" + } + } + }, + "MiniCPM_V_GGUF_adv": { + "display_name": "MiniCPM-V GGUF (Расширенный)", + "inputs": { + "image": { + "name": "изображение" + }, + "video": { + "name": "видео" + }, + "model": { + "name": "модель" + }, + "preset_prompt": { + "name": "предустановленный_промпт" + }, + "custom_prompt": { + "name": "пользовательский_промпт" + }, + "system_prompt": { + "name": "системный_промпт" + }, + "max_new_tokens": { + "name": "макс_новых_токенов" + }, + "temperature": { + "name": "температура" + }, + "top_p": { + "name": "top_p" + }, + "top_k": { + "name": "top_k" + }, + "repetition_penalty": { + "name": "штраф_за_повтор" + }, + "video_max_num_frames": { + "name": "макс_кадров_видео" + }, + "video_max_slice_nums": { + "name": "макс_срезов_видео" + }, + "device": { + "name": "устройство" + }, + "memory_management": { + "name": "управление_памятью" + }, + "seed": { + "name": "seed" + } + }, + "outputs": { + "0": { + "name": "ПРОМПТ" + }, + "1": { + "name": "СТРОКА" + } + } + } +} \ No newline at end of file diff --git a/ComfyUI-JoyCaption/locales/zh/main.json b/ComfyUI-JoyCaption/locales/zh/main.json new file mode 100644 index 0000000000000000000000000000000000000000..eb48b0c831c6090b39fdbc1495bd3da95fb929b0 --- /dev/null +++ b/ComfyUI-JoyCaption/locales/zh/main.json @@ -0,0 +1,5 @@ +{ + "nodeCategories": { + "🧪AILab/📝MiniCPM": "🧪AILab/📝MiniCPM" + } +} \ No newline at end of file diff --git a/ComfyUI-JoyCaption/locales/zh/nodeDefs.json b/ComfyUI-JoyCaption/locales/zh/nodeDefs.json new file mode 100644 index 0000000000000000000000000000000000000000..d98cb1f0612c3678f3f63b2b6832c100b12a69ad --- /dev/null +++ b/ComfyUI-JoyCaption/locales/zh/nodeDefs.json @@ -0,0 +1,192 @@ +{ + "MiniCPM_V": { + "display_name": "MiniCPM-V", + "inputs": { + "image": { + "name": "图片" + }, + "video": { + "name": "视频" + }, + "model": { + "name": "模型" + }, + "preset_prompt": { + "name": "预设提示词" + }, + "custom_prompt": { + "name": "自定义提示词" + }, + "device": { + "name": "设备" + }, + "memory_management": { + "name": "内存管理" + }, + "seed": { + "name": "随机种子" + } + }, + "outputs": { + "0": { + "name": "字符串" + } + } + }, + "MiniCPM_V_adv": { + "display_name": "MiniCPM-V(高级)", + "inputs": { + "image": { + "name": "图片" + }, + "video": { + "name": "视频" + }, + "model": { + "name": "模型" + }, + "preset_prompt": { + "name": "预设提示词" + }, + "custom_prompt": { + "name": "自定义提示词" + }, + "system_prompt": { + "name": "系统提示词" + }, + "max_new_tokens": { + "name": "最大新生成Token数" + }, + "temperature": { + "name": "温度" + }, + "top_p": { + "name": "top_p" + }, + "top_k": { + "name": "top_k" + }, + "repetition_penalty": { + "name": "重复惩罚" + }, + "video_max_num_frames": { + "name": "视频最大帧数" + }, + "video_max_slice_nums": { + "name": "视频最大切片数" + }, + "device": { + "name": "设备" + }, + "memory_management": { + "name": "内存管理" + }, + "seed": { + "name": "随机种子" + } + }, + "outputs": { + "0": { + "name": "提示词" + }, + "1": { + "name": "字符串" + } + } + }, + "MiniCPM_V_GGUF": { + "display_name": "MiniCPM-V GGUF", + "inputs": { + "image": { + "name": "图片" + }, + "video": { + "name": "视频" + }, + "model": { + "name": "模型" + }, + "preset_prompt": { + "name": "预设提示词" + }, + "custom_prompt": { + "name": "自定义提示词" + }, + "device": { + "name": "设备" + }, + "memory_management": { + "name": "内存管理" + }, + "seed": { + "name": "随机种子" + } + }, + "outputs": { + "0": { + "name": "字符串" + } + } + }, + "MiniCPM_V_GGUF_adv": { + "display_name": "MiniCPM-V GGUF(高级)", + "inputs": { + "image": { + "name": "图片" + }, + "video": { + "name": "视频" + }, + "model": { + "name": "模型" + }, + "preset_prompt": { + "name": "预设提示词" + }, + "custom_prompt": { + "name": "自定义提示词" + }, + "system_prompt": { + "name": "系统提示词" + }, + "max_new_tokens": { + "name": "最大新生成Token数" + }, + "temperature": { + "name": "温度" + }, + "top_p": { + "name": "top_p" + }, + "top_k": { + "name": "top_k" + }, + "repetition_penalty": { + "name": "重复惩罚" + }, + "video_max_num_frames": { + "name": "视频最大帧数" + }, + "video_max_slice_nums": { + "name": "视频最大切片数" + }, + "device": { + "name": "设备" + }, + "memory_management": { + "name": "内存管理" + }, + "seed": { + "name": "随机种子" + } + }, + "outputs": { + "0": { + "name": "提示词" + }, + "1": { + "name": "字符串" + } + } + } +} \ No newline at end of file diff --git a/ComfyUI-JoyCaption/pyproject.toml b/ComfyUI-JoyCaption/pyproject.toml new file mode 100644 index 0000000000000000000000000000000000000000..3cf76be085c472eb8536ab599465b4f2662e8228 --- /dev/null +++ b/ComfyUI-JoyCaption/pyproject.toml @@ -0,0 +1,24 @@ +[project] +name = "ComfyUI-JoyCaption" +description = "Joy Caption is a ComfyUI node using the LLaVA model to generate stylized image captions, supporting batch processing and GGUF models." +version = "2.0.2" +license = {file = "LICENSE"} +dependencies = [ + "torch>=2.0.0", + "transformers>=4.36.0", + "huggingface_hub>=0.19.0", + "accelerate", + "bitsandbytes>=0.42.0", + "Pillow>=10.0.0" +] + +[project.urls] +Repository = "https://github.com/1038lab/ComfyUI-JoyCaption" +# Used by Comfy Registry https://comfyregistry.org + +[tool.comfy] +PublisherId = "ailab" +DisplayName = "ComfyUI-JoyCaption" +Icon = "" + + diff --git a/ComfyUI-JoyCaption/requirements.txt b/ComfyUI-JoyCaption/requirements.txt new file mode 100644 index 0000000000000000000000000000000000000000..7feb875fd4a02286a3ef3c10b96e7c22bd3c4cdf --- /dev/null +++ b/ComfyUI-JoyCaption/requirements.txt @@ -0,0 +1,6 @@ +torch>=2.0.0 +transformers>=4.36.0 +huggingface_hub>=0.19.0 +accelerate +bitsandbytes>=0.42.0 +Pillow>=10.0.0 \ No newline at end of file diff --git a/ComfyUI-JoyCaption/requirements_gguf.txt b/ComfyUI-JoyCaption/requirements_gguf.txt new file mode 100644 index 0000000000000000000000000000000000000000..50703f5a980313406d42a24a57574c4de89520a0 --- /dev/null +++ b/ComfyUI-JoyCaption/requirements_gguf.txt @@ -0,0 +1,7 @@ +llama-cpp-python>=0.2.0 +# Optional GPU acceleration support, depends on user's CUDA version +# Users can choose to install based on their CUDA version +# Example: pip install llama-cpp-python --extra-index-url https://jllllll.github.io/llama-cpp-python-cuBLAS-wheels/AVX2/cu121 +# installation instructions: https://github.com/1038lab/ComfyUI-JoyCaption/blob/main/llama_cpp_install/llama_cpp_install.md +# CUDA version: https://github.com/1038lab/ComfyUI-JoyCaption/blob/main/llama_cpp_install.md#cuda-version-support + diff --git a/ComfyUI-JoyCaption/update.md b/ComfyUI-JoyCaption/update.md new file mode 100644 index 0000000000000000000000000000000000000000..ae09a393781723e92ce203a4322853184675aab0 --- /dev/null +++ b/ComfyUI-JoyCaption/update.md @@ -0,0 +1,175 @@ +# ComfyUI-JoyCaption Update Log + +## V2.0.2 (2025-10-27) + +### 🧩 **New Feature: Custom Model Support** + +- Added `custom_models.json` system — users can now add their own models without modifying the core repository. [#19](https://github.com/1038lab/ComfyUI-JoyCaption/issues/19) +- Supports both **Hugging Face** (`hf_models`) and **GGUF** (`gguf_models`) formats. +- Fully optional — if the file is missing or empty, JoyCaption continues as normal. +- Safe and mergeable — your custom definitions are loaded dynamically at runtime. +- Includes example file: `custom_models_example.json` +- Added detailed documentation: [📘 custom_models.md](./custom_models.md) + +## V2.0.1 (2025-10-20) + +### 🐛 Bug Fixes +- **Fixed Module Loading Issues**: Resolved "ModuleNotFoundError: No module named 'JC'" by implementing sorted file loading in `__init__.py` +- **Fixed CUDA Memory Issues**: Improved error handling for CUDA memory allocation failures + +### 🔧 Code Improvements +- **Inline Utility Functions**: Moved error handling and utility functions back into main modules to avoid import conflicts +- **Enhanced Error Handling**: Better error messages and resource cleanup for model loading failures +- **Improved Memory Management**: More robust GPU memory cleanup and error recovery + +### 🎨 User Experience +- **Added Progress Feedback**: Console output now shows processing status for GGUF models +- **Enhanced Processing Mode**: Added "Auto" option to processing_mode (Auto/GPU/CPU) for better hardware detection +- **Better Tooltips**: Improved parameter descriptions and user guidance + +### 📝 Documentation +- **Fixed Installation Guide**: Corrected path error in Chinese installation guide (`llama_cpp_install_zh.md`) +- **Updated Model Path Instructions**: Added clearer guidance for model placement in README + +### 🛠️ Technical Changes +- **Configuration Centralization**: Added `gguf_settings` to `jc_data.json` for better configuration management +- **Stabilized Module Loading**: Implemented deterministic file loading order to prevent import race conditions + +## V2.0.0 (2025-08-22) + ![Joycaption GGUF](example_workflows/JoyCaption-GGUF.png) +https://github.com/1038lab/ComfyUI-JoyCaption/blob/main/example_workflows/JoyCaption-GGUF.json +### 🚀 Major Features +- **GGUF Model Support**: Added comprehensive support for quantized GGUF models for better performance and lower memory usage + - New `JoyCaption GGUF` node for basic GGUF model usage + - New `JoyCaption GGUF (Advanced)` node with full parameter control + - Support for multiple quantization levels (Q2_K, Q3_K_S, Q3_K_M, Q3_K_L, IQ4_XS, Q4_K_S, Q4_K_M, Q5_K_S, Q5_K_M, Q6_K, Q8_0, F16) + - Automatic model and vision projection model downloading + - **llama_cpp_install folder**: Added comprehensive installation guides and scripts for llama-cpp-python + - `llama_cpp_install.py` - [Automated installation script](https://github.com/1038lab/ComfyUI-JoyCaption/blob/main/llama_cpp_install/llama_cpp_install.py) with CUDA support detection + - `llama_cpp_install.md` - [English installation guide](https://github.com/1038lab/ComfyUI-JoyCaption/blob/main/llama_cpp_install/llama_cpp_install.md) for ComfyUI portable + - `llama_cpp_install_zh.md` - [Chinese installation guide](https://github.com/1038lab/ComfyUI-JoyCaption/blob/main/llama_cpp_install/llama_cpp_install_zh.md) for ComfyUI portable + - Supports Windows, macOS, and Linux platforms + - Automatic CUDA/GPU detection and compilation + - Pre-compiled wheel support for faster installation + +### 🔧 Critical Bug Fixes +- **Fixed TypeError**: Resolved `'NoneType' object cannot be interpreted as an integer` error with top_k parameter +- **Fixed Image Format**: Updated image processing to use correct base64 data URI format for llama-cpp-python +- **Fixed Missing Variables**: Resolved `NameError: name 'prompt_text' is not defined` in JC_GGUF class +- **Enhanced Error Handling**: Improved llama-cpp-python dependency detection and fallback mechanisms + +### 🎨 User Experience Improvements +- **Clean Console Output**: Eliminated base64 image data spam in backend console +- **Enhanced Error Handling**: Improved error messages and parameter validation +- **Better Performance**: GGUF models provide 2-4x speed improvement with lower memory usage +- **Simplified Installation**: One-click llama-cpp-python installation with automatic CUDA support + +### 📊 Performance Optimizations +- **Memory Efficiency**: GGUF models use 50-80% less memory than standard models +- **Processing Speed**: Faster inference with quantized models +- **Output Suppression**: Clean console output during model loading and generation +- **Optimized Loading**: Improved model loading times and memory management + +### 🛠️ Technical Improvements +- **Parameter Handling**: Proper top_k parameter validation (only included when > 0) +- **Image Processing**: Correct PIL to base64 conversion for vision models +- **Code Quality**: Cleaned up production code, removed unnecessary comments +- **Stability**: Enhanced error recovery and model management +- **Installation Automation**: Streamlined llama-cpp-python installation process + +### 📋 Model Support +- **Standard Models**: Continue to support HuggingFace format models +- **GGUF Models**: Comprehensive support for efficient quantized models + - **Q2_K**: 3.18GB, ~4GB VRAM, Good quality, Low VRAM systems (6GB+) + - **Q3_K_S**: 3.66GB, ~5GB VRAM, Good+ quality, Budget systems (8GB+) + - **Q3_K_M**: 4.02GB, ~5GB VRAM, Better quality, Balanced performance + - **Q3_K_L**: 4.32GB, ~6GB VRAM, Better+ quality, Good quality/size ratio + - **IQ4_XS**: 4.48GB, ~6GB VRAM, Very Good quality, **Recommended** (8GB+) + - **Q4_K_S**: 4.69GB, ~6GB VRAM, Very Good quality, Quality focused + - **Q4_K_M**: 4.92GB, ~7GB VRAM, Very Good+ quality, Balanced choice + - **Q5_K_S**: 5.60GB, ~7GB VRAM, Excellent quality, High quality (10GB+) + - **Q5_K_M**: 5.73GB, ~8GB VRAM, Excellent+ quality, Premium quality + - **Q6_K**: 6.60GB, ~8GB VRAM, Near Original quality, Maximum quality (12GB+) + - **Q8_0**: 8.54GB, ~10GB VRAM, Original- quality, Full precision alternative + - **F16**: 16.1GB, ~18GB VRAM, Original quality, Full precision (24GB+) + +### 📚 Installation Resources +- **Automated Installation**: `llama_cpp_install/llama_cpp_install.py` - One-click installation script +- **English Guide**: `llama_cpp_install/llama_cpp_install.md` - Detailed English installation instructions +- **Chinese Guide**: `llama_cpp_install/llama_cpp_install_zh.md` - 中文安装指南 +- **Cross-Platform Support**: Windows, macOS, and Linux installation guides +- **CUDA Support**: Automatic GPU detection and CUDA compilation +- **Pre-compiled Wheels**: Faster installation with pre-built binaries + +## V1.2.0 (2025-06-15) +### Performance Optimizations +- Enhanced CUDA performance for high-end GPUs +- Optimized model loading and caching system +- Improved memory management strategies + - Added `Global Cache` mode for faster processing with sufficient VRAM + - Enhanced `Keep in Memory` mode for balanced performance + - Optimized `Clear After Run` mode for limited VRAM scenarios +- Implemented efficient memory cleanup after processing +- Added automatic memory usage monitoring + +### Memory Management +- Optimized CUDA memory allocation with max_split_size_mb configuration +- Enhanced model caching system with validation checks +- Improved memory cleanup during model switching +- Added automatic GPU memory management for different VRAM capacities + +### Code Improvements +- Enhanced error handling and recovery mechanisms +- Improved model loading validation +- Optimized image processing pipeline +- Added better tooltips and documentation for node parameters + +## V1.1.1 (2025-06-07) +### Bug Fixes +- Fixed CaptionTool nodes not registering in ComfyUI interface + +### Internationalization (i18n) +- Added multi-language support for node interfaces + - English (en) - Default language + - French (fr) - Support for French interface + - Japanese (ja) - 日本語インターフェース対応 + - Korean (ko) - 한국어 인터페이스 지원 + - Russian (ru) - Поддержка русского интерфейса + - Chinese (zh) - 中文界面支持 + +## V1.1.0 (2025-06-05) +### Features +- Initial release of ComfyUI-JoyCaption +- Added JoyCaption node for image captioning +- Integrated memory management system +- Added caption tools for text processing + +[![Joycaption_node](example_workflows/batch_image_text_output.jpg)](https://github.com/1038lab/ComfyUI-JoyCaption/blob/main/example_workflows/batch_image_text_output.json) + +![Batch Caption](https://github.com/user-attachments/assets/2e03348d-213e-4a49-b303-375ff129f66d) + +### Memory Management +- Implemented efficient memory handling for large image processing +- Added automatic memory cleanup after processing +- Optimized memory usage during batch operations +- Added memory usage monitoring + +### Caption Tools +- Added Image Batch Path node (🖼️) for batch image loading + - Support for sequential, reverse, and random image loading + - Configurable batch size and start position + - Automatic EXIF orientation correction + - Support for jpg, jpeg, png, and webp formats +- Added Caption Saver node (📝) for caption management + - Flexible output path configuration + - Custom filename support + - Optional image copying with captions + - Automatic file overwrite protection + - UTF-8 encoding support + + - Batch processing capability + + + + + diff --git a/ComfyUI-KJNodes/.github/workflows/publish.yml b/ComfyUI-KJNodes/.github/workflows/publish.yml new file mode 100644 index 0000000000000000000000000000000000000000..be75d38aa858e24376e02d4782290390f1f8bb88 --- /dev/null +++ b/ComfyUI-KJNodes/.github/workflows/publish.yml @@ -0,0 +1,25 @@ +name: Publish to Comfy registry +on: + workflow_dispatch: + push: + branches: + - main + paths: + - "pyproject.toml" + +permissions: + issues: write + +jobs: + publish-node: + name: Publish Custom Node to registry + runs-on: ubuntu-latest + if: ${{ github.repository_owner == 'kijai' }} + steps: + - name: Check out code + uses: actions/checkout@v4 + - name: Publish Custom Node + uses: Comfy-Org/publish-node-action@v1 + with: + ## Add your own personal access token to your Github Repository secrets and reference it here. + personal_access_token: ${{ secrets.REGISTRY_ACCESS_TOKEN }} diff --git a/ComfyUI-KJNodes/.gitignore b/ComfyUI-KJNodes/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..de69123ac62f2de629ac6133b5b9d20555b173f6 --- /dev/null +++ b/ComfyUI-KJNodes/.gitignore @@ -0,0 +1,13 @@ +__pycache__ +/venv +*.code-workspace +.history +.vscode +*.ckpt +*.pth +types +models +jsconfig.json +custom_dimensions.json +.claude +.tests diff --git a/ComfyUI-KJNodes/LICENSE b/ComfyUI-KJNodes/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..3877ae0a7ff6f94ac222fd704e112723db776114 --- /dev/null +++ b/ComfyUI-KJNodes/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/ComfyUI-KJNodes/README.md b/ComfyUI-KJNodes/README.md new file mode 100644 index 0000000000000000000000000000000000000000..3090f61811d3895f066908ce412af7d56c53a1a6 --- /dev/null +++ b/ComfyUI-KJNodes/README.md @@ -0,0 +1,72 @@ +# KJNodes for ComfyUI + +At this point pretty random collection of utility, model optimization and QoL nodes, while keeping dependencies at minimum. + +Documentation is mostly in the node descriptions and tooltips. + +# Installation +1. Clone this repo into `custom_nodes` folder. +2. Install dependencies: `pip install -r requirements.txt` + or if you use the portable install, run this in ComfyUI_windows_portable -folder: + + `python_embeded\python.exe -m pip install -r ComfyUI\custom_nodes\ComfyUI-KJNodes\requirements.txt` + +### Set/Get + +# UPDATE March 19th 2026 + +Complete (backwards compatible as far as I'm aware currently) rewrite of Set/Get nodes. + +# Changelog March 19th 2026 + +## New Features + +- **Nodes 2.0 support** - Works with nodes 2.0 as well as legacy. + +- **Subgraph support** — Set/Get now works across subgraph boundaries. A Set in a parent graph is visible to all child subgraphs, and Get nodes search upward through ancestors. Cross-graph connections are resolved during prompt execution. + +- **Convert link to Set/Get** — Right-click any link midpoint to convert it into a Set/Get pair. + +- **Convert to links** — Right-click a Set or Get node to convert the pair back to direct links. + +- **Convert outputs to Set/Get** — Batch operation to convert all outputs of selected nodes into Set/Get pairs at once. + +- **Canvas right-click menu** — "Convert outputs on all selected nodes to Set/Get" and "Convert selected Set/Get to links". + +- **Keyboard shortcuts** — Ctrl+Shift+S (add Set to selected / at cursor), Ctrl+Shift+G (add Get at cursor), Ctrl+Shift+L (force-show all connections toggle). + +- **"Convert ALL Set/Get to links" setting** — One-click button in settings to replace every Set/Get pair with direct links, including across subgraph boundaries. + +- **Show links setting** — Combo setting (never / selected / always) to control when virtual links between Set/Get pairs are drawn. "Selected" mode shows links only for currently selected Set/Get nodes. Ctrl+Shift+L temporarily forces all links visible. + +- **Add Set/Get from connection menu** — When dragging from a slot, "Add SetNode" and "Add GetNode" entries appear next to "Add Reroute" in the connection menu. + +- **Shift+middle-click creates Set/Get** — Shift+middle-click on an output slot creates a connected SetNode; on an input slot creates a connected GetNode. Optional setting to override normal middle-click to also create Set/Get instead of Reroute. + +- **Add paired GetNode** — Right-click a SetNode to add a paired GetNode pre-configured with the same name. + +- **Double-click Get to jump to Set** — Double-click a GetNode to center and select its paired SetNode. + +- **Default widget value setting** — Controls the initial Constant value when a Set node is first connected: empty (default), slot name, slot name (lowercase), or slot name (UPPERCASE). + +- **Type inference from output** — If a SetNode's input is unconnected but its output is connected to a typed input, the Set adopts that type and recolors accordingly. + +- **Getters submenu navigates into subgraphs** — SetNode's getter list now includes cross-subgraph GetNodes and can navigate into subgraphs to focus them. + +## Fixes + +- **Paste rename coordination** — When pasting Set+Get pairs, GetNodes now correctly follow their SetNode's rename (e.g., `MODEL` -> `MODEL_0`). + +- **Type/color reset on disconnect** — Disconnecting input or output now correctly resets type and color, but only when neither side is still connected. + +- **Suffix stripping only on paste** — `validateName` no longer strips intentional `_N` suffixes from user-typed names. Only strips during paste to avoid `FOO_0_1_2` accumulation. + +- **Connection drawing moved to canvas level** — Visualization links remain visible even when nodes are off-screen or collapsed. + +## Settings + +- Settings are now organized under **KJNodes > Set & Get** and **KJNodes > General** categories in the settings panel. + + +--- + diff --git a/ComfyUI-KJNodes/__init__.py b/ComfyUI-KJNodes/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..6339b348cd72534f58e13c5bc7199849ef342497 --- /dev/null +++ b/ComfyUI-KJNodes/__init__.py @@ -0,0 +1,302 @@ +from .nodes.nodes import * +from .nodes.curve_nodes import * +from .nodes.batchcrop_nodes import * +from .nodes.audioscheduler_nodes import * +from .nodes.image_nodes import * +from .nodes.intrinsic_lora_nodes import * +from .nodes.mask_nodes import * +from .nodes.model_optimization_nodes import * +from .nodes.lora_nodes import * +from .nodes.sharpen_nodes import ImageSharpenKJ + + +NODE_CONFIG = { + #constants + "BOOLConstant": {"class": BOOLConstant, "name": "BOOL Constant"}, + "INTConstant": {"class": INTConstant, "name": "INT Constant"}, + "FloatConstant": {"class": FloatConstant, "name": "Float Constant"}, + "StringConstant": {"class": StringConstant, "name": "String Constant"}, + "StringConstantMultiline": {"class": StringConstantMultiline, "name": "String Constant Multiline"}, + #conditioning + "ConditioningMultiCombine": {"class": ConditioningMultiCombine, "name": "Conditioning Multi Combine"}, + "ConditioningSetMaskAndCombine": {"class": ConditioningSetMaskAndCombine, "name": "ConditioningSetMaskAndCombine"}, + "ConditioningSetMaskAndCombine3": {"class": ConditioningSetMaskAndCombine3, "name": "ConditioningSetMaskAndCombine3"}, + "ConditioningSetMaskAndCombine4": {"class": ConditioningSetMaskAndCombine4, "name": "ConditioningSetMaskAndCombine4"}, + "ConditioningSetMaskAndCombine5": {"class": ConditioningSetMaskAndCombine5, "name": "ConditioningSetMaskAndCombine5"}, + "CondPassThrough": {"class": CondPassThrough}, + "WanImageToVideoSVIPro": {"class": WanImageToVideoSVIPro, "name": "Wan Image To Video SVIPro"}, + #masking + "DrawMaskOnImage": {"class": DrawMaskOnImage, "name": "Draw Mask On Image"}, + "DownloadAndLoadCLIPSeg": {"class": DownloadAndLoadCLIPSeg, "name": "(Down)load CLIPSeg"}, + "BatchCLIPSeg": {"class": BatchCLIPSeg, "name": "Batch CLIPSeg"}, + "BlockifyMask": {"class": BlockifyMask, "name": "Blockify Mask"}, + "ColorToMask": {"class": ColorToMask, "name": "Color To Mask"}, + "CreateGradientMask": {"class": CreateGradientMask, "name": "Create Gradient Mask"}, + "CreateTextMask": {"class": CreateTextMask, "name": "Create Text Mask"}, + "CreateAudioMask": {"class": CreateAudioMask, "name": "Create Audio Mask"}, + "CreateFadeMask": {"class": CreateFadeMask, "name": "Create Fade Mask"}, + "CreateFadeMaskAdvanced": {"class": CreateFadeMaskAdvanced, "name": "Create Fade Mask Advanced"}, + "CreateFluidMask": {"class": CreateFluidMask, "name": "Create Fluid Mask"}, + "CreateShapeMask": {"class": CreateShapeMask, "name": "Create Shape Mask"}, + "CreateVoronoiMask": {"class": CreateVoronoiMask, "name": "Create Voronoi Mask"}, + "CreateMagicMask": {"class": CreateMagicMask, "name": "Create Magic Mask"}, + "GetMaskSizeAndCount": {"class": GetMaskSizeAndCount, "name": "Get Mask Size & Count"}, + "GrowMaskWithBlur": {"class": GrowMaskWithBlur, "name": "Grow Mask With Blur"}, + "MaskBatchMulti": {"class": MaskBatchMulti, "name": "Mask Batch Multi"}, + "OffsetMask": {"class": OffsetMask, "name": "Offset Mask"}, + "RemapMaskRange": {"class": RemapMaskRange, "name": "Remap Mask Range"}, + "ResizeMask": {"class": ResizeMask, "name": "Resize Mask"}, + "RoundMask": {"class": RoundMask, "name": "Round Mask"}, + "SeparateMasks": {"class": SeparateMasks, "name": "Separate Masks"}, + "ConsolidateMasksKJ": {"class": ConsolidateMasksKJ, "name": "Consolidate Masks"}, + #images + "AddLabel": {"class": AddLabel, "name": "Add Label"}, + "ColorMatch": {"class": ColorMatch, "name": "Color Match"}, + "ColorMatchV2": {"class": ColorMatchV2, "name": "Color Match V2"}, + "ImageTensorList": {"class": ImageTensorList, "name": "Image Tensor List"}, + "CrossFadeImages": {"class": CrossFadeImages, "name": "Cross Fade Images"}, + "CrossFadeImagesMulti": {"class": CrossFadeImagesMulti, "name": "Cross Fade Images Multi"}, + "GetImagesFromBatchIndexed": {"class": GetImagesFromBatchIndexed, "name": "Get Images From Batch Indexed"}, + "GetImageRangeFromBatch": {"class": GetImageRangeFromBatch, "name": "Get Image or Mask Range From Batch"}, + "GetLatentRangeFromBatch": {"class": GetLatentRangeFromBatch, "name": "Get Latent Range From Batch"}, + "GetLatentSizeAndCount": {"class": GetLatentSizeAndCount, "name": "Get Latent Size & Count"}, + "GetImageSizeAndCount": {"class": GetImageSizeAndCount, "name": "Get Image Size & Count"}, + "FastPreview": {"class": FastPreview, "name": "Fast Preview"}, + "ImageBatchFilter": {"class": ImageBatchFilter, "name": "Image Batch Filter"}, + "ImageAndMaskPreview": {"class": ImageAndMaskPreview}, + "ImageAddMulti": {"class": ImageAddMulti, "name": "Image Add Multi"}, + "ImageBatchJoinWithTransition": {"class": ImageBatchJoinWithTransition, "name": "Image Batch Join With Transition"}, + "ImageBatchMulti": {"class": ImageBatchMulti, "name": "Image Batch Multi"}, + "ImageBatchRepeatInterleaving": {"class": ImageBatchRepeatInterleaving}, + "ImageBatchTestPattern": {"class": ImageBatchTestPattern, "name": "Image Batch Test Pattern"}, + "ImageConcanate": {"class": ImageConcanate, "name": "Image Concatenate"}, + "ImageConcatFromBatch": {"class": ImageConcatFromBatch, "name": "Image Concatenate From Batch"}, + "ImageConcatMulti": {"class": ImageConcatMulti, "name": "Image Concatenate Multi"}, + "ImageCropByMask": {"class": ImageCropByMask, "name": "Image Crop By Mask"}, + "ImageCropByMaskAndResize": {"class": ImageCropByMaskAndResize, "name": "Image Crop By Mask And Resize"}, + "ImageCropByMaskBatch": {"class": ImageCropByMaskBatch, "name": "Image Crop By Mask Batch"}, + "ImageUncropByMask": {"class": ImageUncropByMask, "name": "Image Uncrop By Mask"}, + "ImageBatchExtendWithOverlap": {"class": ImageBatchExtendWithOverlap, "name": "Image Batch Extend With Overlap"}, + "ImageGrabPIL": {"class": ImageGrabPIL, "name": "Image Grab PIL"}, + "ImageGridComposite2x2": {"class": ImageGridComposite2x2, "name": "Image Grid Composite 2x2"}, + "ImageGridComposite3x3": {"class": ImageGridComposite3x3, "name": "Image Grid Composite 3x3"}, + "ImageGridtoBatch": {"class": ImageGridtoBatch, "name": "Image Grid To Batch"}, + "ImageNoiseAugmentation": {"class": ImageNoiseAugmentation, "name": "Image Noise Augmentation"}, + "ImageNormalize_Neg1_To_1": {"class": ImageNormalize_Neg1_To_1, "name": "Image Normalize -1 to 1"}, + "ImagePass": {"class": ImagePass}, + "ImagePadKJ": {"class": ImagePadKJ, "name": "ImagePad KJ"}, + "ImagePadForOutpaintMasked": {"class": ImagePadForOutpaintMasked, "name": "Image Pad For Outpaint Masked"}, + "ImagePadForOutpaintTargetSize": {"class": ImagePadForOutpaintTargetSize, "name": "Image Pad For Outpaint Target Size"}, + "ImagePrepForICLora": {"class": ImagePrepForICLora, "name": "Image Prep For ICLora"}, + "ImageResizeKJ": {"class": ImageResizeKJ, "name": "Resize Image (deprecated)"}, + "ImageResizeKJv2": {"class": ImageResizeKJv2, "name": "Resize Image v2"}, + "ImageUpscaleWithModelBatched": {"class": ImageUpscaleWithModelBatched, "name": "Image Upscale With Model Batched"}, + "InsertImagesToBatchIndexed": {"class": InsertImagesToBatchIndexed, "name": "Insert Images To Batch Indexed"}, + "InsertLatentToIndexed": {"class": InsertLatentToIndex, "name": "Insert Latent To Index"}, + "LoadAndResizeImage": {"class": LoadAndResizeImage, "name": "Load & Resize Image"}, + "LoadImagesFromFolderKJ": {"class": LoadImagesFromFolderKJ, "name": "Load Images From Folder (KJ)"}, + "LoadVideosFromFolder": {"class": LoadVideosFromFolder, "name": "Load Videos From Folder"}, + "MergeImageChannels": {"class": MergeImageChannels, "name": "Merge Image Channels"}, + "PadImageBatchInterleaved": {"class": PadImageBatchInterleaved, "name": "Pad Image Batch Interleaved"}, + "PreviewAnimation": {"class": PreviewAnimation, "name": "Preview Animation"}, + "RemapImageRange": {"class": RemapImageRange, "name": "Remap Image Range"}, + "ReverseImageBatch": {"class": ReverseImageBatch, "name": "Reverse Image Batch"}, + "ReplaceImagesInBatch": {"class": ReplaceImagesInBatch, "name": "Replace Images In Batch"}, + "SaveImageWithAlpha": {"class": SaveImageWithAlpha, "name": "Save Image With Alpha"}, + "SaveImageKJ": {"class": SaveImageKJ, "name": "Save Image KJ"}, + "ShuffleImageBatch": {"class": ShuffleImageBatch, "name": "Shuffle Image Batch"}, + "SplitImageChannels": {"class": SplitImageChannels, "name": "Split Image Channels"}, + "TransitionImagesMulti": {"class": TransitionImagesMulti, "name": "Transition Images Multi"}, + "TransitionImagesInBatch": {"class": TransitionImagesInBatch, "name": "Transition Images In Batch"}, + "EncodeVideoComponents": {"class": EncodeVideoComponents, "name": "Encode Video Components"}, + "DecodeAndSaveVideo": {"class": DecodeAndSaveVideo, "name": "Decode And Save Video"}, + "PreviewImageOrMask": {"class": PreviewImageOrMask, "name": "Preview Image Or Mask"}, + "ImageSharpenKJ": {"class": ImageSharpenKJ, "name": "Image Sharpen KJ"}, + #batch cropping + "BatchCropFromMask": {"class": BatchCropFromMask, "name": "Batch Crop From Mask"}, + "BatchCropFromMaskAdvanced": {"class": BatchCropFromMaskAdvanced, "name": "Batch Crop From Mask Advanced"}, + "FilterZeroMasksAndCorrespondingImages": {"class": FilterZeroMasksAndCorrespondingImages}, + "InsertImageBatchByIndexes": {"class": InsertImageBatchByIndexes, "name": "Insert Image Batch By Indexes"}, + "BatchUncrop": {"class": BatchUncrop, "name": "Batch Uncrop"}, + "BatchUncropAdvanced": {"class": BatchUncropAdvanced, "name": "Batch Uncrop Advanced"}, + "SplitBboxes": {"class": SplitBboxes, "name": "Split Bboxes"}, + "BboxToInt": {"class": BboxToInt, "name": "Bbox To Int"}, + "BboxVisualize": {"class": BboxVisualize, "name": "Bbox Visualize"}, + #noise + "GenerateNoise": {"class": GenerateNoise, "name": "Generate Noise"}, + "FlipSigmasAdjusted": {"class": FlipSigmasAdjusted, "name": "Flip Sigmas Adjusted"}, + "InjectNoiseToLatent": {"class": InjectNoiseToLatent, "name": "Inject Noise To Latent"}, + "CustomSigmas": {"class": CustomSigmas, "name": "Custom Sigmas"}, + #utility + "StringToFloatList": {"class": StringToFloatList, "name": "String to Float List"}, + "WidgetToString": {"class": WidgetToString, "name": "Widget To String"}, + "SaveStringKJ": {"class": SaveStringKJ, "name": "Save String KJ"}, + "DummyOut": {"class": DummyOut, "name": "Dummy Out"}, + "GetLatentsFromBatchIndexed": {"class": GetLatentsFromBatchIndexed, "name": "Get Latents From Batch Indexed"}, + "ScaleBatchPromptSchedule": {"class": ScaleBatchPromptSchedule, "name": "Scale Batch Prompt Schedule"}, + "CameraPoseVisualizer": {"class": CameraPoseVisualizer, "name": "Camera Pose Visualizer"}, + "AppendStringsToList": {"class": AppendStringsToList, "name": "Append Strings To List"}, + "JoinStrings": {"class": JoinStrings, "name": "Join Strings"}, + "JoinStringMulti": {"class": JoinStringMulti, "name": "Join String Multi"}, + "SimpleCalculatorKJ": {"class": SimpleCalculatorKJ, "name": "Simple Calculator KJ"}, + "SomethingToString": {"class": SomethingToString, "name": "Something To String"}, + "Sleep": {"class": Sleep, "name": "Sleep"}, + "VRAM_Debug": {"class": VRAM_Debug, "name": "VRAM Debug"}, + "EmptyLatentImagePresets": {"class": EmptyLatentImagePresets, "name": "Empty Latent Image Presets"}, + "EmptyLatentImageCustomPresets": {"class": EmptyLatentImageCustomPresets, "name": "Empty Latent Image Custom Presets"}, + "ModelPassThrough": {"class": ModelPassThrough, "name": "ModelPass"}, + "ModelSaveKJ": {"class": ModelSaveKJ, "name": "Model Save KJ"}, + "SetShakkerLabsUnionControlNetType": {"class": SetShakkerLabsUnionControlNetType, "name": "Set Shakker Labs Union ControlNet Type"}, + "StyleModelApplyAdvanced": {"class": StyleModelApplyAdvanced, "name": "Style Model Apply Advanced"}, + "DiffusionModelSelector": {"class": DiffusionModelSelector, "name": "Diffusion Model Selector"}, + "LazySwitchKJ": {"class": LazySwitchKJ, "name": "Lazy Switch KJ"}, + "VisualizeSigmasKJ": {"class": VisualizeSigmasKJ, "name": "Visualize Sigmas KJ"}, + #audioscheduler stuff + "NormalizedAmplitudeToMask": {"class": NormalizedAmplitudeToMask}, + "NormalizedAmplitudeToFloatList": {"class": NormalizedAmplitudeToFloatList}, + "OffsetMaskByNormalizedAmplitude": {"class": OffsetMaskByNormalizedAmplitude}, + "ImageTransformByNormalizedAmplitude": {"class": ImageTransformByNormalizedAmplitude}, + "AudioConcatenate": {"class": AudioConcatenate}, + #curve nodes + "SplineEditor": {"class": SplineEditor, "name": "Spline Editor"}, + "CreateShapeImageOnPath": {"class": CreateShapeImageOnPath, "name": "Create Shape Image On Path"}, + "CreateShapeMaskOnPath": {"class": CreateShapeMaskOnPath, "name": "Create Shape Mask On Path"}, + "CreateTextOnPath": {"class": CreateTextOnPath, "name": "Create Text On Path"}, + "CreateGradientFromCoords": {"class": CreateGradientFromCoords, "name": "Create Gradient From Coords"}, + "CutAndDragOnPath": {"class": CutAndDragOnPath, "name": "Cut And Drag On Path"}, + "GradientToFloat": {"class": GradientToFloat, "name": "Gradient To Float"}, + "WeightScheduleExtend": {"class": WeightScheduleExtend, "name": "Weight Schedule Extend"}, + "MaskOrImageToWeight": {"class": MaskOrImageToWeight, "name": "Mask Or Image To Weight"}, + "WeightScheduleConvert": {"class": WeightScheduleConvert, "name": "Weight Schedule Convert"}, + "FloatToMask": {"class": FloatToMask, "name": "Float To Mask"}, + "FloatToSigmas": {"class": FloatToSigmas, "name": "Float To Sigmas"}, + "SigmasToFloat": {"class": SigmasToFloat, "name": "Sigmas To Float"}, + "PlotCoordinates": {"class": PlotCoordinates, "name": "Plot Coordinates"}, + "InterpolateCoords": {"class": InterpolateCoords, "name": "Interpolate Coords"}, + "PointsEditor": {"class": PointsEditor, "name": "Points Editor"}, + #experimental + "SoundReactive": {"class": SoundReactive, "name": "Sound Reactive"}, + "StableZero123_BatchSchedule": {"class": StableZero123_BatchSchedule, "name": "Stable Zero123 Batch Schedule"}, + "SV3D_BatchSchedule": {"class": SV3D_BatchSchedule, "name": "SV3D Batch Schedule"}, + "LoadResAdapterNormalization": {"class": LoadResAdapterNormalization}, + "Superprompt": {"class": Superprompt, "name": "Superprompt"}, + "GLIGENTextBoxApplyBatchCoords": {"class": GLIGENTextBoxApplyBatchCoords}, + "Intrinsic_lora_sampling": {"class": Intrinsic_lora_sampling, "name": "Intrinsic Lora Sampling"}, + "CheckpointPerturbWeights": {"class": CheckpointPerturbWeights, "name": "CheckpointPerturbWeights"}, + "Screencap_mss": {"class": Screencap_mss, "name": "Screencap mss"}, + "ScreencapStream": {"class": ScreencapStream, "name": "Screencap Stream"}, + "WebcamCaptureCV2": {"class": WebcamCaptureCV2, "name": "Webcam Capture CV2"}, + "DifferentialDiffusionAdvanced": {"class": DifferentialDiffusionAdvanced, "name": "Differential Diffusion Advanced"}, + "DiTBlockLoraLoader": {"class": DiTBlockLoraLoader, "name": "DiT Block Lora Loader"}, + "FluxBlockLoraSelect": {"class": FluxBlockLoraSelect, "name": "Flux Block Lora Select"}, + "HunyuanVideoBlockLoraSelect": {"class": HunyuanVideoBlockLoraSelect, "name": "Hunyuan Video Block Lora Select"}, + "Wan21BlockLoraSelect": {"class": Wan21BlockLoraSelect, "name": "Wan21 Block Lora Select"}, + "LTX2BlockLoraSelect": {"class": LTX2BlockLoraSelect, "name": "LTX2 Block Lora Select"}, + "CustomControlNetWeightsFluxFromList": {"class": CustomControlNetWeightsFluxFromList, "name": "Custom ControlNet Weights Flux From List"}, + "CheckpointLoaderKJ": {"class": CheckpointLoaderKJ, "name": "CheckpointLoaderKJ"}, + "DiffusionModelLoaderKJ": {"class": DiffusionModelLoaderKJ, "name": "Diffusion Model Loader KJ"}, + "TorchCompileModelFluxAdvancedV2": {"class": TorchCompileModelFluxAdvancedV2, "name": "TorchCompileModelFluxAdvancedV2"}, + "TorchCompileVAE": {"class": TorchCompileVAE, "name": "TorchCompileVAE"}, + "TorchCompileControlNet": {"class": TorchCompileControlNet, "name": "TorchCompileControlNet"}, + "TorchCompileModelWanVideoV2": {"class": TorchCompileModelWanVideoV2, "name": "TorchCompileModelWanVideoV2"}, + "PathchSageAttentionKJ": {"class": PathchSageAttentionKJ, "name": "Patch Sage Attention KJ"}, + "LeapfusionHunyuanI2VPatcher": {"class": LeapfusionHunyuanI2V, "name": "Leapfusion Hunyuan I2V Patcher"}, + "VAELoaderKJ": {"class": VAELoaderKJ, "name": "VAELoader KJ"}, + "VAEDecodeLoopKJ": {"class": VAEDecodeLoopKJ, "name": "VAE Decode Loop KJ"}, + "ScheduledCFGGuidance": {"class": ScheduledCFGGuidance, "name": "Scheduled CFG Guidance"}, + "ApplyRifleXRoPE_HunuyanVideo": {"class": ApplyRifleXRoPE_HunuyanVideo, "name": "Apply RifleXRoPE HunuyanVideo"}, + "ApplyRifleXRoPE_WanVideo": {"class": ApplyRifleXRoPE_WanVideo, "name": "Apply RifleXRoPE WanVideo"}, + "WanVideoTeaCacheKJ": {"class": WanVideoTeaCacheKJ, "name": "WanVideo Tea Cache (native)"}, + "WanVideoEnhanceAVideoKJ": {"class": WanVideoEnhanceAVideoKJ, "name": "WanVideo Enhance A Video (native)"}, + "SkipLayerGuidanceWanVideo": {"class": SkipLayerGuidanceWanVideo, "name": "Skip Layer Guidance WanVideo"}, + "TimerNodeKJ": {"class": TimerNodeKJ, "name": "Timer Node KJ"}, + "HunyuanVideoEncodeKeyframesToCond": {"class": HunyuanVideoEncodeKeyframesToCond, "name": "HunyuanVideo Encode Keyframes To Cond"}, + "CFGZeroStarAndInit": {"class": CFGZeroStarAndInit, "name": "CFG Zero Star/Init"}, + "ModelPatchTorchSettings": {"class": ModelPatchTorchSettings, "name": "Model Patch Torch Settings"}, + "WanVideoNAG": {"class": WanVideoNAG, "name": "WanVideoNAG"}, + "GGUFLoaderKJ": {"class": GGUFLoaderKJ, "name": "GGUF Loader KJ"}, + "LatentInpaintTTM": {"class": LatentInpaintTTM, "name": "Latent Inpaint TTM"}, + "NABLA_AttentionKJ": {"class": NABLA_AttentionKJ, "name": "NABLA Attention KJ"}, + "TorchCompileModelAdvanced": {"class": TorchCompileModelAdvanced, "name": "TorchCompileModelAdvanced"}, + "StartRecordCUDAMemoryHistory": {"class": StartRecordCUDAMemoryHistory, "name": "Start Recording CUDAMemory History"}, + "EndRecordCUDAMemoryHistory": {"class": EndRecordCUDAMemoryHistory, "name": "End Recording CUDAMemory History"}, + "VisualizeCUDAMemoryHistory": {"class": VisualizeCUDAMemoryHistory, "name": "Visualize CUDAMemory History"}, + "PreviewLatentNoiseMask": {"class": PreviewLatentNoiseMask, "name": "Preview Latent Noise Mask"}, + "ModelMemoryUseReportPatch": {"class": ModelMemoryUseReportPatch, "name": "Model Memory Use Report Patch"}, + "ModelMemoryUsageFactorOverride": {"class": ModelMemoryUsageFactorOverride, "name": "Model Memory Usage Factor Override"}, + "WanChunkFeedForward": {"class": WanChunkFeedForward, "name": "Wan ChunkFeedForward"}, + "SamplerSelfRefineVideo": {"class": SamplerSelfRefineVideo, "name": "Sampler SelfRefineVideo"}, + "PlaySoundKJ": {"class": PlaySoundKJ, "name": "Play Sound KJ"}, + + #instance diffusion + "CreateInstanceDiffusionTracking": {"class": CreateInstanceDiffusionTracking}, + "AppendInstanceDiffusionTracking": {"class": AppendInstanceDiffusionTracking}, + "DrawInstanceDiffusionTracking": {"class": DrawInstanceDiffusionTracking}, + + #lora + "LoraExtractKJ": {"class": LoraExtractKJ, "name": "LoraExtractKJ"}, + "LoraReduceRankKJ": {"class": LoraReduceRank, "name": "LoraReduceRank"}, + + #tracks + "GetTrackRange": {"class": GetTrackRange, "name": "Get Track Range"}, + "AddNoiseToTrackPath": {"class": AddNoiseToTrackPath, "name": "Add Noise To Track"}, + + # deprecated + "PatchModelPatcherOrder": {"class": PatchModelPatcherOrder, "name": "Patch Model Patcher Order"}, + "TorchCompileModelFluxAdvanced": {"class": DeprecatedCompileNodeKJ, "name": "TorchCompileModelFluxAdvanced"}, + "TorchCompileLTXModel": {"class": DeprecatedCompileNodeKJ, "name": "TorchCompileLTXModel"}, + "TorchCompileCosmosModel": {"class": DeprecatedCompileNodeKJ, "name": "TorchCompileCosmosModel"}, + "TorchCompileModelHyVideo": {"class": DeprecatedCompileNodeKJ, "name": "TorchCompileModelHyVideo"}, + "TorchCompileModelQwenImage": {"class": DeprecatedCompileNodeKJ, "name": "TorchCompileModelQwenImage"}, + "TorchCompileModelWanVideo": {"class": DeprecatedCompileNodeKJ, "name": "TorchCompileModelWanVideo"}, +} + +#ltxv +try: + from .nodes.ltxv_nodes import * + NODE_CONFIG.update({ + "LTXVEnhanceAVideoKJ": {"class": LTXVEnhanceAVideoKJ, "name": "LTXV Enhance A Video KJ"}, + "LTXVAddGuideMulti": {"class": LTXVAddGuideMulti, "name": "LTXV Add Guide Multi"}, + "LTXVAddGuidesFromBatch": {"class": LTXVAddGuidesFromBatch, "name": "LTXV Add Guides From Batch"}, + "LTXVAudioVideoMask": {"class": LTXVAudioVideoMask, "name": "LTXV Audio Video Mask"}, + "LTX2_NAG": {"class": LTX2_NAG, "name": "LTX2 NAG"}, + "LTXVChunkFeedForward": {"class": LTXVChunkFeedForward, "name": "LTXV Chunk Feed Forward"}, + "LTX2SamplingPreviewOverride": {"class": LTX2SamplingPreviewOverride, "name": "LTX2 Sampling Preview Override"}, + "LTX2AudioLatentNormalizingSampling": {"class": LTX2AudioLatentNormalizingSampling, "name": "LTX2 Audio Latent Normalizing Sampling"}, + "LTXVImgToVideoInplaceKJ": {"class": LTXVImgToVideoInplaceKJ, "name": "LTXV Img To Video Inplace KJ"}, + "LTX2AttentionTunerPatch": {"class": LTX2AttentionTunerPatch, "name": "LTX2 Attention Tuner Patch"}, + "LTX2MemoryEfficientSageAttentionPatch": {"class": LTX2MemoryEfficientSageAttentionPatch, "name": "LTX2 Memory Efficient Sage Attention Patch"}, + "LTX2LoraLoaderAdvanced": {"class": LTX2LoraLoaderAdvanced, "name": "LTX2 Lora Loader Advanced"}, + }) +except Exception as e: + logging.warning(f"KJNodes: LTXV nodes could not be imported. LTXV nodes will be unavailable. Error: {e}") + +def generate_node_mappings(node_config): + node_class_mappings = {} + node_display_name_mappings = {} + + for node_name, node_info in node_config.items(): + node_class_mappings[node_name] = node_info["class"] + node_display_name_mappings[node_name] = node_info.get("name", node_info["class"].__name__) + + return node_class_mappings, node_display_name_mappings + +NODE_CLASS_MAPPINGS, NODE_DISPLAY_NAME_MAPPINGS = generate_node_mappings(NODE_CONFIG) + +__all__ = ["NODE_CLASS_MAPPINGS", "NODE_DISPLAY_NAME_MAPPINGS", "WEB_DIRECTORY"] + +WEB_DIRECTORY = "./web" + +from aiohttp import web +from server import PromptServer +from pathlib import Path + +if hasattr(PromptServer, "instance"): + try: + # NOTE: we add an extra static path to avoid comfy mechanism + # that loads every script in web. + PromptServer.instance.app.add_routes( + [web.static("/kjweb_async", (Path(__file__).parent.absolute() / "kjweb_async").as_posix())] + ) + except: + pass diff --git a/ComfyUI-KJNodes/custom_dimensions_example.json b/ComfyUI-KJNodes/custom_dimensions_example.json new file mode 100644 index 0000000000000000000000000000000000000000..0a01533af7365e97cf30eefe116ed16fd5fdd26e --- /dev/null +++ b/ComfyUI-KJNodes/custom_dimensions_example.json @@ -0,0 +1,22 @@ +[ + { + "label": "SD", + "value": "512x512" + }, + { + "label": "HD", + "value": "768x768" + }, + { + "label": "Full HD", + "value": "1024x1024" + }, + { + "label": "4k", + "value": "2048x2048" + }, + { + "label": "SVD", + "value": "1024x576" + } +] diff --git a/ComfyUI-KJNodes/docs/images/319121566-05f66385-7568-4b1f-8bbc-11053660b02f.png b/ComfyUI-KJNodes/docs/images/319121566-05f66385-7568-4b1f-8bbc-11053660b02f.png new file mode 100644 index 0000000000000000000000000000000000000000..e749239c1c4ffd5ab29b51695dd8d8b51ed3597f Binary files /dev/null and b/ComfyUI-KJNodes/docs/images/319121566-05f66385-7568-4b1f-8bbc-11053660b02f.png differ diff --git a/ComfyUI-KJNodes/docs/images/319121636-706b5081-9120-4a29-bd76-901691ada688.png b/ComfyUI-KJNodes/docs/images/319121636-706b5081-9120-4a29-bd76-901691ada688.png new file mode 100644 index 0000000000000000000000000000000000000000..b53ad666ff060d87971f3962e74101f0cb2a5c3f Binary files /dev/null and b/ComfyUI-KJNodes/docs/images/319121636-706b5081-9120-4a29-bd76-901691ada688.png differ diff --git a/ComfyUI-KJNodes/example_workflows/leapfusion_hunyuuanvideo_i2v_native_testing.json b/ComfyUI-KJNodes/example_workflows/leapfusion_hunyuuanvideo_i2v_native_testing.json new file mode 100644 index 0000000000000000000000000000000000000000..d30084c4739706174d9a5c66893d42bafb110c8f --- /dev/null +++ b/ComfyUI-KJNodes/example_workflows/leapfusion_hunyuuanvideo_i2v_native_testing.json @@ -0,0 +1,1188 @@ +{ + "last_node_id": 86, + "last_link_id": 144, + "nodes": [ + { + "id": 62, + "type": "FluxGuidance", + "pos": [ + -630, + -170 + ], + "size": [ + 317.4000244140625, + 58 + ], + "flags": {}, + "order": 13, + "mode": 0, + "inputs": [ + { + "name": "conditioning", + "type": "CONDITIONING", + "link": 82 + } + ], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [ + 83 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "FluxGuidance" + }, + "widgets_values": [ + 6 + ] + }, + { + "id": 51, + "type": "KSamplerSelect", + "pos": [ + -610, + -480 + ], + "size": [ + 315, + 58 + ], + "flags": {}, + "order": 0, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "SAMPLER", + "type": "SAMPLER", + "links": [ + 61 + ] + } + ], + "properties": { + "Node name for S&R": "KSamplerSelect" + }, + "widgets_values": [ + "euler" + ] + }, + { + "id": 57, + "type": "VAEDecodeTiled", + "pos": [ + -200, + 90 + ], + "size": [ + 315, + 150 + ], + "flags": {}, + "order": 20, + "mode": 0, + "inputs": [ + { + "name": "samples", + "type": "LATENT", + "link": 142 + }, + { + "name": "vae", + "type": "VAE", + "link": 74 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 105 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "VAEDecodeTiled" + }, + "widgets_values": [ + 128, + 64, + 64, + 8 + ] + }, + { + "id": 65, + "type": "LoadImage", + "pos": [ + -2212.498779296875, + -632.4085083007812 + ], + "size": [ + 315, + 314 + ], + "flags": {}, + "order": 1, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 86 + ], + "slot_index": 0 + }, + { + "name": "MASK", + "type": "MASK", + "links": null + } + ], + "properties": { + "Node name for S&R": "LoadImage" + }, + "widgets_values": [ + "Mona-Lisa-oil-wood-panel-Leonardo-da.webp", + "image" + ] + }, + { + "id": 64, + "type": "VAEEncode", + "pos": [ + -1336.7884521484375, + -492.5806884765625 + ], + "size": [ + 210, + 46 + ], + "flags": {}, + "order": 14, + "mode": 0, + "inputs": [ + { + "name": "pixels", + "type": "IMAGE", + "link": 144 + }, + { + "name": "vae", + "type": "VAE", + "link": 88 + } + ], + "outputs": [ + { + "name": "LATENT", + "type": "LATENT", + "links": [ + 137 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "VAEEncode" + }, + "widgets_values": [] + }, + { + "id": 44, + "type": "UNETLoader", + "pos": [ + -2373.55029296875, + -193.91510009765625 + ], + "size": [ + 459.56060791015625, + 82 + ], + "flags": {}, + "order": 2, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "links": [ + 135 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "UNETLoader" + }, + "widgets_values": [ + "hyvideo\\hunyuan_video_720_fp8_e4m3fn.safetensors", + "fp8_e4m3fn_fast" + ] + }, + { + "id": 49, + "type": "VAELoader", + "pos": [ + -1876.39306640625, + -35.19633865356445 + ], + "size": [ + 433.7603454589844, + 58.71116256713867 + ], + "flags": {}, + "order": 3, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "VAE", + "type": "VAE", + "links": [ + 74, + 88 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "VAELoader" + }, + "widgets_values": [ + "hyvid\\hunyuan_video_vae_bf16.safetensors" + ] + }, + { + "id": 47, + "type": "DualCLIPLoader", + "pos": [ + -2284.893798828125, + 150.4042205810547 + ], + "size": [ + 343.3958435058594, + 106.86042785644531 + ], + "flags": {}, + "order": 4, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "CLIP", + "type": "CLIP", + "links": [ + 56 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "DualCLIPLoader" + }, + "widgets_values": [ + "clip_l.safetensors", + "llava_llama3_fp16.safetensors", + "hunyuan_video", + "default" + ] + }, + { + "id": 45, + "type": "CLIPTextEncode", + "pos": [ + -1839.1649169921875, + 143.5203094482422 + ], + "size": [ + 400, + 200 + ], + "flags": {}, + "order": 8, + "mode": 0, + "inputs": [ + { + "name": "clip", + "type": "CLIP", + "link": 56 + } + ], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [ + 69, + 82 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "CLIPTextEncode" + }, + "widgets_values": [ + "woman puts on sunglasses" + ] + }, + { + "id": 53, + "type": "EmptyHunyuanLatentVideo", + "pos": [ + -1120, + 90 + ], + "size": [ + 315, + 130 + ], + "flags": {}, + "order": 10, + "mode": 0, + "inputs": [ + { + "name": "width", + "type": "INT", + "link": 89, + "widget": { + "name": "width" + } + }, + { + "name": "height", + "type": "INT", + "link": 90, + "widget": { + "name": "height" + } + } + ], + "outputs": [ + { + "name": "LATENT", + "type": "LATENT", + "links": [ + 119 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "EmptyHunyuanLatentVideo" + }, + "widgets_values": [ + 960, + 544, + 65, + 1 + ] + }, + { + "id": 55, + "type": "ConditioningZeroOut", + "pos": [ + -910, + 300 + ], + "size": [ + 251.14309692382812, + 26 + ], + "flags": { + "collapsed": true + }, + "order": 12, + "mode": 0, + "inputs": [ + { + "name": "conditioning", + "type": "CONDITIONING", + "link": 69 + } + ], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [ + 70 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "ConditioningZeroOut" + }, + "widgets_values": [] + }, + { + "id": 52, + "type": "BasicScheduler", + "pos": [ + -600, + -350 + ], + "size": [ + 315, + 106 + ], + "flags": {}, + "order": 17, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 78 + } + ], + "outputs": [ + { + "name": "SIGMAS", + "type": "SIGMAS", + "links": [ + 62 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "BasicScheduler" + }, + "widgets_values": [ + "simple", + 20, + 1 + ] + }, + { + "id": 42, + "type": "SamplerCustom", + "pos": [ + -640, + 10 + ], + "size": [ + 355.20001220703125, + 467.4666748046875 + ], + "flags": {}, + "order": 18, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 77 + }, + { + "name": "positive", + "type": "CONDITIONING", + "link": 83 + }, + { + "name": "negative", + "type": "CONDITIONING", + "link": 70 + }, + { + "name": "sampler", + "type": "SAMPLER", + "link": 61 + }, + { + "name": "sigmas", + "type": "SIGMAS", + "link": 62 + }, + { + "name": "latent_image", + "type": "LATENT", + "link": 119 + } + ], + "outputs": [ + { + "name": "output", + "type": "LATENT", + "links": null + }, + { + "name": "denoised_output", + "type": "LATENT", + "links": [ + 141 + ], + "slot_index": 1 + } + ], + "properties": { + "Node name for S&R": "SamplerCustom" + }, + "widgets_values": [ + true, + 6, + "fixed", + 1, + null + ] + }, + { + "id": 84, + "type": "GetLatentRangeFromBatch", + "pos": [ + -240, + -100 + ], + "size": [ + 340.20001220703125, + 82 + ], + "flags": {}, + "order": 19, + "mode": 0, + "inputs": [ + { + "name": "latents", + "type": "LATENT", + "link": 141 + } + ], + "outputs": [ + { + "name": "LATENT", + "type": "LATENT", + "links": [ + 142 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "GetLatentRangeFromBatch" + }, + "widgets_values": [ + 1, + -1 + ] + }, + { + "id": 50, + "type": "VHS_VideoCombine", + "pos": [ + 165.77645874023438, + -619.0606079101562 + ], + "size": [ + 1112.6898193359375, + 1076.4598388671875 + ], + "flags": {}, + "order": 21, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 105 + }, + { + "name": "audio", + "type": "AUDIO", + "link": null, + "shape": 7 + }, + { + "name": "meta_batch", + "type": "VHS_BatchManager", + "link": null, + "shape": 7 + }, + { + "name": "vae", + "type": "VAE", + "link": null, + "shape": 7 + } + ], + "outputs": [ + { + "name": "Filenames", + "type": "VHS_FILENAMES", + "links": null + } + ], + "properties": { + "Node name for S&R": "VHS_VideoCombine" + }, + "widgets_values": { + "frame_rate": 24, + "loop_count": 0, + "filename_prefix": "hyvidcomfy", + "format": "video/h264-mp4", + "pix_fmt": "yuv420p", + "crf": 19, + "save_metadata": true, + "trim_to_audio": false, + "pingpong": false, + "save_output": false, + "videopreview": { + "hidden": false, + "paused": false, + "params": { + "filename": "hyvidcomfy_00001.mp4", + "subfolder": "", + "type": "temp", + "format": "video/h264-mp4", + "frame_rate": 24, + "workflow": "hyvidcomfy_00001.png", + "fullpath": "N:\\AI\\ComfyUI\\temp\\hyvidcomfy_00001.mp4" + }, + "muted": false + } + } + }, + { + "id": 54, + "type": "ModelSamplingSD3", + "pos": [ + -1079.9112548828125, + -146.69448852539062 + ], + "size": [ + 315, + 58 + ], + "flags": {}, + "order": 16, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 117 + } + ], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "links": [ + 77, + 78 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "ModelSamplingSD3" + }, + "widgets_values": [ + 9 + ] + }, + { + "id": 80, + "type": "PathchSageAttentionKJ", + "pos": [ + -2273.926513671875, + -36.720542907714844 + ], + "size": [ + 315, + 58 + ], + "flags": {}, + "order": 7, + "mode": 4, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 135 + } + ], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "links": [ + 136 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "PathchSageAttentionKJ" + }, + "widgets_values": [ + "auto" + ] + }, + { + "id": 85, + "type": "Note", + "pos": [ + -1838.572265625, + -302.1575927734375 + ], + "size": [ + 408.4594421386719, + 58 + ], + "flags": {}, + "order": 5, + "mode": 0, + "inputs": [], + "outputs": [], + "properties": {}, + "widgets_values": [ + "https://huggingface.co/Kijai/Leapfusion-image2vid-comfy/blob/main/leapfusion_img2vid544p_comfy.safetensors" + ], + "color": "#432", + "bgcolor": "#653" + }, + { + "id": 74, + "type": "LeapfusionHunyuanI2VPatcher", + "pos": [ + -1059.552978515625, + -459.34674072265625 + ], + "size": [ + 277.3238525390625, + 150 + ], + "flags": {}, + "order": 15, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 123 + }, + { + "name": "latent", + "type": "LATENT", + "link": 137 + } + ], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "links": [ + 117 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "LeapfusionHunyuanI2VPatcher" + }, + "widgets_values": [ + 0, + 0, + 1, + 0.8 + ] + }, + { + "id": 59, + "type": "LoraLoaderModelOnly", + "pos": [ + -1870.3748779296875, + -194.6091766357422 + ], + "size": [ + 442.8438720703125, + 82 + ], + "flags": {}, + "order": 11, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 136 + } + ], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "links": [ + 123 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "LoraLoaderModelOnly" + }, + "widgets_values": [ + "hyvid\\musubi-tuner\\img2vid544p.safetensors", + 1 + ] + }, + { + "id": 66, + "type": "ImageResizeKJ", + "pos": [ + -1821.1531982421875, + -632.925048828125 + ], + "size": [ + 315, + 266 + ], + "flags": {}, + "order": 6, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 86 + }, + { + "name": "get_image_size", + "type": "IMAGE", + "link": null, + "shape": 7 + }, + { + "name": "width_input", + "type": "INT", + "link": null, + "widget": { + "name": "width_input" + }, + "shape": 7 + }, + { + "name": "height_input", + "type": "INT", + "link": null, + "widget": { + "name": "height_input" + }, + "shape": 7 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 143 + ], + "slot_index": 0 + }, + { + "name": "width", + "type": "INT", + "links": [ + 89 + ], + "slot_index": 1 + }, + { + "name": "height", + "type": "INT", + "links": [ + 90 + ], + "slot_index": 2 + } + ], + "properties": { + "Node name for S&R": "ImageResizeKJ" + }, + "widgets_values": [ + 960, + 640, + "lanczos", + false, + 2, + 0, + 0, + "center" + ] + }, + { + "id": 86, + "type": "ImageNoiseAugmentation", + "pos": [ + -1361.111572265625, + -667.0104370117188 + ], + "size": [ + 315, + 106 + ], + "flags": {}, + "order": 9, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 143 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 144 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "ImageNoiseAugmentation" + }, + "widgets_values": [ + 0.05, + 123, + "fixed" + ] + } + ], + "links": [ + [ + 56, + 47, + 0, + 45, + 0, + "CLIP" + ], + [ + 61, + 51, + 0, + 42, + 3, + "SAMPLER" + ], + [ + 62, + 52, + 0, + 42, + 4, + "SIGMAS" + ], + [ + 69, + 45, + 0, + 55, + 0, + "CONDITIONING" + ], + [ + 70, + 55, + 0, + 42, + 2, + "CONDITIONING" + ], + [ + 74, + 49, + 0, + 57, + 1, + "VAE" + ], + [ + 77, + 54, + 0, + 42, + 0, + "MODEL" + ], + [ + 78, + 54, + 0, + 52, + 0, + "MODEL" + ], + [ + 82, + 45, + 0, + 62, + 0, + "CONDITIONING" + ], + [ + 83, + 62, + 0, + 42, + 1, + "CONDITIONING" + ], + [ + 86, + 65, + 0, + 66, + 0, + "IMAGE" + ], + [ + 88, + 49, + 0, + 64, + 1, + "VAE" + ], + [ + 89, + 66, + 1, + 53, + 0, + "INT" + ], + [ + 90, + 66, + 2, + 53, + 1, + "INT" + ], + [ + 105, + 57, + 0, + 50, + 0, + "IMAGE" + ], + [ + 117, + 74, + 0, + 54, + 0, + "MODEL" + ], + [ + 119, + 53, + 0, + 42, + 5, + "LATENT" + ], + [ + 123, + 59, + 0, + 74, + 0, + "MODEL" + ], + [ + 135, + 44, + 0, + 80, + 0, + "MODEL" + ], + [ + 136, + 80, + 0, + 59, + 0, + "MODEL" + ], + [ + 137, + 64, + 0, + 74, + 1, + "LATENT" + ], + [ + 141, + 42, + 1, + 84, + 0, + "LATENT" + ], + [ + 142, + 84, + 0, + 57, + 0, + "LATENT" + ], + [ + 143, + 66, + 0, + 86, + 0, + "IMAGE" + ], + [ + 144, + 86, + 0, + 64, + 0, + "IMAGE" + ] + ], + "groups": [], + "config": {}, + "extra": { + "ds": { + "scale": 0.740024994425854, + "offset": [ + 2525.036093151529, + 802.59123935694 + ] + }, + "node_versions": { + "comfy-core": "0.3.13", + "ComfyUI-KJNodes": "a8aeef670b3f288303f956bf94385cb87978ea93", + "ComfyUI-VideoHelperSuite": "c47b10ca1798b4925ff5a5f07d80c51ca80a837d" + }, + "VHS_latentpreview": true, + "VHS_latentpreviewrate": 0 + }, + "version": 0.4 +} \ No newline at end of file diff --git a/ComfyUI-KJNodes/intrinsic_loras/intrinsic_loras.txt b/ComfyUI-KJNodes/intrinsic_loras/intrinsic_loras.txt new file mode 100644 index 0000000000000000000000000000000000000000..11572bb08c5c0701f20a2a8eadfcbce17d045488 --- /dev/null +++ b/ComfyUI-KJNodes/intrinsic_loras/intrinsic_loras.txt @@ -0,0 +1,4 @@ +source for the loras: +https://github.com/duxiaodan/intrinsic-lora + +Renamed and conveted to .safetensors \ No newline at end of file diff --git a/ComfyUI-KJNodes/kjweb_async/marked.min.js b/ComfyUI-KJNodes/kjweb_async/marked.min.js new file mode 100644 index 0000000000000000000000000000000000000000..ba7976efddaa97edaf2a7600e851308b747cfd83 --- /dev/null +++ b/ComfyUI-KJNodes/kjweb_async/marked.min.js @@ -0,0 +1,6 @@ +/** + * marked v12.0.1 - a markdown parser + * Copyright (c) 2011-2024, Christopher Jeffrey. (MIT Licensed) + * https://github.com/markedjs/marked + */ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).marked={})}(this,(function(e){"use strict";function t(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}}function n(t){e.defaults=t}e.defaults={async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null};const s=/[&<>"']/,r=new RegExp(s.source,"g"),i=/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/,l=new RegExp(i.source,"g"),o={"&":"&","<":"<",">":">",'"':""","'":"'"},a=e=>o[e];function c(e,t){if(t){if(s.test(e))return e.replace(r,a)}else if(i.test(e))return e.replace(l,a);return e}const h=/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/gi;function p(e){return e.replace(h,((e,t)=>"colon"===(t=t.toLowerCase())?":":"#"===t.charAt(0)?"x"===t.charAt(1)?String.fromCharCode(parseInt(t.substring(2),16)):String.fromCharCode(+t.substring(1)):""))}const u=/(^|[^\[])\^/g;function k(e,t){let n="string"==typeof e?e:e.source;t=t||"";const s={replace:(e,t)=>{let r="string"==typeof t?t:t.source;return r=r.replace(u,"$1"),n=n.replace(e,r),s},getRegex:()=>new RegExp(n,t)};return s}function g(e){try{e=encodeURI(e).replace(/%25/g,"%")}catch(e){return null}return e}const f={exec:()=>null};function d(e,t){const n=e.replace(/\|/g,((e,t,n)=>{let s=!1,r=t;for(;--r>=0&&"\\"===n[r];)s=!s;return s?"|":" |"})).split(/ \|/);let s=0;if(n[0].trim()||n.shift(),n.length>0&&!n[n.length-1].trim()&&n.pop(),t)if(n.length>t)n.splice(t);else for(;n.length0)return{type:"space",raw:t[0]}}code(e){const t=this.rules.block.code.exec(e);if(t){const e=t[0].replace(/^ {1,4}/gm,"");return{type:"code",raw:t[0],codeBlockStyle:"indented",text:this.options.pedantic?e:x(e,"\n")}}}fences(e){const t=this.rules.block.fences.exec(e);if(t){const e=t[0],n=function(e,t){const n=e.match(/^(\s+)(?:```)/);if(null===n)return t;const s=n[1];return t.split("\n").map((e=>{const t=e.match(/^\s+/);if(null===t)return e;const[n]=t;return n.length>=s.length?e.slice(s.length):e})).join("\n")}(e,t[3]||"");return{type:"code",raw:e,lang:t[2]?t[2].trim().replace(this.rules.inline.anyPunctuation,"$1"):t[2],text:n}}}heading(e){const t=this.rules.block.heading.exec(e);if(t){let e=t[2].trim();if(/#$/.test(e)){const t=x(e,"#");this.options.pedantic?e=t.trim():t&&!/ $/.test(t)||(e=t.trim())}return{type:"heading",raw:t[0],depth:t[1].length,text:e,tokens:this.lexer.inline(e)}}}hr(e){const t=this.rules.block.hr.exec(e);if(t)return{type:"hr",raw:t[0]}}blockquote(e){const t=this.rules.block.blockquote.exec(e);if(t){const e=x(t[0].replace(/^ *>[ \t]?/gm,""),"\n"),n=this.lexer.state.top;this.lexer.state.top=!0;const s=this.lexer.blockTokens(e);return this.lexer.state.top=n,{type:"blockquote",raw:t[0],tokens:s,text:e}}}list(e){let t=this.rules.block.list.exec(e);if(t){let n=t[1].trim();const s=n.length>1,r={type:"list",raw:"",ordered:s,start:s?+n.slice(0,-1):"",loose:!1,items:[]};n=s?`\\d{1,9}\\${n.slice(-1)}`:`\\${n}`,this.options.pedantic&&(n=s?n:"[*+-]");const i=new RegExp(`^( {0,3}${n})((?:[\t ][^\\n]*)?(?:\\n|$))`);let l="",o="",a=!1;for(;e;){let n=!1;if(!(t=i.exec(e)))break;if(this.rules.block.hr.test(e))break;l=t[0],e=e.substring(l.length);let s=t[2].split("\n",1)[0].replace(/^\t+/,(e=>" ".repeat(3*e.length))),c=e.split("\n",1)[0],h=0;this.options.pedantic?(h=2,o=s.trimStart()):(h=t[2].search(/[^ ]/),h=h>4?1:h,o=s.slice(h),h+=t[1].length);let p=!1;if(!s&&/^ *$/.test(c)&&(l+=c+"\n",e=e.substring(c.length+1),n=!0),!n){const t=new RegExp(`^ {0,${Math.min(3,h-1)}}(?:[*+-]|\\d{1,9}[.)])((?:[ \t][^\\n]*)?(?:\\n|$))`),n=new RegExp(`^ {0,${Math.min(3,h-1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)`),r=new RegExp(`^ {0,${Math.min(3,h-1)}}(?:\`\`\`|~~~)`),i=new RegExp(`^ {0,${Math.min(3,h-1)}}#`);for(;e;){const a=e.split("\n",1)[0];if(c=a,this.options.pedantic&&(c=c.replace(/^ {1,4}(?=( {4})*[^ ])/g," ")),r.test(c))break;if(i.test(c))break;if(t.test(c))break;if(n.test(e))break;if(c.search(/[^ ]/)>=h||!c.trim())o+="\n"+c.slice(h);else{if(p)break;if(s.search(/[^ ]/)>=4)break;if(r.test(s))break;if(i.test(s))break;if(n.test(s))break;o+="\n"+c}p||c.trim()||(p=!0),l+=a+"\n",e=e.substring(a.length+1),s=c.slice(h)}}r.loose||(a?r.loose=!0:/\n *\n *$/.test(l)&&(a=!0));let u,k=null;this.options.gfm&&(k=/^\[[ xX]\] /.exec(o),k&&(u="[ ] "!==k[0],o=o.replace(/^\[[ xX]\] +/,""))),r.items.push({type:"list_item",raw:l,task:!!k,checked:u,loose:!1,text:o,tokens:[]}),r.raw+=l}r.items[r.items.length-1].raw=l.trimEnd(),r.items[r.items.length-1].text=o.trimEnd(),r.raw=r.raw.trimEnd();for(let e=0;e"space"===e.type)),n=t.length>0&&t.some((e=>/\n.*\n/.test(e.raw)));r.loose=n}if(r.loose)for(let e=0;e$/,"$1").replace(this.rules.inline.anyPunctuation,"$1"):"",s=t[3]?t[3].substring(1,t[3].length-1).replace(this.rules.inline.anyPunctuation,"$1"):t[3];return{type:"def",tag:e,raw:t[0],href:n,title:s}}}table(e){const t=this.rules.block.table.exec(e);if(!t)return;if(!/[:|]/.test(t[2]))return;const n=d(t[1]),s=t[2].replace(/^\||\| *$/g,"").split("|"),r=t[3]&&t[3].trim()?t[3].replace(/\n[ \t]*$/,"").split("\n"):[],i={type:"table",raw:t[0],header:[],align:[],rows:[]};if(n.length===s.length){for(const e of s)/^ *-+: *$/.test(e)?i.align.push("right"):/^ *:-+: *$/.test(e)?i.align.push("center"):/^ *:-+ *$/.test(e)?i.align.push("left"):i.align.push(null);for(const e of n)i.header.push({text:e,tokens:this.lexer.inline(e)});for(const e of r)i.rows.push(d(e,i.header.length).map((e=>({text:e,tokens:this.lexer.inline(e)}))));return i}}lheading(e){const t=this.rules.block.lheading.exec(e);if(t)return{type:"heading",raw:t[0],depth:"="===t[2].charAt(0)?1:2,text:t[1],tokens:this.lexer.inline(t[1])}}paragraph(e){const t=this.rules.block.paragraph.exec(e);if(t){const e="\n"===t[1].charAt(t[1].length-1)?t[1].slice(0,-1):t[1];return{type:"paragraph",raw:t[0],text:e,tokens:this.lexer.inline(e)}}}text(e){const t=this.rules.block.text.exec(e);if(t)return{type:"text",raw:t[0],text:t[0],tokens:this.lexer.inline(t[0])}}escape(e){const t=this.rules.inline.escape.exec(e);if(t)return{type:"escape",raw:t[0],text:c(t[1])}}tag(e){const t=this.rules.inline.tag.exec(e);if(t)return!this.lexer.state.inLink&&/^/i.test(t[0])&&(this.lexer.state.inLink=!1),!this.lexer.state.inRawBlock&&/^<(pre|code|kbd|script)(\s|>)/i.test(t[0])?this.lexer.state.inRawBlock=!0:this.lexer.state.inRawBlock&&/^<\/(pre|code|kbd|script)(\s|>)/i.test(t[0])&&(this.lexer.state.inRawBlock=!1),{type:"html",raw:t[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,block:!1,text:t[0]}}link(e){const t=this.rules.inline.link.exec(e);if(t){const e=t[2].trim();if(!this.options.pedantic&&/^$/.test(e))return;const t=x(e.slice(0,-1),"\\");if((e.length-t.length)%2==0)return}else{const e=function(e,t){if(-1===e.indexOf(t[1]))return-1;let n=0;for(let s=0;s-1){const n=(0===t[0].indexOf("!")?5:4)+t[1].length+e;t[2]=t[2].substring(0,e),t[0]=t[0].substring(0,n).trim(),t[3]=""}}let n=t[2],s="";if(this.options.pedantic){const e=/^([^'"]*[^\s])\s+(['"])(.*)\2/.exec(n);e&&(n=e[1],s=e[3])}else s=t[3]?t[3].slice(1,-1):"";return n=n.trim(),/^$/.test(e)?n.slice(1):n.slice(1,-1)),b(t,{href:n?n.replace(this.rules.inline.anyPunctuation,"$1"):n,title:s?s.replace(this.rules.inline.anyPunctuation,"$1"):s},t[0],this.lexer)}}reflink(e,t){let n;if((n=this.rules.inline.reflink.exec(e))||(n=this.rules.inline.nolink.exec(e))){const e=t[(n[2]||n[1]).replace(/\s+/g," ").toLowerCase()];if(!e){const e=n[0].charAt(0);return{type:"text",raw:e,text:e}}return b(n,e,n[0],this.lexer)}}emStrong(e,t,n=""){let s=this.rules.inline.emStrongLDelim.exec(e);if(!s)return;if(s[3]&&n.match(/[\p{L}\p{N}]/u))return;if(!(s[1]||s[2]||"")||!n||this.rules.inline.punctuation.exec(n)){const n=[...s[0]].length-1;let r,i,l=n,o=0;const a="*"===s[0][0]?this.rules.inline.emStrongRDelimAst:this.rules.inline.emStrongRDelimUnd;for(a.lastIndex=0,t=t.slice(-1*e.length+n);null!=(s=a.exec(t));){if(r=s[1]||s[2]||s[3]||s[4]||s[5]||s[6],!r)continue;if(i=[...r].length,s[3]||s[4]){l+=i;continue}if((s[5]||s[6])&&n%3&&!((n+i)%3)){o+=i;continue}if(l-=i,l>0)continue;i=Math.min(i,i+l+o);const t=[...s[0]][0].length,a=e.slice(0,n+s.index+t+i);if(Math.min(n,i)%2){const e=a.slice(1,-1);return{type:"em",raw:a,text:e,tokens:this.lexer.inlineTokens(e)}}const c=a.slice(2,-2);return{type:"strong",raw:a,text:c,tokens:this.lexer.inlineTokens(c)}}}}codespan(e){const t=this.rules.inline.code.exec(e);if(t){let e=t[2].replace(/\n/g," ");const n=/[^ ]/.test(e),s=/^ /.test(e)&&/ $/.test(e);return n&&s&&(e=e.substring(1,e.length-1)),e=c(e,!0),{type:"codespan",raw:t[0],text:e}}}br(e){const t=this.rules.inline.br.exec(e);if(t)return{type:"br",raw:t[0]}}del(e){const t=this.rules.inline.del.exec(e);if(t)return{type:"del",raw:t[0],text:t[2],tokens:this.lexer.inlineTokens(t[2])}}autolink(e){const t=this.rules.inline.autolink.exec(e);if(t){let e,n;return"@"===t[2]?(e=c(t[1]),n="mailto:"+e):(e=c(t[1]),n=e),{type:"link",raw:t[0],text:e,href:n,tokens:[{type:"text",raw:e,text:e}]}}}url(e){let t;if(t=this.rules.inline.url.exec(e)){let e,n;if("@"===t[2])e=c(t[0]),n="mailto:"+e;else{let s;do{s=t[0],t[0]=this.rules.inline._backpedal.exec(t[0])?.[0]??""}while(s!==t[0]);e=c(t[0]),n="www."===t[1]?"http://"+t[0]:t[0]}return{type:"link",raw:t[0],text:e,href:n,tokens:[{type:"text",raw:e,text:e}]}}}inlineText(e){const t=this.rules.inline.text.exec(e);if(t){let e;return e=this.lexer.state.inRawBlock?t[0]:c(t[0]),{type:"text",raw:t[0],text:e}}}}const m=/^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/,y=/(?:[*+-]|\d{1,9}[.)])/,$=k(/^(?!bull |blockCode|fences|blockquote|heading|html)((?:.|\n(?!\s*?\n|bull |blockCode|fences|blockquote|heading|html))+?)\n {0,3}(=+|-+) *(?:\n+|$)/).replace(/bull/g,y).replace(/blockCode/g,/ {4}/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).getRegex(),z=/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/,T=/(?!\s*\])(?:\\.|[^\[\]\\])+/,R=k(/^ {0,3}\[(label)\]: *(?:\n *)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n *)?| *\n *)(title))? *(?:\n+|$)/).replace("label",T).replace("title",/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/).getRegex(),_=k(/^( {0,3}bull)([ \t][^\n]+?)?(?:\n|$)/).replace(/bull/g,y).getRegex(),A="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",S=/|$))/,I=k("^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|\\n*|$)|\\n*|$)|)[\\s\\S]*?(?:(?:\\n *)+\\n|$)|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n *)+\\n|$)|(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n *)+\\n|$))","i").replace("comment",S).replace("tag",A).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),E=k(z).replace("hr",m).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("|table","").replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",A).getRegex(),q={blockquote:k(/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/).replace("paragraph",E).getRegex(),code:/^( {4}[^\n]+(?:\n(?: *(?:\n|$))*)?)+/,def:R,fences:/^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}\1[~`]* *(?=\n|$)|$)/,heading:/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,hr:m,html:I,lheading:$,list:_,newline:/^(?: *(?:\n|$))+/,paragraph:E,table:f,text:/^[^\n]+/},Z=k("^ *([^\\n ].*)\\n {0,3}((?:\\| *)?:?-+:? *(?:\\| *:?-+:? *)*(?:\\| *)?)(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)").replace("hr",m).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("blockquote"," {0,3}>").replace("code"," {4}[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",A).getRegex(),L={...q,table:Z,paragraph:k(z).replace("hr",m).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("table",Z).replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",A).getRegex()},P={...q,html:k("^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+? *(?:\\n{2,}|\\s*$)|\\s]*)*?/?> *(?:\\n{2,}|\\s*$))").replace("comment",S).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),def:/^ *\[([^\]]+)\]: *]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^(#{1,6})(.*)(?:\n+|$)/,fences:f,lheading:/^(.+?)\n {0,3}(=+|-+) *(?:\n+|$)/,paragraph:k(z).replace("hr",m).replace("heading"," *#{1,6} *[^\n]").replace("lheading",$).replace("|table","").replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").replace("|tag","").getRegex()},Q=/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,v=/^( {2,}|\\)\n(?!\s*$)/,B="\\p{P}\\p{S}",C=k(/^((?![*_])[\spunctuation])/,"u").replace(/punctuation/g,B).getRegex(),M=k(/^(?:\*+(?:((?!\*)[punct])|[^\s*]))|^_+(?:((?!_)[punct])|([^\s_]))/,"u").replace(/punct/g,B).getRegex(),O=k("^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\*)[punct](\\*+)(?=[\\s]|$)|[^punct\\s](\\*+)(?!\\*)(?=[punct\\s]|$)|(?!\\*)[punct\\s](\\*+)(?=[^punct\\s])|[\\s](\\*+)(?!\\*)(?=[punct])|(?!\\*)[punct](\\*+)(?!\\*)(?=[punct])|[^punct\\s](\\*+)(?=[^punct\\s])","gu").replace(/punct/g,B).getRegex(),D=k("^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|(?!_)[punct](_+)(?=[\\s]|$)|[^punct\\s](_+)(?!_)(?=[punct\\s]|$)|(?!_)[punct\\s](_+)(?=[^punct\\s])|[\\s](_+)(?!_)(?=[punct])|(?!_)[punct](_+)(?!_)(?=[punct])","gu").replace(/punct/g,B).getRegex(),j=k(/\\([punct])/,"gu").replace(/punct/g,B).getRegex(),H=k(/^<(scheme:[^\s\x00-\x1f<>]*|email)>/).replace("scheme",/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace("email",/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/).getRegex(),U=k(S).replace("(?:--\x3e|$)","--\x3e").getRegex(),X=k("^comment|^|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^|^").replace("comment",U).replace("attribute",/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/).getRegex(),F=/(?:\[(?:\\.|[^\[\]\\])*\]|\\.|`[^`]*`|[^\[\]\\`])*?/,N=k(/^!?\[(label)\]\(\s*(href)(?:\s+(title))?\s*\)/).replace("label",F).replace("href",/<(?:\\.|[^\n<>\\])+>|[^\s\x00-\x1f]*/).replace("title",/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/).getRegex(),G=k(/^!?\[(label)\]\[(ref)\]/).replace("label",F).replace("ref",T).getRegex(),J=k(/^!?\[(ref)\](?:\[\])?/).replace("ref",T).getRegex(),K={_backpedal:f,anyPunctuation:j,autolink:H,blockSkip:/\[[^[\]]*?\]\([^\(\)]*?\)|`[^`]*?`|<[^<>]*?>/g,br:v,code:/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,del:f,emStrongLDelim:M,emStrongRDelimAst:O,emStrongRDelimUnd:D,escape:Q,link:N,nolink:J,punctuation:C,reflink:G,reflinkSearch:k("reflink|nolink(?!\\()","g").replace("reflink",G).replace("nolink",J).getRegex(),tag:X,text:/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\t+" ".repeat(n.length)));e;)if(!(this.options.extensions&&this.options.extensions.block&&this.options.extensions.block.some((s=>!!(n=s.call({lexer:this},e,t))&&(e=e.substring(n.raw.length),t.push(n),!0)))))if(n=this.tokenizer.space(e))e=e.substring(n.raw.length),1===n.raw.length&&t.length>0?t[t.length-1].raw+="\n":t.push(n);else if(n=this.tokenizer.code(e))e=e.substring(n.raw.length),s=t[t.length-1],!s||"paragraph"!==s.type&&"text"!==s.type?t.push(n):(s.raw+="\n"+n.raw,s.text+="\n"+n.text,this.inlineQueue[this.inlineQueue.length-1].src=s.text);else if(n=this.tokenizer.fences(e))e=e.substring(n.raw.length),t.push(n);else if(n=this.tokenizer.heading(e))e=e.substring(n.raw.length),t.push(n);else if(n=this.tokenizer.hr(e))e=e.substring(n.raw.length),t.push(n);else if(n=this.tokenizer.blockquote(e))e=e.substring(n.raw.length),t.push(n);else if(n=this.tokenizer.list(e))e=e.substring(n.raw.length),t.push(n);else if(n=this.tokenizer.html(e))e=e.substring(n.raw.length),t.push(n);else if(n=this.tokenizer.def(e))e=e.substring(n.raw.length),s=t[t.length-1],!s||"paragraph"!==s.type&&"text"!==s.type?this.tokens.links[n.tag]||(this.tokens.links[n.tag]={href:n.href,title:n.title}):(s.raw+="\n"+n.raw,s.text+="\n"+n.raw,this.inlineQueue[this.inlineQueue.length-1].src=s.text);else if(n=this.tokenizer.table(e))e=e.substring(n.raw.length),t.push(n);else if(n=this.tokenizer.lheading(e))e=e.substring(n.raw.length),t.push(n);else{if(r=e,this.options.extensions&&this.options.extensions.startBlock){let t=1/0;const n=e.slice(1);let s;this.options.extensions.startBlock.forEach((e=>{s=e.call({lexer:this},n),"number"==typeof s&&s>=0&&(t=Math.min(t,s))})),t<1/0&&t>=0&&(r=e.substring(0,t+1))}if(this.state.top&&(n=this.tokenizer.paragraph(r)))s=t[t.length-1],i&&"paragraph"===s.type?(s.raw+="\n"+n.raw,s.text+="\n"+n.text,this.inlineQueue.pop(),this.inlineQueue[this.inlineQueue.length-1].src=s.text):t.push(n),i=r.length!==e.length,e=e.substring(n.raw.length);else if(n=this.tokenizer.text(e))e=e.substring(n.raw.length),s=t[t.length-1],s&&"text"===s.type?(s.raw+="\n"+n.raw,s.text+="\n"+n.text,this.inlineQueue.pop(),this.inlineQueue[this.inlineQueue.length-1].src=s.text):t.push(n);else if(e){const t="Infinite loop on byte: "+e.charCodeAt(0);if(this.options.silent){console.error(t);break}throw new Error(t)}}return this.state.top=!0,t}inline(e,t=[]){return this.inlineQueue.push({src:e,tokens:t}),t}inlineTokens(e,t=[]){let n,s,r,i,l,o,a=e;if(this.tokens.links){const e=Object.keys(this.tokens.links);if(e.length>0)for(;null!=(i=this.tokenizer.rules.inline.reflinkSearch.exec(a));)e.includes(i[0].slice(i[0].lastIndexOf("[")+1,-1))&&(a=a.slice(0,i.index)+"["+"a".repeat(i[0].length-2)+"]"+a.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;null!=(i=this.tokenizer.rules.inline.blockSkip.exec(a));)a=a.slice(0,i.index)+"["+"a".repeat(i[0].length-2)+"]"+a.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);for(;null!=(i=this.tokenizer.rules.inline.anyPunctuation.exec(a));)a=a.slice(0,i.index)+"++"+a.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);for(;e;)if(l||(o=""),l=!1,!(this.options.extensions&&this.options.extensions.inline&&this.options.extensions.inline.some((s=>!!(n=s.call({lexer:this},e,t))&&(e=e.substring(n.raw.length),t.push(n),!0)))))if(n=this.tokenizer.escape(e))e=e.substring(n.raw.length),t.push(n);else if(n=this.tokenizer.tag(e))e=e.substring(n.raw.length),s=t[t.length-1],s&&"text"===n.type&&"text"===s.type?(s.raw+=n.raw,s.text+=n.text):t.push(n);else if(n=this.tokenizer.link(e))e=e.substring(n.raw.length),t.push(n);else if(n=this.tokenizer.reflink(e,this.tokens.links))e=e.substring(n.raw.length),s=t[t.length-1],s&&"text"===n.type&&"text"===s.type?(s.raw+=n.raw,s.text+=n.text):t.push(n);else if(n=this.tokenizer.emStrong(e,a,o))e=e.substring(n.raw.length),t.push(n);else if(n=this.tokenizer.codespan(e))e=e.substring(n.raw.length),t.push(n);else if(n=this.tokenizer.br(e))e=e.substring(n.raw.length),t.push(n);else if(n=this.tokenizer.del(e))e=e.substring(n.raw.length),t.push(n);else if(n=this.tokenizer.autolink(e))e=e.substring(n.raw.length),t.push(n);else if(this.state.inLink||!(n=this.tokenizer.url(e))){if(r=e,this.options.extensions&&this.options.extensions.startInline){let t=1/0;const n=e.slice(1);let s;this.options.extensions.startInline.forEach((e=>{s=e.call({lexer:this},n),"number"==typeof s&&s>=0&&(t=Math.min(t,s))})),t<1/0&&t>=0&&(r=e.substring(0,t+1))}if(n=this.tokenizer.inlineText(r))e=e.substring(n.raw.length),"_"!==n.raw.slice(-1)&&(o=n.raw.slice(-1)),l=!0,s=t[t.length-1],s&&"text"===s.type?(s.raw+=n.raw,s.text+=n.text):t.push(n);else if(e){const t="Infinite loop on byte: "+e.charCodeAt(0);if(this.options.silent){console.error(t);break}throw new Error(t)}}else e=e.substring(n.raw.length),t.push(n);return t}}class se{options;constructor(t){this.options=t||e.defaults}code(e,t,n){const s=(t||"").match(/^\S*/)?.[0];return e=e.replace(/\n$/,"")+"\n",s?'
'+(n?e:c(e,!0))+"
\n":"
"+(n?e:c(e,!0))+"
\n"}blockquote(e){return`
\n${e}
\n`}html(e,t){return e}heading(e,t,n){return`${e}\n`}hr(){return"
\n"}list(e,t,n){const s=t?"ol":"ul";return"<"+s+(t&&1!==n?' start="'+n+'"':"")+">\n"+e+"\n"}listitem(e,t,n){return`
  • ${e}
  • \n`}checkbox(e){return"'}paragraph(e){return`

    ${e}

    \n`}table(e,t){return t&&(t=`${t}`),"\n\n"+e+"\n"+t+"
    \n"}tablerow(e){return`\n${e}\n`}tablecell(e,t){const n=t.header?"th":"td";return(t.align?`<${n} align="${t.align}">`:`<${n}>`)+e+`\n`}strong(e){return`${e}`}em(e){return`${e}`}codespan(e){return`${e}`}br(){return"
    "}del(e){return`${e}`}link(e,t,n){const s=g(e);if(null===s)return n;let r='
    ",r}image(e,t,n){const s=g(e);if(null===s)return n;let r=`${n}0&&"paragraph"===n.tokens[0].type?(n.tokens[0].text=e+" "+n.tokens[0].text,n.tokens[0].tokens&&n.tokens[0].tokens.length>0&&"text"===n.tokens[0].tokens[0].type&&(n.tokens[0].tokens[0].text=e+" "+n.tokens[0].tokens[0].text)):n.tokens.unshift({type:"text",text:e+" "}):o+=e+" "}o+=this.parse(n.tokens,i),l+=this.renderer.listitem(o,r,!!s)}n+=this.renderer.list(l,t,s);continue}case"html":{const e=r;n+=this.renderer.html(e.text,e.block);continue}case"paragraph":{const e=r;n+=this.renderer.paragraph(this.parseInline(e.tokens));continue}case"text":{let i=r,l=i.tokens?this.parseInline(i.tokens):i.text;for(;s+1{const r=e[s].flat(1/0);n=n.concat(this.walkTokens(r,t))})):e.tokens&&(n=n.concat(this.walkTokens(e.tokens,t)))}}return n}use(...e){const t=this.defaults.extensions||{renderers:{},childTokens:{}};return e.forEach((e=>{const n={...e};if(n.async=this.defaults.async||n.async||!1,e.extensions&&(e.extensions.forEach((e=>{if(!e.name)throw new Error("extension name required");if("renderer"in e){const n=t.renderers[e.name];t.renderers[e.name]=n?function(...t){let s=e.renderer.apply(this,t);return!1===s&&(s=n.apply(this,t)),s}:e.renderer}if("tokenizer"in e){if(!e.level||"block"!==e.level&&"inline"!==e.level)throw new Error("extension level must be 'block' or 'inline'");const n=t[e.level];n?n.unshift(e.tokenizer):t[e.level]=[e.tokenizer],e.start&&("block"===e.level?t.startBlock?t.startBlock.push(e.start):t.startBlock=[e.start]:"inline"===e.level&&(t.startInline?t.startInline.push(e.start):t.startInline=[e.start]))}"childTokens"in e&&e.childTokens&&(t.childTokens[e.name]=e.childTokens)})),n.extensions=t),e.renderer){const t=this.defaults.renderer||new se(this.defaults);for(const n in e.renderer){if(!(n in t))throw new Error(`renderer '${n}' does not exist`);if("options"===n)continue;const s=n,r=e.renderer[s],i=t[s];t[s]=(...e)=>{let n=r.apply(t,e);return!1===n&&(n=i.apply(t,e)),n||""}}n.renderer=t}if(e.tokenizer){const t=this.defaults.tokenizer||new w(this.defaults);for(const n in e.tokenizer){if(!(n in t))throw new Error(`tokenizer '${n}' does not exist`);if(["options","rules","lexer"].includes(n))continue;const s=n,r=e.tokenizer[s],i=t[s];t[s]=(...e)=>{let n=r.apply(t,e);return!1===n&&(n=i.apply(t,e)),n}}n.tokenizer=t}if(e.hooks){const t=this.defaults.hooks||new le;for(const n in e.hooks){if(!(n in t))throw new Error(`hook '${n}' does not exist`);if("options"===n)continue;const s=n,r=e.hooks[s],i=t[s];le.passThroughHooks.has(n)?t[s]=e=>{if(this.defaults.async)return Promise.resolve(r.call(t,e)).then((e=>i.call(t,e)));const n=r.call(t,e);return i.call(t,n)}:t[s]=(...e)=>{let n=r.apply(t,e);return!1===n&&(n=i.apply(t,e)),n}}n.hooks=t}if(e.walkTokens){const t=this.defaults.walkTokens,s=e.walkTokens;n.walkTokens=function(e){let n=[];return n.push(s.call(this,e)),t&&(n=n.concat(t.call(this,e))),n}}this.defaults={...this.defaults,...n}})),this}setOptions(e){return this.defaults={...this.defaults,...e},this}lexer(e,t){return ne.lex(e,t??this.defaults)}parser(e,t){return ie.parse(e,t??this.defaults)}#e(e,t){return(n,s)=>{const r={...s},i={...this.defaults,...r};!0===this.defaults.async&&!1===r.async&&(i.silent||console.warn("marked(): The async option was set to true by an extension. The async: false option sent to parse will be ignored."),i.async=!0);const l=this.#t(!!i.silent,!!i.async);if(null==n)return l(new Error("marked(): input parameter is undefined or null"));if("string"!=typeof n)return l(new Error("marked(): input parameter is of type "+Object.prototype.toString.call(n)+", string expected"));if(i.hooks&&(i.hooks.options=i),i.async)return Promise.resolve(i.hooks?i.hooks.preprocess(n):n).then((t=>e(t,i))).then((e=>i.hooks?i.hooks.processAllTokens(e):e)).then((e=>i.walkTokens?Promise.all(this.walkTokens(e,i.walkTokens)).then((()=>e)):e)).then((e=>t(e,i))).then((e=>i.hooks?i.hooks.postprocess(e):e)).catch(l);try{i.hooks&&(n=i.hooks.preprocess(n));let s=e(n,i);i.hooks&&(s=i.hooks.processAllTokens(s)),i.walkTokens&&this.walkTokens(s,i.walkTokens);let r=t(s,i);return i.hooks&&(r=i.hooks.postprocess(r)),r}catch(e){return l(e)}}}#t(e,t){return n=>{if(n.message+="\nPlease report this to https://github.com/markedjs/marked.",e){const e="

    An error occurred:

    "+c(n.message+"",!0)+"
    ";return t?Promise.resolve(e):e}if(t)return Promise.reject(n);throw n}}}const ae=new oe;function ce(e,t){return ae.parse(e,t)}ce.options=ce.setOptions=function(e){return ae.setOptions(e),ce.defaults=ae.defaults,n(ce.defaults),ce},ce.getDefaults=t,ce.defaults=e.defaults,ce.use=function(...e){return ae.use(...e),ce.defaults=ae.defaults,n(ce.defaults),ce},ce.walkTokens=function(e,t){return ae.walkTokens(e,t)},ce.parseInline=ae.parseInline,ce.Parser=ie,ce.parser=ie.parse,ce.Renderer=se,ce.TextRenderer=re,ce.Lexer=ne,ce.lexer=ne.lex,ce.Tokenizer=w,ce.Hooks=le,ce.parse=ce;const he=ce.options,pe=ce.setOptions,ue=ce.use,ke=ce.walkTokens,ge=ce.parseInline,fe=ce,de=ie.parse,xe=ne.lex;e.Hooks=le,e.Lexer=ne,e.Marked=oe,e.Parser=ie,e.Renderer=se,e.TextRenderer=re,e.Tokenizer=w,e.getDefaults=t,e.lexer=xe,e.marked=ce,e.options=he,e.parse=fe,e.parseInline=ge,e.parser=de,e.setOptions=pe,e.use=ue,e.walkTokens=ke})); diff --git a/ComfyUI-KJNodes/kjweb_async/purify.min.js b/ComfyUI-KJNodes/kjweb_async/purify.min.js new file mode 100644 index 0000000000000000000000000000000000000000..42e7f3bdb08798be14106228c1316b2ee837d4ea --- /dev/null +++ b/ComfyUI-KJNodes/kjweb_async/purify.min.js @@ -0,0 +1,3 @@ +/*! @license DOMPurify 3.0.11 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.0.11/LICENSE */ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).DOMPurify=t()}(this,(function(){"use strict";const{entries:e,setPrototypeOf:t,isFrozen:n,getPrototypeOf:o,getOwnPropertyDescriptor:r}=Object;let{freeze:i,seal:a,create:l}=Object,{apply:c,construct:s}="undefined"!=typeof Reflect&&Reflect;i||(i=function(e){return e}),a||(a=function(e){return e}),c||(c=function(e,t,n){return e.apply(t,n)}),s||(s=function(e,t){return new e(...t)});const u=b(Array.prototype.forEach),m=b(Array.prototype.pop),p=b(Array.prototype.push),f=b(String.prototype.toLowerCase),d=b(String.prototype.toString),h=b(String.prototype.match),g=b(String.prototype.replace),T=b(String.prototype.indexOf),y=b(String.prototype.trim),E=b(Object.prototype.hasOwnProperty),A=b(RegExp.prototype.test),_=(N=TypeError,function(){for(var e=arguments.length,t=new Array(e),n=0;n1?n-1:0),r=1;r2&&void 0!==arguments[2]?arguments[2]:f;t&&t(e,null);let i=o.length;for(;i--;){let t=o[i];if("string"==typeof t){const e=r(t);e!==t&&(n(o)||(o[i]=e),t=e)}e[t]=!0}return e}function R(e){for(let t=0;t/gm),B=a(/\${[\w\W]*}/gm),W=a(/^data-[\-\w.\u00B7-\uFFFF]/),G=a(/^aria-[\-\w]+$/),Y=a(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),j=a(/^(?:\w+script|data):/i),X=a(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),q=a(/^html$/i),$=a(/^[a-z][.\w]*(-[.\w]+)+$/i);var K=Object.freeze({__proto__:null,MUSTACHE_EXPR:H,ERB_EXPR:z,TMPLIT_EXPR:B,DATA_ATTR:W,ARIA_ATTR:G,IS_ALLOWED_URI:Y,IS_SCRIPT_OR_DATA:j,ATTR_WHITESPACE:X,DOCTYPE_NAME:q,CUSTOM_ELEMENT:$});const V=function(){return"undefined"==typeof window?null:window},Z=function(e,t){if("object"!=typeof e||"function"!=typeof e.createPolicy)return null;let n=null;const o="data-tt-policy-suffix";t&&t.hasAttribute(o)&&(n=t.getAttribute(o));const r="dompurify"+(n?"#"+n:"");try{return e.createPolicy(r,{createHTML:e=>e,createScriptURL:e=>e})}catch(e){return console.warn("TrustedTypes policy "+r+" could not be created."),null}};var J=function t(){let n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:V();const o=e=>t(e);if(o.version="3.0.11",o.removed=[],!n||!n.document||9!==n.document.nodeType)return o.isSupported=!1,o;let{document:r}=n;const a=r,c=a.currentScript,{DocumentFragment:s,HTMLTemplateElement:N,Node:b,Element:R,NodeFilter:H,NamedNodeMap:z=n.NamedNodeMap||n.MozNamedAttrMap,HTMLFormElement:B,DOMParser:W,trustedTypes:G}=n,j=R.prototype,X=L(j,"cloneNode"),$=L(j,"nextSibling"),J=L(j,"childNodes"),Q=L(j,"parentNode");if("function"==typeof N){const e=r.createElement("template");e.content&&e.content.ownerDocument&&(r=e.content.ownerDocument)}let ee,te="";const{implementation:ne,createNodeIterator:oe,createDocumentFragment:re,getElementsByTagName:ie}=r,{importNode:ae}=a;let le={};o.isSupported="function"==typeof e&&"function"==typeof Q&&ne&&void 0!==ne.createHTMLDocument;const{MUSTACHE_EXPR:ce,ERB_EXPR:se,TMPLIT_EXPR:ue,DATA_ATTR:me,ARIA_ATTR:pe,IS_SCRIPT_OR_DATA:fe,ATTR_WHITESPACE:de,CUSTOM_ELEMENT:he}=K;let{IS_ALLOWED_URI:ge}=K,Te=null;const ye=S({},[...D,...C,...O,...v,...M]);let Ee=null;const Ae=S({},[...I,...U,...P,...F]);let _e=Object.seal(l(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),Ne=null,be=null,Se=!0,Re=!0,we=!1,Le=!0,De=!1,Ce=!0,Oe=!1,xe=!1,ve=!1,ke=!1,Me=!1,Ie=!1,Ue=!0,Pe=!1;const Fe="user-content-";let He=!0,ze=!1,Be={},We=null;const Ge=S({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","style","svg","template","thead","title","video","xmp"]);let Ye=null;const je=S({},["audio","video","img","source","image","track"]);let Xe=null;const qe=S({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),$e="http://www.w3.org/1998/Math/MathML",Ke="http://www.w3.org/2000/svg",Ve="http://www.w3.org/1999/xhtml";let Ze=Ve,Je=!1,Qe=null;const et=S({},[$e,Ke,Ve],d);let tt=null;const nt=["application/xhtml+xml","text/html"],ot="text/html";let rt=null,it=null;const at=r.createElement("form"),lt=function(e){return e instanceof RegExp||e instanceof Function},ct=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(!it||it!==e){if(e&&"object"==typeof e||(e={}),e=w(e),tt=-1===nt.indexOf(e.PARSER_MEDIA_TYPE)?ot:e.PARSER_MEDIA_TYPE,rt="application/xhtml+xml"===tt?d:f,Te=E(e,"ALLOWED_TAGS")?S({},e.ALLOWED_TAGS,rt):ye,Ee=E(e,"ALLOWED_ATTR")?S({},e.ALLOWED_ATTR,rt):Ae,Qe=E(e,"ALLOWED_NAMESPACES")?S({},e.ALLOWED_NAMESPACES,d):et,Xe=E(e,"ADD_URI_SAFE_ATTR")?S(w(qe),e.ADD_URI_SAFE_ATTR,rt):qe,Ye=E(e,"ADD_DATA_URI_TAGS")?S(w(je),e.ADD_DATA_URI_TAGS,rt):je,We=E(e,"FORBID_CONTENTS")?S({},e.FORBID_CONTENTS,rt):Ge,Ne=E(e,"FORBID_TAGS")?S({},e.FORBID_TAGS,rt):{},be=E(e,"FORBID_ATTR")?S({},e.FORBID_ATTR,rt):{},Be=!!E(e,"USE_PROFILES")&&e.USE_PROFILES,Se=!1!==e.ALLOW_ARIA_ATTR,Re=!1!==e.ALLOW_DATA_ATTR,we=e.ALLOW_UNKNOWN_PROTOCOLS||!1,Le=!1!==e.ALLOW_SELF_CLOSE_IN_ATTR,De=e.SAFE_FOR_TEMPLATES||!1,Ce=!1!==e.SAFE_FOR_XML,Oe=e.WHOLE_DOCUMENT||!1,ke=e.RETURN_DOM||!1,Me=e.RETURN_DOM_FRAGMENT||!1,Ie=e.RETURN_TRUSTED_TYPE||!1,ve=e.FORCE_BODY||!1,Ue=!1!==e.SANITIZE_DOM,Pe=e.SANITIZE_NAMED_PROPS||!1,He=!1!==e.KEEP_CONTENT,ze=e.IN_PLACE||!1,ge=e.ALLOWED_URI_REGEXP||Y,Ze=e.NAMESPACE||Ve,_e=e.CUSTOM_ELEMENT_HANDLING||{},e.CUSTOM_ELEMENT_HANDLING&<(e.CUSTOM_ELEMENT_HANDLING.tagNameCheck)&&(_e.tagNameCheck=e.CUSTOM_ELEMENT_HANDLING.tagNameCheck),e.CUSTOM_ELEMENT_HANDLING&<(e.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)&&(_e.attributeNameCheck=e.CUSTOM_ELEMENT_HANDLING.attributeNameCheck),e.CUSTOM_ELEMENT_HANDLING&&"boolean"==typeof e.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements&&(_e.allowCustomizedBuiltInElements=e.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements),De&&(Re=!1),Me&&(ke=!0),Be&&(Te=S({},M),Ee=[],!0===Be.html&&(S(Te,D),S(Ee,I)),!0===Be.svg&&(S(Te,C),S(Ee,U),S(Ee,F)),!0===Be.svgFilters&&(S(Te,O),S(Ee,U),S(Ee,F)),!0===Be.mathMl&&(S(Te,v),S(Ee,P),S(Ee,F))),e.ADD_TAGS&&(Te===ye&&(Te=w(Te)),S(Te,e.ADD_TAGS,rt)),e.ADD_ATTR&&(Ee===Ae&&(Ee=w(Ee)),S(Ee,e.ADD_ATTR,rt)),e.ADD_URI_SAFE_ATTR&&S(Xe,e.ADD_URI_SAFE_ATTR,rt),e.FORBID_CONTENTS&&(We===Ge&&(We=w(We)),S(We,e.FORBID_CONTENTS,rt)),He&&(Te["#text"]=!0),Oe&&S(Te,["html","head","body"]),Te.table&&(S(Te,["tbody"]),delete Ne.tbody),e.TRUSTED_TYPES_POLICY){if("function"!=typeof e.TRUSTED_TYPES_POLICY.createHTML)throw _('TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.');if("function"!=typeof e.TRUSTED_TYPES_POLICY.createScriptURL)throw _('TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.');ee=e.TRUSTED_TYPES_POLICY,te=ee.createHTML("")}else void 0===ee&&(ee=Z(G,c)),null!==ee&&"string"==typeof te&&(te=ee.createHTML(""));i&&i(e),it=e}},st=S({},["mi","mo","mn","ms","mtext"]),ut=S({},["foreignobject","desc","title","annotation-xml"]),mt=S({},["title","style","font","a","script"]),pt=S({},[...C,...O,...x]),ft=S({},[...v,...k]),dt=function(e){let t=Q(e);t&&t.tagName||(t={namespaceURI:Ze,tagName:"template"});const n=f(e.tagName),o=f(t.tagName);return!!Qe[e.namespaceURI]&&(e.namespaceURI===Ke?t.namespaceURI===Ve?"svg"===n:t.namespaceURI===$e?"svg"===n&&("annotation-xml"===o||st[o]):Boolean(pt[n]):e.namespaceURI===$e?t.namespaceURI===Ve?"math"===n:t.namespaceURI===Ke?"math"===n&&ut[o]:Boolean(ft[n]):e.namespaceURI===Ve?!(t.namespaceURI===Ke&&!ut[o])&&(!(t.namespaceURI===$e&&!st[o])&&(!ft[n]&&(mt[n]||!pt[n]))):!("application/xhtml+xml"!==tt||!Qe[e.namespaceURI]))},ht=function(e){p(o.removed,{element:e});try{e.parentNode.removeChild(e)}catch(t){e.remove()}},gt=function(e,t){try{p(o.removed,{attribute:t.getAttributeNode(e),from:t})}catch(e){p(o.removed,{attribute:null,from:t})}if(t.removeAttribute(e),"is"===e&&!Ee[e])if(ke||Me)try{ht(t)}catch(e){}else try{t.setAttribute(e,"")}catch(e){}},Tt=function(e){let t=null,n=null;if(ve)e=""+e;else{const t=h(e,/^[\r\n\t ]+/);n=t&&t[0]}"application/xhtml+xml"===tt&&Ze===Ve&&(e=''+e+"");const o=ee?ee.createHTML(e):e;if(Ze===Ve)try{t=(new W).parseFromString(o,tt)}catch(e){}if(!t||!t.documentElement){t=ne.createDocument(Ze,"template",null);try{t.documentElement.innerHTML=Je?te:o}catch(e){}}const i=t.body||t.documentElement;return e&&n&&i.insertBefore(r.createTextNode(n),i.childNodes[0]||null),Ze===Ve?ie.call(t,Oe?"html":"body")[0]:Oe?t.documentElement:i},yt=function(e){return oe.call(e.ownerDocument||e,e,H.SHOW_ELEMENT|H.SHOW_COMMENT|H.SHOW_TEXT|H.SHOW_PROCESSING_INSTRUCTION|H.SHOW_CDATA_SECTION,null)},Et=function(e){return e instanceof B&&("string"!=typeof e.nodeName||"string"!=typeof e.textContent||"function"!=typeof e.removeChild||!(e.attributes instanceof z)||"function"!=typeof e.removeAttribute||"function"!=typeof e.setAttribute||"string"!=typeof e.namespaceURI||"function"!=typeof e.insertBefore||"function"!=typeof e.hasChildNodes)},At=function(e){return"function"==typeof b&&e instanceof b},_t=function(e,t,n){le[e]&&u(le[e],(e=>{e.call(o,t,n,it)}))},Nt=function(e){let t=null;if(_t("beforeSanitizeElements",e,null),Et(e))return ht(e),!0;const n=rt(e.nodeName);if(_t("uponSanitizeElement",e,{tagName:n,allowedTags:Te}),e.hasChildNodes()&&!At(e.firstElementChild)&&A(/<[/\w]/g,e.innerHTML)&&A(/<[/\w]/g,e.textContent))return ht(e),!0;if(7===e.nodeType)return ht(e),!0;if(Ce&&8===e.nodeType&&A(/<[/\w]/g,e.data))return ht(e),!0;if(!Te[n]||Ne[n]){if(!Ne[n]&&St(n)){if(_e.tagNameCheck instanceof RegExp&&A(_e.tagNameCheck,n))return!1;if(_e.tagNameCheck instanceof Function&&_e.tagNameCheck(n))return!1}if(He&&!We[n]){const t=Q(e)||e.parentNode,n=J(e)||e.childNodes;if(n&&t){for(let o=n.length-1;o>=0;--o)t.insertBefore(X(n[o],!0),$(e))}}return ht(e),!0}return e instanceof R&&!dt(e)?(ht(e),!0):"noscript"!==n&&"noembed"!==n&&"noframes"!==n||!A(/<\/no(script|embed|frames)/i,e.innerHTML)?(De&&3===e.nodeType&&(t=e.textContent,u([ce,se,ue],(e=>{t=g(t,e," ")})),e.textContent!==t&&(p(o.removed,{element:e.cloneNode()}),e.textContent=t)),_t("afterSanitizeElements",e,null),!1):(ht(e),!0)},bt=function(e,t,n){if(Ue&&("id"===t||"name"===t)&&(n in r||n in at))return!1;if(Re&&!be[t]&&A(me,t));else if(Se&&A(pe,t));else if(!Ee[t]||be[t]){if(!(St(e)&&(_e.tagNameCheck instanceof RegExp&&A(_e.tagNameCheck,e)||_e.tagNameCheck instanceof Function&&_e.tagNameCheck(e))&&(_e.attributeNameCheck instanceof RegExp&&A(_e.attributeNameCheck,t)||_e.attributeNameCheck instanceof Function&&_e.attributeNameCheck(t))||"is"===t&&_e.allowCustomizedBuiltInElements&&(_e.tagNameCheck instanceof RegExp&&A(_e.tagNameCheck,n)||_e.tagNameCheck instanceof Function&&_e.tagNameCheck(n))))return!1}else if(Xe[t]);else if(A(ge,g(n,de,"")));else if("src"!==t&&"xlink:href"!==t&&"href"!==t||"script"===e||0!==T(n,"data:")||!Ye[e]){if(we&&!A(fe,g(n,de,"")));else if(n)return!1}else;return!0},St=function(e){return"annotation-xml"!==e&&h(e,he)},Rt=function(e){_t("beforeSanitizeAttributes",e,null);const{attributes:t}=e;if(!t)return;const n={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:Ee};let r=t.length;for(;r--;){const i=t[r],{name:a,namespaceURI:l,value:c}=i,s=rt(a);let p="value"===a?c:y(c);if(n.attrName=s,n.attrValue=p,n.keepAttr=!0,n.forceKeepAttr=void 0,_t("uponSanitizeAttribute",e,n),p=n.attrValue,n.forceKeepAttr)continue;if(gt(a,e),!n.keepAttr)continue;if(!Le&&A(/\/>/i,p)){gt(a,e);continue}De&&u([ce,se,ue],(e=>{p=g(p,e," ")}));const f=rt(e.nodeName);if(bt(f,s,p)){if(!Pe||"id"!==s&&"name"!==s||(gt(a,e),p=Fe+p),ee&&"object"==typeof G&&"function"==typeof G.getAttributeType)if(l);else switch(G.getAttributeType(f,s)){case"TrustedHTML":p=ee.createHTML(p);break;case"TrustedScriptURL":p=ee.createScriptURL(p)}try{l?e.setAttributeNS(l,a,p):e.setAttribute(a,p),m(o.removed)}catch(e){}}}_t("afterSanitizeAttributes",e,null)},wt=function e(t){let n=null;const o=yt(t);for(_t("beforeSanitizeShadowDOM",t,null);n=o.nextNode();)_t("uponSanitizeShadowNode",n,null),Nt(n)||(n.content instanceof s&&e(n.content),Rt(n));_t("afterSanitizeShadowDOM",t,null)};return o.sanitize=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=null,r=null,i=null,l=null;if(Je=!e,Je&&(e="\x3c!--\x3e"),"string"!=typeof e&&!At(e)){if("function"!=typeof e.toString)throw _("toString is not a function");if("string"!=typeof(e=e.toString()))throw _("dirty is not a string, aborting")}if(!o.isSupported)return e;if(xe||ct(t),o.removed=[],"string"==typeof e&&(ze=!1),ze){if(e.nodeName){const t=rt(e.nodeName);if(!Te[t]||Ne[t])throw _("root node is forbidden and cannot be sanitized in-place")}}else if(e instanceof b)n=Tt("\x3c!----\x3e"),r=n.ownerDocument.importNode(e,!0),1===r.nodeType&&"BODY"===r.nodeName||"HTML"===r.nodeName?n=r:n.appendChild(r);else{if(!ke&&!De&&!Oe&&-1===e.indexOf("<"))return ee&&Ie?ee.createHTML(e):e;if(n=Tt(e),!n)return ke?null:Ie?te:""}n&&ve&&ht(n.firstChild);const c=yt(ze?e:n);for(;i=c.nextNode();)Nt(i)||(i.content instanceof s&&wt(i.content),Rt(i));if(ze)return e;if(ke){if(Me)for(l=re.call(n.ownerDocument);n.firstChild;)l.appendChild(n.firstChild);else l=n;return(Ee.shadowroot||Ee.shadowrootmode)&&(l=ae.call(a,l,!0)),l}let m=Oe?n.outerHTML:n.innerHTML;return Oe&&Te["!doctype"]&&n.ownerDocument&&n.ownerDocument.doctype&&n.ownerDocument.doctype.name&&A(q,n.ownerDocument.doctype.name)&&(m="\n"+m),De&&u([ce,se,ue],(e=>{m=g(m,e," ")})),ee&&Ie?ee.createHTML(m):m},o.setConfig=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};ct(e),xe=!0},o.clearConfig=function(){it=null,xe=!1},o.isValidAttribute=function(e,t,n){it||ct({});const o=rt(e),r=rt(t);return bt(o,r,n)},o.addHook=function(e,t){"function"==typeof t&&(le[e]=le[e]||[],p(le[e],t))},o.removeHook=function(e){if(le[e])return m(le[e])},o.removeHooks=function(e){le[e]&&(le[e]=[])},o.removeAllHooks=function(){le={}},o}();return J})); +//# sourceMappingURL=purify.min.js.map diff --git a/ComfyUI-KJNodes/nodes/__pycache__/audioscheduler_nodes.cpython-310.pyc b/ComfyUI-KJNodes/nodes/__pycache__/audioscheduler_nodes.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a87116ef048b77286f70c18cba4ff459105cfd94 Binary files /dev/null and b/ComfyUI-KJNodes/nodes/__pycache__/audioscheduler_nodes.cpython-310.pyc differ diff --git a/ComfyUI-KJNodes/nodes/__pycache__/batchcrop_nodes.cpython-310.pyc b/ComfyUI-KJNodes/nodes/__pycache__/batchcrop_nodes.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5855c076dc0c084b69a9bfd5b71960f325054d06 Binary files /dev/null and b/ComfyUI-KJNodes/nodes/__pycache__/batchcrop_nodes.cpython-310.pyc differ diff --git a/ComfyUI-KJNodes/nodes/__pycache__/curve_nodes.cpython-310.pyc b/ComfyUI-KJNodes/nodes/__pycache__/curve_nodes.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..fe29afa99b0af640c37a28af42ac1e53e6a7d084 Binary files /dev/null and b/ComfyUI-KJNodes/nodes/__pycache__/curve_nodes.cpython-310.pyc differ diff --git a/ComfyUI-KJNodes/nodes/__pycache__/intrinsic_lora_nodes.cpython-310.pyc b/ComfyUI-KJNodes/nodes/__pycache__/intrinsic_lora_nodes.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b7f34f4228da5a08b0b0c8baf9702da3195556c1 Binary files /dev/null and b/ComfyUI-KJNodes/nodes/__pycache__/intrinsic_lora_nodes.cpython-310.pyc differ diff --git a/ComfyUI-KJNodes/nodes/__pycache__/lora_nodes.cpython-310.pyc b/ComfyUI-KJNodes/nodes/__pycache__/lora_nodes.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..15c3610ca7a5704cdedaff1dc38cbc6302e9ef44 Binary files /dev/null and b/ComfyUI-KJNodes/nodes/__pycache__/lora_nodes.cpython-310.pyc differ diff --git a/ComfyUI-KJNodes/nodes/__pycache__/ltxv_nodes.cpython-310.pyc b/ComfyUI-KJNodes/nodes/__pycache__/ltxv_nodes.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..015b5b4bb6e0f193659266b728cd4f5ddee13823 Binary files /dev/null and b/ComfyUI-KJNodes/nodes/__pycache__/ltxv_nodes.cpython-310.pyc differ diff --git a/ComfyUI-KJNodes/nodes/__pycache__/mask_nodes.cpython-310.pyc b/ComfyUI-KJNodes/nodes/__pycache__/mask_nodes.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c705150335f87237e87f31738501b3edc15c3a3c Binary files /dev/null and b/ComfyUI-KJNodes/nodes/__pycache__/mask_nodes.cpython-310.pyc differ diff --git a/ComfyUI-KJNodes/nodes/__pycache__/model_optimization_nodes.cpython-310.pyc b/ComfyUI-KJNodes/nodes/__pycache__/model_optimization_nodes.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..951a4860ea91b22d24aa56692aa10c82f36813ac Binary files /dev/null and b/ComfyUI-KJNodes/nodes/__pycache__/model_optimization_nodes.cpython-310.pyc differ diff --git a/ComfyUI-KJNodes/nodes/audioscheduler_nodes.py b/ComfyUI-KJNodes/nodes/audioscheduler_nodes.py new file mode 100644 index 0000000000000000000000000000000000000000..31b65c094b24eb193ff7098e22b9d9f1ea90fc17 --- /dev/null +++ b/ComfyUI-KJNodes/nodes/audioscheduler_nodes.py @@ -0,0 +1,251 @@ +# to be used with https://github.com/a1lazydog/ComfyUI-AudioScheduler +import torch +from torchvision.transforms import functional as TF +from PIL import Image, ImageDraw +import numpy as np +from ..utility.utility import pil2tensor +from nodes import MAX_RESOLUTION + +class NormalizedAmplitudeToMask: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "normalized_amp": ("NORMALIZED_AMPLITUDE",), + "width": ("INT", {"default": 512,"min": 16, "max": 4096, "step": 1}), + "height": ("INT", {"default": 512,"min": 16, "max": 4096, "step": 1}), + "frame_offset": ("INT", {"default": 0,"min": -255, "max": 255, "step": 1}), + "location_x": ("INT", {"default": 256,"min": 0, "max": 4096, "step": 1}), + "location_y": ("INT", {"default": 256,"min": 0, "max": 4096, "step": 1}), + "size": ("INT", {"default": 128,"min": 8, "max": 4096, "step": 1}), + "shape": ( + [ + 'none', + 'circle', + 'square', + 'triangle', + ], + { + "default": 'none' + }), + "color": ( + [ + 'white', + 'amplitude', + ], + { + "default": 'amplitude' + }), + },} + + CATEGORY = "KJNodes/audio" + RETURN_TYPES = ("MASK",) + FUNCTION = "convert" + DESCRIPTION = """ +Works as a bridge to the AudioScheduler -nodes: +https://github.com/a1lazydog/ComfyUI-AudioScheduler +Creates masks based on the normalized amplitude. +""" + + def convert(self, normalized_amp, width, height, frame_offset, shape, location_x, location_y, size, color): + # Ensure normalized_amp is an array and within the range [0, 1] + normalized_amp = np.clip(normalized_amp, 0.0, 1.0) + + # Offset the amplitude values by rolling the array + normalized_amp = np.roll(normalized_amp, frame_offset) + + # Initialize an empty list to hold the image tensors + out = [] + # Iterate over each amplitude value to create an image + for amp in normalized_amp: + # Scale the amplitude value to cover the full range of grayscale values + if color == 'amplitude': + grayscale_value = int(amp * 255) + elif color == 'white': + grayscale_value = 255 + # Convert the grayscale value to an RGB format + gray_color = (grayscale_value, grayscale_value, grayscale_value) + finalsize = size * amp + + if shape == 'none': + shapeimage = Image.new("RGB", (width, height), gray_color) + else: + shapeimage = Image.new("RGB", (width, height), "black") + + draw = ImageDraw.Draw(shapeimage) + if shape == 'circle' or shape == 'square': + # Define the bounding box for the shape + left_up_point = (location_x - finalsize, location_y - finalsize) + right_down_point = (location_x + finalsize,location_y + finalsize) + two_points = [left_up_point, right_down_point] + + if shape == 'circle': + draw.ellipse(two_points, fill=gray_color) + elif shape == 'square': + draw.rectangle(two_points, fill=gray_color) + + elif shape == 'triangle': + # Define the points for the triangle + left_up_point = (location_x - finalsize, location_y + finalsize) # bottom left + right_down_point = (location_x + finalsize, location_y + finalsize) # bottom right + top_point = (location_x, location_y) # top point + draw.polygon([top_point, left_up_point, right_down_point], fill=gray_color) + + shapeimage = pil2tensor(shapeimage) + mask = shapeimage[:, :, :, 0] + out.append(mask) + + return (torch.cat(out, dim=0),) + +class NormalizedAmplitudeToFloatList: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "normalized_amp": ("NORMALIZED_AMPLITUDE",), + },} + + CATEGORY = "KJNodes/audio" + RETURN_TYPES = ("FLOAT",) + FUNCTION = "convert" + DESCRIPTION = """ +Works as a bridge to the AudioScheduler -nodes: +https://github.com/a1lazydog/ComfyUI-AudioScheduler +Creates a list of floats from the normalized amplitude. +""" + + def convert(self, normalized_amp): + # Ensure normalized_amp is an array and within the range [0, 1] + normalized_amp = np.clip(normalized_amp, 0.0, 1.0) + return (normalized_amp.tolist(),) + +class OffsetMaskByNormalizedAmplitude: + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "normalized_amp": ("NORMALIZED_AMPLITUDE",), + "mask": ("MASK",), + "x": ("INT", { "default": 0, "min": -4096, "max": MAX_RESOLUTION, "step": 1, "display": "number" }), + "y": ("INT", { "default": 0, "min": -4096, "max": MAX_RESOLUTION, "step": 1, "display": "number" }), + "rotate": ("BOOLEAN", { "default": False }), + "angle_multiplier": ("FLOAT", { "default": 0.0, "min": -1.0, "max": 1.0, "step": 0.001, "display": "number" }), + } + } + + RETURN_TYPES = ("MASK",) + RETURN_NAMES = ("mask",) + FUNCTION = "offset" + CATEGORY = "KJNodes/audio" + DESCRIPTION = """ +Works as a bridge to the AudioScheduler -nodes: +https://github.com/a1lazydog/ComfyUI-AudioScheduler +Offsets masks based on the normalized amplitude. +""" + + def offset(self, mask, x, y, angle_multiplier, rotate, normalized_amp): + + # Ensure normalized_amp is an array and within the range [0, 1] + offsetmask = mask.clone() + normalized_amp = np.clip(normalized_amp, 0.0, 1.0) + + batch_size, height, width = mask.shape + + if rotate: + for i in range(batch_size): + rotation_amp = int(normalized_amp[i] * (360 * angle_multiplier)) + rotation_angle = rotation_amp + offsetmask[i] = TF.rotate(offsetmask[i].unsqueeze(0), rotation_angle).squeeze(0) + if x != 0 or y != 0: + for i in range(batch_size): + offset_amp = normalized_amp[i] * 10 + shift_x = min(x*offset_amp, width-1) + shift_y = min(y*offset_amp, height-1) + if shift_x != 0: + offsetmask[i] = torch.roll(offsetmask[i], shifts=int(shift_x), dims=1) + if shift_y != 0: + offsetmask[i] = torch.roll(offsetmask[i], shifts=int(shift_y), dims=0) + + return offsetmask, + +class ImageTransformByNormalizedAmplitude: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "normalized_amp": ("NORMALIZED_AMPLITUDE",), + "zoom_scale": ("FLOAT", { "default": 0.0, "min": -1.0, "max": 1.0, "step": 0.001, "display": "number" }), + "x_offset": ("INT", { "default": 0, "min": (1 -MAX_RESOLUTION), "max": MAX_RESOLUTION, "step": 1, "display": "number" }), + "y_offset": ("INT", { "default": 0, "min": (1 -MAX_RESOLUTION), "max": MAX_RESOLUTION, "step": 1, "display": "number" }), + "cumulative": ("BOOLEAN", { "default": False }), + "image": ("IMAGE",), + }} + + RETURN_TYPES = ("IMAGE",) + FUNCTION = "amptransform" + CATEGORY = "KJNodes/audio" + DESCRIPTION = """ +Works as a bridge to the AudioScheduler -nodes: +https://github.com/a1lazydog/ComfyUI-AudioScheduler +Transforms image based on the normalized amplitude. +""" + + def amptransform(self, image, normalized_amp, zoom_scale, cumulative, x_offset, y_offset): + # Ensure normalized_amp is an array and within the range [0, 1] + normalized_amp = np.clip(normalized_amp, 0.0, 1.0) + transformed_images = [] + + # Initialize the cumulative zoom factor + prev_amp = 0.0 + + for i in range(image.shape[0]): + img = image[i] # Get the i-th image in the batch + amp = normalized_amp[i] # Get the corresponding amplitude value + + # Incrementally increase the cumulative zoom factor + if cumulative: + prev_amp += amp + amp += prev_amp + + # Convert the image tensor from BxHxWxC to CxHxW format expected by torchvision + img = img.permute(2, 0, 1) + + # Convert PyTorch tensor to PIL Image for processing + pil_img = TF.to_pil_image(img) + + # Calculate the crop size based on the amplitude + width, height = pil_img.size + crop_size = int(min(width, height) * (1 - amp * zoom_scale)) + crop_size = max(crop_size, 1) + + # Calculate the crop box coordinates (centered crop) + left = (width - crop_size) // 2 + top = (height - crop_size) // 2 + right = (width + crop_size) // 2 + bottom = (height + crop_size) // 2 + + # Crop and resize back to original size + cropped_img = TF.crop(pil_img, top, left, crop_size, crop_size) + resized_img = TF.resize(cropped_img, (height, width)) + + # Convert back to tensor in CxHxW format + tensor_img = TF.to_tensor(resized_img) + + # Convert the tensor back to BxHxWxC format + tensor_img = tensor_img.permute(1, 2, 0) + + # Offset the image based on the amplitude + offset_amp = amp * 10 # Calculate the offset magnitude based on the amplitude + shift_x = min(x_offset * offset_amp, img.shape[1] - 1) # Calculate the shift in x direction + shift_y = min(y_offset * offset_amp, img.shape[0] - 1) # Calculate the shift in y direction + + # Apply the offset to the image tensor + if shift_x != 0: + tensor_img = torch.roll(tensor_img, shifts=int(shift_x), dims=1) + if shift_y != 0: + tensor_img = torch.roll(tensor_img, shifts=int(shift_y), dims=0) + + # Add to the list + transformed_images.append(tensor_img) + + # Stack all transformed images into a batch + transformed_batch = torch.stack(transformed_images) + + return (transformed_batch,) \ No newline at end of file diff --git a/ComfyUI-KJNodes/nodes/batchcrop_nodes.py b/ComfyUI-KJNodes/nodes/batchcrop_nodes.py new file mode 100644 index 0000000000000000000000000000000000000000..c5db2202712abc4b7c5cb28472bd19c72e6533e9 --- /dev/null +++ b/ComfyUI-KJNodes/nodes/batchcrop_nodes.py @@ -0,0 +1,768 @@ +from ..utility.utility import tensor2pil, pil2tensor +from PIL import Image, ImageDraw, ImageFilter +import numpy as np +import torch +from torchvision.transforms import Resize, CenterCrop, InterpolationMode +import math + +#based on nodes from mtb https://github.com/melMass/comfy_mtb + +def bbox_to_region(bbox, target_size=None): + bbox = bbox_check(bbox, target_size) + return (bbox[0], bbox[1], bbox[0] + bbox[2], bbox[1] + bbox[3]) + +def bbox_check(bbox, target_size=None): + if not target_size: + return bbox + + new_bbox = ( + bbox[0], + bbox[1], + min(target_size[0] - bbox[0], bbox[2]), + min(target_size[1] - bbox[1], bbox[3]), + ) + return new_bbox + +class BatchCropFromMask: + + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + "original_images": ("IMAGE",), + "masks": ("MASK",), + "crop_size_mult": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.001}), + "bbox_smooth_alpha": ("FLOAT", {"default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01}), + }, + } + + RETURN_TYPES = ( + "IMAGE", + "IMAGE", + "BBOX", + "INT", + "INT", + ) + RETURN_NAMES = ( + "original_images", + "cropped_images", + "bboxes", + "width", + "height", + ) + FUNCTION = "crop" + CATEGORY = "KJNodes/masking" + + def smooth_bbox_size(self, prev_bbox_size, curr_bbox_size, alpha): + if alpha == 0: + return prev_bbox_size + return round(alpha * curr_bbox_size + (1 - alpha) * prev_bbox_size) + + def smooth_center(self, prev_center, curr_center, alpha=0.5): + if alpha == 0: + return prev_center + return ( + round(alpha * curr_center[0] + (1 - alpha) * prev_center[0]), + round(alpha * curr_center[1] + (1 - alpha) * prev_center[1]) + ) + + def crop(self, masks, original_images, crop_size_mult, bbox_smooth_alpha): + + bounding_boxes = [] + cropped_images = [] + + self.max_bbox_width = 0 + self.max_bbox_height = 0 + + # First, calculate the maximum bounding box size across all masks + curr_max_bbox_width = 0 + curr_max_bbox_height = 0 + for mask in masks: + _mask = tensor2pil(mask)[0] + non_zero_indices = np.nonzero(np.array(_mask)) + min_x, max_x = np.min(non_zero_indices[1]), np.max(non_zero_indices[1]) + min_y, max_y = np.min(non_zero_indices[0]), np.max(non_zero_indices[0]) + width = max_x - min_x + height = max_y - min_y + curr_max_bbox_width = max(curr_max_bbox_width, width) + curr_max_bbox_height = max(curr_max_bbox_height, height) + + # Smooth the changes in the bounding box size + self.max_bbox_width = self.smooth_bbox_size(self.max_bbox_width, curr_max_bbox_width, bbox_smooth_alpha) + self.max_bbox_height = self.smooth_bbox_size(self.max_bbox_height, curr_max_bbox_height, bbox_smooth_alpha) + + # Apply the crop size multiplier + self.max_bbox_width = round(self.max_bbox_width * crop_size_mult) + self.max_bbox_height = round(self.max_bbox_height * crop_size_mult) + bbox_aspect_ratio = self.max_bbox_width / self.max_bbox_height + + # Then, for each mask and corresponding image... + for i, (mask, img) in enumerate(zip(masks, original_images)): + _mask = tensor2pil(mask)[0] + non_zero_indices = np.nonzero(np.array(_mask)) + min_x, max_x = np.min(non_zero_indices[1]), np.max(non_zero_indices[1]) + min_y, max_y = np.min(non_zero_indices[0]), np.max(non_zero_indices[0]) + + # Calculate center of bounding box + center_x = np.mean(non_zero_indices[1]) + center_y = np.mean(non_zero_indices[0]) + curr_center = (round(center_x), round(center_y)) + + # If this is the first frame, initialize prev_center with curr_center + if not hasattr(self, 'prev_center'): + self.prev_center = curr_center + + # Smooth the changes in the center coordinates from the second frame onwards + if i > 0: + center = self.smooth_center(self.prev_center, curr_center, bbox_smooth_alpha) + else: + center = curr_center + + # Update prev_center for the next frame + self.prev_center = center + + # Create bounding box using max_bbox_width and max_bbox_height + half_box_width = round(self.max_bbox_width / 2) + half_box_height = round(self.max_bbox_height / 2) + min_x = max(0, center[0] - half_box_width) + max_x = min(img.shape[1], center[0] + half_box_width) + min_y = max(0, center[1] - half_box_height) + max_y = min(img.shape[0], center[1] + half_box_height) + + # Append bounding box coordinates + bounding_boxes.append((min_x, min_y, max_x - min_x, max_y - min_y)) + + # Crop the image from the bounding box + cropped_img = img[min_y:max_y, min_x:max_x, :] + + # Calculate the new dimensions while maintaining the aspect ratio + new_height = min(cropped_img.shape[0], self.max_bbox_height) + new_width = round(new_height * bbox_aspect_ratio) + + # Resize the image + resize_transform = Resize((new_height, new_width)) + resized_img = resize_transform(cropped_img.permute(2, 0, 1)) + + # Perform the center crop to the desired size + crop_transform = CenterCrop((self.max_bbox_height, self.max_bbox_width)) # swap the order here if necessary + cropped_resized_img = crop_transform(resized_img) + + cropped_images.append(cropped_resized_img.permute(1, 2, 0)) + + cropped_out = torch.stack(cropped_images, dim=0) + + return (original_images, cropped_out, bounding_boxes, self.max_bbox_width, self.max_bbox_height, ) + +class BatchUncrop: + + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + "original_images": ("IMAGE",), + "cropped_images": ("IMAGE",), + "bboxes": ("BBOX",), + "border_blending": ("FLOAT", {"default": 0.25, "min": 0.0, "max": 1.0, "step": 0.01}, ), + "crop_rescale": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}), + "border_top": ("BOOLEAN", {"default": True}), + "border_bottom": ("BOOLEAN", {"default": True}), + "border_left": ("BOOLEAN", {"default": True}), + "border_right": ("BOOLEAN", {"default": True}), + } + } + + RETURN_TYPES = ("IMAGE",) + FUNCTION = "uncrop" + + CATEGORY = "KJNodes/masking" + + def uncrop(self, original_images, cropped_images, bboxes, border_blending, crop_rescale, border_top, border_bottom, border_left, border_right): + def inset_border(image, border_width, border_color, border_top, border_bottom, border_left, border_right): + draw = ImageDraw.Draw(image) + width, height = image.size + if border_top: + draw.rectangle((0, 0, width, border_width), fill=border_color) + if border_bottom: + draw.rectangle((0, height - border_width, width, height), fill=border_color) + if border_left: + draw.rectangle((0, 0, border_width, height), fill=border_color) + if border_right: + draw.rectangle((width - border_width, 0, width, height), fill=border_color) + return image + + if len(original_images) != len(cropped_images): + raise ValueError(f"The number of original_images ({len(original_images)}) and cropped_images ({len(cropped_images)}) should be the same") + + # Ensure there are enough bboxes, but drop the excess if there are more bboxes than images + if len(bboxes) > len(original_images): + print(f"Warning: Dropping excess bounding boxes. Expected {len(original_images)}, but got {len(bboxes)}") + bboxes = bboxes[:len(original_images)] + elif len(bboxes) < len(original_images): + raise ValueError("There should be at least as many bboxes as there are original and cropped images") + + input_images = tensor2pil(original_images) + crop_imgs = tensor2pil(cropped_images) + + out_images = [] + for i in range(len(input_images)): + img = input_images[i] + crop = crop_imgs[i] + bbox = bboxes[i] + + # uncrop the image based on the bounding box + bb_x, bb_y, bb_width, bb_height = bbox + + paste_region = bbox_to_region((bb_x, bb_y, bb_width, bb_height), img.size) + + # scale factors + scale_x = crop_rescale + scale_y = crop_rescale + + # scaled paste_region + paste_region = (round(paste_region[0]*scale_x), round(paste_region[1]*scale_y), round(paste_region[2]*scale_x), round(paste_region[3]*scale_y)) + + # rescale the crop image to fit the paste_region + crop = crop.resize((round(paste_region[2]-paste_region[0]), round(paste_region[3]-paste_region[1]))) + crop_img = crop.convert("RGB") + + if border_blending > 1.0: + border_blending = 1.0 + elif border_blending < 0.0: + border_blending = 0.0 + + blend_ratio = (max(crop_img.size) / 2) * float(border_blending) + + blend = img.convert("RGBA") + mask = Image.new("L", img.size, 0) + + mask_block = Image.new("L", (paste_region[2]-paste_region[0], paste_region[3]-paste_region[1]), 255) + mask_block = inset_border(mask_block, round(blend_ratio / 2), (0), border_top, border_bottom, border_left, border_right) + + mask.paste(mask_block, paste_region) + blend.paste(crop_img, paste_region) + + mask = mask.filter(ImageFilter.BoxBlur(radius=blend_ratio / 4)) + mask = mask.filter(ImageFilter.GaussianBlur(radius=blend_ratio / 4)) + + blend.putalpha(mask) + img = Image.alpha_composite(img.convert("RGBA"), blend) + out_images.append(img.convert("RGB")) + + return (pil2tensor(out_images),) + +class BatchCropFromMaskAdvanced: + + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + "original_images": ("IMAGE",), + "masks": ("MASK",), + "crop_size_mult": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}), + "bbox_smooth_alpha": ("FLOAT", {"default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01}), + }, + } + + RETURN_TYPES = ( + "IMAGE", + "IMAGE", + "MASK", + "IMAGE", + "MASK", + "BBOX", + "BBOX", + "INT", + "INT", + ) + RETURN_NAMES = ( + "original_images", + "cropped_images", + "cropped_masks", + "combined_crop_image", + "combined_crop_masks", + "bboxes", + "combined_bounding_box", + "bbox_width", + "bbox_height", + ) + FUNCTION = "crop" + CATEGORY = "KJNodes/masking" + + def smooth_bbox_size(self, prev_bbox_size, curr_bbox_size, alpha): + return round(alpha * curr_bbox_size + (1 - alpha) * prev_bbox_size) + + def smooth_center(self, prev_center, curr_center, alpha=0.5): + return (round(alpha * curr_center[0] + (1 - alpha) * prev_center[0]), + round(alpha * curr_center[1] + (1 - alpha) * prev_center[1])) + + def crop(self, masks, original_images, crop_size_mult, bbox_smooth_alpha): + bounding_boxes = [] + combined_bounding_box = [] + cropped_images = [] + cropped_masks = [] + cropped_masks_out = [] + combined_crop_out = [] + combined_cropped_images = [] + combined_cropped_masks = [] + + def calculate_bbox(mask): + non_zero_indices = np.nonzero(np.array(mask)) + + # handle empty masks + min_x, max_x, min_y, max_y = 0, 0, 0, 0 + if len(non_zero_indices[1]) > 0 and len(non_zero_indices[0]) > 0: + min_x, max_x = np.min(non_zero_indices[1]), np.max(non_zero_indices[1]) + min_y, max_y = np.min(non_zero_indices[0]), np.max(non_zero_indices[0]) + + width = max_x - min_x + height = max_y - min_y + bbox_size = max(width, height) + return min_x, max_x, min_y, max_y, bbox_size + + combined_mask = torch.max(masks, dim=0)[0] + _mask = tensor2pil(combined_mask)[0] + new_min_x, new_max_x, new_min_y, new_max_y, combined_bbox_size = calculate_bbox(_mask) + center_x = (new_min_x + new_max_x) / 2 + center_y = (new_min_y + new_max_y) / 2 + half_box_size = round(combined_bbox_size // 2) + new_min_x = max(0, round(center_x - half_box_size)) + new_max_x = min(original_images[0].shape[1], round(center_x + half_box_size)) + new_min_y = max(0, round(center_y - half_box_size)) + new_max_y = min(original_images[0].shape[0], round(center_y + half_box_size)) + + combined_bounding_box.append((new_min_x, new_min_y, new_max_x - new_min_x, new_max_y - new_min_y)) + + self.max_bbox_size = 0 + + # First, calculate the maximum bounding box size across all masks + curr_max_bbox_size = max(calculate_bbox(tensor2pil(mask)[0])[-1] for mask in masks) + # Smooth the changes in the bounding box size + self.max_bbox_size = self.smooth_bbox_size(self.max_bbox_size, curr_max_bbox_size, bbox_smooth_alpha) + # Apply the crop size multiplier + self.max_bbox_size = round(self.max_bbox_size * crop_size_mult) + # Make sure max_bbox_size is divisible by 16, if not, round it upwards so it is + self.max_bbox_size = math.ceil(self.max_bbox_size / 16) * 16 + + if self.max_bbox_size > original_images[0].shape[0] or self.max_bbox_size > original_images[0].shape[1]: + # max_bbox_size can only be as big as our input's width or height, and it has to be even + self.max_bbox_size = math.floor(min(original_images[0].shape[0], original_images[0].shape[1]) / 2) * 2 + + # Then, for each mask and corresponding image... + for i, (mask, img) in enumerate(zip(masks, original_images)): + _mask = tensor2pil(mask)[0] + non_zero_indices = np.nonzero(np.array(_mask)) + + # check for empty masks + if len(non_zero_indices[0]) > 0 and len(non_zero_indices[1]) > 0: + min_x, max_x = np.min(non_zero_indices[1]), np.max(non_zero_indices[1]) + min_y, max_y = np.min(non_zero_indices[0]), np.max(non_zero_indices[0]) + + # Calculate center of bounding box + center_x = np.mean(non_zero_indices[1]) + center_y = np.mean(non_zero_indices[0]) + curr_center = (round(center_x), round(center_y)) + + # If this is the first frame, initialize prev_center with curr_center + if not hasattr(self, 'prev_center'): + self.prev_center = curr_center + + # Smooth the changes in the center coordinates from the second frame onwards + if i > 0: + center = self.smooth_center(self.prev_center, curr_center, bbox_smooth_alpha) + else: + center = curr_center + + # Update prev_center for the next frame + self.prev_center = center + + # Create bounding box using max_bbox_size + half_box_size = self.max_bbox_size // 2 + min_x = max(0, center[0] - half_box_size) + max_x = min(img.shape[1], center[0] + half_box_size) + min_y = max(0, center[1] - half_box_size) + max_y = min(img.shape[0], center[1] + half_box_size) + + # Append bounding box coordinates + bounding_boxes.append((min_x, min_y, max_x - min_x, max_y - min_y)) + + # Crop the image from the bounding box + cropped_img = img[min_y:max_y, min_x:max_x, :] + cropped_mask = mask[min_y:max_y, min_x:max_x] + + # Resize the cropped image to a fixed size + new_size = max(cropped_img.shape[0], cropped_img.shape[1]) + resize_transform = Resize(new_size, interpolation=InterpolationMode.NEAREST, max_size=max(img.shape[0], img.shape[1])) + resized_mask = resize_transform(cropped_mask.unsqueeze(0).unsqueeze(0)).squeeze(0).squeeze(0) + resized_img = resize_transform(cropped_img.permute(2, 0, 1)) + # Perform the center crop to the desired size + # Constrain the crop to the smaller of our bbox or our image so we don't expand past the image dimensions. + crop_transform = CenterCrop((min(self.max_bbox_size, resized_img.shape[1]), min(self.max_bbox_size, resized_img.shape[2]))) + + cropped_resized_img = crop_transform(resized_img) + cropped_images.append(cropped_resized_img.permute(1, 2, 0)) + + cropped_resized_mask = crop_transform(resized_mask) + cropped_masks.append(cropped_resized_mask) + + combined_cropped_img = original_images[i][new_min_y:new_max_y, new_min_x:new_max_x, :] + combined_cropped_images.append(combined_cropped_img) + + combined_cropped_mask = masks[i][new_min_y:new_max_y, new_min_x:new_max_x] + combined_cropped_masks.append(combined_cropped_mask) + else: + bounding_boxes.append((0, 0, img.shape[1], img.shape[0])) + cropped_images.append(img) + cropped_masks.append(mask) + combined_cropped_images.append(img) + combined_cropped_masks.append(mask) + + cropped_out = torch.stack(cropped_images, dim=0) + combined_crop_out = torch.stack(combined_cropped_images, dim=0) + cropped_masks_out = torch.stack(cropped_masks, dim=0) + combined_crop_mask_out = torch.stack(combined_cropped_masks, dim=0) + + return (original_images, cropped_out, cropped_masks_out, combined_crop_out, combined_crop_mask_out, bounding_boxes, combined_bounding_box, self.max_bbox_size, self.max_bbox_size) + +class FilterZeroMasksAndCorrespondingImages: + + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + "masks": ("MASK",), + }, + "optional": { + "original_images": ("IMAGE",), + }, + } + + RETURN_TYPES = ("MASK", "IMAGE", "IMAGE", "INDEXES",) + RETURN_NAMES = ("non_zero_masks_out", "non_zero_mask_images_out", "zero_mask_images_out", "zero_mask_images_out_indexes",) + FUNCTION = "filter" + CATEGORY = "KJNodes/masking" + DESCRIPTION = """ +Filter out all the empty (i.e. all zero) mask in masks +Also filter out all the corresponding images in original_images by indexes if provide + +original_images (optional): If provided, need have same length as masks. +""" + + def filter(self, masks, original_images=None): + non_zero_masks = [] + non_zero_mask_images = [] + zero_mask_images = [] + zero_mask_images_indexes = [] + + masks_num = len(masks) + also_process_images = False + if original_images is not None: + imgs_num = len(original_images) + if len(original_images) == masks_num: + also_process_images = True + else: + print(f"[WARNING] ignore input: original_images, due to number of original_images ({imgs_num}) is not equal to number of masks ({masks_num})") + + for i in range(masks_num): + non_zero_num = np.count_nonzero(np.array(masks[i])) + if non_zero_num > 0: + non_zero_masks.append(masks[i]) + if also_process_images: + non_zero_mask_images.append(original_images[i]) + else: + zero_mask_images.append(original_images[i]) + zero_mask_images_indexes.append(i) + + non_zero_masks_out = torch.stack(non_zero_masks, dim=0) + non_zero_mask_images_out = zero_mask_images_out = zero_mask_images_out_indexes = None + + if also_process_images: + non_zero_mask_images_out = torch.stack(non_zero_mask_images, dim=0) + if len(zero_mask_images) > 0: + zero_mask_images_out = torch.stack(zero_mask_images, dim=0) + zero_mask_images_out_indexes = zero_mask_images_indexes + + return (non_zero_masks_out, non_zero_mask_images_out, zero_mask_images_out, zero_mask_images_out_indexes) + +class InsertImageBatchByIndexes: + + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + "images": ("IMAGE",), + "images_to_insert": ("IMAGE",), + "insert_indexes": ("INDEXES",), + }, + } + + RETURN_TYPES = ("IMAGE", ) + RETURN_NAMES = ("images_after_insert", ) + FUNCTION = "insert" + CATEGORY = "KJNodes/image" + DESCRIPTION = """ +This node is designed to be use with node FilterZeroMasksAndCorrespondingImages +It inserts the images_to_insert into images according to insert_indexes + +Returns: + images_after_insert: updated original images with origonal sequence order +""" + + def insert(self, images, images_to_insert, insert_indexes): + images_after_insert = images + + if images_to_insert is not None and insert_indexes is not None: + images_to_insert_num = len(images_to_insert) + insert_indexes_num = len(insert_indexes) + if images_to_insert_num == insert_indexes_num: + images_after_insert = [] + + i_images = 0 + for i in range(len(images) + images_to_insert_num): + if i in insert_indexes: + images_after_insert.append(images_to_insert[insert_indexes.index(i)]) + else: + images_after_insert.append(images[i_images]) + i_images += 1 + + images_after_insert = torch.stack(images_after_insert, dim=0) + + else: + print(f"[WARNING] skip this node, due to number of images_to_insert ({images_to_insert_num}) is not equal to number of insert_indexes ({insert_indexes_num})") + + + return (images_after_insert, ) + +class BatchUncropAdvanced: + + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + "original_images": ("IMAGE",), + "cropped_images": ("IMAGE",), + "cropped_masks": ("MASK",), + "combined_crop_mask": ("MASK",), + "bboxes": ("BBOX",), + "border_blending": ("FLOAT", {"default": 0.25, "min": 0.0, "max": 1.0, "step": 0.01}, ), + "crop_rescale": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}), + "use_combined_mask": ("BOOLEAN", {"default": False}), + "use_square_mask": ("BOOLEAN", {"default": True}), + }, + "optional": { + "combined_bounding_box": ("BBOX", {"default": None}), + }, + } + + RETURN_TYPES = ("IMAGE",) + FUNCTION = "uncrop" + CATEGORY = "KJNodes/masking" + + + def uncrop(self, original_images, cropped_images, cropped_masks, combined_crop_mask, bboxes, border_blending, crop_rescale, use_combined_mask, use_square_mask, combined_bounding_box = None): + + def inset_border(image, border_width=20, border_color=(0)): + width, height = image.size + bordered_image = Image.new(image.mode, (width, height), border_color) + bordered_image.paste(image, (0, 0)) + draw = ImageDraw.Draw(bordered_image) + draw.rectangle((0, 0, width - 1, height - 1), outline=border_color, width=border_width) + return bordered_image + + if len(original_images) != len(cropped_images): + raise ValueError(f"The number of original_images ({len(original_images)}) and cropped_images ({len(cropped_images)}) should be the same") + + # Ensure there are enough bboxes, but drop the excess if there are more bboxes than images + if len(bboxes) > len(original_images): + print(f"Warning: Dropping excess bounding boxes. Expected {len(original_images)}, but got {len(bboxes)}") + bboxes = bboxes[:len(original_images)] + elif len(bboxes) < len(original_images): + raise ValueError("There should be at least as many bboxes as there are original and cropped images") + + crop_imgs = tensor2pil(cropped_images) + input_images = tensor2pil(original_images) + out_images = [] + + for i in range(len(input_images)): + img = input_images[i] + crop = crop_imgs[i] + bbox = bboxes[i] + + if use_combined_mask: + bb_x, bb_y, bb_width, bb_height = combined_bounding_box[0] + paste_region = bbox_to_region((bb_x, bb_y, bb_width, bb_height), img.size) + mask = combined_crop_mask[i] + else: + bb_x, bb_y, bb_width, bb_height = bbox + paste_region = bbox_to_region((bb_x, bb_y, bb_width, bb_height), img.size) + mask = cropped_masks[i] + + # scale paste_region + scale_x = scale_y = crop_rescale + paste_region = (round(paste_region[0]*scale_x), round(paste_region[1]*scale_y), round(paste_region[2]*scale_x), round(paste_region[3]*scale_y)) + + # rescale the crop image to fit the paste_region + crop = crop.resize((round(paste_region[2]-paste_region[0]), round(paste_region[3]-paste_region[1]))) + crop_img = crop.convert("RGB") + + #border blending + if border_blending > 1.0: + border_blending = 1.0 + elif border_blending < 0.0: + border_blending = 0.0 + + blend_ratio = (max(crop_img.size) / 2) * float(border_blending) + blend = img.convert("RGBA") + + if use_square_mask: + mask = Image.new("L", img.size, 0) + mask_block = Image.new("L", (paste_region[2]-paste_region[0], paste_region[3]-paste_region[1]), 255) + mask_block = inset_border(mask_block, round(blend_ratio / 2), (0)) + mask.paste(mask_block, paste_region) + else: + original_mask = tensor2pil(mask)[0] + original_mask = original_mask.resize((paste_region[2]-paste_region[0], paste_region[3]-paste_region[1])) + mask = Image.new("L", img.size, 0) + mask.paste(original_mask, paste_region) + + mask = mask.filter(ImageFilter.BoxBlur(radius=blend_ratio / 4)) + mask = mask.filter(ImageFilter.GaussianBlur(radius=blend_ratio / 4)) + + blend.paste(crop_img, paste_region) + blend.putalpha(mask) + + img = Image.alpha_composite(img.convert("RGBA"), blend) + out_images.append(img.convert("RGB")) + + return (pil2tensor(out_images),) + +class SplitBboxes: + + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + "bboxes": ("BBOX",), + "index": ("INT", {"default": 0,"min": 0, "max": 99999999, "step": 1}), + }, + } + + RETURN_TYPES = ("BBOX","BBOX",) + RETURN_NAMES = ("bboxes_a","bboxes_b",) + FUNCTION = "splitbbox" + CATEGORY = "KJNodes/masking" + DESCRIPTION = """ +Splits the specified bbox list at the given index into two lists. +""" + + def splitbbox(self, bboxes, index): + bboxes_a = bboxes[:index] # Sub-list from the start of bboxes up to (but not including) the index + bboxes_b = bboxes[index:] # Sub-list from the index to the end of bboxes + + return (bboxes_a, bboxes_b,) + +class BboxToInt: + + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + "bboxes": ("BBOX",), + "index": ("INT", {"default": 0,"min": 0, "max": 99999999, "step": 1}), + }, + } + + RETURN_TYPES = ("INT","INT","INT","INT","INT","INT",) + RETURN_NAMES = ("x_min","y_min","width","height", "center_x","center_y",) + FUNCTION = "bboxtoint" + CATEGORY = "KJNodes/masking" + DESCRIPTION = """ +Returns selected index from bounding box list as integers. +""" + def bboxtoint(self, bboxes, index): + x_min, y_min, width, height = bboxes[index] + center_x = int(x_min + width / 2) + center_y = int(y_min + height / 2) + + return (x_min, y_min, width, height, center_x, center_y,) + +class BboxVisualize: + + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + "images": ("IMAGE",), + "bboxes": ("BBOX",), + "line_width": ("INT", {"default": 1,"min": 1, "max": 10, "step": 1}), + "bbox_format": (["xywh", "xyxy"], {"default": "xywh"}), + }, + } + + RETURN_TYPES = ("IMAGE",) + RETURN_NAMES = ("images",) + FUNCTION = "visualizebbox" + DESCRIPTION = """ +Visualizes the specified bbox on the image. +""" + + CATEGORY = "KJNodes/masking" + + def visualizebbox(self, bboxes, images, line_width, bbox_format): + image_list = [] + for image, bbox in zip(images, bboxes): + # Ensure bbox is a sequence of 4 values + if isinstance(bbox, (list, tuple, np.ndarray)) and len(bbox) == 4: + if bbox_format == "xywh": + x_min, y_min, width, height = bbox + elif bbox_format == "xyxy": + x_min, y_min, x_max, y_max = bbox + width = x_max - x_min + height = y_max - y_min + else: + raise ValueError(f"Unknown bbox_format: {bbox_format}") + else: + print("Invalid bbox:", bbox) + continue + + # Ensure bbox coordinates are integers + x_min = int(x_min) + y_min = int(y_min) + width = int(width) + height = int(height) + + # Permute the image dimensions + image = image.permute(2, 0, 1) + + # Clone the image to draw bounding boxes + img_with_bbox = image.clone() + + # Define the color for the bbox, e.g., red + color = torch.tensor([1, 0, 0], dtype=torch.float32) + + # Ensure color tensor matches the image channels + if color.shape[0] != img_with_bbox.shape[0]: + color = color.unsqueeze(1).expand(-1, line_width) + + # Draw lines for each side of the bbox with the specified line width + for lw in range(line_width): + # Top horizontal line + if y_min + lw < img_with_bbox.shape[1]: + img_with_bbox[:, y_min + lw, x_min:x_min + width] = color[:, None] + + # Bottom horizontal line + if y_min + height - lw < img_with_bbox.shape[1]: + img_with_bbox[:, y_min + height - lw, x_min:x_min + width] = color[:, None] + + # Left vertical line + if x_min + lw < img_with_bbox.shape[2]: + img_with_bbox[:, y_min:y_min + height, x_min + lw] = color[:, None] + + # Right vertical line + if x_min + width - lw < img_with_bbox.shape[2]: + img_with_bbox[:, y_min:y_min + height, x_min + width - lw] = color[:, None] + + # Permute the image dimensions back + img_with_bbox = img_with_bbox.permute(1, 2, 0).unsqueeze(0) + image_list.append(img_with_bbox) + + return (torch.cat(image_list, dim=0),) \ No newline at end of file diff --git a/ComfyUI-KJNodes/nodes/curve_nodes.py b/ComfyUI-KJNodes/nodes/curve_nodes.py new file mode 100644 index 0000000000000000000000000000000000000000..08f065e27d1b3a6cdbb663b953c91dc3ac6923f8 --- /dev/null +++ b/ComfyUI-KJNodes/nodes/curve_nodes.py @@ -0,0 +1,1645 @@ +import torch +from torchvision import transforms +import json +from PIL import Image, ImageDraw, ImageFont, ImageFilter +import numpy as np +from ..utility.utility import pil2tensor, tensor2pil +import folder_paths +import base64 +from io import BytesIO + + +def parse_color(color): + if isinstance(color, str) and ',' in color: + return tuple(int(c.strip()) for c in color.split(',')) + return color + +def parse_json_tracks(tracks): + tracks_data = [] + try: + # If tracks is a string, try to parse it as JSON + if isinstance(tracks, str): + parsed = json.loads(tracks.replace("'", '"')) + tracks_data.extend(parsed) + else: + # If tracks is a list of strings, parse each one + for track_str in tracks: + parsed = json.loads(track_str.replace("'", '"')) + tracks_data.append(parsed) + + # Check if we have a single track (dict with x,y) or a list of tracks + if tracks_data and isinstance(tracks_data[0], dict) and 'x' in tracks_data[0]: + # Single track detected, wrap it in a list + tracks_data = [tracks_data] + elif tracks_data and isinstance(tracks_data[0], list) and tracks_data[0] and isinstance(tracks_data[0][0], dict) and 'x' in tracks_data[0][0]: + # Already a list of tracks, nothing to do + pass + else: + # Unexpected format + print(f"Warning: Unexpected track format: {type(tracks_data[0])}") + + except json.JSONDecodeError as e: + print(f"Error parsing tracks JSON: {e}") + tracks_data = [] + + return tracks_data + +def plot_coordinates_to_tensor(coordinates, height, width, bbox_height, bbox_width, size_multiplier, prompt): + import matplotlib + matplotlib.use('Agg') + from matplotlib.backends.backend_agg import FigureCanvasAgg as FigureCanvas + text_color = '#999999' + bg_color = '#353535' + matplotlib.pyplot.rcParams['text.color'] = text_color + fig, ax = matplotlib.pyplot.subplots(figsize=(width/100, height/100), dpi=100) + fig.patch.set_facecolor(bg_color) + ax.set_facecolor(bg_color) + ax.grid(color=text_color, linestyle='-', linewidth=0.5) + ax.set_xlabel('x', color=text_color) + ax.set_ylabel('y', color=text_color) + for text in ax.get_xticklabels() + ax.get_yticklabels(): + text.set_color(text_color) + ax.set_title('position for: ' + prompt) + ax.set_xlabel('X Coordinate') + ax.set_ylabel('Y Coordinate') + #ax.legend().remove() + ax.set_xlim(0, width) # Set the x-axis to match the input latent width + ax.set_ylim(height, 0) # Set the y-axis to match the input latent height, with (0,0) at top-left + # Adjust the margins of the subplot + matplotlib.pyplot.subplots_adjust(left=0.08, right=0.95, bottom=0.05, top=0.95, wspace=0.2, hspace=0.2) + + cmap = matplotlib.pyplot.get_cmap('rainbow') + image_batch = [] + canvas = FigureCanvas(fig) + width, height = fig.get_size_inches() * fig.get_dpi() + # Draw a box at each coordinate + for i, ((x, y), size) in enumerate(zip(coordinates, size_multiplier)): + color_index = i / (len(coordinates) - 1) + color = cmap(color_index) + draw_height = bbox_height * size + draw_width = bbox_width * size + rect = matplotlib.patches.Rectangle((x - draw_width/2, y - draw_height/2), draw_width, draw_height, + linewidth=1, edgecolor=color, facecolor='none', alpha=0.5) + ax.add_patch(rect) + + # Check if there is a next coordinate to draw an arrow to + if i < len(coordinates) - 1: + x1, y1 = coordinates[i] + x2, y2 = coordinates[i + 1] + ax.annotate("", xy=(x2, y2), xytext=(x1, y1), + arrowprops=dict(arrowstyle="->", + linestyle="-", + lw=1, + color=color, + mutation_scale=20)) + canvas.draw() + try: + image_np = np.frombuffer(canvas.tostring_rgb(), dtype='uint8').reshape(int(height), int(width), 3).copy() + except: + image_np = np.frombuffer(canvas.tostring_argb(), dtype='uint8').reshape(int(height), int(width), 4) + image_np = image_np[:, :, [1, 2, 3]] # Convert ARGB to RGB + image_tensor = torch.from_numpy(image_np).float() / 255.0 + image_tensor = image_tensor.unsqueeze(0) + image_batch.append(image_tensor) + + matplotlib.pyplot.close(fig) + image_batch_tensor = torch.cat(image_batch, dim=0) + + return image_batch_tensor + +class PlotCoordinates: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "coordinates": ("STRING", {"forceInput": True}), + "text": ("STRING", {"default": 'title', "multiline": False}), + "width": ("INT", {"default": 512, "min": 8, "max": 4096, "step": 8}), + "height": ("INT", {"default": 512, "min": 8, "max": 4096, "step": 8}), + "bbox_width": ("INT", {"default": 128, "min": 8, "max": 4096, "step": 8}), + "bbox_height": ("INT", {"default": 128, "min": 8, "max": 4096, "step": 8}), + }, + "optional": {"size_multiplier": ("FLOAT", {"default": [1.0], "forceInput": True})}, + } + RETURN_TYPES = ("IMAGE", "INT", "INT", "INT", "INT",) + RETURN_NAMES = ("images", "width", "height", "bbox_width", "bbox_height",) + FUNCTION = "append" + CATEGORY = "KJNodes/experimental" + DESCRIPTION = """ +Plots coordinates to sequence of images using Matplotlib. + +""" + + def append(self, coordinates, text, width, height, bbox_width, bbox_height, size_multiplier=[1.0]): + coordinates = json.loads(coordinates.replace("'", '"')) + coordinates = [(coord['x'], coord['y']) for coord in coordinates] + batch_size = len(coordinates) + if not size_multiplier or len(size_multiplier) != batch_size: + size_multiplier = [0] * batch_size + else: + size_multiplier = size_multiplier * (batch_size // len(size_multiplier)) + size_multiplier[:batch_size % len(size_multiplier)] + + plot_image_tensor = plot_coordinates_to_tensor(coordinates, height, width, bbox_height, bbox_width, size_multiplier, text) + + return (plot_image_tensor, width, height, bbox_width, bbox_height) + +class SplineEditor: + + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + "points_store": ("STRING", {"multiline": False, "advanced": True}), + "coordinates": ("STRING", {"multiline": False, "advanced": True}), + "mask_width": ("INT", {"default": 512, "min": 8, "max": 4096, "step": 8}), + "mask_height": ("INT", {"default": 512, "min": 8, "max": 4096, "step": 8}), + "points_to_sample": ("INT", {"default": 16, "min": 2, "max": 1000, "step": 1}), + "sampling_method": ( + [ + 'path', + 'time', + 'controlpoints', + 'speed' + ], + { + "default": 'time' + }), + "interpolation": ( + [ + 'cardinal', + 'monotone', + 'basis', + 'linear', + 'step-before', + 'step-after', + 'polar', + 'polar-reverse', + 'bezier', + ], + { + "default": 'cardinal' + }), + "tension": ("FLOAT", {"default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01}), + "repeat_output": ("INT", {"default": 1, "min": 1, "max": 4096, "step": 1}), + "float_output_type": ( + [ + 'list', + 'pandas series', + 'tensor', + ], + { + "default": 'list' + }), + }, + "optional": { + "min_value": ("FLOAT", {"default": 0.0, "min": -10000.0, "max": 10000.0, "step": 0.01}), + "max_value": ("FLOAT", {"default": 1.0, "min": -10000.0, "max": 10000.0, "step": 0.01}), + "bg_image": ("IMAGE", ), + } + } + + RETURN_TYPES = ("MASK", "STRING", "FLOAT", "INT", "STRING",) + RETURN_NAMES = ("mask", "coord_str", "float", "count", "normalized_str",) + FUNCTION = "splinedata" + CATEGORY = "KJNodes/weights" + DESCRIPTION = """ +# WORK IN PROGRESS +Do not count on this as part of your workflow yet, +probably contains lots of bugs and stability is not +guaranteed!! + +## Graphical editor to create values for various +## schedules and/or mask batches. + +**Shift + click** to add control point at end. +**Ctrl + click** to add control point (subdivide) between two points. +**Right click on a point** to delete it. +Note that you can't delete from start/end. + +Right click on canvas for context menu: +NEW!: +- Add new spline + - Creates a new spline on same canvas, currently these paths are only outputed + as coordinates. +- Add single point + - Creates a single point that only returns it's current position coords +- Delete spline + - Deletes the currently selected spline, you can select a spline by clicking on + it's path, or cycle through them with the 'Next spline' -option. + +These are purely visual options, doesn't affect the output: + - Toggle handles visibility + - Display sample points: display the points to be returned. + +**points_to_sample** value sets the number of samples +returned from the **drawn spline itself**, this is independent from the +actual control points, so the interpolation type matters. +sampling_method: + - time: samples along the time axis, used for schedules + - path: samples along the path itself, useful for coordinates + - controlpoints: samples only the control points themselves + +output types: + - mask batch + example compatible nodes: anything that takes masks + - list of floats + example compatible nodes: IPAdapter weights + - pandas series + example compatible nodes: anything that takes Fizz' + nodes Batch Value Schedule + - torch tensor + example compatible nodes: unknown +""" + + def splinedata(self, mask_width, mask_height, coordinates, float_output_type, interpolation, + points_to_sample, sampling_method, points_store, tension, repeat_output, + min_value=0.0, max_value=1.0, bg_image=None): + + coordinates = json.loads(coordinates) + + # Handle nested list structure if present + all_normalized = [] + all_normalized_y_values = [] + + # Check if we have a nested list structure + if isinstance(coordinates, list) and len(coordinates) > 0 and isinstance(coordinates[0], list): + # Process each list of coordinates in the nested structure + coordinate_sets = coordinates + else: + # If not nested, treat as a single list of coordinates + coordinate_sets = [coordinates] + + first_spline = coordinate_sets[0] if coordinate_sets else [] + + # Process each set of coordinates + for coord_set in coordinate_sets: + normalized = [] + normalized_y_values = [] + + for coord in coord_set: + coord['x'] = int(round(coord['x'])) + coord['y'] = int(round(coord['y'])) + norm_x = (1.0 - (coord['x'] / mask_height) - 0.0) * (max_value - min_value) + min_value + norm_y = (1.0 - (coord['y'] / mask_height) - 0.0) * (max_value - min_value) + min_value + normalized_y_values.append(norm_y) + normalized.append({'x':norm_x, 'y':norm_y}) + + all_normalized.extend(normalized) + all_normalized_y_values.extend(normalized_y_values) + + # Use the combined normalized values for output + if float_output_type == 'list': + out_floats = all_normalized_y_values * repeat_output + elif float_output_type == 'pandas series': + try: + import pandas as pd + except: + raise Exception("MaskOrImageToWeight: pandas is not installed. Please install pandas to use this output_type") + out_floats = pd.Series(all_normalized_y_values * repeat_output), + elif float_output_type == 'tensor': + out_floats = torch.tensor(all_normalized_y_values * repeat_output, dtype=torch.float32) + + # Create a color map for grayscale intensities + color_map = lambda y: torch.full((mask_height, mask_width, 3), y, dtype=torch.float32) + + # Create a color map for grayscale intensities (from first spline only) + color_map = lambda y: torch.full((mask_height, mask_width, 3), y, dtype=torch.float32) + mask_tensors = [color_map(y) for y in normalized_y_values] + masks_out = torch.stack(mask_tensors) + masks_out = masks_out.repeat(repeat_output, 1, 1, 1) + masks_out = masks_out.mean(dim=-1) + + single_spline_count = len(first_spline) + + if bg_image is None: + return (masks_out, json.dumps(coordinates if len(coordinates) > 1 else coordinates[0]), out_floats, single_spline_count, json.dumps(all_normalized)) + else: + transform = transforms.ToPILImage() + image = transform(bg_image[0].permute(2, 0, 1)) + buffered = BytesIO() + image.save(buffered, format="JPEG", quality=75) + + # Encode the image bytes to a Base64 string + img_bytes = buffered.getvalue() + img_base64 = base64.b64encode(img_bytes).decode('utf-8') + + return { + "ui": {"bg_image": [img_base64]}, + "result": (masks_out, json.dumps(coordinates if len(coordinates) > 1 else coordinates[0]), out_floats, single_spline_count, json.dumps(all_normalized)) + } + + +class CreateShapeMaskOnPath: + + RETURN_TYPES = ("MASK", "MASK",) + RETURN_NAMES = ("mask", "mask_inverted",) + FUNCTION = "createshapemask" + CATEGORY = "KJNodes/masking/generate" + DESCRIPTION = """ +Creates a mask or batch of masks with the specified shape. +Locations are center locations. +""" + DEPRECATED = True + + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "shape": ( + [ 'circle', + 'square', + 'triangle', + ], + { + "default": 'circle' + }), + "coordinates": ("STRING", {"forceInput": True}), + "frame_width": ("INT", {"default": 512,"min": 16, "max": 4096, "step": 1}), + "frame_height": ("INT", {"default": 512,"min": 16, "max": 4096, "step": 1}), + "shape_width": ("INT", {"default": 128,"min": 8, "max": 4096, "step": 1}), + "shape_height": ("INT", {"default": 128,"min": 8, "max": 4096, "step": 1}), + }, + "optional": { + "size_multiplier": ("FLOAT", {"default": [1.0], "forceInput": True}), + } + } + + def createshapemask(self, coordinates, frame_width, frame_height, shape_width, shape_height, shape, size_multiplier=[1.0]): + # Define the number of images in the batch + coordinates = coordinates.replace("'", '"') + coordinates = json.loads(coordinates) + + batch_size = len(coordinates) + out = [] + color = "white" + if not size_multiplier or len(size_multiplier) != batch_size: + size_multiplier = [0] * batch_size + else: + size_multiplier = size_multiplier * (batch_size // len(size_multiplier)) + size_multiplier[:batch_size % len(size_multiplier)] + for i, coord in enumerate(coordinates): + image = Image.new("RGB", (frame_width, frame_height), "black") + draw = ImageDraw.Draw(image) + + # Calculate the size for this frame and ensure it's not less than 0 + current_width = max(0, shape_width + i * size_multiplier[i]) + current_height = max(0, shape_height + i * size_multiplier[i]) + + location_x = coord['x'] + location_y = coord['y'] + + if shape == 'circle' or shape == 'square': + # Define the bounding box for the shape + left_up_point = (location_x - current_width // 2, location_y - current_height // 2) + right_down_point = (location_x + current_width // 2, location_y + current_height // 2) + two_points = [left_up_point, right_down_point] + + if shape == 'circle': + draw.ellipse(two_points, fill=color) + elif shape == 'square': + draw.rectangle(two_points, fill=color) + + elif shape == 'triangle': + # Define the points for the triangle + left_up_point = (location_x - current_width // 2, location_y + current_height // 2) # bottom left + right_down_point = (location_x + current_width // 2, location_y + current_height // 2) # bottom right + top_point = (location_x, location_y - current_height // 2) # top point + draw.polygon([top_point, left_up_point, right_down_point], fill=color) + + image = pil2tensor(image) + mask = image[:, :, :, 0] + out.append(mask) + outstack = torch.cat(out, dim=0) + return (outstack, 1.0 - outstack,) + + + +class CreateShapeImageOnPath: + + RETURN_TYPES = ("IMAGE", "MASK",) + RETURN_NAMES = ("image","mask", ) + FUNCTION = "createshapemask" + CATEGORY = "KJNodes/image" + DESCRIPTION = """ +Creates an image or batch of images with the specified shape. +Locations are center locations. +""" + + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "shape": ( + [ 'circle', + 'square', + 'triangle', + ], + { + "default": 'circle' + }), + "coordinates": ("STRING", {"forceInput": True}), + "frame_width": ("INT", {"default": 512,"min": 16, "max": 4096, "step": 1}), + "frame_height": ("INT", {"default": 512,"min": 16, "max": 4096, "step": 1}), + "shape_width": ("INT", {"default": 128,"min": 2, "max": 4096, "step": 1}), + "shape_height": ("INT", {"default": 128,"min": 2, "max": 4096, "step": 1}), + "shape_color": ("STRING", {"default": 'white'}), + "bg_color": ("STRING", {"default": 'black'}), + "blur_radius": ("FLOAT", {"default": 0.0, "min": 0.0, "max": 100, "step": 0.1}), + "intensity": ("FLOAT", {"default": 1.0, "min": 0.01, "max": 100.0, "step": 0.01}), + }, + "optional": { + "size_multiplier": ("FLOAT", {"default": [1.0], "forceInput": True}), + "trailing": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}), + "border_width": ("INT", {"default": 0, "min": 0, "max": 100, "step": 1}), + "border_color": ("STRING", {"default": 'black'}), + } + } + + def createshapemask(self, coordinates, frame_width, frame_height, shape_width, shape_height, shape_color, + bg_color, blur_radius, shape, intensity, size_multiplier=[1.0], trailing=1.0, border_width=0, border_color='black'): + + shape_color = parse_color(shape_color) + border_color = parse_color(border_color) + bg_color = parse_color(bg_color) + coords_list = parse_json_tracks(coordinates) + + batch_size = len(coords_list[0]) + images_list = [] + masks_list = [] + + if not size_multiplier or len(size_multiplier) != batch_size: + size_multiplier = [1] * batch_size + else: + size_multiplier = size_multiplier * (batch_size // len(size_multiplier)) + size_multiplier[:batch_size % len(size_multiplier)] + + previous_output = None + + for i in range(batch_size): + image = Image.new("RGB", (frame_width, frame_height), bg_color) + draw = ImageDraw.Draw(image) + + # Calculate the size for this frame and ensure it's not less than 0 + current_width = shape_width * size_multiplier[i] + current_height = shape_height * size_multiplier[i] + + for coords in coords_list: + location_x = coords[i]['x'] + location_y = coords[i]['y'] + + if shape == 'circle' or shape == 'square': + # Define the bounding box for the shape + left_up_point = (location_x - current_width // 2, location_y - current_height // 2) + right_down_point = (location_x + current_width // 2, location_y + current_height // 2) + two_points = [left_up_point, right_down_point] + + if shape == 'circle': + if border_width > 0: + draw.ellipse(two_points, fill=shape_color, outline=border_color, width=border_width) + else: + draw.ellipse(two_points, fill=shape_color) + elif shape == 'square': + if border_width > 0: + draw.rectangle(two_points, fill=shape_color, outline=border_color, width=border_width) + else: + draw.rectangle(two_points, fill=shape_color) + + elif shape == 'triangle': + # Define the points for the triangle + left_up_point = (location_x - current_width // 2, location_y + current_height // 2) # bottom left + right_down_point = (location_x + current_width // 2, location_y + current_height // 2) # bottom right + top_point = (location_x, location_y - current_height // 2) # top point + + if border_width > 0: + draw.polygon([top_point, left_up_point, right_down_point], fill=shape_color, outline=border_color, width=border_width) + else: + draw.polygon([top_point, left_up_point, right_down_point], fill=shape_color) + + if blur_radius != 0: + image = image.filter(ImageFilter.GaussianBlur(blur_radius)) + # Blend the current image with the accumulated image + + image = pil2tensor(image) + if trailing != 1.0 and previous_output is not None: + # Add the decayed previous output to the current frame + image += trailing * previous_output + image = image / image.max() + previous_output = image + image = image * intensity + mask = image[:, :, :, 0] + masks_list.append(mask) + images_list.append(image) + out_images = torch.cat(images_list, dim=0).cpu().float() + out_masks = torch.cat(masks_list, dim=0) + return (out_images, out_masks) + +class CreateTextOnPath: + + RETURN_TYPES = ("IMAGE", "MASK", "MASK",) + RETURN_NAMES = ("image", "mask", "mask_inverted",) + FUNCTION = "createtextmask" + CATEGORY = "KJNodes/masking/generate" + DESCRIPTION = """ +Creates a mask or batch of masks with the specified text. +Locations are center locations. +""" + + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "coordinates": ("STRING", {"forceInput": True}), + "text": ("STRING", {"default": 'text', "multiline": True}), + "frame_width": ("INT", {"default": 512,"min": 16, "max": 4096, "step": 1}), + "frame_height": ("INT", {"default": 512,"min": 16, "max": 4096, "step": 1}), + "font": (folder_paths.get_filename_list("kjnodes_fonts"), ), + "font_size": ("INT", {"default": 42}), + "alignment": ( + [ 'left', + 'center', + 'right' + ], + {"default": 'center'} + ), + "text_color": ("STRING", {"default": 'white'}), + }, + "optional": { + "size_multiplier": ("FLOAT", {"default": [1.0], "forceInput": True}), + } + } + + def createtextmask(self, coordinates, frame_width, frame_height, font, font_size, text, text_color, alignment, size_multiplier=[1.0]): + coordinates = coordinates.replace("'", '"') + coordinates = json.loads(coordinates) + + batch_size = len(coordinates) + mask_list = [] + image_list = [] + color = parse_color(text_color) + font_path = folder_paths.get_full_path("kjnodes_fonts", font) + + if len(size_multiplier) != batch_size: + size_multiplier = size_multiplier * (batch_size // len(size_multiplier)) + size_multiplier[:batch_size % len(size_multiplier)] + + for i, coord in enumerate(coordinates): + image = Image.new("RGB", (frame_width, frame_height), "black") + draw = ImageDraw.Draw(image) + lines = text.split('\n') # Split the text into lines + # Apply the size multiplier to the font size for this iteration + current_font_size = int(font_size * size_multiplier[i]) + current_font = ImageFont.truetype(font_path, current_font_size) + line_heights = [current_font.getbbox(line)[3] for line in lines] # List of line heights + total_text_height = sum(line_heights) # Total height of text block + + # Calculate the starting Y position to center the block of text + start_y = coord['y'] - total_text_height // 2 + for j, line in enumerate(lines): + text_width, text_height = current_font.getbbox(line)[2], line_heights[j] + if alignment == 'left': + location_x = coord['x'] + elif alignment == 'center': + location_x = int(coord['x'] - text_width // 2) + elif alignment == 'right': + location_x = int(coord['x'] - text_width) + + location_y = int(start_y + sum(line_heights[:j])) + text_position = (location_x, location_y) + # Draw the text + try: + draw.text(text_position, line, fill=color, font=current_font, features=['-liga']) + except: + draw.text(text_position, line, fill=color, font=current_font) + + image = pil2tensor(image) + non_black_pixels = (image > 0).any(dim=-1) + mask = non_black_pixels.to(image.dtype) + mask_list.append(mask) + image_list.append(image) + + out_images = torch.cat(image_list, dim=0).cpu().float() + out_masks = torch.cat(mask_list, dim=0) + return (out_images, out_masks, 1.0 - out_masks,) + +class CreateGradientFromCoords: + + RETURN_TYPES = ("IMAGE", ) + RETURN_NAMES = ("image", ) + FUNCTION = "generate" + CATEGORY = "KJNodes/image" + DESCRIPTION = """ +Creates a gradient image from coordinates. +""" + + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "coordinates": ("STRING", {"forceInput": True}), + "frame_width": ("INT", {"default": 512,"min": 16, "max": 4096, "step": 1}), + "frame_height": ("INT", {"default": 512,"min": 16, "max": 4096, "step": 1}), + "start_color": ("STRING", {"default": 'white'}), + "end_color": ("STRING", {"default": 'black'}), + "multiplier": ("FLOAT", {"default": 1.0, "min": 0.01, "max": 100.0, "step": 0.01}), + }, + } + + def generate(self, coordinates, frame_width, frame_height, start_color, end_color, multiplier): + # Parse the coordinates + coordinates = json.loads(coordinates.replace("'", '"')) + + # Create an image + image = Image.new("RGB", (frame_width, frame_height)) + draw = ImageDraw.Draw(image) + + # Extract start and end points for the gradient + start_coord = coordinates[0] + end_coord = coordinates[1] + + start_color = parse_color(start_color) + end_color = parse_color(end_color) + + # Calculate the gradient direction (vector) + gradient_direction = (end_coord['x'] - start_coord['x'], end_coord['y'] - start_coord['y']) + gradient_length = (gradient_direction[0] ** 2 + gradient_direction[1] ** 2) ** 0.5 + + # Iterate over each pixel in the image + for y in range(frame_height): + for x in range(frame_width): + # Calculate the projection of the point on the gradient line + point_vector = (x - start_coord['x'], y - start_coord['y']) + projection = (point_vector[0] * gradient_direction[0] + point_vector[1] * gradient_direction[1]) / gradient_length + projection = max(min(projection, gradient_length), 0) # Clamp the projection value + + # Calculate the blend factor for the current pixel + blend = projection * multiplier / gradient_length + + # Determine the color of the current pixel + color = ( + int(start_color[0] + (end_color[0] - start_color[0]) * blend), + int(start_color[1] + (end_color[1] - start_color[1]) * blend), + int(start_color[2] + (end_color[2] - start_color[2]) * blend) + ) + + # Set the pixel color + draw.point((x, y), fill=color) + + # Convert the PIL image to a tensor (assuming such a function exists in your context) + image_tensor = pil2tensor(image) + + return (image_tensor,) + +class GradientToFloat: + + RETURN_TYPES = ("FLOAT", "FLOAT",) + RETURN_NAMES = ("float_x", "float_y", ) + FUNCTION = "sample" + CATEGORY = "KJNodes/image" + DESCRIPTION = """ +Calculates list of floats from image. +""" + + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "image": ("IMAGE", ), + "steps": ("INT", {"default": 10, "min": 2, "max": 10000, "step": 1}), + }, + } + + def sample(self, image, steps): + # Assuming image is a tensor with shape [B, H, W, C] + B, H, W, C = image.shape + + # Sample along the width axis (W) + w_intervals = torch.linspace(0, W - 1, steps=steps, dtype=torch.int64) + # Assuming we're sampling from the first batch and the first channel + w_sampled = image[0, :, w_intervals, 0] + + # Sample along the height axis (H) + h_intervals = torch.linspace(0, H - 1, steps=steps, dtype=torch.int64) + # Assuming we're sampling from the first batch and the first channel + h_sampled = image[0, h_intervals, :, 0] + + # Taking the mean across the height for width sampling, and across the width for height sampling + w_values = w_sampled.mean(dim=0).tolist() + h_values = h_sampled.mean(dim=1).tolist() + + return (w_values, h_values) + +class MaskOrImageToWeight: + + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "output_type": ( + [ + 'list', + 'pandas series', + 'tensor', + 'string' + ], + { + "default": 'list' + }), + }, + "optional": { + "images": ("IMAGE",), + "masks": ("MASK",), + }, + + } + RETURN_TYPES = ("FLOAT", "STRING",) + FUNCTION = "execute" + CATEGORY = "KJNodes/weights" + DESCRIPTION = """ +Gets the mean values from mask or image batch +and returns that as the selected output type. +""" + + def execute(self, output_type, images=None, masks=None): + mean_values = [] + if masks is not None and images is None: + for mask in masks: + mean_values.append(mask.mean().item()) + elif masks is None and images is not None: + for image in images: + mean_values.append(image.mean().item()) + elif masks is not None and images is not None: + raise Exception("MaskOrImageToWeight: Use either mask or image input only.") + + # Convert mean_values to the specified output_type + if output_type == 'list': + out = mean_values + elif output_type == 'pandas series': + try: + import pandas as pd + except: + raise Exception("MaskOrImageToWeight: pandas is not installed. Please install pandas to use this output_type") + out = pd.Series(mean_values), + elif output_type == 'tensor': + out = torch.tensor(mean_values, dtype=torch.float32), + return (out, [str(value) for value in mean_values],) + +class WeightScheduleConvert: + + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "input_values": ("FLOAT", {"default": 0.0, "forceInput": True}), + "output_type": ( + [ + 'match_input', + 'list', + 'pandas series', + 'tensor', + ], + { + "default": 'list' + }), + "invert": ("BOOLEAN", {"default": False}), + "repeat": ("INT", {"default": 1,"min": 1, "max": 255, "step": 1}), + }, + "optional": { + "remap_to_frames": ("INT", {"default": 0}), + "interpolation_curve": ("FLOAT", {"forceInput": True}), + "remap_values": ("BOOLEAN", {"default": False}), + "remap_min": ("FLOAT", {"default": 0.0, "min": -100000, "max": 100000.0, "step": 0.01}), + "remap_max": ("FLOAT", {"default": 1.0, "min": -100000, "max": 100000.0, "step": 0.01}), + }, + + } + RETURN_TYPES = ("FLOAT", "STRING", "INT",) + FUNCTION = "execute" + CATEGORY = "KJNodes/weights" + DESCRIPTION = """ +Converts different value lists/series to another type. +""" + + def detect_input_type(self, input_values): + import pandas as pd + if isinstance(input_values, list): + return 'list' + elif isinstance(input_values, pd.Series): + return 'pandas series' + elif isinstance(input_values, torch.Tensor): + return 'tensor' + else: + raise ValueError("Unsupported input type") + + def execute(self, input_values, output_type, invert, repeat, remap_to_frames=0, interpolation_curve=None, remap_min=0.0, remap_max=1.0, remap_values=False): + import pandas as pd + input_type = self.detect_input_type(input_values) + + if input_type == 'pandas series': + float_values = input_values.tolist() + elif input_type == 'tensor': + float_values = input_values + else: + float_values = input_values + + if invert: + float_values = [1 - value for value in float_values] + + if interpolation_curve is not None: + interpolated_pattern = [] + orig_float_values = float_values + for value in interpolation_curve: + min_val = min(orig_float_values) + max_val = max(orig_float_values) + # Normalize the values to [0, 1] + normalized_values = [(value - min_val) / (max_val - min_val) for value in orig_float_values] + # Interpolate the normalized values to the new frame count + remapped_float_values = np.interp(np.linspace(0, 1, int(remap_to_frames * value)), np.linspace(0, 1, len(normalized_values)), normalized_values).tolist() + interpolated_pattern.extend(remapped_float_values) + float_values = interpolated_pattern + else: + # Remap float_values to match target_frame_amount + if remap_to_frames > 0 and remap_to_frames != len(float_values): + min_val = min(float_values) + max_val = max(float_values) + # Normalize the values to [0, 1] + normalized_values = [(value - min_val) / (max_val - min_val) for value in float_values] + # Interpolate the normalized values to the new frame count + float_values = np.interp(np.linspace(0, 1, remap_to_frames), np.linspace(0, 1, len(normalized_values)), normalized_values).tolist() + + float_values = float_values * repeat + if remap_values: + float_values = self.remap_values(float_values, remap_min, remap_max) + + if output_type == 'list': + out = float_values, + elif output_type == 'pandas series': + out = pd.Series(float_values), + elif output_type == 'tensor': + if input_type == 'pandas series': + out = torch.tensor(float_values.values, dtype=torch.float32), + else: + out = torch.tensor(float_values, dtype=torch.float32), + elif output_type == 'match_input': + out = float_values, + return (out, [str(value) for value in float_values], [int(value) for value in float_values]) + + def remap_values(self, values, target_min, target_max): + # Determine the current range + current_min = min(values) + current_max = max(values) + current_range = current_max - current_min + + # Determine the target range + target_range = target_max - target_min + + # Perform the linear interpolation for each value + remapped_values = [(value - current_min) / current_range * target_range + target_min for value in values] + + return remapped_values + + +class FloatToMask: + + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "input_values": ("FLOAT", {"forceInput": True, "default": 0}), + "width": ("INT", {"default": 100, "min": 1}), + "height": ("INT", {"default": 100, "min": 1}), + }, + } + RETURN_TYPES = ("MASK",) + FUNCTION = "execute" + CATEGORY = "KJNodes/masking/generate" + DESCRIPTION = """ +Generates a batch of masks based on the input float values. +The batch size is determined by the length of the input float values. +Each mask is generated with the specified width and height. +""" + + def execute(self, input_values, width, height): + import pandas as pd + # Ensure input_values is a list + if isinstance(input_values, (float, int)): + input_values = [input_values] + elif isinstance(input_values, pd.Series): + input_values = input_values.tolist() + elif isinstance(input_values, list) and all(isinstance(item, list) for item in input_values): + input_values = [item for sublist in input_values for item in sublist] + + # Generate a batch of masks based on the input_values + masks = [] + for value in input_values: + # Assuming value is a float between 0 and 1 representing the mask's intensity + mask = torch.ones((height, width), dtype=torch.float32) * value + masks.append(mask) + masks_out = torch.stack(masks, dim=0) + + return(masks_out,) +class WeightScheduleExtend: + + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "input_values_1": ("FLOAT", {"default": 0.0, "forceInput": True}), + "input_values_2": ("FLOAT", {"default": 0.0, "forceInput": True}), + "output_type": ( + [ + 'match_input', + 'list', + 'pandas series', + 'tensor', + ], + { + "default": 'match_input' + }), + }, + + } + RETURN_TYPES = ("FLOAT",) + FUNCTION = "execute" + CATEGORY = "KJNodes/weights" + DESCRIPTION = """ +Extends, and converts if needed, different value lists/series +""" + + def detect_input_type(self, input_values): + import pandas as pd + if isinstance(input_values, list): + return 'list' + elif isinstance(input_values, pd.Series): + return 'pandas series' + elif isinstance(input_values, torch.Tensor): + return 'tensor' + else: + raise ValueError("Unsupported input type") + + def execute(self, input_values_1, input_values_2, output_type): + import pandas as pd + input_type_1 = self.detect_input_type(input_values_1) + input_type_2 = self.detect_input_type(input_values_2) + # Convert input_values_2 to the same format as input_values_1 if they do not match + if not input_type_1 == input_type_2: + print("Converting input_values_2 to the same format as input_values_1") + if input_type_1 == 'pandas series': + # Convert input_values_2 to a pandas Series + float_values_2 = pd.Series(input_values_2) + elif input_type_1 == 'tensor': + # Convert input_values_2 to a tensor + float_values_2 = torch.tensor(input_values_2, dtype=torch.float32) + else: + print("Input types match, no conversion needed") + # If the types match, no conversion is needed + float_values_2 = input_values_2 + + float_values = input_values_1 + float_values_2 + + if output_type == 'list': + return float_values, + elif output_type == 'pandas series': + return pd.Series(float_values), + elif output_type == 'tensor': + if input_type_1 == 'pandas series': + return torch.tensor(float_values.values, dtype=torch.float32), + else: + return torch.tensor(float_values, dtype=torch.float32), + elif output_type == 'match_input': + return float_values, + else: + raise ValueError(f"Unsupported output_type: {output_type}") + +class FloatToSigmas: + @classmethod + def INPUT_TYPES(s): + return {"required": + { + "float_list": ("FLOAT", {"default": 0.0, "forceInput": True}), + } + } + RETURN_TYPES = ("SIGMAS",) + RETURN_NAMES = ("SIGMAS",) + CATEGORY = "KJNodes/noise" + FUNCTION = "customsigmas" + DESCRIPTION = """ +Creates a sigmas tensor from list of float values. + +""" + def customsigmas(self, float_list): + return torch.tensor(float_list, dtype=torch.float32), + +class SigmasToFloat: + @classmethod + def INPUT_TYPES(s): + return {"required": + { + "sigmas": ("SIGMAS",), + } + } + RETURN_TYPES = ("FLOAT",) + RETURN_NAMES = ("float",) + CATEGORY = "KJNodes/noise" + FUNCTION = "customsigmas" + DESCRIPTION = """ +Creates a float list from sigmas tensors. + +""" + def customsigmas(self, sigmas): + return sigmas.tolist(), + +class GLIGENTextBoxApplyBatchCoords: + @classmethod + def INPUT_TYPES(s): + return {"required": {"conditioning_to": ("CONDITIONING", ), + "latents": ("LATENT", ), + "clip": ("CLIP", ), + "gligen_textbox_model": ("GLIGEN", ), + "coordinates": ("STRING", {"forceInput": True}), + "text": ("STRING", {"multiline": True}), + "width": ("INT", {"default": 128, "min": 8, "max": 4096, "step": 8}), + "height": ("INT", {"default": 128, "min": 8, "max": 4096, "step": 8}), + }, + "optional": {"size_multiplier": ("FLOAT", {"default": [1.0], "forceInput": True})}, + } + RETURN_TYPES = ("CONDITIONING", "IMAGE", ) + RETURN_NAMES = ("conditioning", "coord_preview", ) + FUNCTION = "append" + CATEGORY = "KJNodes/experimental" + DESCRIPTION = """ +This node allows scheduling GLIGEN text box positions in a batch, +to be used with AnimateDiff-Evolved. Intended to pair with the +Spline Editor -node. + +GLIGEN model can be downloaded through the Manage's "Install Models" menu. +Or directly from here: +https://huggingface.co/comfyanonymous/GLIGEN_pruned_safetensors/tree/main + +Inputs: +- **latents** input is used to calculate batch size +- **clip** is your standard text encoder, use same as for the main prompt +- **gligen_textbox_model** connects to GLIGEN Loader +- **coordinates** takes a json string of points, directly compatible +with the spline editor node. +- **text** is the part of the prompt to set position for +- **width** and **height** are the size of the GLIGEN bounding box + +Outputs: +- **conditioning** goes between to clip text encode and the sampler +- **coord_preview** is an optional preview of the coordinates and +bounding boxes. + +""" + + def append(self, latents, coordinates, conditioning_to, clip, gligen_textbox_model, text, width, height, size_multiplier=[1.0]): + coordinates = json.loads(coordinates.replace("'", '"')) + coordinates = [(coord['x'], coord['y']) for coord in coordinates] + + batch_size = sum(tensor.size(0) for tensor in latents.values()) + if len(coordinates) != batch_size: + print("GLIGENTextBoxApplyBatchCoords WARNING: The number of coordinates does not match the number of latents") + + c = [] + _, cond_pooled = clip.encode_from_tokens(clip.tokenize(text), return_pooled=True) + + for t in conditioning_to: + n = [t[0], t[1].copy()] + + position_params_batch = [[] for _ in range(batch_size)] # Initialize a list of empty lists for each batch item + if len(size_multiplier) != batch_size: + size_multiplier = size_multiplier * (batch_size // len(size_multiplier)) + size_multiplier[:batch_size % len(size_multiplier)] + + for i in range(batch_size): + x_position, y_position = coordinates[i] + position_param = (cond_pooled, int((height // 8) * size_multiplier[i]), int((width // 8) * size_multiplier[i]), (y_position - height // 2) // 8, (x_position - width // 2) // 8) + position_params_batch[i].append(position_param) # Append position_param to the correct sublist + + prev = [] + if "gligen" in n[1]: + prev = n[1]['gligen'][2] + else: + prev = [[] for _ in range(batch_size)] + # Concatenate prev and position_params_batch, ensuring both are lists of lists + # and each sublist corresponds to a batch item + combined_position_params = [prev_item + batch_item for prev_item, batch_item in zip(prev, position_params_batch)] + n[1]['gligen'] = ("position_batched", gligen_textbox_model, combined_position_params) + c.append(n) + + image_height = latents['samples'].shape[-2] * 8 + image_width = latents['samples'].shape[-1] * 8 + plot_image_tensor = plot_coordinates_to_tensor(coordinates, image_height, image_width, height, width, size_multiplier, text) + + return (c, plot_image_tensor,) + +class CreateInstanceDiffusionTracking: + + RETURN_TYPES = ("TRACKING", "STRING", "INT", "INT", "INT", "INT",) + RETURN_NAMES = ("tracking", "prompt", "width", "height", "bbox_width", "bbox_height",) + FUNCTION = "tracking" + CATEGORY = "KJNodes/InstanceDiffusion" + DESCRIPTION = """ +Creates tracking data to be used with InstanceDiffusion: +https://github.com/logtd/ComfyUI-InstanceDiffusion + +InstanceDiffusion prompt format: +"class_id.class_name": "prompt", +for example: +"1.head": "((head))", +""" + + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "coordinates": ("STRING", {"forceInput": True}), + "width": ("INT", {"default": 512,"min": 16, "max": 4096, "step": 1}), + "height": ("INT", {"default": 512,"min": 16, "max": 4096, "step": 1}), + "bbox_width": ("INT", {"default": 512,"min": 16, "max": 4096, "step": 1}), + "bbox_height": ("INT", {"default": 512,"min": 16, "max": 4096, "step": 1}), + "class_name": ("STRING", {"default": "class_name"}), + "class_id": ("INT", {"default": 0,"min": 0, "max": 255, "step": 1}), + "prompt": ("STRING", {"default": "prompt", "multiline": True}), + }, + "optional": { + "size_multiplier": ("FLOAT", {"default": [1.0], "forceInput": True}), + "fit_in_frame": ("BOOLEAN", {"default": True}), + } + } + + def tracking(self, coordinates, class_name, class_id, width, height, bbox_width, bbox_height, prompt, size_multiplier=[1.0], fit_in_frame=True): + # Define the number of images in the batch + coordinates = coordinates.replace("'", '"') + coordinates = json.loads(coordinates) + + tracked = {} + tracked[class_name] = {} + batch_size = len(coordinates) + # Initialize a list to hold the coordinates for the current ID + id_coordinates = [] + if not size_multiplier or len(size_multiplier) != batch_size: + size_multiplier = [0] * batch_size + else: + size_multiplier = size_multiplier * (batch_size // len(size_multiplier)) + size_multiplier[:batch_size % len(size_multiplier)] + for i, coord in enumerate(coordinates): + x = coord['x'] + y = coord['y'] + adjusted_bbox_width = bbox_width * size_multiplier[i] + adjusted_bbox_height = bbox_height * size_multiplier[i] + # Calculate the top left and bottom right coordinates + top_left_x = x - adjusted_bbox_width // 2 + top_left_y = y - adjusted_bbox_height // 2 + bottom_right_x = x + adjusted_bbox_width // 2 + bottom_right_y = y + adjusted_bbox_height // 2 + + if fit_in_frame: + # Clip the coordinates to the frame boundaries + top_left_x = max(0, top_left_x) + top_left_y = max(0, top_left_y) + bottom_right_x = min(width, bottom_right_x) + bottom_right_y = min(height, bottom_right_y) + # Ensure width and height are positive + adjusted_bbox_width = max(1, bottom_right_x - top_left_x) + adjusted_bbox_height = max(1, bottom_right_y - top_left_y) + + # Update the coordinates with the new width and height + bottom_right_x = top_left_x + adjusted_bbox_width + bottom_right_y = top_left_y + adjusted_bbox_height + + # Append the top left and bottom right coordinates to the list for the current ID + id_coordinates.append([top_left_x, top_left_y, bottom_right_x, bottom_right_y, width, height]) + + class_id = int(class_id) + # Assign the list of coordinates to the specified ID within the class_id dictionary + tracked[class_name][class_id] = id_coordinates + + prompt_string = "" + for class_name, class_data in tracked.items(): + for class_id in class_data.keys(): + class_id_str = str(class_id) + # Use the incoming prompt for each class name and ID + prompt_string += f'"{class_id_str}.{class_name}": "({prompt})",\n' + + # Remove the last comma and newline + prompt_string = prompt_string.rstrip(",\n") + + return (tracked, prompt_string, width, height, bbox_width, bbox_height) + +class AppendInstanceDiffusionTracking: + + RETURN_TYPES = ("TRACKING", "STRING",) + RETURN_NAMES = ("tracking", "prompt",) + FUNCTION = "append" + CATEGORY = "KJNodes/InstanceDiffusion" + DESCRIPTION = """ +Appends tracking data to be used with InstanceDiffusion: +https://github.com/logtd/ComfyUI-InstanceDiffusion + +""" + + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "tracking_1": ("TRACKING", {"forceInput": True}), + "tracking_2": ("TRACKING", {"forceInput": True}), + }, + "optional": { + "prompt_1": ("STRING", {"default": "", "forceInput": True}), + "prompt_2": ("STRING", {"default": "", "forceInput": True}), + } + } + + def append(self, tracking_1, tracking_2, prompt_1="", prompt_2=""): + tracking_copy = tracking_1.copy() + # Check for existing class names and class IDs, and raise an error if they exist + for class_name, class_data in tracking_2.items(): + if class_name not in tracking_copy: + tracking_copy[class_name] = class_data + else: + # If the class name exists, merge the class data from tracking_2 into tracking_copy + # This will add new class IDs under the same class name without raising an error + tracking_copy[class_name].update(class_data) + prompt_string = prompt_1 + "," + prompt_2 + return (tracking_copy, prompt_string) + +class InterpolateCoords: + + RETURN_TYPES = ("STRING",) + RETURN_NAMES = ("coordinates",) + FUNCTION = "interpolate" + CATEGORY = "KJNodes/experimental" + DESCRIPTION = """ +Interpolates coordinates based on a curve. +""" + + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "coordinates": ("STRING", {"forceInput": True}), + "interpolation_curve": ("FLOAT", {"forceInput": True}), + + }, + } + + def interpolate(self, coordinates, interpolation_curve): + # Parse the JSON string to get the list of coordinates + coordinates = json.loads(coordinates.replace("'", '"')) + + # Convert the list of dictionaries to a list of (x, y) tuples for easier processing + coordinates = [(coord['x'], coord['y']) for coord in coordinates] + + # Calculate the total length of the original path + path_length = sum(np.linalg.norm(np.array(coordinates[i]) - np.array(coordinates[i-1])) + for i in range(1, len(coordinates))) + + # Initialize variables for interpolation + interpolated_coords = [] + current_length = 0 + current_index = 0 + + # Iterate over the normalized curve + for normalized_length in interpolation_curve: + target_length = normalized_length * path_length # Convert to the original scale + while current_index < len(coordinates) - 1: + segment_start, segment_end = np.array(coordinates[current_index]), np.array(coordinates[current_index + 1]) + segment_length = np.linalg.norm(segment_end - segment_start) + if current_length + segment_length >= target_length: + break + current_length += segment_length + current_index += 1 + + # Interpolate between the last two points + if current_index < len(coordinates) - 1: + p1, p2 = np.array(coordinates[current_index]), np.array(coordinates[current_index + 1]) + segment_length = np.linalg.norm(p2 - p1) + if segment_length > 0: + t = (target_length - current_length) / segment_length + interpolated_point = p1 + t * (p2 - p1) + interpolated_coords.append(interpolated_point.tolist()) + else: + interpolated_coords.append(p1.tolist()) + else: + # If the target_length is at or beyond the end of the path, add the last coordinate + interpolated_coords.append(coordinates[-1]) + + # Convert back to string format if necessary + interpolated_coords_str = "[" + ", ".join([f"{{'x': {round(coord[0])}, 'y': {round(coord[1])}}}" for coord in interpolated_coords]) + "]" + print(interpolated_coords_str) + + return (interpolated_coords_str,) + +class DrawInstanceDiffusionTracking: + + RETURN_TYPES = ("IMAGE",) + RETURN_NAMES = ("image", ) + FUNCTION = "draw" + CATEGORY = "KJNodes/InstanceDiffusion" + DESCRIPTION = """ +Draws the tracking data from +CreateInstanceDiffusionTracking -node. + +""" + + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "image": ("IMAGE", ), + "tracking": ("TRACKING", {"forceInput": True}), + "box_line_width": ("INT", {"default": 2, "min": 1, "max": 10, "step": 1}), + "draw_text": ("BOOLEAN", {"default": True}), + "font": (folder_paths.get_filename_list("kjnodes_fonts"), ), + "font_size": ("INT", {"default": 20}), + }, + } + + def draw(self, image, tracking, box_line_width, draw_text, font, font_size): + import matplotlib.cm as cm + + modified_images = [] + + colormap = cm.get_cmap('rainbow', len(tracking)) + if draw_text: + font_path = folder_paths.get_full_path("kjnodes_fonts", font) + font = ImageFont.truetype(font_path, font_size) + + # Iterate over each image in the batch + for i in range(image.shape[0]): + # Extract the current image and convert it to a PIL image + current_image = image[i, :, :, :].permute(2, 0, 1) + pil_image = transforms.ToPILImage()(current_image) + + draw = ImageDraw.Draw(pil_image) + + # Iterate over the bounding boxes for the current image + for j, (class_name, class_data) in enumerate(tracking.items()): + for class_id, bbox_list in class_data.items(): + # Check if the current index is within the bounds of the bbox_list + if i < len(bbox_list): + bbox = bbox_list[i] + # Ensure bbox is a list or tuple before unpacking + if isinstance(bbox, (list, tuple)): + x1, y1, x2, y2, _, _ = bbox + # Convert coordinates to integers + x1, y1, x2, y2 = int(x1), int(y1), int(x2), int(y2) + # Generate a color from the rainbow colormap + color = tuple(int(255 * x) for x in colormap(j / len(tracking)))[:3] + # Draw the bounding box on the image with the generated color + draw.rectangle([x1, y1, x2, y2], outline=color, width=box_line_width) + if draw_text: + # Draw the class name and ID as text above the box with the generated color + text = f"{class_id}.{class_name}" + # Calculate the width and height of the text + _, _, text_width, text_height = draw.textbbox((0, 0), text=text, font=font) + # Position the text above the top-left corner of the box + text_position = (x1, y1 - text_height) + draw.text(text_position, text, fill=color, font=font) + else: + print(f"Unexpected data type for bbox: {type(bbox)}") + + # Convert the drawn image back to a torch tensor and adjust back to (H, W, C) + modified_image_tensor = transforms.ToTensor()(pil_image).permute(1, 2, 0) + modified_images.append(modified_image_tensor) + + # Stack the modified images back into a batch + image_tensor_batch = torch.stack(modified_images).cpu().float() + + return image_tensor_batch, + +class PointsEditor: + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + "points_store": ("STRING", {"multiline": False, "advanced": True}), + "coordinates": ("STRING", {"multiline": False, "socketless": True, "advanced": True}), + "neg_coordinates": ("STRING", {"multiline": False, "socketless": True, "advanced": True}), + "bbox_store": ("STRING", {"multiline": False, "advanced": True}), + "bboxes": ("STRING", {"multiline": False, "socketless": True, "advanced": True}), + "bbox_format": ( + [ + 'xyxy', + 'xywh', + ], + ), + "width": ("INT", {"default": 512, "min": 8, "max": 4096, "step": 8}), + "height": ("INT", {"default": 512, "min": 8, "max": 4096, "step": 8}), + "normalize": ("BOOLEAN", {"default": False}), + }, + "optional": { + "bg_image": ("IMAGE", ), + }, + } + + RETURN_TYPES = ("STRING", "STRING", "BBOX", "MASK", "IMAGE") + RETURN_NAMES = ("positive_coords", "negative_coords", "bbox", "bbox_mask", "cropped_image") + FUNCTION = "pointdata" + CATEGORY = "KJNodes/experimental" + DESCRIPTION = """ +# WORK IN PROGRESS +Do not count on this as part of your workflow yet, +probably contains lots of bugs and stability is not +guaranteed!! + +## Graphical editor to create coordinates + +**Shift + click** to add a positive (green) point. +**Shift + right click** to add a negative (red) point. +**Right click on a point** to delete it. +**Ctrl + click** to draw a bounding box. +**Drag bbox corners** to resize, **drag inside** to move. +**Right click on bbox** to delete it. + +To add an image select the node and copy/paste or drag in the image. +Or from the bg_image input on queue (first frame of the batch). + +**THE IMAGE IS SAVED TO THE NODE AND WORKFLOW METADATA** +you can clear the image from the context menu by right clicking on the canvas + +""" + + def pointdata(self, points_store, bbox_store, width, height, coordinates, neg_coordinates, normalize, bboxes, bbox_format="xyxy", bg_image=None): + coordinates = json.loads(coordinates) + if not coordinates: + raise ValueError("No points on the canvas. Use Shift+click to add positive points or Shift+right-click to add negative points before executing.") + pos_coordinates = [] + for coord in coordinates: + coord['x'] = int(round(coord['x'])) + coord['y'] = int(round(coord['y'])) + if normalize: + norm_x = coord['x'] / width + norm_y = coord['y'] / height + pos_coordinates.append({'x': norm_x, 'y': norm_y}) + else: + pos_coordinates.append({'x': coord['x'], 'y': coord['y']}) + + if neg_coordinates: + coordinates = json.loads(neg_coordinates) + neg_coordinates = [] + for coord in coordinates: + coord['x'] = int(round(coord['x'])) + coord['y'] = int(round(coord['y'])) + if normalize: + norm_x = coord['x'] / width + norm_y = coord['y'] / height + neg_coordinates.append({'x': norm_x, 'y': norm_y}) + else: + neg_coordinates.append({'x': coord['x'], 'y': coord['y']}) + + # Create a blank mask + mask = np.zeros((height, width), dtype=np.uint8) + bboxes = json.loads(bboxes) + valid_bboxes = [] + for bbox in bboxes: + if (bbox.get("startX") is None or + bbox.get("startY") is None or + bbox.get("endX") is None or + bbox.get("endY") is None): + continue # Skip this bounding box if any value is None + else: + # Ensure that endX and endY are greater than startX and startY + x_min = min(int(bbox["startX"]), int(bbox["endX"])) + y_min = min(int(bbox["startY"]), int(bbox["endY"])) + x_max = max(int(bbox["startX"]), int(bbox["endX"])) + y_max = max(int(bbox["startY"]), int(bbox["endY"])) + + valid_bboxes.append((x_min, y_min, x_max, y_max)) + + bboxes_xyxy = [] + for bbox in valid_bboxes: + x_min, y_min, x_max, y_max = bbox + bboxes_xyxy.append((x_min, y_min, x_max, y_max)) + mask[y_min:y_max, x_min:x_max] = 1 # Fill the bounding box area with 1s + + if bbox_format == "xywh": + bboxes_xywh = [] + for bbox in valid_bboxes: + x_min, y_min, x_max, y_max = bbox + width = x_max - x_min + height = y_max - y_min + bboxes_xywh.append((x_min, y_min, width, height)) + bboxes = bboxes_xywh + else: + bboxes = bboxes_xyxy + + mask_tensor = torch.from_numpy(mask) + mask_tensor = mask_tensor.unsqueeze(0).float().cpu() + + if bg_image is not None and len(valid_bboxes) > 0: + x_min, y_min, x_max, y_max = bboxes[0] + cropped_image = bg_image[:, y_min:y_max, x_min:x_max, :] + elif bg_image is not None: + cropped_image = bg_image + else: + cropped_image = torch.zeros(1, height, width, 3, dtype=torch.float32) + + if bg_image is None: + return (json.dumps(pos_coordinates), json.dumps(neg_coordinates), bboxes, mask_tensor, cropped_image) + else: + transform = transforms.ToPILImage() + image = transform(bg_image[0].permute(2, 0, 1)) + buffered = BytesIO() + image.save(buffered, format="JPEG", quality=75) + img_base64 = base64.b64encode(buffered.getvalue()).decode('utf-8') + + return { + "ui": {"bg_image": [img_base64]}, + "result": (json.dumps(pos_coordinates), json.dumps(neg_coordinates), bboxes, mask_tensor, cropped_image) + } + +class CutAndDragOnPath: + RETURN_TYPES = ("IMAGE", "MASK",) + RETURN_NAMES = ("image","mask", ) + FUNCTION = "cutanddrag" + CATEGORY = "KJNodes/image" + DESCRIPTION = """ +Cuts the masked area from the image, and drags it along the path. If inpaint is enabled, and no bg_image is provided, the cut area is filled using cv2 TELEA algorithm. +""" + + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "image": ("IMAGE",), + "coordinates": ("STRING", {"forceInput": True}), + "mask": ("MASK",), + "frame_width": ("INT", {"default": 512,"min": 16, "max": 4096, "step": 1}), + "frame_height": ("INT", {"default": 512,"min": 16, "max": 4096, "step": 1}), + "inpaint": ("BOOLEAN", {"default": True}), + }, + "optional": { + "bg_image": ("IMAGE",), + } + } + + def cutanddrag(self, image, coordinates, mask, frame_width, frame_height, inpaint, bg_image=None): + # Parse coordinates + coords_list = parse_json_tracks(coordinates) + + batch_size = len(coords_list[0]) + images_list = [] + masks_list = [] + + # Convert input image and mask to PIL + input_image = tensor2pil(image)[0] + input_mask = tensor2pil(mask)[0] + + # Find masked region bounds + mask_array = np.array(input_mask) + y_indices, x_indices = np.where(mask_array > 0) + if len(x_indices) == 0 or len(y_indices) == 0: + return (image, mask) + + x_min, x_max = x_indices.min(), x_indices.max() + y_min, y_max = y_indices.min(), y_indices.max() + + # Cut out the masked region + cut_width = x_max - x_min + cut_height = y_max - y_min + cut_image = input_image.crop((x_min, y_min, x_max, y_max)) + cut_mask = input_mask.crop((x_min, y_min, x_max, y_max)) + + # Create inpainted background + if bg_image is None: + background = input_image.copy() + # Inpaint the cut area + if inpaint: + import cv2 + border = 5 # Create small border around cut area for better inpainting + fill_mask = Image.new("L", background.size, 0) + draw = ImageDraw.Draw(fill_mask) + draw.rectangle([x_min-border, y_min-border, x_max+border, y_max+border], fill=255) + background = cv2.inpaint( + np.array(background), + np.array(fill_mask), + inpaintRadius=3, + flags=cv2.INPAINT_TELEA + ) + background = Image.fromarray(background) + else: + background = tensor2pil(bg_image)[0] + + # Create batch of images with cut region at different positions + for i in range(batch_size): + # Create new image + new_image = background.copy() + new_mask = Image.new("L", (frame_width, frame_height), 0) + + # Get target position from coordinates + for coords in coords_list: + target_x = int(coords[i]['x'] - cut_width/2) + target_y = int(coords[i]['y'] - cut_height/2) + + # Paste cut region at new position + new_image.paste(cut_image, (target_x, target_y), cut_mask) + new_mask.paste(cut_mask, (target_x, target_y)) + + # Convert to tensor and append + image_tensor = pil2tensor(new_image) + mask_tensor = pil2tensor(new_mask) + + images_list.append(image_tensor) + masks_list.append(mask_tensor) + + # Stack tensors into batches + out_images = torch.cat(images_list, dim=0).cpu().float() + out_masks = torch.cat(masks_list, dim=0) + + return (out_images, out_masks) \ No newline at end of file diff --git a/ComfyUI-KJNodes/nodes/image_nodes.py b/ComfyUI-KJNodes/nodes/image_nodes.py new file mode 100644 index 0000000000000000000000000000000000000000..2e2f243569b50cf1bae6b9635f4f75cdd5185b08 --- /dev/null +++ b/ComfyUI-KJNodes/nodes/image_nodes.py @@ -0,0 +1,4802 @@ +import numpy as np +import time +import torch +import torch.nn.functional as F +import torchvision.transforms as T +import base64 +import random +import math +import os +import re +import json +import importlib +import hashlib +import pathlib +import logging +from io import BytesIO + +try: + import cv2 + HAS_CV2 = True +except: + logging.warning("OpenCV not installed") + HAS_CV2 = False + +from PIL import ImageGrab, ImageDraw, ImageFont, Image, ImageOps, ImageSequence, ImageStat +from PIL.PngImagePlugin import PngInfo + +from nodes import MAX_RESOLUTION, SaveImage +from comfy_extras.nodes_mask import composite +from comfy.cli_args import args +from comfy.utils import ProgressBar, common_upscale, tiled_scale_multidim +from comfy import model_management +from comfy_api.latest import io, InputImpl, Types, ui +from fractions import Fraction +import node_helpers +import folder_paths + +from ..utility.utility import string_to_color + +try: + from server import PromptServer, BinaryEventTypes +except: + PromptServer = None + BinaryEventTypes = None +from concurrent.futures import ThreadPoolExecutor + +script_directory = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) + +class ImagePass: + @classmethod + def INPUT_TYPES(s): + return { + "required": { + }, + "optional": { + "image": ("IMAGE",), + }, + } + RETURN_TYPES = ("IMAGE",) + FUNCTION = "passthrough" + CATEGORY = "KJNodes/image" + DESCRIPTION = """ +Passes the image through without modifying it. +""" + + def passthrough(self, image=None): + return image, + +class ColorMatch: + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + "image_ref": ("IMAGE",), + "image_target": ("IMAGE",), + "method": ( + [ + 'mkl', + 'hm', + 'reinhard', + 'mvgd', + 'hm-mvgd-hm', + 'hm-mkl-hm', + ], { + "default": 'mkl' + }), + }, + "optional": { + "strength": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}), + "multithread": ("BOOLEAN", {"default": True}), + } + } + + CATEGORY = "KJNodes/image" + + RETURN_TYPES = ("IMAGE",) + RETURN_NAMES = ("image",) + FUNCTION = "colormatch" + DESCRIPTION = """ +color-matcher enables color transfer across images which comes in handy for automatic +color-grading of photographs, paintings and film sequences as well as light-field +and stopmotion corrections. + +The methods behind the mappings are based on the approach from Reinhard et al., +the Monge-Kantorovich Linearization (MKL) as proposed by Pitie et al. and our analytical solution +to a Multi-Variate Gaussian Distribution (MVGD) transfer in conjunction with classical histogram +matching. As shown below our HM-MVGD-HM compound outperforms existing methods. +https://github.com/hahnec/color-matcher/ + +""" + + def colormatch(self, image_ref, image_target, method, strength=1.0, multithread=True): + # Skip unnecessary processing + if strength == 0: + return (image_target,) + + try: + from color_matcher import ColorMatcher + except: + raise Exception("Can't import color-matcher, did you install requirements.txt? Manual install: pip install color-matcher") + + image_ref = image_ref.cpu() + image_target = image_target.cpu() + batch_size = image_target.size(0) + + images_target = image_target.squeeze() + images_ref = image_ref.squeeze() + + image_ref_np = images_ref.numpy() + images_target_np = images_target.numpy() + + def process(i): + cm = ColorMatcher() + image_target_np_i = images_target_np if batch_size == 1 else images_target[i].numpy() + image_ref_np_i = image_ref_np if image_ref.size(0) == 1 else images_ref[i].numpy() + try: + image_result = cm.transfer(src=image_target_np_i, ref=image_ref_np_i, method=method) # Avoid potential blur when only the fully color-matched image is used + if strength != 1: + image_result = image_target_np_i + strength * (image_result - image_target_np_i) + + return torch.from_numpy(image_result) + + except Exception as e: + logging.warning(f"Thread {i} error: {e}") + return torch.from_numpy(image_target_np_i) # fallback + + if multithread and batch_size > 1: + max_threads = min(os.cpu_count() or 1, batch_size) + with ThreadPoolExecutor(max_workers=max_threads) as executor: + out = list(executor.map(process, range(batch_size))) + else: + out = [process(i) for i in range(batch_size)] + + out = torch.stack(out, dim=0).to(torch.float32) + out.clamp_(0, 1) + return (out,) + +class ColorMatchV2(io.ComfyNode): + @classmethod + def define_schema(cls): + return io.Schema( + node_id="ColorMatchV2", + category="KJNodes/image", + description=""" +color-matcher enables color transfer across images which comes in handy for automatic +color-grading of photographs, paintings and film sequences as well as light-field +and stopmotion corrections. + +The methods behind the mappings are based on the approach from Reinhard et al., +the Monge-Kantorovich Linearization (MKL) as proposed by Pitie et al. and our analytical solution +to a Multi-Variate Gaussian Distribution (MVGD) transfer in conjunction with classical histogram +matching. As shown below our HM-MVGD-HM compound outperforms existing methods. +https://github.com/hahnec/color-matcher/ + +'reinhard_lab_gpu' method uses Kornia for GPU-accelerated color transfer in Lab color space. +""", + inputs=[ + io.Image.Input("image_target"), + io.Image.Input("image_ref"), + io.Combo.Input("method", + options=['mkl', 'hm', 'reinhard', 'mvgd', 'hm-mvgd-hm', 'hm-mkl-hm', 'reinhard_lab_gpu'], + default='mkl'), + io.Float.Input("strength", default=1.0, min=0.0, max=10.0, step=0.01), + io.Boolean.Input("multithread", default=True), + ], + outputs=[ + io.Image.Output(display_name="image"), + ], + ) + + @classmethod + def execute(cls, image_target, image_ref, method, strength=1.0, multithread=True) -> io.NodeOutput: + # Skip unnecessary processing + if strength == 0: + return io.NodeOutput(image_target) + + if method == "reinhard_lab_gpu": + import kornia + device = model_management.get_torch_device() + + B, H, W, C = image_target.shape + + src_bchw = image_target.to(device).permute(0, 3, 1, 2).contiguous() # (B, H, W, C) -> (B, C, H, W) + ref_bchw = image_ref.to(device).permute(0, 3, 1, 2).contiguous() + # RGB->Lab + src_lab = kornia.color.rgb_to_lab(src_bchw) + ref_lab = kornia.color.rgb_to_lab(ref_bchw) + + src_lab_flat = src_lab.view(B, C, -1) # (B, C, HW) + ref_lab_flat = ref_lab.view(ref_lab.shape[0], C, -1) # (B or 1, C, HW) + + src_std, src_mean = torch.std_mean(src_lab_flat, dim=-1, keepdim=True, unbiased=False) + ref_std, ref_mean = torch.std_mean(ref_lab_flat, dim=-1, keepdim=True, unbiased=False) + src_std = src_std.clamp_min_(1e-6) + + if ref_lab.shape[0] == 1 and B > 1: + ref_mean = ref_mean.expand(B, -1, -1) + ref_std = ref_std.expand(B, -1, -1) + + corrected_lab_flat = (src_lab_flat - src_mean) * (ref_std / src_std) + ref_mean + corrected_lab = corrected_lab_flat.view(B, C, H, W) + + # Lab->RGB + corrected_rgb_01 = kornia.color.lab_to_rgb(corrected_lab) + out = (1.0 - strength) * src_bchw + strength * corrected_rgb_01 + out = out.permute(0, 2, 3, 1).contiguous() # (B, C, H, W) -> (B, H, W, C) + + return io.NodeOutput(out.cpu().float().clamp_(0, 1)) + + try: + from color_matcher import ColorMatcher + except: + raise Exception("Can't import color-matcher, did you install requirements.txt? Manual install: pip install color-matcher") + + batch_size = image_target.size(0) + ref_batch_size = image_ref.size(0) + + def process(i): + cm = ColorMatcher() + image_target_np = image_target[i].cpu().numpy() + image_ref_np = image_ref[min(i, ref_batch_size - 1)].cpu().numpy() + try: + image_result = cm.transfer(src=image_target_np, ref=image_ref_np, method=method) + if strength != 1: + image_result = image_target_np + strength * (image_result - image_target_np) + + return torch.from_numpy(image_result) + + except Exception as e: + logging.error(f"Thread {i} error: {e}") + return torch.from_numpy(image_target_np) # fallback + if multithread and batch_size > 1: + max_threads = min(os.cpu_count() or 1, batch_size) + with ThreadPoolExecutor(max_workers=max_threads) as executor: + out = list(executor.map(process, range(batch_size))) + else: + out = [process(i) for i in range(batch_size)] + + out = torch.stack(out, dim=0).to(torch.float32).clamp_(0, 1) + + return io.NodeOutput(out) + +class SaveImageWithAlpha: + def __init__(self): + self.output_dir = folder_paths.get_output_directory() + self.type = "output" + self.prefix_append = "" + + @classmethod + def INPUT_TYPES(s): + return {"required": + {"images": ("IMAGE", ), + "mask": ("MASK", ), + "filename_prefix": ("STRING", {"default": "ComfyUI"})}, + "hidden": {"prompt": "PROMPT", "extra_pnginfo": "EXTRA_PNGINFO"}, + } + + RETURN_TYPES = () + FUNCTION = "save_images_alpha" + OUTPUT_NODE = True + CATEGORY = "KJNodes/image" + DESCRIPTION = """ +Saves an image and mask as .PNG with the mask as the alpha channel. +""" + + def save_images_alpha(self, images, mask, filename_prefix="ComfyUI_image_with_alpha", prompt=None, extra_pnginfo=None): + filename_prefix += self.prefix_append + full_output_folder, filename, counter, subfolder, filename_prefix = folder_paths.get_save_image_path(filename_prefix, self.output_dir, images[0].shape[1], images[0].shape[0]) + results = list() + def file_counter(): + max_counter = 0 + # Loop through the existing files + for existing_file in sorted(os.listdir(full_output_folder)): + # Check if the file matches the expected format + match = re.fullmatch(fr"{filename}_(\d+)_?\.[a-zA-Z0-9]+", existing_file) + if match: + # Extract the numeric portion of the filename + file_counter = int(match.group(1)) + # Update the maximum counter value if necessary + if file_counter > max_counter: + max_counter = file_counter + return max_counter + + for image, alpha in zip(images, mask): + i = 255. * image.cpu().numpy() + a = 255. * (1.0 - alpha.cpu().float()).numpy() + img = Image.fromarray(np.clip(i, 0, 255).astype(np.uint8)) + + # Resize the mask to match the image size + a_resized = Image.fromarray(a).resize(img.size, Image.LANCZOS) + a_resized = np.clip(a_resized, 0, 255).astype(np.uint8) + img.putalpha(Image.fromarray(a_resized, mode='L')) + metadata = None + if not args.disable_metadata: + metadata = PngInfo() + if prompt is not None: + metadata.add_text("prompt", json.dumps(prompt)) + if extra_pnginfo is not None: + for x in extra_pnginfo: + metadata.add_text(x, json.dumps(extra_pnginfo[x])) + + # Increment the counter by 1 to get the next available value + counter = file_counter() + 1 + file = f"{filename}_{counter:05}.png" + img.save(os.path.join(full_output_folder, file), pnginfo=metadata, compress_level=4) + results.append({ + "filename": file, + "subfolder": subfolder, + "type": self.type + }) + + return { "ui": { "images": results } } + +class ImageConcanate: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "image1": ("IMAGE",), + "image2": ("IMAGE",), + "direction": ( + [ 'right', + 'down', + 'left', + 'up', + ], + { + "default": 'right' + }), + "match_image_size": ("BOOLEAN", {"default": True}), + }} + + RETURN_TYPES = ("IMAGE",) + FUNCTION = "concatenate" + CATEGORY = "KJNodes/image" + DESCRIPTION = """ +Concatenates the image2 to image1 in the specified direction. +""" + + def concatenate(self, image1, image2, direction, match_image_size, first_image_shape=None): + # Check if the batch sizes are different + batch_size1 = image1.shape[0] + batch_size2 = image2.shape[0] + + if batch_size1 != batch_size2: + # Calculate the number of repetitions needed + max_batch_size = max(batch_size1, batch_size2) + repeats1 = max_batch_size - batch_size1 + repeats2 = max_batch_size - batch_size2 + + # Repeat the last image to match the largest batch size + if repeats1 > 0: + last_image1 = image1[-1].unsqueeze(0).repeat(repeats1, 1, 1, 1) + image1 = torch.cat([image1.clone(), last_image1], dim=0) + if repeats2 > 0: + last_image2 = image2[-1].unsqueeze(0).repeat(repeats2, 1, 1, 1) + image2 = torch.cat([image2.clone(), last_image2], dim=0) + + if match_image_size: + # Use first_image_shape if provided; otherwise, default to image1's shape + target_shape = first_image_shape if first_image_shape is not None else image1.shape + + original_height = image2.shape[1] + original_width = image2.shape[2] + original_aspect_ratio = original_width / original_height + + if direction in ['left', 'right']: + # Match the height and adjust the width to preserve aspect ratio + target_height = target_shape[1] # B, H, W, C format + target_width = int(target_height * original_aspect_ratio) + elif direction in ['up', 'down']: + # Match the width and adjust the height to preserve aspect ratio + target_width = target_shape[2] # B, H, W, C format + target_height = int(target_width / original_aspect_ratio) + + # Adjust image2 to the expected format for common_upscale + image2_for_upscale = image2.movedim(-1, 1) # Move C to the second position (B, C, H, W) + + # Resize image2 to match the target size while preserving aspect ratio + image2_resized = common_upscale(image2_for_upscale, target_width, target_height, "lanczos", "disabled") + + # Adjust image2 back to the original format (B, H, W, C) after resizing + image2_resized = image2_resized.movedim(1, -1) + else: + image2_resized = image2 + + # Ensure both images have the same number of channels + channels_image1 = image1.shape[-1] + channels_image2 = image2_resized.shape[-1] + + if channels_image1 != channels_image2: + if channels_image1 < channels_image2: + # Add alpha channel to image1 if image2 has it + alpha_channel = torch.ones((*image1.shape[:-1], channels_image2 - channels_image1), device=image1.device) + image1 = torch.cat((image1, alpha_channel), dim=-1) + else: + # Add alpha channel to image2 if image1 has it + alpha_channel = torch.ones((*image2_resized.shape[:-1], channels_image1 - channels_image2), device=image2_resized.device) + image2_resized = torch.cat((image2_resized, alpha_channel), dim=-1) + + + # Concatenate based on the specified direction + if direction == 'right': + concatenated_image = torch.cat((image1, image2_resized), dim=2) # Concatenate along width + elif direction == 'down': + concatenated_image = torch.cat((image1, image2_resized), dim=1) # Concatenate along height + elif direction == 'left': + concatenated_image = torch.cat((image2_resized, image1), dim=2) # Concatenate along width + elif direction == 'up': + concatenated_image = torch.cat((image2_resized, image1), dim=1) # Concatenate along height + return concatenated_image, + +class ImageConcatFromBatch: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "images": ("IMAGE",), + "num_columns": ("INT", {"default": 3, "min": 1, "max": 255, "step": 1}), + "match_image_size": ("BOOLEAN", {"default": False}), + "max_resolution": ("INT", {"default": 4096}), + }, + } + + RETURN_TYPES = ("IMAGE",) + FUNCTION = "concat" + CATEGORY = "KJNodes/image" + DESCRIPTION = """ + Concatenates images from a batch into a grid with a specified number of columns. + """ + + def concat(self, images, num_columns, match_image_size, max_resolution): + # Assuming images is a batch of images (B, H, W, C) + batch_size, height, width, channels = images.shape + num_rows = (batch_size + num_columns - 1) // num_columns # Calculate number of rows + + logging.info(f"Initial dimensions: batch_size={batch_size}, height={height}, width={width}, channels={channels}") + logging.info(f"num_rows={num_rows}, num_columns={num_columns}") + + if match_image_size: + target_shape = images[0].shape + + resized_images = [] + for image in images: + original_height = image.shape[0] + original_width = image.shape[1] + original_aspect_ratio = original_width / original_height + + if original_aspect_ratio > 1: + target_height = target_shape[0] + target_width = int(target_height * original_aspect_ratio) + else: + target_width = target_shape[1] + target_height = int(target_width / original_aspect_ratio) + + logging.info(f"Resizing image from ({original_height}, {original_width}) to ({target_height}, {target_width})") + + # Resize the image to match the target size while preserving aspect ratio + resized_image = common_upscale(image.movedim(-1, 0), target_width, target_height, "lanczos", "disabled") + resized_image = resized_image.movedim(0, -1) # Move channels back to the last dimension + resized_images.append(resized_image) + + # Convert the list of resized images back to a tensor + images = torch.stack(resized_images) + + height, width = target_shape[:2] # Update height and width + + # Initialize an empty grid + grid_height = num_rows * height + grid_width = num_columns * width + + logging.info(f"Grid dimensions before scaling: grid_height={grid_height}, grid_width={grid_width}") + + # Original scale factor calculation remains unchanged + scale_factor = min(max_resolution / grid_height, max_resolution / grid_width, 1.0) + + # Apply scale factor to height and width + scaled_height = height * scale_factor + scaled_width = width * scale_factor + + # Round scaled dimensions to the nearest number divisible by 8 + height = max(1, int(round(scaled_height / 8) * 8)) + width = max(1, int(round(scaled_width / 8) * 8)) + + if abs(scaled_height - height) > 4: + height = max(1, int(round((scaled_height + 4) / 8) * 8)) + if abs(scaled_width - width) > 4: + width = max(1, int(round((scaled_width + 4) / 8) * 8)) + + # Recalculate grid dimensions with adjusted height and width + grid_height = num_rows * height + grid_width = num_columns * width + logging.info(f"Grid dimensions after scaling: grid_height={grid_height}, grid_width={grid_width}") + logging.info(f"Final image dimensions: height={height}, width={width}") + + grid = torch.zeros((grid_height, grid_width, channels), dtype=images.dtype) + + for idx, image in enumerate(images): + resized_image = torch.nn.functional.interpolate(image.unsqueeze(0).permute(0, 3, 1, 2), size=(height, width), mode="bilinear").squeeze().permute(1, 2, 0) + row = idx // num_columns + col = idx % num_columns + grid[row*height:(row+1)*height, col*width:(col+1)*width, :] = resized_image + + return grid.unsqueeze(0), + + +class ImageGridComposite2x2: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "image1": ("IMAGE",), + "image2": ("IMAGE",), + "image3": ("IMAGE",), + "image4": ("IMAGE",), + }} + + RETURN_TYPES = ("IMAGE",) + FUNCTION = "compositegrid" + CATEGORY = "KJNodes/image" + DESCRIPTION = """ +Concatenates the 4 input images into a 2x2 grid. +""" + + def compositegrid(self, image1, image2, image3, image4): + top_row = torch.cat((image1, image2), dim=2) + bottom_row = torch.cat((image3, image4), dim=2) + grid = torch.cat((top_row, bottom_row), dim=1) + return (grid,) + +class ImageGridComposite3x3: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "image1": ("IMAGE",), + "image2": ("IMAGE",), + "image3": ("IMAGE",), + "image4": ("IMAGE",), + "image5": ("IMAGE",), + "image6": ("IMAGE",), + "image7": ("IMAGE",), + "image8": ("IMAGE",), + "image9": ("IMAGE",), + }} + + RETURN_TYPES = ("IMAGE",) + FUNCTION = "compositegrid" + CATEGORY = "KJNodes/image" + DESCRIPTION = """ +Concatenates the 9 input images into a 3x3 grid. +""" + + def compositegrid(self, image1, image2, image3, image4, image5, image6, image7, image8, image9): + top_row = torch.cat((image1, image2, image3), dim=2) + mid_row = torch.cat((image4, image5, image6), dim=2) + bottom_row = torch.cat((image7, image8, image9), dim=2) + grid = torch.cat((top_row, mid_row, bottom_row), dim=1) + return (grid,) + +class ImageBatchTestPattern: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "batch_size": ("INT", {"default": 1,"min": 1, "max": 255, "step": 1}), + "start_from": ("INT", {"default": 0,"min": 0, "max": 255, "step": 1}), + "text_x": ("INT", {"default": 256,"min": 0, "max": 4096, "step": 1}), + "text_y": ("INT", {"default": 256,"min": 0, "max": 4096, "step": 1}), + "width": ("INT", {"default": 512,"min": 16, "max": 4096, "step": 1}), + "height": ("INT", {"default": 512,"min": 16, "max": 4096, "step": 1}), + "font": (folder_paths.get_filename_list("kjnodes_fonts"), ), + "font_size": ("INT", {"default": 255,"min": 8, "max": 4096, "step": 1}), + }} + + RETURN_TYPES = ("IMAGE",) + FUNCTION = "generatetestpattern" + CATEGORY = "KJNodes/text" + + def generatetestpattern(self, batch_size, font, font_size, start_from, width, height, text_x, text_y): + out = [] + # Generate the sequential numbers for each image + numbers = np.arange(start_from, start_from + batch_size) + font_path = folder_paths.get_full_path("kjnodes_fonts", font) + + for number in numbers: + # Create a black image with the number as a random color text + image = Image.new("RGB", (width, height), color='black') + draw = ImageDraw.Draw(image) + + # Generate a random color for the text + font_color = (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255)) + + font = ImageFont.truetype(font_path, font_size) + + # Get the size of the text and position it in the center + text = str(number) + + try: + draw.text((text_x, text_y), text, font=font, fill=font_color, features=['-liga']) + except: + draw.text((text_x, text_y), text, font=font, fill=font_color,) + + # Convert the image to a numpy array and normalize the pixel values + image_np = np.array(image).astype(np.float32) / 255.0 + image_tensor = torch.from_numpy(image_np).unsqueeze(0) + out.append(image_tensor) + out_tensor = torch.cat(out, dim=0) + + return (out_tensor,) + +class ImageGrabPIL: + + @classmethod + def IS_CHANGED(cls): + + return + + RETURN_TYPES = ("IMAGE",) + RETURN_NAMES = ("image",) + FUNCTION = "screencap" + CATEGORY = "KJNodes/image" + DESCRIPTION = """ +Captures an area specified by screen coordinates. +Can be used for realtime diffusion with autoqueue. +""" + + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "x": ("INT", {"default": 0,"min": 0, "max": 4096, "step": 1}), + "y": ("INT", {"default": 0,"min": 0, "max": 4096, "step": 1}), + "width": ("INT", {"default": 512,"min": 0, "max": 4096, "step": 1}), + "height": ("INT", {"default": 512,"min": 0, "max": 4096, "step": 1}), + "num_frames": ("INT", {"default": 1,"min": 1, "max": 255, "step": 1}), + "delay": ("FLOAT", {"default": 0.1,"min": 0.0, "max": 10.0, "step": 0.01}), + }, + } + + def screencap(self, x, y, width, height, num_frames, delay): + start_time = time.time() + captures = [] + bbox = (x, y, x + width, y + height) + + for _ in range(num_frames): + # Capture screen + screen_capture = ImageGrab.grab(bbox=bbox) + screen_capture_torch = torch.from_numpy(np.array(screen_capture, dtype=np.float32) / 255.0).unsqueeze(0) + captures.append(screen_capture_torch) + + # Wait for a short delay if more than one frame is to be captured + if num_frames > 1: + time.sleep(delay) + + elapsed_time = time.time() - start_time + logging.info(f"screengrab took {elapsed_time} seconds.") + + return (torch.cat(captures, dim=0),) + +class Screencap_mss: + + @classmethod + def IS_CHANGED(s, **kwargs): + return float("NaN") + + RETURN_TYPES = ("IMAGE",) + RETURN_NAMES = ("image",) + FUNCTION = "screencap" + CATEGORY = "KJNodes/image" + DESCRIPTION = """ +Captures an area specified by screen coordinates. +Can be used for realtime diffusion with autoqueue. +""" + + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "x": ("INT", {"default": 0,"min": 0, "max": 10000, "step": 1}), + "y": ("INT", {"default": 0,"min": 0, "max": 10000, "step": 1}), + "width": ("INT", {"default": 512,"min": 0, "max": 10000, "step": 1}), + "height": ("INT", {"default": 512,"min": 0, "max": 10000, "step": 1}), + "num_frames": ("INT", {"default": 1,"min": 1, "max": 255, "step": 1}), + "delay": ("FLOAT", {"default": 0.1,"min": 0.0, "max": 10.0, "step": 0.01}), + }, + } + + def screencap(self, x, y, width, height, num_frames, delay): + from mss import mss + captures = [] + with mss() as sct: + bbox = {'top': y, 'left': x, 'width': width, 'height': height} + + for _ in range(num_frames): + sct_img = sct.grab(bbox) + img_np = np.array(sct_img) + img_torch = torch.from_numpy(img_np[..., [2, 1, 0]]).float() / 255.0 + captures.append(img_torch) + + if num_frames > 1: + time.sleep(delay) + + return (torch.stack(captures, 0),) + +class ScreencapStream: + + @classmethod + def IS_CHANGED(s, **kwargs): + return float("NaN") + + RETURN_TYPES = ("IMAGE",) + RETURN_NAMES = ("image",) + FUNCTION = "capture" + CATEGORY = "KJNodes/image" + DESCRIPTION = """ +Captures a frame from a browser screen/window share stream. +Click 'Start capture' to select a screen or window to share. +Live preview is shown in the node. Works with auto-queue. + +Crop controls: +- Drag on preview to draw a crop box +- Drag inside the box to move it +- Drag edges or corners to resize +- Shift+drag to lock aspect ratio +- Right-click or double-click to clear crop +""" + + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "frame_data": ("STRING", {"default": "", "multiline": False}), + "crop_width": ("INT", {"default": 1, "min": 1, "max": MAX_RESOLUTION, "step": 1}), + "crop_height": ("INT", {"default": 1, "min": 1, "max": MAX_RESOLUTION, "step": 1}), + }, + } + + MAX_FRAME_BYTES = 50 * 1024 * 1024 # 50MB base64 limit (PNG is larger than JPEG) + + def capture(self, crop_width, crop_height, frame_data): + if not frame_data: + w = crop_width if crop_width > 0 else 512 + h = crop_height if crop_height > 0 else 512 + return (torch.zeros(1, h, w, 3),) + if len(frame_data) > self.MAX_FRAME_BYTES: + raise ValueError(f"Frame data exceeds {self.MAX_FRAME_BYTES // (1024*1024)}MB limit") + try: + img_bytes = base64.b64decode(frame_data.split(",", 1)[-1]) + except Exception: + raise ValueError("Invalid frame data encoding") + img = Image.open(BytesIO(img_bytes)).convert("RGB") + img_np = np.array(img).astype(np.float32) / 255.0 + img_tensor = torch.from_numpy(img_np).unsqueeze(0) + return (img_tensor,) + +class WebcamCaptureCV2: + + @classmethod + def IS_CHANGED(cls): + return + + RETURN_TYPES = ("IMAGE",) + RETURN_NAMES = ("image",) + FUNCTION = "capture" + CATEGORY = "KJNodes/experimental" + DESCRIPTION = """ +Captures a frame from a webcam using CV2. +Can be used for realtime diffusion with autoqueue. +""" + + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "x": ("INT", {"default": 0,"min": 0, "max": 4096, "step": 1}), + "y": ("INT", {"default": 0,"min": 0, "max": 4096, "step": 1}), + "width": ("INT", {"default": 512,"min": 0, "max": 4096, "step": 1}), + "height": ("INT", {"default": 512,"min": 0, "max": 4096, "step": 1}), + "cam_index": ("INT", {"default": 0,"min": 0, "max": 255, "step": 1}), + "release": ("BOOLEAN", {"default": False}), + }, + } + + def capture(self, x, y, cam_index, width, height, release): + # Check if the camera index has changed or the capture object doesn't exist + if not hasattr(self, "cap") or self.cap is None or self.current_cam_index != cam_index: + if hasattr(self, "cap") and self.cap is not None: + self.cap.release() + self.current_cam_index = cam_index + self.cap = cv2.VideoCapture(cam_index) + try: + self.cap.set(cv2.CAP_PROP_FRAME_WIDTH, width) + self.cap.set(cv2.CAP_PROP_FRAME_HEIGHT, height) + except: + pass + if not self.cap.isOpened(): + raise Exception("Could not open webcam") + + ret, frame = self.cap.read() + if not ret: + raise Exception("Failed to capture image from webcam") + + # Crop the frame to the specified bbox + frame = frame[y:y+height, x:x+width] + img_torch = torch.from_numpy(frame[..., [2, 1, 0]]).float() / 255.0 + + if release: + self.cap.release() + self.cap = None + + return (img_torch.unsqueeze(0),) + +class AddLabel: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "image":("IMAGE",), + "text_x": ("INT", {"default": 10, "min": 0, "max": 4096, "step": 1}), + "text_y": ("INT", {"default": 2, "min": 0, "max": 4096, "step": 1}), + "height": ("INT", {"default": 48, "min": -1, "max": 4096, "step": 1}), + "font_size": ("INT", {"default": 32, "min": 0, "max": 4096, "step": 1}), + "font_color": ("STRING", {"default": "white"}), + "label_color": ("STRING", {"default": "black"}), + "font": (folder_paths.get_filename_list("kjnodes_fonts"), ), + "text": ("STRING", {"default": "Text"}), + "direction": ( + [ 'up', + 'down', + 'left', + 'right', + 'overlay' + ], + { + "default": 'up' + }), + }, + "optional":{ + "caption": ("STRING", {"default": "", "forceInput": True}), + } + } + RETURN_TYPES = ("IMAGE",) + FUNCTION = "addlabel" + CATEGORY = "KJNodes/text" + DESCRIPTION = """ +Creates a new with the given text, and concatenates it to +either above or below the input image. +Note that this changes the input image's height! +Fonts are loaded from this folder: +ComfyUI/custom_nodes/ComfyUI-KJNodes/fonts +""" + + def addlabel(self, image, text_x, text_y, text, height, font_size, font_color, label_color, font, direction, caption=""): + batch_size = image.shape[0] + width = image.shape[2] + + font_path = os.path.join(script_directory, "fonts", "TTNorms-Black.otf") if font == "TTNorms-Black.otf" else folder_paths.get_full_path("kjnodes_fonts", font) + + # Parse colors using helper function + font_color_rgb = string_to_color(font_color) + label_color_rgb = string_to_color(label_color) + + # Convert to tuples for PIL + font_color_tuple = tuple(font_color_rgb[:3]) # RGB only + label_color_tuple = tuple(label_color_rgb[:3]) # RGB only + + def process_image(input_image, caption_text): + font = ImageFont.truetype(font_path, font_size) + lines = [] + for text_line in caption_text.split('\n'): + if text_line.strip() == "": + # Preserve empty lines for multiple newlines + lines.append("") + continue + words = text_line.split() + current_line = [] + for word in words: + if current_line: + test_line = " ".join(current_line + [word]) + else: + test_line = word + try: + test_line_width = font.getbbox(test_line)[2] + except Exception: + test_line_width = font.getsize(test_line)[0] + if test_line_width <= width - 2 * text_x: + current_line.append(word) + else: + lines.append(" ".join(current_line)) + current_line = [word] + if current_line: + lines.append(" ".join(current_line)) + + if direction == 'overlay': + pil_image = Image.fromarray((input_image.cpu().numpy() * 255).astype(np.uint8)) + else: + if height == -1: + # Adjust the image height automatically + margin = 8 + required_height = (text_y + len(lines) * font_size) + margin # Calculate required height + pil_image = Image.new("RGB", (width, required_height), label_color_tuple) + else: + # Initialize with a minimal height + label_image = Image.new("RGB", (width, height), label_color_tuple) + pil_image = label_image + + draw = ImageDraw.Draw(pil_image) + + + y_offset = text_y + for line in lines: + try: + draw.text((text_x, y_offset), line, font=font, fill=font_color_tuple, features=['-liga']) + except: + draw.text((text_x, y_offset), line, font=font, fill=font_color_tuple) + y_offset += font_size + + processed_image = torch.from_numpy(np.array(pil_image).astype(np.float32) / 255.0).unsqueeze(0) + return processed_image + + if caption == "": + processed_images = [process_image(img, text) for img in image] + else: + assert len(caption) == batch_size, f"Number of captions {(len(caption))} does not match number of images" + processed_images = [process_image(img, cap) for img, cap in zip(image, caption)] + processed_batch = torch.cat(processed_images, dim=0) + + # Combine images based on direction + if direction == 'down': + combined_images = torch.cat((image, processed_batch), dim=1) + elif direction == 'up': + combined_images = torch.cat((processed_batch, image), dim=1) + elif direction == 'left': + processed_batch = torch.rot90(processed_batch, 3, (2, 3)).permute(0, 3, 1, 2) + combined_images = torch.cat((processed_batch, image), dim=2) + elif direction == 'right': + processed_batch = torch.rot90(processed_batch, 3, (2, 3)).permute(0, 3, 1, 2) + combined_images = torch.cat((image, processed_batch), dim=2) + else: + combined_images = processed_batch + + return (combined_images,) + +class GetImageSizeAndCount: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "image": ("IMAGE",), + }} + + RETURN_TYPES = ("IMAGE","INT", "INT", "INT",) + RETURN_NAMES = ("image", "width", "height", "count",) + FUNCTION = "getsize" + CATEGORY = "KJNodes/image" + DESCRIPTION = """ +Returns width, height and batch size of the image, +and passes it through unchanged. + +""" + + def getsize(self, image): + width = image.shape[2] + height = image.shape[1] + count = image.shape[0] + return {"ui": { + "text": [f"{count}x{width}x{height}"]}, + "result": (image, width, height, count) + } + +class GetLatentSizeAndCount: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "latent": ("LATENT",), + }} + + RETURN_TYPES = ("LATENT","INT", "INT", "INT", "INT", "INT") + RETURN_NAMES = ("latent", "batch_size", "channels", "frames", "height", "width") + FUNCTION = "getsize" + CATEGORY = "KJNodes/image" + DESCRIPTION = """ +Returns latent tensor dimensions, +and passes the latent through unchanged. + +""" + def getsize(self, latent): + if len(latent["samples"].shape) == 5: + B, C, T, H, W = latent["samples"].shape + elif len(latent["samples"].shape) == 4: + B, C, H, W = latent["samples"].shape + T = 0 + else: + raise ValueError("Invalid latent shape") + + return {"ui": { + "text": [f"{B}x{C}x{T}x{H}x{W}"]}, + "result": (latent, B, C, T, H, W) + } + +class ImageBatchRepeatInterleaving: + RETURN_TYPES = ("IMAGE", "MASK",) + FUNCTION = "repeat" + CATEGORY = "KJNodes/image" + DESCRIPTION = """ +Repeats each image in a batch by the specified number of times. +Example batch of 5 images: 0, 1 ,2, 3, 4 +with repeats 2 becomes batch of 10 images: 0, 0, 1, 1, 2, 2, 3, 3, 4, 4 +""" + + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "images": ("IMAGE",), + "repeats": ("INT", {"default": 1, "min": 1, "max": 4096}), + }, + "optional": { + "mask": ("MASK",), + } + } + + def repeat(self, images, repeats, mask=None): + original_count = images.shape[0] + total_count = original_count * repeats + + repeated_images = torch.repeat_interleave(images, repeats=repeats, dim=0) + if mask is not None: + mask = torch.repeat_interleave(mask, repeats=repeats, dim=0) + else: + mask = torch.zeros((total_count, images.shape[1], images.shape[2]), + device=images.device, dtype=images.dtype) + for i in range(original_count): + mask[i * repeats] = 1.0 + + return (repeated_images, mask) + +class ImageUpscaleWithModelBatched: + @classmethod + def INPUT_TYPES(s): + return {"required": { "upscale_model": ("UPSCALE_MODEL",), + "images": ("IMAGE",), + "per_batch": ("INT", {"default": 16, "min": 1, "max": 4096, "step": 1}), + }, + "optional": { + "downscale_ratio": ("FLOAT", {"default": 1.0, "min": 0.01, "max": 1.0, "step": 0.01}), + "downscale_method": (["nearest-exact", "bilinear", "area", "bicubic", "lanczos"], {"default": "lanczos"}), + "precision": (["float32", "float16", "bfloat16"], {"default": "float32"}), + }} + RETURN_TYPES = ("IMAGE",) + FUNCTION = "upscale" + CATEGORY = "KJNodes/image" + DESCRIPTION = """ +Same as ComfyUI native model upscaling node, +but allows setting sub-batches for reduced VRAM usage. +Optionally downscale the result with a ratio. +""" + def upscale(self, upscale_model, images, per_batch, downscale_ratio=1.0, downscale_method="lanczos", precision="float32"): + dtype = torch.float16 if precision == "float16" else torch.bfloat16 if precision == "bfloat16" else torch.float32 + device = model_management.get_torch_device() + upscale_model.to(device, dtype=dtype) + in_img = images.movedim(-1,-3).to(dtype) + + steps = in_img.shape[0] + pbar = ProgressBar(steps) + t = [] + + for start_idx in range(0, in_img.shape[0], per_batch): + sub_images = upscale_model(in_img[start_idx:start_idx+per_batch].to(device)) + t.append(sub_images.cpu()) + # Calculate the number of images processed in this batch + batch_count = sub_images.shape[0] + # Update the progress bar by the number of images processed in this batch + pbar.update(batch_count) + upscale_model.cpu() + + t = torch.cat(t, dim=0).permute(0, 2, 3, 1).cpu().float() + + # Apply downscaling if ratio is less than 1.0 + if downscale_ratio < 1.0: + original_height = t.shape[1] + original_width = t.shape[2] + new_height = int(original_height * downscale_ratio) + new_width = int(original_width * downscale_ratio) + t = t.movedim(-1, 1) + t = common_upscale(t, new_width, new_height, downscale_method, "disabled") + t = t.movedim(1, -1) + + return (t,) + +class ImageNormalize_Neg1_To_1: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "images": ("IMAGE",), + + }} + RETURN_TYPES = ("IMAGE",) + FUNCTION = "normalize" + CATEGORY = "KJNodes/image" + DESCRIPTION = """ +Normalize the images to be in the range [-1, 1] +""" + + def normalize(self,images): + images = images * 2.0 - 1.0 + return (images,) + +class RemapImageRange: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "image": ("IMAGE",), + "min": ("FLOAT", {"default": 0.0,"min": -10.0, "max": 1.0, "step": 0.01}), + "max": ("FLOAT", {"default": 1.0,"min": 0.0, "max": 10.0, "step": 0.01}), + "clamp": ("BOOLEAN", {"default": True}), + }, + } + + RETURN_TYPES = ("IMAGE",) + FUNCTION = "remap" + CATEGORY = "KJNodes/image" + DESCRIPTION = """ +Remaps the image values to the specified range. +""" + + def remap(self, image, min, max, clamp): + if image.dtype == torch.float16: + image = image.to(torch.float32) + image = min + image * (max - min) + if clamp: + image = torch.clamp(image, min=0.0, max=1.0) + return (image, ) + +class SplitImageChannels: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "image": ("IMAGE",), + }, + } + + RETURN_TYPES = ("IMAGE", "IMAGE", "IMAGE", "MASK") + RETURN_NAMES = ("red", "green", "blue", "mask") + FUNCTION = "split" + CATEGORY = "KJNodes/image" + DESCRIPTION = """ +Splits image channels into images where the selected channel +is repeated for all channels, and the alpha as a mask. +""" + + def split(self, image): + red = image[:, :, :, 0:1] # Red channel + green = image[:, :, :, 1:2] # Green channel + blue = image[:, :, :, 2:3] # Blue channel + if image.shape[3] == 4: + alpha = image[:, :, :, 4] # Alpha channel + else: + alpha = torch.zeros(image.shape[0], image.shape[1], image.shape[2], device=image.device) + + # Repeat the selected channel for all channels + red = torch.cat([red, red, red], dim=3) + green = torch.cat([green, green, green], dim=3) + blue = torch.cat([blue, blue, blue], dim=3) + return (red, green, blue, alpha) + +class MergeImageChannels: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "red": ("IMAGE",), + "green": ("IMAGE",), + "blue": ("IMAGE",), + + }, + "optional": { + "alpha": ("MASK", {"default": None}), + }, + } + + RETURN_TYPES = ("IMAGE",) + RETURN_NAMES = ("image",) + FUNCTION = "merge" + CATEGORY = "KJNodes/image" + DESCRIPTION = """ +Merges channel data into an image. +""" + + def merge(self, red, green, blue, alpha=None): + image = torch.stack([ + red[..., 0, None], # Red channel + green[..., 1, None], # Green channel + blue[..., 2, None] # Blue channel + ], dim=-1) + image = image.squeeze(-2) + if alpha is not None: + image = torch.cat([image, alpha.unsqueeze(-1)], dim=-1) + return (image,) + +class ImagePadForOutpaintMasked: + + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "image": ("IMAGE",), + "left": ("INT", {"default": 0, "min": 0, "max": MAX_RESOLUTION, "step": 8}), + "top": ("INT", {"default": 0, "min": 0, "max": MAX_RESOLUTION, "step": 8}), + "right": ("INT", {"default": 0, "min": 0, "max": MAX_RESOLUTION, "step": 8}), + "bottom": ("INT", {"default": 0, "min": 0, "max": MAX_RESOLUTION, "step": 8}), + "feathering": ("INT", {"default": 0, "min": 0, "max": MAX_RESOLUTION, "step": 1}), + }, + "optional": { + "mask": ("MASK",), + } + } + + RETURN_TYPES = ("IMAGE", "MASK") + FUNCTION = "expand_image" + + CATEGORY = "image" + + def expand_image(self, image, left, top, right, bottom, feathering, mask=None): + if mask is not None: + if torch.allclose(mask, torch.zeros_like(mask)): + logging.warning("The incoming mask is fully black. Handling it as None.") + mask = None + B, H, W, C = image.size() + + new_image = torch.ones( + (B, H + top + bottom, W + left + right, C), + dtype=torch.float32, + ) * 0.5 + + new_image[:, top:top + H, left:left + W, :] = image + + if mask is None: + new_mask = torch.ones( + (B, H + top + bottom, W + left + right), + dtype=torch.float32, + ) + + t = torch.zeros( + (B, H, W), + dtype=torch.float32 + ) + else: + # If a mask is provided, pad it to fit the new image size + mask = F.pad(mask, (left, right, top, bottom), mode='constant', value=0) + mask = 1 - mask + t = torch.zeros_like(mask) + + if feathering > 0 and feathering * 2 < H and feathering * 2 < W: + + for i in range(H): + for j in range(W): + dt = i if top != 0 else H + db = H - i if bottom != 0 else H + + dl = j if left != 0 else W + dr = W - j if right != 0 else W + + d = min(dt, db, dl, dr) + + if d >= feathering: + continue + + v = (feathering - d) / feathering + + if mask is None: + t[:, i, j] = v * v + else: + t[:, top + i, left + j] = v * v + + if mask is None: + new_mask[:, top:top + H, left:left + W] = t + return (new_image, new_mask,) + else: + return (new_image, mask,) + +class ImagePadForOutpaintTargetSize: + upscale_methods = ["nearest-exact", "bilinear", "area", "bicubic", "lanczos"] + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "image": ("IMAGE",), + "target_width": ("INT", {"default": 0, "min": 0, "max": MAX_RESOLUTION, "step": 8}), + "target_height": ("INT", {"default": 0, "min": 0, "max": MAX_RESOLUTION, "step": 8}), + "feathering": ("INT", {"default": 0, "min": 0, "max": MAX_RESOLUTION, "step": 1}), + "upscale_method": (s.upscale_methods,), + }, + "optional": { + "mask": ("MASK",), + } + } + + RETURN_TYPES = ("IMAGE", "MASK") + FUNCTION = "expand_image" + + CATEGORY = "image" + + def expand_image(self, image, target_width, target_height, feathering, upscale_method, mask=None): + B, H, W, C = image.size() + new_height = H + new_width = W + # Calculate the scaling factor while maintaining aspect ratio + scaling_factor = min(target_width / W, target_height / H) + + # Check if the image needs to be downscaled + if scaling_factor < 1: + image = image.movedim(-1,1) + # Calculate the new width and height after downscaling + new_width = int(W * scaling_factor) + new_height = int(H * scaling_factor) + + # Downscale the image + image_scaled = common_upscale(image, new_width, new_height, upscale_method, "disabled").movedim(1,-1) + else: + # If downscaling is not needed, use the original image dimensions + image_scaled = image + + # Ensure mask dimensions match image dimensions + if mask is not None: + mask_scaled = mask.unsqueeze(0) # Add an extra dimension for batch size + mask_scaled = F.interpolate(mask_scaled, size=(new_height, new_width), mode="nearest") + mask_scaled = mask_scaled.squeeze(0) # Remove the extra dimension after interpolation + else: + mask_scaled = None + + # Calculate how much padding is needed to reach the target dimensions + pad_top = max(0, (target_height - new_height) // 2) + pad_bottom = max(0, target_height - new_height - pad_top) + pad_left = max(0, (target_width - new_width) // 2) + pad_right = max(0, target_width - new_width - pad_left) + + # Now call the original expand_image with the calculated padding + return ImagePadForOutpaintMasked.expand_image(self, image_scaled, pad_left, pad_top, pad_right, pad_bottom, feathering, mask_scaled) + +class ImagePrepForICLora: + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "reference_image": ("IMAGE",), + "output_width": ("INT", {"default": 1024, "min": 1, "max": 4096, "step": 1}), + "output_height": ("INT", {"default": 1024, "min": 1, "max": 4096, "step": 1}), + "border_width": ("INT", {"default": 0, "min": 0, "max": 4096, "step": 1}), + }, + "optional": { + "latent_image": ("IMAGE",), + "latent_mask": ("MASK",), + "reference_mask": ("MASK",), + } + } + + RETURN_TYPES = ("IMAGE", "MASK") + FUNCTION = "expand_image" + + CATEGORY = "image" + + def expand_image(self, reference_image, output_width, output_height, border_width, latent_image=None, reference_mask=None, latent_mask=None): + + if reference_mask is not None: + if torch.allclose(reference_mask, torch.zeros_like(reference_mask)): + logging.warning("The incoming mask is fully black. Handling it as None.") + reference_mask = None + image = reference_image + if latent_image is not None: + if image.shape[0] != latent_image.shape[0]: + image = image.repeat(latent_image.shape[0], 1, 1, 1) + B, H, W, C = image.size() + + # Handle mask + if reference_mask is not None: + resized_mask = torch.nn.functional.interpolate( + reference_mask.unsqueeze(1), + size=(H, W), + mode='nearest' + ).squeeze(1) + image = image * resized_mask.unsqueeze(-1) + + # Calculate new width maintaining aspect ratio + new_width = int((W / H) * output_height) + + # Resize image to new height while maintaining aspect ratio + resized_image = common_upscale(image.movedim(-1,1), new_width, output_height, "lanczos", "disabled").movedim(1,-1) + + # Create padded image + if latent_image is None: + pad_image = torch.zeros((B, output_height, output_width, C), device=image.device) + else: + resized_latent_image = common_upscale(latent_image.movedim(-1,1), output_width, output_height, "lanczos", "disabled").movedim(1,-1) + pad_image = resized_latent_image + if latent_mask is not None: + resized_latent_mask = torch.nn.functional.interpolate( + latent_mask.unsqueeze(1), + size=(pad_image.shape[1], pad_image.shape[2]), + mode='nearest' + ).squeeze(1) + + if border_width > 0: + border = torch.zeros((B, output_height, border_width, C), device=image.device) + padded_image = torch.cat((resized_image, border, pad_image), dim=2) + if latent_mask is not None: + padded_mask = torch.zeros((B, padded_image.shape[1], padded_image.shape[2]), device=image.device) + padded_mask[:, :, (new_width + border_width):] = resized_latent_mask + else: + padded_mask = torch.ones((B, padded_image.shape[1], padded_image.shape[2]), device=image.device) + padded_mask[:, :, :new_width + border_width] = 0 + else: + padded_image = torch.cat((resized_image, pad_image), dim=2) + if latent_mask is not None: + padded_mask = torch.zeros((B, padded_image.shape[1], padded_image.shape[2]), device=image.device) + padded_mask[:, :, new_width:] = resized_latent_mask + else: + padded_mask = torch.ones((B, padded_image.shape[1], padded_image.shape[2]), device=image.device) + padded_mask[:, :, :new_width] = 0 + + return (padded_image, padded_mask) + + +class ImageAndMaskPreview(SaveImage): + def __init__(self): + self.output_dir = folder_paths.get_temp_directory() + self.type = "temp" + self.prefix_append = "_temp_" + ''.join(random.choice("abcdefghijklmnopqrstupvxyz") for x in range(5)) + self.compress_level = 4 + + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "mask_opacity": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}), + "mask_color": ("STRING", {"default": "255, 255, 255", "tooltip": "RGB (255,255,255) or RGBA (255,255,255,128) or Hex (#RRGGBB / #RRGGBBAA)"}), + "pass_through": ("BOOLEAN", {"default": False}), + }, + "optional": { + "image": ("IMAGE",), + "mask": ("MASK",), + }, + "hidden": {"prompt": "PROMPT", "extra_pnginfo": "EXTRA_PNGINFO"}, + } + RETURN_TYPES = ("IMAGE",) + RETURN_NAMES = ("composite",) + FUNCTION = "execute" + CATEGORY = "KJNodes/masking" + DESCRIPTION = """ +Preview an image or a mask, when both inputs are used +composites the mask on top of the image. +with pass_through on the preview is disabled and the +composite is returned from the composite slot instead, +this allows for the preview to be passed for video combine +nodes for example. Supports RGBA for mask_color to adjust transparency per color. +""" + + def execute(self, mask_opacity, mask_color, pass_through, filename_prefix="ComfyUI", image=None, mask=None, prompt=None, extra_pnginfo=None): + if mask is not None and image is None: + preview = mask.reshape((-1, 1, mask.shape[-2], mask.shape[-1])).movedim(1, -1).expand(-1, -1, -1, 3) + elif mask is None and image is not None: + preview = image + elif mask is not None and image is not None: + mask_adjusted = mask * mask_opacity + mask_image = mask.reshape((-1, 1, mask.shape[-2], mask.shape[-1])).movedim(1, -1).expand(-1, -1, -1, 3).clone() + + # Use helper function to parse color string + color_list = string_to_color(mask_color) + + # Apply RGB channels + mask_image[:, :, :, 0] = color_list[0] / 255 # Red channel + mask_image[:, :, :, 1] = color_list[1] / 255 # Green channel + mask_image[:, :, :, 2] = color_list[2] / 255 # Blue channel + + if len(color_list) == 4: # Apply Alpha channel if present + alpha_factor = color_list[3] / 255.0 + mask_adjusted = mask_adjusted * alpha_factor + + destination, source = node_helpers.image_alpha_fix(image, mask_image) + destination = destination.clone().movedim(-1, 1) + preview = composite(destination, source.movedim(-1, 1), 0, 0, mask_adjusted, 1, True).movedim(1, -1) + if pass_through: + return (preview, ) + return(self.save_images(preview, filename_prefix, prompt, extra_pnginfo)) + +def crossfade(images_1, images_2, alpha): + crossfade = (1 - alpha) * images_1 + alpha * images_2 + return crossfade +def ease_in(t): + return t * t +def ease_out(t): + return 1 - (1 - t) * (1 - t) +def ease_in_out(t): + return 3 * t * t - 2 * t * t * t +def bounce(t): + if t < 0.5: + return ease_out(t * 2) * 0.5 + else: + return ease_in((t - 0.5) * 2) * 0.5 + 0.5 +def elastic(t): + return math.sin(13 * math.pi / 2 * t) * math.pow(2, 10 * (t - 1)) +def glitchy(t): + return t + 0.1 * math.sin(40 * t) +def exponential_ease_out(t): + return 1 - (1 - t) ** 4 + +easing_functions = { + "linear": lambda t: t, + "ease_in": ease_in, + "ease_out": ease_out, + "ease_in_out": ease_in_out, + "bounce": bounce, + "elastic": elastic, + "glitchy": glitchy, + "exponential_ease_out": exponential_ease_out, +} + +class CrossFadeImages: + + RETURN_TYPES = ("IMAGE",) + FUNCTION = "crossfadeimages" + CATEGORY = "KJNodes/image" + + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "images_1": ("IMAGE",), + "images_2": ("IMAGE",), + "interpolation": (["linear", "ease_in", "ease_out", "ease_in_out", "bounce", "elastic", "glitchy", "exponential_ease_out"],), + "transition_start_index": ("INT", {"default": 1,"min": -4096, "max": 4096, "step": 1}), + "transitioning_frames": ("INT", {"default": 1,"min": 0, "max": 4096, "step": 1}), + "start_level": ("FLOAT", {"default": 0.0,"min": 0.0, "max": 1.0, "step": 0.01}), + "end_level": ("FLOAT", {"default": 1.0,"min": 0.0, "max": 1.0, "step": 0.01}), + }, + } + + def crossfadeimages(self, images_1, images_2, transition_start_index, transitioning_frames, interpolation, start_level, end_level): + + crossfade_images = [] + + if transition_start_index < 0: + transition_start_index = len(images_1) + transition_start_index + if transition_start_index < 0: + raise ValueError("Transition start index is out of range for images_1.") + + transitioning_frames = min(transitioning_frames, len(images_1) - transition_start_index, len(images_2)) + + alphas = torch.linspace(start_level, end_level, transitioning_frames) + for i in range(transitioning_frames): + alpha = alphas[i] + image1 = images_1[transition_start_index + i] + image2 = images_2[i] + easing_function = easing_functions.get(interpolation) + alpha = easing_function(alpha) # Apply the easing function to the alpha value + + crossfade_image = crossfade(image1, image2, alpha) + crossfade_images.append(crossfade_image) + + # Convert crossfade_images to tensor + crossfade_images = torch.stack(crossfade_images, dim=0) + + # Append the beginning of images_1 (before the transition) + beginning_images_1 = images_1[:transition_start_index] + crossfade_images = torch.cat([beginning_images_1, crossfade_images], dim=0) + + # Append the remaining frames of images_2 (after the transition) + remaining_images_2 = images_2[transitioning_frames:] + if len(remaining_images_2) > 0: + crossfade_images = torch.cat([crossfade_images, remaining_images_2], dim=0) + + return (crossfade_images, ) + +class CrossFadeImagesMulti: + RETURN_TYPES = ("IMAGE",) + FUNCTION = "crossfadeimages" + CATEGORY = "KJNodes/image" + + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "inputcount": ("INT", {"default": 2, "min": 2, "max": 1000, "step": 1}), + "image_1": ("IMAGE",), + "interpolation": (["linear", "ease_in", "ease_out", "ease_in_out", "bounce", "elastic", "glitchy", "exponential_ease_out"],), + "transitioning_frames": ("INT", {"default": 1,"min": 0, "max": 4096, "step": 1}), + }, + "optional": { + "image_2": ("IMAGE",), + } + } + + def crossfadeimages(self, inputcount, transitioning_frames, interpolation, **kwargs): + + image_1 = kwargs["image_1"] + first_image_shape = image_1.shape + first_image_device = image_1.device + height = image_1.shape[1] + width = image_1.shape[2] + + easing_function = easing_functions[interpolation] + + for c in range(1, inputcount): + frames = [] + new_image = kwargs.get(f"image_{c + 1}", torch.zeros(first_image_shape)).to(first_image_device) + new_image_height = new_image.shape[1] + new_image_width = new_image.shape[2] + + if new_image_height != height or new_image_width != width: + new_image = common_upscale(new_image.movedim(-1, 1), width, height, "lanczos", "disabled") + new_image = new_image.movedim(1, -1) # Move channels back to the last dimension + + last_frame_image_1 = image_1[-1] + first_frame_image_2 = new_image[0] + + for frame in range(transitioning_frames): + t = frame / (transitioning_frames - 1) + alpha = easing_function(t) + alpha_tensor = torch.tensor(alpha, dtype=last_frame_image_1.dtype, device=last_frame_image_1.device) + frame_image = crossfade(last_frame_image_1, first_frame_image_2, alpha_tensor) + frames.append(frame_image) + + frames = torch.stack(frames) + image_1 = torch.cat((image_1, frames, new_image), dim=0) + + return image_1, + +def transition_images(images_1, images_2, alpha, transition_type, blur_radius, reverse): + width = images_1.shape[1] + height = images_1.shape[0] + + mask = torch.zeros_like(images_1, device=images_1.device) + + alpha = alpha.item() + if reverse: + alpha = 1 - alpha + + #transitions from matteo's essential nodes + if "horizontal slide" in transition_type: + pos = round(width * alpha) + mask[:, :pos, :] = 1.0 + elif "vertical slide" in transition_type: + pos = round(height * alpha) + mask[:pos, :, :] = 1.0 + elif "box" in transition_type: + box_w = round(width * alpha) + box_h = round(height * alpha) + x1 = (width - box_w) // 2 + y1 = (height - box_h) // 2 + x2 = x1 + box_w + y2 = y1 + box_h + mask[y1:y2, x1:x2, :] = 1.0 + elif "circle" in transition_type: + radius = math.ceil(math.sqrt(pow(width, 2) + pow(height, 2)) * alpha / 2) + c_x = width // 2 + c_y = height // 2 + x = torch.arange(0, width, dtype=torch.float32, device="cpu") + y = torch.arange(0, height, dtype=torch.float32, device="cpu") + y, x = torch.meshgrid((y, x), indexing="ij") + circle = ((x - c_x) ** 2 + (y - c_y) ** 2) <= (radius ** 2) + mask[circle] = 1.0 + elif "horizontal door" in transition_type: + bar = math.ceil(height * alpha / 2) + if bar > 0: + mask[:bar, :, :] = 1.0 + mask[-bar:,:, :] = 1.0 + elif "vertical door" in transition_type: + bar = math.ceil(width * alpha / 2) + if bar > 0: + mask[:, :bar,:] = 1.0 + mask[:, -bar:,:] = 1.0 + elif "fade" in transition_type: + mask[:, :, :] = alpha + + mask = gaussian_blur(mask, blur_radius) + + return images_1 * (1 - mask) + images_2 * mask + +def gaussian_blur(mask, blur_radius): + if blur_radius > 0: + kernel_size = int(blur_radius * 2) + 1 + if kernel_size % 2 == 0: + kernel_size += 1 # Ensure kernel size is odd + sigma = blur_radius / 3 + x = torch.arange(-kernel_size // 2 + 1, kernel_size // 2 + 1, dtype=torch.float32) + x = torch.exp(-0.5 * (x / sigma) ** 2) + kernel1d = x / x.sum() + kernel2d = kernel1d[:, None] * kernel1d[None, :] + kernel2d = kernel2d.to(mask.device) + kernel2d = kernel2d.expand(mask.shape[2], 1, kernel2d.shape[0], kernel2d.shape[1]) + mask = mask.permute(2, 0, 1).unsqueeze(0) # Change to [C, H, W] and add batch dimension + mask = F.conv2d(mask, kernel2d, padding=kernel_size // 2, groups=mask.shape[1]) + mask = mask.squeeze(0).permute(1, 2, 0) # Change back to [H, W, C] + return mask + +class TransitionImagesMulti: + RETURN_TYPES = ("IMAGE",) + FUNCTION = "transition" + CATEGORY = "KJNodes/image" + DESCRIPTION = """ +Creates transitions between images. +""" + + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "inputcount": ("INT", {"default": 2, "min": 2, "max": 1000, "step": 1}), + "image_1": ("IMAGE",), + "interpolation": (["linear", "ease_in", "ease_out", "ease_in_out", "bounce", "elastic", "glitchy", "exponential_ease_out"],), + "transition_type": (["horizontal slide", "vertical slide", "box", "circle", "horizontal door", "vertical door", "fade"],), + "transitioning_frames": ("INT", {"default": 2,"min": 2, "max": 4096, "step": 1}), + "blur_radius": ("FLOAT", {"default": 0.0,"min": 0.0, "max": 100.0, "step": 0.1}), + "reverse": ("BOOLEAN", {"default": False}), + "device": (["CPU", "GPU"], {"default": "CPU"}), + }, + "optional": { + "image_2": ("IMAGE",), + } + } + + def transition(self, inputcount, transitioning_frames, transition_type, interpolation, device, blur_radius, reverse, **kwargs): + + gpu = model_management.get_torch_device() + + image_1 = kwargs["image_1"] + height = image_1.shape[1] + width = image_1.shape[2] + first_image_shape = image_1.shape + first_image_device = image_1.device + + easing_function = easing_functions[interpolation] + + for c in range(1, inputcount): + frames = [] + new_image = kwargs.get(f"image_{c + 1}", torch.zeros(first_image_shape)).to(first_image_device) + new_image_height = new_image.shape[1] + new_image_width = new_image.shape[2] + + if new_image_height != height or new_image_width != width: + new_image = common_upscale(new_image.movedim(-1, 1), width, height, "lanczos", "disabled") + new_image = new_image.movedim(1, -1) # Move channels back to the last dimension + + last_frame_image_1 = image_1[-1] + first_frame_image_2 = new_image[0] + if device == "GPU": + last_frame_image_1 = last_frame_image_1.to(gpu) + first_frame_image_2 = first_frame_image_2.to(gpu) + + if reverse: + last_frame_image_1, first_frame_image_2 = first_frame_image_2, last_frame_image_1 + + for frame in range(transitioning_frames): + t = frame / (transitioning_frames - 1) + alpha = easing_function(t) + alpha_tensor = torch.tensor(alpha, dtype=last_frame_image_1.dtype, device=last_frame_image_1.device) + frame_image = transition_images(last_frame_image_1, first_frame_image_2, alpha_tensor, transition_type, blur_radius, reverse) + frames.append(frame_image) + + frames = torch.stack(frames).cpu() + image_1 = torch.cat((image_1, frames, new_image), dim=0) + + return image_1.cpu(), + +class TransitionImagesInBatch: + RETURN_TYPES = ("IMAGE",) + FUNCTION = "transition" + CATEGORY = "KJNodes/image" + DESCRIPTION = """ +Creates transitions between images in a batch. +""" + + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "images": ("IMAGE",), + "interpolation": (["linear", "ease_in", "ease_out", "ease_in_out", "bounce", "elastic", "glitchy", "exponential_ease_out"],), + "transition_type": (["horizontal slide", "vertical slide", "box", "circle", "horizontal door", "vertical door", "fade"],), + "transitioning_frames": ("INT", {"default": 1,"min": 0, "max": 4096, "step": 1}), + "blur_radius": ("FLOAT", {"default": 0.0,"min": 0.0, "max": 100.0, "step": 0.1}), + "reverse": ("BOOLEAN", {"default": False}), + "device": (["CPU", "GPU"], {"default": "CPU"}), + }, + } + + #transitions from matteo's essential nodes + def transition(self, images, transitioning_frames, transition_type, interpolation, device, blur_radius, reverse): + if images.shape[0] == 1: + return images, + + gpu = model_management.get_torch_device() + + easing_function = easing_functions[interpolation] + + images_list = [] + pbar = ProgressBar(images.shape[0] - 1) + for i in range(images.shape[0] - 1): + frames = [] + image_1 = images[i] + image_2 = images[i + 1] + + if device == "GPU": + image_1 = image_1.to(gpu) + image_2 = image_2.to(gpu) + + if reverse: + image_1, image_2 = image_2, image_1 + + for frame in range(transitioning_frames): + t = frame / (transitioning_frames - 1) + alpha = easing_function(t) + alpha_tensor = torch.tensor(alpha, dtype=image_1.dtype, device=image_1.device) + frame_image = transition_images(image_1, image_2, alpha_tensor, transition_type, blur_radius, reverse) + frames.append(frame_image) + pbar.update(1) + + frames = torch.stack(frames).cpu() + images_list.append(frames) + images = torch.cat(images_list, dim=0) + + return images.cpu(), + +class ImageBatchJoinWithTransition: + RETURN_TYPES = ("IMAGE",) + FUNCTION = "transition_batches" + CATEGORY = "KJNodes/image" + DESCRIPTION = """ +Transitions between two batches of images, starting at a specified index in the first batch. +During the transition, frames from both batches are blended frame-by-frame, so the video keeps playing. +""" + + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + "images_1": ("IMAGE",), + "images_2": ("IMAGE",), + "start_index": ("INT", {"default": 0, "min": -10000, "max": 10000, "step": 1}), + "interpolation": (["linear", "ease_in", "ease_out", "ease_in_out", "bounce", "elastic", "glitchy", "exponential_ease_out"],), + "transition_type": (["horizontal slide", "vertical slide", "box", "circle", "horizontal door", "vertical door", "fade"],), + "transitioning_frames": ("INT", {"default": 1, "min": 1, "max": 4096, "step": 1}), + "blur_radius": ("FLOAT", {"default": 0.0, "min": 0.0, "max": 100.0, "step": 0.1}), + "reverse": ("BOOLEAN", {"default": False}), + "device": (["CPU", "GPU"], {"default": "CPU"}), + }, + } + + def transition_batches(self, images_1, images_2, start_index, interpolation, transition_type, transitioning_frames, blur_radius, reverse, device): + if images_1.shape[0] == 0 or images_2.shape[0] == 0: + raise ValueError("Both input batches must have at least one image.") + + if start_index < 0: + start_index = images_1.shape[0] + start_index + if start_index < 0 or start_index > images_1.shape[0]: + raise ValueError("start_index is out of range.") + + gpu = model_management.get_torch_device() + easing_function = easing_functions[interpolation] + out_frames = [] + + # Add images from images_1 up to start_index + if start_index > 0: + out_frames.append(images_1[:start_index]) + + # Determine how many frames we can blend + max_transition = min(transitioning_frames, images_1.shape[0] - start_index, images_2.shape[0]) + + # Blend corresponding frames from both batches + for i in range(max_transition): + img1 = images_1[start_index + i] + img2 = images_2[i] + if device == "GPU": + img1 = img1.to(gpu) + img2 = img2.to(gpu) + if reverse: + img1, img2 = img2, img1 + t = i / (max_transition - 1) if max_transition > 1 else 1.0 + alpha = easing_function(t) + alpha_tensor = torch.tensor(alpha, dtype=img1.dtype, device=img1.device) + frame_image = transition_images(img1, img2, alpha_tensor, transition_type, blur_radius, reverse) + out_frames.append(frame_image.cpu().unsqueeze(0)) + + # Add remaining images from images_2 after transition + if images_2.shape[0] > max_transition: + out_frames.append(images_2[max_transition:]) + + # Concatenate all frames + out = torch.cat(out_frames, dim=0) + return (out.cpu(),) + +class ShuffleImageBatch: + RETURN_TYPES = ("IMAGE",) + FUNCTION = "shuffle" + CATEGORY = "KJNodes/image" + + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "images": ("IMAGE",), + "seed": ("INT", {"default": 123,"min": 0, "max": 0xffffffffffffffff, "step": 1}), + }, + } + + def shuffle(self, images, seed): + torch.manual_seed(seed) + B, H, W, C = images.shape + indices = torch.randperm(B) + shuffled_images = images[indices] + + return shuffled_images, + +class GetImageRangeFromBatch: + + RETURN_TYPES = ("IMAGE", "MASK", ) + FUNCTION = "imagesfrombatch" + CATEGORY = "KJNodes/image" + DESCRIPTION = """ +Returns a range of images from a batch. +""" + + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "start_index": ("INT", {"default": 0,"min": -1, "max": 4096, "step": 1}), + "num_frames": ("INT", {"default": 1,"min": 1, "max": 4096, "step": 1}), + }, + "optional": { + "images": ("IMAGE",), + "masks": ("MASK",), + } + } + + def imagesfrombatch(self, start_index, num_frames, images=None, masks=None): + chosen_images = None + chosen_masks = None + + # Process images if provided + if images is not None: + if start_index == -1: + start_index = max(0, len(images) - num_frames) + if start_index < 0 or start_index >= len(images): + raise ValueError("Start index is out of range") + end_index = min(start_index + num_frames, len(images)) + chosen_images = images[start_index:end_index] + + # Process masks if provided + if masks is not None: + if start_index == -1: + start_index = max(0, len(masks) - num_frames) + if start_index < 0 or start_index >= len(masks): + raise ValueError("Start index is out of range for masks") + end_index = min(start_index + num_frames, len(masks)) + chosen_masks = masks[start_index:end_index] + + return (chosen_images, chosen_masks,) + +class ImageBatchExtendWithOverlap: + + RETURN_TYPES = ("IMAGE", "IMAGE", "IMAGE", ) + RETURN_NAMES = ("source_images", "start_images", "extended_images") + OUTPUT_TOOLTIPS = ( + "The original source images (passthrough)", + "The input images used as the starting point for extension", + "The extended images with overlap, if no new images are provided this will be empty", + ) + FUNCTION = "imagesfrombatch" + CATEGORY = "KJNodes/image" + DESCRIPTION = """ +Helper node for video generation extension +First input source and overlap amount to get the starting frames for the extension. +Then on another copy of the node provide the newly generated frames and choose how to overlap them. +""" + + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "source_images": ("IMAGE", {"tooltip": "The source images to extend"}), + "overlap": ("INT", {"default": 13,"min": 1, "max": 4096, "step": 1, "tooltip": "Number of overlapping frames between source and new images"}), + "overlap_side": (["source", "new_images"], {"default": "source", "tooltip": "Which side to overlap on"}), + "overlap_mode": (["cut", "linear_blend", "ease_in_out", "filmic_crossfade", "perceptual_crossfade"], {"default": "linear_blend", "tooltip": "Method to use for overlapping frames"}), + }, + "optional": { + "new_images": ("IMAGE", {"tooltip": "The new images to extend with"}), + } + } + + def imagesfrombatch(self, source_images, overlap, overlap_side, overlap_mode, new_images=None): + if overlap > len(source_images): + return source_images, source_images, source_images + + if new_images is not None: + if source_images.shape[1:3] != new_images.shape[1:3]: + raise ValueError(f"Source and new images must have the same shape: {source_images.shape[1:3]} vs {new_images.shape[1:3]}") + # Determine where to place the overlap + prefix = source_images[:-overlap] + if overlap_side == "source": + blend_src = source_images[-overlap:] + blend_dst = new_images[:overlap] + elif overlap_side == "new_images": + blend_src = new_images[:overlap] + blend_dst = source_images[-overlap:] + suffix = new_images[overlap:] + + if overlap_mode == "linear_blend": + # Vectorized version - process all frames at once + alpha = torch.linspace(0, 1, overlap + 2, device=blend_src.device, dtype=blend_src.dtype)[1:-1] + alpha = alpha.view(-1, 1, 1, 1) # Shape: [overlap, 1, 1, 1] + blended_images = (1 - alpha) * blend_src + alpha * blend_dst + extended_images = torch.cat((prefix, blended_images, suffix), dim=0) + + elif overlap_mode == "filmic_crossfade": + gamma = 2.2 + alpha = torch.linspace(0, 1, overlap + 2, device=blend_src.device, dtype=blend_src.dtype)[1:-1] + alpha = alpha.view(-1, 1, 1, 1) + linear_src = torch.pow(blend_src, gamma) + linear_dst = torch.pow(blend_dst, gamma) + blended = (1 - alpha) * linear_src + alpha * linear_dst + blended_images = torch.pow(blended, 1.0 / gamma) + extended_images = torch.cat((prefix, blended_images, suffix), dim=0) + + elif overlap_mode == "perceptual_crossfade": + import kornia + alpha = torch.linspace(0, 1, overlap + 2, device=blend_src.device, dtype=blend_src.dtype)[1:-1] + + src_nchw = blend_src.movedim(-1, 1) + dst_nchw = blend_dst.movedim(-1, 1) + lab_src = kornia.color.rgb_to_lab(src_nchw) + lab_dst = kornia.color.rgb_to_lab(dst_nchw) + + # Blend in LAB space + alpha = alpha.view(-1, 1, 1, 1) # [N,1,1,1] for broadcasting + blended_lab = (1 - alpha) * lab_src + alpha * lab_dst + + # Convert back to RGB and reshape + blended_rgb = kornia.color.lab_to_rgb(blended_lab) + blended_images = blended_rgb.movedim(1, -1) # [N,C,H,W] -> [N,H,W,C] + extended_images = torch.cat((prefix, blended_images, suffix), dim=0) + + elif overlap_mode == "ease_in_out": + # Vectorized ease_in_out + t = torch.linspace(0, 1, overlap + 2, device=blend_src.device, dtype=blend_src.dtype)[1:-1] + eased_t = 3 * t * t - 2 * t * t * t # ease_in_out formula + eased_t = eased_t.view(-1, 1, 1, 1) + blended_images = (1 - eased_t) * blend_src + eased_t * blend_dst + extended_images = torch.cat((prefix, blended_images, suffix), dim=0) + + elif overlap_mode == "cut": + extended_images = torch.cat((prefix, suffix), dim=0) + if overlap_side == "new_images": + extended_images = torch.cat((source_images, new_images[overlap:]), dim=0) + elif overlap_side == "source": + extended_images = torch.cat((source_images[:-overlap], new_images), dim=0) + else: + extended_images = torch.zeros((1, 64, 64, 3), device="cpu") + + start_images = source_images[-overlap:] + + return (source_images, start_images, extended_images) + +class GetLatentRangeFromBatch: + + RETURN_TYPES = ("LATENT", ) + FUNCTION = "latentsfrombatch" + CATEGORY = "KJNodes/latents" + DESCRIPTION = """ +Returns a range of latents from a batch. +""" + + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "latents": ("LATENT",), + "start_index": ("INT", {"default": 0,"min": -1, "max": 4096, "step": 1}), + "num_frames": ("INT", {"default": 1,"min": -1, "max": 4096, "step": 1}), + }, + } + + def latentsfrombatch(self, latents, start_index, num_frames): + chosen_latents = None + samples = latents["samples"] + if len(samples.shape) == 4: + B, C, H, W = samples.shape + num_latents = B + elif len(samples.shape) == 5: + B, C, T, H, W = samples.shape + num_latents = T + + if start_index == -1: + start_index = max(0, num_latents - num_frames) + if start_index < 0 or start_index >= num_latents: + raise ValueError("Start index is out of range") + + end_index = num_latents if num_frames == -1 else min(start_index + num_frames, num_latents) + + if len(samples.shape) == 4: + chosen_latents = samples[start_index:end_index] + elif len(samples.shape) == 5: + chosen_latents = samples[:, :, start_index:end_index] + + return ({"samples": chosen_latents.contiguous(),},) + +class InsertLatentToIndex: + + RETURN_TYPES = ("LATENT", ) + FUNCTION = "insert" + CATEGORY = "KJNodes/latents" + DESCRIPTION = """ +Inserts a latent at the specified index into the original latent batch. +""" + + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "source": ("LATENT",), + "destination": ("LATENT",), + "index": ("INT", {"default": 0,"min": -1, "max": 4096, "step": 1}), + }, + } + + def insert(self, source, destination, index): + samples_destination = destination["samples"] + samples_source = source["samples"].to(samples_destination) + + if len(samples_source.shape) == 4: + B, C, H, W = samples_source.shape + num_latents = B + elif len(samples_source.shape) == 5: + B, C, T, H, W = samples_source.shape + num_latents = T + + if index >= num_latents or index < 0: + raise ValueError(f"Index {index} out of bounds for tensor with {num_latents} latents") + + if len(samples_source.shape) == 4: + joined_latents = torch.cat([ + samples_destination[:index], + samples_source, + samples_destination[index+1:] + ], dim=0) + else: + joined_latents = torch.cat([ + samples_destination[:, :, :index], + samples_source, + samples_destination[:, :, index+1:] + ], dim=2) + + return ({"samples": joined_latents,},) + +class ImageBatchFilter: + + RETURN_TYPES = ("IMAGE", "STRING",) + RETURN_NAMES = ("images", "removed_indices",) + FUNCTION = "filter" + CATEGORY = "KJNodes/image" + DESCRIPTION = "Removes empty images from a batch" + + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "images": ("IMAGE",), + "empty_color": ("STRING", {"default": "0, 0, 0"}), + "empty_threshold": ("FLOAT", {"default": 0.01,"min": 0.0, "max": 1.0, "step": 0.01}), + }, + "optional": { + "replacement_image": ("IMAGE",), + } + } + + def filter(self, images, empty_color, empty_threshold, replacement_image=None): + B, H, W, C = images.shape + + input_images = images.clone() + + empty_color_list = [int(color.strip()) for color in empty_color.split(',')] + empty_color_tensor = torch.tensor(empty_color_list, dtype=torch.float32).to(input_images.device) + + color_diff = torch.abs(input_images - empty_color_tensor) + mean_diff = color_diff.mean(dim=(1, 2, 3)) + + empty_indices = mean_diff <= empty_threshold + empty_indices_string = ', '.join([str(i) for i in range(B) if empty_indices[i]]) + + if replacement_image is not None: + B_rep, H_rep, W_rep, C_rep = replacement_image.shape + replacement = replacement_image.clone() + if (H_rep != images.shape[1]) or (W_rep != images.shape[2]) or (C_rep != images.shape[3]): + replacement = common_upscale(replacement.movedim(-1, 1), W, H, "lanczos", "center").movedim(1, -1) + input_images[empty_indices] = replacement[0] + + return (input_images, empty_indices_string,) + else: + non_empty_images = input_images[~empty_indices] + return (non_empty_images, empty_indices_string,) + +class GetImagesFromBatchIndexed: + + RETURN_TYPES = ("IMAGE",) + FUNCTION = "indexedimagesfrombatch" + CATEGORY = "KJNodes/image" + DESCRIPTION = """ +Selects and returns the images at the specified indices as an image batch. +""" + + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "images": ("IMAGE",), + "indexes": ("STRING", {"default": "0, 1, 2", "multiline": True}), + }, + } + + def indexedimagesfrombatch(self, images, indexes): + + # Parse the indexes string into a list of integers + index_list = [int(index.strip()) for index in indexes.split(',')] + + # Convert list of indices to a PyTorch tensor + indices_tensor = torch.tensor(index_list, dtype=torch.long) + + # Select the images at the specified indices + chosen_images = images[indices_tensor] + + return (chosen_images,) + +class InsertImagesToBatchIndexed: + + RETURN_TYPES = ("IMAGE",) + FUNCTION = "insertimagesfrombatch" + CATEGORY = "KJNodes/image" + DESCRIPTION = """ +Inserts images at the specified indices into the original image batch. +""" + + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "original_images": ("IMAGE",), + "images_to_insert": ("IMAGE",), + "indexes": ("STRING", {"default": "0, 1, 2", "multiline": True}), + }, + "optional": { + "mode": (["replace", "insert"],), + } + } + + def insertimagesfrombatch(self, original_images, images_to_insert, indexes, mode="replace"): + if indexes == "": + return (original_images,) + + input_images = original_images.clone() + + # Parse the indexes string into a list of integers + index_list = [int(index.strip()) for index in indexes.split(',')] + + # Convert list of indices to a PyTorch tensor + indices_tensor = torch.tensor(index_list, dtype=torch.long) + + # Ensure the images_to_insert is a tensor + if not isinstance(images_to_insert, torch.Tensor): + images_to_insert = torch.tensor(images_to_insert) + + if mode == "replace": + # Replace the images at the specified indices + for index, image in zip(indices_tensor, images_to_insert): + input_images[index] = image + else: + # Create a list to hold the new image sequence + new_images = [] + insert_offset = 0 + + for i in range(len(input_images) + len(indices_tensor)): + if insert_offset < len(indices_tensor) and i == indices_tensor[insert_offset]: + # Use modulo to cycle through images_to_insert + new_images.append(images_to_insert[insert_offset % len(images_to_insert)]) + insert_offset += 1 + else: + new_images.append(input_images[i - insert_offset]) + + # Convert the list back to a tensor + input_images = torch.stack(new_images, dim=0) + + return (input_images,) + +class PadImageBatchInterleaved: + + RETURN_TYPES = ("IMAGE", "MASK",) + RETURN_NAMES = ("images", "masks",) + FUNCTION = "pad" + CATEGORY = "KJNodes/image" + DESCRIPTION = """ +Inserts empty frames between the images in a batch. +""" + + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "images": ("IMAGE",), + "empty_frames_per_image": ("INT", {"default": 1,"min": 0, "max": 4096, "step": 1}), + "pad_frame_value": ("FLOAT", {"default": 0.0,"min": 0.0, "max": 1.0, "step": 0.01}), + "add_after_last": ("BOOLEAN", {"default": False}), + }, + } + + def pad(self, images, empty_frames_per_image, pad_frame_value, add_after_last): + B, H, W, C = images.shape + + # Handle single frame case specifically + if B == 1: + total_frames = 1 + empty_frames_per_image if add_after_last else 1 + else: + # Original B images + (B-1) sets of empty frames between them + total_frames = B + (B-1) * empty_frames_per_image + # Add additional empty frames after the last image if requested + if add_after_last: + total_frames += empty_frames_per_image + + # Create new tensor with zeros (empty frames) + padded_batch = torch.ones((total_frames, H, W, C), + dtype=images.dtype, + device=images.device) * pad_frame_value + # Create mask tensor (1 for original frames, 0 for empty frames) + mask = torch.zeros((total_frames, H, W), + dtype=images.dtype, + device=images.device) + + # Fill in original images at their new positions + for i in range(B): + if B == 1: + # For single frame, just place it at the beginning + new_pos = 0 + else: + # Each image is separated by empty_frames_per_image blank frames + new_pos = i * (empty_frames_per_image + 1) + + padded_batch[new_pos] = images[i] + mask[new_pos] = 1.0 # Mark this as an original frame + + return (padded_batch, mask) + +class ReplaceImagesInBatch: + + RETURN_TYPES = ("IMAGE", "MASK",) + FUNCTION = "replace" + CATEGORY = "KJNodes/image" + DESCRIPTION = """ +Replaces the images in a batch, starting from the specified start index, +with the replacement images. +""" + + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "start_index": ("INT", {"default": 1,"min": 0, "max": 4096, "step": 1}), + }, + "optional": { + "original_images": ("IMAGE",), + "replacement_images": ("IMAGE",), + "original_masks": ("MASK",), + "replacement_masks": ("MASK",), + } + } + + def replace(self, original_images=None, replacement_images=None, start_index=1, original_masks=None, replacement_masks=None): + images = None + masks = None + + if original_images is not None and replacement_images is not None: + if start_index >= len(original_images): + raise ValueError("ReplaceImagesInBatch: Start index is out of range") + end_index = start_index + len(replacement_images) + if end_index > len(original_images): + raise ValueError("ReplaceImagesInBatch: End index is out of range") + + original_images_copy = original_images.clone() + if original_images_copy.shape[2] != replacement_images.shape[2] or original_images_copy.shape[3] != replacement_images.shape[3]: + replacement_images = common_upscale(replacement_images.movedim(-1, 1), original_images_copy.shape[1], original_images_copy.shape[2], "lanczos", "center").movedim(1, -1) + + original_images_copy[start_index:end_index] = replacement_images + images = original_images_copy + else: + images = torch.zeros((1, 64, 64, 3)) + + if original_masks is not None and replacement_masks is not None: + if start_index >= len(original_masks): + raise ValueError("ReplaceImagesInBatch: Start index is out of range") + end_index = start_index + len(replacement_masks) + if end_index > len(original_masks): + raise ValueError("ReplaceImagesInBatch: End index is out of range") + + original_masks_copy = original_masks.clone() + if original_masks_copy.shape[1] != replacement_masks.shape[1] or original_masks_copy.shape[2] != replacement_masks.shape[2]: + replacement_masks = common_upscale(replacement_masks.unsqueeze(1), original_masks_copy.shape[1], original_masks_copy.shape[2], "nearest-exact", "center").squeeze(0) + + original_masks_copy[start_index:end_index] = replacement_masks + masks = original_masks_copy + else: + masks = torch.zeros((1, 64, 64)) + + return (images, masks) + + +class ReverseImageBatch: + + RETURN_TYPES = ("IMAGE",) + FUNCTION = "reverseimagebatch" + CATEGORY = "KJNodes/image" + DESCRIPTION = """ +Reverses the order of the images in a batch. +""" + + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "images": ("IMAGE",), + }, + } + + def reverseimagebatch(self, images): + reversed_images = torch.flip(images, [0]) + return (reversed_images, ) + +class ImageBatchMulti: + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "inputcount": ("INT", {"default": 2, "min": 2, "max": 1000, "step": 1}), + "image_1": ("IMAGE", ), + }, + "optional": { + "image_2": ("IMAGE", ), + } + } + + RETURN_TYPES = ("IMAGE",) + RETURN_NAMES = ("images",) + FUNCTION = "combine" + CATEGORY = "KJNodes/image" + DESCRIPTION = """ +Creates an image batch from multiple images. +You can set how many inputs the node has, +with the **inputcount** and clicking update. +""" + + def combine(self, inputcount, **kwargs): + first = kwargs["image_1"] + h, w = first.shape[1], first.shape[2] + + # determine output shape + max_ch = first.shape[-1] + total_frames = first.shape[0] + for c in range(1, inputcount): + img = kwargs.get(f"image_{c + 1}") + if img is not None: + max_ch = max(max_ch, img.shape[-1]) + total_frames += img.shape[0] + else: + total_frames += first.shape[0] + + # pre-allocate output + out = torch.empty((total_frames, h, w, max_ch), dtype=first.dtype) + offset = 0 + + for c in range(inputcount): + img = kwargs.get(f"image_{c + 1}", torch.zeros((first.shape[0], h, w, max_ch), dtype=first.dtype)) + + if img.shape[1:3] != (h, w): + img = common_upscale(img.movedim(-1, 1), w, h, "bilinear", "center").movedim(1, -1) + + if img.shape[-1] < max_ch: + img = torch.nn.functional.pad(img, (0, max_ch - img.shape[-1]), mode='constant', value=1.0) + + n = img.shape[0] + out[offset:offset + n].copy_(img, non_blocking=True) + offset += n + del img + + return (out.cpu(),) + + +class ImageTensorList: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "image1": ("IMAGE",), + "image2": ("IMAGE",), + }} + + RETURN_TYPES = ("IMAGE",) + FUNCTION = "append" + CATEGORY = "KJNodes/image" + DESCRIPTION = """ +Creates an image list from the input images. +""" + + def append(self, image1, image2): + image_list = [] + if isinstance(image1, torch.Tensor) and isinstance(image2, torch.Tensor): + image_list = [image1, image2] + elif isinstance(image1, list) and isinstance(image2, torch.Tensor): + image_list = image1 + [image2] + elif isinstance(image1, torch.Tensor) and isinstance(image2, list): + image_list = [image1] + image2 + elif isinstance(image1, list) and isinstance(image2, list): + image_list = image1 + image2 + return image_list, + +class ImageAddMulti: + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "inputcount": ("INT", {"default": 2, "min": 2, "max": 1000, "step": 1}), + "image_1": ("IMAGE", ), + "image_2": ("IMAGE", ), + "blending": ( + [ 'add', + 'subtract', + 'multiply', + 'difference', + ], + { + "default": 'add' + }), + "blend_amount": ("FLOAT", {"default": 0.5, "min": 0, "max": 1, "step": 0.01}), + }, + } + + RETURN_TYPES = ("IMAGE",) + RETURN_NAMES = ("images",) + FUNCTION = "add" + CATEGORY = "KJNodes/image" + DESCRIPTION = """ +Add blends multiple images together. +You can set how many inputs the node has, +with the **inputcount** and clicking update. +""" + + def add(self, inputcount, blending, blend_amount, **kwargs): + image = kwargs["image_1"] + for c in range(1, inputcount): + new_image = kwargs[f"image_{c + 1}"] + if blending == "add": + image = torch.add(image * blend_amount, new_image * blend_amount) + elif blending == "subtract": + image = torch.sub(image * blend_amount, new_image * blend_amount) + elif blending == "multiply": + image = torch.mul(image * blend_amount, new_image * blend_amount) + elif blending == "difference": + image = torch.sub(image, new_image) + return (image,) + +class ImageConcatMulti: + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "inputcount": ("INT", {"default": 2, "min": 2, "max": 1000, "step": 1}), + "image_1": ("IMAGE", ), + + "direction": ( + [ 'right', + 'down', + 'left', + 'up', + ], + { + "default": 'right' + }), + "match_image_size": ("BOOLEAN", {"default": False}), + }, + "optional": { + "image_2": ("IMAGE", ), + }, + } + + RETURN_TYPES = ("IMAGE",) + RETURN_NAMES = ("images",) + FUNCTION = "combine" + CATEGORY = "KJNodes/image" + DESCRIPTION = """ +Creates an image from multiple images. +You can set how many inputs the node has, +with the **inputcount** and clicking update. +""" + + def combine(self, inputcount, direction, match_image_size, **kwargs): + image = kwargs["image_1"] + first_image_shape = None + if first_image_shape is None: + first_image_shape = image.shape + for c in range(1, inputcount): + new_image = kwargs.get(f"image_{c + 1}", torch.zeros(first_image_shape)) + image, = ImageConcanate.concatenate(self, image, new_image, direction, match_image_size, first_image_shape=first_image_shape) + first_image_shape = None + return (image,) + +class PreviewAnimation: + def __init__(self): + self.output_dir = folder_paths.get_temp_directory() + self.type = "temp" + self.prefix_append = "_temp_" + ''.join(random.choice("abcdefghijklmnopqrstupvxyz") for x in range(5)) + self.compress_level = 1 + + methods = {"default": 4, "fastest": 0, "slowest": 6} + @classmethod + def INPUT_TYPES(s): + return {"required": + { + "fps": ("FLOAT", {"default": 8.0, "min": 0.01, "max": 1000.0, "step": 0.01}), + }, + "optional": { + "images": ("IMAGE", ), + "masks": ("MASK", ), + }, + } + + RETURN_TYPES = () + FUNCTION = "preview" + OUTPUT_NODE = True + CATEGORY = "KJNodes/image" + + def preview(self, fps, images=None, masks=None): + filename_prefix = "AnimPreview" + full_output_folder, filename, counter, subfolder, filename_prefix = folder_paths.get_save_image_path(filename_prefix, self.output_dir) + results = list() + + pil_images = [] + + if images is not None and masks is not None: + for image in images: + i = 255. * image.cpu().numpy() + img = Image.fromarray(np.clip(i, 0, 255).astype(np.uint8)) + pil_images.append(img) + for mask in masks: + if pil_images: + mask_np = mask.cpu().numpy() + mask_np = np.clip(mask_np * 255, 0, 255).astype(np.uint8) # Convert to values between 0 and 255 + mask_img = Image.fromarray(mask_np, mode='L') + img = pil_images.pop(0) # Remove and get the first image + img = img.convert("RGBA") # Convert base image to RGBA + + # Create a new RGBA image based on the grayscale mask + rgba_mask_img = Image.new("RGBA", img.size, (255, 255, 255, 255)) + rgba_mask_img.putalpha(mask_img) # Use the mask image as the alpha channel + + # Composite the RGBA mask onto the base image + composited_img = Image.alpha_composite(img, rgba_mask_img) + pil_images.append(composited_img) # Add the composited image back + + elif images is not None and masks is None: + for image in images: + i = 255. * image.cpu().numpy() + img = Image.fromarray(np.clip(i, 0, 255).astype(np.uint8)) + pil_images.append(img) + + elif masks is not None and images is None: + for mask in masks: + mask_np = 255. * mask.cpu().numpy() + mask_img = Image.fromarray(np.clip(mask_np, 0, 255).astype(np.uint8)) + pil_images.append(mask_img) + else: + logging.warning("PreviewAnimation: No images or masks provided") + return { "ui": { "images": results, "animated": (None,), "text": "empty" }} + + num_frames = len(pil_images) + + c = len(pil_images) + for i in range(0, c, num_frames): + file = f"{filename}_{counter:05}_.webp" + pil_images[i].save(os.path.join(full_output_folder, file), save_all=True, duration=int(1000.0/fps), append_images=pil_images[i + 1:i + num_frames], lossless=False, quality=50, method=0) + results.append({ + "filename": file, + "subfolder": subfolder, + "type": self.type + }) + counter += 1 + + animated = num_frames != 1 + return { "ui": { "images": results, "animated": (animated,), "text": [f"{num_frames}x{pil_images[0].size[0]}x{pil_images[0].size[1]}"] } } + +class ImageResizeKJ: + upscale_methods = ["nearest-exact", "bilinear", "area", "bicubic", "lanczos"] + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "image": ("IMAGE",), + "width": ("INT", { "default": 512, "min": 0, "max": MAX_RESOLUTION, "step": 1, }), + "height": ("INT", { "default": 512, "min": 0, "max": MAX_RESOLUTION, "step": 1, }), + "upscale_method": (s.upscale_methods,), + "keep_proportion": ("BOOLEAN", { "default": False }), + "divisible_by": ("INT", { "default": 2, "min": 0, "max": 512, "step": 1, }), + }, + "optional" : { + #"width_input": ("INT", { "forceInput": True}), + #"height_input": ("INT", { "forceInput": True}), + "get_image_size": ("IMAGE",), + "crop": (["disabled","center", 0], { "tooltip": "0 will do the default center crop, this is a workaround for the widget order changing with the new frontend, as in old workflows the value of this widget becomes 0 automatically" }), + } + } + + RETURN_TYPES = ("IMAGE", "INT", "INT",) + RETURN_NAMES = ("IMAGE", "width", "height",) + FUNCTION = "resize" + CATEGORY = "KJNodes/image" + DEPRECATED = True + DESCRIPTION = """ +DEPRECATED! + +Due to ComfyUI frontend changes, this node should no longer be used, please check the +v2 of the node. This node is only kept to not completely break older workflows. + +""" + + def resize(self, image, width, height, keep_proportion, upscale_method, divisible_by, + width_input=None, height_input=None, get_image_size=None, crop="disabled"): + B, H, W, C = image.shape + + if width_input: + width = width_input + if height_input: + height = height_input + if get_image_size is not None: + _, height, width, _ = get_image_size.shape + + if keep_proportion and get_image_size is None: + # If one of the dimensions is zero, calculate it to maintain the aspect ratio + if width == 0 and height != 0: + ratio = height / H + width = round(W * ratio) + elif height == 0 and width != 0: + ratio = width / W + height = round(H * ratio) + elif width != 0 and height != 0: + # Scale based on which dimension is smaller in proportion to the desired dimensions + ratio = min(width / W, height / H) + width = round(W * ratio) + height = round(H * ratio) + else: + if width == 0: + width = W + if height == 0: + height = H + + if divisible_by > 1 and get_image_size is None: + width = width - (width % divisible_by) + height = height - (height % divisible_by) + + if crop == 0: #workaround for old workflows + crop = "center" + + image = image.movedim(-1,1) + image = common_upscale(image, width, height, upscale_method, crop) + image = image.movedim(1,-1) + + return(image, image.shape[2], image.shape[1],) + +class ImageResizeKJv2: + upscale_methods = ["nearest-exact", "bilinear", "area", "bicubic", "lanczos", "nvidia_rtx_vsr"] + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "image": ("IMAGE",), + "width": ("INT", { "default": 512, "min": 0, "max": MAX_RESOLUTION, "step": 1, }), + "height": ("INT", { "default": 512, "min": 0, "max": MAX_RESOLUTION, "step": 1, }), + "upscale_method": (s.upscale_methods,), + "keep_proportion": (["stretch", "resize", "pad", "pad_edge", "pad_edge_pixel", "crop", "pillarbox_blur", "total_pixels"], { "default": False }), + "pad_color": ("STRING", { "default": "0, 0, 0", "tooltip": "Color to use for padding."}), + "crop_position": (["center", "top", "bottom", "left", "right"], { "default": "center" }), + "divisible_by": ("INT", { "default": 2, "min": 0, "max": 512, "step": 1, }), + }, + "optional" : { + "mask": ("MASK",), + "device": (["cpu", "gpu"],), + #"per_batch": ("INT", { "default": 0, "min": 0, "max": MAX_RESOLUTION, "step": 1, "tooltip": "Process images in sub-batches to reduce memory usage. 0 disables sub-batching."}), + }, + "hidden": { + "unique_id": "UNIQUE_ID", + }, + } + + RETURN_TYPES = ("IMAGE", "INT", "INT", "MASK",) + RETURN_NAMES = ("IMAGE", "width", "height", "mask",) + FUNCTION = "resize" + CATEGORY = "KJNodes/image" + DESCRIPTION = """ +Resizes the image to the specified width and height. +Size can be retrieved from the input. + +Keep proportions keeps the aspect ratio of the image, by +highest dimension. +""" + + def resize(self, image, width, height, keep_proportion, upscale_method, divisible_by, pad_color, crop_position, unique_id, device="cpu", mask=None, per_batch=64): + B, H, W, C = image.shape + + # Treat ComfyUI's 64x64 placeholder mask as no mask + if mask is not None and mask.shape[-2:] == (64, 64) and (H != 64 or W != 64): + mask = None + + # Scale mask to match image dimensions if they differ + if mask is not None and mask.shape[-2:] != (H, W): + mask = common_upscale(mask.unsqueeze(1), W, H, "bilinear", crop="disabled").squeeze(1) + + if device == "gpu": + if upscale_method == "lanczos": + raise Exception("Lanczos is not supported on the GPU") + device = model_management.get_torch_device() + else: + device = torch.device("cpu") + + pillarbox_blur = keep_proportion == "pillarbox_blur" + + # Initialize padding variables + pad_left = pad_right = pad_top = pad_bottom = 0 + + if keep_proportion in ["resize", "total_pixels"] or keep_proportion.startswith("pad") or pillarbox_blur: + if keep_proportion == "total_pixels": + total_pixels = width * height + aspect_ratio = W / H + new_height = int(math.sqrt(total_pixels / aspect_ratio)) + new_width = int(math.sqrt(total_pixels * aspect_ratio)) + + # If one of the dimensions is zero, calculate it to maintain the aspect ratio + elif width == 0 and height == 0: + new_width = W + new_height = H + elif width == 0 and height != 0: + ratio = height / H + new_width = round(W * ratio) + new_height = height + elif height == 0 and width != 0: + ratio = width / W + new_width = width + new_height = round(H * ratio) + elif width != 0 and height != 0: + ratio = min(width / W, height / H) + new_width = round(W * ratio) + new_height = round(H * ratio) + else: + new_width = width + new_height = height + + if keep_proportion.startswith("pad") or pillarbox_blur: + # Calculate padding based on position + if crop_position == "center": + pad_left = (width - new_width) // 2 + pad_right = width - new_width - pad_left + pad_top = (height - new_height) // 2 + pad_bottom = height - new_height - pad_top + elif crop_position == "top": + pad_left = (width - new_width) // 2 + pad_right = width - new_width - pad_left + pad_top = 0 + pad_bottom = height - new_height + elif crop_position == "bottom": + pad_left = (width - new_width) // 2 + pad_right = width - new_width - pad_left + pad_top = height - new_height + pad_bottom = 0 + elif crop_position == "left": + pad_left = 0 + pad_right = width - new_width + pad_top = (height - new_height) // 2 + pad_bottom = height - new_height - pad_top + elif crop_position == "right": + pad_left = width - new_width + pad_right = 0 + pad_top = (height - new_height) // 2 + pad_bottom = height - new_height - pad_top + + width = new_width + height = new_height + else: + if width == 0: + width = W + if height == 0: + height = H + + if divisible_by > 1: + width = width - (width % divisible_by) + height = height - (height % divisible_by) + + # Preflight estimate (log-only when batching is active) + if per_batch != 0 and B > per_batch: + try: + bytes_per_elem = image.element_size() # typically 4 for float32 + est_total_bytes = B * height * width * C * bytes_per_elem + est_mb = est_total_bytes / (1024 * 1024) + msg = f"Resize v2estimated output ~{est_mb:.2f} MB; batching {per_batch}/{B}" + if unique_id and PromptServer is not None: + try: + PromptServer.instance.send_progress_text(msg, unique_id) + except: + pass + else: + logging.info(f"[ImageResizeKJv2] estimated output ~{est_mb:.2f} MB; batching {per_batch}/{B}") + except: + pass + + # NVIDIA RTX Video Super Resolution setup + nvvfx_sr = None + nvvfx_ctx = None + if upscale_method == "nvidia_rtx_vsr": + try: + import nvvfx + except: + raise ImportError("NVIDIA RTX Video Super Resolution is not available. Please install the nvidia-vfx library and ensure you have a compatible NVIDIA GPU.") + nvvfx_ctx = nvvfx.VideoSuperRes(nvvfx.effects.QualityLevel.ULTRA) + nvvfx_sr = nvvfx_ctx.__enter__() + nvvfx_sr.output_width = max(8, round(width / 8) * 8) + nvvfx_sr.output_height = max(8, round(height / 8) * 8) + nvvfx_sr.load() + + def _process_subbatch(in_image, in_mask, pad_left, pad_right, pad_top, pad_bottom): + # Avoid unnecessary clones; only move if needed + out_image = in_image if in_image.device == device else in_image.to(device) + out_mask = None if in_mask is None else (in_mask if in_mask.device == device else in_mask.to(device)) + + # Crop logic + if keep_proportion == "crop": + old_height = out_image.shape[-3] + old_width = out_image.shape[-2] + old_aspect = old_width / old_height + new_aspect = width / height + if old_aspect > new_aspect: + crop_w = round(old_height * new_aspect) + crop_h = old_height + else: + crop_w = old_width + crop_h = round(old_width / new_aspect) + if crop_position == "center": + x = (old_width - crop_w) // 2 + y = (old_height - crop_h) // 2 + elif crop_position == "top": + x = (old_width - crop_w) // 2 + y = 0 + elif crop_position == "bottom": + x = (old_width - crop_w) // 2 + y = old_height - crop_h + elif crop_position == "left": + x = 0 + y = (old_height - crop_h) // 2 + elif crop_position == "right": + x = old_width - crop_w + y = (old_height - crop_h) // 2 + out_image = out_image.narrow(-2, x, crop_w).narrow(-3, y, crop_h) + if out_mask is not None: + out_mask = out_mask.narrow(-1, x, crop_w).narrow(-2, y, crop_h) + + if upscale_method == "nvidia_rtx_vsr": + # Process each frame through RTX Video Super Resolution + frames_chw = out_image.movedim(-1, 1).cuda().contiguous() + upscaled_frames = [] + for j in range(frames_chw.shape[0]): + dlpack_out = nvvfx_sr.run(frames_chw[j]).image + upscaled_frames.append(torch.from_dlpack(dlpack_out).clone()) + out_image = torch.stack(upscaled_frames, dim=0).movedim(1, -1).cpu() + if out_mask is not None: + out_mask = common_upscale(out_mask.unsqueeze(1), width, height, "bilinear", crop="disabled").squeeze(1) + else: + out_image = common_upscale(out_image.movedim(-1,1), width, height, upscale_method, crop="disabled").movedim(1,-1) + if out_mask is not None: + if upscale_method == "lanczos": + out_mask = common_upscale(out_mask.unsqueeze(1).repeat(1, 3, 1, 1), width, height, upscale_method, crop="disabled").movedim(1,-1)[:, :, :, 0] + else: + out_mask = common_upscale(out_mask.unsqueeze(1), width, height, upscale_method, crop="disabled").squeeze(1) + + # Pad logic + if (keep_proportion.startswith("pad") or pillarbox_blur) and (pad_left > 0 or pad_right > 0 or pad_top > 0 or pad_bottom > 0): + padded_width = width + pad_left + pad_right + padded_height = height + pad_top + pad_bottom + if divisible_by > 1: + width_remainder = padded_width % divisible_by + height_remainder = padded_height % divisible_by + if width_remainder > 0: + extra_width = divisible_by - width_remainder + pad_right += extra_width + if height_remainder > 0: + extra_height = divisible_by - height_remainder + pad_bottom += extra_height + + pad_mode = ( + "pillarbox_blur" if pillarbox_blur else + "edge" if keep_proportion == "pad_edge" else + "edge_pixel" if keep_proportion == "pad_edge_pixel" else + "color" + ) + out_image, out_mask = ImagePadKJ.pad(self, out_image, pad_left, pad_right, pad_top, pad_bottom, 0, pad_color, pad_mode, mask=out_mask) + + return out_image, out_mask + + # If batching disabled (per_batch==0) or batch fits, process whole batch + if per_batch == 0 or B <= per_batch: + out_image, out_mask = _process_subbatch(image, mask, pad_left, pad_right, pad_top, pad_bottom) + else: + chunks = [] + mask_chunks = [] if mask is not None else None + total_batches = (B + per_batch - 1) // per_batch + current_batch = 0 + for start_idx in range(0, B, per_batch): + current_batch += 1 + end_idx = min(start_idx + per_batch, B) + sub_img = image[start_idx:end_idx] + sub_mask = mask[start_idx:end_idx] if mask is not None else None + sub_out_img, sub_out_mask = _process_subbatch(sub_img, sub_mask, pad_left, pad_right, pad_top, pad_bottom) + chunks.append(sub_out_img.cpu()) + if mask is not None: + mask_chunks.append(sub_out_mask.cpu() if sub_out_mask is not None else None) + # Per-batch progress update + if unique_id and PromptServer is not None: + try: + PromptServer.instance.send_progress_text( + f"Resize v2batch {current_batch}/{total_batches} · images {end_idx}/{B}", + unique_id + ) + except: + pass + else: + try: + logging.info(f"[ImageResizeKJv2] batch {current_batch}/{total_batches} · images {end_idx}/{B}") + except: + pass + out_image = torch.cat(chunks, dim=0) + if mask is not None and any(m is not None for m in mask_chunks): + out_mask = torch.cat([m for m in mask_chunks if m is not None], dim=0) + else: + out_mask = None + + # Cleanup NVIDIA RTX VSR context + if nvvfx_ctx is not None: + nvvfx_ctx.__exit__(None, None, None) + + # Progress UI + if unique_id and PromptServer is not None: + try: + num_elements = out_image.numel() + element_size = out_image.element_size() + memory_size_mb = (num_elements * element_size) / (1024 * 1024) + PromptServer.instance.send_progress_text( + f"Output: {out_image.shape[0]} x {out_image.shape[2]} x {out_image.shape[1]} | {memory_size_mb:.2f}MB", + unique_id + ) + except: + pass + + return (out_image.cpu(), out_image.shape[2], out_image.shape[1], out_mask.cpu() if out_mask is not None else torch.zeros(64,64, device=torch.device("cpu"), dtype=torch.float32)) + +class LoadAndResizeImage: + _color_channels = ["alpha", "red", "green", "blue"] + @classmethod + def INPUT_TYPES(s): + input_dir = folder_paths.get_input_directory() + files = [f.name for f in pathlib.Path(input_dir).iterdir() if f.is_file()] + return {"required": + { + "image": (sorted(files), {"image_upload": True}), + "resize": ("BOOLEAN", { "default": False }), + "width": ("INT", { "default": 512, "min": 0, "max": MAX_RESOLUTION, "step": 8, }), + "height": ("INT", { "default": 512, "min": 0, "max": MAX_RESOLUTION, "step": 8, }), + "repeat": ("INT", { "default": 1, "min": 1, "max": 4096, "step": 1, }), + "keep_proportion": ("BOOLEAN", { "default": False }), + "divisible_by": ("INT", { "default": 2, "min": 0, "max": 512, "step": 1, }), + "mask_channel": (s._color_channels, {"tooltip": "Channel to use for the mask output"}), + "background_color": ("STRING", { "default": "", "tooltip": "Fills the alpha channel with the specified color."}), + }, + } + + CATEGORY = "KJNodes/image" + RETURN_TYPES = ("IMAGE", "MASK", "INT", "INT", "STRING",) + RETURN_NAMES = ("image", "mask", "width", "height","image_path",) + FUNCTION = "load_image" + + def load_image(self, image, resize, width, height, repeat, keep_proportion, divisible_by, mask_channel, background_color): + image_path = folder_paths.get_annotated_filepath(image) + + img = node_helpers.pillow(Image.open, image_path) + img = ImageOps.exif_transpose(img) + + # Process the background_color using the helper function + if background_color: + color_list = string_to_color(background_color) + # Ensure we have RGBA (add alpha if only RGB) + if len(color_list) == 3: + bg_color_rgba = tuple(color_list) + (255,) + else: + bg_color_rgba = tuple(color_list) + else: + bg_color_rgba = None # No background color specified + + output_images = [] + output_masks = [] + w, h = None, None + + excluded_formats = ['MPO'] + + W, H = img.size + if resize: + if keep_proportion: + ratio = min(width / W, height / H) + width = round(W * ratio) + height = round(H * ratio) + else: + if width == 0: + width = W + if height == 0: + height = H + + if divisible_by > 1: + width = width - (width % divisible_by) + height = height - (height % divisible_by) + else: + width, height = W, H + + for frame in ImageSequence.Iterator(img): + frame = node_helpers.pillow(ImageOps.exif_transpose, frame) + + if frame.mode == 'I': + frame = frame.point(lambda i: i * (1 / 255)) + + if frame.mode == 'P': + frame = frame.convert("RGBA") + elif 'A' in frame.getbands(): + frame = frame.convert("RGBA") + + # Extract alpha channel if it exists + if 'A' in frame.getbands() and bg_color_rgba: + alpha_mask = np.array(frame.getchannel('A')).astype(np.float32) / 255.0 + alpha_mask = 1. - torch.from_numpy(alpha_mask) + bg_image = Image.new("RGBA", frame.size, bg_color_rgba) + # Composite the frame onto the background + frame = Image.alpha_composite(bg_image, frame) + else: + alpha_mask = torch.zeros((64, 64), dtype=torch.float32, device="cpu") + + image = frame.convert("RGB") + + if len(output_images) == 0: + w = image.size[0] + h = image.size[1] + + if image.size[0] != w or image.size[1] != h: + continue + if resize: + image = image.resize((width, height), Image.Resampling.BILINEAR) + + image = np.array(image).astype(np.float32) / 255.0 + image = torch.from_numpy(image)[None,] + + c = mask_channel[0].upper() + if c in frame.getbands(): + if resize: + frame = frame.resize((width, height), Image.Resampling.BILINEAR) + mask = np.array(frame.getchannel(c)).astype(np.float32) / 255.0 + mask = torch.from_numpy(mask) + if c == 'A' and bg_color_rgba: + mask = alpha_mask + elif c == 'A': + mask = 1. - mask + else: + mask = torch.zeros((64, 64), dtype=torch.float32, device="cpu") + + output_images.append(image) + output_masks.append(mask.unsqueeze(0)) + + if len(output_images) > 1 and img.format not in excluded_formats: + output_image = torch.cat(output_images, dim=0) + output_mask = torch.cat(output_masks, dim=0) + else: + output_image = output_images[0] + output_mask = output_masks[0] + if repeat > 1: + output_image = output_image.repeat(repeat, 1, 1, 1) + output_mask = output_mask.repeat(repeat, 1, 1) + + return (output_image, output_mask, width, height, image_path) + + + # @classmethod + # def IS_CHANGED(s, image, **kwargs): + # image_path = folder_paths.get_annotated_filepath(image) + # m = hashlib.sha256() + # with open(image_path, 'rb') as f: + # m.update(f.read()) + # return m.digest().hex() + + @classmethod + def VALIDATE_INPUTS(s, image): + if not folder_paths.exists_annotated_filepath(image): + return "Invalid image file: {}".format(image) + + return True + +class LoadImagesFromFolderKJ: + # Dictionary to store folder hashes + folder_hashes = {} + + @classmethod + def IS_CHANGED(cls, folder, **kwargs): + if folder and not os.path.isabs(folder) and args.base_directory: + folder = os.path.join(args.base_directory, folder) + if not folder or not os.path.isdir(folder): + return float("NaN") + + valid_extensions = ['.jpg', '.jpeg', '.png', '.webp', '.tga'] + include_subfolders = kwargs.get('include_subfolders', False) + + file_data = [] + if include_subfolders: + for root, _, files in os.walk(folder): + for file in files: + if any(file.lower().endswith(ext) for ext in valid_extensions): + path = os.path.join(root, file) + try: + mtime = os.path.getmtime(path) + file_data.append((path, mtime)) + except OSError: + pass + else: + for file in sorted(os.listdir(folder)): + if any(file.lower().endswith(ext) for ext in valid_extensions): + path = os.path.join(folder, file) + try: + mtime = os.path.getmtime(path) + file_data.append((path, mtime)) + except OSError: + pass + + file_data.sort() + + combined_hash = hashlib.md5() + combined_hash.update(folder.encode('utf-8')) + combined_hash.update(str(len(file_data)).encode('utf-8')) + + for path, mtime in file_data: + combined_hash.update(f"{path}:{mtime}".encode('utf-8')) + + current_hash = combined_hash.hexdigest() + + old_hash = cls.folder_hashes.get(folder) + cls.folder_hashes[folder] = current_hash + + if old_hash == current_hash: + return old_hash + + return current_hash + + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "folder": ("STRING", {"default": ""}), + "width": ("INT", {"default": 1024, "min": -1, "step": 1}), + "height": ("INT", {"default": 1024, "min": -1, "step": 1}), + "keep_aspect_ratio": (["crop", "pad", "stretch",],), + }, + "optional": { + "image_load_cap": ("INT", {"default": 0, "min": 0, "step": 1}), + "start_index": ("INT", {"default": 0, "min": 0, "step": 1}), + "include_subfolders": ("BOOLEAN", {"default": False}), + } + } + + RETURN_TYPES = ("IMAGE", "MASK", "INT", "STRING",) + RETURN_NAMES = ("image", "mask", "count", "image_path",) + FUNCTION = "load_images" + CATEGORY = "KJNodes/image" + DESCRIPTION = """Loads images from a folder into a batch, images are resized and loaded into a batch.""" + + def load_images(self, folder, width, height, image_load_cap, start_index, keep_aspect_ratio, include_subfolders=False): + if folder and not os.path.isabs(folder) and args.base_directory: + folder = os.path.join(args.base_directory, folder) + if not folder or not os.path.isdir(folder): + raise FileNotFoundError(f"Folder '{folder}' cannot be found.") + + valid_extensions = ['.jpg', '.jpeg', '.png', '.webp', '.tga'] + image_paths = [] + if include_subfolders: + for root, _, files in os.walk(folder): + for file in files: + if any(file.lower().endswith(ext) for ext in valid_extensions): + image_paths.append(os.path.join(root, file)) + else: + for file in sorted(os.listdir(folder)): + if any(file.lower().endswith(ext) for ext in valid_extensions): + image_paths.append(os.path.join(folder, file)) + + dir_files = sorted(image_paths) + + if len(dir_files) == 0: + raise FileNotFoundError(f"No files in directory '{folder}'.") + + # start at start_index + dir_files = dir_files[start_index:] + + images = [] + masks = [] + image_path_list = [] + + limit_images = False + if image_load_cap > 0: + limit_images = True + image_count = 0 + + pbar = ProgressBar(len(dir_files)) + + for image_path in dir_files: + if os.path.isdir(image_path): + continue + if limit_images and image_count >= image_load_cap: + break + i = Image.open(image_path) + i = ImageOps.exif_transpose(i) + + # Resize image to maximum dimensions + if width == -1 and height == -1: + width = i.size[0] + height = i.size[1] + if i.size != (width, height): + i = self.resize_with_aspect_ratio(i, width, height, keep_aspect_ratio) + + + image = i.convert("RGB") + image = np.array(image).astype(np.float32) / 255.0 + image = torch.from_numpy(image)[None,] + + if 'A' in i.getbands(): + mask = np.array(i.getchannel('A')).astype(np.float32) / 255.0 + mask = 1. - torch.from_numpy(mask) + if mask.shape != (height, width): + mask = torch.nn.functional.interpolate(mask.unsqueeze(0).unsqueeze(0), + size=(height, width), + mode='bilinear', + align_corners=False).squeeze() + else: + mask = torch.zeros((height, width), dtype=torch.float32, device="cpu") + + images.append(image) + masks.append(mask) + image_path_list.append(image_path) + image_count += 1 + pbar.update(1) + + if len(images) == 1: + return (images[0], masks[0], 1, image_path_list) + + elif len(images) > 1: + image1 = images[0] + mask1 = masks[0].unsqueeze(0) + + for image2 in images[1:]: + image1 = torch.cat((image1, image2), dim=0) + + for mask2 in masks[1:]: + mask1 = torch.cat((mask1, mask2.unsqueeze(0)), dim=0) + + return (image1, mask1, len(images), image_path_list) + def resize_with_aspect_ratio(self, img, width, height, mode): + if mode == "stretch": + return img.resize((width, height), Image.Resampling.LANCZOS) + + img_width, img_height = img.size + aspect_ratio = img_width / img_height + target_ratio = width / height + + if mode == "crop": + # Calculate dimensions for center crop + if aspect_ratio > target_ratio: + # Image is wider - crop width + new_width = int(height * aspect_ratio) + img = img.resize((new_width, height), Image.Resampling.LANCZOS) + left = (new_width - width) // 2 + return img.crop((left, 0, left + width, height)) + else: + # Image is taller - crop height + new_height = int(width / aspect_ratio) + img = img.resize((width, new_height), Image.Resampling.LANCZOS) + top = (new_height - height) // 2 + return img.crop((0, top, width, top + height)) + + elif mode == "pad": + pad_color = self.get_edge_color(img) + # Calculate dimensions for padding + if aspect_ratio > target_ratio: + # Image is wider - pad height + new_height = int(width / aspect_ratio) + img = img.resize((width, new_height), Image.Resampling.LANCZOS) + padding = (height - new_height) // 2 + padded = Image.new('RGBA', (width, height), pad_color) + padded.paste(img, (0, padding)) + return padded + else: + # Image is taller - pad width + new_width = int(height * aspect_ratio) + img = img.resize((new_width, height), Image.Resampling.LANCZOS) + padding = (width - new_width) // 2 + padded = Image.new('RGBA', (width, height), pad_color) + padded.paste(img, (padding, 0)) + return padded + def get_edge_color(self, img): + """Sample edges and return dominant color""" + width, height = img.size + img = img.convert('RGBA') + + # Create 1-pixel high/wide images from edges + top = img.crop((0, 0, width, 1)) + bottom = img.crop((0, height-1, width, height)) + left = img.crop((0, 0, 1, height)) + right = img.crop((width-1, 0, width, height)) + + # Combine edges into single image + edges = Image.new('RGBA', (width*2 + height*2, 1)) + edges.paste(top, (0, 0)) + edges.paste(bottom, (width, 0)) + edges.paste(left.resize((height, 1)), (width*2, 0)) + edges.paste(right.resize((height, 1)), (width*2 + height, 0)) + + # Get median color + stat = ImageStat.Stat(edges) + median = tuple(map(int, stat.median)) + return median + +class ImageGridtoBatch: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "image": ("IMAGE", ), + "columns": ("INT", {"default": 3, "min": 1, "max": 8, "tooltip": "The number of columns in the grid."}), + "rows": ("INT", {"default": 0, "min": 1, "max": 8, "tooltip": "The number of rows in the grid. Set to 0 for automatic calculation."}), + } + } + + RETURN_TYPES = ("IMAGE",) + FUNCTION = "decompose" + CATEGORY = "KJNodes/image" + DESCRIPTION = "Converts a grid of images to a batch of images." + + def decompose(self, image, columns, rows): + B, H, W, C = image.shape + + # Calculate cell width, rounding down + cell_width = W // columns + + if rows == 0: + # If rows is 0, calculate number of full rows + cell_height = H // columns + rows = H // cell_height + else: + # If rows is specified, adjust cell_height + cell_height = H // rows + + # Crop the image to fit full cells + image = image[:, :rows*cell_height, :columns*cell_width, :] + + # Reshape and permute the image to get the grid + image = image.view(B, rows, cell_height, columns, cell_width, C) + image = image.permute(0, 1, 3, 2, 4, 5).contiguous() + image = image.view(B, rows * columns, cell_height, cell_width, C) + + # Reshape to the final batch tensor + img_tensor = image.view(-1, cell_height, cell_width, C) + + return (img_tensor,) + +class SaveImageKJ: + def __init__(self): + self.type = "output" + self.prefix_append = "" + self.compress_level = 4 + + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "images": ("IMAGE", {"tooltip": "The images to save."}), + "filename_prefix": ("STRING", {"default": "ComfyUI", "tooltip": "The prefix for the file to save. This may include formatting information such as %date:yyyy-MM-dd% or %Empty Latent Image.width% to include values from nodes."}), + "output_folder": ("STRING", {"default": "output", "tooltip": "The folder to save the images to."}), + }, + "optional": { + "caption_file_extension": ("STRING", {"default": ".txt", "tooltip": "The extension for the caption file."}), + "caption": ("STRING", {"forceInput": True, "tooltip": "string to save as .txt file"}), + }, + "hidden": { + "prompt": "PROMPT", "extra_pnginfo": "EXTRA_PNGINFO" + }, + } + + RETURN_TYPES = ("STRING",) + RETURN_NAMES = ("filename",) + FUNCTION = "save_images" + + OUTPUT_NODE = True + + CATEGORY = "KJNodes/image" + DESCRIPTION = "Saves the input images to your ComfyUI output directory." + + def save_images(self, images, output_folder, filename_prefix="ComfyUI", prompt=None, extra_pnginfo=None, caption=None, caption_file_extension=".txt"): + filename_prefix += self.prefix_append + + if os.path.isabs(output_folder): + if not os.path.exists(output_folder): + os.makedirs(output_folder, exist_ok=True) + full_output_folder = output_folder + _, filename, counter, subfolder, filename_prefix = folder_paths.get_save_image_path(filename_prefix, output_folder, images[0].shape[1], images[0].shape[0]) + else: + self.output_dir = folder_paths.get_output_directory() + full_output_folder, filename, counter, subfolder, filename_prefix = folder_paths.get_save_image_path(filename_prefix, self.output_dir, images[0].shape[1], images[0].shape[0]) + + results = list() + for (batch_number, image) in enumerate(images): + i = 255. * image.cpu().numpy() + img = Image.fromarray(np.clip(i, 0, 255).astype(np.uint8)) + metadata = None + if not args.disable_metadata: + metadata = PngInfo() + if prompt is not None: + metadata.add_text("prompt", json.dumps(prompt)) + if extra_pnginfo is not None: + for x in extra_pnginfo: + metadata.add_text(x, json.dumps(extra_pnginfo[x])) + + filename_with_batch_num = filename.replace("%batch_num%", str(batch_number)) + base_file_name = f"{filename_with_batch_num}_{counter:05}_" + file = f"{base_file_name}.png" + img.save(os.path.join(full_output_folder, file), pnginfo=metadata, compress_level=self.compress_level) + results.append({ + "filename": file, + "subfolder": subfolder, + "type": self.type + }) + if caption is not None: + txt_file = base_file_name + caption_file_extension + file_path = os.path.join(full_output_folder, txt_file) + with open(file_path, "w", encoding="utf-8") as f: + f.write(caption) + + counter += 1 + + return file, + +class SaveStringKJ: + def __init__(self): + self.output_dir = folder_paths.get_output_directory() + self.type = "output" + self.prefix_append = "" + self.compress_level = 4 + + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "string": ("STRING", {"forceInput": True, "tooltip": "string to save as .txt file"}), + "filename_prefix": ("STRING", {"default": "text", "tooltip": "The prefix for the file to save. This may include formatting information such as %date:yyyy-MM-dd% or %Empty Latent Image.width% to include values from nodes."}), + "output_folder": ("STRING", {"default": "output", "tooltip": "The folder to save the images to."}), + }, + "optional": { + "file_extension": ("STRING", {"default": ".txt", "tooltip": "The extension for the caption file."}), + }, + } + + RETURN_TYPES = ("STRING",) + RETURN_NAMES = ("filename",) + FUNCTION = "save_string" + + OUTPUT_NODE = True + + CATEGORY = "KJNodes/misc" + DESCRIPTION = "Saves the input string to your ComfyUI output directory." + + def save_string(self, string, output_folder, filename_prefix="text", file_extension=".txt"): + filename_prefix += self.prefix_append + + full_output_folder, filename, counter, subfolder, filename_prefix = folder_paths.get_save_image_path(filename_prefix, self.output_dir) + if output_folder and not os.path.isabs(output_folder) and args.base_directory: + output_folder = os.path.join(args.base_directory, output_folder) + if output_folder != "output": + if not os.path.exists(output_folder): + os.makedirs(output_folder, exist_ok=True) + full_output_folder = output_folder + + base_file_name = f"{filename_prefix}_{counter:05}_" + results = list() + + txt_file = base_file_name + file_extension + file_path = os.path.join(full_output_folder, txt_file) + with open(file_path, 'w', encoding="utf-8") as f: + f.write(string) + + return results, + +class FastPreview: + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + "image": ("IMAGE", ), + "format": (["JPEG", "PNG"], {"default": "JPEG"}), + "max_size": ("INT", {"default": 768, "min": 128, "max": 4096, "step": 64, + "tooltip": "Maximum width or height for the preview. Images larger than this are downscaled before encoding."}), + }, + "hidden": { + "unique_id": "UNIQUE_ID", + "prompt_id": "PROMPT_ID", + }, + } + + RETURN_TYPES = () + FUNCTION = "preview" + CATEGORY = "KJNodes/experimental" + OUTPUT_NODE = True + DESCRIPTION = "Fast image preview using binary websocket, bypassing base64/JSON overhead." + + def preview(self, image, format, max_size, unique_id=None, prompt_id=None): + arr = image[0].cpu().mul(255).clamp(0, 255).byte().numpy() + h, w = arr.shape[:2] + + if HAS_CV2 and (w > max_size or h > max_size): + scale = max_size / max(w, h) + arr = cv2.resize(arr, (int(w * scale), int(h * scale)), interpolation=cv2.INTER_LINEAR) + + pil_image = Image.fromarray(arr) + + if PromptServer is not None and unique_id is not None: + PromptServer.instance.send_sync( + BinaryEventTypes.PREVIEW_IMAGE_WITH_METADATA, + ( + (format, pil_image, None), + {"node_id": unique_id, "prompt_id": prompt_id or ""}, + ), + PromptServer.instance.client_id, + ) + + return {"ui": {"fast_preview": [True]}, "result": ()} + + +class ImageCropByMaskAndResize: + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "image": ("IMAGE", ), + "mask": ("MASK", ), + "base_resolution": ("INT", { "default": 512, "min": 0, "max": MAX_RESOLUTION, "step": 8, }), + "padding": ("INT", { "default": 0, "min": 0, "max": MAX_RESOLUTION, "step": 1, }), + "min_crop_resolution": ("INT", { "default": 128, "min": 0, "max": MAX_RESOLUTION, "step": 8, }), + "max_crop_resolution": ("INT", { "default": 512, "min": 0, "max": MAX_RESOLUTION, "step": 8, }), + }, + } + + RETURN_TYPES = ("IMAGE", "MASK", "BBOX", ) + RETURN_NAMES = ("images", "masks", "bbox",) + FUNCTION = "crop" + CATEGORY = "KJNodes/image" + + def crop_by_mask(self, mask, padding=0, min_crop_resolution=None, max_crop_resolution=None): + """ + Calculate bounding box from mask with proper padding boundary protection + Ensures crop region never exceeds original image boundaries + """ + iy, ix = (mask == 1).nonzero(as_tuple=True) + h0, w0 = mask.shape + + # Handle empty mask + if iy.numel() == 0: + x_c = w0 / 2.0 + y_c = h0 / 2.0 + width = 0 + height = 0 + else: + x_min = ix.min().item() + x_max = ix.max().item() + y_min = iy.min().item() + y_max = iy.max().item() + width = x_max - x_min + 1 # Include boundary pixels + height = y_max - y_min + 1 + x_c = (x_min + x_max) / 2.0 + y_c = (y_min + y_max) / 2.0 + + # Apply min/max resolution constraints + if min_crop_resolution: + width = max(width, min_crop_resolution) + height = max(height, min_crop_resolution) + if max_crop_resolution: + width = min(width, max_crop_resolution) + height = min(height, max_crop_resolution) + + # Critical: Limit padding expansion to available image space + # Calculate maximum possible padding for each direction + max_padding_x = min((w0 - width) // 2, padding) + max_padding_y = min((h0 - height) // 2, padding) + + # Apply constrained padding + final_width = width + 2 * max_padding_x + final_height = height + 2 * max_padding_y + + # Ensure final dimensions don't exceed image bounds + final_width = min(final_width, w0) + final_height = min(final_height, h0) + + # Calculate top-left corner with boundary protection + # Center the crop while respecting image boundaries + x0 = max(0, min(int(x_c - final_width / 2), w0 - final_width)) + y0 = max(0, min(int(y_c - final_height / 2), h0 - final_height)) + + return (x0, y0, final_width, final_height) + + def crop(self, image, mask, base_resolution, padding=0, min_crop_resolution=128, max_crop_resolution=512): + """ + Main crop and resize function with uniform target dimensions for all batch items + """ + mask = mask.round() + image_list = [] + mask_list = [] + bbox_list = [] + + # Step 1: Calculate individual bounding boxes + bbox_params = [] + aspect_ratios = [] + for i in range(image.shape[0]): + x0, y0, w, h = self.crop_by_mask(mask[i], padding, min_crop_resolution, max_crop_resolution) + bbox_params.append((x0, y0, w, h)) + aspect_ratios.append(w / h) + + # Step 2: Calculate uniform target dimensions based on maximum aspect ratio + max_w = max([w for x0, y0, w, h in bbox_params]) + max_h = max([h for x0, y0, w, h in bbox_params]) + max_aspect_ratio = max(aspect_ratios) + + # Round up to nearest multiple of 16 for stable processing + max_w = (max_w + 15) // 16 * 16 + max_h = (max_h + 15) // 16 * 16 + + # Determine target dimensions maintaining aspect ratio + if max_aspect_ratio > 1: + target_width = base_resolution + target_height = int(base_resolution / max_aspect_ratio) + else: + target_height = base_resolution + target_width = int(base_resolution * max_aspect_ratio) + + # Ensure target dimensions are multiples of 16 + target_width = (target_width + 15) // 16 * 16 + target_height = (target_height + 15) // 16 * 16 + + # Step 3: Process each image with uniform crop size + for i in range(image.shape[0]): + orig_x0, orig_y0, orig_w, orig_h = bbox_params[i] + + # Calculate center of original bounding box + x_center = orig_x0 + orig_w / 2 + y_center = orig_y0 + orig_h / 2 + + # Define uniform crop region centered on each image's bounding box + # This ensures all crops have exactly the same dimensions + x0_new = max(0, min(int(x_center - max_w / 2), image.shape[2] - max_w)) + y0_new = max(0, min(int(y_center - max_h / 2), image.shape[1] - max_h)) + x1_new = x0_new + max_w + y1_new = y0_new + max_h + + # Extract cropped regions + cropped_image = image[i][y0_new:y1_new, x0_new:x1_new, :] + cropped_mask = mask[i][y0_new:y1_new, x0_new:x1_new] + + # Resize to exact target dimensions + # Image with lanczos interpolation + cropped_image = cropped_image.unsqueeze(0).movedim(-1, 1) + cropped_image = common_upscale(cropped_image, target_width, target_height, "lanczos", "disabled") + cropped_image = cropped_image.movedim(1, -1).squeeze(0) + + # Mask with bilinear interpolation + cropped_mask = cropped_mask.unsqueeze(0).unsqueeze(0) + cropped_mask = common_upscale(cropped_mask, target_width, target_height, 'bilinear', "disabled") + cropped_mask = cropped_mask.squeeze(0).squeeze(0) + + image_list.append(cropped_image) + mask_list.append(cropped_mask) + bbox_list.append((x0_new, y0_new, x1_new, y1_new)) + + return (torch.stack(image_list), torch.stack(mask_list), bbox_list) + +class ImageCropByMask: + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "image": ("IMAGE", ), + "mask": ("MASK", ), + }, + } + + RETURN_TYPES = ("IMAGE", ) + RETURN_NAMES = ("image", ) + FUNCTION = "crop" + CATEGORY = "KJNodes/image" + DESCRIPTION = "Crops the input images based on the provided mask." + + def crop(self, image, mask): + B, H, W, C = image.shape + mask = mask.round() + + # Find bounding box for each batch + crops = [] + + for b in range(B): + # Get coordinates of non-zero elements + rows = torch.any(mask[min(b, mask.shape[0]-1)] > 0, dim=1) + cols = torch.any(mask[min(b, mask.shape[0]-1)] > 0, dim=0) + + # Find boundaries + y_min, y_max = torch.where(rows)[0][[0, -1]] + x_min, x_max = torch.where(cols)[0][[0, -1]] + + # Crop image and mask + crop = image[b:b+1, y_min:y_max+1, x_min:x_max+1, :] + crops.append(crop) + + # Stack results back together + cropped_images = torch.cat(crops, dim=0) + + return (cropped_images, ) + + + +class ImageUncropByMask: + + @classmethod + def INPUT_TYPES(s): + return {"required": + { + "destination": ("IMAGE",), + "source": ("IMAGE",), + "mask": ("MASK",), + "bbox": ("BBOX",), + }, + } + + CATEGORY = "KJNodes/image" + RETURN_TYPES = ("IMAGE",) + RETURN_NAMES = ("image",) + FUNCTION = "uncrop" + + def uncrop(self, destination, source, mask, bbox=None): + + output_list = [] + + B, H, W, C = destination.shape + + for i in range(source.shape[0]): + x0, y0, x1, y1 = bbox[i] + bbox_height = y1 - y0 + bbox_width = x1 - x0 + + # Resize source image to match the bounding box dimensions + #resized_source = F.interpolate(source[i].unsqueeze(0).movedim(-1, 1), size=(bbox_height, bbox_width), mode='bilinear', align_corners=False) + resized_source = common_upscale(source[i].unsqueeze(0).movedim(-1, 1), bbox_width, bbox_height, "lanczos", "disabled") + resized_source = resized_source.movedim(1, -1).squeeze(0) + + # Resize mask to match the bounding box dimensions + resized_mask = common_upscale(mask[i].unsqueeze(0).unsqueeze(0), bbox_width, bbox_height, "bilinear", "disabled") + resized_mask = resized_mask.squeeze(0).squeeze(0) + + # Calculate padding values + pad_left = x0 + pad_right = W - x1 + pad_top = y0 + pad_bottom = H - y1 + + # Pad the resized source image and mask to fit the destination dimensions + padded_source = F.pad(resized_source, pad=(0, 0, pad_left, pad_right, pad_top, pad_bottom), mode='constant', value=0) + padded_mask = F.pad(resized_mask, pad=(pad_left, pad_right, pad_top, pad_bottom), mode='constant', value=0) + + # Ensure the padded mask has the correct shape + padded_mask = padded_mask.unsqueeze(2).expand(-1, -1, destination[i].shape[2]) + # Ensure the padded source has the correct shape + padded_source = padded_source.unsqueeze(2).expand(-1, -1, -1, destination[i].shape[2]).squeeze(2) + + # Combine the destination and padded source images using the mask + result = destination[i] * (1.0 - padded_mask) + padded_source * padded_mask + + output_list.append(result) + + + return (torch.stack(output_list),) + +class ImageCropByMaskBatch: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "image": ("IMAGE", ), + "masks": ("MASK", ), + "width": ("INT", {"default": 512, "min": 0, "max": MAX_RESOLUTION, "step": 8, }), + "height": ("INT", {"default": 512, "min": 0, "max": MAX_RESOLUTION, "step": 8, }), + "padding": ("INT", {"default": 0, "min": 0, "max": 4096, "step": 1, }), + "preserve_size": ("BOOLEAN", {"default": False}), + "bg_color": ("STRING", {"default": "0, 0, 0", "tooltip": "Color as RGB values in range 0-255 or 0.0-1.0, or color name or hex code"}), + } + } + + RETURN_TYPES = ("IMAGE", "MASK", ) + RETURN_NAMES = ("images", "masks",) + FUNCTION = "crop" + CATEGORY = "KJNodes/image" + DESCRIPTION = "Crops the input images based on the provided masks." + + def crop(self, image, masks, width, height, bg_color, padding, preserve_size): + B, H, W, C = image.shape + BM, HM, WM = masks.shape + mask_count = BM + if HM != H or WM != W: + masks = F.interpolate(masks.unsqueeze(1), size=(H, W), mode='nearest-exact').squeeze(1) + output_images = [] + output_masks = [] + + # Parse background color using helper function + color_list = string_to_color(bg_color) + bg_color = [x / 255.0 for x in color_list] + + # For each mask + for i in range(mask_count): + curr_mask = masks[i] + + # Find bounds + y_indices, x_indices = torch.nonzero(curr_mask, as_tuple=True) + if len(y_indices) == 0 or len(x_indices) == 0: + continue + + # Get exact bounds with padding + min_y = max(0, y_indices.min().item() - padding) + max_y = min(H, y_indices.max().item() + 1 + padding) + min_x = max(0, x_indices.min().item() - padding) + max_x = min(W, x_indices.max().item() + 1 + padding) + + # Ensure mask has correct shape for multiplication + curr_mask = curr_mask.unsqueeze(-1).expand(-1, -1, C) + + # Crop image and mask together + cropped_img = image[0, min_y:max_y, min_x:max_x, :] + cropped_mask = curr_mask[min_y:max_y, min_x:max_x, :] + + crop_h, crop_w = cropped_img.shape[0:2] + new_w = crop_w + new_h = crop_h + + if not preserve_size or crop_w > width or crop_h > height: + scale = min(width/crop_w, height/crop_h) + new_w = int(crop_w * scale) + new_h = int(crop_h * scale) + + # Resize RGB + resized_img = common_upscale(cropped_img.permute(2,0,1).unsqueeze(0), new_w, new_h, "lanczos", "disabled").squeeze(0).permute(1,2,0) + resized_mask = torch.nn.functional.interpolate( + cropped_mask.permute(2,0,1).unsqueeze(0), + size=(new_h, new_w), + mode='nearest' + ).squeeze(0).permute(1,2,0) + else: + resized_img = cropped_img + resized_mask = cropped_mask + + # Create empty tensors + new_img = torch.zeros((height, width, 3), dtype=image.dtype) + new_mask = torch.zeros((height, width), dtype=image.dtype) + + # Pad both + pad_x = (width - new_w) // 2 + pad_y = (height - new_h) // 2 + new_img[pad_y:pad_y+new_h, pad_x:pad_x+new_w, :] = resized_img + if len(resized_mask.shape) == 3: + resized_mask = resized_mask[:,:,0] # Take first channel if 3D + new_mask[pad_y:pad_y+new_h, pad_x:pad_x+new_w] = resized_mask + + output_images.append(new_img) + output_masks.append(new_mask) + + if not output_images: + return (torch.zeros((0, height, width, 3), dtype=image.dtype),) + + out_rgb = torch.stack(output_images, dim=0) + out_masks = torch.stack(output_masks, dim=0) + + # Apply mask to RGB + mask_expanded = out_masks.unsqueeze(-1).expand(-1, -1, -1, 3) + background_color = torch.tensor(bg_color, dtype=torch.float32, device=image.device) + out_rgb = out_rgb * mask_expanded + background_color * (1 - mask_expanded) + + return (out_rgb, out_masks) + +class ImagePadKJ: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "image": ("IMAGE", ), + "left": ("INT", {"default": 0, "min": 0, "max": MAX_RESOLUTION, "step": 1, }), + "right": ("INT", {"default": 0, "min": 0, "max": MAX_RESOLUTION, "step": 1, }), + "top": ("INT", {"default": 0, "min": 0, "max": MAX_RESOLUTION, "step": 1, }), + "bottom": ("INT", {"default": 0, "min": 0, "max": MAX_RESOLUTION, "step": 1, }), + "extra_padding": ("INT", {"default": 0, "min": 0, "max": MAX_RESOLUTION, "step": 1, }), + "pad_mode": (["edge", "edge_pixel", "color", "pillarbox_blur"],), + "color": ("STRING", {"default": "0, 0, 0", "tooltip": "Color as RGB values in range 0-255 or 0.0-1.0, or color name or hex code"}), + }, + "optional": { + "mask": ("MASK", ), + "target_width": ("INT", {"default": 512, "min": 0, "max": MAX_RESOLUTION, "step": 1, "forceInput": True}), + "target_height": ("INT", {"default": 512, "min": 0, "max": MAX_RESOLUTION, "step": 1, "forceInput": True}), + } + } + + RETURN_TYPES = ("IMAGE", "MASK", ) + RETURN_NAMES = ("images", "masks",) + FUNCTION = "pad" + CATEGORY = "KJNodes/image" + DESCRIPTION = "Pad the input image and optionally mask with the specified padding." + + def pad(self, image, left, right, top, bottom, extra_padding, color, pad_mode, mask=None, target_width=None, target_height=None): + B, H, W, C = image.shape + # Resize masks to image dimensions if necessary + if mask is not None: + BM, HM, WM = mask.shape + if HM != H or WM != W: + mask = F.interpolate(mask.unsqueeze(1), size=(H, W), mode='nearest-exact').squeeze(1) + + # Parse background color using helper function + color_list = string_to_color(color) + bg_color = [x / 255.0 for x in color_list] + if len(bg_color) == 1: + bg_color = bg_color * 3 # Grayscale to RGB + bg_color = torch.tensor(bg_color, dtype=image.dtype, device=image.device) + + # Calculate padding sizes with extra padding + if target_width is not None and target_height is not None: + if extra_padding > 0: + image = common_upscale(image.movedim(-1, 1), W - extra_padding, H - extra_padding, "lanczos", "disabled").movedim(1, -1) + B, H, W, C = image.shape + + padded_width = target_width + padded_height = target_height + pad_left = (padded_width - W) // 2 + pad_right = padded_width - W - pad_left + pad_top = (padded_height - H) // 2 + pad_bottom = padded_height - H - pad_top + else: + pad_left = left + extra_padding + pad_right = right + extra_padding + pad_top = top + extra_padding + pad_bottom = bottom + extra_padding + + padded_width = W + pad_left + pad_right + padded_height = H + pad_top + pad_bottom + + # Pillarbox blur mode + if pad_mode == "pillarbox_blur": + def _gaussian_blur_nchw(img_nchw, sigma_px): + if sigma_px <= 0: + return img_nchw + radius = max(1, int(3.0 * float(sigma_px))) + k = 2 * radius + 1 + x = torch.arange(-radius, radius + 1, device=img_nchw.device, dtype=img_nchw.dtype) + k1 = torch.exp(-(x * x) / (2.0 * float(sigma_px) * float(sigma_px))) + k1 = k1 / k1.sum() + kx = k1.view(1, 1, 1, k) + ky = k1.view(1, 1, k, 1) + c = img_nchw.shape[1] + kx = kx.repeat(c, 1, 1, 1) + ky = ky.repeat(c, 1, 1, 1) + img_nchw = F.conv2d(img_nchw, kx, padding=(0, radius), groups=c) + img_nchw = F.conv2d(img_nchw, ky, padding=(radius, 0), groups=c) + return img_nchw + + out_image = torch.zeros((B, padded_height, padded_width, C), dtype=image.dtype, device=image.device) + for b in range(B): + scale_fill = max(padded_width / float(W), padded_height / float(H)) if (W > 0 and H > 0) else 1.0 + bg_w = max(1, int(round(W * scale_fill))) + bg_h = max(1, int(round(H * scale_fill))) + src_b = image[b].movedim(-1, 0).unsqueeze(0) + bg = common_upscale(src_b, bg_w, bg_h, "bilinear", crop="disabled") + y0 = max(0, (bg_h - padded_height) // 2) + x0 = max(0, (bg_w - padded_width) // 2) + y1 = min(bg_h, y0 + padded_height) + x1 = min(bg_w, x0 + padded_width) + bg = bg[:, :, y0:y1, x0:x1] + if bg.shape[2] != padded_height or bg.shape[3] != padded_width: + pad_h = padded_height - bg.shape[2] + pad_w = padded_width - bg.shape[3] + pad_top_fix = max(0, pad_h // 2) + pad_bottom_fix = max(0, pad_h - pad_top_fix) + pad_left_fix = max(0, pad_w // 2) + pad_right_fix = max(0, pad_w - pad_left_fix) + bg = F.pad(bg, (pad_left_fix, pad_right_fix, pad_top_fix, pad_bottom_fix), mode="replicate") + sigma = max(1.0, 0.006 * float(min(padded_height, padded_width))) + bg = _gaussian_blur_nchw(bg, sigma_px=sigma) + if C >= 3: + r, g, bch = bg[:, 0:1], bg[:, 1:2], bg[:, 2:3] + luma = 0.2126 * r + 0.7152 * g + 0.0722 * bch + gray = torch.cat([luma, luma, luma], dim=1) + desat = 0.20 + rgb = torch.cat([r, g, bch], dim=1) + rgb = rgb * (1.0 - desat) + gray * desat + bg[:, 0:3, :, :] = rgb + dim = 0.35 + bg = torch.clamp(bg * dim, 0.0, 1.0) + out_image[b] = bg.squeeze(0).movedim(0, -1) + out_image[:, pad_top:pad_top+H, pad_left:pad_left+W, :] = image + # Mask handling for pillarbox_blur + if mask is not None: + fg_mask = mask + out_masks = torch.ones((B, padded_height, padded_width), dtype=image.dtype, device=image.device) + out_masks[:, pad_top:pad_top+H, pad_left:pad_left+W] = fg_mask + else: + out_masks = torch.ones((B, padded_height, padded_width), dtype=image.dtype, device=image.device) + out_masks[:, pad_top:pad_top+H, pad_left:pad_left+W] = 0.0 + return (out_image, out_masks) + + # Standard pad logic (edge/color) + out_image = torch.zeros((B, padded_height, padded_width, C), dtype=image.dtype, device=image.device) + for b in range(B): + if pad_mode == "edge": + # Pad with edge color (mean) + top_edge = image[b, 0, :, :] + bottom_edge = image[b, H-1, :, :] + left_edge = image[b, :, 0, :] + right_edge = image[b, :, W-1, :] + out_image[b, :pad_top, :, :] = top_edge.mean(dim=0) + out_image[b, pad_top+H:, :, :] = bottom_edge.mean(dim=0) + out_image[b, :, :pad_left, :] = left_edge.mean(dim=0) + out_image[b, :, pad_left+W:, :] = right_edge.mean(dim=0) + out_image[b, pad_top:pad_top+H, pad_left:pad_left+W, :] = image[b] + elif pad_mode == "edge_pixel": + # Pad with exact edge pixel values + for y in range(pad_top): + out_image[b, y, pad_left:pad_left+W, :] = image[b, 0, :, :] + for y in range(pad_top+H, padded_height): + out_image[b, y, pad_left:pad_left+W, :] = image[b, H-1, :, :] + for x in range(pad_left): + out_image[b, pad_top:pad_top+H, x, :] = image[b, :, 0, :] + for x in range(pad_left+W, padded_width): + out_image[b, pad_top:pad_top+H, x, :] = image[b, :, W-1, :] + out_image[b, :pad_top, :pad_left, :] = image[b, 0, 0, :] + out_image[b, :pad_top, pad_left+W:, :] = image[b, 0, W-1, :] + out_image[b, pad_top+H:, :pad_left, :] = image[b, H-1, 0, :] + out_image[b, pad_top+H:, pad_left+W:, :] = image[b, H-1, W-1, :] + out_image[b, pad_top:pad_top+H, pad_left:pad_left+W, :] = image[b] + else: + # Pad with specified background color + out_image[b, :, :, :] = bg_color.unsqueeze(0).unsqueeze(0) + out_image[b, pad_top:pad_top+H, pad_left:pad_left+W, :] = image[b] + + if mask is not None: + out_masks = torch.nn.functional.pad( + mask, + (pad_left, pad_right, pad_top, pad_bottom), + mode='replicate' + ) + else: + out_masks = torch.ones((B, padded_height, padded_width), dtype=image.dtype, device=image.device) + for m in range(B): + out_masks[m, pad_top:pad_top+H, pad_left:pad_left+W] = 0.0 + + return (out_image, out_masks) + +# extends https://github.com/Kosinkadink/ComfyUI-VideoHelperSuite +class LoadVideosFromFolder: + @classmethod + def __init__(cls): + try: + cls.vhs_nodes = importlib.import_module("ComfyUI-VideoHelperSuite.videohelpersuite") + except ImportError: + try: + cls.vhs_nodes = importlib.import_module("comfyui-videohelpersuite.videohelpersuite") + except ImportError: + # Fallback to sys.modules search for Windows compatibility + import sys + vhs_module = None + for module_name in sys.modules: + if 'videohelpersuite' in module_name and 'videohelpersuite' in sys.modules[module_name].__dict__: + vhs_module = sys.modules[module_name] + break + + if vhs_module is None: + # Try direct access to the videohelpersuite submodule + for module_name in sys.modules: + if module_name.endswith('videohelpersuite'): + vhs_module = sys.modules[module_name] + break + + if vhs_module is not None: + cls.vhs_nodes = vhs_module + else: + raise ImportError("This node requires ComfyUI-VideoHelperSuite to be installed.") + + except ImportError: + raise ImportError("This node requires ComfyUI-VideoHelperSuite to be installed.") + + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "video": ("STRING", {"default": "X://insert/path/"},), + "force_rate": ("FLOAT", {"default": 0, "min": 0, "max": 60, "step": 1, "disable": 0}), + "custom_width": ("INT", {"default": 0, "min": 0, "max": 4096, 'disable': 0}), + "custom_height": ("INT", {"default": 0, "min": 0, "max": 4096, 'disable': 0}), + "frame_load_cap": ("INT", {"default": 0, "min": 0, "max": 10000, "step": 1, "disable": 0}), + "skip_first_frames": ("INT", {"default": 0, "min": 0, "max": 10000, "step": 1}), + "select_every_nth": ("INT", {"default": 1, "min": 1, "max": 1000, "step": 1}), + "output_type": (["batch", "grid"], {"default": "batch"}), + "grid_max_columns": ("INT", {"default": 4, "min": 1, "max": 16, "step": 1, "disable": 1}), + "add_label": ( "BOOLEAN", {"default": False} ), + }, + "hidden": { + "force_size": "STRING", + "unique_id": "UNIQUE_ID" + }, + } + + CATEGORY = "KJNodes/misc" + + RETURN_TYPES = ("IMAGE", ) + RETURN_NAMES = ("IMAGE", ) + + FUNCTION = "load_video" + + def load_video(self, output_type, grid_max_columns, add_label=False, **kwargs): + if kwargs.get('video') and not os.path.isabs(kwargs['video']) and args.base_directory: + kwargs['video'] = os.path.join(args.base_directory, kwargs['video']) + + if self.vhs_nodes is None: + raise ImportError("This node requires ComfyUI-VideoHelperSuite to be installed.") + videos_list = [] + filenames = [] + for f in sorted(os.listdir(kwargs['video'])): + if os.path.isfile(os.path.join(kwargs['video'], f)): + file_parts = f.split('.') + if len(file_parts) > 1 and (file_parts[-1].lower() in ['webm', 'mp4', 'mkv', 'gif', 'mov']): + videos_list.append(os.path.join(kwargs['video'], f)) + filenames.append(f) + + kwargs.pop('video') + loaded_videos = [] + for idx, video in enumerate(videos_list): + video_tensor = self.vhs_nodes.load_video_nodes.load_video(video=video, **kwargs)[0] + if add_label: + # Add filename label above video (without extension) + if video_tensor.dim() == 4: + _, h, w, c = video_tensor.shape + else: + h, w, c = video_tensor.shape + # Remove extension from filename + label_text = filenames[idx].rsplit('.', 1)[0] + font_size = max(16, w // 20) + try: + font = ImageFont.truetype("arial.ttf", font_size) + except: + font = ImageFont.load_default() + dummy_img = Image.new("RGB", (w, 10), (0,0,0)) + draw = ImageDraw.Draw(dummy_img) + text_bbox = draw.textbbox((0,0), label_text, font=font) + extra_padding = max(12, font_size // 2) # More padding under the font + label_height = text_bbox[3] - text_bbox[1] + extra_padding + label_img = Image.new("RGB", (w, label_height), (0,0,0)) + draw = ImageDraw.Draw(label_img) + draw.text((w//2 - (text_bbox[2]-text_bbox[0])//2, 4), label_text, font=font, fill=(255,255,255)) + label_np = np.asarray(label_img).astype(np.float32) / 255.0 + label_tensor = torch.from_numpy(label_np) + if c == 1: + label_tensor = label_tensor.mean(dim=2, keepdim=True) + elif c == 4: + alpha = torch.ones((label_height, w, 1), dtype=label_tensor.dtype) + label_tensor = torch.cat([label_tensor, alpha], dim=2) + if video_tensor.dim() == 4: + label_tensor = label_tensor.unsqueeze(0).expand(video_tensor.shape[0], -1, -1, -1) + video_tensor = torch.cat([label_tensor, video_tensor], dim=1) + else: + video_tensor = torch.cat([label_tensor, video_tensor], dim=0) + loaded_videos.append(video_tensor) + if output_type == "batch": + out_tensor = torch.cat(loaded_videos) + elif output_type == "grid": + rows = (len(loaded_videos) + grid_max_columns - 1) // grid_max_columns + # Pad the last row if needed + total_slots = rows * grid_max_columns + while len(loaded_videos) < total_slots: + loaded_videos.append(torch.zeros_like(loaded_videos[0])) + # Create grid by rows + row_tensors = [] + for row_idx in range(rows): + start_idx = row_idx * grid_max_columns + end_idx = start_idx + grid_max_columns + row_videos = loaded_videos[start_idx:end_idx] + # Pad all videos in this row to the same height + heights = [v.shape[1] for v in row_videos] + max_height = max(heights) + padded_row_videos = [] + for v in row_videos: + pad_height = max_height - v.shape[1] + if pad_height > 0: + # Pad (frames, H, W, C) or (H, W, C) + if v.dim() == 4: + pad = (0,0, 0,0, 0,pad_height, 0,0) # (C,W,H,F) + v = torch.nn.functional.pad(v, (0,0,0,0,0,pad_height,0,0)) + else: + v = torch.nn.functional.pad(v, (0,0,0,0,pad_height,0)) + padded_row_videos.append(v) + row_tensor = torch.cat(padded_row_videos, dim=2) # Concatenate horizontally + row_tensors.append(row_tensor) + out_tensor = torch.cat(row_tensors, dim=1) # Concatenate rows vertically + return out_tensor, + + @classmethod + def IS_CHANGED(s, video, **kwargs): + if s.vhs_nodes is not None: + return s.vhs_nodes.utils.hash_path(video) + return None + + +class EncodeVideoComponents(io.ComfyNode): + @classmethod + def define_schema(cls): + position_options = ["center", "top", "bottom", "left", "right"] + options = [ + io.DynamicCombo.Option(key="stretch", inputs=[]), + io.DynamicCombo.Option(key="resize", inputs=[]), + io.DynamicCombo.Option(key="total_pixels", inputs=[]), + io.DynamicCombo.Option(key="crop", inputs=[ + io.Combo.Input("crop_position", options=position_options, tooltip="Position to crop from."), + ]), + io.DynamicCombo.Option(key="pad", inputs=[ + io.String.Input("pad_color", default="0, 0, 0", tooltip="Color to use for padding."), + io.Combo.Input("pad_position", options=position_options, tooltip="Position to align the image within the padded area."), + ]), + io.DynamicCombo.Option(key="pad_edge", inputs=[ + io.Combo.Input("pad_position", options=position_options, tooltip="Position to align the image within the padded area."), + ]), + io.DynamicCombo.Option(key="pad_edge_pixel", inputs=[ + io.Combo.Input("pad_position", options=position_options, tooltip="Position to align the image within the padded area."), + ]), + io.DynamicCombo.Option(key="pillarbox_blur", inputs=[ + io.Combo.Input("pad_position", options=position_options, tooltip="Position to align the image within the padded area."), + ]), + ] + return io.Schema( + node_id="EncodeVideoComponents", + search_aliases=["video to latent", "encode video", "vae encode video"], + display_name="Encode Video Components", + category="KJNodes/image", + description="Extracts video frames, resizes them, and encodes with a VAE directly, avoiding storing the full image tensor.", + inputs=[ + io.Video.Input("video", tooltip="The video to extract and encode."), + io.Vae.Input("vae", tooltip="The VAE model to use for encoding."), + io.Int.Input("width", default=768, min=0, max=16384, step=2, tooltip="Target width for the frames before encoding. 0 = original width."), + io.Int.Input("height", default=512, min=0, max=16384, step=2, tooltip="Target height for the frames before encoding. 0 = original height."), + io.Int.Input("max_frames", default=0, min=0, max=999999, step=1, tooltip="Maximum number of frames. 0 = no limit."), + io.Combo.Input("upscale_method", options=["nearest-exact", "bilinear", "area", "bicubic", "lanczos"], default="lanczos", tooltip="Interpolation method for resizing."), + io.DynamicCombo.Input( + "keep_proportion", + options=options, + display_name="Keep Proportion", + tooltip="How to handle aspect ratio mismatch when resizing.", + ), + ], + outputs=[ + io.Latent.Output(display_name="latent"), + io.Audio.Output(display_name="audio"), + io.Float.Output(display_name="fps"), + io.Int.Output(display_name="frame_count", tooltip="Number pixel space frames after any possible cropping"), + ], + ) + + @staticmethod + def _compute_resize_params(mode, position, width, height, src_w, src_h): + """Compute target resize dimensions, crop region, and padding from keep_proportion mode.""" + if width == 0: + width = src_w + if height == 0: + height = src_h + pillarbox_blur = mode == "pillarbox_blur" + pad_left = pad_right = pad_top = pad_bottom = 0 + crop_region = None # (x, y, crop_w, crop_h) or None + + if mode in ["resize", "total_pixels"] or mode.startswith("pad") or pillarbox_blur: + if mode == "total_pixels": + total_pixels = width * height + aspect_ratio = src_w / src_h + new_height = int(math.sqrt(total_pixels / aspect_ratio)) + new_width = int(math.sqrt(total_pixels * aspect_ratio)) + else: + ratio = min(width / src_w, height / src_h) + new_width = round(src_w * ratio) + new_height = round(src_h * ratio) + + if mode.startswith("pad") or pillarbox_blur: + if position == "center": + pad_left = (width - new_width) // 2 + pad_right = width - new_width - pad_left + pad_top = (height - new_height) // 2 + pad_bottom = height - new_height - pad_top + elif position == "top": + pad_left = (width - new_width) // 2 + pad_right = width - new_width - pad_left + pad_top = 0 + pad_bottom = height - new_height + elif position == "bottom": + pad_left = (width - new_width) // 2 + pad_right = width - new_width - pad_left + pad_top = height - new_height + pad_bottom = 0 + elif position == "left": + pad_left = 0 + pad_right = width - new_width + pad_top = (height - new_height) // 2 + pad_bottom = height - new_height - pad_top + elif position == "right": + pad_left = width - new_width + pad_right = 0 + pad_top = (height - new_height) // 2 + pad_bottom = height - new_height - pad_top + + width = new_width + height = new_height + + if mode == "crop": + old_aspect = src_w / src_h + new_aspect = width / height + if old_aspect > new_aspect: + crop_w = round(src_h * new_aspect) + crop_h = src_h + else: + crop_w = src_w + crop_h = round(src_w / new_aspect) + if position == "center": + x = (src_w - crop_w) // 2 + y = (src_h - crop_h) // 2 + elif position == "top": + x = (src_w - crop_w) // 2 + y = 0 + elif position == "bottom": + x = (src_w - crop_w) // 2 + y = src_h - crop_h + elif position == "left": + x = 0 + y = (src_h - crop_h) // 2 + elif position == "right": + x = src_w - crop_w + y = (src_h - crop_h) // 2 + crop_region = (x, y, crop_w, crop_h) + + return width, height, crop_region, (pad_left, pad_right, pad_top, pad_bottom) + + @classmethod + def execute(cls, video, vae, width, height, max_frames, upscale_method, keep_proportion) -> io.NodeOutput: + import av + import itertools + + mode = keep_proportion["keep_proportion"] + position = keep_proportion.get("crop_position") or keep_proportion.get("pad_position", "center") + pad_color = keep_proportion.get("pad_color", "0, 0, 0") + target_dtype = vae.vae_dtype + + # Access VideoFromFile internals for efficient per-frame decode + source = video.get_stream_source() + start_time = getattr(video, '_VideoFromFile__start_time', 0) + duration = getattr(video, '_VideoFromFile__duration', 0) + + # Get frame count for progress bar, capped by max_frames + try: + total_frames = video.get_frame_count() + except (ValueError, AttributeError): + total_frames = 0 + if max_frames > 0 and total_frames > 0: + total_frames = min(total_frames, max_frames) + pbar = ProgressBar(total_frames) if total_frames > 0 else None + + # Lanczos requires PIL (CPU-only), all other methods use torch on GPU + use_gpu = upscale_method != "lanczos" + device = model_management.get_torch_device() if use_gpu else torch.device("cpu") + + # --- Decode video frames with per-frame resize + dtype cast --- + with av.open(source, mode='r') as container: + video_stream = container.streams.video[0] + start_pts = int(start_time / video_stream.time_base) + end_pts = int((start_time + duration) / video_stream.time_base) if duration else 0 + container.seek(start_pts, stream=video_stream) + + res_w, res_h, crop_region, padding = None, None, None, (0, 0, 0, 0) + frames = [] + for frame in container.decode(video_stream): + if frame.pts < start_pts: + continue + if duration and frame.pts >= end_pts: + break + if max_frames > 0 and len(frames) >= max_frames: + break + + if res_w is None: + src_h, src_w = frame.height, frame.width + res_w, res_h, crop_region, padding = cls._compute_resize_params( + mode, position, width, height, src_w, src_h + ) + + # Decode to tensor and normalize + img = torch.from_numpy(frame.to_ndarray(format='rgb24')).to(device=device, dtype=torch.float32) / 255.0 + + # Crop if needed (before resize) + if crop_region is not None: + cx, cy, cw, ch = crop_region + img = img[cy:cy+ch, cx:cx+cw, :] + + # Resize (GPU for torch-native methods, CPU/PIL for lanczos) + img = common_upscale( + img.unsqueeze(0).movedim(-1, 1), res_w, res_h, upscale_method, crop="disabled" + ).movedim(1, -1).squeeze(0).to(dtype=target_dtype, device="cpu") + + frames.append(img) + if pbar is not None: + pbar.update(1) + + frame_rate = video_stream.average_rate if video_stream.average_rate else 1 + + s = torch.stack(frames) if frames else torch.zeros(0, height, width, 3, dtype=target_dtype) + + # Pad logic (applied on the full stack since padding modes like pillarbox_blur need all frames) + pillarbox_blur = mode == "pillarbox_blur" + pad_left, pad_right, pad_top, pad_bottom = padding + if (mode.startswith("pad") or pillarbox_blur) and (pad_left > 0 or pad_right > 0 or pad_top > 0 or pad_bottom > 0): + pad_mode = ( + "pillarbox_blur" if pillarbox_blur else + "edge" if mode == "pad_edge" else + "edge_pixel" if mode == "pad_edge_pixel" else + "color" + ) + s, _ = ImagePadKJ.pad(None, s, pad_left, pad_right, pad_top, pad_bottom, 0, pad_color, pad_mode) + + # Trim frames to a count valid for the VAE's temporal compression + try: + temporal_compress = vae.downscale_ratio[0] + temporal_decompress = vae.upscale_ratio[0] + valid_frames = temporal_decompress(temporal_compress(s.shape[0])) + if valid_frames < s.shape[0]: + logging.warning(f"[EncodeVideoComponents] Trimming {s.shape[0] - valid_frames} frames ({s.shape[0]} -> {valid_frames}) to match VAE temporal compression ratio") + s = s[:valid_frames] + except (TypeError, IndexError): + pass + + t = vae.encode(s) + + # --- Extract audio in a separate pass --- + audio = None + if isinstance(source, BytesIO): + source.seek(0) + with av.open(source, mode='r') as container: + if len(container.streams.audio): + audio_stream = container.streams.audio[-1] + if start_time > 0: + audio_start_pts = int(start_time / audio_stream.time_base) + container.seek(audio_start_pts, stream=audio_stream) + audio_frames = [] + resample = av.audio.resampler.AudioResampler(format='fltp').resample + aframes = itertools.chain.from_iterable( + map(resample, container.decode(audio_stream)) + ) + has_first_frame = False + for aframe in aframes: + offset_seconds = start_time - aframe.time + to_skip = int(offset_seconds * audio_stream.sample_rate) + if to_skip < aframe.samples: + has_first_frame = True + break + if has_first_frame: + audio_frames.append(aframe.to_ndarray()[..., to_skip:]) + for aframe in aframes: + if duration and aframe.time > start_time + duration: + break + audio_frames.append(aframe.to_ndarray()) + if audio_frames: + audio_data = np.concatenate(audio_frames, axis=1) + if duration: + audio_data = audio_data[..., :int(duration * audio_stream.sample_rate)] + audio = { + "waveform": torch.from_numpy(audio_data).unsqueeze(0), + "sample_rate": int(audio_stream.sample_rate) if audio_stream.sample_rate else 1, + } + + return io.NodeOutput({"samples": t}, audio, float(frame_rate), s.shape[0]) + + +class DecodeAndSaveVideo(io.ComfyNode): + @classmethod + def define_schema(cls): + return io.Schema( + node_id="DecodeAndSaveVideo", + search_aliases=["video to latent", "decode video"], + display_name="Decode and Save Video", + category="KJNodes/image", + description="Decodes video frames and audio from latent representations, combines them, and saves as a video file, without keeping intermediate images in memory.", + inputs=[ + io.Latent.Input("video_latent", tooltip="The latent representation of the video frames."), + io.Latent.Input("audio_latent", optional=True, tooltip="The latent representation of the audio frames."), + io.Float.Input("fps", default=25.0, min=0.0, max=999.0, step=0.01, tooltip="Frame rate for the output video."), + io.String.Input("filename_prefix", default="video/ComfyUI", tooltip="The prefix for the file to save. This may include formatting information such as %date:yyyy-MM-dd% or %Empty Latent Image.width% to include values from nodes."), + io.Combo.Input("format", options=Types.VideoContainer.as_input(), default="auto", tooltip="The format to save the video as."), + io.Combo.Input("codec", options=Types.VideoCodec.as_input(), default="auto", tooltip="The codec to use for the video."), + io.Vae.Input("video_vae", tooltip="The VAE model to use for encoding."), + io.Vae.Input("audio_vae", optional=True, tooltip="The VAE model to use for decoding audio."), + io.DynamicCombo.Input("tiling", options=[ + io.DynamicCombo.Option(key="disabled", inputs=[]), + io.DynamicCombo.Option(key="enabled", inputs=[ + io.Int.Input("tile_size", default=512, min=64, max=4096, step=32, tooltip="Size of the tiles to decode. Smaller tiles use less memory but take more time."), + io.Int.Input("overlap", default=64, min=0, max=4096, step=32, tooltip="Amount of overlap between tiles. Higher overlap can improve quality at the edges of tiles but uses more memory and takes more time."), + io.Int.Input("temporal_size", default=4096, min=8, max=4096, step=4, tooltip="Only used for video VAEs: Amount of frames to decode at a time. Higher value than number of frames = disabled"), + io.Int.Input("temporal_overlap", default=16, min=4, max=4096, step=4, tooltip="Only used for video VAEs: Amount of frames to overlap. Higher overlap can improve quality at the edges of temporal tiles but uses more memory and takes more time."), + ]), + ]), + ], + hidden=[io.Hidden.prompt, io.Hidden.extra_pnginfo], + is_output_node=True, + ) + + @classmethod + def execute(cls, video_latent, video_vae, filename_prefix, format, codec, tiling, audio_latent=None, audio_vae=None, fps=25.0) -> io.NodeOutput: + if tiling["tiling"] == "enabled": + tile_size = tiling["tile_size"] + overlap = tiling["overlap"] + temporal_size = tiling["temporal_size"] + temporal_overlap = tiling["temporal_overlap"] + + if tile_size < overlap * 4: + overlap = tile_size // 4 + if temporal_size < temporal_overlap * 2: + temporal_overlap = temporal_overlap // 2 + temporal_compression = video_vae.temporal_compression_decode() + if temporal_compression is not None: + temporal_size = max(2, temporal_size // temporal_compression) + temporal_overlap = max(1, min(temporal_size // 2, temporal_overlap // temporal_compression)) + else: + temporal_size = None + temporal_overlap = None + + compression = video_vae.spacial_compression_decode() + + images = cls.decode_tiled(video_vae, video_latent["samples"], + tile_t=max(2, temporal_size), + tile_x=tile_size // compression, + tile_y=tile_size // compression, + overlap=(temporal_overlap if temporal_overlap is not None else 1, max(1, overlap // compression), max(1, overlap // compression)), + ).movedim(1, -1) + if len(images.shape) == 5: #Combine batches + images = images.reshape(-1, images.shape[-3], images.shape[-2], images.shape[-1]) + else: + images = cls.decode_video(video_vae, video_latent) + + if audio_latent is not None: + if audio_vae is None: + raise ValueError("Audio VAE must be provided if audio latent is provided.") + audio = cls.decode_audio(audio_latent, audio_vae) + else: + audio = None + + video = InputImpl.VideoFromComponents(Types.VideoComponents(images=images, audio=audio, frame_rate=Fraction(fps))) + file, subfolder = cls.save_video(video, filename_prefix, format, codec) + + return io.NodeOutput(ui=ui.PreviewVideo([ui.SavedResult(file, subfolder, io.FolderType.output)])) + + @classmethod + def decode_video(cls, vae, samples): + samples_in = samples["samples"] + if samples_in.is_nested: + samples_in = samples_in.unbind()[0] + + vae.throw_exception_if_invalid() + pixel_samples = None + do_tile = False + if vae.latent_dim == 2 and samples_in.ndim == 5: + samples_in = samples_in[:, :, 0] + try: + memory_used = vae.memory_used_decode(samples_in.shape, vae.vae_dtype) + model_management.load_models_gpu([vae.patcher], memory_required=memory_used, force_full_load=True) + free_memory = vae.patcher.get_free_memory(vae.device) + batch_number = int(free_memory / memory_used) + batch_number = max(1, batch_number) + + for x in range(0, samples_in.shape[0], batch_number): + samples = samples_in[x:x+batch_number].to(vae.vae_dtype).to(vae.device) + out = vae.process_output(vae.first_stage_model.decode(samples).to(vae.output_device).to(torch.float16)) + if pixel_samples is None: + pixel_samples = torch.empty((samples_in.shape[0],) + tuple(out.shape[1:]), device=vae.output_device, dtype=out.dtype) + pixel_samples[x:x+batch_number] = out + except Exception as e: + model_management.raise_non_oom(e) + logging.warning("Warning: Ran out of memory when regular VAE decoding, retrying with tiled VAE decoding.") + do_tile = True + + if do_tile: + dims = samples_in.ndim - 2 + if dims == 1 or cls.extra_1d_channel is not None: + pixel_samples = vae.decode_tiled_1d(samples_in) + elif dims == 2: + pixel_samples = vae.decode_tiled_2d(samples_in) + elif dims == 3: + tile = 256 // vae.spacial_compression_decode() + overlap = tile // 4 + pixel_samples = vae.decode_tiled_3d(samples_in, tile_x=tile, tile_y=tile, overlap=(1, overlap, overlap)) + + pixel_samples = pixel_samples.to(vae.output_device).movedim(1,-1) + + if len(pixel_samples.shape) == 5: #Combine batches + pixel_samples = pixel_samples.reshape(-1, pixel_samples.shape[-3], pixel_samples.shape[-2], pixel_samples.shape[-1]) + return pixel_samples + + @classmethod + def decode_tiled(cls, vae, samples, tile_t=999, tile_x=32, tile_y=32, overlap=(1, 8, 8)): + vae.throw_exception_if_invalid() + memory_used = vae.memory_used_decode(samples.shape, vae.vae_dtype) + model_management.load_models_gpu([vae.patcher], memory_required=memory_used, force_full_load=vae.disable_offload) + decode_fn = lambda a: vae.first_stage_model.decode(a.to(vae.vae_dtype).to(vae.device)).to(torch.float16) + return vae.process_output(tiled_scale_multidim(samples, decode_fn, tile=(tile_t, tile_x, tile_y), overlap=overlap, + upscale_amount=vae.upscale_ratio, out_channels=vae.output_channels, index_formulas=vae.upscale_index_formula, output_device=vae.output_device)) + + + @classmethod + def decode_audio(cls, samples, audio_vae): + audio_latent = samples["samples"] + if audio_latent.is_nested: + audio_latent = audio_latent.unbind()[-1] + audio = audio_vae.decode(audio_latent).to(audio_latent.device) + output_audio_sample_rate = audio_vae.output_sample_rate + return {"waveform": audio, "sample_rate": int(output_audio_sample_rate)} + + @classmethod + def save_video(cls, video, filename_prefix, format, codec) -> io.NodeOutput: + width, height = video.get_dimensions() + full_output_folder, filename, counter, subfolder, filename_prefix = folder_paths.get_save_image_path( + filename_prefix, + folder_paths.get_output_directory(), + width, + height + ) + saved_metadata = None + if not args.disable_metadata: + metadata = {} + if cls.hidden.extra_pnginfo is not None: + metadata.update(cls.hidden.extra_pnginfo) + if cls.hidden.prompt is not None: + metadata["prompt"] = cls.hidden.prompt + if len(metadata) > 0: + saved_metadata = metadata + file = f"{filename}_{counter:05}_.{Types.VideoContainer.get_extension(format)}" + video.save_to( + os.path.join(full_output_folder, file), + format=Types.VideoContainer(format), + codec=codec, + metadata=saved_metadata + ) + return file, subfolder + + +class PreviewImageOrMask(io.ComfyNode): + @classmethod + def define_schema(cls): + return io.Schema( + node_id="PreviewImageOrMask", + display_name="Preview Image Or Mask", + category="KJNodes/misc", + description="Previews the input images or masks.", + search_aliases=["output"], + inputs=[ + io.MultiType.Input("input", [io.Image, io.Mask], tooltip="The image or mask to preview."), + ], + hidden=[io.Hidden.prompt, io.Hidden.extra_pnginfo], + is_output_node=True, + ) + + @classmethod + def execute(cls, input) -> io.NodeOutput: + if input.ndim == 3: + return io.NodeOutput(ui=ui.PreviewMask(input, cls=cls)) + return io.NodeOutput(ui=ui.PreviewImage(input, cls=cls)) + diff --git a/ComfyUI-KJNodes/nodes/intrinsic_lora_nodes.py b/ComfyUI-KJNodes/nodes/intrinsic_lora_nodes.py new file mode 100644 index 0000000000000000000000000000000000000000..a8a90143b284db5b5705d119c5bcc9b7b3820424 --- /dev/null +++ b/ComfyUI-KJNodes/nodes/intrinsic_lora_nodes.py @@ -0,0 +1,115 @@ +import folder_paths +import os +import torch +import torch.nn.functional as F +from comfy.utils import ProgressBar, load_torch_file +import comfy.sample +from nodes import CLIPTextEncode + +script_directory = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) +folder_paths.add_model_folder_path("intrinsic_loras", os.path.join(script_directory, "intrinsic_loras")) + +class Intrinsic_lora_sampling: + def __init__(self): + self.loaded_lora = None + + @classmethod + def INPUT_TYPES(s): + return {"required": { "model": ("MODEL",), + "lora_name": (folder_paths.get_filename_list("intrinsic_loras"), ), + "task": ( + [ + 'depth map', + 'surface normals', + 'albedo', + 'shading', + ], + { + "default": 'depth map' + }), + "text": ("STRING", {"multiline": True, "default": ""}), + "clip": ("CLIP", ), + "vae": ("VAE", ), + "per_batch": ("INT", {"default": 16, "min": 1, "max": 4096, "step": 1}), + }, + "optional": { + "image": ("IMAGE",), + "optional_latent": ("LATENT",), + }, + } + + RETURN_TYPES = ("IMAGE", "LATENT",) + FUNCTION = "onestepsample" + CATEGORY = "KJNodes/misc" + DESCRIPTION = """ +Sampler to use the intrinsic loras: +https://github.com/duxiaodan/intrinsic-lora +These LoRAs are tiny and thus included +with this node pack. +""" + + def onestepsample(self, model, lora_name, clip, vae, text, task, per_batch, image=None, optional_latent=None): + pbar = ProgressBar(3) + + if optional_latent is None: + image_list = [] + for start_idx in range(0, image.shape[0], per_batch): + sub_pixels = vae.vae_encode_crop_pixels(image[start_idx:start_idx+per_batch]) + image_list.append(vae.encode(sub_pixels[:,:,:,:3])) + sample = torch.cat(image_list, dim=0) + else: + sample = optional_latent["samples"] + noise = torch.zeros(sample.size(), dtype=sample.dtype, layout=sample.layout, device="cpu") + prompt = task + "," + text + positive, = CLIPTextEncode.encode(self, clip, prompt) + negative = positive #negative shouldn't do anything in this scenario + + pbar.update(1) + + #custom model sampling to pass latent through as it is + class X0_PassThrough(comfy.model_sampling.EPS): + def calculate_denoised(self, sigma, model_output, model_input): + return model_output + def calculate_input(self, sigma, noise): + return noise + sampling_base = comfy.model_sampling.ModelSamplingDiscrete + sampling_type = X0_PassThrough + + class ModelSamplingAdvanced(sampling_base, sampling_type): + pass + model_sampling = ModelSamplingAdvanced(model.model.model_config) + + #load lora + model_clone = model.clone() + lora_path = folder_paths.get_full_path("intrinsic_loras", lora_name) + lora = load_torch_file(lora_path, safe_load=True) + self.loaded_lora = (lora_path, lora) + + model_clone_with_lora = comfy.sd.load_lora_for_models(model_clone, None, lora, 1.0, 0)[0] + + model_clone_with_lora.add_object_patch("model_sampling", model_sampling) + + samples = {"samples": comfy.sample.sample(model_clone_with_lora, noise, 1, 1.0, "euler", "simple", positive, negative, sample, + denoise=1.0, disable_noise=True, start_step=0, last_step=1, + force_full_denoise=True, noise_mask=None, callback=None, disable_pbar=True, seed=None)} + pbar.update(1) + + decoded = [] + for start_idx in range(0, samples["samples"].shape[0], per_batch): + decoded.append(vae.decode(samples["samples"][start_idx:start_idx+per_batch])) + image_out = torch.cat(decoded, dim=0) + + pbar.update(1) + + if task == 'depth map': + imax = image_out.max() + imin = image_out.min() + image_out = (image_out-imin)/(imax-imin) + image_out = torch.max(image_out, dim=3, keepdim=True)[0].repeat(1, 1, 1, 3) + elif task == 'surface normals': + image_out = F.normalize(image_out * 2 - 1, dim=3) / 2 + 0.5 + image_out = 1.0 - image_out + else: + image_out = image_out.clamp(-1.,1.) + + return (image_out, samples,) \ No newline at end of file diff --git a/ComfyUI-KJNodes/nodes/lora_nodes.py b/ComfyUI-KJNodes/nodes/lora_nodes.py new file mode 100644 index 0000000000000000000000000000000000000000..0424474b80bc6140c02d125600b0a511725f9c39 --- /dev/null +++ b/ComfyUI-KJNodes/nodes/lora_nodes.py @@ -0,0 +1,637 @@ +import torch +import comfy.model_management +import comfy.utils +import folder_paths +import os +import logging +from tqdm import tqdm +import numpy as np +from comfy_api.latest import io + +device = comfy.model_management.get_torch_device() + +CLAMP_QUANTILE = 0.99 + +def extract_lora(diff, key, rank, algorithm, lora_type, lowrank_iters=7, adaptive_param=1.0, clamp_quantile=True): + """ + Extracts LoRA weights from a weight difference tensor using SVD. + """ + 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] + + if conv2d: + if conv2d_3x3: + diff = diff.flatten(start_dim=1) + else: + diff = diff.squeeze() + + diff_float = diff.float() + if algorithm == "svd_lowrank": + U, S, V = torch.svd_lowrank(diff_float, q=min(rank, in_dim, out_dim), niter=lowrank_iters) + U = U @ torch.diag(S) + Vh = V.t() + else: + #torch.linalg.svdvals() + U, S, Vh = torch.linalg.svd(diff_float) + # Flexible rank selection logic like locon: https://github.com/KohakuBlueleaf/LyCORIS/blob/main/tools/extract_locon.py + if "adaptive" in lora_type: + if lora_type == "adaptive_ratio": + min_s = torch.max(S) * adaptive_param + lora_rank = torch.sum(S > min_s).item() + elif lora_type == "adaptive_energy": + energy = torch.cumsum(S**2, dim=0) + total_energy = torch.sum(S**2) + threshold = adaptive_param * total_energy # e.g., adaptive_param=0.95 for 95% + lora_rank = torch.sum(energy < threshold).item() + 1 + elif lora_type == "adaptive_quantile": + s_cum = torch.cumsum(S, dim=0) + min_cum_sum = adaptive_param * torch.sum(S) + lora_rank = torch.sum(s_cum < min_cum_sum).item() + elif lora_type == "adaptive_fro": + S_squared = S.pow(2) + S_fro_sq = float(torch.sum(S_squared)) + sum_S_squared = torch.cumsum(S_squared, dim=0) / S_fro_sq + lora_rank = int(torch.searchsorted(sum_S_squared, adaptive_param**2)) + 1 + lora_rank = max(1, min(lora_rank, len(S))) + else: + pass # Will print after capping + + # Cap adaptive rank by the specified max rank + lora_rank = min(lora_rank, rank) + + # Calculate and print actual fro percentage retained after capping + if lora_type == "adaptive_fro": + S_squared = S.pow(2) + s_fro = torch.sqrt(torch.sum(S_squared)) + s_red_fro = torch.sqrt(torch.sum(S_squared[:lora_rank])) + fro_percent = float(s_red_fro / s_fro) + logging.info(f"{key} Extracted LoRA rank: {lora_rank}, Frobenius retained: {fro_percent:.1%}") + else: + logging.info(f"{key} Extracted LoRA rank: {lora_rank}") + else: + lora_rank = rank + + lora_rank = max(1, lora_rank) + lora_rank = min(out_dim, in_dim, lora_rank) + + U = U[:, :lora_rank] + S = S[:lora_rank] + U = U @ torch.diag(S) + Vh = Vh[:lora_rank, :] + + if clamp_quantile: + dist = torch.cat([U.flatten(), Vh.flatten()]) + if dist.numel() > 100_000: + # Sample 100,000 elements for quantile estimation + idx = torch.randperm(dist.numel(), device=dist.device)[:100_000] + dist_sample = dist[idx] + hi_val = torch.quantile(dist_sample, CLAMP_QUANTILE) + else: + 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, lora_rank, 1, 1) + Vh = Vh.reshape(lora_rank, in_dim, kernel_size[0], kernel_size[1]) + return (U, Vh) + + +def calc_lora_model(model_diff, rank, prefix_model, prefix_lora, output_sd, lora_type, algorithm, lowrank_iters, out_dtype, bias_diff=False, adaptive_param=1.0, clamp_quantile=True): + # Get key names from module structure without materializing weights + sd_keys = [] + for name, _ in model_diff.model.named_parameters(): + if prefix_model is None or name.startswith(prefix_model): + sd_keys.append(name) + for name, _ in model_diff.model.named_buffers(): + if prefix_model is None or name.startswith(prefix_model): + sd_keys.append(name) + + total_keys = len([k for k in sd_keys if k.endswith(".weight") or (bias_diff and k.endswith(".bias"))]) + progress_bar = tqdm(total=total_keys, desc=f"Extracting LoRA ({prefix_lora.strip('.')})") + comfy_pbar = comfy.utils.ProgressBar(total_keys) + + # Process one weight at a time to minimize memory usage + for k in sd_keys: + if k.endswith(".weight"): + # Patch and retrieve single weight + weight_diff = model_diff.patch_weight_to_device(k, return_weight=True) + if weight_diff is None: + progress_bar.update(1) + comfy_pbar.update(1) + continue + if weight_diff.ndim == 5: + logging.info(f"Skipping 5D tensor for key {k}") + del weight_diff + progress_bar.update(1) + comfy_pbar.update(1) + continue + if lora_type != "full": + if weight_diff.ndim < 2: + if bias_diff: + output_sd["{}{}.diff".format(prefix_lora, k[len(prefix_model):-7])] = weight_diff.contiguous().to(out_dtype).cpu() + del weight_diff + progress_bar.update(1) + comfy_pbar.update(1) + continue + try: + out = extract_lora(weight_diff.to(device), k, rank, algorithm, lora_type, lowrank_iters=lowrank_iters, adaptive_param=adaptive_param, clamp_quantile=clamp_quantile) + output_sd["{}{}.lora_up.weight".format(prefix_lora, k[len(prefix_model):-7])] = out[0].contiguous().to(out_dtype).cpu() + output_sd["{}{}.lora_down.weight".format(prefix_lora, k[len(prefix_model):-7])] = out[1].contiguous().to(out_dtype).cpu() + except Exception as e: + logging.warning(f"Could not generate lora weights for key {k}, error {e}") + else: + output_sd["{}{}.diff".format(prefix_lora, k[len(prefix_model):-7])] = weight_diff.contiguous().to(out_dtype).cpu() + del weight_diff + progress_bar.update(1) + comfy_pbar.update(1) + + elif bias_diff and k.endswith(".bias"): + weight = model_diff.patch_weight_to_device(k, return_weight=True) + if weight is not None: + output_sd["{}{}.diff_b".format(prefix_lora, k[len(prefix_model):-5])] = weight.contiguous().to(out_dtype).cpu() + del weight + progress_bar.update(1) + comfy_pbar.update(1) + + progress_bar.close() + del model_diff + comfy.model_management.soft_empty_cache() + return output_sd + + +class LoraExtractKJ(io.ComfyNode): + @classmethod + def define_schema(cls): + return io.Schema( + node_id="LoraExtractKJ", + category="KJNodes/lora", + is_output_node=True, + inputs=[ + io.MultiType.Input("finetuned", [io.Model, io.Clip], tooltip="The finetuned model or clip to extract LoRA from."), + io.MultiType.Input("original", [io.Model, io.Clip], tooltip="The original base model or clip to diff against."), + io.String.Input("filename_prefix", default="loras/ComfyUI_extracted_lora"), + io.Int.Input("rank", default=64, min=1, max=4096, step=1, tooltip="The rank to use for standard LoRA, or maximum rank limit for adaptive methods."), + io.Combo.Input("lora_type", options=["standard", "full", "adaptive_ratio", "adaptive_quantile", "adaptive_energy", "adaptive_fro"]), + io.Combo.Input("algorithm", options=["svd_linalg", "svd_lowrank"], default="svd_lowrank", tooltip="SVD algorithm to use, svd_lowrank is faster but less accurate."), + io.Int.Input("lowrank_iters", default=7, min=1, max=100, step=1, tooltip="The number of subspace iterations for lowrank SVD algorithm."), + io.Combo.Input("output_dtype", options=["fp16", "bf16", "fp32"], default="fp16"), + io.Boolean.Input("bias_diff", default=True), + io.Float.Input("adaptive_param", default=0.15, min=0.0, max=1.0, step=0.01, tooltip="For ratio mode, this is the ratio of the maximum singular value. For quantile mode, this is the quantile of the singular values. For fro mode, this is the Frobenius norm retention ratio."), + io.Boolean.Input("clamp_quantile", default=False), + ], + ) + + + @classmethod + def execute(cls, finetuned, original, filename_prefix, rank, lora_type, algorithm, lowrank_iters, output_dtype, bias_diff, adaptive_param, clamp_quantile) -> io.NodeOutput: + if algorithm == "svd_lowrank" and lora_type != "standard": + raise ValueError("svd_lowrank algorithm is only supported for standard LoRA extraction.") + + dtype = {"bf16": torch.bfloat16, "fp16": torch.float16, "fp32": torch.float32}[output_dtype] + + output_dir = folder_paths.get_output_directory() + full_output_folder, filename, counter, subfolder, filename_prefix = folder_paths.get_save_image_path(filename_prefix, output_dir) + + output_sd = {} + + is_clip = hasattr(finetuned, "patcher") + + if is_clip: + clip_diff = finetuned.clone() + kp = original.get_key_patches() + kp = {k: v for k, v in kp.items() if not k.endswith(".position_ids") and not k.endswith(".logit_scale")} + clip_diff.add_patches(kp, -1.0, 1.0) + output_sd = calc_lora_model(clip_diff.patcher, rank, "", "text_encoders.", output_sd, lora_type, algorithm, lowrank_iters, dtype, bias_diff=bias_diff, adaptive_param=adaptive_param, clamp_quantile=clamp_quantile) + else: + m = finetuned.clone() + kp = original.get_key_patches("diffusion_model.") + m.add_patches(kp, -1.0, 1.0) + output_sd = calc_lora_model(m, rank, "diffusion_model.", "diffusion_model.", output_sd, lora_type, algorithm, lowrank_iters, dtype, bias_diff=bias_diff, adaptive_param=adaptive_param, clamp_quantile=clamp_quantile) + + if "adaptive" in lora_type: + rank_str = f"{lora_type}_{adaptive_param:.2f}" + else: + rank_str = rank + output_checkpoint = f"{filename}_rank_{rank_str}_{output_dtype}_{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 io.NodeOutput() + +class LoraReduceRank(io.ComfyNode): + @classmethod + def define_schema(cls): + return io.Schema( + node_id="LoraReduceRankKJ", + display_name="LoraReduceRank", + category="KJNodes/lora", + description="Resize a LoRA model by reducing its rank. Based on kohya's sd-scripts: https://github.com/kohya-ss/sd-scripts/blob/main/networks/resize_lora.py", + is_output_node=True, + is_experimental=True, + inputs=[ + io.Combo.Input("lora_name", options=folder_paths.get_filename_list("loras"), tooltip="The name of the LoRA."), + io.Int.Input("new_rank", default=8, min=1, max=4096, step=1, tooltip="The new rank to resize the LoRA. Acts as max rank when using dynamic_method."), + io.Combo.Input("dynamic_method", options=["disabled", "sv_ratio", "sv_cumulative", "sv_fro", "sv_knee"], default="disabled", tooltip="Method to use for dynamically determining new alphas and dims. sv_knee finds the elbow point in the singular value curve."), + io.Float.Input("dynamic_param", default=0.2, min=0.0, max=2.0, step=0.01, tooltip="Parameter for dynamic methods. For sv_knee: sensitivity (1.0=standard knee, <1.0=more aggressive/lower rank, >1.0=more conservative)."), + io.Combo.Input("output_dtype", options=["match_original", "fp16", "bf16", "fp32"], default="match_original", tooltip="Data type to save the LoRA as."), + io.Boolean.Input("verbose", default=True), + ], + ) + + @classmethod + def execute(cls, lora_name, new_rank, dynamic_method, dynamic_param, output_dtype, verbose) -> io.NodeOutput: + lora_path = folder_paths.get_full_path("loras", lora_name) + lora_sd, metadata = comfy.utils.load_torch_file(lora_path, return_metadata=True) + + if output_dtype == "fp16": + save_dtype = torch.float16 + elif output_dtype == "bf16": + save_dtype = torch.bfloat16 + elif output_dtype == "fp32": + save_dtype = torch.float32 + elif output_dtype == "match_original": + first_weight_key = next(k for k in lora_sd if k.endswith(".weight") and isinstance(lora_sd[k], torch.Tensor)) + save_dtype = lora_sd[first_weight_key].dtype + + new_lora_sd = {} + for k, v in lora_sd.items(): + new_lora_sd[k.replace(".default", "")] = v + del lora_sd + logging.info("Resizing Lora...") + output_sd, old_dim, new_alpha, rank_list = resize_lora_model(new_lora_sd, new_rank, save_dtype, device, dynamic_method, dynamic_param, verbose) + + if metadata is None: + metadata = {} + + comment = metadata.get("ss_training_comment", "") + + if dynamic_method == "disabled": + metadata["ss_training_comment"] = f"dimension is resized from {old_dim} to {new_rank}; {comment}" + metadata["ss_network_dim"] = str(new_rank) + metadata["ss_network_alpha"] = str(new_alpha) + else: + metadata["ss_training_comment"] = f"Dynamic resize with {dynamic_method}: {dynamic_param} from {old_dim}; {comment}" + metadata["ss_network_dim"] = "Dynamic" + metadata["ss_network_alpha"] = "Dynamic" + + for key in list(output_sd.keys()): + value = output_sd[key] + if type(value) == torch.Tensor and value.dtype.is_floating_point and value.dtype != save_dtype: + output_sd[key] = value.to(save_dtype) + + output_dir = folder_paths.get_output_directory() + output_filename_prefix = "loras/" + lora_name + + full_output_folder, filename, counter, subfolder, filename_prefix = folder_paths.get_save_image_path(output_filename_prefix, output_dir) + output_dtype_str = f"_{output_dtype}" if output_dtype != "match_original" else "" + average_rank = str(int(np.mean(rank_list))) + rank_str = new_rank if dynamic_method == "disabled" else f"dynamic_{average_rank}" + output_checkpoint = f"{filename.replace('.safetensors', '')}_resized_from_{old_dim}_to_{rank_str}{output_dtype_str}_{counter:05}_.safetensors" + output_checkpoint = os.path.join(full_output_folder, output_checkpoint) + logging.info(f"Saving resized LoRA to {output_checkpoint}") + + comfy.utils.save_torch_file(output_sd, output_checkpoint, metadata=metadata) + return io.NodeOutput() + +# Convert LoRA to different rank approximation (should only be used to go to lower rank) +# This code is based off the extract_lora_from_models.py file which is based on https://github.com/cloneofsimo/lora/blob/develop/lora_diffusion/cli_svd.py +# Thanks to cloneofsimo + +# This version is based on +# https://github.com/kohya-ss/sd-scripts/blob/main/networks/resize_lora.py + +MIN_SV = 1e-6 + +LORA_DOWN_UP_FORMATS = [ + ("lora_down", "lora_up"), # sd-scripts LoRA + ("lora_A", "lora_B"), # PEFT LoRA + ("down", "up"), # ControlLoRA +] + +# Indexing functions +def index_sv_cumulative(S, target): + original_sum = float(torch.sum(S)) + cumulative_sums = torch.cumsum(S, dim=0) / original_sum + index = int(torch.searchsorted(cumulative_sums, target)) + 1 + index = max(1, min(index, len(S) - 1)) + + return index + + +def index_sv_fro(S, target): + S_squared = S.pow(2) + S_fro_sq = float(torch.sum(S_squared)) + sum_S_squared = torch.cumsum(S_squared, dim=0) / S_fro_sq + index = int(torch.searchsorted(sum_S_squared, target**2)) + 1 + index = max(1, min(index, len(S) - 1)) + + return index + + +def index_sv_ratio(S, target): + max_sv = S[0] + min_sv = max_sv / target + index = int(torch.sum(S > min_sv).item()) + index = max(1, min(index, len(S) - 1)) + + return index + + +def index_sv_knee(S, sensitivity=1.0): + """Find the knee/elbow point in the singular value curve. + Uses the Kneedle method: normalizes the curve to [0,1] on both axes, + then finds the point with maximum distance from a reference line. + + sensitivity controls the aggressiveness: + 1.0 = standard knee point + < 1.0 = more aggressive (lower rank), e.g. 0.5 roughly halves the knee rank + > 1.0 = more conservative (higher rank) + The reference line tilts based on sensitivity: at lower values, + the line favors keeping fewer singular values.""" + n = len(S) + if n <= 2: + return 1 + + S_np = S.cpu().float().numpy() + + # Normalize x and y to [0, 1] + x = np.linspace(0, 1, n) + y = (S_np - S_np[-1]) / (S_np[0] - S_np[-1] + 1e-10) + + # Reference line from (0, 1) to (1, 1-sensitivity) + # At sensitivity=1.0: line goes (0,1)->(1,0), standard kneedle + # At sensitivity=0.5: line goes (0,1)->(1,0.5), steeper = more aggressive + y_line = 1.0 - sensitivity * x + + # Signed distance: positive means curve is above the line (keep) + distances = y - y_line + + # Find the point of maximum positive distance + index = int(np.argmax(distances)) + index = max(1, min(index, n - 1)) + return index + + +# Modified from Kohaku-blueleaf's extract/merge functions +def _svd_extract(weight_2d, lora_rank, dynamic_method, dynamic_param, device, scale=1): + """Shared SVD extraction for both linear and conv weights. + Dynamic mode: single full SVD (need all singular values for rank selection). + Disabled mode: svd_lowrank only (rank is known, much faster for large matrices).""" + weight_2d = weight_2d.to(device) + if weight_2d.dtype != torch.float32: + weight_2d = weight_2d.float() + + if dynamic_method and dynamic_method != "disabled": + # Full SVD: we need all singular values for dynamic rank selection, + # and we reuse U/Vh directly — one SVD, no wasted work + U, S, Vh = torch.linalg.svd(weight_2d, full_matrices=False) + param_dict = rank_resize(S, lora_rank, dynamic_method, dynamic_param, scale) + lora_rank = param_dict["new_rank"] + U = U[:, :lora_rank] + S = S[:lora_rank] + Vh = Vh[:lora_rank, :] + else: + # Randomized lowrank SVD: only compute top-k, much faster when rank << min(m,n) + U, S, V = torch.svd_lowrank(weight_2d, q=lora_rank, niter=7) + Vh = V.t() + param_dict = {"new_rank": lora_rank, "new_alpha": float(scale * lora_rank)} + del V + + sqrt_S = torch.diag(torch.sqrt(S)) + U = U @ sqrt_S + Vh = sqrt_S @ Vh + + return U, Vh, param_dict + + +def extract_conv(weight, lora_rank, dynamic_method, dynamic_param, device, scale=1): + out_size, in_size, kernel_size, _ = weight.size() + + U, Vh, param_dict = _svd_extract( + weight.reshape(out_size, -1), lora_rank, dynamic_method, dynamic_param, device, scale + ) + lora_rank = param_dict["new_rank"] + + param_dict["lora_down"] = Vh.reshape(lora_rank, in_size, kernel_size, kernel_size).cpu() + param_dict["lora_up"] = U.reshape(out_size, lora_rank, 1, 1).cpu() + del U, Vh, weight + return param_dict + + +def extract_linear(weight, lora_rank, dynamic_method, dynamic_param, device, scale=1): + out_size, in_size = weight.size() + + U, Vh, param_dict = _svd_extract( + weight, lora_rank, dynamic_method, dynamic_param, device, scale + ) + lora_rank = param_dict["new_rank"] + + param_dict["lora_down"] = Vh.reshape(lora_rank, in_size).cpu() + param_dict["lora_up"] = U.reshape(out_size, lora_rank).cpu() + del U, Vh, weight + return param_dict + + +def merge_conv(lora_down, lora_up, device): + in_rank, in_size, kernel_size, k_ = lora_down.shape + out_size, out_rank, _, _ = lora_up.shape + assert in_rank == out_rank and kernel_size == k_, f"rank {in_rank} {out_rank} or kernel {kernel_size} {k_} mismatch" + + lora_down = lora_down.to(device) + lora_up = lora_up.to(device) + + merged = lora_up.reshape(out_size, -1) @ lora_down.reshape(in_rank, -1) + weight = merged.reshape(out_size, in_size, kernel_size, kernel_size) + del lora_up, lora_down + return weight + + +def merge_linear(lora_down, lora_up, device): + in_rank, in_size = lora_down.shape + out_size, out_rank = lora_up.shape + assert in_rank == out_rank, f"rank {in_rank} {out_rank} mismatch" + + lora_down = lora_down.to(device) + lora_up = lora_up.to(device) + + weight = lora_up @ lora_down + del lora_up, lora_down + return weight + + +# Calculate new rank + + +def rank_resize(S, rank, dynamic_method, dynamic_param, scale=1): + param_dict = {} + + if dynamic_method == "sv_ratio": + # Calculate new dim and alpha based off ratio + new_rank = index_sv_ratio(S, dynamic_param) + 1 + new_alpha = float(scale * new_rank) + + elif dynamic_method == "sv_cumulative": + # Calculate new dim and alpha based off cumulative sum + new_rank = index_sv_cumulative(S, dynamic_param) + 1 + new_alpha = float(scale * new_rank) + + elif dynamic_method == "sv_fro": + # Calculate new dim and alpha based off sqrt sum of squares + new_rank = index_sv_fro(S, dynamic_param) + 1 + new_alpha = float(scale * new_rank) + + elif dynamic_method == "sv_knee": + # Knee/elbow detection in singular value curve + new_rank = index_sv_knee(S, dynamic_param) + 1 + new_alpha = float(scale * new_rank) + else: + new_rank = rank + new_alpha = float(scale * new_rank) + + if S[0] <= MIN_SV: # Zero matrix, set dim to 1 + new_rank = 1 + new_alpha = float(scale * new_rank) + elif new_rank > rank: # cap max rank at rank + new_rank = rank + new_alpha = float(scale * new_rank) + + # Calculate resize info + s_sum = torch.sum(torch.abs(S)) + s_rank = torch.sum(torch.abs(S[:new_rank])) + + S_squared = S.pow(2) + s_fro = torch.sqrt(torch.sum(S_squared)) + s_red_fro = torch.sqrt(torch.sum(S_squared[:new_rank])) + fro_percent = float(s_red_fro / s_fro) + + param_dict["new_rank"] = new_rank + param_dict["new_alpha"] = new_alpha + param_dict["sum_retained"] = (s_rank) / s_sum + param_dict["fro_retained"] = fro_percent + param_dict["max_ratio"] = S[0] / S[new_rank - 1] + + return param_dict + + +def resize_lora_model(lora_sd, new_rank, save_dtype, device, dynamic_method, dynamic_param, verbose): + max_old_rank = None + new_alpha = None + verbose_str = "\n" + fro_list = [] + rank_list = [] + + if dynamic_method: + logging.info(f"Dynamically determining new alphas and dims based off {dynamic_method}: {dynamic_param}, max rank is {new_rank}") + + lora_down_weight = None + lora_up_weight = None + + o_lora_sd = lora_sd.copy() + block_down_name = None + block_up_name = None + + total_keys = len([k for k in lora_sd if k.endswith(".weight")]) + + pbar = comfy.utils.ProgressBar(total_keys) + for key, value in tqdm(lora_sd.items(), leave=True, desc="Resizing LoRA weights"): + key_parts = key.split(".") + block_down_name = None + for _format in LORA_DOWN_UP_FORMATS: + # Currently we only match lora_down_name in the last two parts of key + # because ("down", "up") are general words and may appear in block_down_name + if len(key_parts) >= 2 and _format[0] == key_parts[-2]: + block_down_name = ".".join(key_parts[:-2]) + lora_down_name = "." + _format[0] + lora_up_name = "." + _format[1] + weight_name = "." + key_parts[-1] + break + if len(key_parts) >= 1 and _format[0] == key_parts[-1]: + block_down_name = ".".join(key_parts[:-1]) + lora_down_name = "." + _format[0] + lora_up_name = "." + _format[1] + weight_name = "" + break + + if block_down_name is None: + # This parameter is not lora_down + continue + + # Now weight_name can be ".weight" or "" + # Find corresponding lora_up and alpha + block_up_name = block_down_name + lora_down_weight = value + lora_up_weight = lora_sd.get(block_up_name + lora_up_name + weight_name, None) + lora_alpha = lora_sd.get(block_down_name + ".alpha", None) + + weights_loaded = lora_down_weight is not None and lora_up_weight is not None + + if weights_loaded: + + conv2d = len(lora_down_weight.size()) == 4 + old_rank = lora_down_weight.size()[0] + max_old_rank = max(max_old_rank or 0, old_rank) + + # Skip if merged weight would be too large (>100k elements in any dimension) + if conv2d: + in_rank, in_size, kernel_size, _ = lora_down_weight.shape + out_size, out_rank, _, _ = lora_up_weight.shape + merged_size = out_size * in_size * kernel_size * kernel_size + else: + in_rank, in_size = lora_down_weight.shape + out_size, out_rank = lora_up_weight.shape + merged_size = out_size * in_size + + if merged_size > 100_000_000: # Skip if >100M elements + logging.warning(f"Skipping {block_down_name}: merged weight too large ({merged_size:,} elements)") + tqdm.write(f"SKIPPED: {block_down_name} - too large ({merged_size:,} elements)") + pbar.update(1) + continue + + if lora_alpha is None: + scale = 1.0 + else: + scale = lora_alpha / old_rank + + if conv2d: + full_weight_matrix = merge_conv(lora_down_weight, lora_up_weight, device) + param_dict = extract_conv(full_weight_matrix, new_rank, dynamic_method, dynamic_param, device, scale) + else: + full_weight_matrix = merge_linear(lora_down_weight, lora_up_weight, device) + param_dict = extract_linear(full_weight_matrix, new_rank, dynamic_method, dynamic_param, device, scale) + + if verbose and "fro_retained" in param_dict: + max_ratio = param_dict["max_ratio"] + sum_retained = param_dict["sum_retained"] + fro_retained = param_dict["fro_retained"] + if not np.isnan(fro_retained): + fro_list.append(float(fro_retained)) + log_str = f"{block_down_name:75} | sum(S) retained: {sum_retained:.1%}, fro retained: {fro_retained:.1%}, max(S) ratio: {max_ratio:0.1f}, new dim: {param_dict['new_rank']}" + tqdm.write(log_str) + verbose_str += log_str + + if verbose and dynamic_method: + verbose_str += f", dynamic | dim: {param_dict['new_rank']}, alpha: {param_dict['new_alpha']}\n" + else: + verbose_str += "\n" + + new_alpha = param_dict["new_alpha"] + o_lora_sd[block_down_name + lora_down_name + weight_name] = param_dict["lora_down"].to(save_dtype).contiguous() + o_lora_sd[block_up_name + lora_up_name + weight_name] = param_dict["lora_up"].to(save_dtype).contiguous() + o_lora_sd[block_down_name + ".alpha"] = torch.tensor(param_dict["new_alpha"]).to(save_dtype) + + block_down_name = None + block_up_name = None + lora_down_weight = None + lora_up_weight = None + weights_loaded = False + rank_list.append(param_dict["new_rank"]) + del param_dict + pbar.update(1) + + if verbose: + logging.info(f"Average Frobenius norm retention: {np.mean(fro_list):.2%} | std: {np.std(fro_list):0.3f}") + return o_lora_sd, max_old_rank, new_alpha, rank_list diff --git a/ComfyUI-KJNodes/nodes/ltxv_nodes.py b/ComfyUI-KJNodes/nodes/ltxv_nodes.py new file mode 100644 index 0000000000000000000000000000000000000000..e3faf1477018a10a4c7b1ad4f94e9ceec4e3eb4c --- /dev/null +++ b/ComfyUI-KJNodes/nodes/ltxv_nodes.py @@ -0,0 +1,1953 @@ +from comfy_extras.nodes_lt import get_noise_mask, LTXVAddGuide +import types +import math +from typing import Tuple +import comfy +from comfy_api.latest import io +import numpy as np +import torch +import logging +import comfy.model_management as mm +import comfy.ldm.modules.attention as _comfy_attn +from comfy.ldm.lightricks.model import apply_rotary_emb as _apply_rope +device = mm.get_torch_device() +import latent_preview + +class LTXVAddGuideMulti(LTXVAddGuide): + + @classmethod + def define_schema(cls): + options = [] + for num_guides in range(1, 21): # 1 to 20 guides + guide_inputs = [] + for i in range(1, num_guides + 1): + guide_inputs.extend([ + io.Image.Input(f"image_{i}"), + io.Int.Input( + f"frame_idx_{i}", + default=0, + min=-9999, + max=9999, + tooltip=f"Frame index for guide {i}.", + ), + io.Float.Input(f"strength_{i}", default=1.0, min=0.0, max=1.0, step=0.01, tooltip=f"Strength for guide {i}."), + ]) + options.append(io.DynamicCombo.Option( + key=str(num_guides), + inputs=guide_inputs + )) + + return io.Schema( + node_id="LTXVAddGuideMulti", + category="KJNodes/ltxv", + description="Add multiple guide images at specified frame indices with strengths, uses DynamicCombo which requires ComfyUI 0.8.1 and frontend 1.33.4 or later.", + inputs=[ + io.Conditioning.Input("positive", tooltip="Positive conditioning to which guide keyframe info will be added"), + io.Conditioning.Input("negative", tooltip="Negative conditioning to which guide keyframe info will be added"), + io.Vae.Input("vae", tooltip="Video VAE used to encode the guide images"), + io.Latent.Input("latent", tooltip="Video latent, guides are added to the end of this latent"), + io.DynamicCombo.Input( + "num_guides", + options=options, + display_name="Number of Guides", + tooltip="Select how many guide images to use", + ), + ], + outputs=[ + io.Conditioning.Output(display_name="positive"), + io.Conditioning.Output(display_name="negative"), + io.Latent.Output(display_name="latent", tooltip="Video latent with added guides"), + ], + ) + + @classmethod + def execute(cls, positive, negative, vae, latent, num_guides) -> io.NodeOutput: + scale_factors = vae.downscale_index_formula + latent_image = latent["samples"] + noise_mask = get_noise_mask(latent) + + _, _, latent_length, latent_height, latent_width = latent_image.shape + + # num_guides is a dict containing the inputs from the selected option + # e.g., {'image_1': tensor, 'frame_idx_1': 0, 'strength_1': 1.0, 'image_2': tensor, 'frame_idx_2': 20, 'strength_2': 0.8, ...} + + image_keys = sorted([k for k in num_guides.keys() if k.startswith('image_')]) + + for img_key in image_keys: + i = img_key.split('_')[1] + + img = num_guides[f"image_{i}"] + f_idx = num_guides[f"frame_idx_{i}"] + strength = num_guides[f"strength_{i}"] + + image_1, t = cls.encode(vae, latent_width, latent_height, img, scale_factors) + + frame_idx, latent_idx = cls.get_latent_index(positive, latent_length, len(image_1), f_idx, scale_factors) + assert latent_idx + t.shape[2] <= latent_length, "Conditioning frames exceed the length of the latent sequence." + + positive, negative, latent_image, noise_mask = cls.append_keyframe( + positive, + negative, + frame_idx, + latent_image, + noise_mask, + t, + strength, + scale_factors, + ) + + return io.NodeOutput(positive, negative, {"samples": latent_image, "noise_mask": noise_mask}) + +class LTXVAddGuidesFromBatch(LTXVAddGuide): + + @classmethod + def define_schema(cls): + return io.Schema( + node_id="LTXVAddGuidesFromBatch", + category="conditioning/ltxv", + description="Adds multiple guide images from a batch to the latent at corresponding frame indices. Non-black images in the batch are used as guides.", + inputs=[ + io.Conditioning.Input("positive"), + io.Conditioning.Input("negative"), + io.Vae.Input("vae"), + io.Latent.Input("latent"), + io.Image.Input("images", tooltip="Batch of images - non-black images will be used as guides"), + io.Float.Input("strength", default=1.0, min=0.0, max=1.0, step=0.01), + ], + outputs=[ + io.Conditioning.Output(display_name="positive"), + io.Conditioning.Output(display_name="negative"), + io.Latent.Output(display_name="latent"), + ], + ) + + @classmethod + def execute(cls, positive, negative, vae, latent, images, strength) -> io.NodeOutput: + scale_factors = vae.downscale_index_formula + latent_image = latent["samples"] + noise_mask = get_noise_mask(latent) + + _, _, latent_length, latent_height, latent_width = latent_image.shape + + # Process each image in the batch + batch_size = images.shape[0] + + for i in range(batch_size): + img = images[i:i+1] + + # Check if image is not black and use batch index as frame index + if img.max() > 0.001: + f_idx = i + + image_1, t = cls.encode(vae, latent_width, latent_height, img, scale_factors) + + frame_idx, latent_idx = cls.get_latent_index(positive, latent_length, len(image_1), f_idx, scale_factors) + + if latent_idx + t.shape[2] <= latent_length: + positive, negative, latent_image, noise_mask = cls.append_keyframe( + positive, + negative, + frame_idx, + latent_image, + noise_mask, + t, + strength, + scale_factors, + ) + else: + print(f"Warning: Skipping guide at index {i} - conditioning frames exceed latent sequence length") + + return io.NodeOutput(positive, negative, {"samples": latent_image, "noise_mask": noise_mask}) + + +class LTXVAudioVideoMask(io.ComfyNode): + + @classmethod + def define_schema(cls): + return io.Schema( + node_id="LTXVAudioVideoMask", + category="KJNodes/ltxv", + description="Creates noise masks for video and audio latents based on specified time ranges. New content is generated within these masked regions", + inputs=[ + io.Latent.Input("video_latent", optional=True), + io.Latent.Input("audio_latent", optional=True), + io.Float.Input("video_fps", default=25, min=0.0, max=100.0, step=0.01), + io.Float.Input("video_start_time", default=0.0, min=0.0, max=10000.0, step=0.01, tooltip="Start time in seconds for the video mask."), + io.Float.Input("video_end_time", default=5.0, min=0.0, max=10000.0, step=0.01, tooltip="End time in seconds for the video mask."), + io.Float.Input("audio_start_time", default=0.0, min=0.0, max=10000.0, step=0.01, tooltip="Start time in seconds for the audio mask."), + io.Float.Input("audio_end_time", default=5.0, min=0.0, max=10000.0, step=0.01, tooltip="End time in seconds for the audio mask."), + io.Combo.Input( + "max_length", + options=["truncate", "pad", "partial"], + default="truncate", + tooltip="'truncate': cut latent to end_time length. 'pad': extend latent to end_time. 'partial': mask range within existing latent.", + ), + io.Combo.Input("existing_mask_mode", options=["add", "subtract", "overwrite"], optional=True, default="add", tooltip="How to combine with existing noise masks if present. 'add' will take the max of existing and new mask, 'overwrite' will replace with new mask. 'subtract' will set the masked region to 0 instead of 1, effectively unmasking it."), + ], + outputs=[ + io.Latent.Output(display_name="video_latent"), + io.Latent.Output(display_name="audio_latent"), + ], + ) + + @classmethod + def execute(cls, video_fps, video_start_time, video_end_time, audio_start_time, audio_end_time, max_length="truncate", existing_mask_mode="add", video_latent=None, audio_latent=None,) -> io.NodeOutput: + + time_scale_factor = 8 + mel_hop_length = 160 + sampling_rate = 16000 + latent_downsample_factor = 4 + audio_latents_per_second = (sampling_rate / mel_hop_length / latent_downsample_factor) # 25 + + if video_latent is not None: + video_latent_frame_count = video_latent["samples"].shape[2] + + video_pixel_frame_start_raw = int(round(video_start_time * video_fps)) + video_pixel_frame_end_raw = int(round(video_end_time * video_fps)) + + # Calculate required latent frames based on end time + required_latent_frames = (video_pixel_frame_end_raw - 1) // time_scale_factor + 1 + + # Handle different max_length modes + if max_length == "pad" and required_latent_frames > video_latent_frame_count: + # Pad video latent if required frames exceed current length + pad_frames = required_latent_frames - video_latent_frame_count + padding = torch.zeros( + video_latent["samples"].shape[0], + video_latent["samples"].shape[1], + pad_frames, + video_latent["samples"].shape[3], + video_latent["samples"].shape[4], + dtype=video_latent["samples"].dtype, + device=video_latent["samples"].device + ) + video_samples = torch.cat([video_latent["samples"], padding], dim=2) + video_latent_frame_count = video_samples.shape[2] + elif max_length == "truncate": + # Truncate to the end_time + video_samples = video_latent["samples"][:, :, :required_latent_frames] + video_latent_frame_count = video_samples.shape[2] + else: # partial + video_samples = video_latent["samples"] + + # Now calculate indices based on potentially padded latent + video_pixel_frame_count = (video_latent_frame_count - 1) * time_scale_factor + 1 + xp = np.array([0] + list(range(1, video_pixel_frame_count + time_scale_factor, time_scale_factor))) + + # video_frame_index_start = index of the value in xp rounding up + video_latent_frame_index_start = np.searchsorted(xp, video_pixel_frame_start_raw, side="left") + # video_frame_index_end = index of the value in xp rounding down + video_latent_frame_index_end = np.searchsorted(xp, video_pixel_frame_end_raw, side="right") - 1 + + video_latent_frame_index_start = max(0, video_latent_frame_index_start) + video_latent_frame_index_end = min(video_latent_frame_index_end, video_latent_frame_count) + + # Get existing noise mask if present, otherwise create new one + if "noise_mask" in video_latent and video_latent["noise_mask"] is not None and existing_mask_mode != "overwrite": + video_mask = video_latent["noise_mask"].clone() + # Adjust mask size based on mode + if max_length == "pad" and video_samples.shape[2] > video_latent["samples"].shape[2]: + # Pad the mask if we padded the samples + mask_padding = torch.zeros( + video_mask.shape[0], + video_mask.shape[1], + video_samples.shape[2] - video_mask.shape[2], + video_mask.shape[3], + video_mask.shape[4], + dtype=video_mask.dtype, + device=video_mask.device + ) + video_mask = torch.cat([video_mask, mask_padding], dim=2) + elif max_length == "truncate": + # Truncate the mask to match truncated samples + video_mask = video_mask[:, :, :video_samples.shape[2]] + else: + video_mask = torch.zeros_like(video_samples)[:, :1] + + video_mask[:, :, video_latent_frame_index_start:video_latent_frame_index_end] = 1.0 if existing_mask_mode != "subtract" else 0.0 + # ensure all padded frames are also masked + if max_length == "pad" and video_samples.shape[2] > video_latent["samples"].shape[2]: + video_mask[:, :, video_latent["samples"].shape[2]:] = 1.0 if existing_mask_mode != "subtract" else 0.0 + video_latent = video_latent.copy() + video_latent["samples"] = video_samples + video_latent["noise_mask"] = video_mask + + if audio_latent is not None: + audio_latent_frame_count = audio_latent["samples"].shape[2] + + audio_latent_frame_index_start = int(round(audio_start_time * audio_latents_per_second)) + audio_latent_frame_index_end = int(round(audio_end_time * audio_latents_per_second)) + 1 + + # Handle different max_length modes + if max_length == "pad" and audio_latent_frame_index_end > audio_latent_frame_count: + # Pad audio latent if end index exceeds current length + pad_frames = audio_latent_frame_index_end - audio_latent_frame_count + padding = torch.zeros( + audio_latent["samples"].shape[0], + audio_latent["samples"].shape[1], + pad_frames, + audio_latent["samples"].shape[3], + dtype=audio_latent["samples"].dtype, + device=audio_latent["samples"].device + ) + audio_samples = torch.cat([audio_latent["samples"], padding], dim=2) + audio_latent_frame_count = audio_samples.shape[2] + elif max_length == "truncate": + # Truncate to the end_time + audio_samples = audio_latent["samples"][:, :, :audio_latent_frame_index_end] + audio_latent_frame_count = audio_samples.shape[2] + else: # partial + audio_samples = audio_latent["samples"] + + audio_latent_frame_index_start = max(0, audio_latent_frame_index_start) + audio_latent_frame_index_end = min(audio_latent_frame_index_end, audio_latent_frame_count) + + # Get existing noise mask if present, otherwise create new one + if "noise_mask" in audio_latent and audio_latent["noise_mask"] is not None and existing_mask_mode != "overwrite": + audio_mask = audio_latent["noise_mask"].clone() + # Adjust mask size based on mode + if max_length == "pad" and audio_samples.shape[2] > audio_latent["samples"].shape[2]: + # Pad the mask if we padded the samples + mask_padding = torch.zeros( + audio_mask.shape[0], + audio_mask.shape[1], + audio_samples.shape[2] - audio_mask.shape[2], + audio_mask.shape[3], + dtype=audio_mask.dtype, + device=audio_mask.device + ) + audio_mask = torch.cat([audio_mask, mask_padding], dim=2) + elif max_length == "truncate": + # Truncate the mask to match truncated samples + audio_mask = audio_mask[:, :, :audio_samples.shape[2]] + else: + audio_mask = torch.zeros_like(audio_samples) + + audio_mask[:, :, audio_latent_frame_index_start:audio_latent_frame_index_end] = 1.0 + # ensure all padded frames are also masked + if max_length == "pad" and audio_samples.shape[2] > audio_latent["samples"].shape[2]: + audio_mask[:, :, audio_latent["samples"].shape[2]:] = 1.0 + audio_latent = audio_latent.copy() + audio_latent["samples"] = audio_samples + audio_latent["noise_mask"] = audio_mask + + return io.NodeOutput(video_latent, audio_latent) + +def _compute_attention(self, query, context, attn_precision=None, transformer_options={}): + """Compute attention and return the result. Cleans up intermediate tensors.""" + k = self.k_norm(self.to_k(context)).to(query.dtype) + v = self.to_v(context).to(query.dtype) + x = comfy.ldm.modules.attention.optimized_attention(query, k, v, heads=self.heads, attn_precision=attn_precision, transformer_options=transformer_options).flatten(2) + del k, v + return x + +def nag_attention(self, query, context_positive, nag_context, attn_precision=None, transformer_options={}): + x_positive = _compute_attention(self, query, context_positive, attn_precision, transformer_options) + x_negative = _compute_attention(self, query, nag_context, attn_precision, transformer_options) + return x_positive, x_negative + +def normalized_attention_guidance(self, x_positive, x_negative): + if self.inplace: + nag_guidance = x_negative.mul_(self.nag_scale - 1).neg_().add_(x_positive, alpha=self.nag_scale) + else: + nag_guidance = x_positive * self.nag_scale - x_negative * (self.nag_scale - 1) + + del x_negative + + norm_positive = torch.norm(x_positive, p=1, dim=-1, keepdim=True) + norm_guidance = torch.norm(nag_guidance, p=1, dim=-1, keepdim=True) + + scale = norm_guidance / norm_positive + torch.nan_to_num_(scale, nan=10.0) + mask = scale > self.nag_tau + del scale + + adjustment = (norm_positive * self.nag_tau) / (norm_guidance + 1e-7) + del norm_positive, norm_guidance + + nag_guidance.mul_(torch.where(mask, adjustment, 1.0)) + del mask, adjustment + + if self.inplace: + nag_guidance.sub_(x_positive).mul_(self.nag_alpha).add_(x_positive) + else: + nag_guidance = nag_guidance * self.nag_alpha + x_positive * (1 - self.nag_alpha) + del x_positive + + return nag_guidance + +#region NAG +def ltxv_crossattn_forward_nag(self, x, context, mask=None, transformer_options={}, **kwargs): + + # Single or [pos, neg] pair + if context.shape[0] == 1: + x_pos, context_pos = x, context + x_neg, context_neg = None, None + else: + x_pos, x_neg = torch.chunk(x, 2, dim=0) + context_pos, context_neg = torch.chunk(context, 2, dim=0) + + # Positive + q_pos = self.q_norm(self.to_q(x_pos)) + del x_pos + + x_positive, x_negative = nag_attention(self, q_pos, context_pos, self.nag_context, attn_precision=self.attn_precision, transformer_options=transformer_options) + del context_pos, q_pos + + x_pos_out = normalized_attention_guidance(self, x_positive, x_negative) + del x_positive, x_negative + + # Negative + if x_neg is not None and context_neg is not None: + q_neg = self.q_norm(self.to_q(x_neg)) + k_neg = self.k_norm(self.to_k(context_neg)) + v_neg = self.to_v(context_neg) + + x_neg_out = comfy.ldm.modules.attention.optimized_attention(q_neg, k_neg, v_neg, heads=self.heads, attn_precision=self.attn_precision, transformer_options=transformer_options) + out = torch.cat([x_pos_out, x_neg_out], dim=0) + else: + out = x_pos_out + + if self.to_gate_logits is not None: + gate_logits = self.to_gate_logits(x) # (B, T, H) + b, t, _ = out.shape + out = out.view(b, t, self.heads, self.dim_head) + gates = 2.0 * torch.sigmoid(gate_logits) # zero-init -> identity + out = out * gates.unsqueeze(-1) + out = out.view(b, t, self.heads * self.dim_head) + + return self.to_out(out) + + +class LTXVCrossAttentionPatch: + def __init__(self, context, nag_scale, nag_alpha, nag_tau, inplace=True): + self.nag_context = context + self.nag_scale = nag_scale + self.nag_alpha = nag_alpha + self.nag_tau = nag_tau + self.inplace = inplace + + def __get__(self, obj, objtype=None): + # Create bound method with stored parameters + def wrapped_attention(self_module, *args, **kwargs): + self_module.nag_context = self.nag_context + self_module.nag_scale = self.nag_scale + self_module.nag_alpha = self.nag_alpha + self_module.nag_tau = self.nag_tau + self_module.inplace = self.inplace + + return ltxv_crossattn_forward_nag(self_module, *args, **kwargs) + return types.MethodType(wrapped_attention, obj) + +class LTX2_NAG(io.ComfyNode): + + @classmethod + def define_schema(cls): + return io.Schema( + node_id="LTX2_NAG", + display_name="LTX2 NAG", + category="KJNodes/ltxv", + description="https://github.com/ChenDarYen/Normalized-Attention-Guidance", + is_experimental=True, + inputs=[ + io.Model.Input("model"), + io.Float.Input("nag_scale", default=11.0, min=0.0, max=100.0, step=0.001, tooltip="Strength of negative guidance effect"), + io.Float.Input("nag_alpha", default=0.25, min=0.0, max=1.0, step=0.001, tooltip="Mixing coefficient in that controls the balance between the normalized guided representation and the original positive representation."), + io.Float.Input("nag_tau", default=2.5, min=0.0, max=10.0, step=0.001, tooltip="Clipping threshold that controls how much the guided attention can deviate from the positive attention."), + io.Conditioning.Input("nag_cond_video", optional=True), + io.Conditioning.Input("nag_cond_audio", optional=True), + io.Boolean.Input("inplace", default=True, optional=True, tooltip="If true, modifies tensors in place to save memory. Leads to different numerical results which may change the output slightly."), + ], + outputs=[ + io.Model.Output(display_name="model"), + ], + ) + + @classmethod + def execute(cls, model, nag_scale, nag_alpha, nag_tau, nag_cond_video=None, nag_cond_audio=None, inplace=True) -> io.NodeOutput: + if nag_scale == 0: + return io.NodeOutput(model) + + device = mm.get_torch_device() + offload_device = mm.unet_offload_device() + dtype = model.model.manual_cast_dtype + if dtype is None: + dtype = model.model.diffusion_model.dtype + + model_clone = model.clone() + + diffusion_model = model_clone.get_model_object("diffusion_model") + img_dim = diffusion_model.inner_dim + audio_dim = diffusion_model.audio_inner_dim + + context_video = context_audio = None + + if nag_cond_video is not None: + context_video = nag_cond_video[0][0].to(device, dtype) + vid_split = getattr(diffusion_model, "cross_attention_dim", None) + if vid_split is not None and context_video.shape[-1] == vid_split + diffusion_model.audio_cross_attention_dim: + context_video = context_video[:, :, :vid_split] + if diffusion_model.caption_proj_before_connector and diffusion_model.caption_projection_first_linear: + diffusion_model.caption_projection.to(device) + context_video = diffusion_model.caption_projection(context_video) + diffusion_model.caption_projection.to(offload_device) + if hasattr(diffusion_model, "video_embeddings_connector"): + diffusion_model.video_embeddings_connector.to(device) + context_video = diffusion_model.video_embeddings_connector(context_video)[0] + diffusion_model.video_embeddings_connector.to(offload_device) + context_video = context_video.view(1, -1, img_dim) + for idx, block in enumerate(diffusion_model.transformer_blocks): + patched_attn2 = LTXVCrossAttentionPatch(context_video, nag_scale, nag_alpha, nag_tau, inplace=inplace).__get__(block.attn2, block.__class__) + model_clone.add_object_patch(f"diffusion_model.transformer_blocks.{idx}.attn2.forward", patched_attn2) + + if nag_cond_audio is not None and diffusion_model.audio_caption_projection is not None: + context_audio = nag_cond_audio[0][0].to(device, dtype) + vid_split = getattr(diffusion_model, "cross_attention_dim", None) + if vid_split is not None and context_audio.shape[-1] == vid_split + diffusion_model.audio_cross_attention_dim: + context_audio = context_audio[:, :, vid_split:] + if diffusion_model.caption_proj_before_connector and diffusion_model.caption_projection_first_linear: + diffusion_model.audio_caption_projection.to(device) + context_audio = diffusion_model.audio_caption_projection(context_audio) + diffusion_model.audio_caption_projection.to(offload_device) + if hasattr(diffusion_model, "audio_embeddings_connector"): + diffusion_model.audio_embeddings_connector.to(device) + context_audio = diffusion_model.audio_embeddings_connector(context_audio)[0] + diffusion_model.audio_embeddings_connector.to(offload_device) + context_audio = context_audio.view(1, -1, audio_dim) + for idx, block in enumerate(diffusion_model.transformer_blocks): + patched_audio_attn2 = LTXVCrossAttentionPatch(context_audio, nag_scale, nag_alpha, nag_tau, inplace=inplace).__get__(block.audio_attn2, block.__class__) + model_clone.add_object_patch(f"diffusion_model.transformer_blocks.{idx}.audio_attn2.forward", patched_audio_attn2) + + return io.NodeOutput(model_clone) + + +def ffn_chunked_forward(self, x): + if x.shape[1] > self.dim_threshold: + chunk_size = x.shape[1] // self.num_chunks + for i in range(self.num_chunks): + start_idx = i * chunk_size + end_idx = (i + 1) * chunk_size if i < self.num_chunks - 1 else x.shape[1] + x[:, start_idx:end_idx] = self.net(x[:, start_idx:end_idx]) + return x + else: + return self.net(x) + +class LTXVffnChunkPatch: + def __init__(self, num_chunks, dim_threshold=4096): + self.num_chunks = num_chunks + self.dim_threshold = dim_threshold + + def __get__(self, obj, objtype=None): + def wrapped_forward(self_module, *args, **kwargs): + self_module.num_chunks = self.num_chunks + self_module.dim_threshold = self.dim_threshold + return ffn_chunked_forward(self_module, *args, **kwargs) + return types.MethodType(wrapped_forward, obj) + +class LTXVChunkFeedForward(io.ComfyNode): + + @classmethod + def define_schema(cls): + return io.Schema( + node_id="LTXVChunkFeedForward", + display_name="LTXV Chunk FeedForward", + category="KJNodes/ltxv", + description="EXPERIMENTAL AND MAY CHANGE THE MODEL OUTPUT!! Chunks feedforward activations to reduce peak VRAM usage.", + is_experimental=True, + inputs=[ + io.Model.Input("model"), + io.Int.Input("chunks", default=2, min=1, max=100, step=1, tooltip="Number of chunks to split the feedforward activations into to reduce peak VRAM usage."), + io.Int.Input("dim_threshold", default=4096, min=0, max=16384, step=256, tooltip="Dimension threshold above which to apply chunking."), + ], + outputs=[ + io.Model.Output(display_name="model"), + ], + ) + + @classmethod + def execute(cls, model, chunks, dim_threshold) -> io.NodeOutput: + if chunks == 1: + return io.NodeOutput(model) + + model_clone = model.clone() + diffusion_model = model_clone.get_model_object("diffusion_model") + + for idx, block in enumerate(diffusion_model.transformer_blocks): + patched_attn2 = LTXVffnChunkPatch(chunks, dim_threshold).__get__(block.ff, block.__class__) + model_clone.add_object_patch(f"diffusion_model.transformer_blocks.{idx}.ff.forward", patched_attn2) + + return io.NodeOutput(model_clone) + + + +#borrowed VideoHelperSuite https://github.com/Kosinkadink/ComfyUI-VideoHelperSuite/blob/main/videohelpersuite/latent_preview.py +import server +from threading import Thread +import torch.nn.functional as F +import time +import struct +from PIL import Image +from io import BytesIO +serv = server.PromptServer.instance + +class WrappedPreviewer(): + def __init__(self, latent_rgb_factors, latent_rgb_factors_bias, rate=8, taeltx=None): + self.first_preview = True + self.taeltx = taeltx + self.last_time = 0 + self.c_index = 0 + self.rate = rate + self.latent_rgb_factors = torch.tensor(latent_rgb_factors, device="cpu").transpose(0, 1) + self.latent_rgb_factors_bias = torch.tensor(latent_rgb_factors_bias, device="cpu") if latent_rgb_factors_bias is not None else None + + def decode_latent_to_preview_image(self, preview_format, x0): + if x0.ndim == 5: + #Keep batch major + x0 = x0.movedim(2,1) + x0 = x0.reshape((-1,)+x0.shape[-3:]) + num_images = x0.size(0) + new_time = time.time() + num_previews = int((new_time - self.last_time) * self.rate) + self.last_time = self.last_time + num_previews/self.rate + if num_previews > num_images: + num_previews = num_images + elif num_previews <= 0: + return None + if self.first_preview: + self.first_preview = False + serv.send_sync('VHS_latentpreview', {'length':num_images, 'rate': self.rate, 'id': serv.last_node_id}) + self.last_time = new_time + 1/self.rate + if self.c_index + num_previews > num_images: + x0 = x0.roll(-self.c_index, 0)[:num_previews] + else: + x0 = x0[self.c_index:self.c_index + num_previews] + Thread(target=self.process_previews, args=(x0, self.c_index, + num_images)).run() + self.c_index = (self.c_index + num_previews) % num_images + return None + def process_previews(self, image_tensor, ind, leng): + max_size = 512 + min_size = 256 + image_tensor = self.decode_latent_to_preview(image_tensor) + + if image_tensor.size(1) < min_size or image_tensor.size(2) < min_size: + image_tensor = F.interpolate(image_tensor.movedim(-1,0), scale_factor=4, mode='nearest').movedim(0,-1) + + if image_tensor.size(1) > max_size or image_tensor.size(2) > max_size: + image_tensor = image_tensor.movedim(-1,0) + if image_tensor.size(2) < image_tensor.size(3): + height = (max_size * image_tensor.size(2)) // image_tensor.size(3) + image_tensor = F.interpolate(image_tensor, (height,max_size), mode='nearest') + else: + width = (max_size * image_tensor.size(3)) // image_tensor.size(2) + image_tensor = F.interpolate(image_tensor, (max_size, width), mode='nearest') + image_tensor = image_tensor.movedim(0,-1) + + previews_ubyte = (image_tensor.clamp(0, 1).mul(0xFF)).to(device="cpu", dtype=torch.uint8) + + # Send VHS preview + for preview in previews_ubyte: + i = Image.fromarray(preview.numpy()) + message = BytesIO() + message.write((1).to_bytes(length=4, byteorder='big')*2) + message.write(ind.to_bytes(length=4, byteorder='big')) + message.write(struct.pack('16p', serv.last_node_id.encode('ascii'))) + i.save(message, format="JPEG", quality=95, compress_level=1) + #NOTE: send sync already uses call_soon_threadsafe + serv.send_sync(server.BinaryEventTypes.PREVIEW_IMAGE, + message.getvalue(), serv.client_id) + if self.taeltx is not None: + ind = (ind + 1) % ((leng-1) * 8 + 1) + else: + ind = (ind + 1) % leng + + def decode_latent_to_preview(self, x0): + if self.taeltx is not None: + x0 = x0.unsqueeze(0).to(dtype=self.taeltx.first_stage_model.decoder[1].weight.dtype, device=device) + x_sample = self.taeltx.first_stage_model.decode(x0)[0].permute(1, 2, 3, 0) + return x_sample + else: + self.latent_rgb_factors = self.latent_rgb_factors.to(dtype=x0.dtype, device=x0.device) + 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) + latent_image = F.linear(x0.movedim(1, -1), self.latent_rgb_factors, + bias=self.latent_rgb_factors_bias) + + #low = latent_image.quantile(0.01) + #high = latent_image.quantile(0.99) + #latent_image = ((latent_image - low) / (high - low)).clamp(0, 1) + latent_image = torch.sigmoid(latent_image) + return latent_image + + +def prepare_callback(model, steps, x0_output_dict=None, shape=None, latent_upscale_model=None, vae=None, rate=8, taeltx=False, num_keyframes=0, is_23=False): + if not is_23: + latent_rgb_factors = [ + [ 0.0350, 0.0159, 0.0132], + [ 0.0025, -0.0021, -0.0003], + [ 0.0286, 0.0028, 0.0020], + [ 0.0280, -0.0114, -0.0202], + [-0.0186, 0.0073, 0.0092], + [ 0.0027, 0.0097, -0.0113], + [-0.0069, -0.0032, -0.0024], + [-0.0323, -0.0370, -0.0457], + [ 0.0174, 0.0164, 0.0106], + [-0.0097, 0.0061, 0.0035], + [-0.0130, -0.0042, -0.0012], + [-0.0102, -0.0002, -0.0091], + [-0.0025, 0.0063, 0.0161], + [ 0.0003, 0.0037, 0.0108], + [ 0.0152, 0.0082, 0.0143], + [ 0.0317, 0.0203, 0.0312], + [-0.0092, -0.0233, -0.0119], + [-0.0405, -0.0226, -0.0023], + [ 0.0376, 0.0397, 0.0352], + [ 0.0171, -0.0043, -0.0095], + [ 0.0482, 0.0341, 0.0213], + [ 0.0031, -0.0046, -0.0018], + [-0.0486, -0.0383, -0.0294], + [-0.0071, -0.0272, -0.0123], + [ 0.0320, 0.0218, 0.0289], + [ 0.0327, 0.0088, -0.0116], + [-0.0098, -0.0240, -0.0111], + [ 0.0094, -0.0116, 0.0021], + [ 0.0309, 0.0092, 0.0165], + [-0.0065, -0.0077, -0.0107], + [ 0.0179, 0.0114, 0.0038], + [-0.0018, -0.0030, -0.0026], + [-0.0002, 0.0076, -0.0029], + [-0.0131, -0.0059, -0.0170], + [ 0.0055, 0.0066, -0.0038], + [ 0.0154, 0.0063, 0.0090], + [ 0.0186, 0.0175, 0.0188], + [-0.0166, -0.0381, -0.0428], + [ 0.0121, 0.0015, -0.0153], + [ 0.0118, 0.0050, 0.0019], + [ 0.0125, 0.0259, 0.0231], + [ 0.0046, 0.0130, 0.0081], + [ 0.0271, 0.0250, 0.0250], + [-0.0054, -0.0347, -0.0326], + [-0.0438, -0.0262, -0.0228], + [-0.0191, -0.0256, -0.0173], + [-0.0205, -0.0058, 0.0042], + [ 0.0404, 0.0434, 0.0346], + [-0.0242, -0.0177, -0.0146], + [ 0.0161, 0.0223, 0.0168], + [-0.0240, -0.0320, -0.0299], + [-0.0019, 0.0043, 0.0008], + [-0.0060, -0.0133, -0.0244], + [-0.0048, -0.0225, -0.0167], + [ 0.0267, 0.0133, 0.0152], + [ 0.0222, 0.0167, 0.0028], + [ 0.0015, -0.0062, 0.0013], + [-0.0241, -0.0178, -0.0079], + [ 0.0040, -0.0081, -0.0097], + [-0.0064, 0.0133, -0.0011], + [-0.0204, -0.0231, -0.0304], + [ 0.0011, -0.0011, 0.0145], + [-0.0283, -0.0259, -0.0260], + [ 0.0038, 0.0171, -0.0029], + [ 0.0637, 0.0424, 0.0409], + [ 0.0092, 0.0163, 0.0188], + [ 0.0082, 0.0055, -0.0179], + [-0.0177, -0.0286, -0.0147], + [ 0.0171, 0.0242, 0.0398], + [-0.0129, 0.0095, -0.0071], + [-0.0154, 0.0036, 0.0128], + [-0.0081, -0.0009, 0.0118], + [-0.0067, -0.0178, -0.0230], + [-0.0022, -0.0125, -0.0003], + [-0.0032, -0.0039, -0.0022], + [-0.0005, -0.0127, -0.0131], + [-0.0143, -0.0157, -0.0165], + [-0.0262, -0.0263, -0.0270], + [ 0.0063, 0.0127, 0.0178], + [ 0.0092, 0.0133, 0.0150], + [-0.0106, -0.0068, 0.0032], + [-0.0214, -0.0022, 0.0171], + [-0.0104, -0.0266, -0.0362], + [ 0.0021, 0.0048, -0.0005], + [ 0.0345, 0.0431, 0.0402], + [-0.0275, -0.0110, -0.0195], + [ 0.0203, 0.0251, 0.0224], + [ 0.0016, -0.0037, -0.0094], + [ 0.0241, 0.0198, 0.0114], + [-0.0003, 0.0027, 0.0141], + [ 0.0012, -0.0052, -0.0084], + [ 0.0057, -0.0028, -0.0163], + [-0.0488, -0.0545, -0.0509], + [-0.0076, -0.0025, -0.0014], + [-0.0249, -0.0142, -0.0367], + [ 0.0136, 0.0041, 0.0135], + [ 0.0007, 0.0034, -0.0053], + [-0.0068, -0.0109, 0.0029], + [ 0.0006, -0.0237, -0.0094], + [-0.0149, -0.0177, -0.0131], + [-0.0105, 0.0039, 0.0216], + [ 0.0242, 0.0200, 0.0180], + [-0.0339, -0.0153, -0.0195], + [ 0.0104, 0.0151, 0.0120], + [-0.0043, 0.0089, 0.0047], + [ 0.0157, -0.0030, 0.0008], + [ 0.0126, 0.0102, -0.0040], + [ 0.0040, 0.0114, 0.0137], + [ 0.0423, 0.0473, 0.0436], + [-0.0128, -0.0066, -0.0152], + [-0.0337, -0.0087, -0.0026], + [-0.0052, 0.0235, 0.0291], + [ 0.0079, 0.0154, 0.0260], + [-0.0539, -0.0377, -0.0358], + [-0.0188, 0.0062, -0.0035], + [-0.0186, 0.0041, -0.0083], + [ 0.0045, -0.0049, 0.0053], + [ 0.0172, 0.0071, 0.0042], + [-0.0003, -0.0078, -0.0096], + [-0.0209, -0.0132, -0.0135], + [-0.0074, 0.0017, 0.0099], + [-0.0038, 0.0070, 0.0014], + [-0.0013, -0.0017, 0.0073], + [ 0.0030, 0.0105, 0.0105], + [ 0.0154, -0.0168, -0.0235], + [-0.0108, -0.0038, 0.0047], + [-0.0298, -0.0347, -0.0436], + [-0.0206, -0.0189, -0.0139] + ] + latent_rgb_factors_bias = [0.2796, 0.1101, -0.0047] + else: + latent_rgb_factors = [[0.002269406570121646, -0.02110900916159153, -0.009850316680967808], [-0.016038373112678528, -0.012462412007153034, -0.01112896017730236], [0.025274179875850677, 0.011209743097424507, 0.025426799431443214], [0.04690725728869438, 0.041542328894138336, 0.03568895906209946], [-0.02388044260442257, -0.0018645941745489836, 0.01858334057033062], [0.03720448538661003, 0.0220357533544302, 0.027937663719058037], [-0.07273884862661362, -0.09326262027025223, -0.11579664051532745], [-0.063837431371212, 0.00026216846890747547, 0.03042735904455185], [0.02903873845934868, 0.042082373052835464, 0.030649805441498756], [0.03777873516082764, 0.0322984978556633, -0.005671461578458548], [-0.0075670829974114895, -0.012113905511796474, -0.01638956367969513], [0.026524530723690987, 0.060518112033605576, 0.059549521654844284], [0.10093028098344803, 0.10073262453079224, 0.0505094900727272], [0.03725508227944374, 0.015382086858153343, 0.005786076188087463], [-0.03139607608318329, -0.01690264232456684, -0.0013519978383556008], [-0.027200624346733093, -0.02517341822385788, -0.008874989114701748], [0.024963486939668655, 0.04293748363852501, 0.05582639202475548], [-0.0364827960729599, -0.026975594460964203, -0.021950015798211098], [0.027655167505145073, 0.025136707350611687, 0.043967027217149734], [0.035822272300720215, 0.013104500249028206, 0.01113432738929987], [0.05353763327002525, 0.013606574386358261, -0.018720127642154694], [-0.013587888330221176, -0.01689346879720688, -0.027842802926898003], [0.059415675699710846, 0.03734271228313446, 0.04562298208475113], [-0.02946414425969124, -0.038338612765073776, 0.001805233070626855], [0.03921474143862724, 0.0651894062757492, 0.10681862384080887], [-0.00744189927354455, 0.007951526902616024, 0.020728807896375656], [-0.04038553684949875, -0.05215264856815338, -0.07213657349348068], [-0.004655141849070787, 0.01305423304438591, 0.026104029268026352], [0.03434251993894577, 0.018448110669851303, 0.013096392154693604], [0.0022075253073126078, -0.0011812079465016723, 0.0002940484555438161], [-0.00043441299931146204, 0.02366728149354458, 0.035889431834220886], [-0.030657343566417694, -0.024926183745265007, -0.012355240061879158], [-0.018955843523144722, -0.017360301688313484, -0.008214764297008514], [-0.01113052573055029, -0.01201171800494194, -0.002986249281093478], [0.018902746960520744, 0.01758778840303421, 0.026414571329951286], [-0.019977254793047905, -0.01605399139225483, -0.019136475399136543], [-0.00300968368537724, -0.017609693109989166, -0.013655650429427624], [0.0022096361499279737, 0.017998533323407173, 0.01815750263631344], [0.05186990648508072, 0.03285299986600876, 0.016072165220975876], [0.012626334093511105, 0.0013884707586839795, -0.012077193707227707], [-0.0037861645687371492, -0.013902144506573677, -0.01911942847073078], [-0.014163163490593433, -0.00513274222612381, -0.014303527772426605], [-0.010461323894560337, 0.009658926166594028, 0.01644069515168667], [-0.008665377274155617, 0.002501955023035407, -0.009703717194497585], [-0.03404829278588295, -0.02546044997870922, -0.014914450235664845], [0.04997691139578819, 0.06592527031898499, 0.073111392557621], [0.027394814416766167, 0.024555068463087082, 0.019957970827817917], [-0.027501430362462997, -0.01673700101673603, -0.03089248389005661], [-0.018696032464504242, -0.0020940247923135757, 0.015244065783917904], [-0.0062704551964998245, -0.0067006442695856094, -0.007532030809670687], [0.014871004968881607, 0.009914354421198368, 0.020960720255970955], [0.03662937879562378, 0.04413224756717682, 0.04220828413963318], [-0.011242181062698364, -0.013539309613406658, -0.016438307240605354], [-0.014854325912892818, 0.0038217694964259863, -0.002461288822814822], [-0.014826249331235886, 0.0009719038498587906, -0.012078499421477318], [-0.029396841302514076, -0.01432017982006073, 0.013018904253840446], [0.02755064144730568, 0.028369395062327385, 0.01640605367720127], [0.12049165368080139, 0.1395745575428009, 0.14566579461097717], [0.019721267744898796, 0.009739740751683712, 0.0023876908235251904], [-0.007320966571569443, 0.0065013207495212555, 0.01603059470653534], [0.007391378283500671, -0.0073603675700724125, -0.01770283281803131], [0.02984853833913803, 0.012391146272420883, 0.010563627816736698], [-0.013479884713888168, -0.008637298829853535, -0.013457189314067364], [0.04127075523138046, 0.03032625839114189, 0.024770958349108696], [-0.06524652987718582, -0.012209279462695122, 0.02087211236357689], [-0.1179763451218605, -0.060323599725961685, -0.07592175155878067], [-0.07122819870710373, -0.04385707899928093, -0.022124603390693665], [-0.04682473465800285, -0.022610662505030632, -0.010107148438692093], [-0.0054328180849552155, -0.010368981398642063, -0.008167334832251072], [0.029181398451328278, 0.030588403344154358, 0.028090540319681168], [0.016619984060525894, 0.004931286443024874, -0.006450849585235119], [0.01035264041274786, 0.002237115055322647, 0.0013903985964134336], [-0.04313831403851509, -0.061772625893354416, -0.08946335315704346], [0.0150345079600811, 0.007781678810715675, 0.0011013159528374672], [-0.013585779815912247, 0.008117705583572388, 0.020367907360196114], [-0.172962948679924, -0.16406646370887756, -0.1668281853199005], [0.0083833709359169, 0.0015236001927405596, -0.01731627807021141], [0.021939430385828018, 0.018004458397626877, 0.014768349006772041], [0.008083095774054527, -0.013463049195706844, -0.022061636671423912], [0.024328550323843956, 0.0128010343760252, 0.014966367743909359], [0.05850301682949066, 0.027980001643300056, 0.02225641906261444], [0.09690416604280472, 0.06929530203342438, 0.03253814950585365], [0.048208240419626236, 0.025294817984104156, 0.023508133366703987], [-0.026432134211063385, -0.040383171290159225, -0.03950457274913788], [-0.021598653867840767, -0.017070941627025604, -0.010933087207376957], [0.011645167134702206, 0.002806191798299551, 0.003779367310926318], [0.10478592664003372, 0.08954174816608429, 0.06555330753326416], [0.015151776373386383, -0.016160616651177406, -0.024905217811465263], [0.019659176468849182, 0.008487952873110771, 0.002426224760711193], [-0.05173315480351448, -0.026337839663028717, -0.02127116546034813], [0.016987523064017296, 0.006270893849432468, 0.0015798212261870503], [0.007938026450574398, -0.005250005517154932, -0.020408453419804573], [0.013017759658396244, 0.01654384844005108, 0.04163840040564537], [-0.009886542335152626, -0.026848411187529564, -0.03070281818509102], [0.01108171883970499, 0.01827266439795494, -0.007332107983529568], [-0.0285995751619339, -0.031727731227874756, -0.03370537981390953], [0.005299570970237255, 0.05678633600473404, 0.02825017087161541], [-0.055322226136922836, -0.09084303677082062, -0.12999044358730316], [0.01844066195189953, 0.031044499948620796, 0.021148500964045525], [-0.004471115302294493, 0.005830412730574608, 0.00911418441683054], [-0.04053843766450882, -0.016424428671598434, -0.0010634599020704627], [0.03858831524848938, 0.007309338077902794, -0.005618985276669264], [0.01423253770917654, -0.0055681923404335976, 3.394074519746937e-05], [0.11455483734607697, 0.14653916656970978, 0.1488018035888672], [-0.005231931805610657, -0.0033921014983206987, -0.000995257287286222], [0.01449565589427948, 0.019586293026804924, 0.04565812274813652], [-0.005179048050194979, -0.011201606132090092, -0.0008710073889233172], [-0.015361929312348366, 0.00778581015765667, -0.008238887414336205], [-0.1147838830947876, -0.09109023958444595, -0.050579313188791275], [0.09037500619888306, 0.09597006440162659, 0.10811734944581985], [0.001873677596449852, -0.01772197335958481, -0.07681205868721008], [-0.020383257418870926, -0.016072455793619156, -0.01077069528400898], [-0.060444317758083344, -0.05499502643942833, -0.06153025105595589], [-0.016717270016670227, 0.026493264362215996, 0.021835654973983765], [0.008203534409403801, 0.00418612826615572, 0.013867748901247978], [0.0789225772023201, 0.05467747151851654, 0.016568133607506752], [-0.15149451792240143, -0.1526806503534317, -0.14325062930583954], [0.00538366474211216, 0.010192245244979858, -0.00449327751994133], [-0.004906965419650078, -0.005569908302277327, -0.02096559666097164], [0.024530155584216118, 0.010962833650410175, 0.0034586559049785137], [0.03551010414958, 0.017310436815023422, 0.007064413744956255], [0.11111932247877121, 0.09825586527585983, 0.08827318251132965], [-0.051722846925258636, -0.047595202922821045, -0.03763044252991676], [-0.02975175902247429, -0.02153967320919037, -0.021425534039735794], [-0.03462936729192734, -0.025198571383953094, -0.017322326079010963], [-0.016921017318964005, -0.012419789098203182, -0.0154880927875638], [-0.08035065978765488, -0.08451078832149506, -0.09623870998620987], [-0.03870908170938492, -0.04211008921265602, -0.04383759945631027]] + latent_rgb_factors_bias = [-0.6957847476005554, -0.7276281118392944, -0.7405748963356018] + + preview_format = "JPEG" + if preview_format not in ["JPEG", "PNG"]: + preview_format = "JPEG" + + previewer = WrappedPreviewer(latent_rgb_factors, latent_rgb_factors_bias, rate=rate, taeltx=vae if taeltx else None) + + pbar = comfy.utils.ProgressBar(steps) + def callback(step, x0, x, total_steps): + if x0 is not None and shape is not None: + cut = math.prod(shape[1:]) + x0 = x0[:, :, :cut].reshape([x0.shape[0]] + list(shape)[1:]) + + if num_keyframes > 0: + x0 = x0[:, :, :-num_keyframes] + + if latent_upscale_model is not None: + x0 = vae.first_stage_model.per_channel_statistics.un_normalize(x0) + x0 = latent_upscale_model(x0.to(torch.bfloat16)) + x0 = vae.first_stage_model.per_channel_statistics.normalize(x0) + + preview_bytes = None + if previewer: + preview_bytes = previewer.decode_latent_to_preview_image(preview_format, x0) + pbar.update_absolute(step + 1, total_steps, preview_bytes) + return callback + +class OuterSampleCallbackWrapper: + def __init__(self, latent_upscale_model=None, vae=None, preview_rate=8, taeltx=False): + self.latent_upscale_model = latent_upscale_model + self.vae = vae + self.preview_rate = preview_rate + self.taeltx = taeltx + self.x0_output = {} + + def __call__(self, executor, noise, latent_image, sampler, sigmas, denoise_mask, callback, disable_pbar, seed, latent_shapes): + guider = executor.class_obj + diffusion_model = guider.model_patcher.model.diffusion_model + is_23 = not diffusion_model.caption_projection_first_linear + + original_callback = callback + if self.latent_upscale_model is not None: + self.latent_upscale_model.to(device) + if self.vae is not None and self.taeltx: + self.vae.first_stage_model.to(device) + + num_keyframes = 0 + if 'positive' in guider.conds and len(guider.conds['positive']) > 0: + keyframe_idxs = guider.conds['positive'][0].get('keyframe_idxs') + if keyframe_idxs is not None: + num_keyframes = len(torch.unique(keyframe_idxs[0, 0, :, 0])) + + new_callback = prepare_callback(guider.model_patcher, len(sigmas) -1, shape=latent_shapes[0] if len(latent_shapes) > 1 else None, + x0_output_dict=self.x0_output, latent_upscale_model=self.latent_upscale_model, vae=self.vae, rate=self.preview_rate, taeltx=self.taeltx, num_keyframes=num_keyframes, is_23=is_23) + # Wrapper that calls both callbacks + def combined_callback(step, x0, x, total_steps): + new_callback(step, x0, x, total_steps) + if original_callback is not None: + original_callback(step, x0, x, total_steps) + out = executor(noise, latent_image, sampler, sigmas, denoise_mask, combined_callback, disable_pbar, seed, latent_shapes=latent_shapes) + if self.latent_upscale_model is not None: + self.latent_upscale_model.to(mm.unet_offload_device()) + return out + +class LTX2SamplingPreviewOverride(io.ComfyNode): + @classmethod + def define_schema(cls) -> io.Schema: + return io.Schema( + node_id="LTX2SamplingPreviewOverride", + display_name="LTX2 Sampling Preview Override", + description="Overrides the LTX2 preview sampling preview function, temporary measure until previews are in comfy core", + category="KJNodes/ltxv", + is_experimental=True, + inputs=[ + io.Model.Input("model", tooltip="The model to add preview override to."), + io.Int.Input("preview_rate", default=8, min=1, max=60, step=1, tooltip="Preview frame rate."), + io.LatentUpscaleModel.Input("latent_upscale_model", optional=True, tooltip="Optional upscale model to use for higher resolution previews."), + io.Vae.Input("vae", optional=True, tooltip="VAE model to use normalizing the latents for the upscale model."), + ], + outputs=[ + io.Model.Output(tooltip="The model with Sampling Preview Override."), + ], + ) + + @classmethod + def execute(cls, model, preview_rate, latent_upscale_model=None, vae=None) -> io.NodeOutput: + model = model.clone() + taeltx = False + if vae is not None: + if vae.first_stage_model.__class__.__name__ == "TAEHV": + taeltx = True + latent_upscale_model=None + model.add_wrapper_with_key(comfy.patcher_extension.WrappersMP.OUTER_SAMPLE, "sampling_preview", OuterSampleCallbackWrapper(latent_upscale_model, vae, preview_rate, taeltx)) + return io.NodeOutput(model) + + +# based on https://github.com/Lightricks/ComfyUI-LTXVideo/blob/cd5d371518afb07d6b3641be8012f644f25269fc/easy_samplers.py#L916 +class OuterSampleAudioNormalizationWrapper: + def __init__(self, audio_normalization_factors): + self.audio_normalization_factors = audio_normalization_factors + + def __call__(self, executor, noise, latent_image, sampler, sigmas, denoise_mask, callback, disable_pbar, seed, latent_shapes): + guider = executor.class_obj + ltxav = guider.model_patcher.model.diffusion_model + + x0_output = {} + self.total_steps = sigmas.shape[-1] - 1 + pbar = comfy.utils.ProgressBar(self.total_steps) + self.full_step = 0 + + previewer = latent_preview.get_previewer(guider.model_patcher.load_device, guider.model_patcher.model.latent_format) + def custom_callback(step, x0, x, total_steps): + if x0_output is not None: + x0_output["x0"] = x0 + + preview_bytes = None + if previewer: + preview_bytes = previewer.decode_latent_to_preview_image("JPEG", x0) + self.full_step += 1 + pbar.update_absolute(self.full_step, self.total_steps, preview_bytes) + + callback = custom_callback + + audio_normalization_factors = self.audio_normalization_factors.strip().split(",") + audio_normalization_factors = [float(factor) for factor in audio_normalization_factors] + + # Extend normalization factors to match the length of sigmas + sigmas_len = self.total_steps + if len(audio_normalization_factors) < sigmas_len and len(audio_normalization_factors) > 0: + audio_normalization_factors.extend([audio_normalization_factors[-1]] * (sigmas_len - len(audio_normalization_factors))) + + # Calculate indices where both normalization factors are not 1.0 + sampling_split_indices = [i + 1 for i, a in enumerate(audio_normalization_factors) if a != 1.0] + + # Split sigmas according to sampling_split_indices + def split_by_indices(arr, indices): + """ + Splits arr into chunks according to indices (split points). + Indices are treated as starting a new chunk at each index in the list. + """ + if not indices: + return [arr] + split_points = sorted(set(indices)) + chunks = [] + prev = 0 + for idx in split_points: + if prev < idx: + chunks.append(arr[prev : idx + 1]) + prev = idx + if prev < len(arr): + chunks.append(arr[prev:]) + return chunks + + sigmas_chunks = split_by_indices(sigmas, sampling_split_indices) + + i = 0 + for sigmas_chunk in sigmas_chunks: + i += len(sigmas_chunk) - 1 + latent_image = executor(noise, latent_image, sampler, sigmas_chunk, denoise_mask, callback, disable_pbar, seed, latent_shapes=latent_shapes) + + if "x0" in x0_output: + latent_image = guider.model_patcher.model.process_latent_out(x0_output["x0"]) + + if i - 1 < len(audio_normalization_factors): + vx, ax = ltxav.separate_audio_and_video_latents(comfy.utils.unpack_latents(latent_image, latent_shapes), None) + if denoise_mask is not None: + audio_mask = ltxav.separate_audio_and_video_latents(comfy.utils.unpack_latents(denoise_mask, latent_shapes), None)[1] + ax = ax * audio_mask * audio_normalization_factors[i - 1] + ax * (1 - audio_mask) + else: + ax = ax * audio_normalization_factors[i - 1] + latent_image = comfy.utils.pack_latents(ltxav.recombine_audio_and_video_latents(vx, ax))[0] + + print("After %d steps, the audio latent was normalized by %f" % (i, audio_normalization_factors[i - 1])) + + return latent_image + + +class LTX2AudioLatentNormalizingSampling(io.ComfyNode): + @classmethod + def define_schema(cls) -> io.Schema: + return io.Schema( + node_id="LTX2AudioLatentNormalizingSampling", + display_name="LTX2 Audio Latent Normalizing Sampling", + description="Improves LTX2 generated audio quality by normalizing audio latents at specified sampling steps.", + category="KJNodes/ltxv", + is_experimental=True, + inputs=[ + io.Model.Input("model", tooltip="The model to add preview override to."), + io.String.Input("audio_normalization_factors", default="1,1,0.25,1,1,0.25,1,1", tooltip="Comma-separated list of audio normalization factors to apply at each sampling step. For example, '1,1,0.25,1,1,0.25,1,1' will apply a factor of 0.25 at the 3rd and 6th steps."), + ], + outputs=[ + io.Model.Output(tooltip="The model with Audio Latent Normalizing Sampling."), + ], + ) + + @classmethod + def execute(cls, model, audio_normalization_factors) -> io.NodeOutput: + model = model.clone() + model.add_wrapper_with_key(comfy.patcher_extension.WrappersMP.OUTER_SAMPLE, "ltx2_audio_normalization", OuterSampleAudioNormalizationWrapper(audio_normalization_factors)) + return io.NodeOutput(model) + + +class LTXVImgToVideoInplaceKJ(io.ComfyNode): + @classmethod + def define_schema(cls): + options = [] + for num_images in range(1, 21): # 1 to 20 images + image_inputs = [] + for i in range(1, num_images + 1): + image_inputs.extend([ + io.Image.Input(f"image_{i}", optional=True, tooltip=f"Image {i} to insert into the video latent."), + io.Int.Input( + f"index_{i}", + default=0, + min=-9999, + max=9999, + step=1, + tooltip=f"Frame index for image {i} (in pixel space).", + optional=True, + ), + io.Float.Input(f"strength_{i}", default=1.0, min=0.0, max=1.0, step=0.01, tooltip=f"Strength for image {i}."), + ]) + options.append(io.DynamicCombo.Option( + key=str(num_images), + inputs=image_inputs + )) + + return io.Schema( + node_id="LTXVImgToVideoInplaceKJ", + category="KJNodes/ltxv", + description="Replaces video latent frames with the encoded input images, uses DynamicCombo which requires ComfyUI 0.8.1 and frontend 1.33.4 or later.", + inputs=[ + io.Vae.Input("vae", tooltip="Video VAE used to encode the images"), + io.Latent.Input("latent", tooltip="Video latent to insert images into"), + io.DynamicCombo.Input( + "num_images", + options=options, + display_name="Number of Images", + tooltip="Select how many images to insert", + ), + ], + outputs=[ + io.Latent.Output(display_name="latent", tooltip="The video latent with the images inserted and latent noise mask updated."), + ], + ) + + @classmethod + def execute(cls, vae, latent, num_images) -> io.NodeOutput: + + samples = latent["samples"].clone() + scale_factors = vae.downscale_index_formula + _, height_scale_factor, width_scale_factor = scale_factors + + batch, _, latent_frames, latent_height, latent_width = samples.shape + width = latent_width * width_scale_factor + height = latent_height * height_scale_factor + + # Get existing noise mask if present, otherwise create new one + if "noise_mask" in latent: + conditioning_latent_frames_mask = latent["noise_mask"].clone() + else: + conditioning_latent_frames_mask = torch.ones( + (batch, 1, latent_frames, 1, 1), + dtype=torch.float32, + device=samples.device, + ) + + # num_images is a dict containing the inputs from the selected option + # e.g., {'image_1': tensor, 'frame_idx_1': 0, 'strength_1': 1.0, 'image_2': tensor, 'frame_idx_2': 20, 'strength_2': 0.8, ...} + + image_keys = sorted([k for k in num_images.keys() if k.startswith('image_')]) + + for img_key in image_keys: + i = img_key.split('_')[1] + + image = num_images[f"image_{i}"] + if image is None: + continue + index = num_images.get(f"index_{i}") + if index is None: + continue + strength = num_images[f"strength_{i}"] + + if image.shape[1] != height or image.shape[2] != width: + pixels = comfy.utils.common_upscale(image.movedim(-1, 1), width, height, "bilinear", "center").movedim(1, -1) + else: + pixels = image + encode_pixels = pixels[:, :, :, :3] + t = vae.encode(encode_pixels) + + # Convert pixel frame index to latent index + time_scale_factor = scale_factors[0] + + # Handle negative indexing in pixel space + pixel_frame_count = (latent_frames - 1) * time_scale_factor + 1 + if index < 0: + index = pixel_frame_count + index + + # Convert to latent index + latent_idx = index // time_scale_factor + + # Clamp to valid range + latent_idx = max(0, min(latent_idx, latent_frames - 1)) + + # Calculate end index, ensuring we don't exceed latent_frames + end_index = min(latent_idx + t.shape[2], latent_frames) + + # Replace samples at the specified index range + samples[:, :, latent_idx:end_index] = t[:, :, :end_index - latent_idx] + + # Update mask at the specified index range + conditioning_latent_frames_mask[:, :, latent_idx:end_index] = 1.0 - strength + + return io.NodeOutput({"samples": samples, "noise_mask": conditioning_latent_frames_mask}) + +try: + import triton + import triton.language as tl + HAS_TRITON = True +except ImportError: + HAS_TRITON = False + +if HAS_TRITON: + @triton.jit + def _rms_norm_scale_shift_kernel( + X_ptr, Out_ptr, Scale_ptr, Shift_ptr, + N, scale_n_rows, # scale_n_rows: actual rows in scale/shift (handles broadcast) + eps: tl.constexpr, + BLOCK_N: tl.constexpr, + IS_BF16: tl.constexpr, + HAS_BROADCAST: tl.constexpr, # True when scale_n_rows < n_rows + ): + row = tl.program_id(0) + cols = tl.arange(0, BLOCK_N) + mask = cols < N + off = row * N + cols + + x = tl.load(X_ptr + off, mask=mask, other=0.0).to(tl.float32) + + mean_sq = tl.sum(x * x, axis=0) / N + rrms = tl.math.rsqrt(mean_sq + eps) + x_norm = x * rrms + + # Fast path: no broadcast, scale row == x row + if HAS_BROADCAST: + scale_row = row % scale_n_rows + scale_off = scale_row * N + cols + else: + scale_off = off + scale = tl.load(Scale_ptr + scale_off, mask=mask, other=0.0).to(tl.float32) + shift = tl.load(Shift_ptr + scale_off, mask=mask, other=0.0).to(tl.float32) + out = x_norm * (1.0 + scale) + shift + + if IS_BF16: + tl.store(Out_ptr + off, out.to(tl.bfloat16), mask=mask) + else: + tl.store(Out_ptr + off, out.to(tl.float16), mask=mask) + + @triton.jit + def _rope_qk_split_kernel( + Q_ptr, K_ptr, Cos_ptr, Sin_ptr, + H, T, D, # D = dim_head (full, even) + TH, # T * H, precomputed to avoid runtime multiply in index decomp + # q/k layout: [B, T, H*D] contiguous → q[b,t,h*D + d] + # cos/sin layout: [B, H, T, D//2] contiguous + IS_BF16: tl.constexpr, + BLOCK_HD: tl.constexpr, # >= D//2 + ): + # grid: (B*H*T,) + bht = tl.program_id(0) + t = bht % T + h = (bht // T) % H + b = bht // TH + + D_half = D // 2 + cols = tl.arange(0, BLOCK_HD) + mask = cols < D_half + + # offset into q/k tensor: [B, T, H*D] + qk_base = (b * T + t) * (H * D) + h * D + # offset into cos/sin: [B, H, T, D//2] + cs_base = (b * H * T + h * T + t) * D_half + + # load both halves of q and k + q_x = tl.load(Q_ptr + qk_base + cols, mask=mask, other=0.0).to(tl.float32) + q_y = tl.load(Q_ptr + qk_base + D_half + cols, mask=mask, other=0.0).to(tl.float32) + k_x = tl.load(K_ptr + qk_base + cols, mask=mask, other=0.0).to(tl.float32) + k_y = tl.load(K_ptr + qk_base + D_half + cols, mask=mask, other=0.0).to(tl.float32) + cos = tl.load(Cos_ptr + cs_base + cols, mask=mask, other=1.0).to(tl.float32) + sin = tl.load(Sin_ptr + cs_base + cols, mask=mask, other=0.0).to(tl.float32) + + # split RoPE: out_x = x*cos - y*sin, out_y = y*cos + x*sin + q_ox = q_x * cos - q_y * sin + q_oy = q_y * cos + q_x * sin + k_ox = k_x * cos - k_y * sin + k_oy = k_y * cos + k_x * sin + + if IS_BF16: + tl.store(Q_ptr + qk_base + cols, q_ox.to(tl.bfloat16), mask=mask) + tl.store(Q_ptr + qk_base + D_half + cols, q_oy.to(tl.bfloat16), mask=mask) + tl.store(K_ptr + qk_base + cols, k_ox.to(tl.bfloat16), mask=mask) + tl.store(K_ptr + qk_base + D_half + cols, k_oy.to(tl.bfloat16), mask=mask) + else: + tl.store(Q_ptr + qk_base + cols, q_ox.to(tl.float16), mask=mask) + tl.store(Q_ptr + qk_base + D_half + cols, q_oy.to(tl.float16), mask=mask) + tl.store(K_ptr + qk_base + cols, k_ox.to(tl.float16), mask=mask) + tl.store(K_ptr + qk_base + D_half + cols, k_oy.to(tl.float16), mask=mask) + + @triton.jit + def _rms_norm_dual_scale_shift_kernel( + X_ptr, Out1_ptr, Out2_ptr, + Scale1_ptr, Shift1_ptr, Scale2_ptr, Shift2_ptr, + N, scale_n_rows, + eps: tl.constexpr, + BLOCK_N: tl.constexpr, + IS_BF16: tl.constexpr, + HAS_BROADCAST: tl.constexpr, + ): + """Compute rms_norm(x) once, write two differently-scaled outputs.""" + row = tl.program_id(0) + cols = tl.arange(0, BLOCK_N) + mask = cols < N + off = row * N + cols + + x = tl.load(X_ptr + off, mask=mask, other=0.0).to(tl.float32) + mean_sq = tl.sum(x * x, axis=0) / N + x_norm = x * tl.math.rsqrt(mean_sq + eps) + + if HAS_BROADCAST: + scale_row = row % scale_n_rows + s_off = scale_row * N + cols + else: + s_off = off + + scale1 = tl.load(Scale1_ptr + s_off, mask=mask, other=0.0).to(tl.float32) + shift1 = tl.load(Shift1_ptr + s_off, mask=mask, other=0.0).to(tl.float32) + scale2 = tl.load(Scale2_ptr + s_off, mask=mask, other=0.0).to(tl.float32) + shift2 = tl.load(Shift2_ptr + s_off, mask=mask, other=0.0).to(tl.float32) + + out1 = x_norm * (1.0 + scale1) + shift1 + out2 = x_norm * (1.0 + scale2) + shift2 + + if IS_BF16: + tl.store(Out1_ptr + off, out1.to(tl.bfloat16), mask=mask) + tl.store(Out2_ptr + off, out2.to(tl.bfloat16), mask=mask) + else: + tl.store(Out1_ptr + off, out1.to(tl.float16), mask=mask) + tl.store(Out2_ptr + off, out2.to(tl.float16), mask=mask) + + +def fused_norm_scale_shift(x, scale, shift, eps=1e-6, use_triton=True): + if use_triton and HAS_TRITON and x.is_cuda: + orig_shape = x.shape + hidden = x.shape[-1] + x_2d = x.contiguous().reshape(-1, hidden) + n_rows = x_2d.shape[0] + # Flatten scale/shift without expanding — kernel handles broadcast via modulo + scale_2d = scale.contiguous().reshape(-1, hidden) + shift_2d = shift.contiguous().reshape(-1, hidden) + scale_n_rows = scale_2d.shape[0] + out = torch.empty_like(x_2d) + BLOCK_N = triton.next_power_of_2(hidden) + num_warps = min(max(BLOCK_N // 256, 1), 16) + _rms_norm_scale_shift_kernel[(n_rows,)]( + x_2d, out, scale_2d, shift_2d, + hidden, scale_n_rows, + eps=eps, BLOCK_N=BLOCK_N, + IS_BF16=(x.dtype == torch.bfloat16), + HAS_BROADCAST=(scale_n_rows < n_rows), + num_warps=num_warps, + ) + return out.view(orig_shape) + else: + return comfy.ldm.common_dit.rms_norm(x, eps=eps) * (1 + scale) + shift + + +def fused_rope_qk(q, k, freqs_cis, use_triton=True): + """Apply split RoPE to q and k in one fused kernel pass. + q, k: [B, T, H*D] contiguous + freqs_cis: (cos, sin, split_pe) where cos/sin: [B, H, T, D//2] + Falls back to original apply_rotary_emb if preconditions not met. + """ + + if not (use_triton and HAS_TRITON and q.is_cuda): + return _apply_rope(q, freqs_cis), _apply_rope(k, freqs_cis) + + cos, sin = freqs_cis[0], freqs_cis[1] + split_pe = freqs_cis[2] if len(freqs_cis) > 2 else False + + if not split_pe or cos.ndim != 4 or q.ndim != 3: + return _apply_rope(q, freqs_cis), _apply_rope(k, freqs_cis) + + B_cos, H, T_cos, D_half = cos.shape + D = D_half * 2 + if q.shape != (B_cos, T_cos, H * D) or k.shape != (B_cos, T_cos, H * D): + return _apply_rope(q, freqs_cis), _apply_rope(k, freqs_cis) + + q = q.contiguous() + k = k.contiguous() + cos_c = cos.contiguous() + sin_c = sin.contiguous() + + BLOCK_HD = triton.next_power_of_2(D_half) + num_warps = min(max(BLOCK_HD // 32, 1), 8) + _rope_qk_split_kernel[(B_cos * H * T_cos,)]( + q, k, cos_c, sin_c, + H, T_cos, D, + T_cos * H, + IS_BF16=(q.dtype == torch.bfloat16), + BLOCK_HD=BLOCK_HD, + num_warps=num_warps, + ) + return q, k + + +def fused_norm_dual_scale_shift(x, scale1, shift1, scale2, shift2, eps=1e-6, use_triton=True): + """RMS-norm x once, return two scaled outputs: (x_norm*(1+s1)+b1, x_norm*(1+s2)+b2).""" + if use_triton and HAS_TRITON and x.is_cuda: + orig_shape = x.shape + hidden = x.shape[-1] + x_2d = x.contiguous().reshape(-1, hidden) + n_rows = x_2d.shape[0] + scale1_2d = scale1.contiguous().reshape(-1, hidden) + shift1_2d = shift1.contiguous().reshape(-1, hidden) + scale2_2d = scale2.contiguous().reshape(-1, hidden) + shift2_2d = shift2.contiguous().reshape(-1, hidden) + scale_n_rows = scale1_2d.shape[0] + out1 = torch.empty_like(x_2d) + out2 = torch.empty_like(x_2d) + BLOCK_N = triton.next_power_of_2(hidden) + num_warps = min(max(BLOCK_N // 256, 1), 16) + _rms_norm_dual_scale_shift_kernel[(n_rows,)]( + x_2d, out1, out2, + scale1_2d, shift1_2d, scale2_2d, shift2_2d, + hidden, scale_n_rows, + eps=eps, BLOCK_N=BLOCK_N, + IS_BF16=(x.dtype == torch.bfloat16), + HAS_BROADCAST=(scale_n_rows < n_rows), + num_warps=num_warps, + ) + return out1.view(orig_shape), out2.view(orig_shape) + else: + x_norm = comfy.ldm.common_dit.rms_norm(x, eps=eps) + return x_norm * (1 + scale1) + shift1, x_norm * (1 + scale2) + shift2 + + +def _apply_text_cross_attention_patched( + self, x, context, attn, scale_shift_table, prompt_scale_shift_table, + timestep, prompt_timestep, attention_mask, transformer_options, +): + """Drop-in replacement for _apply_text_cross_attention with fused norm+scale+shift. + Patched onto the block instance so self._apply_text_cross_attention resolves here.""" + if self.cross_attention_adaln: + shift_q, scale_q, gate = self.get_ada_values(scale_shift_table, x.shape[0], timestep, slice(6, 9)) + batch_size = x.shape[0] + shift_kv, scale_kv = ( + prompt_scale_shift_table[None, None].to(device=x.device, dtype=x.dtype) + + prompt_timestep.reshape(batch_size, prompt_timestep.shape[1], 2, -1) + ).unbind(dim=2) + attn_input = fused_norm_scale_shift(x, scale_q, shift_q, + use_triton=getattr(self, 'use_triton_kernels', True)) + del shift_q, scale_q + encoder_hidden_states = context * (1 + scale_kv) + shift_kv + del scale_kv, shift_kv + return attn(attn_input, context=encoder_hidden_states, + mask=attention_mask, transformer_options=transformer_options) * gate + return attn( + comfy.ldm.common_dit.rms_norm(x), context=context, + mask=attention_mask, transformer_options=transformer_options, + ) + + +def ltx2_forward( + self, x: Tuple[torch.Tensor, torch.Tensor], v_context=None, a_context=None, attention_mask=None, v_timestep=None, a_timestep=None, + v_pe=None, a_pe=None, v_cross_pe=None, a_cross_pe=None, v_cross_scale_shift_timestep=None, a_cross_scale_shift_timestep=None, + v_cross_gate_timestep=None, a_cross_gate_timestep=None, transformer_options=None, self_attention_mask=None, + v_prompt_timestep=None, a_prompt_timestep=None, **kwargs + ) -> Tuple[torch.Tensor, torch.Tensor]: + run_vx = transformer_options.get("run_vx", True) + run_ax = transformer_options.get("run_ax", True) + use_triton = getattr(self, 'use_triton_kernels', True) + video_scale = getattr(self, 'video_scale', 1.0) + audio_scale = getattr(self, 'audio_scale', 1.0) + audio_to_video_scale = getattr(self, 'audio_to_video_scale', 1.0) + video_to_audio_scale = getattr(self, 'video_to_audio_scale', 1.0) + + vx, ax = x + run_ax = run_ax and ax.numel() > 0 and audio_scale != 0.0 + run_a2v = run_vx and transformer_options.get("a2v_cross_attn", True) and ax.numel() > 0 and audio_to_video_scale != 0.0 + run_v2a = run_ax and transformer_options.get("v2a_cross_attn", True) and video_to_audio_scale != 0.0 + + if run_vx: + # video self-attention + vshift_msa, vscale_msa = (self.get_ada_values(self.scale_shift_table, vx.shape[0], v_timestep, slice(0, 2))) + norm_vx = fused_norm_scale_shift(vx, vscale_msa, vshift_msa, use_triton=use_triton) + del vshift_msa, vscale_msa + # inline attn1 only when triton is active (needed to intercept q/k for fused RoPE) + if use_triton: + _a1 = self.attn1 + q = _a1.to_q(norm_vx) + k = _a1.to_k(norm_vx) + v = _a1.to_v(norm_vx) + + q = _a1.q_norm(q) + k = _a1.k_norm(k) + + if v_pe is not None: + q, k = fused_rope_qk(q, k, v_pe, use_triton=True) + + if self_attention_mask is None: + _sa_out = _comfy_attn.optimized_attention(q, k, v, _a1.heads, attn_precision=_a1.attn_precision, transformer_options=transformer_options) + else: + _sa_out = _comfy_attn.optimized_attention_masked(q, k, v, _a1.heads, self_attention_mask, attn_precision=_a1.attn_precision, transformer_options=transformer_options) + del q, k, v + if _a1.to_gate_logits is not None: + _gate = _a1.to_gate_logits(norm_vx) + _b, _t, _ = _sa_out.shape + _sa_out = _sa_out.view(_b, _t, _a1.heads, _a1.dim_head) + _sa_out = (_sa_out * (2.0 * torch.sigmoid(_gate)).unsqueeze(-1)).view(_b, _t, _a1.heads * _a1.dim_head) + del _gate + + attn1_out = _a1.to_out(_sa_out) + del _sa_out, norm_vx + else: + attn1_out = self.attn1(norm_vx, pe=v_pe, transformer_options=transformer_options) + del norm_vx + # video cross-attention + vgate_msa = self.get_ada_values(self.scale_shift_table, vx.shape[0], v_timestep, slice(2, 3))[0] + vx.addcmul_(attn1_out, vgate_msa, value=video_scale) + del vgate_msa, attn1_out + vx.add_(self._apply_text_cross_attention( + vx, v_context, self.attn2, self.scale_shift_table, + getattr(self, 'prompt_scale_shift_table', None), + v_timestep, v_prompt_timestep, attention_mask, transformer_options,), + alpha=video_scale + ) + # audio + if run_ax: + # audio self-attention + ashift_msa, ascale_msa = (self.get_ada_values(self.audio_scale_shift_table, ax.shape[0], a_timestep, slice(0, 2))) + norm_ax = fused_norm_scale_shift(ax, ascale_msa, ashift_msa, use_triton=use_triton) + del ashift_msa, ascale_msa + attn1_out = self.audio_attn1(norm_ax, pe=a_pe, transformer_options=transformer_options) + del norm_ax + # audio cross-attention + agate_msa = self.get_ada_values(self.audio_scale_shift_table, ax.shape[0], a_timestep, slice(2, 3))[0] + ax.addcmul_(attn1_out, agate_msa, value=audio_scale) + del agate_msa, attn1_out + ax.add_(self._apply_text_cross_attention( + ax, a_context, self.audio_attn2, self.audio_scale_shift_table, + getattr(self, 'audio_prompt_scale_shift_table', None), + a_timestep, a_prompt_timestep, attention_mask, transformer_options,), + alpha=audio_scale + ) + + # video - audio cross attention. + if run_a2v or run_v2a: + if run_a2v and run_v2a: + # Fetch all 4 scale/shift values per table at once (avoids two get_ada_values calls each) + # and compute rms_norm once per tensor via dual kernel. + v_ca_vals = self.get_ada_values(self.scale_shift_table_a2v_ca_video[:4, :], vx.shape[0], v_cross_scale_shift_timestep) + a_ca_vals = self.get_ada_values(self.scale_shift_table_a2v_ca_audio[:4, :], ax.shape[0], a_cross_scale_shift_timestep) + vx_a2v, vx_v2a = fused_norm_dual_scale_shift(vx, v_ca_vals[0], v_ca_vals[1], v_ca_vals[2], v_ca_vals[3], use_triton=use_triton) + ax_a2v, ax_v2a = fused_norm_dual_scale_shift(ax, a_ca_vals[0], a_ca_vals[1], a_ca_vals[2], a_ca_vals[3], use_triton=use_triton) + del v_ca_vals, a_ca_vals + elif run_a2v: + sv, bv = self.get_ada_values(self.scale_shift_table_a2v_ca_video[:4, :], vx.shape[0], v_cross_scale_shift_timestep)[:2] + sa, ba = self.get_ada_values(self.scale_shift_table_a2v_ca_audio[:4, :], ax.shape[0], a_cross_scale_shift_timestep)[:2] + vx_a2v = fused_norm_scale_shift(vx, sv, bv, use_triton=use_triton) + ax_a2v = fused_norm_scale_shift(ax, sa, ba, use_triton=use_triton) + del sv, bv, sa, ba + else: # only v2a + sv, bv = self.get_ada_values(self.scale_shift_table_a2v_ca_video[:4, :], vx.shape[0], v_cross_scale_shift_timestep)[2:4] + sa, ba = self.get_ada_values(self.scale_shift_table_a2v_ca_audio[:4, :], ax.shape[0], a_cross_scale_shift_timestep)[2:4] + vx_v2a = fused_norm_scale_shift(vx, sv, bv, use_triton=use_triton) + ax_v2a = fused_norm_scale_shift(ax, sa, ba, use_triton=use_triton) + del sv, bv, sa, ba + + # audio to video cross attention + if run_a2v: + a2v_out = self.audio_to_video_attn(vx_a2v, context=ax_a2v, pe=v_cross_pe, k_pe=a_cross_pe, transformer_options=transformer_options) + del vx_a2v, ax_a2v + gate_out_a2v = self.get_ada_values(self.scale_shift_table_a2v_ca_video[4:, :], vx.shape[0], v_cross_gate_timestep)[0] + vx.addcmul_(a2v_out, gate_out_a2v, value=audio_to_video_scale) + del gate_out_a2v, a2v_out + + # video to audio cross attention + if run_v2a: + v2a_out = self.video_to_audio_attn(ax_v2a, context=vx_v2a, pe=a_cross_pe, k_pe=v_cross_pe, transformer_options=transformer_options) + del ax_v2a, vx_v2a + gate_out_v2a = self.get_ada_values(self.scale_shift_table_a2v_ca_audio[4:, :], ax.shape[0], a_cross_gate_timestep)[0] + ax.addcmul_(v2a_out, gate_out_v2a, value=video_to_audio_scale) + del gate_out_v2a, v2a_out + + # video feedforward + if run_vx: + vshift_mlp, vscale_mlp = self.get_ada_values(self.scale_shift_table, vx.shape[0], v_timestep, slice(3, 5)) + vx_scaled = fused_norm_scale_shift(vx, vscale_mlp, vshift_mlp, use_triton=use_triton) + del vshift_mlp, vscale_mlp + + ff_out = self.ff(vx_scaled) + del vx_scaled + + vgate_mlp = self.get_ada_values(self.scale_shift_table, vx.shape[0], v_timestep, slice(5, 6))[0] + vx.addcmul_(ff_out, vgate_mlp, value=video_scale) + del vgate_mlp, ff_out + + # audio feedforward + if run_ax: + ashift_mlp, ascale_mlp = self.get_ada_values(self.audio_scale_shift_table, ax.shape[0], a_timestep, slice(3, 5)) + ax_scaled = fused_norm_scale_shift(ax, ascale_mlp, ashift_mlp, use_triton=use_triton) + del ashift_mlp, ascale_mlp + + ff_out = self.audio_ff(ax_scaled) + del ax_scaled + + agate_mlp = self.get_ada_values(self.audio_scale_shift_table, ax.shape[0], a_timestep, slice(5, 6))[0] + ax.addcmul_(ff_out, agate_mlp, value=audio_scale) + del agate_mlp, ff_out + + return vx, ax + +class LTX2ForwardPatch: + def __init__(self, video, audio, audio_to_video, video_to_audio, use_triton=True): + self.video_scale = video + self.audio_scale = audio + self.video_to_audio_scale = video_to_audio + self.audio_to_video_scale = audio_to_video + self.use_triton_kernels = use_triton + def __get__(self, obj, objtype=None): + def wrapped_forward(self_module, *args, **kwargs): + self_module.video_scale = self.video_scale + self_module.audio_scale = self.audio_scale + self_module.video_to_audio_scale = self.video_to_audio_scale + self_module.audio_to_video_scale = self.audio_to_video_scale + self_module.use_triton_kernels = self.use_triton_kernels + self_module._apply_text_cross_attention = types.MethodType( + _apply_text_cross_attention_patched, self_module) + return ltx2_forward(self_module, *args, **kwargs) + return types.MethodType(wrapped_forward, obj) + +class LTX2AttentionTunerPatch(io.ComfyNode): + + @classmethod + def define_schema(cls): + return io.Schema( + node_id="LTX2AttentionTunerPatch", + display_name="LTX2 Attention Tuner Patch", + category="KJNodes/ltxv", + description="EXPERIMENTAL! Custom LTX2 forward pass with attention scaling factors per modality, also reduces peak VRAM usage.", + is_experimental=True, + inputs=[ + io.Model.Input("model"), + io.String.Input("blocks", default="", tooltip="Comma separated list of transformer block indices to apply the patch to. Leave empty to apply to all blocks."), + io.Float.Input("video_scale", default=1.0, min=0.0, max=100, step=0.01, tooltip="Scaling factor for video attention."), + io.Float.Input("audio_scale", default=1.0, min=0.0, max=100, step=0.01, tooltip="Scaling factor for audio attention."), + io.Float.Input("audio_to_video_scale", default=1.0, min=0.0, max=100, step=0.01, tooltip="Scaling factor for video attention."), + io.Float.Input("video_to_audio_scale", default=1.0, min=0.0, max=100, step=0.01, tooltip="Scaling factor for audio attention."), + io.Boolean.Input("triton_kernels", default=True, tooltip="Use Triton fused kernels for norm+scale+shift and rope application operations, can be very slightly faster."), + ], + outputs=[ + io.Model.Output(display_name="model"), + ], + ) + + @classmethod + def execute(cls, model, blocks, video_scale, audio_scale, audio_to_video_scale, video_to_audio_scale, triton_kernels) -> io.NodeOutput: + model_clone = model.clone() + diffusion_model = model_clone.get_model_object("diffusion_model") + + # Parse selected block indices + if blocks.strip() == "": + selected_blocks = set(range(len(diffusion_model.transformer_blocks))) + else: + selected_blocks = set(int(idx) for idx in blocks.strip().split(",")) + + logging.info(f"Applying LTX2 Attention Tuner Patch with custom scales to blocks: {sorted(selected_blocks)}, triton_kernels={triton_kernels}") + + # Apply patch to all blocks, but use 1.0 scales for non-selected blocks + for idx in range(len(diffusion_model.transformer_blocks)): + block = diffusion_model.transformer_blocks[idx] + if idx in selected_blocks: + patched_forward = LTX2ForwardPatch(video_scale, audio_scale, audio_to_video_scale, video_to_audio_scale, use_triton=triton_kernels).__get__(block, block.__class__) + else: + patched_forward = LTX2ForwardPatch(1.0, 1.0, 1.0, 1.0, use_triton=triton_kernels).__get__(block, block.__class__) + model_clone.add_object_patch(f"diffusion_model.transformer_blocks.{idx}.forward", patched_forward) + + return io.NodeOutput(model_clone) + +class LTX2MemoryEfficientSageAttentionPatch(io.ComfyNode): + + @classmethod + def define_schema(cls): + return io.Schema( + node_id="LTX2MemoryEfficientSageAttentionPatch", + display_name="LTX2 Mem Eff Sage Attention Patch", + category="KJNodes/ltxv", + description="EXPERIMENTAL! Activates custom sageattention to reduce peak VRAM usage, overrides the attention mode. Requires latest sageattention version.", + is_experimental=True, + inputs=[ + io.Model.Input("model"), + io.Boolean.Input("triton_kernels", default=True, tooltip="Use Triton fused RoPE kernel on the self-attention Q/K. Requires Triton."), + ], + outputs=[ + io.Model.Output(display_name="model"), + ], + ) + + @classmethod + def execute(cls, model, triton_kernels) -> io.NodeOutput: + if _cuda_archs is None: + raise RuntimeError("sageattention is not new enough version or could not determine CUDA architecture, cannot apply LTX2 Memory Efficient Sage Attention Patch.") + model_clone = model.clone() + diffusion_model = model_clone.get_model_object("diffusion_model") + + logging.info(f"Applying LTX2 Memory Efficient Sage Attention Patch to all transformer blocks, triton_kernels={triton_kernels}") + + for idx, block in enumerate(diffusion_model.transformer_blocks): + block.attn1.use_triton_kernels = triton_kernels + model_clone.add_object_patch(f"diffusion_model.transformer_blocks.{idx}.attn1.forward", ltx2_sageattn_forward.__get__(block.attn1, block.attn1.__class__)) + + return io.NodeOutput(model_clone) + + +def get_cuda_version(): + try: + version = torch.version.cuda + if version is not None: + major, minor = version.split('.') + return int(major), int(minor) + else: + return 0, 0 + except Exception: + return 0, 0 + +sageplus_sm89_available = False +_cuda_archs = None +try: + from sageattention.core import per_thread_int8_triton, per_warp_int8_cuda, per_block_int8_triton, per_channel_fp8, get_cuda_arch_versions, attn_false + _cuda_archs = get_cuda_arch_versions() +except: + pass +try: + from sageattention.core import _qattn_sm89 + cuda_version = get_cuda_version() + sageplus_sm89_available = hasattr(_qattn_sm89, 'qk_int8_sv_f8_accum_f16_fuse_v_scale_attn_inst_buf') and cuda_version >= (12, 8) +except ImportError: + try: + from sageattention.core import sm89_compile as _qattn_sm89 + except ImportError: + _qattn_sm89 = None +try: + from sageattention.core import _qattn_sm80 +except ImportError: + try: + from sageattention.core import sm80_compile as _qattn_sm80 + except ImportError: + _qattn_sm80 = None +try: + from sageattention.core import _qattn_sm90 +except ImportError: + try: + from sageattention.core import sm90_compile as _qattn_sm90 + except ImportError: + _qattn_sm90 = None + +from comfy.ldm.lightricks.model import apply_rotary_emb + + +def ltx2_sageattn_forward(self, x, context=None, mask=None, pe=None, k_pe=None, transformer_options={}): + dtype = x.dtype + context = x if context is None else context + + # query + q = self.to_q(x) + q = self.q_norm(q) + # key + k = self.to_k(context) + k = self.k_norm(k) + # apply RoPE — fuse q+k into one kernel when both share the same pe + if pe is not None: + use_triton = getattr(self, 'use_triton_kernels', False) + if k_pe is None: + q, k = fused_rope_qk(q, k, pe, use_triton=use_triton) + else: + q = apply_rotary_emb(q, pe) + k = apply_rotary_emb(k, k_pe) + # value + v = self.to_v(context) + + # Reshape from [batch, seq_len, total_dim] to [batch, seq_len, num_heads, head_dim] + batch_size, seq_len, _ = q.shape + head_dim_og = self.dim_head + + q = q.view(batch_size, seq_len, self.heads, head_dim_og) + k = k.view(batch_size, k.shape[1], self.heads, head_dim_og) + v = v.view(batch_size, v.shape[1], self.heads, head_dim_og) + + tensor_layout="NHD" + _tensor_layout = 0 # NHD + _is_caual = 0 + _qk_quant_gran = 3 + _return_lse = 0 + sm_scale = head_dim_og**-0.5 + quant_v_scale_max = 448.0 + + if _cuda_archs[0] in {"sm80", "sm86"}: + q_int8, q_scale, k_int8, k_scale = per_thread_int8_triton(q, k, km=k.mean(dim=1, keepdim=True), tensor_layout=tensor_layout, BLKQ=128, WARPQ=32, BLKK=64, WARPK=64) + del q, k + o = torch.empty(q_int8.size(), dtype=dtype, device=q_int8.device) + v_fp16 = v.to(torch.float16).contiguous() + del v + _qattn_sm80.qk_int8_sv_f16_accum_f32_attn(q_int8, k_int8, v_fp16, o, q_scale, k_scale, _tensor_layout, _is_caual, _qk_quant_gran, sm_scale, _return_lse) + elif _cuda_archs[0] == "sm75": + q_int8, q_scale, k_int8, k_scale = per_block_int8_triton(q, k, km=k.mean(dim=1, keepdim=True), sm_scale=sm_scale, tensor_layout=tensor_layout) + del q, k + o, _ = attn_false(q_int8, k_int8, v, q_scale, k_scale, tensor_layout=tensor_layout, output_dtype=dtype, attn_mask=None, return_lse=False) + del v + elif _cuda_archs[0] == "sm89": + if not sageplus_sm89_available: + pv_accum_dtype = "fp32+fp32" + else: + pv_accum_dtype = "fp32+fp16" + quant_v_scale_max = 2.25 + q_int8, q_scale, k_int8, k_scale = per_thread_int8_triton(q, k, km=k.mean(dim=1, keepdim=True), tensor_layout=tensor_layout, BLKQ=128, WARPQ=32, BLKK=64, WARPK=64) + del q, k + v_fp8, v_scale, _ = per_channel_fp8(v, tensor_layout=tensor_layout, scale_max=quant_v_scale_max, smooth_v=False) + del v + o = torch.empty(q_int8.size(), dtype=dtype, device=q_int8.device) + if pv_accum_dtype == "fp32+fp16": + _qattn_sm89.qk_int8_sv_f8_accum_f16_fuse_v_scale_attn_inst_buf(q_int8, k_int8, v_fp8, o, q_scale, k_scale, v_scale, _tensor_layout, _is_caual, _qk_quant_gran, sm_scale, _return_lse) + elif pv_accum_dtype == "fp32+fp32": + _qattn_sm89.qk_int8_sv_f8_accum_f32_fuse_v_scale_attn_inst_buf(q_int8, k_int8, v_fp8, o, q_scale, k_scale, v_scale, _tensor_layout, _is_caual, _qk_quant_gran, sm_scale, _return_lse) + del v_fp8, v_scale + elif _cuda_archs[0] == "sm90": + q_int8, q_scale, k_int8, k_scale = per_thread_int8_triton(q, k, km=k.mean(dim=1, keepdim=True), tensor_layout=tensor_layout, BLKQ=64, WARPQ=16, BLKK=128, WARPK=128) + del q, k, + v_fp8, v_scale, _ = per_channel_fp8(v, tensor_layout=tensor_layout, smooth_v=False) + del v + o = torch.empty(q_int8.size(), dtype=dtype, device=q_int8.device) + _qattn_sm90.qk_int8_sv_f8_accum_f32_fuse_v_scale_attn_inst_buf(q_int8, k_int8, v_fp8, o, q_scale, k_scale, v_scale, _tensor_layout, _is_caual, _qk_quant_gran, sm_scale, _return_lse) + del v_fp8, v_scale + elif _cuda_archs[0] == "sm120": + if not sageplus_sm89_available: + pv_accum_dtype = "fp32" + else: + pv_accum_dtype = "fp32+fp16" + quant_v_scale_max = 2.25 + _qk_quant_gran = 2 # per warp + q_int8, q_scale, k_int8, k_scale = per_warp_int8_cuda(q, k, km=k.mean(dim=1, keepdim=True), tensor_layout=tensor_layout, BLKQ=128, WARPQ=32, BLKK=64) + del q, k + v_fp8, v_scale, _ = per_channel_fp8(v, tensor_layout=tensor_layout, scale_max=quant_v_scale_max, smooth_v=False) + del v + o = torch.empty(q_int8.size(), dtype=dtype, device=q_int8.device) + if pv_accum_dtype == "fp32": + _qattn_sm89.qk_int8_sv_f8_accum_f32_fuse_v_scale_attn(q_int8, k_int8, v_fp8, o, q_scale, k_scale, v_scale, _tensor_layout, _is_caual, _qk_quant_gran, sm_scale, _return_lse) + elif pv_accum_dtype == "fp32+fp16": + _qattn_sm89.qk_int8_sv_f8_accum_f16_fuse_v_scale_attn_inst_buf(q_int8, k_int8, v_fp8, o, q_scale, k_scale, v_scale, _tensor_layout, _is_caual, _qk_quant_gran, sm_scale, _return_lse) + del v_fp8, v_scale + + del q_int8, q_scale, k_int8, k_scale + + o = o.view(batch_size, seq_len, -1) + + if self.to_gate_logits is not None: + gate_logits = self.to_gate_logits(x) # (B, T, H) + b, t, _ = o.shape + o = o.view(b, t, self.heads, self.dim_head) + gates = 2.0 * torch.sigmoid(gate_logits) # zero-init -> identity + o = o * gates.unsqueeze(-1) + o = o.view(b, t, self.heads * self.dim_head) + + return self.to_out(o) + + +import folder_paths + +class LTX2LoraLoaderAdvanced(io.ComfyNode): + + @classmethod + def define_schema(cls): + return io.Schema( + node_id="LTX2LoraLoaderAdvanced", + display_name="LTX2 LoRA Loader Advanced", + category="KJNodes/ltxv", + description="Advanced LoRA loader with per-block strength control for LTX2 models", + is_experimental=True, + inputs=[ + io.Combo.Input("lora_name", options=folder_paths.get_filename_list("loras"), tooltip="The name of the LoRA."), + io.Model.Input("model", tooltip="The diffusion model the LoRA will be applied to."), + io.Float.Input("strength_model", default=1.0, min=-100.0, max=100.0, step=0.01, tooltip="How strongly to modify the diffusion model. This value can be negative."), + io.String.Input("opt_lora_path", optional=True, force_input=True,tooltip="Absolute path of the LoRA."), + io.Custom("SELECTEDDITBLOCKS").Input("blocks", optional=True, tooltip="Selected DiT blocks configuration"), + io.Float.Input("video", default=1.0, min=0.0, max=1.0, step=0.01, tooltip="Strength for video attention layers."), + io.Float.Input("video_to_audio", default=1.0, min=0.0, max=1.0, step=0.01, tooltip="Strength for video to audio cross-attention layers."), + io.Float.Input("audio", default=1.0, min=0.0, max=1.0, step=0.01, tooltip="Strength for audio attention layers."), + io.Float.Input("audio_to_video", default=1.0, min=0.0, max=1.0, step=0.01, tooltip="Strength for audio to video cross-attention layers."), + io.Float.Input("other", default=1.0, min=0.0, max=1.0, step=0.01, tooltip="Strength for layers not caught by other layer filters."), + ], + outputs=[ + io.Model.Output(display_name="model", tooltip="The modified diffusion model."), + io.String.Output(display_name="rank", tooltip="Possible rank of the LoRA."), + io.String.Output(display_name="loaded_keys_info", tooltip="List of loaded keys and their alpha values."), + ], + ) + + @classmethod + def execute(cls, model, lora_name, strength_model, video, video_to_audio, audio, audio_to_video, other, opt_lora_path=None, blocks=None) -> io.NodeOutput: + from comfy.utils import load_torch_file + import comfy.lora + + if opt_lora_path: + lora_path = opt_lora_path + else: + lora_path = folder_paths.get_full_path("loras", lora_name) + + lora = load_torch_file(lora_path, safe_load=True) + + # Find the first key that ends with "weight" + rank = "unknown" + weight_key = next((key for key in lora.keys() if key.endswith('weight')), None) + # Print the shape of the value corresponding to the key + if weight_key: + print(f"Shape of the first 'weight' key ({weight_key}): {lora[weight_key].shape}") + rank = str(lora[weight_key].shape[0]) + else: + print("No key ending with 'weight' found.") + rank = "Couldn't find rank" + + key_map = {} + if model is not None: + key_map = comfy.lora.model_lora_keys_unet(model.model, key_map) + + loaded = comfy.lora.load_lora(lora, key_map) + + keys_to_delete = [] + + # First apply blocks filtering if provided + if blocks is not None: + for block in blocks: + for key in list(loaded.keys()): + match = False + if isinstance(key, str) and block in key: + match = True + elif isinstance(key, tuple): + for k in key: + if block in k: + match = True + break + + if match: + ratio = blocks[block] + if ratio == 0: + keys_to_delete.append(key) + else: + # Only modify LoRA adapters, skip diff tuples + value = loaded[key] + if hasattr(value, 'weights'): + weights_list = list(value.weights) + weights_list[2] = ratio + loaded[key].weights = tuple(weights_list) + + # Then apply layer-based attention strength filtering (takes priority) + for key in list(loaded.keys()): + if key in keys_to_delete: + continue + + key_str = key if isinstance(key, str) else (key[0] if isinstance(key, tuple) else str(key)) + + # Determine the strength multiplier based on layer name + # Check more specific patterns first + strength_multiplier = None + + # Video to audio cross-attention (check first - most specific) + if "video_to_audio_attn" in key_str: + strength_multiplier = video_to_audio + # Audio to video cross-attention + elif "audio_to_video_attn" in key_str: + strength_multiplier = audio_to_video + # Audio layers + elif "audio_attn" in key_str or "audio_ff.net" in key_str: + strength_multiplier = audio + # Video layers (check last - most general) + elif "attn" in key_str or "ff.net" in key_str: + strength_multiplier = video + # Everything else not caught by above filters + else: + strength_multiplier = other + + # Apply strength or mark for deletion + if strength_multiplier is not None: + if strength_multiplier == 0: + keys_to_delete.append(key) + elif strength_multiplier != 1.0: + value = loaded[key] + if hasattr(value, 'weights'): + weights_list = list(value.weights) + # Handle case where alpha (weights[2]) might be None + current_alpha = weights_list[2] if weights_list[2] is not None else 1.0 + weights_list[2] = current_alpha * strength_multiplier + loaded[key].weights = tuple(weights_list) + + for key in keys_to_delete: + if key in loaded: + del loaded[key] + + # Build list of loaded keys and their alphas + loaded_keys_list = [] + for key, value in loaded.items(): + if hasattr(value, 'weights'): + key_str = key if isinstance(key, str) else str(key) + alpha = value.weights[2] if value.weights[2] is not None else "None" + loaded_keys_list.append(f"{key_str}: alpha={alpha}") + else: + key_str = key if isinstance(key, str) else str(key) + loaded_keys_list.append(f"{key_str}: type={type(value).__name__}") + + if model is not None: + new_modelpatcher = model.clone() + k = new_modelpatcher.add_patches(loaded, strength_model) + + # Add not loaded keys to the info + k = set(k) + not_loaded = [] + for x in loaded: + if x not in k: + key_str = x if isinstance(x, str) else str(x) + not_loaded.append(f"NOT LOADED: {key_str}") + + if not_loaded: + loaded_keys_list.extend(not_loaded) + + loaded_keys_info = "\n".join(loaded_keys_list) + + return io.NodeOutput(new_modelpatcher, rank, loaded_keys_info) diff --git a/ComfyUI-KJNodes/nodes/mask_nodes.py b/ComfyUI-KJNodes/nodes/mask_nodes.py new file mode 100644 index 0000000000000000000000000000000000000000..c2784118422302f7d3654505d3916e64913d6ed2 --- /dev/null +++ b/ComfyUI-KJNodes/nodes/mask_nodes.py @@ -0,0 +1,1689 @@ +import torch +import torch.nn.functional as F +from torchvision.transforms import functional as TF +from PIL import Image, ImageDraw, ImageFilter, ImageFont +import scipy.ndimage +import numpy as np +from contextlib import nullcontext +import os +from tqdm import tqdm +import logging + +from comfy import model_management +from comfy.utils import ProgressBar +from comfy.utils import common_upscale +from nodes import MAX_RESOLUTION + +import folder_paths + +from ..utility.utility import tensor2pil, pil2tensor + +script_directory = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) +main_device = model_management.get_torch_device() +offload_device = model_management.unet_offload_device() + +class BatchCLIPSeg: + + def __init__(self): + pass + + @classmethod + def INPUT_TYPES(s): + + return {"required": + { + "images": ("IMAGE",), + "text": ("STRING", {"multiline": False}), + "threshold": ("FLOAT", {"default": 0.5,"min": 0.0, "max": 10.0, "step": 0.001}), + "binary_mask": ("BOOLEAN", {"default": True}), + "combine_mask": ("BOOLEAN", {"default": False}), + "use_cuda": ("BOOLEAN", {"default": True}), + }, + "optional": + { + "blur_sigma": ("FLOAT", {"default": 0.0, "min": 0.0, "max": 100.0, "step": 0.1}), + "opt_model": ("CLIPSEGMODEL", ), + "prev_mask": ("MASK", {"default": None}), + "image_bg_level": ("FLOAT", {"default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01}), + "invert": ("BOOLEAN", {"default": False}), + } + } + + CATEGORY = "KJNodes/masking" + RETURN_TYPES = ("MASK", "IMAGE", ) + RETURN_NAMES = ("Mask", "Image", ) + FUNCTION = "segment_image" + DESCRIPTION = """ +Segments an image or batch of images using CLIPSeg. +""" + + def segment_image(self, images, text, threshold, binary_mask, combine_mask, use_cuda, blur_sigma=0.0, opt_model=None, prev_mask=None, invert= False, image_bg_level=0.5): + from transformers import CLIPSegProcessor, CLIPSegForImageSegmentation + import torchvision.transforms as transforms + offload_device = model_management.unet_offload_device() + device = model_management.get_torch_device() + if not use_cuda: + device = torch.device("cpu") + dtype = model_management.unet_dtype() + + if opt_model is None: + checkpoint_path = os.path.join(folder_paths.models_dir,'clip_seg', 'clipseg-rd64-refined-fp16') + if not hasattr(self, "model"): + try: + if not os.path.exists(checkpoint_path): + from huggingface_hub import snapshot_download + snapshot_download(repo_id="Kijai/clipseg-rd64-refined-fp16", local_dir=checkpoint_path, local_dir_use_symlinks=False) + self.model = CLIPSegForImageSegmentation.from_pretrained(checkpoint_path) + except: + checkpoint_path = "CIDAS/clipseg-rd64-refined" + self.model = CLIPSegForImageSegmentation.from_pretrained(checkpoint_path) + processor = CLIPSegProcessor.from_pretrained(checkpoint_path) + + else: + self.model = opt_model['model'] + processor = opt_model['processor'] + + self.model.to(dtype).to(device) + + B, H, W, C = images.shape + images = images.to(device) + + autocast_condition = (dtype != torch.float32) and not model_management.is_device_mps(device) + with torch.autocast(model_management.get_autocast_device(device), dtype=dtype) if autocast_condition else nullcontext(): + + PIL_images = [Image.fromarray(np.clip(255. * image.cpu().numpy().squeeze(), 0, 255).astype(np.uint8)) for image in images ] + prompt = [text] * len(images) + input_prc = processor(text=prompt, images=PIL_images, return_tensors="pt") + + for key in input_prc: + input_prc[key] = input_prc[key].to(device) + outputs = self.model(**input_prc) + + mask_tensor = torch.sigmoid(outputs.logits) + mask_tensor = (mask_tensor - mask_tensor.min()) / (mask_tensor.max() - mask_tensor.min()) + mask_tensor = torch.where(mask_tensor > (threshold), mask_tensor, torch.tensor(0, dtype=torch.float)) + + if len(mask_tensor.shape) == 2: + mask_tensor = mask_tensor.unsqueeze(0) + mask_tensor = F.interpolate(mask_tensor.unsqueeze(1), size=(H, W), mode='nearest') + mask_tensor = mask_tensor.squeeze(1) + + self.model.to(offload_device) + + if binary_mask: + mask_tensor = (mask_tensor > 0).float() + if blur_sigma > 0: + kernel_size = int(6 * int(blur_sigma) + 1) + blur = transforms.GaussianBlur(kernel_size=(kernel_size, kernel_size), sigma=(blur_sigma, blur_sigma)) + mask_tensor = blur(mask_tensor) + + if combine_mask: + mask_tensor = torch.max(mask_tensor, dim=0)[0] + mask_tensor = mask_tensor.unsqueeze(0).repeat(len(images),1,1) + + del outputs + model_management.soft_empty_cache() + + if prev_mask is not None: + if prev_mask.shape != mask_tensor.shape: + prev_mask = F.interpolate(prev_mask.unsqueeze(1), size=(H, W), mode='nearest') + mask_tensor = mask_tensor + prev_mask.to(device) + torch.clamp(mask_tensor, min=0.0, max=1.0) + + if invert: + mask_tensor = 1 - mask_tensor + + image_tensor = images * mask_tensor.unsqueeze(-1) + (1 - mask_tensor.unsqueeze(-1)) * image_bg_level + image_tensor = torch.clamp(image_tensor, min=0.0, max=1.0).cpu().float() + + mask_tensor = mask_tensor.cpu().float() + + return mask_tensor, image_tensor, + +class DownloadAndLoadCLIPSeg: + + def __init__(self): + pass + + @classmethod + def INPUT_TYPES(s): + + return {"required": + { + "model": ( + [ 'Kijai/clipseg-rd64-refined-fp16', + 'CIDAS/clipseg-rd64-refined', + ], + ), + }, + } + + CATEGORY = "KJNodes/masking" + RETURN_TYPES = ("CLIPSEGMODEL",) + RETURN_NAMES = ("clipseg_model",) + FUNCTION = "segment_image" + DESCRIPTION = """ +Downloads and loads CLIPSeg model with huggingface_hub, +to ComfyUI/models/clip_seg +""" + + def segment_image(self, model): + from transformers import CLIPSegProcessor, CLIPSegForImageSegmentation + checkpoint_path = os.path.join(folder_paths.models_dir,'clip_seg', os.path.basename(model)) + if not hasattr(self, "model"): + if not os.path.exists(checkpoint_path): + from huggingface_hub import snapshot_download + snapshot_download(repo_id=model, local_dir=checkpoint_path, local_dir_use_symlinks=False) + self.model = CLIPSegForImageSegmentation.from_pretrained(checkpoint_path) + + processor = CLIPSegProcessor.from_pretrained(checkpoint_path) + + clipseg_model = {} + clipseg_model['model'] = self.model + clipseg_model['processor'] = processor + + return clipseg_model, + +class CreateTextMask: + + RETURN_TYPES = ("IMAGE", "MASK",) + FUNCTION = "createtextmask" + CATEGORY = "KJNodes/text" + DESCRIPTION = """ +Creates a text image and mask. +Looks for fonts from this folder: +ComfyUI/custom_nodes/ComfyUI-KJNodes/fonts + +If start_rotation and/or end_rotation are different values, +creates animation between them. +""" + + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "invert": ("BOOLEAN", {"default": False}), + "frames": ("INT", {"default": 1,"min": 1, "max": 4096, "step": 1}), + "text_x": ("INT", {"default": 0,"min": 0, "max": 4096, "step": 1}), + "text_y": ("INT", {"default": 0,"min": 0, "max": 4096, "step": 1}), + "font_size": ("INT", {"default": 32,"min": 8, "max": 4096, "step": 1}), + "font_color": ("STRING", {"default": "white"}), + "text": ("STRING", {"default": "HELLO!", "multiline": True}), + "font": (folder_paths.get_filename_list("kjnodes_fonts"), ), + "width": ("INT", {"default": 512,"min": 16, "max": 4096, "step": 1}), + "height": ("INT", {"default": 512,"min": 16, "max": 4096, "step": 1}), + "start_rotation": ("INT", {"default": 0,"min": 0, "max": 359, "step": 1}), + "end_rotation": ("INT", {"default": 0,"min": -359, "max": 359, "step": 1}), + }, + } + + def createtextmask(self, frames, width, height, invert, text_x, text_y, text, font_size, font_color, font, start_rotation, end_rotation): + # Define the number of images in the batch + batch_size = frames + out = [] + masks = [] + rotation = start_rotation + if start_rotation != end_rotation: + rotation_increment = (end_rotation - start_rotation) / (batch_size - 1) + + font_path = folder_paths.get_full_path("kjnodes_fonts", font) + # Generate the text + for i in range(batch_size): + image = Image.new("RGB", (width, height), "black") + draw = ImageDraw.Draw(image) + font = ImageFont.truetype(font_path, font_size) + + # Split the text into lines and wrap words to fit width + text_lines = text.split('\n') + lines = [] + for text_line in text_lines: + if text_line.strip() == "": + # Preserve empty lines for multiple newlines + lines.append("") + continue + words = text_line.split() + current_line = [] + for word in words: + if current_line: + test_line = " ".join(current_line + [word]) + else: + test_line = word + try: + test_line_width = font.getbbox(test_line)[2] + except Exception: + test_line_width = font.getsize(test_line)[0] + if test_line_width <= width - 2 * text_x: + current_line.append(word) + else: + lines.append(" ".join(current_line)) + current_line = [word] + if current_line: + lines.append(" ".join(current_line)) + + # Draw each line of text separately + y_offset = text_y + for line in lines: + text_width = font.getlength(line) + text_height = font_size + text_center_x = text_x + text_width / 2 + text_center_y = y_offset + text_height / 2 + try: + draw.text((text_x, y_offset), line, font=font, fill=font_color, features=['-liga']) + except: + draw.text((text_x, y_offset), line, font=font, fill=font_color) + y_offset += text_height # Move to the next line + + if start_rotation != end_rotation: + image = image.rotate(rotation, center=(text_center_x, text_center_y)) + rotation += rotation_increment + + image = np.array(image).astype(np.float32) / 255.0 + image = torch.from_numpy(image)[None,] + mask = image[:, :, :, 0] + masks.append(mask) + out.append(image) + + if invert: + return (1.0 - torch.cat(out, dim=0), 1.0 - torch.cat(masks, dim=0),) + return (torch.cat(out, dim=0),torch.cat(masks, dim=0),) + +class ColorToMask: + + RETURN_TYPES = ("MASK",) + FUNCTION = "clip" + CATEGORY = "KJNodes/masking" + DESCRIPTION = """ +Converts chosen RGB value to a mask. +With batch inputs, the **per_batch** +controls the number of images processed at once. +""" + + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "images": ("IMAGE",), + "invert": ("BOOLEAN", {"default": False}), + "red": ("INT", {"default": 0,"min": 0, "max": 255, "step": 1}), + "green": ("INT", {"default": 0,"min": 0, "max": 255, "step": 1}), + "blue": ("INT", {"default": 0,"min": 0, "max": 255, "step": 1}), + "threshold": ("INT", {"default": 10,"min": 0, "max": 255, "step": 1}), + "per_batch": ("INT", {"default": 16, "min": 1, "max": 4096, "step": 1}), + }, + } + + def clip(self, images, red, green, blue, threshold, invert, per_batch): + + color = torch.tensor([red, green, blue], dtype=torch.uint8) + black = torch.tensor([0, 0, 0], dtype=torch.uint8) + white = torch.tensor([255, 255, 255], dtype=torch.uint8) + + if invert: + black, white = white, black + + steps = images.shape[0] + pbar = ProgressBar(steps) + tensors_out = [] + + for start_idx in range(0, images.shape[0], per_batch): + + # Calculate color distances + color_distances = torch.norm(images[start_idx:start_idx+per_batch] * 255 - color, dim=-1) + + # Create a mask based on the threshold + mask = color_distances <= threshold + + # Apply the mask to create new images + mask_out = torch.where(mask.unsqueeze(-1), white, black).float() + mask_out = mask_out.mean(dim=-1) + + tensors_out.append(mask_out.cpu()) + batch_count = mask_out.shape[0] + pbar.update(batch_count) + + tensors_out = torch.cat(tensors_out, dim=0) + tensors_out = torch.clamp(tensors_out, min=0.0, max=1.0) + return tensors_out, + +class CreateFluidMask: + + RETURN_TYPES = ("IMAGE", "MASK") + FUNCTION = "createfluidmask" + CATEGORY = "KJNodes/masking/generate" + + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "invert": ("BOOLEAN", {"default": False}), + "frames": ("INT", {"default": 1,"min": 1, "max": 4096, "step": 1}), + "width": ("INT", {"default": 256,"min": 16, "max": 4096, "step": 1}), + "height": ("INT", {"default": 256,"min": 16, "max": 4096, "step": 1}), + "inflow_count": ("INT", {"default": 3,"min": 0, "max": 255, "step": 1}), + "inflow_velocity": ("INT", {"default": 1,"min": 0, "max": 255, "step": 1}), + "inflow_radius": ("INT", {"default": 8,"min": 0, "max": 255, "step": 1}), + "inflow_padding": ("INT", {"default": 50,"min": 0, "max": 255, "step": 1}), + "inflow_duration": ("INT", {"default": 60,"min": 0, "max": 255, "step": 1}), + }, + } + #using code from https://github.com/GregTJ/stable-fluids + def createfluidmask(self, frames, width, height, invert, inflow_count, inflow_velocity, inflow_radius, inflow_padding, inflow_duration): + from ..utility.fluid import Fluid + try: + from scipy.special import erf + except: + from scipy.spatial import erf + out = [] + masks = [] + RESOLUTION = width, height + DURATION = frames + + INFLOW_PADDING = inflow_padding + INFLOW_DURATION = inflow_duration + INFLOW_RADIUS = inflow_radius + INFLOW_VELOCITY = inflow_velocity + INFLOW_COUNT = inflow_count + + logging.info('Generating fluid solver, this may take some time.') + fluid = Fluid(RESOLUTION, 'dye') + + center = np.floor_divide(RESOLUTION, 2) + r = np.min(center) - INFLOW_PADDING + + points = np.linspace(-np.pi, np.pi, INFLOW_COUNT, endpoint=False) + points = tuple(np.array((np.cos(p), np.sin(p))) for p in points) + normals = tuple(-p for p in points) + points = tuple(r * p + center for p in points) + + inflow_velocity = np.zeros_like(fluid.velocity) + inflow_dye = np.zeros(fluid.shape) + for p, n in zip(points, normals): + mask = np.linalg.norm(fluid.indices - p[:, None, None], axis=0) <= INFLOW_RADIUS + inflow_velocity[:, mask] += n[:, None] * INFLOW_VELOCITY + inflow_dye[mask] = 1 + + + for f in range(DURATION): + logging.info(f'Computing frame {f + 1} of {DURATION}.') + if f <= INFLOW_DURATION: + fluid.velocity += inflow_velocity + fluid.dye += inflow_dye + + curl = fluid.step()[1] + # Using the error function to make the contrast a bit higher. + # Any other sigmoid function e.g. smoothstep would work. + curl = (erf(curl * 2) + 1) / 4 + + color = np.dstack((curl, np.ones(fluid.shape), fluid.dye)) + color = (np.clip(color, 0, 1) * 255).astype('uint8') + image = np.array(color).astype(np.float32) / 255.0 + image = torch.from_numpy(image)[None,] + mask = image[:, :, :, 0] + masks.append(mask) + out.append(image) + + if invert: + return (1.0 - torch.cat(out, dim=0),1.0 - torch.cat(masks, dim=0),) + return (torch.cat(out, dim=0),torch.cat(masks, dim=0),) + +class CreateAudioMask: + + RETURN_TYPES = ("IMAGE",) + FUNCTION = "createaudiomask" + CATEGORY = "KJNodes/deprecated" + + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "invert": ("BOOLEAN", {"default": False}), + "frames": ("INT", {"default": 16,"min": 1, "max": 255, "step": 1}), + "scale": ("FLOAT", {"default": 0.5,"min": 0.0, "max": 2.0, "step": 0.01}), + "audio_path": ("STRING", {"default": "audio.wav"}), + "width": ("INT", {"default": 256,"min": 16, "max": 4096, "step": 1}), + "height": ("INT", {"default": 256,"min": 16, "max": 4096, "step": 1}), + }, + } + + def createaudiomask(self, frames, width, height, invert, audio_path, scale): + try: + import librosa + except ImportError: + raise Exception("Can not import librosa. Install it with 'pip install librosa'") + batch_size = frames + out = [] + masks = [] + if audio_path == "audio.wav": #I don't know why relative path won't work otherwise... + audio_path = os.path.join(script_directory, audio_path) + audio, sr = librosa.load(audio_path) + spectrogram = np.abs(librosa.stft(audio)) + + for i in range(batch_size): + image = Image.new("RGB", (width, height), "black") + draw = ImageDraw.Draw(image) + frame = spectrogram[:, i] + circle_radius = int(height * np.mean(frame)) + circle_radius *= scale + circle_center = (width // 2, height // 2) # Calculate the center of the image + + draw.ellipse([(circle_center[0] - circle_radius, circle_center[1] - circle_radius), + (circle_center[0] + circle_radius, circle_center[1] + circle_radius)], + fill='white') + + image = np.array(image).astype(np.float32) / 255.0 + image = torch.from_numpy(image)[None,] + mask = image[:, :, :, 0] + masks.append(mask) + out.append(image) + + if invert: + return (1.0 - torch.cat(out, dim=0),) + return (torch.cat(out, dim=0),torch.cat(masks, dim=0),) + +class CreateGradientMask: + + RETURN_TYPES = ("MASK",) + FUNCTION = "createmask" + CATEGORY = "KJNodes/masking/generate" + + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "invert": ("BOOLEAN", {"default": False}), + "frames": ("INT", {"default": 0,"min": 0, "max": 255, "step": 1}), + "width": ("INT", {"default": 256,"min": 16, "max": 4096, "step": 1}), + "height": ("INT", {"default": 256,"min": 16, "max": 4096, "step": 1}), + }, + } + def createmask(self, frames, width, height, invert): + # Define the number of images in the batch + batch_size = frames + out = [] + # Create an empty array to store the image batch + image_batch = np.zeros((batch_size, height, width), dtype=np.float32) + # Generate the black to white gradient for each image + for i in range(batch_size): + gradient = np.linspace(1.0, 0.0, width, dtype=np.float32) + time = i / frames # Calculate the time variable + offset_gradient = gradient - time # Offset the gradient values based on time + image_batch[i] = offset_gradient.reshape(1, -1) + output = torch.from_numpy(image_batch) + mask = output + out.append(mask) + if invert: + return (1.0 - torch.cat(out, dim=0),) + return (torch.cat(out, dim=0),) + +class CreateFadeMask: + + RETURN_TYPES = ("MASK",) + FUNCTION = "createfademask" + CATEGORY = "KJNodes/deprecated" + + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "invert": ("BOOLEAN", {"default": False}), + "frames": ("INT", {"default": 2,"min": 2, "max": 10000, "step": 1}), + "width": ("INT", {"default": 256,"min": 16, "max": 4096, "step": 1}), + "height": ("INT", {"default": 256,"min": 16, "max": 4096, "step": 1}), + "interpolation": (["linear", "ease_in", "ease_out", "ease_in_out"],), + "start_level": ("FLOAT", {"default": 1.0,"min": 0.0, "max": 1.0, "step": 0.01}), + "midpoint_level": ("FLOAT", {"default": 0.5,"min": 0.0, "max": 1.0, "step": 0.01}), + "end_level": ("FLOAT", {"default": 0.0,"min": 0.0, "max": 1.0, "step": 0.01}), + "midpoint_frame": ("INT", {"default": 0,"min": 0, "max": 4096, "step": 1}), + }, + } + + def createfademask(self, frames, width, height, invert, interpolation, start_level, midpoint_level, end_level, midpoint_frame): + def ease_in(t): + return t * t + + def ease_out(t): + return 1 - (1 - t) * (1 - t) + + def ease_in_out(t): + return 3 * t * t - 2 * t * t * t + + batch_size = frames + out = [] + image_batch = np.zeros((batch_size, height, width), dtype=np.float32) + + if midpoint_frame == 0: + midpoint_frame = batch_size // 2 + + for i in range(batch_size): + if i <= midpoint_frame: + t = i / midpoint_frame + if interpolation == "ease_in": + t = ease_in(t) + elif interpolation == "ease_out": + t = ease_out(t) + elif interpolation == "ease_in_out": + t = ease_in_out(t) + color = start_level - t * (start_level - midpoint_level) + else: + t = (i - midpoint_frame) / (batch_size - midpoint_frame) + if interpolation == "ease_in": + t = ease_in(t) + elif interpolation == "ease_out": + t = ease_out(t) + elif interpolation == "ease_in_out": + t = ease_in_out(t) + color = midpoint_level - t * (midpoint_level - end_level) + + color = np.clip(color, 0, 255) + image = np.full((height, width), color, dtype=np.float32) + image_batch[i] = image + + output = torch.from_numpy(image_batch) + mask = output + out.append(mask) + + if invert: + return (1.0 - torch.cat(out, dim=0),) + return (torch.cat(out, dim=0),) + +class CreateFadeMaskAdvanced: + + RETURN_TYPES = ("MASK",) + FUNCTION = "createfademask" + CATEGORY = "KJNodes/masking/generate" + DESCRIPTION = """ +Create a batch of masks interpolated between given frames and values. +Uses same syntax as Fizz' BatchValueSchedule. +First value is the frame index (not that this starts from 0, not 1) +and the second value inside the brackets is the float value of the mask in range 0.0 - 1.0 + +For example the default values: +0:(0.0) +7:(1.0) +15:(0.0) + +Would create a mask batch fo 16 frames, starting from black, +interpolating with the chosen curve to fully white at the 8th frame, +and interpolating from that to fully black at the 16th frame. +""" + + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "points_string": ("STRING", {"default": "0:(0.0),\n7:(1.0),\n15:(0.0)\n", "multiline": True}), + "invert": ("BOOLEAN", {"default": False}), + "frames": ("INT", {"default": 16,"min": 2, "max": 10000, "step": 1}), + "width": ("INT", {"default": 512,"min": 1, "max": 4096, "step": 1}), + "height": ("INT", {"default": 512,"min": 1, "max": 4096, "step": 1}), + "interpolation": (["linear", "ease_in", "ease_out", "ease_in_out", "none", "default_to_black"],), + }, + } + + def createfademask(self, frames, width, height, invert, points_string, interpolation): + def ease_in(t): + return t * t + + def ease_out(t): + return 1 - (1 - t) * (1 - t) + + def ease_in_out(t): + return 3 * t * t - 2 * t * t * t + + # Parse the input string into a list of tuples + points = [] + points_string = points_string.rstrip(',\n') + for point_str in points_string.split(','): + frame_str, color_str = point_str.split(':') + frame = int(frame_str.strip()) + color = float(color_str.strip()[1:-1]) # Remove parentheses around color + points.append((frame, color)) + + # Check if the last frame is already in the points + if (interpolation != "default_to_black") and (len(points) == 0 or points[-1][0] != frames - 1): + # If not, add it with the color of the last specified frame + points.append((frames - 1, points[-1][1] if points else 0)) + + # Sort the points by frame number + points.sort(key=lambda x: x[0]) + + batch_size = frames + out = [] + image_batch = np.zeros((batch_size, height, width), dtype=np.float32) + + # Index of the next point to interpolate towards + next_point = 1 + + for i in range(batch_size): + while next_point < len(points) and i > points[next_point][0]: + next_point += 1 + + # Interpolate between the previous point and the next point + prev_point = next_point - 1 + + if interpolation == "none": + exact_match = False + for p in points: + if p[0] == i: # Exact frame match + color = p[1] + exact_match = True + break + if not exact_match: + color = points[prev_point][1] + + elif interpolation == "default_to_black": + exact_match = False + for p in points: + if p[0] == i: # Exact frame match + color = p[1] + exact_match = True + break + if not exact_match: + color = 0 + else: + t = (i - points[prev_point][0]) / (points[next_point][0] - points[prev_point][0]) + if interpolation == "ease_in": + t = ease_in(t) + elif interpolation == "ease_out": + t = ease_out(t) + elif interpolation == "ease_in_out": + t = ease_in_out(t) + elif interpolation == "linear": + pass # No need to modify `t` for linear interpolation + + color = points[prev_point][1] - t * (points[prev_point][1] - points[next_point][1]) + + color = np.clip(color, 0, 255) + image = np.full((height, width), color, dtype=np.float32) + image_batch[i] = image + + output = torch.from_numpy(image_batch) + mask = output + out.append(mask) + + if invert: + return (1.0 - torch.cat(out, dim=0),) + return (torch.cat(out, dim=0),) + +class CreateMagicMask: + + RETURN_TYPES = ("MASK", "MASK",) + RETURN_NAMES = ("mask", "mask_inverted",) + FUNCTION = "createmagicmask" + CATEGORY = "KJNodes/masking/generate" + + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "frames": ("INT", {"default": 16,"min": 2, "max": 4096, "step": 1}), + "depth": ("INT", {"default": 12,"min": 1, "max": 500, "step": 1}), + "distortion": ("FLOAT", {"default": 1.5,"min": 0.0, "max": 100.0, "step": 0.01}), + "seed": ("INT", {"default": 123,"min": 0, "max": 99999999, "step": 1}), + "transitions": ("INT", {"default": 1,"min": 1, "max": 20, "step": 1}), + "frame_width": ("INT", {"default": 512,"min": 16, "max": 4096, "step": 1}), + "frame_height": ("INT", {"default": 512,"min": 16, "max": 4096, "step": 1}), + }, + } + + def createmagicmask(self, frames, transitions, depth, distortion, seed, frame_width, frame_height): + from ..utility.magictex import coordinate_grid, random_transform, magic + import matplotlib.pyplot as plt + rng = np.random.default_rng(seed) + out = [] + coords = coordinate_grid((frame_width, frame_height)) + + # Calculate the number of frames for each transition + frames_per_transition = frames // transitions + + # Generate a base set of parameters + base_params = { + "coords": random_transform(coords, rng), + "depth": depth, + "distortion": distortion, + } + for t in range(transitions): + # Generate a second set of parameters that is at most max_diff away from the base parameters + params1 = base_params.copy() + params2 = base_params.copy() + + params1['coords'] = random_transform(coords, rng) + params2['coords'] = random_transform(coords, rng) + + for i in range(frames_per_transition): + # Compute the interpolation factor + alpha = i / frames_per_transition + + # Interpolate between the two sets of parameters + params = params1.copy() + params['coords'] = (1 - alpha) * params1['coords'] + alpha * params2['coords'] + + tex = magic(**params) + + dpi = frame_width / 10 + fig = plt.figure(figsize=(10, 10), dpi=dpi) + + ax = fig.add_subplot(111) + plt.subplots_adjust(left=0, right=1, bottom=0, top=1) + + ax.get_yaxis().set_ticks([]) + ax.get_xaxis().set_ticks([]) + ax.imshow(tex, aspect='auto') + + fig.canvas.draw() + img = np.array(fig.canvas.renderer._renderer) + + plt.close(fig) + + pil_img = Image.fromarray(img).convert("L") + mask = torch.tensor(np.array(pil_img)) / 255.0 + + out.append(mask) + + return (torch.stack(out, dim=0), 1.0 - torch.stack(out, dim=0),) + +class CreateShapeMask: + + RETURN_TYPES = ("MASK", "MASK",) + RETURN_NAMES = ("mask", "mask_inverted",) + FUNCTION = "createshapemask" + CATEGORY = "KJNodes/masking/generate" + DESCRIPTION = """ +Creates a mask or batch of masks with the specified shape. +Locations are center locations. +Grow value is the amount to grow the shape on each frame, creating animated masks. +""" + + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "shape": ( + [ 'circle', + 'square', + 'triangle', + ], + { + "default": 'circle' + }), + "frames": ("INT", {"default": 1,"min": 1, "max": 4096, "step": 1}), + "location_x": ("INT", {"default": 256,"min": 0, "max": 4096, "step": 1}), + "location_y": ("INT", {"default": 256,"min": 0, "max": 4096, "step": 1}), + "grow": ("INT", {"default": 0, "min": -512, "max": 512, "step": 1}), + "frame_width": ("INT", {"default": 512,"min": 16, "max": 4096, "step": 1}), + "frame_height": ("INT", {"default": 512,"min": 16, "max": 4096, "step": 1}), + "shape_width": ("INT", {"default": 128,"min": 8, "max": 4096, "step": 1}), + "shape_height": ("INT", {"default": 128,"min": 8, "max": 4096, "step": 1}), + }, + } + + def createshapemask(self, frames, frame_width, frame_height, location_x, location_y, shape_width, shape_height, grow, shape): + # Define the number of images in the batch + batch_size = frames + out = [] + color = "white" + for i in range(batch_size): + image = Image.new("RGB", (frame_width, frame_height), "black") + draw = ImageDraw.Draw(image) + + # Calculate the size for this frame and ensure it's not less than 0 + current_width = max(0, shape_width + i*grow) + current_height = max(0, shape_height + i*grow) + + if shape == 'circle' or shape == 'square': + # Define the bounding box for the shape + left_up_point = (location_x - current_width // 2, location_y - current_height // 2) + right_down_point = (location_x + current_width // 2, location_y + current_height // 2) + two_points = [left_up_point, right_down_point] + + if shape == 'circle': + draw.ellipse(two_points, fill=color) + elif shape == 'square': + draw.rectangle(two_points, fill=color) + + elif shape == 'triangle': + # Define the points for the triangle + left_up_point = (location_x - current_width // 2, location_y + current_height // 2) # bottom left + right_down_point = (location_x + current_width // 2, location_y + current_height // 2) # bottom right + top_point = (location_x, location_y - current_height // 2) # top point + draw.polygon([top_point, left_up_point, right_down_point], fill=color) + + image = pil2tensor(image) + mask = image[:, :, :, 0] + out.append(mask) + outstack = torch.cat(out, dim=0) + return (outstack, 1.0 - outstack,) + +class CreateVoronoiMask: + + RETURN_TYPES = ("MASK", "MASK",) + RETURN_NAMES = ("mask", "mask_inverted",) + FUNCTION = "createvoronoi" + CATEGORY = "KJNodes/masking/generate" + + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "frames": ("INT", {"default": 16,"min": 2, "max": 4096, "step": 1}), + "num_points": ("INT", {"default": 15,"min": 1, "max": 4096, "step": 1}), + "line_width": ("INT", {"default": 4,"min": 1, "max": 4096, "step": 1}), + "speed": ("FLOAT", {"default": 0.5,"min": 0.0, "max": 1.0, "step": 0.01}), + "frame_width": ("INT", {"default": 512,"min": 16, "max": 4096, "step": 1}), + "frame_height": ("INT", {"default": 512,"min": 16, "max": 4096, "step": 1}), + }, + } + + def createvoronoi(self, frames, num_points, line_width, speed, frame_width, frame_height): + from scipy.spatial import Voronoi + from matplotlib import pyplot as plt + # Define the number of images in the batch + batch_size = frames + out = [] + + # Calculate aspect ratio + aspect_ratio = frame_width / frame_height + + # Create start and end points for each point, considering the aspect ratio + start_points = np.random.rand(num_points, 2) + start_points[:, 0] *= aspect_ratio + + end_points = np.random.rand(num_points, 2) + end_points[:, 0] *= aspect_ratio + + for i in range(batch_size): + # Interpolate the points' positions based on the current frame + t = (i * speed) / (batch_size - 1) # normalize to [0, 1] over the frames + t = np.clip(t, 0, 1) # ensure t is in [0, 1] + points = (1 - t) * start_points + t * end_points # lerp + + # Adjust points for aspect ratio + points[:, 0] *= aspect_ratio + + vor = Voronoi(points) + + # Create a blank image with a white background + fig, ax = plt.subplots() + plt.subplots_adjust(left=0, right=1, bottom=0, top=1) + ax.set_xlim([0, aspect_ratio]); ax.set_ylim([0, 1]) # adjust x limits + ax.axis('off') + ax.margins(0, 0) + fig.set_size_inches(aspect_ratio * frame_height/100, frame_height/100) # adjust figure size + ax.fill_between([0, 1], [0, 1], color='white') + + # Plot each Voronoi ridge + for simplex in vor.ridge_vertices: + simplex = np.asarray(simplex) + if np.all(simplex >= 0): + plt.plot(vor.vertices[simplex, 0], vor.vertices[simplex, 1], 'k-', linewidth=line_width) + + fig.canvas.draw() + img = np.array(fig.canvas.renderer._renderer) + + plt.close(fig) + + pil_img = Image.fromarray(img).convert("L") + mask = torch.tensor(np.array(pil_img)) / 255.0 + + out.append(mask) + + return (torch.stack(out, dim=0), 1.0 - torch.stack(out, dim=0),) + +class GetMaskSizeAndCount: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "mask": ("MASK",), + }} + + RETURN_TYPES = ("MASK","INT", "INT", "INT",) + RETURN_NAMES = ("mask", "width", "height", "count",) + FUNCTION = "getsize" + CATEGORY = "KJNodes/masking" + DESCRIPTION = """ +Returns the width, height and batch size of the mask, +and passes it through unchanged. + +""" + + def getsize(self, mask): + width = mask.shape[2] + height = mask.shape[1] + count = mask.shape[0] + return {"ui": { + "text": [f"{count}x{width}x{height}"]}, + "result": (mask, width, height, count) + } + +class GrowMaskWithBlur: + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + "mask": ("MASK",), + "expand": ("INT", {"default": 0, "min": -MAX_RESOLUTION, "max": MAX_RESOLUTION, "step": 1}), + "incremental_expandrate": ("FLOAT", {"default": 0.0, "min": 0.0, "max": 100.0, "step": 0.1}), + "tapered_corners": ("BOOLEAN", {"default": True}), + "flip_input": ("BOOLEAN", {"default": False}), + "blur_radius": ("FLOAT", { + "default": 0.0, + "min": 0.0, + "max": 100, + "step": 0.1 + }), + "lerp_alpha": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}), + "decay_factor": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}), + }, + "optional": { + "fill_holes": ("BOOLEAN", {"default": False}), + }, + } + + CATEGORY = "KJNodes/masking" + RETURN_TYPES = ("MASK", "MASK",) + RETURN_NAMES = ("mask", "mask_inverted",) + FUNCTION = "expand_mask" + DESCRIPTION = """ +# GrowMaskWithBlur +- mask: Input mask or mask batch +- expand: Expand or contract mask or mask batch by a given amount +- incremental_expandrate: increase expand rate by a given amount per frame +- tapered_corners: use tapered corners +- flip_input: flip input mask +- blur_radius: value higher than 0 will blur the mask +- lerp_alpha: alpha value for interpolation between frames +- decay_factor: decay value for interpolation between frames +- fill_holes: fill holes in the mask (slow)""" + + def expand_mask(self, mask, expand, tapered_corners, flip_input, blur_radius, incremental_expandrate, lerp_alpha, decay_factor, fill_holes=False): + import kornia.morphology as morph + alpha = lerp_alpha + decay = decay_factor + if flip_input: + mask = 1.0 - mask + + growmask = mask.reshape((-1, mask.shape[-2], mask.shape[-1])) + out = [] + previous_output = None + current_expand = expand + for m in tqdm(growmask, desc="Expanding/Contracting Mask"): + output = m.unsqueeze(0).unsqueeze(0).to(main_device) # Add batch and channel dims for kornia + if abs(round(current_expand)) > 0 and output.max() > 0: + # Create kernel - kornia expects kernel on same device as input + if tapered_corners: + kernel = torch.tensor([[0, 1, 0], + [1, 1, 1], + [0, 1, 0]], dtype=torch.float32, device=output.device) + else: + kernel = torch.tensor([[1, 1, 1], + [1, 1, 1], + [1, 1, 1]], dtype=torch.float32, device=output.device) + + for _ in range(abs(round(current_expand))): + if current_expand < 0: + output = morph.erosion(output, kernel) + else: + output = morph.dilation(output, kernel) + + output = output.squeeze(0).squeeze(0) # Remove batch and channel dims + + if current_expand < 0: + current_expand -= abs(incremental_expandrate) + else: + current_expand += abs(incremental_expandrate) + + if fill_holes: + binary_mask = output > 0 + output_np = binary_mask.cpu().numpy() + filled = scipy.ndimage.binary_fill_holes(output_np) + output = torch.from_numpy(filled.astype(np.float32)).to(output.device) + + if alpha < 1.0 and previous_output is not None: + output = alpha * output + (1 - alpha) * previous_output + if decay < 1.0 and previous_output is not None: + output += decay * previous_output + output = output / output.max() + previous_output = output + out.append(output.cpu()) + + if blur_radius != 0: + # Convert the tensor list to PIL images, apply blur, and convert back + for idx, tensor in enumerate(out): + # Convert tensor to PIL image + pil_image = tensor2pil(tensor.cpu().detach())[0] + # Apply Gaussian blur + pil_image = pil_image.filter(ImageFilter.GaussianBlur(blur_radius)) + # Convert back to tensor + out[idx] = pil2tensor(pil_image) + blurred = torch.cat(out, dim=0) + return (blurred, 1.0 - blurred) + else: + return (torch.stack(out, dim=0), 1.0 - torch.stack(out, dim=0),) + +class MaskBatchMulti: + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "inputcount": ("INT", {"default": 2, "min": 2, "max": 1000, "step": 1}), + "mask_1": ("MASK", ), + "mask_2": ("MASK", ), + }, + } + + RETURN_TYPES = ("MASK",) + RETURN_NAMES = ("masks",) + FUNCTION = "combine" + CATEGORY = "KJNodes/masking" + DESCRIPTION = """ +Creates an image batch from multiple masks. +You can set how many inputs the node has, +with the **inputcount** and clicking update. +""" + + def combine(self, inputcount, **kwargs): + mask = kwargs["mask_1"] + for c in range(1, inputcount): + new_mask = kwargs[f"mask_{c + 1}"] + if mask.shape[1:] != new_mask.shape[1:]: + new_mask = F.interpolate(new_mask.unsqueeze(1), size=(mask.shape[1], mask.shape[2]), mode="bicubic").squeeze(1) + mask = torch.cat((mask, new_mask), dim=0) + return (mask,) + +class OffsetMask: + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "mask": ("MASK",), + "x": ("INT", { "default": 0, "min": -4096, "max": MAX_RESOLUTION, "step": 1, "display": "number" }), + "y": ("INT", { "default": 0, "min": -4096, "max": MAX_RESOLUTION, "step": 1, "display": "number" }), + "angle": ("INT", { "default": 0, "min": -360, "max": 360, "step": 1, "display": "number" }), + "duplication_factor": ("INT", { "default": 1, "min": 1, "max": 1000, "step": 1, "display": "number" }), + "roll": ("BOOLEAN", { "default": False }), + "incremental": ("BOOLEAN", { "default": False }), + "padding_mode": ( + [ + 'empty', + 'border', + 'reflection', + + ], { + "default": 'empty' + }), + } + } + + RETURN_TYPES = ("MASK",) + RETURN_NAMES = ("mask",) + FUNCTION = "offset" + CATEGORY = "KJNodes/masking" + DESCRIPTION = """ +Offsets the mask by the specified amount. + - mask: Input mask or mask batch + - x: Horizontal offset + - y: Vertical offset + - angle: Angle in degrees + - roll: roll edge wrapping + - duplication_factor: Number of times to duplicate the mask to form a batch + - border padding_mode: Padding mode for the mask +""" + + def offset(self, mask, x, y, angle, roll=False, incremental=False, duplication_factor=1, padding_mode="empty"): + # Create duplicates of the mask batch + mask = mask.repeat(duplication_factor, 1, 1).clone() + + batch_size, height, width = mask.shape + + if angle != 0 and incremental: + for i in range(batch_size): + rotation_angle = angle * (i+1) + mask[i] = TF.rotate(mask[i].unsqueeze(0), rotation_angle).squeeze(0) + elif angle > 0: + for i in range(batch_size): + mask[i] = TF.rotate(mask[i].unsqueeze(0), angle).squeeze(0) + + if roll: + if incremental: + for i in range(batch_size): + shift_x = min(x*(i+1), width-1) + shift_y = min(y*(i+1), height-1) + if shift_x != 0: + mask[i] = torch.roll(mask[i], shifts=shift_x, dims=1) + if shift_y != 0: + mask[i] = torch.roll(mask[i], shifts=shift_y, dims=0) + else: + shift_x = min(x, width-1) + shift_y = min(y, height-1) + if shift_x != 0: + mask = torch.roll(mask, shifts=shift_x, dims=2) + if shift_y != 0: + mask = torch.roll(mask, shifts=shift_y, dims=1) + else: + + for i in range(batch_size): + if incremental: + temp_x = min(x * (i+1), width-1) + temp_y = min(y * (i+1), height-1) + else: + temp_x = min(x, width-1) + temp_y = min(y, height-1) + if temp_x > 0: + if padding_mode == 'empty': + mask[i] = torch.cat([torch.zeros((height, temp_x)), mask[i, :, :-temp_x]], dim=1) + elif padding_mode in ['replicate', 'reflect']: + mask[i] = F.pad(mask[i, :, :-temp_x], (0, temp_x), mode=padding_mode) + elif temp_x < 0: + if padding_mode == 'empty': + mask[i] = torch.cat([mask[i, :, :temp_x], torch.zeros((height, -temp_x))], dim=1) + elif padding_mode in ['replicate', 'reflect']: + mask[i] = F.pad(mask[i, :, -temp_x:], (temp_x, 0), mode=padding_mode) + + if temp_y > 0: + if padding_mode == 'empty': + mask[i] = torch.cat([torch.zeros((temp_y, width)), mask[i, :-temp_y, :]], dim=0) + elif padding_mode in ['replicate', 'reflect']: + mask[i] = F.pad(mask[i, :-temp_y, :], (0, temp_y), mode=padding_mode) + elif temp_y < 0: + if padding_mode == 'empty': + mask[i] = torch.cat([mask[i, :temp_y, :], torch.zeros((-temp_y, width))], dim=0) + elif padding_mode in ['replicate', 'reflect']: + mask[i] = F.pad(mask[i, -temp_y:, :], (temp_y, 0), mode=padding_mode) + + return mask, + +class RoundMask: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "mask": ("MASK",), + }} + + RETURN_TYPES = ("MASK",) + FUNCTION = "round" + CATEGORY = "KJNodes/masking" + DESCRIPTION = """ +Rounds the mask or batch of masks to a binary mask. +RoundMask example + +""" + + def round(self, mask): + mask = mask.round() + return (mask,) + +class ResizeMask: + upscale_methods = ["nearest-exact", "bilinear", "area", "bicubic", "lanczos"] + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "mask": ("MASK",), + "width": ("INT", { "default": 512, "min": 0, "max": MAX_RESOLUTION, "step": 1, "display": "number" }), + "height": ("INT", { "default": 512, "min": 0, "max": MAX_RESOLUTION, "step": 1, "display": "number" }), + "keep_proportions": ("BOOLEAN", { "default": False }), + "upscale_method": (s.upscale_methods,), + "crop": (["disabled","center"],), + } + } + + RETURN_TYPES = ("MASK", "INT", "INT",) + RETURN_NAMES = ("mask", "width", "height",) + FUNCTION = "resize" + CATEGORY = "KJNodes/masking" + DESCRIPTION = """ +Resizes the mask or batch of masks to the specified width and height. +""" + + def resize(self, mask, width, height, keep_proportions, upscale_method,crop): + if keep_proportions: + _, oh, ow = mask.shape + width = ow if width == 0 else width + height = oh if height == 0 else height + ratio = min(width / ow, height / oh) + width = round(ow*ratio) + height = round(oh*ratio) + + if upscale_method == "lanczos": + out_mask = common_upscale(mask.unsqueeze(1).repeat(1, 3, 1, 1), width, height, upscale_method, crop=crop).movedim(1,-1)[:, :, :, 0] + else: + out_mask = common_upscale(mask.unsqueeze(1), width, height, upscale_method, crop=crop).squeeze(1) + + return(out_mask, out_mask.shape[2], out_mask.shape[1],) + +class RemapMaskRange: + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "mask": ("MASK",), + "min": ("FLOAT", {"default": 0.0,"min": -10.0, "max": 1.0, "step": 0.01}), + "max": ("FLOAT", {"default": 1.0,"min": 0.0, "max": 10.0, "step": 0.01}), + } + } + + RETURN_TYPES = ("MASK",) + RETURN_NAMES = ("mask",) + FUNCTION = "remap" + CATEGORY = "KJNodes/masking" + DESCRIPTION = """ +Sets new min and max values for the mask. +""" + + def remap(self, mask, min, max): + + # Find the maximum value in the mask + mask_max = torch.max(mask) + + # If the maximum mask value is zero, avoid division by zero by setting it to 1 + mask_max = mask_max if mask_max > 0 else 1 + + # Scale the mask values to the new range defined by min and max + # The highest pixel value in the mask will be scaled to max + scaled_mask = (mask / mask_max) * (max - min) + min + + # Clamp the values to ensure they are within [0.0, 1.0] + scaled_mask = torch.clamp(scaled_mask, min=0.0, max=1.0) + + return (scaled_mask, ) + + +def get_mask_polygon(self, mask_np): + import cv2 + """Helper function to get polygon points from mask""" + # Find contours + contours, _ = cv2.findContours(mask_np, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) + + if not contours: + return None + + # Get the largest contour + largest_contour = max(contours, key=cv2.contourArea) + + # Approximate polygon + epsilon = 0.02 * cv2.arcLength(largest_contour, True) + polygon = cv2.approxPolyDP(largest_contour, epsilon, True) + + return polygon.squeeze() + +class SeparateMasks: + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + "mask": ("MASK", ), + "size_threshold_width" : ("INT", {"default": 256, "min": 0.0, "max": 4096, "step": 1}), + "size_threshold_height" : ("INT", {"default": 256, "min": 0.0, "max": 4096, "step": 1}), + "mode": (["convex_polygons", "area", "box"],), + "max_poly_points": ("INT", {"default": 8, "min": 3, "max": 32, "step": 1}), + + }, + } + + RETURN_TYPES = ("MASK",) + RETURN_NAMES = ("mask",) + FUNCTION = "separate" + CATEGORY = "KJNodes/masking" + OUTPUT_NODE = True + DESCRIPTION = "Separates a mask into multiple masks based on the size of the connected components." + + def polygon_to_mask(self, polygon, shape): + import cv2 + mask = np.zeros((shape[0], shape[1]), dtype=np.uint8) # Fixed shape handling + + if len(polygon.shape) == 2: # Check if polygon points are valid + polygon = polygon.astype(np.int32) + cv2.fillPoly(mask, [polygon], 1) + return mask + + def get_mask_polygon(self, mask_np, max_points): + import cv2 + contours, _ = cv2.findContours(mask_np, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) + if not contours: + return None + + largest_contour = max(contours, key=cv2.contourArea) + hull = cv2.convexHull(largest_contour) + + # Initialize with smaller epsilon for more points + perimeter = cv2.arcLength(hull, True) + + min_eps = perimeter * 0.001 # Much smaller minimum + max_eps = perimeter * 0.2 # Smaller maximum + + best_approx = None + best_diff = float('inf') + max_iterations = 20 + + #print(f"Target points: {max_points}, Perimeter: {perimeter}") + + for i in range(max_iterations): + curr_eps = (min_eps + max_eps) / 2 + approx = cv2.approxPolyDP(hull, curr_eps, True) + points_diff = len(approx) - max_points + + #print(f"Iteration {i}: points={len(approx)}, eps={curr_eps:.4f}") + + if abs(points_diff) < best_diff: + best_approx = approx + best_diff = abs(points_diff) + + if len(approx) > max_points: + min_eps = curr_eps * 1.1 # More gradual adjustment + elif len(approx) < max_points: + max_eps = curr_eps * 0.9 # More gradual adjustment + else: + return approx.squeeze() + + if abs(max_eps - min_eps) < perimeter * 0.0001: # Relative tolerance + break + + # If we didn't find exact match, return best approximation + return best_approx.squeeze() if best_approx is not None else hull.squeeze() + + def separate(self, mask: torch.Tensor, size_threshold_width: int, size_threshold_height: int, max_poly_points: int, mode: str): + B, H, W = mask.shape + separated = [] + + mask = mask.round() + + for b in range(B): + mask_np = mask[b].cpu().numpy().astype(np.uint8) + structure = np.ones((3, 3), dtype=np.int8) + labeled, ncomponents = scipy.ndimage.label(mask_np, structure=structure) + pbar = ProgressBar(ncomponents) + + for component in range(1, ncomponents + 1): + component_mask_np = (labeled == component).astype(np.uint8) + + rows = np.any(component_mask_np, axis=1) + cols = np.any(component_mask_np, axis=0) + y_min, y_max = np.where(rows)[0][[0, -1]] + x_min, x_max = np.where(cols)[0][[0, -1]] + + width = x_max - x_min + 1 + height = y_max - y_min + 1 + centroid_x = (x_min + x_max) / 2 # Calculate x centroid + logging.info(f"Component {component}: width={width}, height={height}, x_pos={centroid_x}") + + if width >= size_threshold_width and height >= size_threshold_height: + if mode == "convex_polygons": + polygon = self.get_mask_polygon(component_mask_np, max_poly_points) + if polygon is not None: + poly_mask = self.polygon_to_mask(polygon, (H, W)) + poly_mask = torch.tensor(poly_mask, device=mask.device) + separated.append((centroid_x, poly_mask)) + elif mode == "box": + # Create bounding box mask + box_mask = np.zeros((H, W), dtype=np.uint8) + box_mask[y_min:y_max+1, x_min:x_max+1] = 1 + box_mask = torch.tensor(box_mask, device=mask.device) + separated.append((centroid_x, box_mask)) + else: + area_mask = torch.tensor(component_mask_np, device=mask.device) + separated.append((centroid_x, area_mask)) + pbar.update(1) + + if len(separated) > 0: + # Sort by x position and extract only the masks + separated.sort(key=lambda x: x[0]) + separated = [x[1] for x in separated] + out_masks = torch.stack(separated, dim=0) + return out_masks, + else: + return torch.empty((1, 64, 64), device=mask.device), + + +class ConsolidateMasksKJ: + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "masks": ("MASK",), + "width": ("INT", {"default": 512, "min": 0, "max": 4096, "step": 64}), + "height": ("INT", {"default": 512, "min": 0, "max": 4096, "step": 64}), + "padding": ("INT", {"default": 0, "min": 0, "max": 4096, "step": 1}), + }, + } + + RETURN_TYPES = ("MASK",) + FUNCTION = "consolidate" + + CATEGORY = "KJNodes/masking" + DESCRIPTION = "Consolidates a batch of separate masks by finding the largest group of masks that fit inside a tile of the given width and height (including the padding), and repeating until no more masks can be combined." + + def consolidate(self, masks, width=512, height=512, padding=0): + B, H, W = masks.shape + + def mask_fits(coords, candidate_coords): + x_min, y_min, x_max, y_max = coords + cx_min, cy_min, cx_max, cy_max = candidate_coords + nx_min, ny_min = min(x_min, cx_min), min(y_min, cy_min) + nx_max, ny_max = max(x_max, cx_max), max(y_max, cy_max) + if nx_min + width < nx_max + padding or ny_min + height < ny_max + padding: + return False, coords + return True, (nx_min, ny_min, nx_max, ny_max) + + separated = [] + final_masks = [] + for b in range(B): + m = masks[b] + rows, cols = m.any(dim=1), m.any(dim=0) + y_min, y_max = torch.where(rows)[0][[0, -1]] + x_min, x_max = torch.where(cols)[0][[0, -1]] + w = x_max - x_min + 1 + h = y_max - y_min + 1 + separated.append(((x_min.item(), y_min.item(), x_max.item(), y_max.item()), m)) + + separated.sort(key=lambda x: x[0]) + fits = [] + for i, masks in enumerate(separated): + coord = masks[0] + fits_in_box = [] + for j, cand_mask in enumerate(separated): + if i == j: + continue + r, coord = mask_fits(coord, cand_mask[0]) + if r: + fits_in_box.append(j) + fits.append((i, fits_in_box)) + fits.sort(key=lambda x: -len(x[1])) + seen = [] + unique_fits = [] + for idx, fs in fits: + uniq = [i for i in fs if i not in seen] + unique_fits.append((idx, fs, uniq)) + seen.extend(uniq) + unique_fits.sort(key=lambda x: (-len(x[1]), -len(x[2]))) + merged = [] + for mask_idx, fitting_masks, _ in unique_fits: + if mask_idx in merged: + continue + fitting_masks = [i for i in fitting_masks if i not in merged] + combined_mask = separated[mask_idx][1].clone() + for i in fitting_masks: + combined_mask += separated[i][1] + merged.append(i) + merged.append(mask_idx) + final_masks.append(combined_mask) + + logging.info(f"Consolidated {B} masks into {len(final_masks)}") + return (torch.stack(final_masks, dim=0),) + + +class DrawMaskOnImage: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "image": ("IMAGE", ), + "mask": ("MASK", ), + "color": ("STRING", {"default": "0, 0, 0", "tooltip": "Color as RGB/RGBA values in range 0-255 or 0.0-1.0, separated by commas. Ex: 255, 0, 0, 128"}), + }, + "optional": { + "device": (["cpu", "gpu"], {"default": "cpu", "tooltip": "Device to use for processing"}), + } + } + + RETURN_TYPES = ("IMAGE", ) + RETURN_NAMES = ("images",) + FUNCTION = "apply" + CATEGORY = "KJNodes/masking" + DESCRIPTION = "Applies the provided masks to the input images with Alpha Blending support." + + def apply(self, image, mask, color, device="cpu"): + B, H, W, C = image.shape + BM, HM, WM = mask.shape + + processing_device = main_device if device == "gpu" else torch.device("cpu") + + in_masks = mask.clone().to(processing_device) + in_images = image.clone().to(processing_device) + + # Resize mask if dimensions don't match + if HM != H or WM != W: + in_masks = F.interpolate(mask.unsqueeze(1), size=(H, W), mode='nearest-exact').squeeze(1) + # Handle batch size mismatch + if B > BM: + in_masks = in_masks.repeat((B + BM - 1) // BM, 1, 1)[:B] + elif BM > B: + in_masks = in_masks[:B] + + output_images = [] + + # Parse Color String (Handle RGB, RGBA, and Hex formats) + color = color.strip() + color_values = [] + + if color.startswith('#'): + # Handle hex format (#RGB, #RGBA, #RRGGBB, #RRGGBBAA) + hex_color = color.lstrip('#') + if len(hex_color) == 3: # #RGB + color_values = [int(c*2, 16) / 255.0 for c in hex_color] + elif len(hex_color) == 4: # #RGBA + color_values = [int(c*2, 16) / 255.0 for c in hex_color] + elif len(hex_color) == 6: # #RRGGBB + color_values = [int(hex_color[i:i+2], 16) / 255.0 for i in (0, 2, 4)] + elif len(hex_color) == 8: # #RRGGBBAA + color_values = [int(hex_color[i:i+2], 16) / 255.0 for i in (0, 2, 4, 6)] + else: + raise ValueError(f"Invalid hex color format: {color}") + else: + # Handle comma-separated RGB/RGBA format + for x in color.split(","): + val = float(x.strip()) + color_values.append(val / 255.0 if val > 1.0 else val) + + rgb = color_values[:3] + alpha_val = color_values[3] if len(color_values) == 4 else 1.0 + + fill_color = torch.tensor(rgb, dtype=torch.float32, device=processing_device) + + for i in tqdm(range(B), desc="DrawMaskOnImage batch"): + curr_mask = in_masks[i] # [H, W] + img_idx = min(i, B - 1) + curr_image = in_images[img_idx] # [H, W, C] + + blend_factor = curr_mask.unsqueeze(-1) * alpha_val + img_channels = curr_image.shape[-1] + + if img_channels == 4: + img_rgb = curr_image[..., :3] + img_a = curr_image[..., 3:] + out_rgb = img_rgb * (1 - blend_factor) + fill_color * blend_factor + out_a = torch.maximum(img_a, blend_factor) + masked_image = torch.cat((out_rgb, out_a), dim=-1) + else: + masked_image = curr_image * (1 - blend_factor) + fill_color * blend_factor + output_images.append(masked_image) + + if not output_images: + return (torch.zeros((0, H, W, C), dtype=image.dtype),) + + out_tensor = torch.stack(output_images, dim=0).cpu() + + return (out_tensor, ) + +class BlockifyMask: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "masks": ("MASK",), + "block_size": ("INT", {"default": 32, "min": 8, "max": 512, "step": 1, "tooltip": "Size of blocks in pixels (smaller = smaller blocks)"}), + }, + "optional": { + "device": (["cpu", "gpu"], {"default": "cpu", "tooltip": "Device to use for processing"}), + } + } + + RETURN_TYPES = ("MASK", ) + RETURN_NAMES = ("mask",) + FUNCTION = "process" + CATEGORY = "KJNodes/masking" + DESCRIPTION = "Creates a block mask by dividing the bounding box of each mask into blocks of the specified size and filling in blocks that contain any part of the original mask." + + def process(self, masks, block_size, device="cpu"): + processing_device = main_device if device == "gpu" else torch.device("cpu") + + masks = masks.to(processing_device) + batch_size, height, width = masks.shape + + result_masks = torch.zeros_like(masks) + + for i in tqdm(range(batch_size), desc="BlockifyMask batch"): + mask = masks[i] + + # Find bounding box efficiently + mask_bool = mask > 0 + if not mask_bool.any(): + continue + + y_indices = torch.nonzero(mask_bool.any(dim=1), as_tuple=True)[0] + x_indices = torch.nonzero(mask_bool.any(dim=0), as_tuple=True)[0] + + if len(y_indices) == 0 or len(x_indices) == 0: + continue + + y_min, y_max = y_indices[0], y_indices[-1] + x_min, x_max = x_indices[0], x_indices[-1] + + bbox_width = x_max - x_min + 1 + bbox_height = y_max - y_min + 1 + + # Calculate block grid + w_divisions = max(1, bbox_width // block_size) + h_divisions = max(1, bbox_height // block_size) + + w_slice = bbox_width // w_divisions + h_slice = bbox_height // h_divisions + + # Create coordinate grids only for bbox region + y_coords = torch.arange(y_min, y_max + 1, device=processing_device).view(-1, 1) + x_coords = torch.arange(x_min, x_max + 1, device=processing_device).view(1, -1) + + # Calculate block indices for bbox region + w_block_indices = (x_coords - x_min) // w_slice + h_block_indices = (y_coords - y_min) // h_slice + + # Clamp to valid range + w_block_indices = w_block_indices.clamp(0, w_divisions - 1) + h_block_indices = h_block_indices.clamp(0, h_divisions - 1) + + # Create unique block IDs by combining h and w indices + block_ids = h_block_indices * w_divisions + w_block_indices + + # Get mask region within bbox + mask_region = mask[y_min:y_max+1, x_min:x_max+1] + + # Find which blocks have content using scatter_add + max_blocks = h_divisions * w_divisions + block_content = torch.zeros(max_blocks, device=processing_device) + block_content.scatter_add_(0, block_ids.flatten(), mask_region.flatten()) + + # Create result for blocks that have content + has_content = block_content > 0 + block_mask = has_content[block_ids] + + # Fill the result + result_masks[i, y_min:y_max+1, x_min:x_max+1] = block_mask.float() + + return (result_masks.clamp(0, 1),) diff --git a/ComfyUI-KJNodes/nodes/model_optimization_nodes.py b/ComfyUI-KJNodes/nodes/model_optimization_nodes.py new file mode 100644 index 0000000000000000000000000000000000000000..d12e7c57810420649441384bf7f0d079358c9c54 --- /dev/null +++ b/ComfyUI-KJNodes/nodes/model_optimization_nodes.py @@ -0,0 +1,2312 @@ +import os +import sys +import logging +import torch +import importlib +import math +import datetime +from tqdm import tqdm + +import folder_paths +import comfy.model_management as mm +from comfy.cli_args import args +from comfy.ldm.modules.attention import wrap_attn, optimized_attention, attention_pytorch +import comfy.utils +import comfy.sd + +try: + from comfy_api.latest import io + v3_available = True +except ImportError: + v3_available = False + logging.warning("ComfyUI v3 node API not available, please update ComfyUI to access latest v3 nodes.") + +sageattn_modes = ["disabled", "auto", "sageattn_qk_int8_pv_fp16_cuda", "sageattn_qk_int8_pv_fp16_triton", "sageattn_qk_int8_pv_fp8_cuda", "sageattn_qk_int8_pv_fp8_cuda++", "sageattn3", "sageattn3_per_block_mean"] + +def get_sage_func(sage_attention, allow_compile=False): + logging.info(f"Using sage attention mode: {sage_attention}") + from sageattention import sageattn + if sage_attention == "auto": + def sage_func(q, k, v, is_causal=False, attn_mask=None, tensor_layout="NHD"): + return sageattn(q, k, v, is_causal=is_causal, attn_mask=attn_mask, tensor_layout=tensor_layout) + elif sage_attention == "sageattn_qk_int8_pv_fp16_cuda": + from sageattention import sageattn_qk_int8_pv_fp16_cuda + def sage_func(q, k, v, is_causal=False, attn_mask=None, tensor_layout="NHD"): + return sageattn_qk_int8_pv_fp16_cuda(q, k, v, is_causal=is_causal, attn_mask=attn_mask, pv_accum_dtype="fp32", tensor_layout=tensor_layout) + elif sage_attention == "sageattn_qk_int8_pv_fp16_triton": + from sageattention import sageattn_qk_int8_pv_fp16_triton + def sage_func(q, k, v, is_causal=False, attn_mask=None, tensor_layout="NHD"): + return sageattn_qk_int8_pv_fp16_triton(q, k, v, is_causal=is_causal, attn_mask=attn_mask, tensor_layout=tensor_layout) + elif sage_attention == "sageattn_qk_int8_pv_fp8_cuda": + from sageattention import sageattn_qk_int8_pv_fp8_cuda + def sage_func(q, k, v, is_causal=False, attn_mask=None, tensor_layout="NHD"): + return sageattn_qk_int8_pv_fp8_cuda(q, k, v, is_causal=is_causal, attn_mask=attn_mask, pv_accum_dtype="fp32+fp32", tensor_layout=tensor_layout) + elif sage_attention == "sageattn_qk_int8_pv_fp8_cuda++": + from sageattention import sageattn_qk_int8_pv_fp8_cuda + def sage_func(q, k, v, is_causal=False, attn_mask=None, tensor_layout="NHD"): + return sageattn_qk_int8_pv_fp8_cuda(q, k, v, is_causal=is_causal, attn_mask=attn_mask, pv_accum_dtype="fp32+fp16", tensor_layout=tensor_layout) + elif "sageattn3" in sage_attention: + from sageattn3 import sageattn3_blackwell + def sage_func(q, k, v, is_causal=False, attn_mask=None, tensor_layout="NHD", **kwargs): + q, k, v = [x.transpose(1, 2) if tensor_layout == "NHD" else x for x in (q, k, v)] + out = sageattn3_blackwell(q, k, v, is_causal=is_causal, attn_mask=attn_mask, per_block_mean=(sage_attention == "sageattn3_per_block_mean")) + return out.transpose(1, 2) if tensor_layout == "NHD" else out + + if not allow_compile: + sage_func = torch.compiler.disable()(sage_func) + + @wrap_attn + def attention_sage(q, k, v, heads, mask=None, attn_precision=None, skip_reshape=False, skip_output_reshape=False, **kwargs): + if kwargs.get("low_precision_attention", True) is False: + return attention_pytorch(q, k, v, heads, mask=mask, skip_reshape=skip_reshape, skip_output_reshape=skip_output_reshape, **kwargs) + in_dtype = v.dtype + if q.dtype == torch.float32 or k.dtype == torch.float32 or v.dtype == torch.float32: + q, k, v = q.to(torch.float16), k.to(torch.float16), v.to(torch.float16) + if skip_reshape: + b, _, _, dim_head = q.shape + tensor_layout="HND" + else: + b, _, dim_head = q.shape + dim_head //= heads + q, k, v = map( + lambda t: t.view(b, -1, heads, dim_head), + (q, k, v), + ) + tensor_layout="NHD" + 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) + out = sage_func(q, k, v, attn_mask=mask, is_causal=False, tensor_layout=tensor_layout).to(in_dtype) + if tensor_layout == "HND": + if not skip_output_reshape: + out = ( + out.transpose(1, 2).reshape(b, -1, heads * dim_head) + ) + else: + if skip_output_reshape: + out = out.transpose(1, 2) + else: + out = out.reshape(b, -1, heads * dim_head) + return out + return attention_sage + + +from comfy.patcher_extension import CallbacksMP +class PathchSageAttentionKJ(): + @classmethod + def INPUT_TYPES(s): + return {"required": { + "model": ("MODEL",), + "sage_attention": (sageattn_modes, {"default": False, "tooltip": "Global patch comfy attention to use sageattn, once patched to revert back to normal you would need to run this node again with disabled option."}), + }, + "optional": { + "allow_compile": ("BOOLEAN", {"default": False, "tooltip": "Allow the use of torch.compile for the sage attention function, requires latest sageattn 2.2.0 or higher."}) + } + } + + RETURN_TYPES = ("MODEL", ) + FUNCTION = "patch" + DESCRIPTION = "Experimental node for patching attention mode. This doesn't use the model patching system and thus can't be disabled without running the node again with 'disabled' option." + EXPERIMENTAL = True + CATEGORY = "KJNodes/experimental" + + def patch(self, model, sage_attention, allow_compile=False): + if sage_attention == "disabled": + return model, + + model_clone = model.clone() + + new_attention = get_sage_func(sage_attention, allow_compile=allow_compile) + def attention_override_sage(func, *args, **kwargs): + return new_attention.__wrapped__(*args, **kwargs) + + # attention override + model_clone.model_options["transformer_options"]["optimized_attention_override"] = attention_override_sage + + return model_clone, + + +class CheckpointLoaderKJ(): + @classmethod + def INPUT_TYPES(s): + return {"required": { + "ckpt_name": (folder_paths.get_filename_list("checkpoints"), {"tooltip": "The name of the checkpoint (model) to load."}), + "weight_dtype": (["default", "fp8_e4m3fn", "fp8_e4m3fn_fast", "fp8_e5m2", "fp16", "bf16", "fp32"],), + "compute_dtype": (["default", "fp16", "bf16", "fp32"], {"default": "default", "tooltip": "The compute dtype to use for the model."}), + "patch_cublaslinear": ("BOOLEAN", {"default": False, "tooltip": "Enable or disable the cublas_ops arg"}), + "sage_attention": (sageattn_modes, {"default": False, "tooltip": "Patch comfy attention to use sageattn."}), + "enable_fp16_accumulation": ("BOOLEAN", {"default": False, "tooltip": "Enable torch.backends.cuda.matmul.allow_fp16_accumulation, required minimum pytorch version 2.7.1"}), + }} + + RETURN_TYPES = ("MODEL", "CLIP", "VAE") + FUNCTION = "load" + DESCRIPTION = "Experimental node for patching torch.nn.Linear with CublasLinear." + EXPERIMENTAL = True + CATEGORY = "KJNodes/model_loaders" + + def load(self, ckpt_name, weight_dtype, compute_dtype, patch_cublaslinear, sage_attention, enable_fp16_accumulation): + DTYPE_MAP = { + "fp8_e4m3fn": torch.float8_e4m3fn, + "fp8_e5m2": torch.float8_e5m2, + "fp16": torch.float16, + "bf16": torch.bfloat16, + "fp32": torch.float32 + } + model_options = {} + if dtype := DTYPE_MAP.get(weight_dtype): + model_options["dtype"] = dtype + logging.info(f"Setting {ckpt_name} weight dtype to {dtype}") + + if weight_dtype == "fp8_e4m3fn_fast": + model_options["dtype"] = torch.float8_e4m3fn + model_options["fp8_optimizations"] = True + + if patch_cublaslinear: + args.fast.add("cublas_ops") + else: + args.fast.discard("cublas_ops") + + ckpt_path = folder_paths.get_full_path_or_raise("checkpoints", ckpt_name) + sd, metadata = comfy.utils.load_torch_file(ckpt_path, return_metadata=True) + + model, clip, vae, _ = comfy.sd.load_state_dict_guess_config( + sd, + output_vae=True, + output_clip=True, + embedding_directory=folder_paths.get_folder_paths("embeddings"), + metadata=metadata, + model_options=model_options) + + if dtype := DTYPE_MAP.get(compute_dtype): + model.set_model_compute_dtype(dtype) + model.force_cast_weights = False + logging.info(f"Setting {ckpt_name} compute dtype to {dtype}") + + if enable_fp16_accumulation: + if hasattr(torch.backends.cuda.matmul, "allow_fp16_accumulation"): + torch.backends.cuda.matmul.allow_fp16_accumulation = True + else: + raise RuntimeError("Failed to set fp16 accumulation, requires pytorch version 2.7.1 or higher") + else: + if hasattr(torch.backends.cuda.matmul, "allow_fp16_accumulation"): + torch.backends.cuda.matmul.allow_fp16_accumulation = False + + if sage_attention != "disabled": + new_attention = get_sage_func(sage_attention) + def attention_override_sage(func, *args, **kwargs): + return new_attention.__wrapped__(*args, **kwargs) + + # attention override + model.model_options["transformer_options"]["optimized_attention_override"] = attention_override_sage + + return model, clip, vae + + +class DiffusionModelSelector(): + @classmethod + def INPUT_TYPES(s): + ltx2_connector_models = folder_paths.get_filename_list("text_encoders") + ltx2_connector_models = [m for m in ltx2_connector_models if "connector" in m.lower()] + return {"required": { + "model_name": (folder_paths.get_filename_list("diffusion_models") + ltx2_connector_models, {"tooltip": "The name of the checkpoint (model) to load."}), + }, + } + + RETURN_TYPES = ("STRING",) + RETURN_NAMES = ("model_path",) + FUNCTION = "get_path" + DESCRIPTION = "Returns the path to the model as a string." + EXPERIMENTAL = True + CATEGORY = "KJNodes/model_loaders" + + def get_path(self, model_name): + if "connector" in model_name.lower(): + model_path = folder_paths.get_full_path_or_raise("text_encoders", model_name) + else: + model_path = folder_paths.get_full_path_or_raise("diffusion_models", model_name) + return (model_path,) + +class DiffusionModelLoaderKJ(): + @classmethod + def INPUT_TYPES(s): + return {"required": { + "model_name": (folder_paths.get_filename_list("diffusion_models"), {"tooltip": "The name of the checkpoint (model) to load."}), + "weight_dtype": (["default", "fp8_e4m3fn", "fp8_e4m3fn_fast", "fp8_e5m2", "fp16", "bf16", "fp32"],), + "compute_dtype": (["default", "fp16", "bf16", "fp32"], {"default": "default", "tooltip": "The compute dtype to use for the model."}), + "patch_cublaslinear": ("BOOLEAN", {"default": False, "tooltip": "Enable or disable the cublas_ops arg"}), + "sage_attention": (sageattn_modes, {"default": False, "tooltip": "Patch comfy attention to use sageattn."}), + "enable_fp16_accumulation": ("BOOLEAN", {"default": False, "tooltip": "Enable torch.backends.cuda.matmul.allow_fp16_accumulation, requires pytorch 2.7.0 nightly."}), + }, + "optional": { + "extra_state_dict": ("STRING", {"forceInput": True, "tooltip": "The full path to an additional state dict to load, this will be merged with the main state dict. Useful for example to add VACE module to a WanVideoModel. You can use DiffusionModelSelector to easily get the path."}), + } + } + + RETURN_TYPES = ("MODEL",) + FUNCTION = "patch_and_load" + DESCRIPTION = "Node for patching torch.nn.Linear with CublasLinear." + EXPERIMENTAL = True + CATEGORY = "KJNodes/model_loaders" + + def patch_and_load(self, model_name, weight_dtype, compute_dtype, patch_cublaslinear, sage_attention, enable_fp16_accumulation, extra_state_dict=None): + DTYPE_MAP = { + "fp8_e4m3fn": torch.float8_e4m3fn, + "fp8_e5m2": torch.float8_e5m2, + "fp16": torch.float16, + "bf16": torch.bfloat16, + "fp32": torch.float32 + } + model_options = {} + if dtype := DTYPE_MAP.get(weight_dtype): + model_options["dtype"] = dtype + logging.info(f"Setting {model_name} weight dtype to {dtype}") + + if weight_dtype == "fp8_e4m3fn_fast": + model_options["dtype"] = torch.float8_e4m3fn + model_options["fp8_optimizations"] = True + + if enable_fp16_accumulation: + if hasattr(torch.backends.cuda.matmul, "allow_fp16_accumulation"): + torch.backends.cuda.matmul.allow_fp16_accumulation = True + else: + raise RuntimeError("Failed to set fp16 accumulation, this requires pytorch 2.7.1 or higher") + else: + if hasattr(torch.backends.cuda.matmul, "allow_fp16_accumulation"): + torch.backends.cuda.matmul.allow_fp16_accumulation = False + + if patch_cublaslinear: + args.fast.add("cublas_ops") + else: + args.fast.discard("cublas_ops") + + unet_path = folder_paths.get_full_path_or_raise("diffusion_models", model_name) + + sd, metadata = comfy.utils.load_torch_file(unet_path, return_metadata=True) + if extra_state_dict is not None: + extra_sd = comfy.utils.load_torch_file(extra_state_dict) + sd.update(extra_sd) + del extra_sd + + diffusion_model_prefix = comfy.sd.model_detection.unet_prefix_from_state_dict(sd) + sd = comfy.utils.state_dict_prefix_replace(sd, {diffusion_model_prefix: ""}, filter_keys=False) + + model = comfy.sd.load_diffusion_model_state_dict(sd, model_options=model_options, metadata=metadata) + if dtype := DTYPE_MAP.get(compute_dtype): + model.set_model_compute_dtype(dtype) + model.force_cast_weights = False + logging.info(f"Setting {model_name} compute dtype to {dtype}") + + if sage_attention != "disabled": + new_attention = get_sage_func(sage_attention) + def attention_override_sage(func, *args, **kwargs): + return new_attention.__wrapped__(*args, **kwargs) + + # attention override + model.model_options["transformer_options"]["optimized_attention_override"] = attention_override_sage + + return (model,) + +class ModelPatchTorchSettings: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "model": ("MODEL",), + "enable_fp16_accumulation": ("BOOLEAN", {"default": False, "tooltip": "Enable torch.backends.cuda.matmul.allow_fp16_accumulation, requires pytorch 2.7.0 nightly."}), + }} + + RETURN_TYPES = ("MODEL",) + FUNCTION = "patch" + DESCRIPTION = "Adds callbacks to model to set torch settings before and after running the model." + EXPERIMENTAL = True + CATEGORY = "KJNodes/experimental" + + def patch(self, model, enable_fp16_accumulation): + model_clone = model.clone() + + def patch_enable_fp16_accum(model): + logging.info("Patching torch settings: torch.backends.cuda.matmul.allow_fp16_accumulation = True") + torch.backends.cuda.matmul.allow_fp16_accumulation = True + def patch_disable_fp16_accum(model): + logging.info("Patching torch settings: torch.backends.cuda.matmul.allow_fp16_accumulation = False") + torch.backends.cuda.matmul.allow_fp16_accumulation = False + + if enable_fp16_accumulation: + if hasattr(torch.backends.cuda.matmul, "allow_fp16_accumulation"): + model_clone.add_callback(CallbacksMP.ON_PRE_RUN, patch_enable_fp16_accum) + model_clone.add_callback(CallbacksMP.ON_CLEANUP, patch_disable_fp16_accum) + else: + raise RuntimeError("Failed to set fp16 accumulation, this requires pytorch 2.7.1 or higher") + else: + if hasattr(torch.backends.cuda.matmul, "allow_fp16_accumulation"): + model_clone.add_callback(CallbacksMP.ON_PRE_RUN, patch_disable_fp16_accum) + else: + raise RuntimeError("Failed to set fp16 accumulation, this requires pytorch 2.7.1 or higher") + + return (model_clone,) + + +class PatchModelPatcherOrder: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "model": ("MODEL",), + "patch_order": (["object_patch_first", "weight_patch_first"], {"default": "weight_patch_first", "tooltip": "Patch the comfy patch_model function to load weight patches (LoRAs) before compiling the model"}), + "full_load": (["enabled", "disabled", "auto"], {"default": "auto", "tooltip": "Disabling may help with memory issues when loading large models, when changing this you should probably force model reload to avoid issues!"}), + }} + RETURN_TYPES = ("MODEL",) + FUNCTION = "patch" + CATEGORY = "KJNodes/deprecated" + DESCRIPTION = "NO LONGER NECESSARY OR FUNCTIONAL, keeping node for backwards compatibility. Use the TorchCompileModelAdvanced to use LoRA with torch.compile." + DEPRECATED = True + + def patch(self, model, patch_order, full_load): + return model, + + +class TorchCompileModelFluxAdvancedV2: + def __init__(self): + self._compiled = False + + @classmethod + def INPUT_TYPES(s): + return {"required": { + "model": ("MODEL",), + "backend": (["inductor", "cudagraphs"],), + "fullgraph": ("BOOLEAN", {"default": False, "tooltip": "Enable full graph mode"}), + "mode": (["default", "max-autotune", "max-autotune-no-cudagraphs", "reduce-overhead"], {"default": "default"}), + "double_blocks": ("BOOLEAN", {"default": True, "tooltip": "Compile double blocks"}), + "single_blocks": ("BOOLEAN", {"default": True, "tooltip": "Compile single blocks"}), + "dynamic": ("BOOLEAN", {"default": False, "tooltip": "Enable dynamic mode"}), + }, + "optional": { + "dynamo_cache_size_limit": ("INT", {"default": 64, "min": 0, "max": 1024, "step": 1, "tooltip": "torch._dynamo.config.cache_size_limit"}), + "force_parameter_static_shapes": ("BOOLEAN", {"default": True, "tooltip": "torch._dynamo.config.force_parameter_static_shapes"}), + } + } + RETURN_TYPES = ("MODEL",) + FUNCTION = "patch" + + CATEGORY = "KJNodes/torchcompile" + EXPERIMENTAL = True + DEPRECATED = True + DESCRIPTION = "Deprecated, use TorchCompileModelAdvanced instead." + + def patch(self, model, backend, mode, fullgraph, single_blocks, double_blocks, dynamic, dynamo_cache_size_limit=64, force_parameter_static_shapes=True): + from comfy_api.torch_helpers import set_torch_compile_wrapper + m = model.clone() + diffusion_model = m.get_model_object("diffusion_model") + torch._dynamo.config.cache_size_limit = dynamo_cache_size_limit + torch._dynamo.config.force_parameter_static_shapes = force_parameter_static_shapes + + compile_key_list = [] + + try: + if double_blocks: + for i, block in enumerate(diffusion_model.double_blocks): + print("Adding double block to compile list", i) + compile_key_list.append(f"diffusion_model.double_blocks.{i}") + if single_blocks: + for i, block in enumerate(diffusion_model.single_blocks): + compile_key_list.append(f"diffusion_model.single_blocks.{i}") + + set_torch_compile_wrapper(model=m, keys=compile_key_list, backend=backend, mode=mode, dynamic=dynamic, fullgraph=fullgraph) + except: + raise RuntimeError("Failed to compile model") + + return (m, ) + + +class TorchCompileModelWanVideoV2: + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "model": ("MODEL",), + "backend": (["inductor","cudagraphs"], {"default": "inductor"}), + "fullgraph": ("BOOLEAN", {"default": False, "tooltip": "Enable full graph mode"}), + "mode": (["default", "max-autotune", "max-autotune-no-cudagraphs", "reduce-overhead"], {"default": "default"}), + "dynamic": ("BOOLEAN", {"default": False, "tooltip": "Enable dynamic mode"}), + "compile_transformer_blocks_only": ("BOOLEAN", {"default": True, "tooltip": "Compile only transformer blocks, faster compile and less error prone"}), + "dynamo_cache_size_limit": ("INT", {"default": 64, "min": 0, "max": 1024, "step": 1, "tooltip": "torch._dynamo.config.cache_size_limit"}), + + }, + "optional": { + "force_parameter_static_shapes": ("BOOLEAN", {"default": True, "tooltip": "torch._dynamo.config.force_parameter_static_shapes"}), + }, + } + RETURN_TYPES = ("MODEL",) + FUNCTION = "patch" + + CATEGORY = "KJNodes/torchcompile" + EXPERIMENTAL = True + DEPRECATED = True + DESCRIPTION = "Deprecated, use TorchCompileModelAdvanced instead." + + def patch(self, model, backend, fullgraph, mode, dynamic, dynamo_cache_size_limit, compile_transformer_blocks_only, force_parameter_static_shapes=True): + from comfy_api.torch_helpers import set_torch_compile_wrapper + m = model.clone() + diffusion_model = m.get_model_object("diffusion_model") + torch._dynamo.config.cache_size_limit = dynamo_cache_size_limit + torch._dynamo.config.force_parameter_static_shapes = force_parameter_static_shapes + try: + if compile_transformer_blocks_only: + compile_key_list = [] + for i, block in enumerate(diffusion_model.blocks): + compile_key_list.append(f"diffusion_model.blocks.{i}") + else: + compile_key_list =["diffusion_model"] + + set_torch_compile_wrapper(model=m, keys=compile_key_list, backend=backend, mode=mode, dynamic=dynamic, fullgraph=fullgraph) + except: + raise RuntimeError("Failed to compile model") + + return (m, ) + + +class TorchCompileModelAdvanced: + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "model": ("MODEL",), + "backend": (["inductor","cudagraphs"], {"default": "inductor"}), + "fullgraph": ("BOOLEAN", {"default": False, "tooltip": "Enable full graph mode"}), + "mode": (["default", "max-autotune", "max-autotune-no-cudagraphs", "reduce-overhead"], {"default": "default"}), + "dynamic": ( + ["auto", "true", "false"], + {"default": "auto", "tooltip": "Use dynamic shape tracing."}, + ), + "compile_transformer_blocks_only": ("BOOLEAN", {"default": True, "tooltip": "Compile only transformer blocks, faster compile and less error prone"}), + "dynamo_cache_size_limit": ("INT", {"default": 64, "min": 0, "max": 1024, "step": 1, "tooltip": "torch._dynamo.config.cache_size_limit"}), + "debug_compile_keys": ("BOOLEAN", {"default": False, "tooltip": "Print the compile keys used for torch.compile"}), + }, + "optional": { + "disable_dynamic_vram": ("BOOLEAN", {"default": False, "tooltip": "Disable dynamic VRAM feature as it can cause issues with compile"}), + } + } + RETURN_TYPES = ("MODEL",) + FUNCTION = "patch" + CATEGORY = "KJNodes/torchcompile" + DESCRIPTION = "Advanced torch.compile patching for diffusion models." + EXPERIMENTAL = True + + def patch(self, model, backend, fullgraph, mode, dynamic, dynamo_cache_size_limit, compile_transformer_blocks_only, debug_compile_keys, disable_dynamic_vram=False): + from comfy_api.torch_helpers import set_torch_compile_wrapper + if disable_dynamic_vram: + try: + m = model.clone(disable_dynamic=True) + except TypeError: + logging.warning("This ComfyUI version do not support disabling dynamic VRAM through a node. This may cause issues with torch.compile.") + m = model.clone() + else: + m = model.clone() + + diffusion_model = m.get_model_object("diffusion_model") + torch._dynamo.config.cache_size_limit = dynamo_cache_size_limit + + try: + if compile_transformer_blocks_only: + layer_types = ["double_blocks", "single_blocks", "layers", "transformer_blocks", "blocks", "visual_transformer_blocks", "text_transformer_blocks"] + compile_key_list = [] + for layer_name in layer_types: + if hasattr(diffusion_model, layer_name): + blocks = getattr(diffusion_model, layer_name) + for i in range(len(blocks)): + compile_key_list.append(f"diffusion_model.{layer_name}.{i}") + if not compile_key_list: + logging.warning("No known transformer blocks found to compile, compiling entire diffusion model instead") + elif debug_compile_keys: + logging.info("TorchCompileModelAdvanced: Compile key list:") + for key in compile_key_list: + logging.info(f" - {key}") + if not compile_key_list: + compile_key_list =["diffusion_model"] + + dynamic_kv = {"true": True, "false": False, "auto": None} + try: + dynamic = dynamic_kv[dynamic] + except KeyError: + raise ValueError(f"Invalid dynamic arg {dynamic}") + + set_torch_compile_wrapper(model=m, keys=compile_key_list, backend=backend, mode=mode, dynamic=dynamic, fullgraph=fullgraph) + except: + raise RuntimeError("Failed to compile model") + + return (m, ) + + +class TorchCompileModelQwenImage: + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "model": ("MODEL",), + "backend": (["inductor","cudagraphs"], {"default": "inductor"}), + "fullgraph": ("BOOLEAN", {"default": False, "tooltip": "Enable full graph mode"}), + "mode": (["default", "max-autotune", "max-autotune-no-cudagraphs", "reduce-overhead"], {"default": "default"}), + "dynamic": ("BOOLEAN", {"default": False, "tooltip": "Enable dynamic mode"}), + "compile_transformer_blocks_only": ("BOOLEAN", {"default": True, "tooltip": "Compile only transformer blocks, faster compile and less error prone"}), + "dynamo_cache_size_limit": ("INT", {"default": 64, "min": 0, "max": 1024, "step": 1, "tooltip": "torch._dynamo.config.cache_size_limit"}), + }, + } + RETURN_TYPES = ("MODEL",) + FUNCTION = "patch" + + CATEGORY = "KJNodes/torchcompile" + EXPERIMENTAL = True + DEPRECATED = True + DESCRIPTION = "Deprecated, use TorchCompileModelAdvanced instead." + + def patch(self, model, backend, fullgraph, mode, dynamic, dynamo_cache_size_limit, compile_transformer_blocks_only): + from comfy_api.torch_helpers import set_torch_compile_wrapper + m = model.clone() + diffusion_model = m.get_model_object("diffusion_model") + torch._dynamo.config.cache_size_limit = dynamo_cache_size_limit + try: + if compile_transformer_blocks_only: + compile_key_list = [] + for i, block in enumerate(diffusion_model.transformer_blocks): + compile_key_list.append(f"diffusion_model.transformer_blocks.{i}") + else: + compile_key_list =["diffusion_model"] + + set_torch_compile_wrapper(model=m, keys=compile_key_list, backend=backend, mode=mode, dynamic=dynamic, fullgraph=fullgraph) + except: + raise RuntimeError("Failed to compile model") + + return (m, ) + +class TorchCompileVAE: + def __init__(self): + self._compiled_encoder = False + self._compiled_decoder = False + + @classmethod + def INPUT_TYPES(s): + return {"required": { + "vae": ("VAE",), + "backend": (["inductor", "cudagraphs"],), + "fullgraph": ("BOOLEAN", {"default": False, "tooltip": "Enable full graph mode"}), + "mode": (["default", "max-autotune", "max-autotune-no-cudagraphs", "reduce-overhead"], {"default": "default"}), + "compile_encoder": ("BOOLEAN", {"default": True, "tooltip": "Compile encoder"}), + "compile_decoder": ("BOOLEAN", {"default": True, "tooltip": "Compile decoder"}), + }} + RETURN_TYPES = ("VAE",) + FUNCTION = "compile" + + CATEGORY = "KJNodes/torchcompile" + EXPERIMENTAL = True + + def compile(self, vae, backend, mode, fullgraph, compile_encoder, compile_decoder): + if compile_encoder: + if not self._compiled_encoder: + encoder_name = "encoder" + if hasattr(vae.first_stage_model, "taesd_encoder"): + encoder_name = "taesd_encoder" + + try: + setattr( + vae.first_stage_model, + encoder_name, + torch.compile( + getattr(vae.first_stage_model, encoder_name), + mode=mode, + fullgraph=fullgraph, + backend=backend, + ), + ) + self._compiled_encoder = True + except: + raise RuntimeError("Failed to compile model") + if compile_decoder: + if not self._compiled_decoder: + decoder_name = "decoder" + if hasattr(vae.first_stage_model, "taesd_decoder"): + decoder_name = "taesd_decoder" + + try: + setattr( + vae.first_stage_model, + decoder_name, + torch.compile( + getattr(vae.first_stage_model, decoder_name), + mode=mode, + fullgraph=fullgraph, + backend=backend, + ), + ) + self._compiled_decoder = True + except: + raise RuntimeError("Failed to compile model") + return (vae, ) + +class TorchCompileControlNet: + def __init__(self): + self._compiled= False + + @classmethod + def INPUT_TYPES(s): + return {"required": { + "controlnet": ("CONTROL_NET",), + "backend": (["inductor", "cudagraphs"],), + "fullgraph": ("BOOLEAN", {"default": False, "tooltip": "Enable full graph mode"}), + "mode": (["default", "max-autotune", "max-autotune-no-cudagraphs", "reduce-overhead"], {"default": "default"}), + }} + RETURN_TYPES = ("CONTROL_NET",) + FUNCTION = "compile" + + CATEGORY = "KJNodes/torchcompile" + EXPERIMENTAL = True + + def compile(self, controlnet, backend, mode, fullgraph): + if not self._compiled: + try: + # for i, block in enumerate(controlnet.control_model.double_blocks): + # print("Compiling controlnet double_block", i) + # controlnet.control_model.double_blocks[i] = torch.compile(block, mode=mode, fullgraph=fullgraph, backend=backend) + controlnet.control_model = torch.compile(controlnet.control_model, mode=mode, fullgraph=fullgraph, backend=backend) + self._compiled = True + except: + self._compiled = False + raise RuntimeError("Failed to compile model") + + return (controlnet, ) + + +#teacache + +try: + from comfy.ldm.wan.model import sinusoidal_embedding_1d +except: + pass + +from unittest.mock import patch +import numpy as np + +def relative_l1_distance(last_tensor, current_tensor): + l1_distance = torch.abs(last_tensor - current_tensor).mean() + norm = torch.abs(last_tensor).mean() + relative_l1_distance = l1_distance / norm + return relative_l1_distance.to(torch.float32) + +@torch.compiler.disable() +def tea_cache(self, x, e0, e, transformer_options): + #teacache for cond and uncond separately + rel_l1_thresh = transformer_options["rel_l1_thresh"] + + is_cond = True if transformer_options["cond_or_uncond"] == [0] else False + + should_calc = True + suffix = "cond" if is_cond else "uncond" + + # Init cache dict if not exists + if not hasattr(self, 'teacache_state'): + self.teacache_state = { + 'cond': {'accumulated_rel_l1_distance': 0, 'prev_input': None, + 'teacache_skipped_steps': 0, 'previous_residual': None}, + 'uncond': {'accumulated_rel_l1_distance': 0, 'prev_input': None, + 'teacache_skipped_steps': 0, 'previous_residual': None} + } + logging.info("\nTeaCache: Initialized") + + cache = self.teacache_state[suffix] + + if cache['prev_input'] is not None: + if transformer_options["coefficients"] == []: + temb_relative_l1 = relative_l1_distance(cache['prev_input'], e0) + curr_acc_dist = cache['accumulated_rel_l1_distance'] + temb_relative_l1 + else: + rescale_func = np.poly1d(transformer_options["coefficients"]) + curr_acc_dist = cache['accumulated_rel_l1_distance'] + rescale_func(((e-cache['prev_input']).abs().mean() / cache['prev_input'].abs().mean()).cpu().item()) + try: + if curr_acc_dist < rel_l1_thresh: + should_calc = False + cache['accumulated_rel_l1_distance'] = curr_acc_dist + else: + should_calc = True + cache['accumulated_rel_l1_distance'] = 0 + except: + should_calc = True + cache['accumulated_rel_l1_distance'] = 0 + + if transformer_options["coefficients"] == []: + cache['prev_input'] = e0.clone().detach() + else: + cache['prev_input'] = e.clone().detach() + + if not should_calc: + x += cache['previous_residual'].to(x.device) + cache['teacache_skipped_steps'] += 1 + #print(f"TeaCache: Skipping {suffix} step") + return should_calc, cache + +def teacache_wanvideo_vace_forward_orig(self, x, t, context, vace_context, vace_strength, clip_fea=None, freqs=None, transformer_options={}, **kwargs): + # embeddings + x = self.patch_embedding(x.float()).to(x.dtype) + grid_sizes = x.shape[2:] + x = x.flatten(2).transpose(1, 2) + + # time embeddings + e = self.time_embedding( + sinusoidal_embedding_1d(self.freq_dim, t).to(dtype=x[0].dtype)) + e0 = self.time_projection(e).unflatten(1, (6, self.dim)) + + # context + context = self.text_embedding(context) + + context_img_len = None + if clip_fea is not None: + if self.img_emb is not None: + context_clip = self.img_emb(clip_fea) # bs x 257 x dim + context = torch.concat([context_clip, context], dim=1) + context_img_len = clip_fea.shape[-2] + + orig_shape = list(vace_context.shape) + vace_context = vace_context.movedim(0, 1).reshape([-1] + orig_shape[2:]) + c = self.vace_patch_embedding(vace_context.float()).to(vace_context.dtype) + c = c.flatten(2).transpose(1, 2) + c = list(c.split(orig_shape[0], dim=0)) + + if not transformer_options: + raise RuntimeError("Can't access transformer_options, this requires ComfyUI nightly version from Mar 14, 2025 or later") + + teacache_enabled = transformer_options.get("teacache_enabled", False) + if not teacache_enabled: + should_calc = True + else: + should_calc, cache = tea_cache(self, x, e0, e, transformer_options) + + if should_calc: + original_x = x.clone().detach() + patches_replace = transformer_options.get("patches_replace", {}) + 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"] = block(args["img"], context=args["txt"], e=args["vec"], freqs=args["pe"], context_img_len=context_img_len) + return out + out = blocks_replace[("double_block", i)]({"img": x, "txt": context, "vec": e0, "pe": freqs}, {"original_block": block_wrap, "transformer_options": transformer_options}) + x = out["img"] + else: + x = block(x, e=e0, freqs=freqs, context=context, context_img_len=context_img_len) + + ii = self.vace_layers_mapping.get(i, None) + if ii is not None: + for iii in range(len(c)): + c_skip, c[iii] = self.vace_blocks[ii](c[iii], x=original_x, e=e0, freqs=freqs, context=context, context_img_len=context_img_len) + x += c_skip * vace_strength[iii] + del c_skip + + if teacache_enabled: + cache['previous_residual'] = (x - original_x).to(transformer_options["teacache_device"]) + + # head + x = self.head(x, e) + + # unpatchify + x = self.unpatchify(x, grid_sizes) + return x + +def teacache_wanvideo_forward_orig(self, x, t, context, clip_fea=None, freqs=None, transformer_options={}, **kwargs): + # embeddings + x = self.patch_embedding(x.float()).to(x.dtype) + grid_sizes = x.shape[2:] + x = x.flatten(2).transpose(1, 2) + + # time embeddings + e = self.time_embedding( + sinusoidal_embedding_1d(self.freq_dim, t).to(dtype=x[0].dtype)) + e0 = self.time_projection(e).unflatten(1, (6, self.dim)) + + # context + context = self.text_embedding(context) + + context_img_len = None + if clip_fea is not None: + if self.img_emb is not None: + context_clip = self.img_emb(clip_fea) # bs x 257 x dim + context = torch.concat([context_clip, context], dim=1) + context_img_len = clip_fea.shape[-2] + + + teacache_enabled = transformer_options.get("teacache_enabled", False) + if not teacache_enabled: + should_calc = True + else: + should_calc, cache = tea_cache(self, x, e0, e, transformer_options) + + if should_calc: + original_x = x.clone().detach() + patches_replace = transformer_options.get("patches_replace", {}) + 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"] = block(args["img"], context=args["txt"], e=args["vec"], freqs=args["pe"], context_img_len=context_img_len) + return out + out = blocks_replace[("double_block", i)]({"img": x, "txt": context, "vec": e0, "pe": freqs}, {"original_block": block_wrap, "transformer_options": transformer_options}) + x = out["img"] + else: + x = block(x, e=e0, freqs=freqs, context=context, context_img_len=context_img_len) + + if teacache_enabled: + cache['previous_residual'] = (x - original_x).to(transformer_options["teacache_device"]) + + # head + x = self.head(x, e) + + # unpatchify + x = self.unpatchify(x, grid_sizes) + return x + +class WanVideoTeaCacheKJ: + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "model": ("MODEL",), + "rel_l1_thresh": ("FLOAT", {"default": 0.275, "min": 0.0, "max": 10.0, "step": 0.001, "tooltip": "Threshold for to determine when to apply the cache, compromise between speed and accuracy. When using coefficients a good value range is something between 0.2-0.4 for all but 1.3B model, which should be about 10 times smaller, same as when not using coefficients."}), + "start_percent": ("FLOAT", {"default": 0.1, "min": 0.0, "max": 1.0, "step": 0.01, "tooltip": "The start percentage of the steps to use with TeaCache."}), + "end_percent": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01, "tooltip": "The end percentage of the steps to use with TeaCache."}), + "cache_device": (["main_device", "offload_device"], {"default": "offload_device", "tooltip": "Device to cache to"}), + "coefficients": (["disabled", "1.3B", "14B", "i2v_480", "i2v_720"], {"default": "i2v_480", "tooltip": "Coefficients for rescaling the relative l1 distance, if disabled the threshold value should be about 10 times smaller than the value used with coefficients."}), + } + } + + RETURN_TYPES = ("MODEL",) + RETURN_NAMES = ("model",) + FUNCTION = "patch_teacache" + CATEGORY = "KJNodes/deprecated" + DEPRECATED = True + DESCRIPTION = """ +Patch WanVideo model to use TeaCache. Speeds up inference by caching the output and +applying it instead of doing the step. Best results are achieved by choosing the +appropriate coefficients for the model. Early steps should never be skipped, with too +aggressive values this can happen and the motion suffers. Starting later can help with that too. +When NOT using coefficients, the threshold value should be +about 10 times smaller than the value used with coefficients. + +Official recommended values https://github.com/ali-vilab/TeaCache/tree/main/TeaCache4Wan2.1 +""" + EXPERIMENTAL = True + + def patch_teacache(self, model, rel_l1_thresh, start_percent, end_percent, cache_device, coefficients): + if rel_l1_thresh == 0: + return (model,) + + if coefficients == "disabled" and rel_l1_thresh > 0.1: + logging.warning("Threshold value is too high for TeaCache without coefficients, consider using coefficients for better results.") + if coefficients != "disabled" and rel_l1_thresh < 0.1 and "1.3B" not in coefficients: + logging.warning("Threshold value is too low for TeaCache with coefficients, consider using higher threshold value for better results.") + + # type_str = str(type(model.model.model_config).__name__) + #if model.model.diffusion_model.dim == 1536: + # model_type ="1.3B" + # else: + # if "WAN21_T2V" in type_str: + # model_type = "14B" + # elif "WAN21_I2V" in type_str: + # model_type = "i2v_480" + # else: + # model_type = "i2v_720" #how to detect this? + + + teacache_coefficients_map = { + "disabled": [], + "1.3B": [2.39676752e+03, -1.31110545e+03, 2.01331979e+02, -8.29855975e+00, 1.37887774e-01], + "14B": [-5784.54975374, 5449.50911966, -1811.16591783, 256.27178429, -13.02252404], + "i2v_480": [-3.02331670e+02, 2.23948934e+02, -5.25463970e+01, 5.87348440e+00, -2.01973289e-01], + "i2v_720": [-114.36346466, 65.26524496, -18.82220707, 4.91518089, -0.23412683], + } + coefficients = teacache_coefficients_map[coefficients] + + teacache_device = mm.get_torch_device() if cache_device == "main_device" else mm.unet_offload_device() + + model_clone = model.clone() + if 'transformer_options' not in model_clone.model_options: + model_clone.model_options['transformer_options'] = {} + model_clone.model_options["transformer_options"]["rel_l1_thresh"] = rel_l1_thresh + model_clone.model_options["transformer_options"]["teacache_device"] = teacache_device + model_clone.model_options["transformer_options"]["coefficients"] = coefficients + diffusion_model = model_clone.get_model_object("diffusion_model") + + def outer_wrapper(start_percent, end_percent): + def unet_wrapper_function(model_function, kwargs): + input = kwargs["input"] + timestep = kwargs["timestep"] + c = kwargs["c"] + sigmas = c["transformer_options"]["sample_sigmas"] + cond_or_uncond = kwargs["cond_or_uncond"] + last_step = (len(sigmas) - 1) + + matched_step_index = (sigmas == timestep[0] ).nonzero() + if len(matched_step_index) > 0: + current_step_index = matched_step_index.item() + else: + for i in range(len(sigmas) - 1): + # walk from beginning of steps until crossing the timestep + if (sigmas[i] - timestep[0]) * (sigmas[i + 1] - timestep[0]) <= 0: + current_step_index = i + break + else: + current_step_index = 0 + + if current_step_index == 0: + if (len(cond_or_uncond) == 1 and cond_or_uncond[0] == 1) or len(cond_or_uncond) == 2: + if hasattr(diffusion_model, "teacache_state"): + delattr(diffusion_model, "teacache_state") + logging.info("\nResetting TeaCache state") + + current_percent = current_step_index / (len(sigmas) - 1) + c["transformer_options"]["current_percent"] = current_percent + if start_percent <= current_percent <= end_percent: + c["transformer_options"]["teacache_enabled"] = True + + forward_function = teacache_wanvideo_vace_forward_orig if hasattr(diffusion_model, "vace_layers") else teacache_wanvideo_forward_orig + context = patch.multiple( + diffusion_model, + forward_orig=forward_function.__get__(diffusion_model, diffusion_model.__class__) + ) + + with context: + out = model_function(input, timestep, **c) + if current_step_index+1 == last_step and hasattr(diffusion_model, "teacache_state"): + if len(cond_or_uncond) == 1 and cond_or_uncond[0] == 0: + skipped_steps_cond = diffusion_model.teacache_state["cond"]["teacache_skipped_steps"] + skipped_steps_uncond = diffusion_model.teacache_state["uncond"]["teacache_skipped_steps"] + logging.info("-----------------------------------") + logging.info(f"TeaCache skipped:") + logging.info(f"{skipped_steps_cond} cond steps") + logging.info(f"{skipped_steps_uncond} uncond step") + logging.info(f"out of {last_step} steps") + logging.info("-----------------------------------") + elif len(cond_or_uncond) == 2: + skipped_steps_cond = diffusion_model.teacache_state["uncond"]["teacache_skipped_steps"] + logging.info("-----------------------------------") + logging.info(f"TeaCache skipped:") + logging.info(f"{skipped_steps_cond} cond steps") + logging.info(f"out of {last_step} steps") + logging.info("-----------------------------------") + + return out + return unet_wrapper_function + + model_clone.set_model_unet_function_wrapper(outer_wrapper(start_percent=start_percent, end_percent=end_percent)) + + return (model_clone,) + + + + +from comfy.ldm.flux.math import apply_rope + +def modified_wan_self_attention_forward(self, x, freqs, transformer_options={}): + r""" + Args: + x(Tensor): Shape [B, L, num_heads, C / num_heads] + freqs(Tensor): Rope freqs, shape [1024, C / num_heads / 2] + """ + b, s, n, d = *x.shape[:2], self.num_heads, self.head_dim + + # query, key, value function + def qkv_fn(x): + q = self.norm_q(self.q(x)).view(b, s, n, d) + k = self.norm_k(self.k(x)).view(b, s, n, d) + v = self.v(x).view(b, s, n * d) + return q, k, v + + q, k, v = qkv_fn(x) + + q, k = apply_rope(q, k, freqs) + + feta_scores = get_feta_scores(q, k, self.num_frames, self.enhance_weight) + + try: + x = comfy.ldm.modules.attention.optimized_attention( + q.view(b, s, n * d), + k.view(b, s, n * d), + v, + heads=self.num_heads, + transformer_options=transformer_options, + ) + except: + # backward compatibility for now + x = comfy.ldm.modules.attention.attention( + q.view(b, s, n * d), + k.view(b, s, n * d), + v, + heads=self.num_heads, + ) + + x = self.o(x) + + x *= feta_scores + + return x + +from einops import rearrange +def get_feta_scores(query, key, num_frames, enhance_weight, num_heads=12): + img_q, img_k = query, key #torch.Size([2, 9216, 12, 128]) + + if img_q.ndim == 4: + B, ST, num_heads, head_dim = img_q.shape + elif img_q.ndim == 3: + B, ST, hidden_dim = img_q.shape + head_dim = hidden_dim // num_heads + + # Reshape from [B, ST, hidden_dim] to [B, ST, num_heads, head_dim] + img_q = img_q.view(B, ST, num_heads, head_dim) + img_k = img_k.view(B, ST, num_heads, head_dim) + + spatial_dim = ST // num_frames + + query_image = rearrange( + img_q, "B (T S) N C -> (B S) N T C", T=num_frames, S=spatial_dim, N=num_heads, C=head_dim + ) + key_image = rearrange( + img_k, "B (T S) N C -> (B S) N T C", T=num_frames, S=spatial_dim, N=num_heads, C=head_dim + ) + + return feta_score(query_image, key_image, head_dim, num_frames, enhance_weight) + +def feta_score(query_image, key_image, head_dim, num_frames, enhance_weight): + scale = head_dim**-0.5 + query_image = query_image * scale + attn_temp = query_image @ key_image.transpose(-2, -1) # translate attn to float32 + attn_temp = attn_temp.to(torch.float32) + attn_temp = attn_temp.softmax(dim=-1) + + # Reshape to [batch_size * num_tokens, num_frames, num_frames] + attn_temp = attn_temp.reshape(-1, num_frames, num_frames) + + # Create a mask for diagonal elements + diag_mask = torch.eye(num_frames, device=attn_temp.device).bool() + diag_mask = diag_mask.unsqueeze(0).expand(attn_temp.shape[0], -1, -1) + + # Zero out diagonal elements + attn_wo_diag = attn_temp.masked_fill(diag_mask, 0) + + # Calculate mean for each token's attention matrix + # Number of off-diagonal elements per matrix is n*n - n + num_off_diag = num_frames * num_frames - num_frames + mean_scores = attn_wo_diag.sum(dim=(1, 2)) / num_off_diag + + enhance_scores = mean_scores.mean() * (num_frames + enhance_weight) + enhance_scores = enhance_scores.clamp(min=1) + return enhance_scores + +import types +class WanAttentionPatch: + def __init__(self, num_frames, weight): + self.num_frames = num_frames + self.enhance_weight = weight + + def __get__(self, obj, objtype=None): + # Create bound method with stored parameters + def wrapped_attention(self_module, *args, **kwargs): + self_module.num_frames = self.num_frames + self_module.enhance_weight = self.enhance_weight + return modified_wan_self_attention_forward(self_module, *args, **kwargs) + return types.MethodType(wrapped_attention, obj) + +class WanVideoEnhanceAVideoKJ: + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "model": ("MODEL",), + "latent": ("LATENT", {"tooltip": "Only used to get the latent count"}), + "weight": ("FLOAT", {"default": 2.0, "min": 0.0, "max": 10.0, "step": 0.001, "tooltip": "Strength of the enhance effect"}), + } + } + + RETURN_TYPES = ("MODEL",) + RETURN_NAMES = ("model",) + FUNCTION = "enhance" + CATEGORY = "KJNodes/wan" + DESCRIPTION = "https://github.com/NUS-HPC-AI-Lab/Enhance-A-Video" + EXPERIMENTAL = True + + def enhance(self, model, weight, latent): + if weight == 0: + return (model,) + + num_frames = latent["samples"].shape[2] + + model_clone = model.clone() + if 'transformer_options' not in model_clone.model_options: + model_clone.model_options['transformer_options'] = {} + model_clone.model_options["transformer_options"]["enhance_weight"] = weight + diffusion_model = model_clone.get_model_object("diffusion_model") + + compile_settings = getattr(model.model, "compile_settings", None) + for idx, block in enumerate(diffusion_model.blocks): + patched_attn = WanAttentionPatch(num_frames, weight).__get__(block.self_attn, block.__class__) + if compile_settings is not None: + patched_attn = torch.compile(patched_attn, mode=compile_settings["mode"], dynamic=compile_settings["dynamic"], fullgraph=compile_settings["fullgraph"], backend=compile_settings["backend"]) + + model_clone.add_object_patch(f"diffusion_model.blocks.{idx}.self_attn.forward", patched_attn) + + return (model_clone,) + +try: + from comfy.ldm.lightricks.model import apply_rotary_emb +except: + apply_rotary_emb = None + + +def ltxv_feta_forward(self, x, context=None, mask=None, pe=None, k_pe=None, transformer_options={}): + 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 k_pe is None else k_pe) + + feta_scores = get_feta_scores(q, k, self.num_frames, self.enhance_weight, self.heads) + + if mask is None: + out = comfy.ldm.modules.attention.optimized_attention(q, k, v, self.heads, attn_precision=self.attn_precision, transformer_options=transformer_options) + else: + out = comfy.ldm.modules.attention.optimized_attention_masked(q, k, v, self.heads, mask, attn_precision=self.attn_precision, transformer_options=transformer_options) + + if self.to_gate_logits is not None: + gate_logits = self.to_gate_logits(x) # (B, T, H) + b, t, _ = out.shape + out = out.view(b, t, self.heads, self.dim_head) + gates = 2.0 * torch.sigmoid(gate_logits) # zero-init -> identity + out = out * gates.unsqueeze(-1) + out = out.view(b, t, self.heads * self.dim_head) + + return self.to_out(out) * feta_scores + + +class LTXCrossAttentionPatch: + def __init__(self, num_frames, weight): + self.num_frames = num_frames + self.enhance_weight = weight + + def __get__(self, obj, objtype=None): + # Create bound method with stored parameters + def wrapped_attention(self_module, *args, **kwargs): + self_module.num_frames = self.num_frames + self_module.enhance_weight = self.enhance_weight + return ltxv_feta_forward(self_module, *args, **kwargs) + return types.MethodType(wrapped_attention, obj) + +class LTXVEnhanceAVideoKJ: + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "model": ("MODEL",), + "latent": ("LATENT", {"tooltip": "Only used to get the latent count"}), + "weight": ("FLOAT", {"default": 4.0, "min": 0.0, "max": 100.0, "step": 0.001, "tooltip": "Strength of the enhance effect"}), + } + } + + RETURN_TYPES = ("MODEL",) + RETURN_NAMES = ("model",) + FUNCTION = "enhance" + CATEGORY = "KJNodes/ltxv" + DESCRIPTION = "https://github.com/NUS-HPC-AI-Lab/Enhance-A-Video" + EXPERIMENTAL = True + + def enhance(self, model, weight, latent): + if weight == 0: + return (model,) + + num_frames = latent["samples"].shape[2] + + model_clone = model.clone() + if 'transformer_options' not in model_clone.model_options: + model_clone.model_options['transformer_options'] = {} + model_clone.model_options["transformer_options"]["enhance_weight"] = weight + diffusion_model = model_clone.get_model_object("diffusion_model") + + for idx, block in enumerate(diffusion_model.transformer_blocks): + patched_attn1 = LTXCrossAttentionPatch(num_frames, weight).__get__(block.attn1, block.__class__) + model_clone.add_object_patch(f"diffusion_model.transformer_blocks.{idx}.attn1.forward", patched_attn1) + return (model_clone,) + +def normalized_attention_guidance(self, query, context_positive, context_negative, transformer_options={}): + k_positive = self.norm_k(self.k(context_positive)) + v_positive = self.v(context_positive) + k_negative = self.norm_k(self.k(context_negative)) + v_negative = self.v(context_negative) + + try: + x_positive = comfy.ldm.modules.attention.optimized_attention(query, k_positive, v_positive, heads=self.num_heads, transformer_options=transformer_options).flatten(2) + x_negative = comfy.ldm.modules.attention.optimized_attention(query, k_negative, v_negative, heads=self.num_heads, transformer_options=transformer_options).flatten(2) + except: #backwards compatibility for now + x_positive = comfy.ldm.modules.attention.optimized_attention(query, k_positive, v_positive, heads=self.num_heads).flatten(2) + x_negative = comfy.ldm.modules.attention.optimized_attention(query, k_negative, v_negative, heads=self.num_heads).flatten(2) + + nag_guidance = x_positive * self.nag_scale - x_negative * (self.nag_scale - 1) + + norm_positive = torch.norm(x_positive, p=1, dim=-1, keepdim=True).expand_as(x_positive) + norm_guidance = torch.norm(nag_guidance, p=1, dim=-1, keepdim=True).expand_as(nag_guidance) + + scale = torch.nan_to_num(norm_guidance / norm_positive, nan=10.0) + + mask = scale > self.nag_tau + adjustment = (norm_positive * self.nag_tau) / (norm_guidance + 1e-7) + nag_guidance = torch.where(mask, nag_guidance * adjustment, nag_guidance) + + x = nag_guidance * self.nag_alpha + x_positive * (1 - self.nag_alpha) + del nag_guidance + + return x + +#region NAG +def wan_crossattn_forward_nag(self, x, context, transformer_options={}, **kwargs): + r""" + Args: + x(Tensor): Shape [B, L1, C] + context(Tensor): Shape [B, L2, C] + """ + # Determine batch splitting and context handling + if self.input_type == "default": + # Single or [pos, neg] pair + if context.shape[0] == 1: + x_pos, context_pos = x, context + x_neg, context_neg = None, None + else: + x_pos, x_neg = torch.chunk(x, 2, dim=0) + context_pos, context_neg = torch.chunk(context, 2, dim=0) + elif self.input_type == "batch": + # Standard batch, no CFG + x_pos, context_pos = x, context + x_neg, context_neg = None, None + + # Positive branch + q_pos = self.norm_q(self.q(x_pos)) + nag_context = self.nag_context + if self.input_type == "batch": + nag_context = nag_context.repeat(x_pos.shape[0], 1, 1) + try: + x_pos_out = normalized_attention_guidance(self, q_pos, context_pos, nag_context, transformer_options=transformer_options) + except: #backwards compatibility for now + x_pos_out = normalized_attention_guidance(self, q_pos, context_pos, nag_context) + + # Negative branch + if x_neg is not None and context_neg is not None: + q_neg = self.norm_q(self.q(x_neg)) + k_neg = self.norm_k(self.k(context_neg)) + v_neg = self.v(context_neg) + try: + x_neg_out = comfy.ldm.modules.attention.optimized_attention(q_neg, k_neg, v_neg, heads=self.num_heads, transformer_options=transformer_options) + except: #backwards compatibility for now + x_neg_out = comfy.ldm.modules.attention.optimized_attention(q_neg, k_neg, v_neg, heads=self.num_heads) + x = torch.cat([x_pos_out, x_neg_out], dim=0) + else: + x = x_pos_out + + return self.o(x) + + +def wan_i2v_crossattn_forward_nag(self, x, context, context_img_len, transformer_options={}, **kwargs): + r""" + Args: + x(Tensor): Shape [B, L1, C] + context(Tensor): Shape [B, L2, C] + """ + context_img = context[:, :context_img_len] + context = context[:, context_img_len:] + + q_img = self.norm_q(self.q(x)) + k_img = self.norm_k_img(self.k_img(context_img)) + v_img = self.v_img(context_img) + try: + img_x = comfy.ldm.modules.attention.optimized_attention(q_img, k_img, v_img, heads=self.num_heads, transformer_options=transformer_options) + except: #backwards compatibility for now + img_x = comfy.ldm.modules.attention.optimized_attention(q_img, k_img, v_img, heads=self.num_heads) + + if context.shape[0] == 2: + x, x_real_negative = torch.chunk(x, 2, dim=0) + context_positive, context_negative = torch.chunk(context, 2, dim=0) + else: + context_positive = context + context_negative = None + + q = self.norm_q(self.q(x)) + + x = normalized_attention_guidance(self, q, context_positive, self.nag_context, transformer_options=transformer_options) + + if context_negative is not None: + q_real_negative = self.norm_q(self.q(x_real_negative)) + k_real_negative = self.norm_k(self.k(context_negative)) + v_real_negative = self.v(context_negative) + try: + x_real_negative = comfy.ldm.modules.attention.optimized_attention(q_real_negative, k_real_negative, v_real_negative, heads=self.num_heads, transformer_options=transformer_options) + except: #backwards compatibility for now + x_real_negative = comfy.ldm.modules.attention.optimized_attention(q_real_negative, k_real_negative, v_real_negative, heads=self.num_heads) + x = torch.cat([x, x_real_negative], dim=0) + + # output + x = x + img_x + x = self.o(x) + return x + +class WanCrossAttentionPatch: + def __init__(self, context, nag_scale, nag_alpha, nag_tau, i2v=False, input_type="default"): + self.nag_context = context + self.nag_scale = nag_scale + self.nag_alpha = nag_alpha + self.nag_tau = nag_tau + self.i2v = i2v + self.input_type = input_type + def __get__(self, obj, objtype=None): + # Create bound method with stored parameters + def wrapped_attention(self_module, *args, **kwargs): + self_module.nag_context = self.nag_context + self_module.nag_scale = self.nag_scale + self_module.nag_alpha = self.nag_alpha + self_module.nag_tau = self.nag_tau + self_module.input_type = self.input_type + if self.i2v: + return wan_i2v_crossattn_forward_nag(self_module, *args, **kwargs) + else: + return wan_crossattn_forward_nag(self_module, *args, **kwargs) + return types.MethodType(wrapped_attention, obj) + +class WanVideoNAG: + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "model": ("MODEL",), + "conditioning": ("CONDITIONING",), + "nag_scale": ("FLOAT", {"default": 11.0, "min": 0.0, "max": 100.0, "step": 0.001, "tooltip": "Strength of negative guidance effect"}), + "nag_alpha": ("FLOAT", {"default": 0.25, "min": 0.0, "max": 1.0, "step": 0.001, "tooltip": "Mixing coefficient in that controls the balance between the normalized guided representation and the original positive representation."}), + "nag_tau": ("FLOAT", {"default": 2.5, "min": 0.0, "max": 10.0, "step": 0.001, "tooltip": "Clipping threshold that controls how much the guided attention can deviate from the positive attention."}), + }, + "optional": { + "input_type": (["default", "batch"], {"tooltip": "Type of the model input"}), + }, + + } + + RETURN_TYPES = ("MODEL",) + RETURN_NAMES = ("model",) + FUNCTION = "patch" + CATEGORY = "KJNodes/wan" + DESCRIPTION = "https://github.com/ChenDarYen/Normalized-Attention-Guidance" + EXPERIMENTAL = True + + def patch(self, model, conditioning, nag_scale, nag_alpha, nag_tau, input_type="default"): + if nag_scale == 0: + return (model,) + + device = mm.get_torch_device() + dtype = mm.unet_dtype() + + model_clone = model.clone() + + diffusion_model = model_clone.get_model_object("diffusion_model") + + diffusion_model.text_embedding.to(device) + context = diffusion_model.text_embedding(conditioning[0][0].to(device, dtype)) + + type_str = str(type(model.model.model_config).__name__) + i2v = True if "WAN21_I2V" in type_str else False + + for idx, block in enumerate(diffusion_model.blocks): + patched_attn = WanCrossAttentionPatch(context, nag_scale, nag_alpha, nag_tau, i2v, input_type=input_type).__get__(block.cross_attn, block.__class__) + + model_clone.add_object_patch(f"diffusion_model.blocks.{idx}.cross_attn.forward", patched_attn) + + return (model_clone,) + +class SkipLayerGuidanceWanVideo: + @classmethod + def INPUT_TYPES(s): + return {"required": {"model": ("MODEL", ), + "blocks": ("STRING", {"default": "10", "multiline": False}), + "start_percent": ("FLOAT", {"default": 0.2, "min": 0.0, "max": 1.0, "step": 0.001}), + "end_percent": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.001}), + }} + RETURN_TYPES = ("MODEL",) + FUNCTION = "slg" + EXPERIMENTAL = True + DESCRIPTION = "Simplified skip layer guidance that only skips the uncond on selected blocks" + DEPRECATED = True + CATEGORY = "advanced/guidance" + + def slg(self, model, start_percent, end_percent, blocks): + def skip(args, extra_args): + transformer_options = extra_args.get("transformer_options", {}) + original_block = extra_args["original_block"] + + if not transformer_options: + raise ValueError("transformer_options not found in extra_args, currently SkipLayerGuidanceWanVideo only works with TeaCacheKJ") + if start_percent <= transformer_options["current_percent"] <= end_percent: + if args["img"].shape[0] == 2: + prev_img_uncond = args["img"][0].unsqueeze(0) + + new_args = { + "img": args["img"][1].unsqueeze(0), + "txt": args["txt"][1].unsqueeze(0), + "vec": args["vec"][1].unsqueeze(0), + "pe": args["pe"][1].unsqueeze(0) + } + + block_out = original_block(new_args) + + out = { + "img": torch.cat([prev_img_uncond, block_out["img"]], dim=0), + "txt": args["txt"], + "vec": args["vec"], + "pe": args["pe"] + } + else: + if transformer_options.get("cond_or_uncond") == [0]: + out = original_block(args) + else: + out = args + else: + out = original_block(args) + return out + + block_list = [int(x.strip()) for x in blocks.split(",")] + blocks = [int(i) for i in block_list] + logging.info(f"Selected blocks to skip uncond on: {blocks}") + + m = model.clone() + + for b in blocks: + #m.set_model_patch_replace(skip, "dit", "double_block", b) + model_options = m.model_options["transformer_options"].copy() + if "patches_replace" not in model_options: + model_options["patches_replace"] = {} + else: + model_options["patches_replace"] = model_options["patches_replace"].copy() + + if "dit" not in model_options["patches_replace"]: + model_options["patches_replace"]["dit"] = {} + else: + model_options["patches_replace"]["dit"] = model_options["patches_replace"]["dit"].copy() + + block = ("double_block", b) + + model_options["patches_replace"]["dit"][block] = skip + m.model_options["transformer_options"] = model_options + + + return (m, ) + +class CFGZeroStarAndInit: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "model": ("MODEL",), + "use_zero_init": ("BOOLEAN", {"default": True}), + "zero_init_steps": ("INT", {"default": 0, "min": 0, "tooltip": "for zero init, starts from 0 so first step is always zeroed out if use_zero_init enabled"}), + }} + RETURN_TYPES = ("MODEL",) + FUNCTION = "patch" + DESCRIPTION = "https://github.com/WeichenFan/CFG-Zero-star" + CATEGORY = "KJNodes/experimental" + EXPERIMENTAL = True + + def patch(self, model, use_zero_init, zero_init_steps): + def cfg_zerostar(args): + #zero init + cond = args["cond"] + timestep = args["timestep"] + sigmas = args["model_options"]["transformer_options"]["sample_sigmas"] + matched_step_index = (sigmas == timestep[0]).nonzero() + if len(matched_step_index) > 0: + current_step_index = matched_step_index.item() + else: + for i in range(len(sigmas) - 1): + if (sigmas[i] - timestep[0]) * (sigmas[i + 1] - timestep[0]) <= 0: + current_step_index = i + break + else: + current_step_index = 0 + + if (current_step_index <= zero_init_steps) and use_zero_init: + return cond * 0 + + uncond = args["uncond"] + cond_scale = args["cond_scale"] + + batch_size = cond.shape[0] + + positive_flat = cond.view(batch_size, -1) + negative_flat = uncond.view(batch_size, -1) + + dot_product = torch.sum(positive_flat * negative_flat, dim=1, keepdim=True) + squared_norm = torch.sum(negative_flat ** 2, dim=1, keepdim=True) + 1e-8 + alpha = dot_product / squared_norm + alpha = alpha.view(batch_size, *([1] * (len(cond.shape) - 1))) + + noise_pred = uncond * alpha + cond_scale * (cond - uncond * alpha) + return noise_pred + + m = model.clone() + m.set_model_sampler_cfg_function(cfg_zerostar) + return (m, ) + +class GGUFLoaderKJ(io.ComfyNode): + @classmethod + def define_schema(cls): + # Get GGUF models safely, fallback to empty list if unet_gguf folder doesn't exist + try: + gguf_models = folder_paths.get_filename_list("unet_gguf") + ltx2_connector_models = folder_paths.get_filename_list("text_encoders") + ltx2_connector_models = [m for m in ltx2_connector_models if "connector" in m.lower()] + except KeyError: + gguf_models = [] + ltx2_connector_models = [] + + return io.Schema( + node_id="GGUFLoaderKJ", + category="KJNodes/model_loaders", + description="Loads a GGUF model with advanced options, requires [ComfyUI-GGUF](https://github.com/city96/ComfyUI-GGUF) to be installed.", + is_experimental=True, + inputs=[ + io.Combo.Input("model_name", options=gguf_models), + io.Combo.Input("extra_model_name", options=gguf_models + ltx2_connector_models + ["none"], default="none", tooltip="An extra gguf model to load and merge into the main model, for example VACE module"), + io.Combo.Input("dequant_dtype", options=["default", "target", "float32", "float16", "bfloat16"], default="default"), + io.Combo.Input("patch_dtype", options=["default", "target", "float32", "float16", "bfloat16"], default="default"), + io.Boolean.Input("patch_on_device", default=False), + io.Boolean.Input("enable_fp16_accumulation", default=False, tooltip="Enable torch.backends.cuda.matmul.allow_fp16_accumulation, required minimum pytorch version 2.7.1"), + io.Combo.Input("attention_override", options=["none", "sdpa", "sageattn", "xformers", "flashattn"], default="none", tooltip="Overrides the used attention implementation, requires the respective library to be installed"), + + ], + outputs=[io.Model.Output(),], + ) + + def attention_override_pytorch(func, *args, **kwargs): + new_attention = comfy.ldm.modules.attention.attention_pytorch + return new_attention.__wrapped__(*args, **kwargs) + def attention_override_sage(func, *args, **kwargs): + new_attention = comfy.ldm.modules.attention.attention_sage + return new_attention.__wrapped__(*args, **kwargs) + def attention_override_xformers(func, *args, **kwargs): + new_attention = comfy.ldm.modules.attention.attention_xformers + return new_attention.__wrapped__(*args, **kwargs) + def attention_override_flash(func, *args, **kwargs): + new_attention = comfy.ldm.modules.attention.attention_flash + return new_attention.__wrapped__(*args, **kwargs) + + ATTENTION_OVERRIDES = { + "sdpa": attention_override_pytorch, + "sageattn": attention_override_sage, + "xformers": attention_override_xformers, + "flashattn": attention_override_flash, + } + + + @classmethod + def _get_gguf_module(cls): + """Import GGUF module with version validation""" + for key, mod in sys.modules.items(): + if key.endswith("ComfyUI-GGUF") or key.endswith("comfyui-gguf"): + if hasattr(mod, "ops") and hasattr(mod, "nodes"): + return mod + + gguf_path = os.path.join(folder_paths.folder_names_and_paths["custom_nodes"][0][0], "ComfyUI-GGUF") + for module_name in ["ComfyUI-GGUF", "custom_nodes.ComfyUI-GGUF", "comfyui-gguf", "custom_nodes.comfyui-gguf", gguf_path, gguf_path.lower()]: + try: + module = importlib.import_module(module_name) + return module + except ImportError: + continue + + raise ImportError( + "Compatible ComfyUI-GGUF not found. " + "Please install/update from: https://github.com/city96/ComfyUI-GGUF" + ) + + @classmethod + def execute(cls, model_name, extra_model_name, dequant_dtype, patch_dtype, patch_on_device, attention_override, enable_fp16_accumulation): + gguf_nodes = cls._get_gguf_module() + ops = gguf_nodes.ops.GGMLOps() + + def set_linear_dtype(attr, value): + if value == "default": + setattr(ops.Linear, attr, None) + elif value == "target": + setattr(ops.Linear, attr, value) + else: + setattr(ops.Linear, attr, getattr(torch, value)) + + set_linear_dtype("dequant_dtype", dequant_dtype) + set_linear_dtype("patch_dtype", patch_dtype) + + # init model + extra = {} + model_path = folder_paths.get_full_path("unet", model_name) + try: + sd, extra = gguf_nodes.loader.gguf_sd_loader(model_path) + except: + sd = gguf_nodes.loader.gguf_sd_loader(model_path) + + if extra_model_name is not None and extra_model_name != "none": + if extra_model_name.endswith(".gguf"): + extra_model_full_path = folder_paths.get_full_path("unet", extra_model_name) + try: + extra_model, _ = gguf_nodes.loader.gguf_sd_loader(extra_model_full_path) + except: + extra_model = gguf_nodes.loader.gguf_sd_loader(extra_model_full_path) + elif "connector" in extra_model_name.lower(): + extra_model_full_path = folder_paths.get_full_path("text_encoders", extra_model_name) + extra_model = comfy.utils.load_torch_file(extra_model_full_path) + diffusion_model_prefix = comfy.model_detection.unet_prefix_from_state_dict(extra_model) + if diffusion_model_prefix == "model.diffusion_model.": + temp_sd = comfy.utils.state_dict_prefix_replace(extra_model, {diffusion_model_prefix: ""}, filter_keys=True) + if len(temp_sd) > 0: + extra_model = temp_sd + else: + raise ValueError("Extra model must also be a .gguf file") + sd.update(extra_model) + + model = comfy.sd.load_diffusion_model_state_dict( + sd, model_options={"custom_operations": ops}, metadata=extra.get("metadata", {}) + ) + if model is None: + raise RuntimeError(f"ERROR: Could not detect model type of: {model_path}") + + model = gguf_nodes.nodes.GGUFModelPatcher.clone(model) + model.patch_on_device = patch_on_device + + # attention override + if attention_override in cls.ATTENTION_OVERRIDES: + model.model_options["transformer_options"]["optimized_attention_override"] = cls.ATTENTION_OVERRIDES[attention_override] + + if enable_fp16_accumulation: + if hasattr(torch.backends.cuda.matmul, "allow_fp16_accumulation"): + torch.backends.cuda.matmul.allow_fp16_accumulation = True + else: + raise RuntimeError("Failed to set fp16 accumulation, requires pytorch version 2.7.1 or higher") + else: + if hasattr(torch.backends.cuda.matmul, "allow_fp16_accumulation"): + torch.backends.cuda.matmul.allow_fp16_accumulation = False + + return io.NodeOutput(model,) + +try: + from torch.nn.attention.flex_attention import flex_attention, BlockMask +except: + flex_attention = None + BlockMask = None + +class NABLA_AttentionKJ(): + @classmethod + def INPUT_TYPES(s): + return {"required": { + "model": ("MODEL",), + "latent": ("LATENT", {"tooltip": "Only used to get the latent shape"}), + "window_time": ("INT", {"default": 11, "min": 1, "tooltip": "Temporal attention window size"}), + "window_width": ("INT", {"default": 3, "min": 1, "tooltip": "Spatial attention window size"}), + "window_height": ("INT", {"default": 3, "min": 1, "tooltip": "Spatial attention window size"}), + "sparsity": ("FLOAT", {"default": 0.9, "min": 0.0, "max": 1.0, "step": 0.01}), + "torch_compile": ("BOOLEAN", {"default": True, "tooltip": "Most likely required for reasonable memory usage"}) + }, + } + + RETURN_TYPES = ("MODEL", ) + FUNCTION = "patch" + DESCRIPTION = "Experimental node for patching attention mode to use NABLA sparse attention for video models, currently only works with Kadinsky5" + CATEGORY = "KJNodes/experimental" + + def patch(self, model, latent, window_time, window_width, window_height, sparsity, torch_compile): + if flex_attention is None or BlockMask is None: + raise RuntimeError("can't import flex_attention from torch.nn.attention, requires newer pytorch version") + + model_clone = model.clone() + samples = latent["samples"] + + sparse_params = get_sparse_params(samples, window_time, window_height, window_width, sparsity) + nabla_attention = NABLA_Attention(sparse_params) + + def attention_override_nabla(func, *args, **kwargs): + return nabla_attention(*args, **kwargs) + + if torch_compile: + attention_override_nabla = torch.compile(attention_override_nabla, mode="max-autotune-no-cudagraphs", dynamic=True) + + # attention override + model_clone.model_options["transformer_options"]["optimized_attention_override"] = attention_override_nabla + + return model_clone, + + +class NABLA_Attention(): + def __init__(self, sparse_params): + self.sparse_params = sparse_params + + def __call__(self, q, k, v, heads, **kwargs): + if q.shape[-2] < 3000 or k.shape[-2] < 3000: + return optimized_attention(q, k, v, heads, **kwargs) + block_mask = self.nablaT_v2(q, k, self.sparse_params["sta_mask"], thr=self.sparse_params["P"]) + out = flex_attention(q, k, v, block_mask=block_mask).transpose(1, 2).contiguous().flatten(-2, -1) + return out + + def nablaT_v2(self, q, k, sta, thr=0.9): + # Map estimation + BLOCK_SIZE = 64 + B, h, S, D = q.shape + s1 = S // BLOCK_SIZE + qa = q.reshape(B, h, s1, BLOCK_SIZE, D).mean(-2) + ka = k.reshape(B, h, s1, BLOCK_SIZE, D).mean(-2).transpose(-2, -1) + map = qa @ ka + + map = torch.softmax(map / math.sqrt(D), dim=-1) + # Map binarization + vals, inds = map.sort(-1) + cvals = vals.cumsum_(-1) + mask = (cvals >= 1 - thr).int() + mask = mask.gather(-1, inds.argsort(-1)) + + mask = torch.logical_or(mask, sta) + + # BlockMask creation + kv_nb = mask.sum(-1).to(torch.int32) + kv_inds = mask.argsort(dim=-1, descending=True).to(torch.int32) + return BlockMask.from_kv_blocks(torch.zeros_like(kv_nb), kv_inds, kv_nb, kv_inds, BLOCK_SIZE=BLOCK_SIZE, mask_mod=None) + +def fast_sta_nabla(T, H, W, wT=3, wH=3, wW=3): + l = torch.Tensor([T, H, W]).amax() + r = torch.arange(0, l, 1, dtype=torch.int16, device=mm.get_torch_device()) + mat = (r.unsqueeze(1) - r.unsqueeze(0)).abs() + sta_t, sta_h, sta_w = ( + mat[:T, :T].flatten(), + mat[:H, :H].flatten(), + mat[:W, :W].flatten(), + ) + sta_t = sta_t <= wT // 2 + sta_h = sta_h <= wH // 2 + sta_w = sta_w <= wW // 2 + sta_hw = (sta_h.unsqueeze(1) * sta_w.unsqueeze(0)).reshape(H, H, W, W).transpose(1, 2).flatten() + sta = (sta_t.unsqueeze(1) * sta_hw.unsqueeze(0)).reshape(T, T, H * W, H * W).transpose(1, 2) + return sta.reshape(T * H * W, T * H * W) + + +def get_sparse_params(x, wT, wH, wW, sparsity=0.9): + B, C, T, H, W = x.shape + #print("x shape:", x.shape) + patch_size = (1, 2, 2) + T, H, W = ( + T // patch_size[0], + H // patch_size[1], + W // patch_size[2], + ) + sta_mask = fast_sta_nabla(T, H // 8, W // 8, wT, wH, wW) + sparse_params = { + "sta_mask": sta_mask.unsqueeze_(0).unsqueeze_(0), + "to_fractal": True, + "P": sparsity, + "wT": wT, + "wH": wH, + "wW": wW, + "add_sta": True, + "visual_shape": (T, H, W), + "method": "topcdf", + } + + return sparse_params + +from comfy.comfy_types.node_typing import IO +class StartRecordCUDAMemoryHistory(): + # @classmethod + # def IS_CHANGED(s): + # return True + + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "input": (IO.ANY,), + "enabled": (["all", "state", "None"], {"default": "all", "tooltip": "None: disable, 'state': keep info for allocated memory, 'all': keep history of all alloc/free calls"}), + "context": (["all", "state", "alloc", "None"], {"default": "all", "tooltip": "None: no tracebacks, 'state': tracebacks for allocated memory, 'alloc': for alloc calls, 'all': for free calls"}), + "stacks": (["python", "all"], {"default": "all", "tooltip": "'python': Python/TorchScript/inductor frames, 'all': also C++ frames"}), + "max_entries": ("INT", {"default": 100000, "min": 1000, "max": 10000000, "tooltip": "Maximum number of entries to record"}), + }, + } + + RETURN_TYPES = (IO.ANY, ) + RETURN_NAMES = ("input", "output_path",) + FUNCTION = "start" + CATEGORY = "KJNodes/memory" + DESCRIPTION = "THIS NODE ALWAYS RUNS. Starts recording CUDA memory allocation history, can be ended and saved with EndRecordCUDAMemoryHistory. " + + def start(self, input, enabled, context, stacks, max_entries): + mm.soft_empty_cache() + torch.cuda.reset_peak_memory_stats(mm.get_torch_device()) + torch.cuda.memory._record_memory_history( + max_entries=max_entries, + enabled=enabled if enabled != "None" else None, + context=context if context != "None" else None, + stacks=stacks + ) + return input, + +class EndRecordCUDAMemoryHistory(): + @classmethod + def INPUT_TYPES(s): + return {"required": { + "input": (IO.ANY,), + "output_path": ("STRING", {"default": "comfy_cuda_memory_history"}, "Base path for saving the CUDA memory history file, timestamp and .pt extension will be added"), + }, + } + + RETURN_TYPES = (IO.ANY, "STRING",) + RETURN_NAMES = ("input", "output_path",) + FUNCTION = "end" + CATEGORY = "KJNodes/memory" + DESCRIPTION = "Records CUDA memory allocation history between start and end, saves to a file that can be analyzed here: https://docs.pytorch.org/memory_viz or with VisualizeCUDAMemoryHistory node" + + def end(self, input, output_path): + mm.soft_empty_cache() + time = datetime.datetime.now().strftime("%Y%m%d_%H%M%S") + output_path = f"{output_path}{time}.pt" + torch.cuda.memory._dump_snapshot(output_path) + torch.cuda.memory._record_memory_history(enabled=None) + return input, output_path + + +try: + from server import PromptServer +except: + PromptServer = None + +class VisualizeCUDAMemoryHistory(): + @classmethod + def INPUT_TYPES(s): + return {"required": { + "snapshot_path": ("STRING", ), + }, + "hidden": { + "unique_id": "UNIQUE_ID", + }, + } + + RETURN_TYPES = ("STRING",) + RETURN_NAMES = ("output_path",) + FUNCTION = "visualize" + CATEGORY = "KJNodes/memory" + DESCRIPTION = "Visualizes a CUDA memory allocation history file, opens in browser" + OUTPUT_NODE = True + + def visualize(self, snapshot_path, unique_id): + import pickle + from torch.cuda import _memory_viz + import uuid + + from folder_paths import get_output_directory + output_dir = get_output_directory() + + with open(snapshot_path, "rb") as f: + snapshot = pickle.load(f) + + html = _memory_viz.trace_plot(snapshot) + html_filename = f"cuda_memory_history_{uuid.uuid4().hex}.html" + output_path = os.path.join(output_dir, "memory_history", html_filename) + os.makedirs(os.path.dirname(output_path), exist_ok=True) + + with open(output_path, "w", encoding="utf-8") as f: + f.write(html) + + api_url = f"http://localhost:8188/api/view?type=output&filename={html_filename}&subfolder=memory_history" + + # Progress UI + if unique_id and PromptServer is not None: + try: + PromptServer.instance.send_progress_text( + api_url, + unique_id + ) + except: + pass + + return api_url, + + +class ModelMemoryUseReportPatch: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "model": ("MODEL",), + }} + + RETURN_TYPES = ("MODEL",) + FUNCTION = "patch" + DESCRIPTION = "Adds callbacks to model to report memory usage during after sampling" + EXPERIMENTAL = True + CATEGORY = "KJNodes/memory" + + def patch(self, model): + model_clone = model.clone() + device = mm.get_torch_device() + + def reset_mem_usage(model): + torch.cuda.reset_peak_memory_stats(device) + def report_mem_usage(model): + max_memory = torch.cuda.max_memory_allocated(device) / 1024**3 + max_reserved = torch.cuda.max_memory_reserved(device) / 1024**3 + logging.info(f"Sampling max allocated memory: {max_memory=:.3f} GB") + logging.info(f"Sampling max reserved memory: {max_reserved=:.3f} GB") + + model_clone.add_callback(CallbacksMP.ON_PRE_RUN, reset_mem_usage) + model_clone.add_callback(CallbacksMP.ON_CLEANUP, report_mem_usage) + + return (model_clone,) + + +class MemoryUsageFactorAdjustWrapper: + def __init__(self, memory_usage_factor, original_factor): + self.memory_usage_factor = memory_usage_factor + self.original_factor = original_factor + + def __call__(self, executor, model, noise_shape: torch.Tensor, *args, **kwargs): + m = model.clone() + m.model.memory_usage_factor = self.memory_usage_factor + logging.info(f"Temporarily set memory usage factor to {self.memory_usage_factor}") + try: + result = executor(m, noise_shape, *args, **kwargs) + finally: + logging.info(f"Model memory usage calculated, restoring original memory usage factor: {self.original_factor}") + m.model.memory_usage_factor = self.original_factor + return result + +class ModelMemoryUsageFactorOverride: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "model": ("MODEL",), + "memory_usage_factor": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 100.0, "step": 0.001}), + }} + + RETURN_TYPES = ("MODEL",) + FUNCTION = "patch" + DESCRIPTION = "Overrides the memory usage factor of the model during sampling." + EXPERIMENTAL = True + CATEGORY = "KJNodes/memory" + + def patch(self, model, memory_usage_factor): + model_clone = model.clone() + original_memory_usage_factor = model_clone.model.memory_usage_factor + logging.info(f"Original memory usage factor: {original_memory_usage_factor}") + + wrapper = MemoryUsageFactorAdjustWrapper(memory_usage_factor, original_memory_usage_factor) + model_clone.add_wrapper_with_key( + comfy.patcher_extension.WrappersMP.PREPARE_SAMPLING, + "memory_usage_factor_adjust_prepare_sampling", + wrapper + ) + return (model_clone,) + +def wan_ffn_chunked_forward(self, x): + if x.shape[1] > self.dim_threshold: + chunks = torch.chunk(x, self.num_chunks, dim=1) + output_chunks = [] + for chunk in chunks: + output_chunks.append(torch.nn.Sequential.forward(self, chunk)) + chunked = torch.cat(output_chunks, dim=1) + return chunked + else: + return torch.nn.Sequential.forward(self, x) + +class WanffnChunkPatch: + def __init__(self, num_chunks, dim_threshold=4096): + self.num_chunks = num_chunks + self.dim_threshold = dim_threshold + + def __get__(self, obj, objtype=None): + def wrapped_forward(self_module, *args, **kwargs): + self_module.num_chunks = self.num_chunks + self_module.dim_threshold = self.dim_threshold + return wan_ffn_chunked_forward(self_module, *args, **kwargs) + return types.MethodType(wrapped_forward, obj) + +class WanChunkFeedForward(io.ComfyNode): + + @classmethod + def define_schema(cls): + return io.Schema( + node_id="WanChunkFeedForward", + display_name="Wan Chunk FeedForward", + category="KJNodes/wan", + description="EXPERIMENTAL AND MAY CHANGE THE MODEL OUTPUT!! Chunks feedforward activations to reduce peak VRAM usage.", + is_experimental=True, + inputs=[ + io.Model.Input("model"), + io.Int.Input("chunks", default=2, min=1, max=100, step=1, tooltip="Number of chunks to split the feedforward activations into to reduce peak VRAM usage."), + io.Int.Input("dim_threshold", default=4096, min=1024, max=16384, step=256, tooltip="Dimension threshold above which to apply chunking."), + ], + outputs=[ + io.Model.Output(display_name="model"), + ], + ) + + @classmethod + def execute(cls, model, chunks, dim_threshold) -> io.NodeOutput: + if chunks == 1: + return io.NodeOutput(model) + + model_clone = model.clone() + diffusion_model = model_clone.get_model_object("diffusion_model") + + for idx, block in enumerate(diffusion_model.blocks): + patched_ffn = WanffnChunkPatch(chunks, dim_threshold).__get__(block.ffn, block.__class__) + model_clone.add_object_patch(f"diffusion_model.blocks.{idx}.ffn.forward", patched_ffn) + + return io.NodeOutput(model_clone) + +from comfy.samplers import KSAMPLER +from comfy.k_diffusion.sampling import to_d + +def sample_selfrefinevideo(model, x, sigmas, stochastic_step_map, certain_percentage=0.999, uncertainty_threshold=0.25, extra_args=None, callback=None, disable=None, verbose=False, video_shape=None, seed=None): + extra_args = {} if extra_args is None else extra_args + sigma_in = x.new_ones([x.shape[0]]) + + if seed is not None: + generator = torch.Generator(torch.device("cpu")).manual_seed(seed) + + pbar = tqdm(total=len(sigmas) - 1, disable=disable, desc="Sampling") + + for i in range(len(sigmas) - 1): + + # Get stochastic steps for this noise level + current_num_anneal_steps = stochastic_step_map.get(i, 0) + use_stochastic = current_num_anneal_steps > 0 + m = current_num_anneal_steps + 1 if use_stochastic else 1 + + sigma, sigma_next = sigmas[i], sigmas[i + 1] + + prev_certain_mask = None + prev_denoised = None + prev_denoised_full = None + prev_x_next = None + prev_x_next_video = None + is_certain = False + + for ii in range(m): + if m > 1: + pbar.set_description(f"Step {i}/{len(sigmas)-1} (substep {ii+1}/{m})") + # Early exit if certain threshold reached + if is_certain: + x = prev_x_next + break + + # Determine input + noise = torch.randn(x.shape, device=torch.device("cpu"), generator=generator).to(x) + x_in = x if ii == 0 else (1.0 - sigma) * prev_denoised_full + sigma * noise + if ii > 0: + x = x_in + + denoised = model(x_in, sigmas[i] * sigma_in, **extra_args) + + if callback is not None: + callback({'x': x, 'i': i, 'sigma': sigmas[i], 'sigma_hat': sigmas[i], 'denoised': denoised}) + + # Compute next latents + d = to_d(x, sigma, denoised) + x_next = x + (sigma_next - sigma) * d + + # Separate video and audio if joint model + if d.ndim == 3 and video_shape is not None: + cut = math.prod(video_shape[1:]) + denoised_video = denoised[:, :, :cut].reshape([denoised.shape[0]] + list(video_shape)[1:]) + x_next_video = x_next[:, :, :cut].reshape([denoised.shape[0]] + list(video_shape)[1:]) + denoised_audio = denoised[:, :, cut:] + x_next_audio = x_next[:, :, cut:] + if verbose: + tqdm.write(f"Video shape: {denoised_video.shape}, Audio shape: {denoised_audio.shape}") + else: + denoised_video = denoised + x_next_video = x_next + denoised_audio = None + x_next_audio = None + + # Stochastic sampling with uncertainty masking + if use_stochastic and prev_denoised is not None: + # Compute uncertainty and masking on video part + diff = denoised_video - prev_denoised + uncertainty = torch.sqrt(torch.sum(diff ** 2, dim=1)) / denoised_video.shape[1] + certain_mask = uncertainty < uncertainty_threshold + + if verbose: + tqdm.write(f"Step {i}/{len(sigmas)-1} substep {ii+1}/{m}:") + tqdm.write(f"Uncertainty: min {uncertainty.min():.4f}, max {uncertainty.max():.4f}, threshold {uncertainty_threshold}") + tqdm.write(f"Certain pixels: {certain_mask.sum()}/{certain_mask.numel()} = {certain_mask.sum()/certain_mask.numel():.4f}") + + # Update certain mask (union with previous) + if prev_certain_mask is not None: + certain_mask = certain_mask | prev_certain_mask + + # Check certainty threshold + if certain_mask.sum() / certain_mask.numel() > certain_percentage: + is_certain = True + if verbose: + tqdm.write(f"{ii}/{current_num_anneal_steps}: Certain region is more than {certain_percentage}, we are certain") + + # Apply masking to video + certain_mask_float = certain_mask.float().unsqueeze(1) + x_next_video = certain_mask_float * prev_x_next_video + (1.0 - certain_mask_float) * x_next_video + denoised_video = certain_mask_float * prev_denoised + (1.0 - certain_mask_float) * denoised_video + + # Reconstruct full latents by replacing the video portion + if x_next_audio is not None: + # Flatten masked video back to match original format and replace video portion + x_next = x_next.clone() + x_next[:, :, :cut] = x_next_video.reshape([x_next_video.shape[0], x_next.shape[1], -1]) + # Also reconstruct full denoised for next iteration input + denoised_full = denoised.clone() + denoised_full[:, :, :cut] = denoised_video.reshape([denoised_video.shape[0], denoised.shape[1], -1]) + else: + # No audio separation + x_next = x_next_video + denoised_full = denoised_video + + prev_certain_mask = certain_mask + prev_denoised = denoised_video + prev_denoised_full = denoised_full + prev_x_next_video = x_next_video + prev_x_next = x_next + elif use_stochastic: + # For first stochastic step, create denoised_full if we have audio + if x_next_audio is not None: + denoised_full = denoised.clone() + denoised_full[:, :, :cut] = denoised_video.reshape([denoised_video.shape[0], denoised.shape[1], -1]) + else: + denoised_full = denoised_video + + prev_certain_mask = None + prev_denoised = denoised_video + prev_denoised_full = denoised_full + prev_x_next_video = x_next_video + prev_x_next = x_next + + # Update x for final step + if use_stochastic and ii == m - 1: + x = prev_x_next + elif not use_stochastic: + x = x_next + + pbar.update(1) + if m == 1: + pbar.set_description("Sampling") + pbar.close() + return x + +class SamplerSelfRefineVideo(io.ComfyNode): + @classmethod + def define_schema(cls): + default_ranges = [ + (2, 5, 3), # Range 1 + (6, 14, 1), # Range 2 + ] + + options = [] + + # Option 1: 2 ranges + range_inputs_2 = [] + for i in range(1, 3): + start_default, end_default, steps_default = default_ranges[i - 1] + range_inputs_2.extend([ + io.Int.Input(f"start_step{i}", default=start_default, min=0, max=999, step=1, tooltip=f"Start step for range {i}"), + io.Int.Input(f"end_step{i}", default=end_default, min=0, max=999, step=1, tooltip=f"End step for range {i}"), + io.Int.Input(f"steps_{i}", default=steps_default, min=1, max=100, step=1, tooltip=f"Number of P&P steps for range {i}"), + ]) + options.append(io.DynamicCombo.Option(key="2 ranges", inputs=range_inputs_2)) + + # Option 2: 1 range + range_inputs_1 = [] + for i in range(1, 2): + start_default, end_default, steps_default = default_ranges[i - 1] + range_inputs_1.extend([ + io.Int.Input(f"start_step{i}", default=start_default, min=0, max=999, step=1, tooltip=f"Start step for range {i}"), + io.Int.Input(f"end_step{i}", default=end_default, min=0, max=999, step=1, tooltip=f"End step for range {i}"), + io.Int.Input(f"steps_{i}", default=steps_default, min=1, max=100, step=1, tooltip=f"Number of P&P steps for range {i}"), + ]) + options.append(io.DynamicCombo.Option(key="1 range", inputs=range_inputs_1)) + + # Option 3: Manual string input + options.append(io.DynamicCombo.Option( + key="from_string", + inputs=[ + io.String.Input( + "stochastic_plan", + default="2-5:3,6-14:1", + multiline=True, + tooltip="Format: 'start-end:steps,start-end:steps' e.g. '2-5:3,6-14:1'" + ) + ] + )) + return io.Schema( + node_id="SamplerSelfRefineVideo", + category="KJNodes/samplers", + description="Attempt to implement https://github.com/agwmon/self-refine-video, for testing only, MAY NOT WORK AS INTENDED.", + is_experimental=True, + inputs=[ + io.DynamicCombo.Input("input_mode", options=options, tooltip="How to configure the step plan"), + io.Float.Input("certain_percentage", default=0.999, min=0.0, max=1.0, step=0.001, round=False, tooltip="Percentage of certain pixels to consider the frame as certain and skip further refinement"), + io.Float.Input("uncertainty_threshold", default=0.2, min=0.0, max=1.0, step=0.01, round=False, tooltip="Threshold of uncertainty to consider a pixel uncertain"), + io.Boolean.Input("verbose", default=False, tooltip="Enable verbose logging during sampling"), + io.Latent.Input("latent", optional=True, tooltip="Optional latent input to get input shape for LTX2 audio/video separation"), + io.Int.Input("seed", default=0, min=0, max=0xffffffffffffffff, step=1, tooltip="Seed for stochastic sampling"), + ], + outputs=[io.Sampler.Output()] + ) + + @classmethod + def execute(cls, input_mode, certain_percentage, uncertainty_threshold, seed, verbose, latent=None) -> io.NodeOutput: + video_shape = None + if latent is not None: + video_shape = latent["samples"].shape + + range_keys = sorted([k for k in input_mode.keys() if k.startswith('start_step')]) + stochastic_step_map = {} + if "stochastic_plan" in input_mode: + # Parse manual string format: "2-5:3,6-14:1" + plan_str = input_mode["stochastic_plan"] + ranges = plan_str.split(",") + for range_spec in ranges: + range_spec = range_spec.strip() + if not range_spec: + continue + try: + range_part, steps_part = range_spec.split(":") + start, end = range_part.split("-") + start, end, steps = int(start), int(end), int(steps_part) + for idx in range(start, end + 1): + stochastic_step_map[idx] = steps + except ValueError: + raise ValueError(f"Invalid format in stochastic_plan: '{range_spec}'. Expected format: 'start-end:steps'") + else: + range_keys = [k for k in input_mode.keys() if k.startswith('start_step')] + for start_key in range_keys: + i = start_key.replace('start_step', '') + start = input_mode.get(f"start_step{i}") + end = input_mode.get(f"end_step{i}") + steps = input_mode.get(f"steps_{i}") + + if start is not None and end is not None and steps is not None: + for idx in range(start, end + 1): + stochastic_step_map[idx] = steps + + sampler = KSAMPLER(sample_selfrefinevideo, { + "stochastic_step_map": stochastic_step_map, + "certain_percentage": certain_percentage, + "uncertainty_threshold": uncertainty_threshold, + "verbose": verbose, + "video_shape": video_shape, + "seed": seed, + }) + return io.NodeOutput(sampler) diff --git a/ComfyUI-KJNodes/nodes/nodes.py b/ComfyUI-KJNodes/nodes/nodes.py new file mode 100644 index 0000000000000000000000000000000000000000..5c882613dbbe82bb48226028a1fa4d0926adf21e --- /dev/null +++ b/ComfyUI-KJNodes/nodes/nodes.py @@ -0,0 +1,3389 @@ +import torch +import torch.nn as nn +import numpy as np +from PIL import Image +import json +import re +import os +import time +import math +import importlib +import logging + +from comfy import model_management +import folder_paths +from nodes import MAX_RESOLUTION +from comfy.utils import common_upscale, ProgressBar, load_torch_file, save_torch_file +from comfy.comfy_types.node_typing import IO +from comfy_api.latest import io, ui +import comfy.latent_formats +import node_helpers +from io import BytesIO + +script_directory = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) +folder_paths.add_model_folder_path("kjnodes_fonts", os.path.join(script_directory, "fonts")) + +class BOOLConstant: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "value": ("BOOLEAN", {"default": True}), + }, + } + RETURN_TYPES = ("BOOLEAN",) + RETURN_NAMES = ("value",) + FUNCTION = "get_value" + CATEGORY = "KJNodes/constants" + SEARCH_ALIASES = ["boolean", "value"] + + def get_value(self, value): + return (value,) + +class INTConstant: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "value": ("INT", {"default": 0, "min": -0xffffffffffffffff, "max": 0xffffffffffffffff}), + }, + } + RETURN_TYPES = ("INT",) + RETURN_NAMES = ("value",) + FUNCTION = "get_value" + CATEGORY = "KJNodes/constants" + SEARCH_ALIASES = ["integer", "value"] + + def get_value(self, value): + return (value,) + +class FloatConstant: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "value": ("FLOAT", {"default": 0.0, "min": -0xffffffffffffffff, "max": 0xffffffffffffffff, "step": 0.00001}), + }, + } + + RETURN_TYPES = ("FLOAT",) + RETURN_NAMES = ("value",) + FUNCTION = "get_value" + CATEGORY = "KJNodes/constants" + SEARCH_ALIASES = ["float", "value"] + + def get_value(self, value): + return (round(value, 6),) + +class StringConstant: + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + "string": ("STRING", {"default": '', "multiline": False}), + } + } + RETURN_TYPES = ("STRING",) + FUNCTION = "passtring" + CATEGORY = "KJNodes/constants" + SEARCH_ALIASES = ["text", "value"] + + def passtring(self, string): + return (string, ) + +class StringConstantMultiline: + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + "string": ("STRING", {"default": "", "multiline": True}), + "strip_newlines": ("BOOLEAN", {"default": True}), + } + } + RETURN_TYPES = ("STRING",) + FUNCTION = "stringify" + CATEGORY = "KJNodes/constants" + SEARCH_ALIASES = ["text", "value"] + + def stringify(self, string, strip_newlines): + new_string = string + if strip_newlines: + new_string = new_string.replace('\n', '').strip() + return (new_string,) + + + +class ScaleBatchPromptSchedule: + + RETURN_TYPES = ("STRING",) + FUNCTION = "scaleschedule" + CATEGORY = "KJNodes/misc" + DESCRIPTION = """ +Scales a batch schedule from Fizz' nodes BatchPromptSchedule +to a different frame count. +""" + + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "input_str": ("STRING", {"forceInput": True,"default": "0:(0.0),\n7:(1.0),\n15:(0.0)\n"}), + "old_frame_count": ("INT", {"forceInput": True,"default": 1,"min": 1, "max": 4096, "step": 1}), + "new_frame_count": ("INT", {"forceInput": True,"default": 1,"min": 1, "max": 4096, "step": 1}), + + }, + } + + def scaleschedule(self, old_frame_count, input_str, new_frame_count): + pattern = r'"(\d+)"\s*:\s*"(.*?)"(?:,|\Z)' + frame_strings = dict(re.findall(pattern, input_str)) + + # Calculate the scaling factor + scaling_factor = (new_frame_count - 1) / (old_frame_count - 1) + + # Initialize a dictionary to store the new frame numbers and strings + new_frame_strings = {} + + # Iterate over the frame numbers and strings + for old_frame, string in frame_strings.items(): + # Calculate the new frame number + new_frame = int(round(int(old_frame) * scaling_factor)) + + # Store the new frame number and corresponding string + new_frame_strings[new_frame] = string + + # Format the output string + output_str = ', '.join([f'"{k}":"{v}"' for k, v in sorted(new_frame_strings.items())]) + return (output_str,) + + +class GetLatentsFromBatchIndexed: + + RETURN_TYPES = ("LATENT",) + FUNCTION = "indexedlatentsfrombatch" + CATEGORY = "KJNodes/latents" + DESCRIPTION = """ +Selects and returns the latents at the specified indices as an latent batch. +""" + + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "latents": ("LATENT",), + "indexes": ("STRING", {"default": "0, 1, 2", "multiline": True}), + "latent_format": (["BCHW", "BTCHW", "BCTHW"], {"default": "BCHW"}), + }, + } + + def indexedlatentsfrombatch(self, latents, indexes, latent_format): + + samples = latents.copy() + latent_samples = samples["samples"] + + # Parse the indexes string into a list of integers + index_list = [int(index.strip()) for index in indexes.split(',')] + + # Convert list of indices to a PyTorch tensor + indices_tensor = torch.tensor(index_list, dtype=torch.long) + + # Select the latents at the specified indices + if latent_format == "BCHW": + chosen_latents = latent_samples[indices_tensor] + elif latent_format == "BTCHW": + chosen_latents = latent_samples[:, indices_tensor] + elif latent_format == "BCTHW": + chosen_latents = latent_samples[:, :, indices_tensor] + + samples["samples"] = chosen_latents + return (samples,) + + +class ConditioningMultiCombine: + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "inputcount": ("INT", {"default": 2, "min": 2, "max": 20, "step": 1}), + "operation": (["combine", "concat"], {"default": "combine"}), + "conditioning_1": ("CONDITIONING", ), + "conditioning_2": ("CONDITIONING", ), + }, + } + + RETURN_TYPES = ("CONDITIONING", "INT") + RETURN_NAMES = ("combined", "inputcount") + FUNCTION = "combine" + CATEGORY = "KJNodes/masking/conditioning" + DESCRIPTION = """ +Combines multiple conditioning nodes into one +""" + + def combine(self, inputcount, operation, **kwargs): + from nodes import ConditioningCombine + from nodes import ConditioningConcat + cond_combine_node = ConditioningCombine() + cond_concat_node = ConditioningConcat() + cond = kwargs["conditioning_1"] + for c in range(1, inputcount): + new_cond = kwargs[f"conditioning_{c + 1}"] + if operation == "combine": + cond = cond_combine_node.combine(cond, new_cond)[0] + elif operation == "concat": + cond = cond_concat_node.concat(cond, new_cond)[0] + return (cond, inputcount,) + +class AppendStringsToList: + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + "string1": ("STRING", {"default": '', "forceInput": True}), + "string2": ("STRING", {"default": '', "forceInput": True}), + } + } + RETURN_TYPES = ("STRING",) + FUNCTION = "joinstring" + CATEGORY = "KJNodes/text" + + def joinstring(self, string1, string2): + if not isinstance(string1, list): + string1 = [string1] + if not isinstance(string2, list): + string2 = [string2] + + joined_string = string1 + string2 + return (joined_string, ) + +class JoinStrings: + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + "delimiter": ("STRING", {"default": ' ', "multiline": False}), + }, + "optional": { + "string1": ("STRING", {"default": '', "forceInput": True}), + "string2": ("STRING", {"default": '', "forceInput": True}), + } + } + RETURN_TYPES = ("STRING",) + FUNCTION = "joinstring" + CATEGORY = "KJNodes/text" + + def joinstring(self, delimiter, string1="", string2=""): + joined_string = string1 + delimiter + string2 + return (joined_string, ) + +class JoinStringMulti: + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "inputcount": ("INT", {"default": 2, "min": 2, "max": 1000, "step": 1}), + "string_1": ("STRING", {"default": '', "forceInput": True}), + "delimiter": ("STRING", {"default": ' ', "multiline": False}), + "return_list": ("BOOLEAN", {"default": False}), + }, + "optional": { + "string_2": ("STRING", {"default": '', "forceInput": True}), + } + } + + RETURN_TYPES = ("STRING",) + RETURN_NAMES = ("string",) + FUNCTION = "combine" + CATEGORY = "KJNodes/text" + DESCRIPTION = """ +Creates single string, or a list of strings, from +multiple input strings. +You can set how many inputs the node has, +with the **inputcount** and clicking update. +""" + + def combine(self, inputcount, delimiter, **kwargs): + string = kwargs["string_1"] + return_list = kwargs["return_list"] + strings = [string] # Initialize a list with the first string + for c in range(1, inputcount): + new_string = kwargs.get(f"string_{c + 1}", "") + if not new_string: + continue + if return_list: + strings.append(new_string) # Add new string to the list + else: + string = string + delimiter + new_string + if return_list: + return (strings,) # Return the list of strings + else: + return (string,) # Return the combined string + +class CondPassThrough: + @classmethod + def INPUT_TYPES(s): + return { + "required": { + }, + "optional": { + "positive": ("CONDITIONING", ), + "negative": ("CONDITIONING", ), + }, + } + + RETURN_TYPES = ("CONDITIONING", "CONDITIONING",) + RETURN_NAMES = ("positive", "negative") + FUNCTION = "passthrough" + CATEGORY = "KJNodes/misc" + DESCRIPTION = """ + Simply passes through the positive and negative conditioning, + workaround for Set node not allowing bypassed inputs. +""" + + def passthrough(self, positive=None, negative=None): + return (positive, negative,) + +class ModelPassThrough: + @classmethod + def INPUT_TYPES(s): + return { + "required": { + }, + "optional": { + "model": ("MODEL", ), + }, + } + + RETURN_TYPES = ("MODEL", ) + RETURN_NAMES = ("model",) + FUNCTION = "passthrough" + CATEGORY = "KJNodes/misc" + DESCRIPTION = """ + Simply passes through the model, + workaround for Set node not allowing bypassed inputs. +""" + + def passthrough(self, model=None): + return (model,) + +def append_helper(t, mask, c, set_area_to_bounds, strength): + n = [t[0], t[1].copy()] + _, h, w = mask.shape + n[1]['mask'] = mask + n[1]['set_area_to_bounds'] = set_area_to_bounds + n[1]['mask_strength'] = strength + c.append(n) + +class ConditioningSetMaskAndCombine: + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + "positive_1": ("CONDITIONING", ), + "negative_1": ("CONDITIONING", ), + "positive_2": ("CONDITIONING", ), + "negative_2": ("CONDITIONING", ), + "mask_1": ("MASK", ), + "mask_2": ("MASK", ), + "mask_1_strength": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}), + "mask_2_strength": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}), + "set_cond_area": (["default", "mask bounds"],), + } + } + + RETURN_TYPES = ("CONDITIONING","CONDITIONING",) + RETURN_NAMES = ("combined_positive", "combined_negative",) + FUNCTION = "append" + CATEGORY = "KJNodes/masking/conditioning" + DESCRIPTION = """ +Bundles multiple conditioning mask and combine nodes into one,functionality is identical to ComfyUI native nodes +""" + + def append(self, positive_1, negative_1, positive_2, negative_2, mask_1, mask_2, set_cond_area, mask_1_strength, mask_2_strength): + c = [] + c2 = [] + set_area_to_bounds = False + if set_cond_area != "default": + set_area_to_bounds = True + if len(mask_1.shape) < 3: + mask_1 = mask_1.unsqueeze(0) + if len(mask_2.shape) < 3: + mask_2 = mask_2.unsqueeze(0) + for t in positive_1: + append_helper(t, mask_1, c, set_area_to_bounds, mask_1_strength) + for t in positive_2: + append_helper(t, mask_2, c, set_area_to_bounds, mask_2_strength) + for t in negative_1: + append_helper(t, mask_1, c2, set_area_to_bounds, mask_1_strength) + for t in negative_2: + append_helper(t, mask_2, c2, set_area_to_bounds, mask_2_strength) + return (c, c2) + +class ConditioningSetMaskAndCombine3: + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + "positive_1": ("CONDITIONING", ), + "negative_1": ("CONDITIONING", ), + "positive_2": ("CONDITIONING", ), + "negative_2": ("CONDITIONING", ), + "positive_3": ("CONDITIONING", ), + "negative_3": ("CONDITIONING", ), + "mask_1": ("MASK", ), + "mask_2": ("MASK", ), + "mask_3": ("MASK", ), + "mask_1_strength": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}), + "mask_2_strength": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}), + "mask_3_strength": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}), + "set_cond_area": (["default", "mask bounds"],), + } + } + + RETURN_TYPES = ("CONDITIONING","CONDITIONING",) + RETURN_NAMES = ("combined_positive", "combined_negative",) + FUNCTION = "append" + CATEGORY = "KJNodes/masking/conditioning" + DESCRIPTION = """ +Bundles multiple conditioning mask and combine nodes into one,functionality is identical to ComfyUI native nodes +""" + + def append(self, positive_1, negative_1, positive_2, positive_3, negative_2, negative_3, mask_1, mask_2, mask_3, set_cond_area, mask_1_strength, mask_2_strength, mask_3_strength): + c = [] + c2 = [] + set_area_to_bounds = False + if set_cond_area != "default": + set_area_to_bounds = True + if len(mask_1.shape) < 3: + mask_1 = mask_1.unsqueeze(0) + if len(mask_2.shape) < 3: + mask_2 = mask_2.unsqueeze(0) + if len(mask_3.shape) < 3: + mask_3 = mask_3.unsqueeze(0) + for t in positive_1: + append_helper(t, mask_1, c, set_area_to_bounds, mask_1_strength) + for t in positive_2: + append_helper(t, mask_2, c, set_area_to_bounds, mask_2_strength) + for t in positive_3: + append_helper(t, mask_3, c, set_area_to_bounds, mask_3_strength) + for t in negative_1: + append_helper(t, mask_1, c2, set_area_to_bounds, mask_1_strength) + for t in negative_2: + append_helper(t, mask_2, c2, set_area_to_bounds, mask_2_strength) + for t in negative_3: + append_helper(t, mask_3, c2, set_area_to_bounds, mask_3_strength) + return (c, c2) + +class ConditioningSetMaskAndCombine4: + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + "positive_1": ("CONDITIONING", ), + "negative_1": ("CONDITIONING", ), + "positive_2": ("CONDITIONING", ), + "negative_2": ("CONDITIONING", ), + "positive_3": ("CONDITIONING", ), + "negative_3": ("CONDITIONING", ), + "positive_4": ("CONDITIONING", ), + "negative_4": ("CONDITIONING", ), + "mask_1": ("MASK", ), + "mask_2": ("MASK", ), + "mask_3": ("MASK", ), + "mask_4": ("MASK", ), + "mask_1_strength": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}), + "mask_2_strength": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}), + "mask_3_strength": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}), + "mask_4_strength": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}), + "set_cond_area": (["default", "mask bounds"],), + } + } + + RETURN_TYPES = ("CONDITIONING","CONDITIONING",) + RETURN_NAMES = ("combined_positive", "combined_negative",) + FUNCTION = "append" + CATEGORY = "KJNodes/masking/conditioning" + DESCRIPTION = """ +Bundles multiple conditioning mask and combine nodes into one,functionality is identical to ComfyUI native nodes +""" + + def append(self, positive_1, negative_1, positive_2, positive_3, positive_4, negative_2, negative_3, negative_4, mask_1, mask_2, mask_3, mask_4, set_cond_area, mask_1_strength, mask_2_strength, mask_3_strength, mask_4_strength): + c = [] + c2 = [] + set_area_to_bounds = False + if set_cond_area != "default": + set_area_to_bounds = True + if len(mask_1.shape) < 3: + mask_1 = mask_1.unsqueeze(0) + if len(mask_2.shape) < 3: + mask_2 = mask_2.unsqueeze(0) + if len(mask_3.shape) < 3: + mask_3 = mask_3.unsqueeze(0) + if len(mask_4.shape) < 3: + mask_4 = mask_4.unsqueeze(0) + for t in positive_1: + append_helper(t, mask_1, c, set_area_to_bounds, mask_1_strength) + for t in positive_2: + append_helper(t, mask_2, c, set_area_to_bounds, mask_2_strength) + for t in positive_3: + append_helper(t, mask_3, c, set_area_to_bounds, mask_3_strength) + for t in positive_4: + append_helper(t, mask_4, c, set_area_to_bounds, mask_4_strength) + for t in negative_1: + append_helper(t, mask_1, c2, set_area_to_bounds, mask_1_strength) + for t in negative_2: + append_helper(t, mask_2, c2, set_area_to_bounds, mask_2_strength) + for t in negative_3: + append_helper(t, mask_3, c2, set_area_to_bounds, mask_3_strength) + for t in negative_4: + append_helper(t, mask_4, c2, set_area_to_bounds, mask_4_strength) + return (c, c2) + +class ConditioningSetMaskAndCombine5: + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + "positive_1": ("CONDITIONING", ), + "negative_1": ("CONDITIONING", ), + "positive_2": ("CONDITIONING", ), + "negative_2": ("CONDITIONING", ), + "positive_3": ("CONDITIONING", ), + "negative_3": ("CONDITIONING", ), + "positive_4": ("CONDITIONING", ), + "negative_4": ("CONDITIONING", ), + "positive_5": ("CONDITIONING", ), + "negative_5": ("CONDITIONING", ), + "mask_1": ("MASK", ), + "mask_2": ("MASK", ), + "mask_3": ("MASK", ), + "mask_4": ("MASK", ), + "mask_5": ("MASK", ), + "mask_1_strength": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}), + "mask_2_strength": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}), + "mask_3_strength": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}), + "mask_4_strength": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}), + "mask_5_strength": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}), + "set_cond_area": (["default", "mask bounds"],), + } + } + + RETURN_TYPES = ("CONDITIONING","CONDITIONING",) + RETURN_NAMES = ("combined_positive", "combined_negative",) + FUNCTION = "append" + CATEGORY = "KJNodes/masking/conditioning" + DESCRIPTION = """ +Bundles multiple conditioning mask and combine nodes into one,functionality is identical to ComfyUI native nodes +""" + + def append(self, positive_1, negative_1, positive_2, positive_3, positive_4, positive_5, negative_2, negative_3, negative_4, negative_5, mask_1, mask_2, mask_3, mask_4, mask_5, set_cond_area, mask_1_strength, mask_2_strength, mask_3_strength, mask_4_strength, mask_5_strength): + c = [] + c2 = [] + set_area_to_bounds = False + if set_cond_area != "default": + set_area_to_bounds = True + if len(mask_1.shape) < 3: + mask_1 = mask_1.unsqueeze(0) + if len(mask_2.shape) < 3: + mask_2 = mask_2.unsqueeze(0) + if len(mask_3.shape) < 3: + mask_3 = mask_3.unsqueeze(0) + if len(mask_4.shape) < 3: + mask_4 = mask_4.unsqueeze(0) + if len(mask_5.shape) < 3: + mask_5 = mask_5.unsqueeze(0) + for t in positive_1: + append_helper(t, mask_1, c, set_area_to_bounds, mask_1_strength) + for t in positive_2: + append_helper(t, mask_2, c, set_area_to_bounds, mask_2_strength) + for t in positive_3: + append_helper(t, mask_3, c, set_area_to_bounds, mask_3_strength) + for t in positive_4: + append_helper(t, mask_4, c, set_area_to_bounds, mask_4_strength) + for t in positive_5: + append_helper(t, mask_5, c, set_area_to_bounds, mask_5_strength) + for t in negative_1: + append_helper(t, mask_1, c2, set_area_to_bounds, mask_1_strength) + for t in negative_2: + append_helper(t, mask_2, c2, set_area_to_bounds, mask_2_strength) + for t in negative_3: + append_helper(t, mask_3, c2, set_area_to_bounds, mask_3_strength) + for t in negative_4: + append_helper(t, mask_4, c2, set_area_to_bounds, mask_4_strength) + for t in negative_5: + append_helper(t, mask_5, c2, set_area_to_bounds, mask_5_strength) + return (c, c2) + +class VRAM_Debug: + + @classmethod + + def INPUT_TYPES(s): + return { + "required": { + + "empty_cache": ("BOOLEAN", {"default": True}), + "gc_collect": ("BOOLEAN", {"default": True}), + "unload_all_models": ("BOOLEAN", {"default": False}), + }, + "optional": { + "any_input": (IO.ANY,), + "image_pass": ("IMAGE",), + "model_pass": ("MODEL",), + } + } + + RETURN_TYPES = (IO.ANY, "IMAGE","MODEL","INT", "INT",) + RETURN_NAMES = ("any_output", "image_pass", "model_pass", "freemem_before", "freemem_after") + FUNCTION = "VRAMdebug" + CATEGORY = "KJNodes/memory" + DESCRIPTION = """ +Returns the inputs unchanged, they are only used as triggers, +and performs comfy model management functions and garbage collection, +reports free VRAM before and after the operations. +""" + + def VRAMdebug(self, gc_collect, empty_cache, unload_all_models, image_pass=None, model_pass=None, any_input=None): + freemem_before = model_management.get_free_memory() + logging.info(f"VRAMdebug: free memory before: {freemem_before:,.0f}") + if empty_cache: + model_management.soft_empty_cache() + if unload_all_models: + model_management.unload_all_models() + if gc_collect: + import gc + gc.collect() + freemem_after = model_management.get_free_memory() + logging.info(f"VRAMdebug: free memory after: {freemem_after:,.0f}") + logging.info(f"VRAMdebug: freed memory: {freemem_after - freemem_before:,.0f}") + return {"ui": { + "text": [f"{freemem_before:,.0f}x{freemem_after:,.0f}"]}, + "result": (any_input, image_pass, model_pass, freemem_before, freemem_after) + } + +class SomethingToString: + @classmethod + + def INPUT_TYPES(s): + return { + "required": { + "input": (IO.ANY, ), + }, + "optional": { + "prefix": ("STRING", {"default": ""}), + "suffix": ("STRING", {"default": ""}), + } + } + RETURN_TYPES = ("STRING",) + FUNCTION = "stringify" + CATEGORY = "KJNodes/text" + DESCRIPTION = """ +Converts any type to a string. +""" + + def stringify(self, input, prefix="", suffix=""): + if isinstance(input, (int, float, bool, str)): + stringified = str(input) + elif isinstance(input, list): + stringified = ', '.join(str(item) for item in input) + else: + return input, + if prefix: # Check if prefix is not empty + stringified = prefix + stringified # Add the prefix + if suffix: # Check if suffix is not empty + stringified = stringified + suffix # Add the suffix + + return (stringified,) + +class Sleep: + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "input": (IO.ANY, ), + "minutes": ("INT", {"default": 0, "min": 0, "max": 1439}), + "seconds": ("FLOAT", {"default": 0.0, "min": 0.0, "max": 59.99, "step": 0.01}), + }, + } + RETURN_TYPES = (IO.ANY,) + FUNCTION = "sleepdelay" + CATEGORY = "KJNodes/misc" + DESCRIPTION = """ +Delays the execution for the input amount of time. +""" + + def sleepdelay(self, input, minutes, seconds): + total_seconds = minutes * 60 + seconds + time.sleep(total_seconds) + return input, + +class EmptyLatentImagePresets: + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + "dimensions": ( + [ + '512 x 512 (1:1)', + '768 x 512 (1.5:1)', + '960 x 512 (1.875:1)', + '1024 x 512 (2:1)', + '1024 x 576 (1.778:1)', + '1536 x 640 (2.4:1)', + '1344 x 768 (1.75:1)', + '1216 x 832 (1.46:1)', + '1152 x 896 (1.286:1)', + '1024 x 1024 (1:1)', + ], + { + "default": '512 x 512 (1:1)' + }), + + "invert": ("BOOLEAN", {"default": False}), + "batch_size": ("INT", { + "default": 1, + "min": 1, + "max": 4096 + }), + }, + } + + RETURN_TYPES = ("LATENT", "INT", "INT") + RETURN_NAMES = ("Latent", "Width", "Height") + FUNCTION = "generate" + CATEGORY = "KJNodes/latents" + + def generate(self, dimensions, invert, batch_size): + from nodes import EmptyLatentImage + result = [x.strip() for x in dimensions.split('x')] + + # Remove the aspect ratio part + result[0] = result[0].split('(')[0].strip() + result[1] = result[1].split('(')[0].strip() + + if invert: + width = int(result[1].split(' ')[0]) + height = int(result[0]) + else: + width = int(result[0]) + height = int(result[1].split(' ')[0]) + latent = EmptyLatentImage().generate(width, height, batch_size)[0] + + return (latent, int(width), int(height),) + +class EmptyLatentImageCustomPresets: + @classmethod + def INPUT_TYPES(cls): + try: + with open(os.path.join(script_directory, 'custom_dimensions.json')) as f: + dimensions_dict = json.load(f) + except FileNotFoundError: + dimensions_dict = [] + return { + "required": { + "dimensions": ( + [f"{d['label']} - {d['value']}" for d in dimensions_dict], + ), + + "invert": ("BOOLEAN", {"default": False}), + "batch_size": ("INT", { + "default": 1, + "min": 1, + "max": 4096 + }), + }, + } + + RETURN_TYPES = ("LATENT", "INT", "INT") + RETURN_NAMES = ("Latent", "Width", "Height") + FUNCTION = "generate" + CATEGORY = "KJNodes/latents" + DESCRIPTION = """ +Generates an empty latent image with the specified dimensions. +The choices are loaded from 'custom_dimensions.json' in the nodes folder. +""" + + def generate(self, dimensions, invert, batch_size): + from nodes import EmptyLatentImage + # Split the string into label and value + label, value = dimensions.split(' - ') + # Split the value into width and height + width, height = [x.strip() for x in value.split('x')] + + if invert: + width, height = height, width + + latent = EmptyLatentImage().generate(int(width), int(height), batch_size)[0] + + return (latent, int(width), int(height),) + +class WidgetToString: + @classmethod + def IS_CHANGED(cls,*,id,node_title,any_input,**kwargs): + if any_input is not None and (id != 0 or node_title != ""): + return float("NaN") + + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + "id": ("INT", {"default": 0, "min": 0, "max": 100000, "step": 1}), + "widget_name": ("STRING", {"multiline": False}), + "return_all": ("BOOLEAN", {"default": False}), + }, + "optional": { + "any_input": (IO.ANY, ), + "node_title": ("STRING", {"multiline": False}), + "allowed_float_decimals": ("INT", {"default": 2, "min": 0, "max": 10, "tooltip": "Number of decimal places to display for float values"}), + }, + "hidden": {"extra_pnginfo": "EXTRA_PNGINFO", + "prompt": "PROMPT", + "unique_id": "UNIQUE_ID",}, + } + + RETURN_TYPES = ("STRING", ) + FUNCTION = "get_widget_value" + CATEGORY = "KJNodes/text" + DESCRIPTION = """ +Selects a node and it's specified widget and outputs the value as a string. +If no node id or title is provided it will use the 'any_input' link and use that node. +To see node id's, enable "Node ID Badge Mode" in main settings. +Alternatively you can search with the node title. Node titles ONLY exist if they +are manually edited! +'widget_name' can be a comma separated list. +The 'any_input' is required for making sure the node you want the value from exists in the workflow. +""" + + def get_widget_value(self, id, widget_name, extra_pnginfo, prompt, unique_id, return_all=False, any_input=None, node_title="", allowed_float_decimals=2): + workflow = extra_pnginfo["workflow"] + #print(json.dumps(workflow, indent=4)) + results = [] + node_id = link_id = subgraph_prefix = None + link_to_node_map = {} + node_to_subgraph_map = {} # Track which subgraph each node belongs to + + # Parse unique_id - handle both "parent:id" format and simple int format + if isinstance(unique_id, str) and ":" in unique_id: + unique_id_parts = unique_id.split(":") + unique_id_int = int(unique_id_parts[-1]) # Use the last part as the node id + subgraph_prefix = ":".join(unique_id_parts[:-1]) # Store the parent prefix (e.g., "14") + else: + unique_id_int = int(unique_id) + + # Collect all nodes from main workflow and subgraphs + all_nodes = list(workflow.get("nodes", [])) + definitions = workflow.get("definitions", {}) + subgraphs = definitions.get("subgraphs", []) + + # Find which main workflow node references each subgraph + subgraph_id_to_parent = {} + for node in workflow.get("nodes", []): + node_type = node.get("type", "") + # Subgraph nodes have a UUID as their type + if "-" in node_type and len(node_type) == 36: # UUID format check + subgraph_id_to_parent[node_type] = node["id"] + + for subgraph in subgraphs: + subgraph_id = subgraph.get("id", "") + parent_node_id = subgraph_id_to_parent.get(subgraph_id) + + subgraph_nodes = subgraph.get("nodes", []) + for node in subgraph_nodes: + # Track which subgraph (parent node) this node belongs to + if parent_node_id is not None: + node_to_subgraph_map[node["id"]] = parent_node_id + all_nodes.extend(subgraph_nodes) + + # Also build link_to_node_map from subgraph links + subgraph_links = subgraph.get("links", []) + for link in subgraph_links: + # link format: [link_id, origin_id, origin_slot, target_id, target_slot, type] + if isinstance(link, dict): + link_to_node_map[link["id"]] = link["origin_id"] + elif isinstance(link, list) and len(link) >= 2: + link_to_node_map[link[0]] = link[1] + + for node in all_nodes: + if node_title: + if "title" in node: + if node["title"] == node_title: + node_id = node["id"] + break + else: + logging.warning("Node title not found.") + elif id != 0: + if node["id"] == id: + node_id = id + break + elif any_input is not None: + if node["type"] == "WidgetToString" and node["id"] == unique_id_int and not link_id: + for node_input in node["inputs"]: + if node_input["name"] == "any_input": + link_id = node_input["link"] + + # Construct a map of links to node IDs for future reference + node_outputs = node.get("outputs", None) + if not node_outputs: + continue + for output in node_outputs: + node_links = output.get("links", None) + if not node_links: + continue + for link in node_links: + link_to_node_map[link] = node["id"] + if link_id and link == link_id: + break + + if link_id: + node_id = link_to_node_map.get(link_id, None) + + if node_id is None: + raise ValueError("No matching node found for the given title or id") + + # Determine the correct prompt key + # First check if the target node is in a subgraph + target_subgraph_parent = node_to_subgraph_map.get(node_id) + + if target_subgraph_parent is not None: + # Target node is in a subgraph, use the parent node id as prefix + prompt_key = f"{target_subgraph_parent}:{node_id}" + elif subgraph_prefix is not None: + # We're in a subgraph, use our prefix + prompt_key = f"{subgraph_prefix}:{node_id}" + else: + prompt_key = str(node_id) + + # Try the prefixed key first, then fall back to just the node_id + if prompt_key not in prompt: + prompt_key = str(node_id) + + if prompt_key not in prompt: + raise KeyError(f"Node not found in prompt. Tried keys: '{target_subgraph_parent}:{node_id}' and '{node_id}'") + + values = prompt[prompt_key] + if "inputs" in values: + inputs = values["inputs"] + + # support comma-separated list and trim whitespace + widget_names = [] + if widget_name: + widget_names = [w.strip() for w in widget_name.split(",") if w.strip()] + + if return_all: + # Format items based on type + formatted_items = [] + for k, v in inputs.items(): + if isinstance(v, float): + item = f"{k}: {v:.{allowed_float_decimals}f}" + else: + item = f"{k}: {str(v)}" + formatted_items.append(item) + results.append(", ".join(formatted_items)) + + # Single widget name (trimmed) + elif len(widget_names) == 1: + name = widget_names[0] + if name in inputs: + v = inputs[name] + if isinstance(v, float): + v = f"{v:.{allowed_float_decimals}f}" + else: + v = str(v) + return (v, ) + else: + raise NameError(f"Widget not found: {node_id}.{name}") + + # Multiple widget names: return "name: value" pairs + elif len(widget_names) > 1: + formatted_items = [] + for name in widget_names: + if name not in inputs: + raise NameError(f"Widget not found: {node_id}.{name}") + v = inputs[name] + if isinstance(v, float): + v = f"{v:.{allowed_float_decimals}f}" + else: + v = str(v) + formatted_items.append(f"{name}: {v}") + return (", ".join(formatted_items), ) + + else: + # No valid widget name provided + raise NameError(f"Widget not found: {node_id}.{widget_name}") + + return (", ".join(results).strip(", "), ) + + +class DummyOut: + + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + "any_input": (IO.ANY, ), + } + } + + RETURN_TYPES = (IO.ANY,) + FUNCTION = "dummy" + CATEGORY = "KJNodes/misc" + OUTPUT_NODE = True + DESCRIPTION = """ +Does nothing, used to trigger generic workflow output. +A way to get previews in the UI without saving anything to disk. +""" + + def dummy(self, any_input): + return (any_input,) + +class FlipSigmasAdjusted: + @classmethod + def INPUT_TYPES(s): + return {"required": + {"sigmas": ("SIGMAS", ), + "divide_by_last_sigma": ("BOOLEAN", {"default": False}), + "divide_by": ("FLOAT", {"default": 1,"min": 1, "max": 255, "step": 0.01}), + "offset_by": ("INT", {"default": 1,"min": -100, "max": 100, "step": 1}), + } + } + RETURN_TYPES = ("SIGMAS", "STRING",) + RETURN_NAMES = ("SIGMAS", "sigmas_string",) + CATEGORY = "KJNodes/noise" + FUNCTION = "get_sigmas_adjusted" + + def get_sigmas_adjusted(self, sigmas, divide_by_last_sigma, divide_by, offset_by): + + sigmas = sigmas.flip(0) + if sigmas[0] == 0: + sigmas[0] = 0.0001 + adjusted_sigmas = sigmas.clone() + #offset sigma + for i in range(1, len(sigmas)): + offset_index = i - offset_by + if 0 <= offset_index < len(sigmas): + adjusted_sigmas[i] = sigmas[offset_index] + else: + adjusted_sigmas[i] = 0.0001 + if adjusted_sigmas[0] == 0: + adjusted_sigmas[0] = 0.0001 + if divide_by_last_sigma: + adjusted_sigmas = adjusted_sigmas / adjusted_sigmas[-1] + + sigma_np_array = adjusted_sigmas.numpy() + array_string = np.array2string(sigma_np_array, precision=2, separator=', ', threshold=np.inf) + adjusted_sigmas = adjusted_sigmas / divide_by + return (adjusted_sigmas, array_string,) + +class CustomSigmas: + @classmethod + def INPUT_TYPES(s): + return {"required": + { + "sigmas_string" :("STRING", {"default": "14.615, 6.475, 3.861, 2.697, 1.886, 1.396, 0.963, 0.652, 0.399, 0.152, 0.029","multiline": True}), + "interpolate_to_steps": ("INT", {"default": 10,"min": 0, "max": 255, "step": 1}), + } + } + RETURN_TYPES = ("SIGMAS",) + RETURN_NAMES = ("SIGMAS",) + CATEGORY = "KJNodes/noise" + FUNCTION = "customsigmas" + DESCRIPTION = """ +Creates a sigmas tensor from a string of comma separated values. +Examples: + +Nvidia's optimized AYS 10 step schedule for SD 1.5: +14.615, 6.475, 3.861, 2.697, 1.886, 1.396, 0.963, 0.652, 0.399, 0.152, 0.029 +SDXL: +14.615, 6.315, 3.771, 2.181, 1.342, 0.862, 0.555, 0.380, 0.234, 0.113, 0.029 +SVD: +700.00, 54.5, 15.886, 7.977, 4.248, 1.789, 0.981, 0.403, 0.173, 0.034, 0.002 +""" + def customsigmas(self, sigmas_string, interpolate_to_steps): + sigmas_list = sigmas_string.split(', ') + sigmas_float_list = [float(sigma) for sigma in sigmas_list] + sigmas_tensor = torch.FloatTensor(sigmas_float_list) + if len(sigmas_tensor) != interpolate_to_steps + 1: + sigmas_tensor = self.loglinear_interp(sigmas_tensor, interpolate_to_steps + 1) + sigmas_tensor[-1] = 0 + return (sigmas_tensor.float(),) + + def loglinear_interp(self, t_steps, num_steps): + """ + Performs log-linear interpolation of a given array of decreasing numbers. + """ + t_steps_np = t_steps.numpy() + + xs = np.linspace(0, 1, len(t_steps_np)) + ys = np.log(t_steps_np[::-1]) + + new_xs = np.linspace(0, 1, num_steps) + new_ys = np.interp(new_xs, xs, ys) + + interped_ys = np.exp(new_ys)[::-1].copy() + interped_ys_tensor = torch.tensor(interped_ys) + return interped_ys_tensor + +class StringToFloatList: + @classmethod + def INPUT_TYPES(s): + return {"required": + { + "string" :("STRING", {"default": "1, 2, 3", "multiline": True}), + } + } + RETURN_TYPES = ("FLOAT",) + RETURN_NAMES = ("FLOAT",) + CATEGORY = "KJNodes/misc" + FUNCTION = "createlist" + + def createlist(self, string): + float_list = [float(x.strip()) for x in string.split(',')] + return (float_list,) + + +class InjectNoiseToLatent: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "latents":("LATENT",), + "strength": ("FLOAT", {"default": 0.1, "min": 0.0, "max": 200.0, "step": 0.0001}), + "noise": ("LATENT",), + "normalize": ("BOOLEAN", {"default": False}), + "average": ("BOOLEAN", {"default": False}), + }, + "optional":{ + "mask": ("MASK", ), + "mix_randn_amount": ("FLOAT", {"default": 0.0, "min": 0.0, "max": 1000.0, "step": 0.001}), + "seed": ("INT", {"default": 123,"min": 0, "max": 0xffffffffffffffff, "step": 1}), + } + } + + RETURN_TYPES = ("LATENT",) + FUNCTION = "injectnoise" + CATEGORY = "KJNodes/noise" + + def injectnoise(self, latents, strength, noise, normalize, average, mix_randn_amount=0, seed=None, mask=None): + samples = latents["samples"].clone().cpu() + noise = noise["samples"].clone().cpu() + if samples.shape != samples.shape: + raise ValueError("InjectNoiseToLatent: Latent and noise must have the same shape") + if average: + noised = (samples + noise) / 2 + else: + noised = samples + noise * strength + if normalize: + noised = noised / noised.std() + if mask is not None: + mask = torch.nn.functional.interpolate(mask.reshape((-1, 1, mask.shape[-2], mask.shape[-1])), size=(noised.shape[2], noised.shape[3]), mode="bilinear") + mask = mask.expand((-1,noised.shape[1],-1,-1)) + if mask.shape[0] < noised.shape[0]: + mask = mask.repeat((noised.shape[0] -1) // mask.shape[0] + 1, 1, 1, 1)[:noised.shape[0]] + noised = mask * noised + (1-mask) * samples + if mix_randn_amount > 0: + if seed is not None: + generator = torch.manual_seed(seed) + rand_noise = torch.randn(noised.size(), dtype=noised.dtype, layout=noised.layout, generator=generator, device="cpu") + noised = noised + (mix_randn_amount * rand_noise) + + return ({"samples":noised},) + +class SoundReactive: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "sound_level": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 99999, "step": 0.01}), + "start_range_hz": ("INT", {"default": 150, "min": 0, "max": 9999, "step": 1}), + "end_range_hz": ("INT", {"default": 2000, "min": 0, "max": 9999, "step": 1}), + "multiplier": ("FLOAT", {"default": 1.0, "min": 0.01, "max": 99999, "step": 0.01}), + "smoothing_factor": ("FLOAT", {"default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01}), + "normalize": ("BOOLEAN", {"default": False}), + }, + } + + RETURN_TYPES = ("FLOAT","INT",) + RETURN_NAMES =("sound_level", "sound_level_int",) + FUNCTION = "react" + CATEGORY = "KJNodes/audio" + DESCRIPTION = """ +Reacts to the sound level of the input. +Uses your browsers sound input options and requires. +Meant to be used with realtime diffusion with autoqueue. +""" + + def react(self, sound_level, start_range_hz, end_range_hz, smoothing_factor, multiplier, normalize): + + sound_level *= multiplier + + if normalize: + sound_level /= 255 + + sound_level_int = int(sound_level) + return (sound_level, sound_level_int, ) + +class GenerateNoise: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "width": ("INT", {"default": 512,"min": 16, "max": 4096, "step": 1}), + "height": ("INT", {"default": 512,"min": 16, "max": 4096, "step": 1}), + "batch_size": ("INT", {"default": 1, "min": 1, "max": 4096}), + "seed": ("INT", {"default": 123,"min": 0, "max": 0xffffffffffffffff, "step": 1}), + "multiplier": ("FLOAT", {"default": 1.0,"min": 0.0, "max": 4096, "step": 0.01}), + "constant_batch_noise": ("BOOLEAN", {"default": False}), + "normalize": ("BOOLEAN", {"default": False}), + }, + "optional": { + "model": ("MODEL", ), + "sigmas": ("SIGMAS", ), + "latent_channels": (['4', '16', ],), + "shape": (["BCHW", "BCTHW","BTCHW",],), + } + } + + RETURN_TYPES = ("LATENT",) + FUNCTION = "generatenoise" + CATEGORY = "KJNodes/noise" + DESCRIPTION = """ +Generates noise for injection or to be used as empty latents on samplers with add_noise off. +""" + + def generatenoise(self, batch_size, width, height, seed, multiplier, constant_batch_noise, normalize, sigmas=None, model=None, latent_channels=4, shape="BCHW"): + + generator = torch.manual_seed(seed) + if shape == "BCHW": + noise = torch.randn([batch_size, int(latent_channels), height // 8, width // 8], dtype=torch.float32, layout=torch.strided, generator=generator, device="cpu") + elif shape == "BCTHW": + noise = torch.randn([1, int(latent_channels), batch_size,height // 8, width // 8], dtype=torch.float32, layout=torch.strided, generator=generator, device="cpu") + elif shape == "BTCHW": + noise = torch.randn([1, batch_size, int(latent_channels), height // 8, width // 8], dtype=torch.float32, layout=torch.strided, generator=generator, device="cpu") + if sigmas is not None: + sigma = sigmas[0] - sigmas[-1] + sigma /= model.model.latent_format.scale_factor + noise *= sigma + + noise *=multiplier + + if normalize: + noise = noise / noise.std() + if constant_batch_noise: + noise = noise[0].repeat(batch_size, 1, 1, 1) + + + return ({"samples":noise}, ) + +def camera_embeddings(elevation, azimuth): + elevation = torch.as_tensor([elevation]) + azimuth = torch.as_tensor([azimuth]) + embeddings = torch.stack( + [ + torch.deg2rad( + (90 - elevation) - (90) + ), # Zero123 polar is 90-elevation + torch.sin(torch.deg2rad(azimuth)), + torch.cos(torch.deg2rad(azimuth)), + torch.deg2rad( + 90 - torch.full_like(elevation, 0) + ), + ], dim=-1).unsqueeze(1) + + return embeddings + +def interpolate_angle(start, end, fraction): + # Calculate the difference in angles and adjust for wraparound if necessary + diff = (end - start + 540) % 360 - 180 + # Apply fraction to the difference + interpolated = start + fraction * diff + # Normalize the result to be within the range of -180 to 180 + return (interpolated + 180) % 360 - 180 + + +class StableZero123_BatchSchedule: + @classmethod + def INPUT_TYPES(s): + return {"required": { "clip_vision": ("CLIP_VISION",), + "init_image": ("IMAGE",), + "vae": ("VAE",), + "width": ("INT", {"default": 256, "min": 16, "max": MAX_RESOLUTION, "step": 8}), + "height": ("INT", {"default": 256, "min": 16, "max": MAX_RESOLUTION, "step": 8}), + "batch_size": ("INT", {"default": 1, "min": 1, "max": 4096}), + "interpolation": (["linear", "ease_in", "ease_out", "ease_in_out"],), + "azimuth_points_string": ("STRING", {"default": "0:(0.0),\n7:(1.0),\n15:(0.0)\n", "multiline": True}), + "elevation_points_string": ("STRING", {"default": "0:(0.0),\n7:(0.0),\n15:(0.0)\n", "multiline": True}), + }} + + RETURN_TYPES = ("CONDITIONING", "CONDITIONING", "LATENT") + RETURN_NAMES = ("positive", "negative", "latent") + FUNCTION = "encode" + CATEGORY = "KJNodes/experimental" + + def encode(self, clip_vision, init_image, vae, width, height, batch_size, azimuth_points_string, elevation_points_string, interpolation): + output = clip_vision.encode_image(init_image) + pooled = output.image_embeds.unsqueeze(0) + pixels = common_upscale(init_image.movedim(-1,1), width, height, "bilinear", "center").movedim(1,-1) + encode_pixels = pixels[:,:,:,:3] + t = vae.encode(encode_pixels) + + def ease_in(t): + return t * t + def ease_out(t): + return 1 - (1 - t) * (1 - t) + def ease_in_out(t): + return 3 * t * t - 2 * t * t * t + + # Parse the azimuth input string into a list of tuples + azimuth_points = [] + azimuth_points_string = azimuth_points_string.rstrip(',\n') + for point_str in azimuth_points_string.split(','): + frame_str, azimuth_str = point_str.split(':') + frame = int(frame_str.strip()) + azimuth = float(azimuth_str.strip()[1:-1]) + azimuth_points.append((frame, azimuth)) + # Sort the points by frame number + azimuth_points.sort(key=lambda x: x[0]) + + # Parse the elevation input string into a list of tuples + elevation_points = [] + elevation_points_string = elevation_points_string.rstrip(',\n') + for point_str in elevation_points_string.split(','): + frame_str, elevation_str = point_str.split(':') + frame = int(frame_str.strip()) + elevation_val = float(elevation_str.strip()[1:-1]) + elevation_points.append((frame, elevation_val)) + # Sort the points by frame number + elevation_points.sort(key=lambda x: x[0]) + + # Index of the next point to interpolate towards + next_point = 1 + next_elevation_point = 1 + + positive_cond_out = [] + positive_pooled_out = [] + negative_cond_out = [] + negative_pooled_out = [] + + #azimuth interpolation + for i in range(batch_size): + # Find the interpolated azimuth for the current frame + while next_point < len(azimuth_points) and i >= azimuth_points[next_point][0]: + next_point += 1 + # If next_point is equal to the length of points, we've gone past the last point + if next_point == len(azimuth_points): + next_point -= 1 # Set next_point to the last index of points + prev_point = max(next_point - 1, 0) # Ensure prev_point is not less than 0 + + # Calculate fraction + if azimuth_points[next_point][0] != azimuth_points[prev_point][0]: # Prevent division by zero + fraction = (i - azimuth_points[prev_point][0]) / (azimuth_points[next_point][0] - azimuth_points[prev_point][0]) + if interpolation == "ease_in": + fraction = ease_in(fraction) + elif interpolation == "ease_out": + fraction = ease_out(fraction) + elif interpolation == "ease_in_out": + fraction = ease_in_out(fraction) + + # Use the new interpolate_angle function + interpolated_azimuth = interpolate_angle(azimuth_points[prev_point][1], azimuth_points[next_point][1], fraction) + else: + interpolated_azimuth = azimuth_points[prev_point][1] + # Interpolate the elevation + next_elevation_point = 1 + while next_elevation_point < len(elevation_points) and i >= elevation_points[next_elevation_point][0]: + next_elevation_point += 1 + if next_elevation_point == len(elevation_points): + next_elevation_point -= 1 + prev_elevation_point = max(next_elevation_point - 1, 0) + + if elevation_points[next_elevation_point][0] != elevation_points[prev_elevation_point][0]: + fraction = (i - elevation_points[prev_elevation_point][0]) / (elevation_points[next_elevation_point][0] - elevation_points[prev_elevation_point][0]) + if interpolation == "ease_in": + fraction = ease_in(fraction) + elif interpolation == "ease_out": + fraction = ease_out(fraction) + elif interpolation == "ease_in_out": + fraction = ease_in_out(fraction) + + interpolated_elevation = interpolate_angle(elevation_points[prev_elevation_point][1], elevation_points[next_elevation_point][1], fraction) + else: + interpolated_elevation = elevation_points[prev_elevation_point][1] + + cam_embeds = camera_embeddings(interpolated_elevation, interpolated_azimuth) + cond = torch.cat([pooled, cam_embeds.repeat((pooled.shape[0], 1, 1))], dim=-1) + + positive_pooled_out.append(t) + positive_cond_out.append(cond) + negative_pooled_out.append(torch.zeros_like(t)) + negative_cond_out.append(torch.zeros_like(pooled)) + + # Concatenate the conditions and pooled outputs + final_positive_cond = torch.cat(positive_cond_out, dim=0) + final_positive_pooled = torch.cat(positive_pooled_out, dim=0) + final_negative_cond = torch.cat(negative_cond_out, dim=0) + final_negative_pooled = torch.cat(negative_pooled_out, dim=0) + + # Structure the final output + final_positive = [[final_positive_cond, {"concat_latent_image": final_positive_pooled}]] + final_negative = [[final_negative_cond, {"concat_latent_image": final_negative_pooled}]] + + latent = torch.zeros([batch_size, 4, height // 8, width // 8]) + return (final_positive, final_negative, {"samples": latent}) + +def linear_interpolate(start, end, fraction): + return start + (end - start) * fraction + +class SV3D_BatchSchedule: + @classmethod + def INPUT_TYPES(s): + return {"required": { "clip_vision": ("CLIP_VISION",), + "init_image": ("IMAGE",), + "vae": ("VAE",), + "width": ("INT", {"default": 576, "min": 16, "max": MAX_RESOLUTION, "step": 8}), + "height": ("INT", {"default": 576, "min": 16, "max": MAX_RESOLUTION, "step": 8}), + "batch_size": ("INT", {"default": 21, "min": 1, "max": 4096}), + "interpolation": (["linear", "ease_in", "ease_out", "ease_in_out"],), + "azimuth_points_string": ("STRING", {"default": "0:(0.0),\n9:(180.0),\n20:(360.0)\n", "multiline": True}), + "elevation_points_string": ("STRING", {"default": "0:(0.0),\n9:(0.0),\n20:(0.0)\n", "multiline": True}), + }} + + RETURN_TYPES = ("CONDITIONING", "CONDITIONING", "LATENT") + RETURN_NAMES = ("positive", "negative", "latent") + FUNCTION = "encode" + CATEGORY = "KJNodes/experimental" + DESCRIPTION = """ +Allow scheduling of the azimuth and elevation conditions for SV3D. +Note that SV3D is still a video model and the schedule needs to always go forward +https://huggingface.co/stabilityai/sv3d +""" + + def encode(self, clip_vision, init_image, vae, width, height, batch_size, azimuth_points_string, elevation_points_string, interpolation): + output = clip_vision.encode_image(init_image) + pooled = output.image_embeds.unsqueeze(0) + pixels = common_upscale(init_image.movedim(-1,1), width, height, "bilinear", "center").movedim(1,-1) + encode_pixels = pixels[:,:,:,:3] + t = vae.encode(encode_pixels) + + def ease_in(t): + return t * t + def ease_out(t): + return 1 - (1 - t) * (1 - t) + def ease_in_out(t): + return 3 * t * t - 2 * t * t * t + + # Parse the azimuth input string into a list of tuples + azimuth_points = [] + azimuth_points_string = azimuth_points_string.rstrip(',\n') + for point_str in azimuth_points_string.split(','): + frame_str, azimuth_str = point_str.split(':') + frame = int(frame_str.strip()) + azimuth = float(azimuth_str.strip()[1:-1]) + azimuth_points.append((frame, azimuth)) + # Sort the points by frame number + azimuth_points.sort(key=lambda x: x[0]) + + # Parse the elevation input string into a list of tuples + elevation_points = [] + elevation_points_string = elevation_points_string.rstrip(',\n') + for point_str in elevation_points_string.split(','): + frame_str, elevation_str = point_str.split(':') + frame = int(frame_str.strip()) + elevation_val = float(elevation_str.strip()[1:-1]) + elevation_points.append((frame, elevation_val)) + # Sort the points by frame number + elevation_points.sort(key=lambda x: x[0]) + + # Index of the next point to interpolate towards + next_point = 1 + next_elevation_point = 1 + elevations = [] + azimuths = [] + # For azimuth interpolation + for i in range(batch_size): + # Find the interpolated azimuth for the current frame + while next_point < len(azimuth_points) and i >= azimuth_points[next_point][0]: + next_point += 1 + if next_point == len(azimuth_points): + next_point -= 1 + prev_point = max(next_point - 1, 0) + + if azimuth_points[next_point][0] != azimuth_points[prev_point][0]: + fraction = (i - azimuth_points[prev_point][0]) / (azimuth_points[next_point][0] - azimuth_points[prev_point][0]) + # Apply the ease function to the fraction + if interpolation == "ease_in": + fraction = ease_in(fraction) + elif interpolation == "ease_out": + fraction = ease_out(fraction) + elif interpolation == "ease_in_out": + fraction = ease_in_out(fraction) + + interpolated_azimuth = linear_interpolate(azimuth_points[prev_point][1], azimuth_points[next_point][1], fraction) + else: + interpolated_azimuth = azimuth_points[prev_point][1] + + # Interpolate the elevation + next_elevation_point = 1 + while next_elevation_point < len(elevation_points) and i >= elevation_points[next_elevation_point][0]: + next_elevation_point += 1 + if next_elevation_point == len(elevation_points): + next_elevation_point -= 1 + prev_elevation_point = max(next_elevation_point - 1, 0) + + if elevation_points[next_elevation_point][0] != elevation_points[prev_elevation_point][0]: + fraction = (i - elevation_points[prev_elevation_point][0]) / (elevation_points[next_elevation_point][0] - elevation_points[prev_elevation_point][0]) + # Apply the ease function to the fraction + if interpolation == "ease_in": + fraction = ease_in(fraction) + elif interpolation == "ease_out": + fraction = ease_out(fraction) + elif interpolation == "ease_in_out": + fraction = ease_in_out(fraction) + + interpolated_elevation = linear_interpolate(elevation_points[prev_elevation_point][1], elevation_points[next_elevation_point][1], fraction) + else: + interpolated_elevation = elevation_points[prev_elevation_point][1] + + azimuths.append(interpolated_azimuth) + elevations.append(interpolated_elevation) + + #print("azimuths", azimuths) + #print("elevations", elevations) + + # Structure the final output + final_positive = [[pooled, {"concat_latent_image": t, "elevation": elevations, "azimuth": azimuths}]] + final_negative = [[torch.zeros_like(pooled), {"concat_latent_image": torch.zeros_like(t),"elevation": elevations, "azimuth": azimuths}]] + + latent = torch.zeros([batch_size, 4, height // 8, width // 8]) + return (final_positive, final_negative, {"samples": latent}) + +class LoadResAdapterNormalization: + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "model": ("MODEL",), + "resadapter_path": (folder_paths.get_filename_list("checkpoints"), ) + } + } + + RETURN_TYPES = ("MODEL",) + FUNCTION = "load_res_adapter" + CATEGORY = "KJNodes/experimental" + + def load_res_adapter(self, model, resadapter_path): + logging.info("ResAdapter: Checking ResAdapter path") + resadapter_full_path = folder_paths.get_full_path("checkpoints", resadapter_path) + if not os.path.exists(resadapter_full_path): + raise Exception("Invalid model path") + else: + logging.info("ResAdapter: Loading ResAdapter normalization weights") + prefix_to_remove = 'diffusion_model.' + model_clone = model.clone() + norm_state_dict = load_torch_file(resadapter_full_path) + new_values = {key[len(prefix_to_remove):]: value for key, value in norm_state_dict.items() if key.startswith(prefix_to_remove)} + logging.info("ResAdapter: Attempting to add patches with ResAdapter weights") + try: + for key in model.model.diffusion_model.state_dict().keys(): + if key in new_values: + original_tensor = model.model.diffusion_model.state_dict()[key] + new_tensor = new_values[key].to(model.model.diffusion_model.dtype) + if original_tensor.shape == new_tensor.shape: + model_clone.add_object_patch(f"diffusion_model.{key}.data", new_tensor) + else: + logging.warning("ResAdapter: No match for key: %s", key) + except: + raise Exception("Could not patch model, this way of patching was added to ComfyUI on March 3rd 2024, is your ComfyUI up to date?") + logging.info("ResAdapter: Added resnet normalization patches") + return (model_clone, ) + +class Superprompt: + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "instruction_prompt": ("STRING", {"default": 'Expand the following prompt to add more detail', "multiline": True}), + "prompt": ("STRING", {"default": '', "multiline": True, "forceInput": True}), + "max_new_tokens": ("INT", {"default": 128, "min": 1, "max": 4096, "step": 1}), + } + } + + RETURN_TYPES = ("STRING",) + FUNCTION = "process" + CATEGORY = "KJNodes/text" + DESCRIPTION = """ +# SuperPrompt +A T5 model fine-tuned on the SuperPrompt dataset for +upsampling text prompts to more detailed descriptions. +Meant to be used as a pre-generation step for text-to-image +models that benefit from more detailed prompts. +https://huggingface.co/roborovski/superprompt-v1 +""" + + def process(self, instruction_prompt, prompt, max_new_tokens): + device = model_management.get_torch_device() + from transformers import T5Tokenizer, T5ForConditionalGeneration + + checkpoint_path = os.path.join(script_directory, "models","superprompt-v1") + if not os.path.exists(checkpoint_path): + logging.info(f"Downloading model to: {checkpoint_path}") + from huggingface_hub import snapshot_download + snapshot_download(repo_id="roborovski/superprompt-v1", + local_dir=checkpoint_path, + local_dir_use_symlinks=False) + tokenizer = T5Tokenizer.from_pretrained("google/flan-t5-small", legacy=False) + + model = T5ForConditionalGeneration.from_pretrained(checkpoint_path, device_map=device) + model.to(device) + input_text = instruction_prompt + ": " + prompt + + input_ids = tokenizer(input_text, return_tensors="pt").input_ids.to(device) + outputs = model.generate(input_ids, max_new_tokens=max_new_tokens) + out = (tokenizer.decode(outputs[0])) + out = out.replace('', '') + out = out.replace('', '') + + return (out, ) + + +class CameraPoseVisualizer: + + @classmethod + def INPUT_TYPES(s): + return {"required": { + "pose_file_path": ("STRING", {"default": '', "multiline": False}), + "base_xval": ("FLOAT", {"default": 0.2,"min": 0, "max": 100, "step": 0.01}), + "zval": ("FLOAT", {"default": 0.3,"min": 0, "max": 100, "step": 0.01}), + "scale": ("FLOAT", {"default": 1.0,"min": 0.01, "max": 10.0, "step": 0.01}), + "use_exact_fx": ("BOOLEAN", {"default": False}), + "relative_c2w": ("BOOLEAN", {"default": True}), + "use_viewer": ("BOOLEAN", {"default": False}), + }, + "optional": { + "cameractrl_poses": ("CAMERACTRL_POSES", {"default": None}), + } + } + + RETURN_TYPES = ("IMAGE",) + FUNCTION = "plot" + CATEGORY = "KJNodes/misc" + DESCRIPTION = """ +Visualizes the camera poses, from Animatediff-Evolved CameraCtrl Pose +or a .txt file with RealEstate camera intrinsics and coordinates, in a 3D plot. +""" + + def plot(self, pose_file_path, scale, base_xval, zval, use_exact_fx, relative_c2w, use_viewer, cameractrl_poses=None): + import matplotlib as mpl + import matplotlib.pyplot as plt + from torchvision.transforms import ToTensor + + x_min = -2.0 * scale + x_max = 2.0 * scale + y_min = -2.0 * scale + y_max = 2.0 * scale + z_min = -2.0 * scale + z_max = 2.0 * scale + plt.rcParams['text.color'] = '#999999' + self.fig = plt.figure(figsize=(18, 7)) + self.fig.patch.set_facecolor('#353535') + self.ax = self.fig.add_subplot(projection='3d') + self.ax.set_facecolor('#353535') # Set the background color here + self.ax.grid(color='#999999', linestyle='-', linewidth=0.5) + self.plotly_data = None # plotly data traces + self.ax.set_aspect("auto") + self.ax.set_xlim(x_min, x_max) + self.ax.set_ylim(y_min, y_max) + self.ax.set_zlim(z_min, z_max) + self.ax.set_xlabel('x', color='#999999') + self.ax.set_ylabel('y', color='#999999') + self.ax.set_zlabel('z', color='#999999') + for text in self.ax.get_xticklabels() + self.ax.get_yticklabels() + self.ax.get_zticklabels(): + text.set_color('#999999') + logging.info('initialize camera pose visualizer') + + if pose_file_path != "": + with open(pose_file_path, 'r') as f: + poses = f.readlines() + w2cs = [np.asarray([float(p) for p in pose.strip().split(' ')[7:]]).reshape(3, 4) for pose in poses[1:]] + fxs = [float(pose.strip().split(' ')[1]) for pose in poses[1:]] + #print(poses) + elif cameractrl_poses is not None: + poses = cameractrl_poses + w2cs = [np.array(pose[7:]).reshape(3, 4) for pose in cameractrl_poses] + fxs = [pose[1] for pose in cameractrl_poses] + else: + raise ValueError("Please provide either pose_file_path or cameractrl_poses") + + total_frames = len(w2cs) + transform_matrix = np.asarray([[1, 0, 0, 0], [0, 0, 1, 0], [0, -1, 0, 0], [0, 0, 0, 1]]).reshape(4, 4) + last_row = np.zeros((1, 4)) + last_row[0, -1] = 1.0 + + w2cs = [np.concatenate((w2c, last_row), axis=0) for w2c in w2cs] + c2ws = self.get_c2w(w2cs, transform_matrix, relative_c2w) + + for frame_idx, c2w in enumerate(c2ws): + self.extrinsic2pyramid(c2w, frame_idx / total_frames, hw_ratio=1/1, base_xval=base_xval, + zval=(fxs[frame_idx] if use_exact_fx else zval)) + + # Create the colorbar + cmap = mpl.cm.rainbow + norm = mpl.colors.Normalize(vmin=0, vmax=total_frames) + colorbar = self.fig.colorbar(mpl.cm.ScalarMappable(norm=norm, cmap=cmap), ax=self.ax, orientation='vertical') + + # Change the colorbar label + colorbar.set_label('Frame', color='#999999') # Change the label and its color + + # Change the tick colors + colorbar.ax.yaxis.set_tick_params(colors='#999999') # Change the tick color + + # Change the tick frequency + # Assuming you want to set the ticks at every 10th frame + ticks = np.arange(0, total_frames, 10) + colorbar.ax.yaxis.set_ticks(ticks) + + plt.title('') + plt.draw() + buf = BytesIO() + plt.savefig(buf, format='png', bbox_inches='tight', pad_inches=0) + buf.seek(0) + img = Image.open(buf) + tensor_img = ToTensor()(img) + buf.close() + tensor_img = tensor_img.permute(1, 2, 0).unsqueeze(0) + if use_viewer: + time.sleep(1) + plt.show() + return (tensor_img,) + + def extrinsic2pyramid(self, extrinsic, color_map='red', hw_ratio=1/1, base_xval=1, zval=3): + import matplotlib.pyplot as plt + from mpl_toolkits.mplot3d.art3d import Poly3DCollection + vertex_std = np.array([[0, 0, 0, 1], + [base_xval, -base_xval * hw_ratio, zval, 1], + [base_xval, base_xval * hw_ratio, zval, 1], + [-base_xval, base_xval * hw_ratio, zval, 1], + [-base_xval, -base_xval * hw_ratio, zval, 1]]) + vertex_transformed = vertex_std @ extrinsic.T + meshes = [[vertex_transformed[0, :-1], vertex_transformed[1][:-1], vertex_transformed[2, :-1]], + [vertex_transformed[0, :-1], vertex_transformed[2, :-1], vertex_transformed[3, :-1]], + [vertex_transformed[0, :-1], vertex_transformed[3, :-1], vertex_transformed[4, :-1]], + [vertex_transformed[0, :-1], vertex_transformed[4, :-1], vertex_transformed[1, :-1]], + [vertex_transformed[1, :-1], vertex_transformed[2, :-1], vertex_transformed[3, :-1], vertex_transformed[4, :-1]]] + + color = color_map if isinstance(color_map, str) else plt.cm.rainbow(color_map) + + self.ax.add_collection3d( + Poly3DCollection(meshes, facecolors=color, linewidths=0.3, edgecolors=color, alpha=0.25)) + + def customize_legend(self, list_label): + from matplotlib.patches import Patch + import matplotlib.pyplot as plt + list_handle = [] + for idx, label in enumerate(list_label): + color = plt.cm.rainbow(idx / len(list_label)) + patch = Patch(color=color, label=label) + list_handle.append(patch) + plt.legend(loc='right', bbox_to_anchor=(1.8, 0.5), handles=list_handle) + + def get_c2w(self, w2cs, transform_matrix, relative_c2w): + if relative_c2w: + target_cam_c2w = np.array([ + [1, 0, 0, 0], + [0, 1, 0, 0], + [0, 0, 1, 0], + [0, 0, 0, 1] + ]) + abs2rel = target_cam_c2w @ w2cs[0] + ret_poses = [target_cam_c2w, ] + [abs2rel @ np.linalg.inv(w2c) for w2c in w2cs[1:]] + else: + ret_poses = [np.linalg.inv(w2c) for w2c in w2cs] + ret_poses = [transform_matrix @ x for x in ret_poses] + return np.array(ret_poses, dtype=np.float32) + + + +class CheckpointPerturbWeights: + + @classmethod + def INPUT_TYPES(s): + return {"required": { + "model": ("MODEL",), + "joint_blocks": ("FLOAT", {"default": 0.02, "min": 0.001, "max": 10.0, "step": 0.001}), + "final_layer": ("FLOAT", {"default": 0.02, "min": 0.001, "max": 10.0, "step": 0.001}), + "rest_of_the_blocks": ("FLOAT", {"default": 0.02, "min": 0.001, "max": 10.0, "step": 0.001}), + "seed": ("INT", {"default": 123,"min": 0, "max": 0xffffffffffffffff, "step": 1}), + } + } + RETURN_TYPES = ("MODEL",) + FUNCTION = "mod" + OUTPUT_NODE = True + + CATEGORY = "KJNodes/experimental" + + def mod(self, seed, model, joint_blocks, final_layer, rest_of_the_blocks): + import copy + torch.manual_seed(seed) + torch.cuda.manual_seed_all(seed) + device = model_management.get_torch_device() + model_copy = copy.deepcopy(model) + model_copy.model.to(device) + keys = model_copy.model.diffusion_model.state_dict().keys() + + dict = {} + for key in keys: + dict[key] = model_copy.model.diffusion_model.state_dict()[key] + + pbar = ProgressBar(len(keys)) + for k in keys: + v = dict[k] + logging.info(f'{k}: {v.std()}') + if k.startswith('joint_blocks'): + multiplier = joint_blocks + elif k.startswith('final_layer'): + multiplier = final_layer + else: + multiplier = rest_of_the_blocks + dict[k] += torch.normal(torch.zeros_like(v) * v.mean(), torch.ones_like(v) * v.std() * multiplier).to(device) + pbar.update(1) + model_copy.model.diffusion_model.load_state_dict(dict) + return model_copy, + +class DifferentialDiffusionAdvanced(): + @classmethod + def INPUT_TYPES(s): + return {"required": { + "model": ("MODEL", ), + "samples": ("LATENT",), + "mask": ("MASK",), + "multiplier": ("FLOAT", {"default": 1.0, "min": -10.0, "max": 10.0, "step": 0.001}), + }} + RETURN_TYPES = ("MODEL", "LATENT") + FUNCTION = "apply" + CATEGORY = "_for_testing" + INIT = False + + def apply(self, model, samples, mask, multiplier): + self.multiplier = multiplier + model = model.clone() + model.set_model_denoise_mask_function(self.forward) + s = samples.copy() + s["noise_mask"] = mask.reshape((-1, 1, mask.shape[-2], mask.shape[-1])) + return (model, s) + + def forward(self, sigma: torch.Tensor, denoise_mask: torch.Tensor, extra_options: dict): + model = extra_options["model"] + step_sigmas = extra_options["sigmas"] + sigma_to = model.inner_model.model_sampling.sigma_min + if step_sigmas[-1] > sigma_to: + sigma_to = step_sigmas[-1] + sigma_from = step_sigmas[0] + + ts_from = model.inner_model.model_sampling.timestep(sigma_from) + ts_to = model.inner_model.model_sampling.timestep(sigma_to) + current_ts = model.inner_model.model_sampling.timestep(sigma[0]) + + threshold = (current_ts - ts_to) / (ts_from - ts_to) / self.multiplier + + return (denoise_mask >= threshold).to(denoise_mask.dtype) + +class FluxBlockLoraSelect: + def __init__(self): + self.loaded_lora = None + + @classmethod + def INPUT_TYPES(s): + arg_dict = {} + argument = ("FLOAT", {"default": 0.0, "min": 0.0, "max": 1000.0, "step": 0.01}) + + for i in range(19): + arg_dict["double_blocks.{}.".format(i)] = argument + + for i in range(38): + arg_dict["single_blocks.{}.".format(i)] = argument + + return {"required": arg_dict} + + RETURN_TYPES = ("SELECTEDDITBLOCKS", ) + RETURN_NAMES = ("blocks", ) + OUTPUT_TOOLTIPS = ("The modified diffusion model.",) + FUNCTION = "load_lora" + + CATEGORY = "KJNodes/experimental" + DESCRIPTION = "Select individual block alpha values, value of 0 removes the block altogether" + + def load_lora(self, **kwargs): + return (kwargs,) + +class HunyuanVideoBlockLoraSelect: + @classmethod + def INPUT_TYPES(s): + arg_dict = {} + argument = ("FLOAT", {"default": 0.0, "min": 0.0, "max": 1000.0, "step": 0.01}) + + for i in range(20): + arg_dict["double_blocks.{}.".format(i)] = argument + + for i in range(40): + arg_dict["single_blocks.{}.".format(i)] = argument + + return {"required": arg_dict} + + RETURN_TYPES = ("SELECTEDDITBLOCKS", ) + RETURN_NAMES = ("blocks", ) + OUTPUT_TOOLTIPS = ("The modified diffusion model.",) + FUNCTION = "load_lora" + + CATEGORY = "KJNodes/hunyuanvideo" + DESCRIPTION = "Select individual block alpha values, value of 0 removes the block altogether" + + def load_lora(self, **kwargs): + return (kwargs,) + +class Wan21BlockLoraSelect: + @classmethod + def INPUT_TYPES(s): + arg_dict = {} + argument = ("FLOAT", {"default": 0.0, "min": 0.0, "max": 1000.0, "step": 0.01}) + + for i in range(40): + arg_dict["blocks.{}.".format(i)] = argument + + return {"required": arg_dict} + + RETURN_TYPES = ("SELECTEDDITBLOCKS", ) + RETURN_NAMES = ("blocks", ) + OUTPUT_TOOLTIPS = ("The modified diffusion model.",) + FUNCTION = "load_lora" + + CATEGORY = "KJNodes/wan" + DESCRIPTION = "Select individual block alpha values, value of 0 removes the block altogether" + + def load_lora(self, **kwargs): + return (kwargs,) + +class LTX2BlockLoraSelect: + @classmethod + def INPUT_TYPES(s): + arg_dict = {} + argument = ("FLOAT", {"default": 0.0, "min": 0.0, "max": 1000.0, "step": 0.01}) + + for i in range(48): + arg_dict["blocks.{}.".format(i)] = argument + + return {"required": arg_dict} + + RETURN_TYPES = ("SELECTEDDITBLOCKS", ) + RETURN_NAMES = ("blocks", ) + OUTPUT_TOOLTIPS = ("The modified diffusion model.",) + FUNCTION = "load_lora" + + CATEGORY = "KJNodes/ltxv" + DESCRIPTION = "Select individual block alpha values, value of 0 removes the block altogether" + + def load_lora(self, **kwargs): + return (kwargs,) + + +class DiTBlockLoraLoader: + def __init__(self): + self.loaded_lora = None + + @classmethod + def INPUT_TYPES(s): + return {"required": { + "model": ("MODEL", {"tooltip": "The diffusion model the LoRA will be applied to."}), + "strength_model": ("FLOAT", {"default": 1.0, "min": -100.0, "max": 100.0, "step": 0.01, "tooltip": "How strongly to modify the diffusion model. This value can be negative."}), + + }, + "optional": { + "lora_name": (folder_paths.get_filename_list("loras"), {"tooltip": "The name of the LoRA."}), + "opt_lora_path": ("STRING", {"forceInput": True, "tooltip": "Absolute path of the LoRA."}), + "blocks": ("SELECTEDDITBLOCKS",), + } + } + + RETURN_TYPES = ("MODEL", "STRING", ) + RETURN_NAMES = ("model", "rank", ) + OUTPUT_TOOLTIPS = ("The modified diffusion model.", "possible rank of the LoRA.") + FUNCTION = "load_lora" + CATEGORY = "KJNodes/lora" + + def load_lora(self, model, strength_model, lora_name=None, opt_lora_path=None, blocks=None): + + import comfy.lora + + if opt_lora_path: + lora_path = opt_lora_path + else: + 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: + self.loaded_lora = None + + if lora is None: + lora = load_torch_file(lora_path, safe_load=True) + self.loaded_lora = (lora_path, lora) + + # Find the first key that ends with "weight" + rank = "unknown" + weight_key = next((key for key in lora.keys() if key.endswith('weight')), None) + # Print the shape of the value corresponding to the key + if weight_key: + logging.info(f"Shape of the first 'weight' key ({weight_key}): {lora[weight_key].shape}") + rank = str(lora[weight_key].shape[0]) + else: + logging.warning("No key ending with 'weight' found.") + rank = "Couldn't find rank" + self.loaded_lora = (lora_path, lora) + + key_map = {} + if model is not None: + key_map = comfy.lora.model_lora_keys_unet(model.model, key_map) + + loaded = comfy.lora.load_lora(lora, key_map) + + if blocks is not None: + keys_to_delete = [] + + for block in blocks: + for key in list(loaded.keys()): + match = False + if isinstance(key, str) and block in key: + match = True + elif isinstance(key, tuple): + for k in key: + if block in k: + match = True + break + + if match: + ratio = blocks[block] + if ratio == 0: + keys_to_delete.append(key) + else: + # Only modify LoRA adapters, skip diff tuples + value = loaded[key] + if hasattr(value, 'weights'): + logging.info(f"Modifying LoRA adapter for key: {key}") + weights_list = list(value.weights) + weights_list[2] = ratio + loaded[key].weights = tuple(weights_list) + else: + logging.info(f"Skipping non-LoRA entry for key: {key}") + + for key in keys_to_delete: + del loaded[key] + + logging.info("loading lora keys:") + for key, value in loaded.items(): + if hasattr(value, 'weights'): + logging.info(f"Key: {key}, Alpha: {value.weights[2]}") + else: + logging.info(f"Key: {key}, Type: {type(value)}") + + if model is not None: + new_modelpatcher = model.clone() + k = new_modelpatcher.add_patches(loaded, strength_model) + + k = set(k) + for x in loaded: + if (x not in k): + logging.warning(f"NOT LOADED {x}") + + return (new_modelpatcher, rank) + +class CustomControlNetWeightsFluxFromList: + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "list_of_floats": ("FLOAT", {"forceInput": True}, ), + }, + "optional": { + "uncond_multiplier": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}, ), + "cn_extras": ("CN_WEIGHTS_EXTRAS",), + "autosize": ("ACNAUTOSIZE", {"padding": 0}), + } + } + + RETURN_TYPES = ("CONTROL_NET_WEIGHTS", "TIMESTEP_KEYFRAME",) + RETURN_NAMES = ("CN_WEIGHTS", "TK_SHORTCUT") + FUNCTION = "load_weights" + DESCRIPTION = "Creates controlnet weights from a list of floats for Advanced-ControlNet" + + CATEGORY = "KJNodes/controlnet" + + def load_weights(self, list_of_floats: list[float], + uncond_multiplier: float=1.0, cn_extras: dict[str]={}): + + adv_control = importlib.import_module("ComfyUI-Advanced-ControlNet.adv_control") + ControlWeights = adv_control.utils.ControlWeights + TimestepKeyframeGroup = adv_control.utils.TimestepKeyframeGroup + TimestepKeyframe = adv_control.utils.TimestepKeyframe + + weights = ControlWeights.controlnet(weights_input=list_of_floats, uncond_multiplier=uncond_multiplier, extras=cn_extras) + logging.info(weights.weights_input) + return (weights, TimestepKeyframeGroup.default(TimestepKeyframe(control_weights=weights))) + +SHAKKERLABS_UNION_CONTROLNET_TYPES = { + "canny": 0, + "tile": 1, + "depth": 2, + "blur": 3, + "pose": 4, + "gray": 5, + "low quality": 6, +} + +class SetShakkerLabsUnionControlNetType: + @classmethod + def INPUT_TYPES(s): + return {"required": {"control_net": ("CONTROL_NET", ), + "type": (["auto"] + list(SHAKKERLABS_UNION_CONTROLNET_TYPES.keys()),) + }} + + CATEGORY = "conditioning/controlnet" + RETURN_TYPES = ("CONTROL_NET",) + + FUNCTION = "set_controlnet_type" + + def set_controlnet_type(self, control_net, type): + control_net = control_net.copy() + type_number = SHAKKERLABS_UNION_CONTROLNET_TYPES.get(type, -1) + if type_number >= 0: + control_net.set_extra_arg("control_type", [type_number]) + else: + control_net.set_extra_arg("control_type", []) + + return (control_net,) + +class ModelSaveKJ: + def __init__(self): + self.output_dir = folder_paths.get_output_directory() + + @classmethod + def INPUT_TYPES(s): + return {"required": { "model": ("MODEL",), + "filename_prefix": ("STRING", {"default": "diffusion_models/ComfyUI"}), + "model_key_prefix": ("STRING", {"default": "model.diffusion_model."}), + }, + "hidden": {"prompt": "PROMPT", "extra_pnginfo": "EXTRA_PNGINFO"},} + RETURN_TYPES = () + FUNCTION = "save" + OUTPUT_NODE = True + + CATEGORY = "advanced/model_merging" + + def save(self, model, filename_prefix, model_key_prefix, prompt=None, extra_pnginfo=None): + full_output_folder, filename, counter, subfolder, filename_prefix = folder_paths.get_save_image_path(filename_prefix, self.output_dir) + + output_checkpoint = f"{filename}_{counter:05}_.safetensors" + output_checkpoint = os.path.join(full_output_folder, output_checkpoint) + + load_models = [model] + + model_management.load_models_gpu(load_models, force_patch_weights=True) + default_prefix = "model.diffusion_model." + + sd = model.state_dict_for_saving(None, None, None) + + new_sd = {} + for k in sd: + if k.startswith(default_prefix): + new_key = model_key_prefix + k[len(default_prefix):] + else: + new_key = k # In case the key doesn't start with the default prefix, keep it unchanged + t = sd[k] + if not t.is_contiguous(): + t = t.contiguous() + new_sd[new_key] = t + logging.info(f"full_output_folder: {full_output_folder}") + if not os.path.exists(full_output_folder): + os.makedirs(full_output_folder) + save_torch_file(new_sd, os.path.join(full_output_folder, output_checkpoint)) + return {} + +class StyleModelApplyAdvanced: + @classmethod + def INPUT_TYPES(s): + return {"required": {"conditioning": ("CONDITIONING", ), + "style_model": ("STYLE_MODEL", ), + "clip_vision_output": ("CLIP_VISION_OUTPUT", ), + "strength": ("FLOAT", {"default": 1.0, "min": -10.0, "max": 10.0, "step": 0.001}), + }} + RETURN_TYPES = ("CONDITIONING",) + FUNCTION = "apply_stylemodel" + CATEGORY = "KJNodes/experimental" + DESCRIPTION = "StyleModelApply but with strength parameter" + + def apply_stylemodel(self, clip_vision_output, style_model, conditioning, strength=1.0): + cond = style_model.get_cond(clip_vision_output).flatten(start_dim=0, end_dim=1).unsqueeze(dim=0) + cond = strength * cond + c = [] + for t in conditioning: + n = [torch.cat((t[0], cond), dim=1), t[1].copy()] + c.append(n) + return (c, ) + +class AudioConcatenate: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "audio1": ("AUDIO",), + "audio2": ("AUDIO",), + "direction": ( + [ 'right', + 'left', + ], + { + "default": 'right' + }), + }} + + RETURN_TYPES = ("AUDIO",) + FUNCTION = "concanate" + CATEGORY = "KJNodes/audio" + DESCRIPTION = """ +Concatenates the audio1 to audio2 in the specified direction. +""" + + def concanate(self, audio1, audio2, direction): + sample_rate_1 = audio1["sample_rate"] + sample_rate_2 = audio2["sample_rate"] + if sample_rate_1 != sample_rate_2: + raise Exception("Sample rates of the two audios do not match") + + waveform_1 = audio1["waveform"] + waveform_2 = audio2["waveform"] + + # Concatenate based on the specified direction + if direction == 'right': + concatenated_audio = torch.cat((waveform_1, waveform_2), dim=2) # Concatenate along width + elif direction == 'left': + concatenated_audio= torch.cat((waveform_2, waveform_1), dim=2) # Concatenate along width + return ({"waveform": concatenated_audio, "sample_rate": sample_rate_1},) + +class LeapfusionHunyuanI2V: + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "model": ("MODEL",), + "latent": ("LATENT",), + "index": ("INT", {"default": 0, "min": -1, "max": 1000, "step": 1,"tooltip": "The index of the latent to be replaced. 0 for first frame and -1 for last"}), + "start_percent": ("FLOAT", {"default": 0.0, "min": 0.0, "max": 1.0, "step": 0.01, "tooltip": "The start percentage of steps to apply"}), + "end_percent": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01, "tooltip": "The end percentage of steps to apply"}), + "strength": ("FLOAT", {"default": 1.0, "min": -10.0, "max": 10.0, "step": 0.001}), + } + } + + RETURN_TYPES = ("MODEL",) + FUNCTION = "patch" + + CATEGORY = "KJNodes/hunyuanvideo" + + def patch(self, model, latent, index, strength, start_percent, end_percent): + + def outer_wrapper(samples, index, start_percent, end_percent): + def unet_wrapper(apply_model, args): + steps = args["c"]["transformer_options"]["sample_sigmas"] + inp, timestep, c = args["input"], args["timestep"], args["c"] + matched_step_index = (steps == timestep).nonzero() + if len(matched_step_index) > 0: + current_step_index = matched_step_index.item() + else: + for i in range(len(steps) - 1): + # walk from beginning of steps until crossing the timestep + if (steps[i] - timestep[0]) * (steps[i + 1] - timestep[0]) <= 0: + current_step_index = i + break + else: + current_step_index = 0 + current_percent = current_step_index / (len(steps) - 1) + if samples is not None: + if start_percent <= current_percent <= end_percent: + inp[:, :, [index], :, :] = samples[:, :, [0], :, :].to(inp) + else: + inp[:, :, [index], :, :] = torch.zeros(1) + return apply_model(inp, timestep, **c) + return unet_wrapper + + samples = latent["samples"] * 0.476986 * strength + m = model.clone() + m.set_model_unet_function_wrapper(outer_wrapper(samples, index, start_percent, end_percent)) + + return (m,) + +class ImageNoiseAugmentation: + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "image": ("IMAGE",), + "noise_aug_strength": ("FLOAT", {"default": None, "min": 0.0, "max": 100.0, "step": 0.001}), + "seed": ("INT", {"default": 123,"min": 0, "max": 0xffffffffffffffff, "step": 1}), + } + } + + RETURN_TYPES = ("IMAGE",) + FUNCTION = "add_noise" + CATEGORY = "KJNodes/image" + DESCRIPTION = """ + Add noise to an image. + """ + + def add_noise(self, image, noise_aug_strength, seed): + torch.manual_seed(seed) + sigma = torch.ones((image.shape[0],)).to(image.device, image.dtype) * noise_aug_strength + image_noise = torch.randn_like(image) * sigma[:, None, None, None] + image_noise = torch.where(image==-1, torch.zeros_like(image), image_noise) + image_out = image + image_noise + return image_out, + +class VAELoaderKJ: + video_taes = ["taehv", "lighttaew2_2", "lighttaew2_1", "lighttaehy1_5"] + image_taes = ["taesd", "taesdxl", "taesd3", "taef1"] + @staticmethod + def vae_list(s): + vaes = folder_paths.get_filename_list("vae") + approx_vaes = folder_paths.get_filename_list("vae_approx") + sdxl_taesd_enc = False + sdxl_taesd_dec = False + sd1_taesd_enc = False + sd1_taesd_dec = False + sd3_taesd_enc = False + sd3_taesd_dec = False + f1_taesd_enc = False + f1_taesd_dec = False + + for v in approx_vaes: + if v.startswith("taesd_decoder."): + sd1_taesd_dec = True + elif v.startswith("taesd_encoder."): + sd1_taesd_enc = True + elif v.startswith("taesdxl_decoder."): + sdxl_taesd_dec = True + elif v.startswith("taesdxl_encoder."): + sdxl_taesd_enc = True + elif v.startswith("taesd3_decoder."): + sd3_taesd_dec = True + elif v.startswith("taesd3_encoder."): + sd3_taesd_enc = True + elif v.startswith("taef1_encoder."): + f1_taesd_dec = True + elif v.startswith("taef1_decoder."): + f1_taesd_enc = True + else: + for tae in s.video_taes: + if v.startswith(tae): + vaes.append(v) + + if sd1_taesd_dec and sd1_taesd_enc: + vaes.append("taesd") + if sdxl_taesd_dec and sdxl_taesd_enc: + vaes.append("taesdxl") + if sd3_taesd_dec and sd3_taesd_enc: + vaes.append("taesd3") + if f1_taesd_dec and f1_taesd_enc: + vaes.append("taef1") + vaes.append("pixel_space") + return vaes + + @staticmethod + def load_taesd(name): + sd = {} + approx_vaes = folder_paths.get_filename_list("vae_approx") + + 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 = 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 = load_torch_file(folder_paths.get_full_path_or_raise("vae_approx", decoder)) + for k in dec: + sd["taesd_decoder.{}".format(k)] = dec[k] + + if name == "taesd": + sd["vae_scale"] = torch.tensor(0.18215) + sd["vae_shift"] = torch.tensor(0.0) + elif name == "taesdxl": + sd["vae_scale"] = torch.tensor(0.13025) + sd["vae_shift"] = torch.tensor(0.0) + elif name == "taesd3": + sd["vae_scale"] = torch.tensor(1.5305) + sd["vae_shift"] = torch.tensor(0.0609) + elif name == "taef1": + sd["vae_scale"] = torch.tensor(0.3611) + sd["vae_shift"] = torch.tensor(0.1159) + return sd + + @classmethod + def INPUT_TYPES(s): + return { + "required": { "vae_name": (s.vae_list(s), ), + "device": (["main_device", "cpu"],), + "weight_dtype": (["bf16", "fp16", "fp32" ],), + } + } + + RETURN_TYPES = ("VAE",) + FUNCTION = "load_vae" + CATEGORY = "KJNodes/vae" + + def load_vae(self, vae_name, device, weight_dtype): + from comfy.sd import VAE + metadata = None + dtype = {"bf16": torch.bfloat16, "fp16": torch.float16, "fp32": torch.float32}[weight_dtype] + if device == "main_device": + device = model_management.get_torch_device() + elif device == "cpu": + device = torch.device("cpu") + + if vae_name == "pixel_space": + sd = {} + sd["pixel_space_vae"] = torch.tensor(1.0) + elif vae_name in self.image_taes: + sd = self.load_taesd(vae_name) + else: + if os.path.splitext(vae_name)[0] in self.video_taes: + vae_path = folder_paths.get_full_path_or_raise("vae_approx", vae_name) + else: + vae_path = folder_paths.get_full_path_or_raise("vae", vae_name) + sd, metadata = load_torch_file(vae_path, return_metadata=True) + + if "vocoder.conv_post.weight" in sd or "vocoder.vocoder.conv_post.weight" in sd: + from comfy.ldm.lightricks.vae.audio_vae import AudioVAE + vae = AudioVAE(sd, metadata) + else: + vae = VAE(sd=sd, device=device, dtype=dtype, metadata=metadata) + vae.throw_exception_if_invalid() + return (vae,) + +from comfy.samplers import sampling_function, CFGGuider +class Guider_ScheduledCFG(CFGGuider): + + def set_cfg(self, cfg, start_percent, end_percent): + self.cfg = cfg + self.start_percent = start_percent + self.end_percent = end_percent + + def predict_noise(self, x, timestep, model_options={}, seed=None): + steps = model_options["transformer_options"]["sample_sigmas"] + if isinstance(timestep, torch.Tensor): + timestep_value = timestep.reshape(-1)[0].to(steps) + else: + timestep_value = torch.tensor(timestep, device=steps.device, dtype=steps.dtype) + matched_step_index = torch.isclose(steps, timestep_value).nonzero() + assert not (isinstance(self.cfg, list) and len(self.cfg) != (len(steps) - 1)), "cfg list length must match step count" + if len(matched_step_index) > 0: + current_step_index = matched_step_index.item() + else: + for i in range(len(steps) - 1): + # walk from beginning of steps until crossing the timestep + if (steps[i] - timestep_value) * (steps[i + 1] - timestep_value) <= 0: + current_step_index = i + break + else: + current_step_index = 0 + current_percent = current_step_index / (len(steps) - 1) + + if self.start_percent <= current_percent <= self.end_percent: + if isinstance(self.cfg, list): + cfg = self.cfg[current_step_index] + else: + cfg = self.cfg + uncond = self.conds.get("negative", None) + else: + uncond = None + cfg = 1.0 + + return sampling_function(self.inner_model, x, timestep, uncond, self.conds.get("positive", None), cfg, model_options=model_options, seed=seed) + +class ScheduledCFGGuidance: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "model": ("MODEL",), + "positive": ("CONDITIONING", ), + "negative": ("CONDITIONING", ), + "cfg": ("FLOAT", {"default": 6.0, "min": 0.0, "max": 100.0, "step": 0.01}), + "start_percent": ("FLOAT", {"default": 0.0, "min": 0.0, "max": 1.0, "step":0.01}), + "end_percent": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step":0.01}), + }, + } + RETURN_TYPES = ("GUIDER",) + FUNCTION = "get_guider" + CATEGORY = "KJNodes/experimental" + DESCRiPTION = """ +CFG Guider that allows for scheduled CFG changes over steps, the steps outside the range will use CFG 1.0 thus being processed faster. +cfg input can be a list of floats matching step count, or a single float for all steps. +""" + + def get_guider(self, model, cfg, positive, negative, start_percent, end_percent): + guider = Guider_ScheduledCFG(model) + guider.set_conds(positive, negative) + guider.set_cfg(cfg, start_percent, end_percent) + return (guider, ) + + +class ApplyRifleXRoPE_WanVideo: + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "model": ("MODEL",), + "latent": ("LATENT", {"tooltip": "Only used to get the latent count"}), + "k": ("INT", {"default": 6, "min": 1, "max": 100, "step": 1, "tooltip": "Index of intrinsic frequency"}), + } + } + + RETURN_TYPES = ("MODEL",) + FUNCTION = "patch" + CATEGORY = "KJNodes/wan" + EXPERIMENTAL = True + DESCRIPTION = "Extends the potential frame count of HunyuanVideo using this method: https://github.com/thu-ml/RIFLEx" + + def patch(self, model, latent, k): + model_class = model.model.diffusion_model + + model_clone = model.clone() + num_frames = latent["samples"].shape[2] + d = model_class.dim // model_class.num_heads + + rope_embedder = EmbedND_RifleX( + d, + 10000.0, + [d - 4 * (d // 6), 2 * (d // 6), 2 * (d // 6)], + num_frames, + k + ) + + model_clone.add_object_patch(f"diffusion_model.rope_embedder", rope_embedder) + + return (model_clone, ) + +class ApplyRifleXRoPE_HunuyanVideo: + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "model": ("MODEL",), + "latent": ("LATENT", {"tooltip": "Only used to get the latent count"}), + "k": ("INT", {"default": 4, "min": 1, "max": 100, "step": 1, "tooltip": "Index of intrinsic frequency"}), + } + } + + RETURN_TYPES = ("MODEL",) + FUNCTION = "patch" + CATEGORY = "KJNodes/hunyuanvideo" + EXPERIMENTAL = True + DESCRIPTION = "Extends the potential frame count of HunyuanVideo using this method: https://github.com/thu-ml/RIFLEx" + + def patch(self, model, latent, k): + model_class = model.model.diffusion_model + + model_clone = model.clone() + num_frames = latent["samples"].shape[2] + + pe_embedder = EmbedND_RifleX( + model_class.params.hidden_size // model_class.params.num_heads, + model_class.params.theta, + model_class.params.axes_dim, + num_frames, + k + ) + + model_clone.add_object_patch(f"diffusion_model.pe_embedder", pe_embedder) + + return (model_clone, ) + +def rope_riflex(pos, dim, theta, L_test, k): + from einops import rearrange + assert dim % 2 == 0 + if model_management.is_device_mps(pos.device) or model_management.is_intel_xpu() or model_management.is_directml_enabled(): + device = torch.device("cpu") + else: + device = pos.device + + scale = torch.linspace(0, (dim - 2) / dim, steps=dim//2, dtype=torch.float64, device=device) + omega = 1.0 / (theta**scale) + + # RIFLEX modification - adjust last frequency component if L_test and k are provided + if k and L_test: + omega[k-1] = 0.9 * 2 * torch.pi / L_test + + out = torch.einsum("...n,d->...nd", pos.to(dtype=torch.float32, device=device), omega) + out = torch.stack([torch.cos(out), -torch.sin(out), torch.sin(out), torch.cos(out)], dim=-1) + out = rearrange(out, "b n d (i j) -> b n d i j", i=2, j=2) + return out.to(dtype=torch.float32, device=pos.device) + +class EmbedND_RifleX(nn.Module): + def __init__(self, dim, theta, axes_dim, num_frames, k): + super().__init__() + self.dim = dim + self.theta = theta + self.axes_dim = axes_dim + self.num_frames = num_frames + self.k = k + + def forward(self, ids): + n_axes = ids.shape[-1] + emb = torch.cat( + [rope_riflex(ids[..., i], self.axes_dim[i], self.theta, self.num_frames, self.k if i == 0 else 0) for i in range(n_axes)], + dim=-3, + ) + return emb.unsqueeze(1) + + +class Timer: + def __init__(self, name): + self.name = name + self.start_time = None + self.elapsed = 0 + +class TimerNodeKJ: + @classmethod + + def INPUT_TYPES(s): + return { + "required": { + "any_input": (IO.ANY, ), + "mode": (["start", "stop"],), + "name": ("STRING", {"default": "Timer"}), + }, + "optional": { + "timer": ("TIMER",), + }, + } + + RETURN_TYPES = (IO.ANY, "TIMER", "INT", ) + RETURN_NAMES = ("any_output", "timer", "time") + FUNCTION = "timer" + CATEGORY = "KJNodes/misc" + + def timer(self, mode, name, any_input=None, timer=None): + if timer is None: + if mode == "start": + timer = Timer(name=name) + timer.start_time = time.time() + return {"ui": { + "text": [f"{timer.start_time}"]}, + "result": (any_input, timer, 0) + } + elif mode == "stop" and timer is not None: + end_time = time.time() + timer.elapsed = int((end_time - timer.start_time) * 1000) + timer.start_time = None + return (any_input, timer, timer.elapsed) + +class HunyuanVideoEncodeKeyframesToCond: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "model": ("MODEL",), + "positive": ("CONDITIONING", ), + "vae": ("VAE", ), + "start_frame": ("IMAGE", ), + "end_frame": ("IMAGE", ), + "num_frames": ("INT", {"default": 33, "min": 2, "max": 4096, "step": 1}), + "tile_size": ("INT", {"default": 512, "min": 64, "max": 4096, "step": 64}), + "overlap": ("INT", {"default": 64, "min": 0, "max": 4096, "step": 32}), + "temporal_size": ("INT", {"default": 64, "min": 8, "max": 4096, "step": 4, "tooltip": "Only used for video VAEs: Amount of frames to encode at a time."}), + "temporal_overlap": ("INT", {"default": 8, "min": 4, "max": 4096, "step": 4, "tooltip": "Only used for video VAEs: Amount of frames to overlap."}), + }, + "optional": { + "negative": ("CONDITIONING", ), + } + } + + RETURN_TYPES = ("MODEL", "CONDITIONING","CONDITIONING","LATENT") + RETURN_NAMES = ("model", "positive", "negative", "latent") + FUNCTION = "encode" + + CATEGORY = "KJNodes/hunyuanvideo" + + def encode(self, model, positive, start_frame, end_frame, num_frames, vae, tile_size, overlap, temporal_size, temporal_overlap, negative=None): + + model_clone = model.clone() + + model_clone.add_object_patch("concat_keys", ("concat_image",)) + + + x = (start_frame.shape[1] // 8) * 8 + y = (start_frame.shape[2] // 8) * 8 + + if start_frame.shape[1] != x or start_frame.shape[2] != y: + x_offset = (start_frame.shape[1] % 8) // 2 + y_offset = (start_frame.shape[2] % 8) // 2 + start_frame = start_frame[:,x_offset:x + x_offset, y_offset:y + y_offset,:] + if end_frame.shape[1] != x or end_frame.shape[2] != y: + x_offset = (start_frame.shape[1] % 8) // 2 + y_offset = (start_frame.shape[2] % 8) // 2 + end_frame = end_frame[:,x_offset:x + x_offset, y_offset:y + y_offset,:] + + video_frames = torch.zeros(num_frames-2, start_frame.shape[1], start_frame.shape[2], start_frame.shape[3], device=start_frame.device, dtype=start_frame.dtype) + video_frames = torch.cat([start_frame, video_frames, end_frame], dim=0) + + concat_latent = vae.encode_tiled(video_frames[:,:,:,:3], tile_x=tile_size, tile_y=tile_size, overlap=overlap, tile_t=temporal_size, overlap_t=temporal_overlap) + + out_latent = {} + out_latent["samples"] = torch.zeros_like(concat_latent) + + out = [] + for conditioning in [positive, negative if negative is not None else []]: + c = [] + for t in conditioning: + d = t[1].copy() + d["concat_latent_image"] = concat_latent + n = [t[0], d] + c.append(n) + out.append(c) + if len(out) == 1: + out.append(out[0]) + return (model_clone, out[0], out[1], out_latent) + + +class LazySwitchKJ: + def __init__(self): + pass + + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + "switch": ("BOOLEAN",), + "on_false": (IO.ANY, {"lazy": True}), + "on_true": (IO.ANY, {"lazy": True}), + }, + } + + RETURN_TYPES = (IO.ANY,) + FUNCTION = "switch" + CATEGORY = "KJNodes/misc" + DESCRIPTION = "Controls flow of execution based on a boolean switch." + + def check_lazy_status(self, switch, on_false=None, on_true=None): + if switch and on_true is None: + return ["on_true"] + if not switch and on_false is None: + return ["on_false"] + + def switch(self, switch, on_false = None, on_true=None): + value = on_true if switch else on_false + return (value,) + + +from comfy.patcher_extension import WrappersMP +from comfy.sampler_helpers import prepare_mask +class TTM_OuterSampleWrapper: + def __init__(self, mask, steps): + self.mask = mask + self.steps = steps + + def __call__(self, executor, noise, latent_image, sampler, sigmas, denoise_mask, callback, disable_pbar, seed, latent_shapes): + guider = executor.class_obj + guider.model_options + wrappers = guider.model_options["transformer_options"]["wrappers"] + w = wrappers.setdefault(WrappersMP.APPLY_MODEL, {}) + + if self.mask is not None: + motion_mask = self.mask.reshape((-1, 1, self.mask.shape[-2], self.mask.shape[-1])) + shape = latent_shapes[0] + motion_mask = prepare_mask(motion_mask, shape, noise.device) + + scale_latent_inpaint = guider.model_patcher.model.scale_latent_inpaint + w["TTM_ApplyModel_Wrapper"] = [TTM_ApplyModel_Wrapper(latent_image, noise, motion_mask, self.steps, scale_latent_inpaint)] + + out = executor(noise, latent_image, sampler, sigmas, denoise_mask, callback, disable_pbar, seed, latent_shapes=latent_shapes) + + return out + + +class TTM_ApplyModel_Wrapper: + def __init__(self, reference_samples, noise, motion_mask, steps, scale_latent_inpaint): + self.reference_samples = reference_samples + self.noise = noise + self.motion_mask = motion_mask + self.steps = steps + self.scale_latent_inpaint = scale_latent_inpaint + + def __call__(self, executor, x, t, c_concat, c_crossattn, control, transformer_options, **kwargs): + sigmas = transformer_options["sample_sigmas"] + + matched = (sigmas == t).nonzero(as_tuple=True)[0] + if matched.numel() > 0: + current_step_index = matched.item() + else: + crossing = ((sigmas[:-1] - t) * (sigmas[1:] - t) <= 0).nonzero(as_tuple=True)[0] + current_step_index = crossing.item() if crossing.numel() > 0 else 0 + + next_sigma = sigmas[current_step_index + 1] if current_step_index < len(sigmas) - 1 else sigmas[current_step_index] + + if current_step_index != 0 and current_step_index < self.steps: + noisy_latent = self.scale_latent_inpaint(x=x, sigma=torch.tensor([next_sigma]), noise=self.noise.to(x), latent_image=self.reference_samples.to(x)) + if self.motion_mask is not None: + x = x * (1-self.motion_mask).to(x) + noisy_latent * self.motion_mask.to(x) + else: + x = noisy_latent + + return executor(x, t, c_concat, c_crossattn, control, transformer_options, **kwargs) + + +class LatentInpaintTTM: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "model": ("MODEL", ), + "steps": ("INT", {"default": 7, "min": 0, "max": 888, "step": 1, "tooltip": "Number of steps to apply TTM inpainting for."}), + }, + "optional": { + "mask": ("MASK", {"tooltip": "Latent mask where white (1.0) is the area to inpaint and black (0.0) is the area to keep unchanged."}), + } + } + RETURN_TYPES = ("MODEL",) + FUNCTION = "patch" + EXPERIMENTAL = True + DESCRIPTION = "https://github.com/time-to-move/TTM" + SEARCH_ALIASES = ["time to move"] + CATEGORY = "KJNodes/experimental" + + def patch(self, model, steps, mask=None): + m = model.clone() + m.add_wrapper_with_key(WrappersMP.OUTER_SAMPLE, "TTM_OuterSampleWrapper", TTM_OuterSampleWrapper(mask, steps)) + return (m, ) + + +class SimpleCalculatorKJ(io.ComfyNode): + @classmethod + def define_schema(cls): + template = io.Autogrow.TemplateNames(input=io.MultiType.Input("var", [io.Int, io.Float, io.Boolean], optional=True), names=["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k"], min=2) + return io.Schema( + node_id="SimpleCalculatorKJ", + category="KJNodes/misc", + description=""" +Calculator node that evaluates a mathematical expression using inputs a and b. + Supported operations: +, -, *, /, //, %, **, <<, >>, unary +/- + Supported comparisons: ==, !=, <, <=, >, >= + Supported logic: and, or, not + Supported functions: abs(), round(), min(), max(), pow(), sqrt(), sin(), cos(), tan(), log(), log10(), exp(), floor(), ceil() + Supported constants: pi, euler, True, False +""", + search_aliases=["math", "arithmetic", "expression", "logic"], + inputs=[ + io.String.Input("expression", default="a + b", multiline=True), + io.Autogrow.Input("variables", template=template), + ], + outputs=[ + io.Float.Output(), + io.Int.Output(), + io.Boolean.Output(), + ], + ) + + @classmethod + def execute(cls, variables, expression, a=None, b=None) -> io.NodeOutput: + import ast + import operator + + # Allowed operations + allowed_operators = { + ast.Add: operator.add, ast.Sub: operator.sub, ast.Mult: operator.mul, ast.Div: operator.truediv, + ast.FloorDiv: operator.floordiv, ast.Mod: operator.mod, ast.Pow: operator.pow, + ast.USub: operator.neg, ast.UAdd: operator.pos, ast.LShift: operator.lshift, + ast.RShift: operator.rshift, ast.Eq: operator.eq, ast.NotEq: operator.ne, ast.Lt: operator.lt, + ast.LtE: operator.le, ast.Gt: operator.gt, ast.GtE: operator.ge, ast.And: operator.and_, + ast.Or: operator.or_, ast.Not: operator.not_, + } + + # Allowed functions + allowed_functions = { + 'abs': abs, 'round': round, 'min': min, 'max': max, + 'pow': pow, 'sqrt': math.sqrt, 'sin': math.sin, + 'cos': math.cos, 'tan': math.tan, 'log': math.log, + 'log10': math.log10, 'exp': math.exp, 'floor': math.floor, + 'ceil': math.ceil + } + + # Allowed constants - start with pi, e, True, False + allowed_names = {'pi': math.pi, 'euler': math.e, 'True': True, 'False': False} + + # Add all variables from autogrow to allowed_names + for var_name, var_value in variables.items(): + allowed_names[var_name] = var_value + + # Backwards compatibility: add a and b if they're provided (for old workflows) + if a is not None: + allowed_names['a'] = a + if b is not None: + allowed_names['b'] = b + + def eval_node(node): + if isinstance(node, ast.Constant): # Numbers and booleans + return node.value + elif isinstance(node, ast.Name): # Variables + if node.id in allowed_names: + return allowed_names[node.id] + raise ValueError(f"Name '{node.id}' is not allowed") + elif isinstance(node, ast.BinOp): # Binary operations + if type(node.op) not in allowed_operators: + raise ValueError(f"Operator {type(node.op).__name__} is not allowed") + left = eval_node(node.left) + right = eval_node(node.right) + return allowed_operators[type(node.op)](left, right) + elif isinstance(node, ast.UnaryOp): # Unary operations + if type(node.op) not in allowed_operators: + raise ValueError(f"Operator {type(node.op).__name__} is not allowed") + operand = eval_node(node.operand) + return allowed_operators[type(node.op)](operand) + elif isinstance(node, ast.Compare): # Comparison operations + left = eval_node(node.left) + for op, comparator in zip(node.ops, node.comparators): + if type(op) not in allowed_operators: + raise ValueError(f"Operator {type(op).__name__} is not allowed") + right = eval_node(comparator) + result = allowed_operators[type(op)](left, right) + if not result: + return False + left = right + return True + elif isinstance(node, ast.BoolOp): # Boolean operations (and, or) + if type(node.op) not in allowed_operators: + raise ValueError(f"Operator {type(node.op).__name__} is not allowed") + values = [eval_node(value) for value in node.values] + if isinstance(node.op, ast.And): + return all(values) + elif isinstance(node.op, ast.Or): + return any(values) + elif isinstance(node, ast.Call): # Function calls + if not isinstance(node.func, ast.Name): + raise ValueError("Only simple function calls are allowed") + if node.func.id not in allowed_functions: + raise ValueError(f"Function '{node.func.id}' is not allowed") + args = [eval_node(arg) for arg in node.args] + return allowed_functions[node.func.id](*args) + else: + raise ValueError(f"Node type {type(node).__name__} is not allowed") + + try: + tree = ast.parse(expression, mode='eval') + result = eval_node(tree.body) + return io.NodeOutput(float(result), int(result), bool(result)) + except Exception as e: + logging.error(f"CalculatorKJ Error: {str(e)}") + return io.NodeOutput(0.0, 0, False) + + +class GetTrackRange(io.ComfyNode): + @classmethod + def define_schema(cls): + return io.Schema( + node_id="GetTrackRange", + category="conditioning/video_models", + inputs=[ + io.Tracks.Input("tracks"), + io.Int.Input("start_index", default=24, min=-10000, max=10000, step=1), + io.Int.Input("num_frames", default=10, min=1, max=10000, step=1), + ], + outputs=[ + io.Tracks.Output(), + ], + ) + + @classmethod + def execute(cls, tracks, start_index, num_frames) -> io.NodeOutput: + track_path = tracks["track_path"] + mask = tracks["track_visibility"] + total_frames = track_path.shape[0] + + if start_index < 0: + start_index = total_frames + start_index + start_index = max(0, min(start_index, total_frames)) + + # Clamp end_index + end_index = max(0, min(start_index + num_frames, total_frames)) + + tracks_out = track_path[start_index:end_index, ...] + mask_out = mask[start_index:end_index, ...] + + out_track = { + "track_path": tracks_out, + "track_visibility": mask_out, + } + return io.NodeOutput(out_track) + +class AddNoiseToTrackPath(io.ComfyNode): + @classmethod + def define_schema(cls): + return io.Schema( + node_id="AddNoiseToTrackPath", + category="conditioning/video_models", + inputs=[ + io.Tracks.Input("tracks"), + io.Float.Input("strength", default=1.0, min=0.0, max=100.0, step=0.01), + io.Int.Input("seed", default=0, min=0, max=0xffffffffffffffff, step=1), + io.Float.Input("noise_x_ratio", default=1.0, min=0.0, max=100.0, step=0.01, + tooltip="Multiplier for horizontal noise component"), + io.Float.Input("noise_y_ratio", default=1.0, min=0.0, max=100.0, step=0.01, + tooltip="Multiplier for vertical noise component"), + io.Float.Input("noise_temporal_ratio", default=1.0, min=0.0, max=100.0, step=0.01, + tooltip="Multiplier for temporal (frame-to-frame) noise"), + ], + outputs=[ + io.Tracks.Output(), + ], + ) + + @classmethod + def execute(cls, tracks, strength, seed, noise_x_ratio, noise_y_ratio, noise_temporal_ratio) -> io.NodeOutput: + track_path = tracks["track_path"].clone() + mask = tracks["track_visibility"] + + torch.manual_seed(seed) + noise = torch.randn_like(track_path) * strength + + # Apply directional scaling to noise + noise[..., 0] *= noise_x_ratio # X coordinate noise + noise[..., 1] *= noise_y_ratio # Y coordinate noise + + # Apply temporal smoothing if temporal ratio is less than 1 + if noise_temporal_ratio < 1.0: + num_frames = track_path.shape[0] + smoothed_noise = noise.clone() + kernel_size = max(1, int((1.0 - noise_temporal_ratio) * 10)) + + for i in range(num_frames): + start_idx = max(0, i - kernel_size // 2) + end_idx = min(num_frames, i + kernel_size // 2 + 1) + smoothed_noise[i] = noise[start_idx:end_idx].mean(dim=0) + + noise = smoothed_noise * noise_temporal_ratio + noise * (1 - noise_temporal_ratio) + + track_path = track_path + noise + + out_track = { + "track_path": track_path, + "track_visibility": mask, + } + return io.NodeOutput(out_track) + + +class VAEDecodeLoopKJ: + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "samples": ("LATENT", {"tooltip": "The latent to be decoded."}), + "vae": ("VAE", {"tooltip": "The VAE model used for decoding the latent."}), + "overlap_latent_frames": ("INT", {"default": 2, "min": 2, "max": 8, "step": 1, "tooltip": "Number of frames to blend for seamless loop, for Wan 2 works and HunyuanVideo 1.5 should use 4"}), + } + } + RETURN_TYPES = ("IMAGE",) + OUTPUT_TOOLTIPS = ("The decoded images.",) + FUNCTION = "decode" + CATEGORY = "KJNodes/vae" + DESCRIPTION = "Video latent VAE decoding to fix artifacts on loop seams." + + def decode(self, vae, samples, overlap_latent_frames): + latents = samples["samples"] + + images = vae.decode(latents) + if overlap_latent_frames <= 0: + if len(images.shape) == 5: + images = images.reshape(-1, images.shape[-3], images.shape[-2], images.shape[-1]) + return (images, ) + + end_frames = overlap_latent_frames + 1 + start_frames = overlap_latent_frames + + temp_images = vae.decode(torch.cat([latents[:, :, -end_frames:]] + [latents[:, :, :start_frames]], dim=2)).cpu().float() + + total_concat = end_frames + start_frames + temp_start = total_concat * 2 - 1 + main_start = total_concat + (overlap_latent_frames if overlap_latent_frames > 2 else 0) + + images = torch.cat([temp_images[:, temp_start:].to(images), images[:, main_start:]], dim=1) + if len(images.shape) == 5: + images = images.reshape(-1, images.shape[-3], images.shape[-2], images.shape[-1]) + + return (images, ) + +class WanImageToVideoSVIPro(io.ComfyNode): + @classmethod + def define_schema(cls): + return io.Schema( + node_id="WanImageToVideoSVIPro", + category="conditioning/video_models", + inputs=[ + io.Conditioning.Input("positive"), + io.Conditioning.Input("negative"), + io.Int.Input("length", default=81, min=1, max=MAX_RESOLUTION, step=4), + io.Latent.Input("anchor_samples"), + io.Latent.Input("prev_samples", optional=True), + io.Int.Input("motion_latent_count", default=1, min=0, max=128, step=1), + ], + outputs=[ + io.Conditioning.Output(display_name="positive"), + io.Conditioning.Output(display_name="negative"), + io.Latent.Output(display_name="latent"), + ], + ) + + @classmethod + def execute(cls, positive, negative, length, motion_latent_count, anchor_samples, prev_samples=None) -> io.NodeOutput: + anchor_latent = anchor_samples["samples"].clone() + + B, C, T, H, W = anchor_latent.shape + empty_latent = torch.zeros([B, 16, ((length - 1) // 4) + 1, H, W], device=model_management.intermediate_device()) + + total_latents = (length - 1) // 4 + 1 + device = anchor_latent.device + dtype = anchor_latent.dtype + + if prev_samples is None or motion_latent_count == 0: + padding_size = total_latents - anchor_latent.shape[2] + image_cond_latent = anchor_latent + else: + motion_latent = prev_samples["samples"][:, :, -motion_latent_count:].clone() + padding_size = total_latents - anchor_latent.shape[2] - motion_latent.shape[2] + image_cond_latent = torch.cat([anchor_latent, motion_latent], dim=2) + + padding = torch.zeros(1, C, padding_size, H, W, dtype=dtype, device=device) + padding = comfy.latent_formats.Wan21().process_out(padding) + image_cond_latent = torch.cat([image_cond_latent, padding], dim=2) + + mask = torch.ones((1, 1, empty_latent.shape[2], H, W), device=device, dtype=dtype) + mask[:, :, :1] = 0.0 + + positive = node_helpers.conditioning_set_values(positive, {"concat_latent_image": image_cond_latent, "concat_mask": mask}) + negative = node_helpers.conditioning_set_values(negative, {"concat_latent_image": image_cond_latent, "concat_mask": mask}) + + out_latent = {} + out_latent["samples"] = empty_latent + return io.NodeOutput(positive, negative, out_latent) + +class DeprecatedCompileNodeKJ: + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "model": (IO.ANY,), + }, + } + RETURN_TYPES = (IO.ANY,) + FUNCTION = "passthrough" + CATEGORY = "KJNodes/deprecated" + DESCRIPTION = "This node has been replaced with TorchCompileModelAdvanced node, please use that instead." + def passthrough(self, model): + return (model,) + + +class VisualizeSigmasKJ(io.ComfyNode): + @classmethod + def define_schema(cls): + return io.Schema( + node_id="VisualizeSigmasKJ", + category="KJNodes/misc", + inputs=[ + io.Sigmas.Input("sigmas"), + io.Int.Input("start_step", default=0, min=-1, max=1000, step=1, + tooltip="Step index to mark as the start of a range (inclusive). Set to -1 to disable."), + io.Int.Input("end_step", default=-1, min=-1, max=1000, step=1, + tooltip="Step index to mark as the end of a range (inclusive). Set to - 1 to disable."), + ], + outputs=[ + io.Sigmas.Output(display_name="sigmas_out"), + io.Image.Output(display_name="image"), + ], + ) + + @classmethod + def execute(cls, sigmas, start_step=0, end_step=-1) -> io.NodeOutput: + + start_idx = 0 + end_idx = len(sigmas) - 1 + + if isinstance(start_step, float): + idxs = (sigmas <= start_step).nonzero(as_tuple=True)[0] + if len(idxs) > 0: + start_idx = idxs[0].item() + elif isinstance(start_step, int): + if start_step > 0: + start_idx = start_step + + if isinstance(end_step, float): + idxs = (sigmas >= end_step).nonzero(as_tuple=True)[0] + if len(idxs) > 0: + end_idx = idxs[-1].item() + elif isinstance(end_step, int): + if end_step != -1: + end_idx = end_step - 1 + + import matplotlib + matplotlib.use('Agg') + import matplotlib.pyplot as plt + sigmas_np = sigmas.cpu().numpy() + if not np.isclose(sigmas_np[-1], 0.0, atol=1e-6): + sigmas_np = np.append(sigmas_np, 0.0) + buf = BytesIO() + fig = plt.figure(facecolor='#353535') + ax = fig.add_subplot(111) + ax.set_facecolor('#353535') # Set axes background color + x_values = range(0, len(sigmas_np)) + ax.plot(x_values, sigmas_np) + # Annotate each sigma value + ax.scatter(x_values, sigmas_np, color='white', s=20, zorder=3) # Small dots at each sigma + for x, y in zip(x_values, sigmas_np): + # Show all annotations if few steps, or just show split step annotations + show_annotation = len(sigmas_np) <= 10 + is_split_step = (start_idx > 0 and x == start_idx) or (end_idx != -1 and x == end_idx + 1) + + if show_annotation or is_split_step: + color = 'orange' + if is_split_step: + color = 'yellow' + ax.annotate(f"{y:.3f}", (x, y), textcoords="offset points", xytext=(10, 1), ha='center', color=color, fontsize=12) + ax.set_xticks(x_values) + ax.set_title("Sigmas", color='white') # Title font color + ax.set_xlabel("Step", color='white') # X label font color + ax.set_ylabel("Sigma Value", color='white') # Y label font color + ax.tick_params(axis='x', colors='white', labelsize=10) # X tick color + ax.tick_params(axis='y', colors='white', labelsize=10) # Y tick color + # Add split point if end_step is defined + end_idx += 1 + if end_idx != -1 and 0 <= end_idx < len(sigmas_np) - 1: + ax.axvline(end_idx, color='red', linestyle='--', linewidth=2, label='end_step split') + # Add split point if start_step is defined + if start_idx > 0 and 0 <= start_idx < len(sigmas_np): + ax.axvline(start_idx, color='green', linestyle='--', linewidth=2, label='start_step split') + if (end_idx != -1 and 0 <= end_idx < len(sigmas_np)) or (start_idx > 0 and 0 <= start_idx < len(sigmas_np)): + handles, labels = ax.get_legend_handles_labels() + if labels: + ax.legend() + # Draw shaded range + range_start_idx = start_idx if start_idx > 0 else 0 + range_end_idx = end_idx if end_idx > 0 and end_idx < len(sigmas_np) else len(sigmas_np) - 1 + if range_start_idx < range_end_idx: + ax.axvspan(range_start_idx, range_end_idx, color='lightblue', alpha=0.1, label='Sampled Range') + + + plt.tight_layout() + fig.canvas.draw() + w, h = fig.canvas.get_width_height() + try: + buf = np.frombuffer(fig.canvas.tostring_argb(), dtype=np.uint8) + buf = buf.reshape(h, w, 4) + buf = buf[:, :, [1, 2, 3]] # Convert ARGB to RGB + except: + buf = np.frombuffer(fig.canvas.tostring_rgb(), dtype=np.uint8) + buf = buf.reshape(h, w, 3).copy() + image = torch.from_numpy(buf).float() / 255.0 + image = image.unsqueeze(0) #(H, W, C) -> (1, H, W, C) + plt.close(fig) + + sigmas_out = sigmas[start_idx:end_idx + 1] if end_idx != -1 else sigmas[start_idx:] + + return io.NodeOutput(sigmas_out,image) + +class PreviewLatentNoiseMask(io.ComfyNode): + + @classmethod + def define_schema(cls): + return io.Schema( + node_id="PreviewLatentNoiseMask", + category="KJNodes/latents", + description="Previews the latent noise mask", + inputs=[ + io.Latent.Input("latent",), + ], + outputs=[ + io.Mask.Output(display_name="mask"), + ], + ) + + @classmethod + def execute(cls, latent) -> io.NodeOutput: + noise_mask = latent.get("noise_mask", None) + if noise_mask is None: + return io.NodeOutput(torch.zeros((1, 64, 64))) + noise_mask = noise_mask.clone() + + if noise_mask.ndim == 5: + noise_mask = noise_mask[0, 0] + + return io.NodeOutput(noise_mask) + +class PlaySoundKJ(io.ComfyNode): + """Plays audio in the browser when execution reaches this node.""" + + @classmethod + def define_schema(cls): + return io.Schema( + node_id="PlaySoundKJ", + category="KJNodes/audio", + description="Plays the input audio in the browser. Modes: 'always' plays on every execution, 'on_empty_queue' plays only when the queue finishes, 'on_change' plays only when the audio content changes. Duration limits playback length (0 = full audio).", + inputs=[ + io.AnyType.Input("any_input", optional=True), + io.Audio.Input("audio", optional=True), + io.String.Input("audio_path", default="", tooltip="Path to an audio file. Used when audio input is not connected."), + io.Combo.Input("mode", options=["always", "on_empty_queue", "on_change"], default="always"), + io.Float.Input("volume", default=0.5, min=0.0, max=1.0, step=0.01), + io.Float.Input("duration", default=5.0, min=0.0, max=300.0, step=0.1, tooltip="Duration in seconds to play. 0 = play full audio."), + ], + outputs=[ + io.AnyType.Output("any_output", display_name="any_output"), + ], + is_output_node=True, + ) + + @classmethod + def fingerprint_inputs(cls, **kwargs): + if kwargs.get("mode") == "on_change": + return False + return float("NaN") + + @staticmethod + def _generate_chime(): + sr = 32000 + C, Ab, Bb = 523.26, 421.30, 466.16 # note frequencies + e = 0.14 # eighth note — adjust to change tempo + S, M, H = 16, 7, 2.5 # staccato / medium / held decay + melody = [ + (C,e,S), (C,e,S), (C,e,S), (C,e*3,M), + (Ab,e*3,M), (Bb,e*3,M), (C,e*2,S), (Bb,e,S), (C,e*5,H), + ] + k = torch.exp(-torch.linspace(-2, 2, 15) ** 2) + k = (k / k.sum()).reshape(1, 1, -1) + parts = [] + for freq, dur, decay in melody: + t = torch.linspace(0, dur, int(sr * dur)) + tone = torch.tanh(3 * torch.sin(2 * math.pi * freq * t)) + tone = torch.nn.functional.conv1d(tone.reshape(1, 1, -1), k, padding=7).squeeze() + parts.append(tone * torch.exp(-t * decay)) + wav = torch.cat(parts) * 0.45 + return {"waveform": wav.unsqueeze(0).unsqueeze(0), "sample_rate": sr} + + @classmethod + def execute(cls, audio=None, audio_path="", mode="always", volume=0.5, duration=5.0, any_input=None) -> io.NodeOutput: + if audio is None: + if audio_path: + import av + with av.open(audio_path) as af: + stream = af.streams.audio[0] + sr = stream.codec_context.sample_rate + frames = [] + for frame in af.decode(streams=stream.index): + buf = torch.from_numpy(frame.to_ndarray()) + if buf.shape[0] != stream.channels: + buf = buf.view(-1, stream.channels).t() + frames.append(buf) + wav = torch.cat(frames, dim=1).float() + audio = {"waveform": wav.unsqueeze(0), "sample_rate": sr} + else: + audio = cls._generate_chime() + + preview = ui.PreviewAudio(audio, cls=cls) + ui_dict = preview.as_dict() + ui_dict["audio_hash"] = [hash(audio["waveform"].sum().item())] + return io.NodeOutput( + any_input, + ui=ui_dict, + ) diff --git a/ComfyUI-KJNodes/nodes/sharpen_nodes.py b/ComfyUI-KJNodes/nodes/sharpen_nodes.py new file mode 100644 index 0000000000000000000000000000000000000000..3635a21e900cfe4393f34defc251c5b34b12429d --- /dev/null +++ b/ComfyUI-KJNodes/nodes/sharpen_nodes.py @@ -0,0 +1,259 @@ +import torch +import torch.nn.functional as F + +from comfy import model_management +from comfy_api.latest import io + +class ImageSharpenKJ(io.ComfyNode): + @classmethod + def define_schema(cls): + return io.Schema( + node_id="ImageSharpenKJ", + category="KJNodes/image", + display_name="Image Sharpen KJ", + search_aliases=["sharpen", "unsharp mask", "deconvolution", "cas", "rcas", "high-pass", "postprocessing"], + description="""GPU-accelerated image sharpening with multiple methods. + +**RCAS** — AMD's Robust Contrast-Adaptive Sharpening (from FSR). +Single 5-tap cross filter that adapts to local contrast. +Minimal artifacts, good for general use with little tuning. + +**Adaptive USM** — Unsharp mask with local variance modulation. +Sharpens detail-rich areas more, flat/noisy areas less. +More controllable than RCAS via radius and threshold parameters. + +**High-Pass** — Extracts high-frequency detail and blends it back. +Gives a "clarity" enhancement feel. Uses radius to control detail scale. + +**Deconvolution** — Richardson-Lucy iterative deconvolution. +Can recover actual lost detail from blur, not just enhance edges. +Uses radius as the estimated blur kernel and iterations to control convergence.""", + inputs=[ + io.MatchType.Input("image", io.MatchType.Template("img_or_mask", [io.Image, io.Mask])), + io.DynamicCombo.Input("method", options=[ + io.DynamicCombo.Option(key="rcas", inputs=[ + io.Float.Input("strength", default=0.8, min=0.0, max=1.0, step=0.01, + tooltip="0 = no sharpening, 1 = full RCAS sharpening."), + ]), + io.DynamicCombo.Option(key="adaptive_usm", inputs=[ + io.Float.Input("strength", default=0.5, min=0.0, max=3.0, step=0.01, + tooltip="Sharpening multiplier. Values above 1.0 give aggressive sharpening."), + io.Float.Input("radius", default=1.0, min=0.5, max=5.0, step=0.1, + tooltip="Gaussian blur sigma for the unsharp mask. Larger = enhances coarser detail."), + io.Float.Input("threshold", default=0.05, min=0.0, max=1.0, step=0.01, + tooltip="Noise gate. Higher = only sharpen areas with more texture/detail. 0 = sharpen everything."), + ]), + io.DynamicCombo.Option(key="high_pass", inputs=[ + io.Float.Input("strength", default=0.5, min=0.0, max=3.0, step=0.01, + tooltip="Blend factor for high-frequency detail. Values above 1.0 give a punchier effect."), + io.Float.Input("radius", default=1.0, min=0.5, max=5.0, step=0.1, + tooltip="Gaussian blur sigma defining the frequency cutoff. Larger = enhances coarser detail."), + ]), + io.DynamicCombo.Option(key="deconvolution", inputs=[ + io.Float.Input("strength", default=0.5, min=0.0, max=1.0, step=0.01, + tooltip="Blend between original (0) and fully deconvolved (1)."), + io.Float.Input("radius", default=1.0, min=0.5, max=5.0, step=0.1, + tooltip="Sigma of the assumed Gaussian blur to reverse."), + io.Int.Input("iterations", default=10, min=1, max=100, step=1, + tooltip="Richardson-Lucy iterations. More = sharper but slower, diminishing returns past ~20."), + ]), + ]), + ], + outputs=[ + io.MatchType.Output(io.MatchType.Template("img_or_mask", [io.Image, io.Mask]), display_name="output"), + ], + ) + + @classmethod + def execute(cls, image, method) -> io.NodeOutput: + selected = method["method"] + strength = method.get("strength", 0.5) + if strength == 0: + return io.NodeOutput(image) + + is_mask = image.ndim == 3 # BHW + if is_mask: + image = image.unsqueeze(-1) # BHW -> BHWC with C=1 + + radius = method.get("radius", 1.0) + threshold = method.get("threshold", 0.05) + iterations = method.get("iterations", 10) + if selected == "rcas": + result = _rcas(image, strength) + elif selected == "adaptive_usm": + result = _adaptive_usm(image, strength, radius, threshold) + elif selected == "high_pass": + result = _high_pass(image, strength, radius) + else: + result = _deconvolution(image, strength, radius, iterations) + + if is_mask: + result = result.squeeze(-1) # BHWC -> BHW + + return io.NodeOutput(result) + + +def _rcas(image: torch.Tensor, strength: float) -> torch.Tensor: + """AMD FidelityFX RCAS — 5-tap cross filter with contrast-adaptive lobe.""" + device = model_management.get_torch_device() + intermediate_device = model_management.intermediate_device() + dtype = model_management.intermediate_dtype() + + B, H, W, C = image.shape + out = torch.empty(B, H, W, C, device=intermediate_device, dtype=dtype) + attenuation = strength + + for i in range(B): + img = image[i:i+1].to(device=device, dtype=dtype).permute(0, 3, 1, 2) + padded = F.pad(img, (1, 1, 1, 1), mode='reflect') + + n = padded[:, :, 0:H, 1:W+1] + s = padded[:, :, 2:H+2, 1:W+1] + w = padded[:, :, 1:H+1, 0:W] + e = padded[:, :, 1:H+1, 2:W+2] + center = img + + mn = torch.min(torch.min(torch.min(torch.min(n, s), w), e), center) + mx = torch.max(torch.max(torch.max(torch.max(n, s), w), e), center) + + # hitMin = -mn / (4*mx), hitMax = -(1-mx) / (4*(1-mn)) + hit_min = mn.div(mx * 4.0 + 1e-6).neg_() + hit_max = mx.neg().add_(1.0).div_(mn.neg().add_(1.0).mul_(4.0).add_(1e-6)).neg_() + + torch.max(hit_min, hit_max, out=hit_min) + lobe = hit_min.min(dim=1, keepdim=True).values + + lobe.mul_(attenuation) + lobe.clamp_(-0.1875, 0.0) + + # (center + lobe*(n+s+e+w)) / (1 + 4*lobe) + norm = lobe.mul(4.0).add_(1.0).reciprocal_() + neighbors = n + s + neighbors.add_(e).add_(w) + neighbors.mul_(lobe).add_(center).mul_(norm) + neighbors.clamp_(0.0, 1.0) + + out[i:i+1] = neighbors.permute(0, 2, 3, 1).to(device=intermediate_device) + + return out + + +def _gaussian_kernel_1d(sigma: float, device: torch.device, dtype: torch.dtype) -> torch.Tensor: + radius = max(int(3.0 * sigma + 0.5), 1) + x = torch.arange(-radius, radius + 1, device=device, dtype=dtype) + kernel = torch.exp(-0.5 * (x / sigma) ** 2) + kernel.div_(kernel.sum()) + return kernel + + +def _gaussian_blur(img: torch.Tensor, sigma: float) -> torch.Tensor: + """Separable Gaussian blur on BCHW tensor.""" + kernel_1d = _gaussian_kernel_1d(sigma, img.device, img.dtype) + k = kernel_1d.shape[0] + C = img.shape[1] + pad = k // 2 + + kh = kernel_1d.view(1, 1, 1, k).expand(C, -1, -1, -1) + blurred = F.conv2d(F.pad(img, (pad, pad, 0, 0), mode='reflect'), kh, groups=C) + + kv = kernel_1d.view(1, 1, k, 1).expand(C, -1, -1, -1) + blurred = F.conv2d(F.pad(blurred, (0, 0, pad, pad), mode='reflect'), kv, groups=C) + + return blurred + + +def _adaptive_usm(image: torch.Tensor, strength: float, radius: float, threshold: float) -> torch.Tensor: + """Unsharp mask modulated by local variance — sharpens texture, skips flat areas.""" + device = model_management.get_torch_device() + intermediate_device = model_management.intermediate_device() + dtype = model_management.intermediate_dtype() + + B, H, W, C = image.shape + out = torch.empty(B, H, W, C, device=intermediate_device, dtype=dtype) + var_sigma = radius * 1.5 + + for i in range(B): + img = image[i:i+1].to(device=device, dtype=dtype, copy=True).permute(0, 3, 1, 2) + + blurred = _gaussian_blur(img, radius) + detail = img - blurred + + # Local variance: E[x^2] - E[x]^2 + local_mean = _gaussian_blur(img, var_sigma) + local_mean_sq = _gaussian_blur(img.square(), var_sigma) + local_mean_sq.sub_(local_mean * local_mean).clamp_(min=0.0) + + # Convert to std deviation so threshold is in pixel-intensity scale + modulation = local_mean_sq.mean(dim=1, keepdim=True).sqrt_() + + if threshold > 0: + modulation.div_(threshold).clamp_(0.0, 1.0) + else: + modulation.fill_(1.0) + + img.addcmul_(detail, modulation, value=strength).clamp_(0.0, 1.0) + + out[i:i+1] = img.permute(0, 2, 3, 1).to(device=intermediate_device) + + return out + + +def _high_pass(image: torch.Tensor, strength: float, radius: float) -> torch.Tensor: + """High-pass sharpening: original + strength * (original - blur).""" + device = model_management.get_torch_device() + intermediate_device = model_management.intermediate_device() + dtype = model_management.intermediate_dtype() + + B, H, W, C = image.shape + out = torch.empty(B, H, W, C, device=intermediate_device, dtype=dtype) + + for i in range(B): + img = image[i:i+1].to(device=device, dtype=dtype).permute(0, 3, 1, 2) + + low_pass = _gaussian_blur(img, radius) + low_pass.neg_().add_(img).mul_(strength).add_(img).clamp_(0.0, 1.0) + + out[i:i+1] = low_pass.permute(0, 2, 3, 1).to(device=intermediate_device) + + return out + + +def _deconvolution(image: torch.Tensor, strength: float, radius: float, iterations: int) -> torch.Tensor: + """Richardson-Lucy deconvolution with Gaussian PSF.""" + device = model_management.get_torch_device() + intermediate_device = model_management.intermediate_device() + dtype = model_management.intermediate_dtype() + + B, H, W, C = image.shape + out = torch.empty(B, H, W, C, device=intermediate_device, dtype=dtype) + + # Gaussian PSF kernel (symmetric, so PSF^T = PSF) + kernel_1d = _gaussian_kernel_1d(radius, device, dtype) + k = kernel_1d.shape[0] + pad = k // 2 + kh = kernel_1d.view(1, 1, 1, k).expand(C, -1, -1, -1) + kv = kernel_1d.view(1, 1, k, 1).expand(C, -1, -1, -1) + + for i in range(B): + img = image[i:i+1].to(device=device, dtype=dtype).permute(0, 3, 1, 2) + estimate = img.clone() + + for _ in range(iterations): + # estimate *= (observed / (estimate * PSF)) * PSF^T + blurred = F.conv2d(F.pad(estimate, (pad, pad, 0, 0), mode='reflect'), kh, groups=C) + blurred = F.conv2d(F.pad(blurred, (0, 0, pad, pad), mode='reflect'), kv, groups=C) + + blurred.add_(1e-6) + torch.div(img, blurred, out=blurred) + + correction = F.conv2d(F.pad(blurred, (pad, pad, 0, 0), mode='reflect'), kh, groups=C) + correction = F.conv2d(F.pad(correction, (0, 0, pad, pad), mode='reflect'), kv, groups=C) + + estimate.mul_(correction) + + torch.lerp(img, estimate, strength, out=estimate) + estimate.clamp_(0.0, 1.0) + + out[i:i+1] = estimate.permute(0, 2, 3, 1).to(device=intermediate_device) + + return out diff --git a/ComfyUI-KJNodes/pyproject.toml b/ComfyUI-KJNodes/pyproject.toml new file mode 100644 index 0000000000000000000000000000000000000000..9b82eea01e0cae4d58cdc439a71335b35314ad25 --- /dev/null +++ b/ComfyUI-KJNodes/pyproject.toml @@ -0,0 +1,15 @@ +[project] +name = "comfyui-kjnodes" +description = "Various quality of life -nodes for ComfyUI, mostly just visual stuff to improve usability." +version = "1.3.7" +license = {file = "LICENSE"} +dependencies = ["numpy", "pillow>=10.3.0", "scipy", "color-matcher", "matplotlib"] + +[project.urls] +Repository = "https://github.com/kijai/ComfyUI-KJNodes" +# Used by Comfy Registry https://comfyregistry.org + +[tool.comfy] +PublisherId = "kijai" +DisplayName = "ComfyUI-KJNodes" +Icon = "https://avatars.githubusercontent.com/u/40791699" diff --git a/ComfyUI-KJNodes/requirements.txt b/ComfyUI-KJNodes/requirements.txt new file mode 100644 index 0000000000000000000000000000000000000000..6dd831112af1fbd7f1754ad08a9530d1cc1e7d45 --- /dev/null +++ b/ComfyUI-KJNodes/requirements.txt @@ -0,0 +1,6 @@ +pillow>=10.3.0 +scipy +color-matcher +matplotlib +mss +opencv-python-headless diff --git a/comfyui-easy-use/__pycache__/__init__.cpython-310.pyc b/comfyui-easy-use/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b973f8b7b7d2895afbe3a488abbf9b17642d3e73 Binary files /dev/null and b/comfyui-easy-use/__pycache__/__init__.cpython-310.pyc differ diff --git a/comfyui-easy-use/__pycache__/prestartup_script.cpython-310.pyc b/comfyui-easy-use/__pycache__/prestartup_script.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..85fdd4554d6125672f2e7902732422abf79cb5d6 Binary files /dev/null and b/comfyui-easy-use/__pycache__/prestartup_script.cpython-310.pyc differ diff --git a/comfyui-easy-use/web_version/v1/js/easy/easySeg.js b/comfyui-easy-use/web_version/v1/js/easy/easySeg.js new file mode 100644 index 0000000000000000000000000000000000000000..11e8feb61f3e0b3f8358c5a38c9a6df9730c965e --- /dev/null +++ b/comfyui-easy-use/web_version/v1/js/easy/easySeg.js @@ -0,0 +1,136 @@ +import {app} from "../../../../scripts/app.js"; +import {$el} from "../../../../scripts/ui.js"; +import {$t} from "../common/i18n.js"; +import {findWidgetByName, toggleWidget} from "../common/utils.js"; + + +const tags = { + "selfie_multiclass_256x256": ["Background", "Hair", "Body", "Face", "Clothes", "Others",], + "human_parsing_lip":["Background","Hat","Hair","Glove","Sunglasses","Upper-clothes","Dress","Coat","Socks","Pants","Jumpsuits","Scarf","Skirt","Face","Left-arm","Right-arm","Left-leg","Right-leg","Left-shoe","Right-shoe"], +} +function getTagList(tags) { + let rlist=[] + tags.forEach((k,i) => { + rlist.push($el( + "label.easyuse-prompt-styles-tag", + { + dataset: { + tag: i, + name: $t(k), + index: i + }, + $: (el) => { + el.children[0].onclick = () => { + el.classList.toggle("easyuse-prompt-styles-tag-selected"); + }; + }, + }, + [ + $el("input",{ + type: 'checkbox', + name: i + }), + $el("span",{ + textContent: $t(k), + }) + ] + )) + }); + return rlist +} + + +app.registerExtension({ + name: 'comfy.easyUse.seg', + async beforeRegisterNodeDef(nodeType, nodeData, app) { + + if (nodeData.name == 'easy humanSegmentation') { + // 创建时 + const onNodeCreated = nodeType.prototype.onNodeCreated; + nodeType.prototype.onNodeCreated = function () { + onNodeCreated ? onNodeCreated?.apply(this, arguments) : undefined; + const method = this.widgets.findIndex((w) => w.name == 'method'); + const list = $el("ul.easyuse-prompt-styles-list.no-top", []); + let method_values = '' + this.setProperty("values", []) + + let selector = this.addDOMWidget('mask_components',"btn",$el('div.easyuse-prompt-styles',[list])) + + Object.defineProperty(this.widgets[method],'value',{ + set:(value)=>{ + method_values = value + if(method_values){ + selector.element.children[0].innerHTML = '' + if(method_values == 'selfie_multiclass_256x256'){ + toggleWidget(this, findWidgetByName(this, 'confidence'), true) + this.setSize([300, 260]); + }else{ + toggleWidget(this, findWidgetByName(this, 'confidence')) + this.setSize([300, 500]); + } + let list = getTagList(tags[method_values]); + selector.element.children[0].append(...list) + } + }, + get: () => { + return method_values + } + }) + + let mask_select_values = '' + + Object.defineProperty(selector, "value", { + set: (value) => { + setTimeout(_=>{ + selector.element.children[0].querySelectorAll(".easyuse-prompt-styles-tag").forEach(el => { + let arr = value.split(',') + if (arr.includes(el.dataset.tag)) { + el.classList.add("easyuse-prompt-styles-tag-selected"); + el.children[0].checked = true + } + }) + },100) + }, + get: () => { + selector.element.children[0].querySelectorAll(".easyuse-prompt-styles-tag").forEach(el => { + if(el.classList.value.indexOf("easyuse-prompt-styles-tag-selected")>=0){ + if(!this.properties["values"].includes(el.dataset.tag)){ + this.properties["values"].push(el.dataset.tag); + } + }else{ + if(this.properties["values"].includes(el.dataset.tag)){ + this.properties["values"]= this.properties["values"].filter(v=>v!=el.dataset.tag); + } + } + }); + mask_select_values = this.properties["values"].join(','); + return mask_select_values; + } + }); + + let old_values = '' + let mask_lists_dom = selector.element.children[0] + + // 初始化 + setTimeout(_=>{ + if(!method_values) { + method_values = 'selfie_multiclass_256x256' + selector.element.children[0].innerHTML = '' + // 重新排序 + let list = getTagList(tags[method_values]); + selector.element.children[0].append(...list) + } + if(method_values == 'selfie_multiclass_256x256'){ + toggleWidget(this, findWidgetByName(this, 'confidence'), true) + this.setSize([300, 260]); + }else{ + toggleWidget(this, findWidgetByName(this, 'confidence')) + this.setSize([300, 500]); + } + },1) + + return onNodeCreated; + } + } + } +}) \ No newline at end of file diff --git a/comfyui-easy-use/web_version/v1/js/image_chooser/chooser.js b/comfyui-easy-use/web_version/v1/js/image_chooser/chooser.js new file mode 100644 index 0000000000000000000000000000000000000000..e1c153dc6adc0432af90c653c05c6fde0ec1de59 --- /dev/null +++ b/comfyui-easy-use/web_version/v1/js/image_chooser/chooser.js @@ -0,0 +1,237 @@ +import { app } from "../../../../scripts/app.js"; +import { api } from "../../../../scripts/api.js"; +import { ComfyDialog, $el } from "../../../../scripts/ui.js"; + +import { restart_from_here } from "./prompt.js"; +import { hud, FlowState } from "./state.js"; +import { send_cancel, send_message, send_onstart, skip_next_restart_message } from "./messaging.js"; +import { display_preview_images, additionalDrawBackground, click_is_in_image } from "./preview.js"; +import {$t} from "../common/i18n.js"; + + +class chooserImageDialog extends ComfyDialog { + + constructor() { + super(); + this.node = null + this.select_index = [] + this.dialog_div = null + } + + show(image,node){ + this.select_index = [] + this.node = node + + const images_div = image.map((img, index) => { + const imgEl = $el('img', { + src: img.src, + onclick: _ => { + if(this.select_index.includes(index)){ + this.select_index = this.select_index.filter(i => i !== index) + imgEl.classList.remove('selected') + } else { + this.select_index.push(index) + imgEl.classList.add('selected') + } + if (node.selected.has(index)) node.selected.delete(index); + else node.selected.add(index); + } + }) + return imgEl + }) + super.show($el('div.easyuse-chooser-dialog',[ + $el('h5.easyuse-chooser-dialog-title', $t('Choose images to continue')), + $el('div.easyuse-chooser-dialog-images',images_div) + ])) + } + createButtons() { + const btns = super.createButtons(); + btns[0].onclick = _ => { + if (FlowState.running()) { send_cancel();} + super.close() + } + btns.unshift($el('button', { + type: 'button', + textContent: $t('Choose Selected Images'), + onclick: _ => { + if (FlowState.paused()) { + send_message(this.node.id, [...this.node.selected, -1, ...this.node.anti_selected]); + } + if (FlowState.idle()) { + skip_next_restart_message(); + restart_from_here(this.node.id).then(() => { send_message(this.node.id, [...this.node.selected, -1, ...this.node.anti_selected]); }); + } + super.close() + } + })) + return btns + } + +} + +function progressButtonPressed() { + const node = app.graph._nodes_by_id[this.node_id]; + if (node) { + const selected = [...node.selected] + if(selected?.length>0){ + node.setProperty('values',selected) + } + if (FlowState.paused()) { + send_message(node.id, [...node.selected, -1, ...node.anti_selected]); + } + if (FlowState.idle()) { + skip_next_restart_message(); + restart_from_here(node.id).then(() => { send_message(node.id, [...node.selected, -1, ...node.anti_selected]); }); + } + } +} + +function cancelButtonPressed() { + + if (FlowState.running()) { send_cancel();} +} + +function enable_disabling(button) { + Object.defineProperty(button, 'clicked', { + get : function() { return this._clicked; }, + set : function(v) { this._clicked = (v && this.name!=''); } + }) +} + +function disable_serialize(widget) { + if (!widget.options) widget.options = { }; + widget.options.serialize = false; +} + +app.registerExtension({ + name:'comfy.easyuse.imageChooser', + init() { + window.addEventListener("beforeunload", send_cancel, true); + }, + setup(app) { + + const draw = LGraphCanvas.prototype.draw; + LGraphCanvas.prototype.draw = function() { + if (hud.update()) { + app.graph._nodes.forEach((node)=> { if (node.update) { node.update(); } }) + } + draw.apply(this,arguments); + } + + + function easyuseImageChooser(event) { + const {node,image,isKSampler} = display_preview_images(event); + if(isKSampler) { + const dialog = new chooserImageDialog(); + dialog.show(image,node) + } + } + api.addEventListener("easyuse-image-choose", easyuseImageChooser); + + /* + If a run is interrupted, send a cancel message (unless we're doing the cancelling, to avoid infinite loop) + */ + const original_api_interrupt = api.interrupt; + api.interrupt = function () { + if (FlowState.paused() && !FlowState.cancelling) send_cancel(); + original_api_interrupt.apply(this, arguments); + } + + /* + At the start of execution + */ + function on_execution_start() { + if (send_onstart()) { + app.graph._nodes.forEach((node)=> { + if (node.selected || node.anti_selected) { + node.selected.clear(); + node.anti_selected.clear(); + node.update(); + } + }) + } + } + api.addEventListener("execution_start", on_execution_start); + }, + + async nodeCreated(node, app) { + + if(node.comfyClass == 'easy imageChooser'){ + node.setProperty('values',[]) + + /* A property defining the top of the image when there is just one */ + if(node?.imageIndex === undefined){ + Object.defineProperty(node, 'imageIndex', { + get : function() { return null; }, + set: function (v) {node.overIndex= v}, + }) + } + if(node?.imagey === undefined){ + Object.defineProperty(node, 'imagey', { + get : function() { return null; }, + set: function (v) {return node.widgets[node.widgets.length-1].last_y+LiteGraph.NODE_WIDGET_HEIGHT;}, + }) + } + + /* Capture clicks */ + const org_onMouseDown = node.onMouseDown; + node.onMouseDown = function( e, pos, canvas ) { + if (e.isPrimary) { + const i = click_is_in_image(node, pos); + if (i>=0) { this.imageClicked(i); } + } + return (org_onMouseDown && org_onMouseDown.apply(this, arguments)); + } + + node.send_button_widget = node.addWidget("button", "", "", progressButtonPressed); + node.cancel_button_widget = node.addWidget("button", "", "", cancelButtonPressed); + enable_disabling(node.cancel_button_widget); + enable_disabling(node.send_button_widget); + disable_serialize(node.cancel_button_widget); + disable_serialize(node.send_button_widget); + + } + }, + + beforeRegisterNodeDef(nodeType, nodeData, app) { + if(nodeData?.name == 'easy imageChooser'){ + + const onDrawBackground = nodeType.prototype.onDrawBackground; + nodeType.prototype.onDrawBackground = function(ctx) { + onDrawBackground.apply(this, arguments); + additionalDrawBackground(this, ctx); + } + + nodeType.prototype.imageClicked = function (imageIndex) { + if (nodeType?.comfyClass==="easy imageChooser") { + if (this.selected.has(imageIndex)) this.selected.delete(imageIndex); + else this.selected.add(imageIndex); + this.update(); + } + } + + const update = nodeType.prototype.update; + nodeType.prototype.update = function() { + if (update) update.apply(this,arguments); + if (this.send_button_widget) { + this.send_button_widget.node_id = this.id; + const selection = ( this.selected ? this.selected.size : 0 ) + ( this.anti_selected ? this.anti_selected.size : 0 ) + const maxlength = this.imgs?.length || 0; + if (FlowState.paused_here(this.id) && selection>0) { + this.send_button_widget.name = (selection>1) ? "Progress selected (" + selection + '/' + maxlength +")" : "Progress selected image"; + } else if (selection>0) { + this.send_button_widget.name = (selection>1) ? "Progress selected (" + selection + '/' + maxlength +")" : "Progress selected image as restart"; + } + else { + this.send_button_widget.name = ""; + } + } + if (this.cancel_button_widget) { + const isRunning = FlowState.running() + this.cancel_button_widget.name = isRunning ? "Cancel current run" : ""; + } + this.setDirtyCanvas(true,true); + } + } + } +}) \ No newline at end of file diff --git a/comfyui-easy-use/web_version/v1/lib/fabric.js b/comfyui-easy-use/web_version/v1/lib/fabric.js new file mode 100644 index 0000000000000000000000000000000000000000..fa7bd3ce09e2b1c4168a380f625cb8a96c05ab0a --- /dev/null +++ b/comfyui-easy-use/web_version/v1/lib/fabric.js @@ -0,0 +1,10 @@ +/** + * Bundled by jsDelivr using Rollup v2.79.1 and Terser v5.17.1. + * Original file: /npm/fabric-with-all-modules@4.6.1/dist/fabric.js + * + * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files + */ +function t(t,e){return e.forEach((function(e){e&&"string"!=typeof e&&!Array.isArray(e)&&Object.keys(e).forEach((function(i){if("default"!==i&&!(i in t)){var r=Object.getOwnPropertyDescriptor(e,i);Object.defineProperty(t,i,r.get?r:{enumerable:!0,get:function(){return e[i]}})}}))})),Object.freeze(t)}var e="undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{},i=[],r=[],n="undefined"!=typeof Uint8Array?Uint8Array:Array,o=!1;function s(){o=!0;for(var t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",e=0;e<64;++e)i[e]=t[e],r[t.charCodeAt(e)]=e;r["-".charCodeAt(0)]=62,r["_".charCodeAt(0)]=63}function a(t,e,r){for(var n,o,s=[],a=e;a>18&63]+i[o>>12&63]+i[o>>6&63]+i[63&o]);return s.join("")}function h(t){var e;o||s();for(var r=t.length,n=r%3,h="",c=[],l=16383,u=0,f=r-n;uf?f:u+l));return 1===n?(e=t[r-1],h+=i[e>>2],h+=i[e<<4&63],h+="=="):2===n&&(e=(t[r-2]<<8)+t[r-1],h+=i[e>>10],h+=i[e>>4&63],h+=i[e<<2&63],h+="="),c.push(h),c.join("")}function c(t,e,i,r,n){var o,s,a=8*n-r-1,h=(1<>1,l=-7,u=i?n-1:0,f=i?-1:1,d=t[e+u];for(u+=f,o=d&(1<<-l)-1,d>>=-l,l+=a;l>0;o=256*o+t[e+u],u+=f,l-=8);for(s=o&(1<<-l)-1,o>>=-l,l+=r;l>0;s=256*s+t[e+u],u+=f,l-=8);if(0===o)o=1-c;else{if(o===h)return s?NaN:1/0*(d?-1:1);s+=Math.pow(2,r),o-=c}return(d?-1:1)*s*Math.pow(2,o-r)}function l(t,e,i,r,n,o){var s,a,h,c=8*o-n-1,l=(1<>1,f=23===n?Math.pow(2,-24)-Math.pow(2,-77):0,d=r?0:o-1,g=r?1:-1,p=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(a=isNaN(e)?1:0,s=l):(s=Math.floor(Math.log(e)/Math.LN2),e*(h=Math.pow(2,-s))<1&&(s--,h*=2),(e+=s+u>=1?f/h:f*Math.pow(2,1-u))*h>=2&&(s++,h/=2),s+u>=l?(a=0,s=l):s+u>=1?(a=(e*h-1)*Math.pow(2,n),s+=u):(a=e*Math.pow(2,u-1)*Math.pow(2,n),s=0));n>=8;t[i+d]=255&a,d+=g,a/=256,n-=8);for(s=s<0;t[i+d]=255&s,d+=g,s/=256,c-=8);t[i+d-g]|=128*p}var u={}.toString,f=Array.isArray||function(t){return"[object Array]"==u.call(t)};function d(){return p.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function g(t,e){if(d()=d())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+d().toString(16)+" bytes");return 0|t}function x(t){return!(null==t||!t._isBuffer)}function C(t,e){if(x(t))return t.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(t)||t instanceof ArrayBuffer))return t.byteLength;"string"!=typeof t&&(t=""+t);var i=t.length;if(0===i)return 0;for(var r=!1;;)switch(e){case"ascii":case"latin1":case"binary":return i;case"utf8":case"utf-8":case void 0:return K(t).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*i;case"hex":return i>>>1;case"base64":return J(t).length;default:if(r)return K(t).length;e=(""+e).toLowerCase(),r=!0}}function w(t,e,i){var r=!1;if((void 0===e||e<0)&&(e=0),e>this.length)return"";if((void 0===i||i>this.length)&&(i=this.length),i<=0)return"";if((i>>>=0)<=(e>>>=0))return"";for(t||(t="utf8");;)switch(t){case"hex":return B(this,e,i);case"utf8":case"utf-8":return F(this,e,i);case"ascii":return I(this,e,i);case"latin1":case"binary":return R(this,e,i);case"base64":return j(this,e,i);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return Y(this,e,i);default:if(r)throw new TypeError("Unknown encoding: "+t);t=(t+"").toLowerCase(),r=!0}}function S(t,e,i){var r=t[e];t[e]=t[i],t[i]=r}function T(t,e,i,r,n){if(0===t.length)return-1;if("string"==typeof i?(r=i,i=0):i>2147483647?i=2147483647:i<-2147483648&&(i=-2147483648),i=+i,isNaN(i)&&(i=n?0:t.length-1),i<0&&(i=t.length+i),i>=t.length){if(n)return-1;i=t.length-1}else if(i<0){if(!n)return-1;i=0}if("string"==typeof e&&(e=p.from(e,r)),x(e))return 0===e.length?-1:O(t,e,i,r,n);if("number"==typeof e)return e&=255,p.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?n?Uint8Array.prototype.indexOf.call(t,e,i):Uint8Array.prototype.lastIndexOf.call(t,e,i):O(t,[e],i,r,n);throw new TypeError("val must be string, number or Buffer")}function O(t,e,i,r,n){var o,s=1,a=t.length,h=e.length;if(void 0!==r&&("ucs2"===(r=String(r).toLowerCase())||"ucs-2"===r||"utf16le"===r||"utf-16le"===r)){if(t.length<2||e.length<2)return-1;s=2,a/=2,h/=2,i/=2}function c(t,e){return 1===s?t[e]:t.readUInt16BE(e*s)}if(n){var l=-1;for(o=i;oa&&(i=a-h),o=i;o>=0;o--){for(var u=!0,f=0;fn&&(r=n):r=n;var o=e.length;if(o%2!=0)throw new TypeError("Invalid hex string");r>o/2&&(r=o/2);for(var s=0;s>8,n=i%256,o.push(n),o.push(r);return o}(e,t.length-i),t,i,r)}function j(t,e,i){return 0===e&&i===t.length?h(t):h(t.slice(e,i))}function F(t,e,i){i=Math.min(t.length,i);for(var r=[],n=e;n239?4:c>223?3:c>191?2:1;if(n+u<=i)switch(u){case 1:c<128&&(l=c);break;case 2:128==(192&(o=t[n+1]))&&(h=(31&c)<<6|63&o)>127&&(l=h);break;case 3:o=t[n+1],s=t[n+2],128==(192&o)&&128==(192&s)&&(h=(15&c)<<12|(63&o)<<6|63&s)>2047&&(h<55296||h>57343)&&(l=h);break;case 4:o=t[n+1],s=t[n+2],a=t[n+3],128==(192&o)&&128==(192&s)&&128==(192&a)&&(h=(15&c)<<18|(63&o)<<12|(63&s)<<6|63&a)>65535&&h<1114112&&(l=h)}null===l?(l=65533,u=1):l>65535&&(l-=65536,r.push(l>>>10&1023|55296),l=56320|1023&l),r.push(l),n+=u}return function(t){var e=t.length;if(e<=L)return String.fromCharCode.apply(String,t);var i="",r=0;for(;r0&&(t=this.toString("hex",0,50).match(/.{2}/g).join(" "),this.length>50&&(t+=" ... ")),""},p.prototype.compare=function(t,e,i,r,n){if(!x(t))throw new TypeError("Argument must be a Buffer");if(void 0===e&&(e=0),void 0===i&&(i=t?t.length:0),void 0===r&&(r=0),void 0===n&&(n=this.length),e<0||i>t.length||r<0||n>this.length)throw new RangeError("out of range index");if(r>=n&&e>=i)return 0;if(r>=n)return-1;if(e>=i)return 1;if(this===t)return 0;for(var o=(n>>>=0)-(r>>>=0),s=(i>>>=0)-(e>>>=0),a=Math.min(o,s),h=this.slice(r,n),c=t.slice(e,i),l=0;ln)&&(i=n),t.length>0&&(i<0||e<0)||e>this.length)throw new RangeError("Attempt to write outside buffer bounds");r||(r="utf8");for(var o=!1;;)switch(r){case"hex":return P(this,t,e,i);case"utf8":case"utf-8":return E(this,t,e,i);case"ascii":return k(this,t,e,i);case"latin1":case"binary":return A(this,t,e,i);case"base64":return D(this,t,e,i);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return M(this,t,e,i);default:if(o)throw new TypeError("Unknown encoding: "+r);r=(""+r).toLowerCase(),o=!0}},p.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var L=4096;function I(t,e,i){var r="";i=Math.min(t.length,i);for(var n=e;nr)&&(i=r);for(var n="",o=e;oi)throw new RangeError("Trying to access beyond buffer length")}function U(t,e,i,r,n,o){if(!x(t))throw new TypeError('"buffer" argument must be a Buffer instance');if(e>n||et.length)throw new RangeError("Index out of range")}function G(t,e,i,r){e<0&&(e=65535+e+1);for(var n=0,o=Math.min(t.length-i,2);n>>8*(r?n:1-n)}function H(t,e,i,r){e<0&&(e=4294967295+e+1);for(var n=0,o=Math.min(t.length-i,4);n>>8*(r?n:3-n)&255}function W(t,e,i,r,n,o){if(i+r>t.length)throw new RangeError("Index out of range");if(i<0)throw new RangeError("Index out of range")}function z(t,e,i,r,n){return n||W(t,0,i,4),l(t,e,i,r,23,4),i+4}function N(t,e,i,r,n){return n||W(t,0,i,8),l(t,e,i,r,52,8),i+8}p.prototype.slice=function(t,e){var i,r=this.length;if((t=~~t)<0?(t+=r)<0&&(t=0):t>r&&(t=r),(e=void 0===e?r:~~e)<0?(e+=r)<0&&(e=0):e>r&&(e=r),e0&&(n*=256);)r+=this[t+--e]*n;return r},p.prototype.readUInt8=function(t,e){return e||X(t,1,this.length),this[t]},p.prototype.readUInt16LE=function(t,e){return e||X(t,2,this.length),this[t]|this[t+1]<<8},p.prototype.readUInt16BE=function(t,e){return e||X(t,2,this.length),this[t]<<8|this[t+1]},p.prototype.readUInt32LE=function(t,e){return e||X(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},p.prototype.readUInt32BE=function(t,e){return e||X(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},p.prototype.readIntLE=function(t,e,i){t|=0,e|=0,i||X(t,e,this.length);for(var r=this[t],n=1,o=0;++o=(n*=128)&&(r-=Math.pow(2,8*e)),r},p.prototype.readIntBE=function(t,e,i){t|=0,e|=0,i||X(t,e,this.length);for(var r=e,n=1,o=this[t+--r];r>0&&(n*=256);)o+=this[t+--r]*n;return o>=(n*=128)&&(o-=Math.pow(2,8*e)),o},p.prototype.readInt8=function(t,e){return e||X(t,1,this.length),128&this[t]?-1*(255-this[t]+1):this[t]},p.prototype.readInt16LE=function(t,e){e||X(t,2,this.length);var i=this[t]|this[t+1]<<8;return 32768&i?4294901760|i:i},p.prototype.readInt16BE=function(t,e){e||X(t,2,this.length);var i=this[t+1]|this[t]<<8;return 32768&i?4294901760|i:i},p.prototype.readInt32LE=function(t,e){return e||X(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},p.prototype.readInt32BE=function(t,e){return e||X(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},p.prototype.readFloatLE=function(t,e){return e||X(t,4,this.length),c(this,t,!0,23,4)},p.prototype.readFloatBE=function(t,e){return e||X(t,4,this.length),c(this,t,!1,23,4)},p.prototype.readDoubleLE=function(t,e){return e||X(t,8,this.length),c(this,t,!0,52,8)},p.prototype.readDoubleBE=function(t,e){return e||X(t,8,this.length),c(this,t,!1,52,8)},p.prototype.writeUIntLE=function(t,e,i,r){(t=+t,e|=0,i|=0,r)||U(this,t,e,i,Math.pow(2,8*i)-1,0);var n=1,o=0;for(this[e]=255&t;++o=0&&(o*=256);)this[e+n]=t/o&255;return e+i},p.prototype.writeUInt8=function(t,e,i){return t=+t,e|=0,i||U(this,t,e,1,255,0),p.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),this[e]=255&t,e+1},p.prototype.writeUInt16LE=function(t,e,i){return t=+t,e|=0,i||U(this,t,e,2,65535,0),p.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8):G(this,t,e,!0),e+2},p.prototype.writeUInt16BE=function(t,e,i){return t=+t,e|=0,i||U(this,t,e,2,65535,0),p.TYPED_ARRAY_SUPPORT?(this[e]=t>>>8,this[e+1]=255&t):G(this,t,e,!1),e+2},p.prototype.writeUInt32LE=function(t,e,i){return t=+t,e|=0,i||U(this,t,e,4,4294967295,0),p.TYPED_ARRAY_SUPPORT?(this[e+3]=t>>>24,this[e+2]=t>>>16,this[e+1]=t>>>8,this[e]=255&t):H(this,t,e,!0),e+4},p.prototype.writeUInt32BE=function(t,e,i){return t=+t,e|=0,i||U(this,t,e,4,4294967295,0),p.TYPED_ARRAY_SUPPORT?(this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t):H(this,t,e,!1),e+4},p.prototype.writeIntLE=function(t,e,i,r){if(t=+t,e|=0,!r){var n=Math.pow(2,8*i-1);U(this,t,e,i,n-1,-n)}var o=0,s=1,a=0;for(this[e]=255&t;++o>0)-a&255;return e+i},p.prototype.writeIntBE=function(t,e,i,r){if(t=+t,e|=0,!r){var n=Math.pow(2,8*i-1);U(this,t,e,i,n-1,-n)}var o=i-1,s=1,a=0;for(this[e+o]=255&t;--o>=0&&(s*=256);)t<0&&0===a&&0!==this[e+o+1]&&(a=1),this[e+o]=(t/s>>0)-a&255;return e+i},p.prototype.writeInt8=function(t,e,i){return t=+t,e|=0,i||U(this,t,e,1,127,-128),p.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),t<0&&(t=255+t+1),this[e]=255&t,e+1},p.prototype.writeInt16LE=function(t,e,i){return t=+t,e|=0,i||U(this,t,e,2,32767,-32768),p.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8):G(this,t,e,!0),e+2},p.prototype.writeInt16BE=function(t,e,i){return t=+t,e|=0,i||U(this,t,e,2,32767,-32768),p.TYPED_ARRAY_SUPPORT?(this[e]=t>>>8,this[e+1]=255&t):G(this,t,e,!1),e+2},p.prototype.writeInt32LE=function(t,e,i){return t=+t,e|=0,i||U(this,t,e,4,2147483647,-2147483648),p.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8,this[e+2]=t>>>16,this[e+3]=t>>>24):H(this,t,e,!0),e+4},p.prototype.writeInt32BE=function(t,e,i){return t=+t,e|=0,i||U(this,t,e,4,2147483647,-2147483648),t<0&&(t=4294967295+t+1),p.TYPED_ARRAY_SUPPORT?(this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t):H(this,t,e,!1),e+4},p.prototype.writeFloatLE=function(t,e,i){return z(this,t,e,!0,i)},p.prototype.writeFloatBE=function(t,e,i){return z(this,t,e,!1,i)},p.prototype.writeDoubleLE=function(t,e,i){return N(this,t,e,!0,i)},p.prototype.writeDoubleBE=function(t,e,i){return N(this,t,e,!1,i)},p.prototype.copy=function(t,e,i,r){if(i||(i=0),r||0===r||(r=this.length),e>=t.length&&(e=t.length),e||(e=0),r>0&&r=this.length)throw new RangeError("sourceStart out of bounds");if(r<0)throw new RangeError("sourceEnd out of bounds");r>this.length&&(r=this.length),t.length-e=0;--n)t[n+e]=this[n+i];else if(o<1e3||!p.TYPED_ARRAY_SUPPORT)for(n=0;n>>=0,i=void 0===i?this.length:i>>>0,t||(t=0),"number"==typeof t)for(o=e;o55295&&i<57344){if(!n){if(i>56319){(e-=3)>-1&&o.push(239,191,189);continue}if(s+1===r){(e-=3)>-1&&o.push(239,191,189);continue}n=i;continue}if(i<56320){(e-=3)>-1&&o.push(239,191,189),n=i;continue}i=65536+(n-55296<<10|i-56320)}else n&&(e-=3)>-1&&o.push(239,191,189);if(n=null,i<128){if((e-=1)<0)break;o.push(i)}else if(i<2048){if((e-=2)<0)break;o.push(i>>6|192,63&i|128)}else if(i<65536){if((e-=3)<0)break;o.push(i>>12|224,i>>6&63|128,63&i|128)}else{if(!(i<1114112))throw new Error("Invalid code point");if((e-=4)<0)break;o.push(i>>18|240,i>>12&63|128,i>>6&63|128,63&i|128)}}return o}function J(t){return function(t){var e,i,a,h,c,l;o||s();var u=t.length;if(u%4>0)throw new Error("Invalid string. Length must be a multiple of 4");c="="===t[u-2]?2:"="===t[u-1]?1:0,l=new n(3*u/4-c),a=c>0?u-4:u;var f=0;for(e=0,i=0;e>16&255,l[f++]=h>>8&255,l[f++]=255&h;return 2===c?(h=r[t.charCodeAt(e)]<<2|r[t.charCodeAt(e+1)]>>4,l[f++]=255&h):1===c&&(h=r[t.charCodeAt(e)]<<10|r[t.charCodeAt(e+1)]<<4|r[t.charCodeAt(e+2)]>>2,l[f++]=h>>8&255,l[f++]=255&h),l}(function(t){if((t=function(t){return t.trim?t.trim():t.replace(/^\s+|\s+$/g,"")}(t).replace(V,"")).length<2)return"";for(;t.length%4!=0;)t+="=";return t}(t))}function Z(t,e,i,r){for(var n=0;n=e.length||n>=t.length);++n)e[n+i]=t[n];return n}function $(t){return!!t.constructor&&"function"==typeof t.constructor.isBuffer&&t.constructor.isBuffer(t)}function Q(t){if(t.__esModule)return t;var e=Object.defineProperty({},"__esModule",{value:!0});return Object.keys(t).forEach((function(i){var r=Object.getOwnPropertyDescriptor(t,i);Object.defineProperty(e,i,r.get?r:{enumerable:!0,get:function(){return t[i]}})})),e}var tt={},et={},it=Q(t({__proto__:null,default:et},[et]));!function(t){ +/*! Fabric.js Copyright 2008-2015, Printio (Juriy Zaytsev, Maxim Chernyak) */ +var e,i,r,n,o,s,a,h,c,l,u,f,d,g,v,m,y,_,b,x,C,w,S,T=T||{version:"4.6.0"};if(t.fabric=T,"undefined"!=typeof document&&"undefined"!=typeof window)document instanceof("undefined"!=typeof HTMLDocument?HTMLDocument:Document)?T.document=document:T.document=document.implementation.createHTMLDocument(""),T.window=window;else{var O=new it.JSDOM(decodeURIComponent("%3C!DOCTYPE%20html%3E%3Chtml%3E%3Chead%3E%3C%2Fhead%3E%3Cbody%3E%3C%2Fbody%3E%3C%2Fhtml%3E"),{features:{FetchExternalResources:["img"]},resources:"usable"}).window;T.document=O.document,T.jsdomImplForWrapper=it.implForWrapper,T.nodeCanvas=it.Canvas,T.window=O,DOMParser=T.window.DOMParser}if(T.isTouchSupported="ontouchstart"in T.window||"ontouchstart"in T.document||T.window&&T.window.navigator&&T.window.navigator.maxTouchPoints>0,T.isLikelyNode=void 0!==p&&"undefined"==typeof window,T.SHARED_ATTRIBUTES=["display","transform","fill","fill-opacity","fill-rule","opacity","stroke","stroke-dasharray","stroke-linecap","stroke-dashoffset","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","id","paint-order","vector-effect","instantiated_by_use","clip-path"],T.DPI=96,T.reNum="(?:[-+]?(?:\\d+|\\d*\\.\\d+)(?:[eE][-+]?\\d+)?)",T.commaWsp="(?:\\s+,?\\s*|,\\s*)",T.rePathCommand=/([-+]?((\d+\.\d+)|((\d+)|(\.\d+)))(?:[eE][-+]?\d+)?)/gi,T.reNonWord=/[ \n\.,;!\?\-]/,T.fontPaths={},T.iMatrix=[1,0,0,1,0,0],T.svgNS="http://www.w3.org/2000/svg",T.perfLimitSizeTotal=2097152,T.maxCacheSideLimit=4096,T.minCacheSideLimit=256,T.charWidthsCache={},T.textureSize=2048,T.disableStyleCopyPaste=!1,T.enableGLFiltering=!0,T.devicePixelRatio=T.window.devicePixelRatio||T.window.webkitDevicePixelRatio||T.window.mozDevicePixelRatio||1,T.browserShadowBlurConstant=1,T.arcToSegmentsCache={},T.boundsOfCurveCache={},T.cachesBoundsOfCurve=!0,T.forceGLPutImageData=!1,T.initFilterBackend=function(){return T.enableGLFiltering&&T.isWebglSupported&&T.isWebglSupported(T.textureSize)?(console.log("max texture size: "+T.maxTextureSize),new T.WebglFilterBackend({tileSize:T.textureSize})):T.Canvas2dFilterBackend?new T.Canvas2dFilterBackend:void 0},"undefined"!=typeof document&&"undefined"!=typeof window&&(window.fabric=T),void 0===P)var P={};if(function(t){t.modifyEventListener=!1,t.modifySelectors=!1,t.configure=function(e){isFinite(e.modifyEventListener)&&(t.modifyEventListener=e.modifyEventListener),isFinite(e.modifySelectors)&&(t.modifySelectors=e.modifySelectors),!1===d&&t.modifyEventListener&&g(),!1===p&&t.modifySelectors&&v()},t.add=function(t,e,r,n){return i(t,e,r,n,"add")},t.remove=function(t,e,r,n){return i(t,e,r,n,"remove")},t.returnFalse=function(t){return!1},t.stop=function(t){t&&(t.stopPropagation&&t.stopPropagation(),t.cancelBubble=!0,t.cancelBubbleCount=0)},t.prevent=function(t){t&&(t.preventDefault?t.preventDefault():t.preventManipulation?t.preventManipulation():t.returnValue=!1)},t.cancel=function(e){t.stop(e),t.prevent(e)},t.blur=function(){var t=document.activeElement;if(t){var e=document.activeElement.nodeName;"INPUT"!==e&&"TEXTAREA"!==e&&"true"!==t.contentEditable||t.blur&&t.blur()}},t.getEventSupport=function(t,e){if("string"==typeof t&&(e=t,t=window),(e="on"+e)in t)return!0;if(t.setAttribute||(t=document.createElement("div")),t.setAttribute&&t.removeAttribute){t.setAttribute(e,"");var i="function"==typeof t[e];return void 0!==t[e]&&(t[e]=null),t.removeAttribute(e),i}};var e=function(t){if(!t||"object"!=typeof t)return t;var i=new t.constructor;for(var r in t)t[r]&&"object"==typeof t[r]?i[r]=e(t[r]):i[r]=t[r];return i},i=function(o,s,c,d,g,p){if(d=d||{},"[object Object]"===String(o)){var v=o;if(o=v.target,delete v.target,!v.type||!v.listener){for(var m in v){var y=v[m];"function"!=typeof y&&(d[m]=y)}var _={};for(var b in v){m=b.split(",");var x=v[b],C={};for(var w in d)C[w]=d[w];if("function"==typeof x)c=x;else{if("function"!=typeof x.listener)continue;c=x.listener;for(var w in x)"function"!=typeof x[w]&&(C[w]=x[w])}for(var S=0;SO&&window.clearInterval(k),document.querySelector(o)&&(window.clearInterval(k),setTimeout(c,1))}),E);return}s="load",o=window}if("string"==typeof o){if(0===(o=document.querySelectorAll(o)).length)return n("Missing target on listener!",arguments);1===o.length&&(o=o[0])}var A,D={};if(o.length>0&&o!==window){for(var M=0,j=o.length;M=r.maxFingers){var d=[];for(var f in r.tracker)d.push(f);return i.identifier=d.join(","),s}for(var g in a)if(a[g].up){delete a[g],o(u,f),r.cancel=!0;break}if(a[f])continue;o(u,f)}else a=r.tracker={},i.bbox=r.bbox=t.getBoundingBox(r.target),r.fingers=0,r.cancel=!1,o(u,f)}d=[];for(var f in r.tracker)d.push(f);return i.identifier=d.join(","),s},t.pointerEnd=function(t,e,i,r){for(var n=t.touches||[],o=n.length,s={},a=0;ao.x1&&a>o.y1&&h0&&l0&&u0?x:-x,void 0!==v.DEG2&&(x>0?v.rotation+=v.DEG1-v.DEG2:v.rotation-=v.DEG1-v.DEG2,g+=v.rotation),f.push(v.move)}}n.touches=f,n.fingers=r.fingers,n.scale=d/r.fingers,n.rotation=g/r.fingers,n.state="change",r.listener(o,n)}},r.onPointerUp=function(e){var i=r.fingers;t.pointerEnd(e,n,r)&&(P.remove(r.doc,"mousemove",r.onPointerMove),P.remove(r.doc,"mouseup",r.onPointerUp)),i===r.minFingers&&r.fingers4){var g=h*u/d,p=Math.abs(g+f.value);f.value&&p<200?(f.value=g,f.count++,3===f.count&&(t.listener(o,e),i=h,f.value=0,f.count=0)):(f.value=g,f.count=1)}}else t.listener(o,e)};if(window.addEventListener)return window.addEventListener("devicemotion",o,!1),e},P.Gesture=P.Gesture||{},P.Gesture._gestureHandlers=P.Gesture._gestureHandlers||{},P.Gesture._gestureHandlers.shake=t.shake,t}(P.proxy),void 0===P)P={};if(void 0===P.proxy&&(P.proxy={}),P.proxy=function(t){var e=Math.PI/180;return t.swipe=function(i){i.snap=i.snap||90,i.threshold=i.threshold||1,i.gesture=i.gesture||"swipe",i.onPointerDown=function(e){t.pointerStart(e,r,i)&&(P.add(i.doc,"mousemove",i.onPointerMove).listener(e),P.add(i.doc,"mouseup",i.onPointerUp))},i.onPointerMove=function(e){for(var r=e.changedTouches||t.getCoords(e),n=r.length,o=0;o=_&&o>i.threshold&&(a.x/=l,a.y/=l,r.start=a,r.x=h/l,r.y=c/l,r.angle=-(((s/i.snap+.5>>0)*i.snap||360)-360),r.velocity=o,r.fingers=_,r.state="swipe",i.listener(n,r))}};var r=t.pointerSetup(i);return P.add(i.target,"mousedown",i.onPointerDown),r},P.Gesture=P.Gesture||{},P.Gesture._gestureHandlers=P.Gesture._gestureHandlers||{},P.Gesture._gestureHandlers.swipe=t.swipe,t}(P.proxy),void 0===P)P={};if(void 0===P.proxy&&(P.proxy={}),P.proxy=function(t){return t.longpress=function(e){return e.gesture="longpress",t.tap(e)},t.tap=function(e){var i,r;e.delay=e.delay||500,e.timeout=e.timeout||250,e.driftDeviance=e.driftDeviance||10,e.gesture=e.gesture||"tap",e.onPointerDown=function(o){if(t.pointerStart(o,n,e)){if(i=(new Date).getTime(),P.add(e.doc,"mousemove",e.onPointerMove).listener(o),P.add(e.doc,"mouseup",e.onPointerUp),"longpress"!==e.gesture)return;r=setTimeout((function(){if(!(o.cancelBubble&&++o.cancelBubbleCount>1)){var t=0;for(var i in e.tracker){var r=e.tracker[i];if(!0===r.end)return;if(e.cancel)return;t++}e.minFingers<=t&&e.maxFingers>=t&&(n.state="start",n.fingers=t,n.x=r.start.x,n.y=r.start.y,e.listener(o,n))}}),e.delay)}},e.onPointerMove=function(i){for(var r=e.bbox,n=i.changedTouches||t.getCoords(i),o=n.length,s=0;s0&&l0&&u1)return;if("longpress"===e.gesture)return void("start"===n.state&&(n.state="end",e.listener(o,n)));if(e.cancel)return;if((new Date).getTime()-i>e.timeout)return;var s=e.gestureFingers;e.minFingers<=s&&e.maxFingers>=s&&(n.state="tap",n.fingers=e.gestureFingers,e.listener(o,n))}};var n=t.pointerSetup(e);return P.add(e.target,"mousedown",e.onPointerDown),n},P.Gesture=P.Gesture||{},P.Gesture._gestureHandlers=P.Gesture._gestureHandlers||{},P.Gesture._gestureHandlers.tap=t.tap,P.Gesture._gestureHandlers.longpress=t.longpress,t}(P.proxy),void 0===P)P={};if(void 0===P.proxy&&(P.proxy={}),P.proxy=function(t){return t.wheelPreventElasticBounce=function(t){t&&("string"==typeof t&&(t=document.querySelector(t)),P.add(t,"wheel",(function(t,e){e.preventElasticBounce(),P.stop(t)})))},t.wheel=function(t){var e,i=t.timeout||150,r=0,n={gesture:"wheel",state:"start",wheelDelta:0,target:t.target,listener:t.listener,preventElasticBounce:function(t){var e=this.target,i=e.scrollTop;(i+e.offsetHeight===e.scrollHeight&&this.wheelDelta<=0||0===i&&this.wheelDelta>=0)&&P.cancel(t),P.stop(t)},add:function(){t.target[s](h,o,!1)},remove:function(){t.target[a](h,o,!1)}},o=function(o){o=o||window.event,n.state=r++?"change":"start",n.wheelDelta=o.detail?-20*o.detail:o.wheelDelta,t.listener(o,n),clearTimeout(e),e=setTimeout((function(){r=0,n.state="end",n.wheelDelta=0,t.listener(o,n)}),i)},s=document.addEventListener?"addEventListener":"attachEvent",a=document.removeEventListener?"removeEventListener":"detachEvent",h=P.getEventSupport("mousewheel")?"mousewheel":"DOMMouseScroll";return t.target[s](h,o,!1),n},P.Gesture=P.Gesture||{},P.Gesture._gestureHandlers=P.Gesture._gestureHandlers||{},P.Gesture._gestureHandlers.wheel=t.wheel,t}(P.proxy),void 0===E)var E={};function k(t,e){var i=t.canvas,r=e.targetCanvas,n=r.getContext("2d");n.translate(0,r.height),n.scale(1,-1);var o=i.height-r.height;n.drawImage(i,0,o,r.width,r.height,0,0,r.width,r.height)}function A(t,e){var i=e.targetCanvas.getContext("2d"),r=e.destinationWidth,n=e.destinationHeight,o=r*n*4,s=new Uint8Array(this.imageBuffer,0,o),a=new Uint8ClampedArray(this.imageBuffer,0,o);t.readPixels(0,0,r,n,t.RGBA,t.UNSIGNED_BYTE,s);var h=new ImageData(a,r,n);i.putImageData(h,0,0)}void 0===E.proxy&&(E.proxy={}),E.proxy=function(t){return t.orientation=function(t){var e={gesture:"orientationchange",previous:null,current:window.orientation,target:t.target,listener:t.listener,remove:function(){window.removeEventListener("orientationchange",i,!1)}},i=function(i){e.previous=e.current,e.current=window.orientation,null===e.previous||e.previous==e.current||t.listener(i,e)};return window.DeviceOrientationEvent&&window.addEventListener("orientationchange",i,!1),e},E.Gesture=E.Gesture||{},E.Gesture._gestureHandlers=E.Gesture._gestureHandlers||{},E.Gesture._gestureHandlers.orientation=t.orientation,t}(E.proxy),function(){function t(t,e){if(this.__eventListeners[t]){var i=this.__eventListeners[t];e?i[i.indexOf(e)]=!1:T.util.array.fill(i,!1)}}function e(t,e){var i=function(){e.apply(this,arguments),this.off(t,i)}.bind(this);this.on(t,i)}T.Observable={fire:function(t,e){if(!this.__eventListeners)return this;var i=this.__eventListeners[t];if(!i)return this;for(var r=0,n=i.length;r-1||!!e&&this._objects.some((function(e){return"function"==typeof e.contains&&e.contains(t,!0)}))},complexity:function(){return this._objects.reduce((function(t,e){return t+=e.complexity?e.complexity():0}),0)}},T.CommonMethods={_setOptions:function(t){for(var e in t)this.set(e,t[e])},_initGradient:function(t,e){!t||!t.colorStops||t instanceof T.Gradient||this.set(e,new T.Gradient(t))},_initPattern:function(t,e,i){!t||!t.source||t instanceof T.Pattern?i&&i():this.set(e,new T.Pattern(t,i))},_setObject:function(t){for(var e in t)this._set(e,t[e])},set:function(t,e){return"object"==typeof t?this._setObject(t):this._set(t,e),this},_set:function(t,e){this[t]=e},toggle:function(t){var e=this.get(t);return"boolean"==typeof e&&this.set(t,!e),this},get:function(t){return this[t]}},n=t,o=Math.sqrt,s=Math.atan2,a=Math.pow,h=Math.PI/180,c=Math.PI/2,T.util={cos:function(t){if(0===t)return 1;switch(t<0&&(t=-t),t/c){case 1:case 3:return 0;case 2:return-1}return Math.cos(t)},sin:function(t){if(0===t)return 0;var e=1;switch(t<0&&(e=-1),t/c){case 1:return e;case 2:return 0;case 3:return-e}return Math.sin(t)},removeFromArray:function(t,e){var i=t.indexOf(e);return-1!==i&&t.splice(i,1),t},getRandomInt:function(t,e){return Math.floor(Math.random()*(e-t+1))+t},degreesToRadians:function(t){return t*h},radiansToDegrees:function(t){return t/h},rotatePoint:function(t,e,i){var r=new T.Point(t.x-e.x,t.y-e.y),n=T.util.rotateVector(r,i);return new T.Point(n.x,n.y).addEquals(e)},rotateVector:function(t,e){var i=T.util.sin(e),r=T.util.cos(e);return{x:t.x*r-t.y*i,y:t.x*i+t.y*r}},transformPoint:function(t,e,i){return i?new T.Point(e[0]*t.x+e[2]*t.y,e[1]*t.x+e[3]*t.y):new T.Point(e[0]*t.x+e[2]*t.y+e[4],e[1]*t.x+e[3]*t.y+e[5])},makeBoundingBoxFromPoints:function(t,e){if(e)for(var i=0;ie;)(e+=a[d++%f])>l&&(e=l),t[g?"lineTo":"moveTo"](e,0),g=!g;t.restore()},createCanvasElement:function(){return T.document.createElement("canvas")},copyCanvasElement:function(t){var e=T.util.createCanvasElement();return e.width=t.width,e.height=t.height,e.getContext("2d").drawImage(t,0,0),e},toDataURL:function(t,e,i){return t.toDataURL("image/"+e,i)},createImage:function(){return T.document.createElement("img")},multiplyTransformMatrices:function(t,e,i){return[t[0]*e[0]+t[2]*e[1],t[1]*e[0]+t[3]*e[1],t[0]*e[2]+t[2]*e[3],t[1]*e[2]+t[3]*e[3],i?0:t[0]*e[4]+t[2]*e[5]+t[4],i?0:t[1]*e[4]+t[3]*e[5]+t[5]]},qrDecompose:function(t){var e=s(t[1],t[0]),i=a(t[0],2)+a(t[1],2),r=o(i),n=(t[0]*t[3]-t[2]*t[1])/r,c=s(t[0]*t[2]+t[1]*t[3],i);return{angle:e/h,scaleX:r,scaleY:n,skewX:c/h,skewY:0,translateX:t[4],translateY:t[5]}},calcRotateMatrix:function(t){if(!t.angle)return T.iMatrix.concat();var e=T.util.degreesToRadians(t.angle),i=T.util.cos(e),r=T.util.sin(e);return[i,r,-r,i,0,0]},calcDimensionsMatrix:function(t){var e=void 0===t.scaleX?1:t.scaleX,i=void 0===t.scaleY?1:t.scaleY,r=[t.flipX?-e:e,0,0,t.flipY?-i:i,0,0],n=T.util.multiplyTransformMatrices,o=T.util.degreesToRadians;return t.skewX&&(r=n(r,[1,0,Math.tan(o(t.skewX)),1],!0)),t.skewY&&(r=n(r,[1,Math.tan(o(t.skewY)),0,1],!0)),r},composeMatrix:function(t){var e=[1,0,0,1,t.translateX||0,t.translateY||0],i=T.util.multiplyTransformMatrices;return t.angle&&(e=i(e,T.util.calcRotateMatrix(t))),(1!==t.scaleX||1!==t.scaleY||t.skewX||t.skewY||t.flipX||t.flipY)&&(e=i(e,T.util.calcDimensionsMatrix(t))),e},resetObjectTransform:function(t){t.scaleX=1,t.scaleY=1,t.skewX=0,t.skewY=0,t.flipX=!1,t.flipY=!1,t.rotate(0)},saveObjectTransform:function(t){return{scaleX:t.scaleX,scaleY:t.scaleY,skewX:t.skewX,skewY:t.skewY,angle:t.angle,left:t.left,flipX:t.flipX,flipY:t.flipY,top:t.top}},isTransparent:function(t,e,i,r){r>0&&(e>r?e-=r:e=0,i>r?i-=r:i=0);var n,o=!0,s=t.getImageData(e,i,2*r||1,2*r||1),a=s.data.length;for(n=3;n0?A-=2*c:1===a&&A<0&&(A+=2*c);for(var D=Math.ceil(Math.abs(A/c*2)),M=[],j=A/D,F=8/3*Math.sin(j/4)*Math.sin(j/4)/Math.sin(j/2),L=k+j,I=0;I=n?o-n:2*Math.PI-(n-o)}function s(e,i,r,n,o,s,a,h){var c;if(T.cachesBoundsOfCurve&&(c=t.call(arguments),T.boundsOfCurveCache[c]))return T.boundsOfCurveCache[c];var l,u,f,d,g,p,v,m,y=Math.sqrt,_=Math.min,b=Math.max,x=Math.abs,C=[],w=[[],[]];u=6*e-12*r+6*o,l=-3*e+9*r-9*o+3*a,f=3*r-3*e;for(var S=0;S<2;++S)if(S>0&&(u=6*i-12*n+6*s,l=-3*i+9*n-9*s+3*h,f=3*n-3*i),x(l)<1e-12){if(x(u)<1e-12)continue;0<(d=-f/u)&&d<1&&C.push(d)}else(v=u*u-4*f*l)<0||(0<(g=(-u+(m=y(v)))/(2*l))&&g<1&&C.push(g),0<(p=(-u-m)/(2*l))&&p<1&&C.push(p));for(var O,P,E,k=C.length,A=k;k--;)O=(E=1-(d=C[k]))*E*E*e+3*E*E*d*r+3*E*d*d*o+d*d*d*a,w[0][k]=O,P=E*E*E*i+3*E*E*d*n+3*E*d*d*s+d*d*d*h,w[1][k]=P;w[0][A]=e,w[1][A]=i,w[0][A+1]=a,w[1][A+1]=h;var D=[{x:_.apply(null,w[0]),y:_.apply(null,w[1])},{x:b.apply(null,w[0]),y:b.apply(null,w[1])}];return T.cachesBoundsOfCurve&&(T.boundsOfCurveCache[c]=D),D}function a(t,e,i){for(var r=i[1],o=i[2],s=i[3],a=i[4],h=i[5],c=n(i[6]-t,i[7]-e,r,o,a,h,s),l=0,u=c.length;l1e-4;)i=a(o),n=o,(r=h(c.x,c.y,i.x,i.y))+s>e?o-=l/=2:(c=i,o+=l,s+=r);return i.angle=u(n),i}function p(t){for(var e,i,r,n,o=0,s=t.length,a=0,g=0,p=0,v=0,m=[],y=0;yC)for(var S=1,O=p.length;S2;for(e=e||0,c&&(a=t[2].xt[i-2].x?1:n.x===t[i-2].x?0:-1,h=n.y>t[i-2].y?1:n.y===t[i-2].y?0:-1),r.push(["L",n.x+a*e,n.y+h*e]),r},T.util.getPathSegmentsInfo=p,T.util.getBoundsOfCurve=s,T.util.getPointOnPath=function(t,e,i){i||(i=p(t));for(var r=0;e-i[r].length>0&&r=e}))}}}(),function(){function t(e,i,r){if(r)if(!T.isLikelyNode&&i instanceof Element)e=i;else if(i instanceof Array){e=[];for(var n=0,o=i.length;n57343)return t.charAt(e);if(55296<=i&&i<=56319){if(t.length<=e+1)throw"High surrogate without following low surrogate";var r=t.charCodeAt(e+1);if(56320>r||r>57343)throw"High surrogate without following low surrogate";return t.charAt(e)+t.charAt(e+1)}if(0===e)throw"Low surrogate without preceding high surrogate";var n=t.charCodeAt(e-1);if(55296>n||n>56319)throw"Low surrogate without preceding high surrogate";return!1}T.util.string={camelize:function(t){return t.replace(/-+(.)?/g,(function(t,e){return e?e.toUpperCase():""}))},capitalize:function(t,e){return t.charAt(0).toUpperCase()+(e?t.slice(1):t.slice(1).toLowerCase())},escapeXml:function(t){return t.replace(/&/g,"&").replace(/"/g,""").replace(/'/g,"'").replace(//g,">")},graphemeSplit:function(e){var i,r=0,n=[];for(r=0;r-1?t.prototype[n]=function(t){return function(){var i=this.constructor.superclass;this.constructor.superclass=r;var n=e[t].apply(this,arguments);if(this.constructor.superclass=i,"initialize"!==t)return n}}(n):t.prototype[n]=e[n],i&&(e.toString!==Object.prototype.toString&&(t.prototype.toString=e.toString),e.valueOf!==Object.prototype.valueOf&&(t.prototype.valueOf=e.valueOf))};function n(){}function o(e){for(var i=null,r=this;r.constructor.superclass;){var n=r.constructor.superclass.prototype[e];if(r[e]!==n){i=n;break}r=r.constructor.superclass.prototype}return i?arguments.length>1?i.apply(this,t.call(arguments,1)):i.call(this):console.log("tried to callSuper "+e+", method not found in prototype chain",this)}T.util.createClass=function(){var i=null,s=t.call(arguments,0);function a(){this.initialize.apply(this,arguments)}"function"==typeof s[0]&&(i=s.shift()),a.superclass=i,a.subclasses=[],i&&(n.prototype=i.prototype,a.prototype=new n,i.subclasses.push(a));for(var h=0,c=s.length;h-1||"touch"===t.pointerType},f=T.document.createElement("div"),d="string"==typeof f.style.opacity,g="string"==typeof f.style.filter,v=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,m=function(t){return t},d?m=function(t,e){return t.style.opacity=e,t}:g&&(m=function(t,e){var i=t.style;return t.currentStyle&&!t.currentStyle.hasLayout&&(i.zoom=1),v.test(i.filter)?(e=e>=.9999?"":"alpha(opacity="+100*e+")",i.filter=i.filter.replace(v,e)):i.filter+=" alpha(opacity="+100*e+")",t}),T.util.setStyle=function(t,e){var i=t.style;if(!i)return t;if("string"==typeof e)return t.style.cssText+=";"+e,e.indexOf("opacity")>-1?m(t,e.match(/opacity:\s*(\d?\.?\d*)/)[1]):t;for(var r in e)"opacity"===r?m(t,e[r]):i["float"===r||"cssFloat"===r?void 0===i.styleFloat?"cssFloat":"styleFloat":r]=e[r];return t},function(){var t=Array.prototype.slice;var e,i,r,n,o=function(e){return t.call(e,0)};try{e=o(T.document.childNodes)instanceof Array}catch(t){}function s(t,e){var i=T.document.createElement(t);for(var r in e)"class"===r?i.className=e[r]:"for"===r?i.htmlFor=e[r]:i.setAttribute(r,e[r]);return i}function a(t){for(var e=0,i=0,r=T.document.documentElement,n=T.document.body||{scrollLeft:0,scrollTop:0};t&&(t.parentNode||t.host)&&((t=t.parentNode||t.host)===T.document?(e=n.scrollLeft||r.scrollLeft||0,i=n.scrollTop||r.scrollTop||0):(e+=t.scrollLeft||0,i+=t.scrollTop||0),1!==t.nodeType||"fixed"!==t.style.position););return{left:e,top:i}}e||(o=function(t){for(var e=new Array(t.length),i=t.length;i--;)e[i]=t[i];return e}),i=T.document.defaultView&&T.document.defaultView.getComputedStyle?function(t,e){var i=T.document.defaultView.getComputedStyle(t,null);return i?i[e]:void 0}:function(t,e){var i=t.style[e];return!i&&t.currentStyle&&(i=t.currentStyle[e]),i},r=T.document.documentElement.style,n="userSelect"in r?"userSelect":"MozUserSelect"in r?"MozUserSelect":"WebkitUserSelect"in r?"WebkitUserSelect":"KhtmlUserSelect"in r?"KhtmlUserSelect":"",T.util.makeElementUnselectable=function(t){return void 0!==t.onselectstart&&(t.onselectstart=T.util.falseFunction),n?t.style[n]="none":"string"==typeof t.unselectable&&(t.unselectable="on"),t},T.util.makeElementSelectable=function(t){return void 0!==t.onselectstart&&(t.onselectstart=null),n?t.style[n]="":"string"==typeof t.unselectable&&(t.unselectable=""),t},T.util.setImageSmoothing=function(t,e){t.imageSmoothingEnabled=t.imageSmoothingEnabled||t.webkitImageSmoothingEnabled||t.mozImageSmoothingEnabled||t.msImageSmoothingEnabled||t.oImageSmoothingEnabled,t.imageSmoothingEnabled=e},T.util.getById=function(t){return"string"==typeof t?T.document.getElementById(t):t},T.util.toArray=o,T.util.addClass=function(t,e){t&&-1===(" "+t.className+" ").indexOf(" "+e+" ")&&(t.className+=(t.className?" ":"")+e)},T.util.makeElement=s,T.util.wrapElement=function(t,e,i){return"string"==typeof e&&(e=s(e,i)),t.parentNode&&t.parentNode.replaceChild(e,t),e.appendChild(t),e},T.util.getScrollLeftTop=a,T.util.getElementOffset=function(t){var e,r,n=t&&t.ownerDocument,o={left:0,top:0},s={left:0,top:0},h={borderLeftWidth:"left",borderTopWidth:"top",paddingLeft:"left",paddingTop:"top"};if(!n)return s;for(var c in h)s[h[c]]+=parseInt(i(t,c),10)||0;return e=n.documentElement,void 0!==t.getBoundingClientRect&&(o=t.getBoundingClientRect()),r=a(t),{left:o.left+r.left-(e.clientLeft||0)+s.left,top:o.top+r.top-(e.clientTop||0)+s.top}},T.util.getNodeCanvas=function(t){var e=T.jsdomImplForWrapper(t);return e._canvas||e._image},T.util.cleanUpJsdomNode=function(t){if(T.isLikelyNode){var e=T.jsdomImplForWrapper(t);e&&(e._image=null,e._canvas=null,e._currentSrc=null,e._attributes=null,e._classList=null)}}}(),function(){function t(){}T.util.request=function(e,i){i||(i={});var r=i.method?i.method.toUpperCase():"GET",n=i.onComplete||function(){},o=new T.window.XMLHttpRequest,s=i.body||i.parameters;return o.onreadystatechange=function(){4===o.readyState&&(n(o),o.onreadystatechange=t)},"GET"===r&&(s=null,"string"==typeof i.parameters&&(e=function(t,e){return t+(/\?/.test(t)?"&":"?")+e}(e,i.parameters))),o.open(r,e,!0),"POST"!==r&&"PUT"!==r||o.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),o.send(s),o}}(),T.log=console.log,T.warn=console.warn,function(){function t(){return!1}function e(t,e,i,r){return-i*Math.cos(t/r*(Math.PI/2))+i+e}var i=T.window.requestAnimationFrame||T.window.webkitRequestAnimationFrame||T.window.mozRequestAnimationFrame||T.window.oRequestAnimationFrame||T.window.msRequestAnimationFrame||function(t){return T.window.setTimeout(t,1e3/60)},r=T.window.cancelAnimationFrame||T.window.clearTimeout;function n(){return i.apply(T.window,arguments)}T.util.animate=function(i){var r=!1;return n((function(o){i||(i={});var s,a=o||+new Date,h=i.duration||500,c=a+h,l=i.onChange||t,u=i.abort||t,f=i.onComplete||t,d=i.easing||e,g="startValue"in i?i.startValue:0,p="endValue"in i?i.endValue:100,v=i.byValue||p-g;i.onStart&&i.onStart(),function t(e){var i=(s=e||+new Date)>c?h:s-a,o=i/h,m=d(i,g,v,h),y=Math.abs((m-g)/v);if(!r){if(!u(m,y,o))return s>c?(l(p,1,1),void f(p,1,1)):(l(m,y,o),void n(t));f(p,1,1)}}(a)})),function(){r=!0}},T.util.requestAnimFrame=n,T.util.cancelAnimFrame=function(){return r.apply(T.window,arguments)}}(),function(){function t(t,e,i){var r="rgba("+parseInt(t[0]+i*(e[0]-t[0]),10)+","+parseInt(t[1]+i*(e[1]-t[1]),10)+","+parseInt(t[2]+i*(e[2]-t[2]),10);return r+=","+(t&&e?parseFloat(t[3]+i*(e[3]-t[3])):1),r+=")"}T.util.animateColor=function(e,i,r,n){var o=new T.Color(e).getSource(),s=new T.Color(i).getSource(),a=n.onComplete,h=n.onChange;return n=n||{},T.util.animate(T.util.object.extend(n,{duration:r||500,startValue:o,endValue:s,byValue:s,easing:function(e,i,r,o){return t(i,r,n.colorEasing?n.colorEasing(e,o):1-Math.cos(e/o*(Math.PI/2)))},onComplete:function(e,i,r){if(a)return a(t(s,s,0),i,r)},onChange:function(e,i,r){if(h){if(Array.isArray(e))return h(t(e,e,0),i,r);h(e,i,r)}}}))}}(),function(){function t(t,e,i,r){return t-1&&l>-1&&l-1)&&(i="stroke")}else{if("href"===t||"xlink:href"===t||"font"===t)return i;if("imageSmoothing"===t)return"optimizeQuality"===i;a=h?i.map(o):o(i,n)}}else i="";return!h&&isNaN(a)?i:a}function d(t){return new RegExp("^("+t.join("|")+")\\b","i")}function g(t,e){var i,r,n,o,s=[];for(n=0,o=e.length;n1;)h.shift(),c=e.util.multiplyTransformMatrices(c,h[0]);return c}}();var y=new RegExp("^\\s*("+e.reNum+"+)\\s*,?\\s*("+e.reNum+"+)\\s*,?\\s*("+e.reNum+"+)\\s*,?\\s*("+e.reNum+"+)\\s*$");function _(t){if(!e.svgViewBoxElementsRegEx.test(t.nodeName))return{};var i,r,n,s,a,h,c=t.getAttribute("viewBox"),l=1,u=1,f=t.getAttribute("width"),d=t.getAttribute("height"),g=t.getAttribute("x")||0,p=t.getAttribute("y")||0,v=t.getAttribute("preserveAspectRatio")||"",m=!c||!(c=c.match(y)),_=!f||!d||"100%"===f||"100%"===d,b=m&&_,x={},C="",w=0,S=0;if(x.width=0,x.height=0,x.toBeParsed=b,m&&(g||p)&&t.parentNode&&"#document"!==t.parentNode.nodeName&&(C=" translate("+o(g)+" "+o(p)+") ",a=(t.getAttribute("transform")||"")+C,t.setAttribute("transform",a),t.removeAttribute("x"),t.removeAttribute("y")),b)return x;if(m)return x.width=o(f),x.height=o(d),x;if(i=-parseFloat(c[1]),r=-parseFloat(c[2]),n=parseFloat(c[3]),s=parseFloat(c[4]),x.minX=i,x.minY=r,x.viewBoxWidth=n,x.viewBoxHeight=s,_?(x.width=n,x.height=s):(x.width=o(f),x.height=o(d),l=x.width/n,u=x.height/s),"none"!==(v=e.util.parsePreserveAspectRatioAttribute(v)).alignX&&("meet"===v.meetOrSlice&&(u=l=l>u?u:l),"slice"===v.meetOrSlice&&(u=l=l>u?l:u),w=x.width-n*l,S=x.height-s*l,"Mid"===v.alignX&&(w/=2),"Mid"===v.alignY&&(S/=2),"Min"===v.alignX&&(w=0),"Min"===v.alignY&&(S=0)),1===l&&1===u&&0===i&&0===r&&0===g&&0===p)return x;if((g||p)&&"#document"!==t.parentNode.nodeName&&(C=" translate("+o(g)+" "+o(p)+") "),a=C+" matrix("+l+" 0 0 "+u+" "+(i*l+w)+" "+(r*u+S)+") ","svg"===t.nodeName){for(h=t.ownerDocument.createElementNS(e.svgNS,"g");t.firstChild;)h.appendChild(t.firstChild);t.appendChild(h)}else(h=t).removeAttribute("x"),h.removeAttribute("y"),a=h.getAttribute("transform")+a;return h.setAttribute("transform",a),x}function b(t,e){var i="xlink:href",r=m(t,e.getAttribute(i).substr(1));if(r&&r.getAttribute(i)&&b(t,r),["gradientTransform","x1","x2","y1","y2","gradientUnits","cx","cy","r","fx","fy"].forEach((function(t){r&&!e.hasAttribute(t)&&r.hasAttribute(t)&&e.setAttribute(t,r.getAttribute(t))})),!e.children.length)for(var n=r.cloneNode(!0);n.firstChild;)e.appendChild(n.firstChild);e.removeAttribute(i)}e.parseSVGDocument=function(t,i,n,o){if(t){!function(t){for(var i=g(t,["use","svg:use"]),r=0;i.length&&rt.x&&this.y>t.y},gte:function(t){return this.x>=t.x&&this.y>=t.y},lerp:function(t,e){return void 0===e&&(e=.5),e=Math.max(Math.min(1,e),0),new i(this.x+(t.x-this.x)*e,this.y+(t.y-this.y)*e)},distanceFrom:function(t){var e=this.x-t.x,i=this.y-t.y;return Math.sqrt(e*e+i*i)},midPointFrom:function(t){return this.lerp(t)},min:function(t){return new i(Math.min(this.x,t.x),Math.min(this.y,t.y))},max:function(t){return new i(Math.max(this.x,t.x),Math.max(this.y,t.y))},toString:function(){return this.x+","+this.y},setXY:function(t,e){return this.x=t,this.y=e,this},setX:function(t){return this.x=t,this},setY:function(t){return this.y=t,this},setFromPoint:function(t){return this.x=t.x,this.y=t.y,this},swap:function(t){var e=this.x,i=this.y;this.x=t.x,this.y=t.y,t.x=e,t.y=i},clone:function(){return new i(this.x,this.y)}})}(t),function(t){var e=t.fabric||(t.fabric={});function i(t){this.status=t,this.points=[]}e.Intersection?e.warn("fabric.Intersection is already defined"):(e.Intersection=i,e.Intersection.prototype={constructor:i,appendPoint:function(t){return this.points.push(t),this},appendPoints:function(t){return this.points=this.points.concat(t),this}},e.Intersection.intersectLineLine=function(t,r,n,o){var s,a=(o.x-n.x)*(t.y-n.y)-(o.y-n.y)*(t.x-n.x),h=(r.x-t.x)*(t.y-n.y)-(r.y-t.y)*(t.x-n.x),c=(o.y-n.y)*(r.x-t.x)-(o.x-n.x)*(r.y-t.y);if(0!==c){var l=a/c,u=h/c;0<=l&&l<=1&&0<=u&&u<=1?(s=new i("Intersection")).appendPoint(new e.Point(t.x+l*(r.x-t.x),t.y+l*(r.y-t.y))):s=new i}else s=new i(0===a||0===h?"Coincident":"Parallel");return s},e.Intersection.intersectLinePolygon=function(t,e,r){var n,o,s,a,h=new i,c=r.length;for(a=0;a0&&(h.status="Intersection"),h},e.Intersection.intersectPolygonPolygon=function(t,e){var r,n=new i,o=t.length;for(r=0;r0&&(n.status="Intersection"),n},e.Intersection.intersectPolygonRectangle=function(t,r,n){var o=r.min(n),s=r.max(n),a=new e.Point(s.x,o.y),h=new e.Point(o.x,s.y),c=i.intersectLinePolygon(o,a,t),l=i.intersectLinePolygon(a,s,t),u=i.intersectLinePolygon(s,h,t),f=i.intersectLinePolygon(h,o,t),d=new i;return d.appendPoints(c.points),d.appendPoints(l.points),d.appendPoints(u.points),d.appendPoints(f.points),d.points.length>0&&(d.status="Intersection"),d})}(t),function(t){var e=t.fabric||(t.fabric={});function i(t){t?this._tryParsingColor(t):this.setSource([0,0,0,1])}function r(t,e,i){return i<0&&(i+=1),i>1&&(i-=1),i<1/6?t+6*(e-t)*i:i<.5?e:i<2/3?t+(e-t)*(2/3-i)*6:t}e.Color?e.warn("fabric.Color is already defined."):(e.Color=i,e.Color.prototype={_tryParsingColor:function(t){var e;t in i.colorNameMap&&(t=i.colorNameMap[t]),"transparent"===t&&(e=[255,255,255,0]),e||(e=i.sourceFromHex(t)),e||(e=i.sourceFromRgb(t)),e||(e=i.sourceFromHsl(t)),e||(e=[0,0,0,1]),e&&this.setSource(e)},_rgbToHsl:function(t,i,r){t/=255,i/=255,r/=255;var n,o,s,a=e.util.array.max([t,i,r]),h=e.util.array.min([t,i,r]);if(s=(a+h)/2,a===h)n=o=0;else{var c=a-h;switch(o=s>.5?c/(2-a-h):c/(a+h),a){case t:n=(i-r)/c+(i0)-(t<0)||+t};function d(t,e){var i=t.angle+u(Math.atan2(e.y,e.x))+360;return Math.round(i%360/45)}function g(t,i){var r=i.transform.target,n=r.canvas,o=e.util.object.clone(i);o.target=r,n&&n.fire("object:"+t,o),r.fire(t,i)}function p(t,e){var i=e.canvas,r=t[i.uniScaleKey];return i.uniformScaling&&!r||!i.uniformScaling&&r}function v(t){return t.originX===c&&t.originY===c}function m(t,e,i){var r=t.lockScalingX,n=t.lockScalingY;return!(!r||!n)||(!(e||!r&&!n||!i)||(!(!r||"x"!==e)||!(!n||"y"!==e)))}function y(t,e,i,r){return{e:t,transform:e,pointer:{x:i,y:r}}}function _(t){return function(e,i,r,n){var o=i.target,s=o.getCenterPoint(),a=o.translateToOriginPoint(s,i.originX,i.originY),h=t(e,i,r,n);return o.setPositionByOrigin(a,i.originX,i.originY),h}}function b(t,e){return function(i,r,n,o){var s=e(i,r,n,o);return s&&g(t,y(i,r,n,o)),s}}function x(t,i,r,n,o){var s=t.target,a=s.controls[t.corner],h=s.canvas.getZoom(),c=s.padding/h,l=s.toLocalPoint(new e.Point(n,o),i,r);return l.x>=c&&(l.x-=c),l.x<=-c&&(l.x+=c),l.y>=c&&(l.y-=c),l.y<=c&&(l.y+=c),l.x-=a.offsetX,l.y-=a.offsetY,l}function C(t){return t.flipX!==t.flipY}function w(t,e,i,r,n){if(0!==t[e]){var o=n/t._getTransformedDimensions()[r]*t[i];t.set(i,o)}}function S(t,e,i,r){var n,c=e.target,l=c._getTransformedDimensions(0,c.skewY),f=x(e,e.originX,e.originY,i,r),d=Math.abs(2*f.x)-l.x,g=c.skewX;d<2?n=0:(n=u(Math.atan2(d/c.scaleX,l.y/c.scaleY)),e.originX===o&&e.originY===h&&(n=-n),e.originX===a&&e.originY===s&&(n=-n),C(c)&&(n=-n));var p=g!==n;if(p){var v=c._getTransformedDimensions().y;c.set("skewX",n),w(c,"skewY","scaleY","y",v)}return p}function T(t,e,i,r){var n,c=e.target,l=c._getTransformedDimensions(c.skewX,0),f=x(e,e.originX,e.originY,i,r),d=Math.abs(2*f.y)-l.y,g=c.skewY;d<2?n=0:(n=u(Math.atan2(d/c.scaleY,l.x/c.scaleX)),e.originX===o&&e.originY===h&&(n=-n),e.originX===a&&e.originY===s&&(n=-n),C(c)&&(n=-n));var p=g!==n;if(p){var v=c._getTransformedDimensions().x;c.set("skewY",n),w(c,"skewX","scaleX","x",v)}return p}function O(t,e,i,r,n){n=n||{};var o,s,a,h,c,u,d=e.target,g=d.lockScalingX,y=d.lockScalingY,_=n.by,b=p(t,d),C=m(d,_,b),w=e.gestureScale;if(C)return!1;if(w)s=e.scaleX*w,a=e.scaleY*w;else{if(o=x(e,e.originX,e.originY,i,r),c="y"!==_?f(o.x):1,u="x"!==_?f(o.y):1,e.signX||(e.signX=c),e.signY||(e.signY=u),d.lockScalingFlip&&(e.signX!==c||e.signY!==u))return!1;if(h=d._getTransformedDimensions(),b&&!_){var S=Math.abs(o.x)+Math.abs(o.y),T=e.original,O=S/(Math.abs(h.x*T.scaleX/d.scaleX)+Math.abs(h.y*T.scaleY/d.scaleY));s=T.scaleX*O,a=T.scaleY*O}else s=Math.abs(o.x*d.scaleX/h.x),a=Math.abs(o.y*d.scaleY/h.y);v(e)&&(s*=2,a*=2),e.signX!==c&&"y"!==_&&(e.originX=l[e.originX],s*=-1,e.signX=c),e.signY!==u&&"x"!==_&&(e.originY=l[e.originY],a*=-1,e.signY=u)}var P=d.scaleX,E=d.scaleY;return _?("x"===_&&d.set("scaleX",s),"y"===_&&d.set("scaleY",a)):(!g&&d.set("scaleX",s),!y&&d.set("scaleY",a)),P!==d.scaleX||E!==d.scaleY}n.scaleCursorStyleHandler=function(t,e,r){var n=p(t,r),o="";if(0!==e.x&&0===e.y?o="x":0===e.x&&0!==e.y&&(o="y"),m(r,o,n))return"not-allowed";var s=d(r,e);return i[s]+"-resize"},n.skewCursorStyleHandler=function(t,e,i){var n="not-allowed";if(0!==e.x&&i.lockSkewingY)return n;if(0!==e.y&&i.lockSkewingX)return n;var o=d(i,e)%4;return r[o]+"-resize"},n.scaleSkewCursorStyleHandler=function(t,e,i){return t[i.canvas.altActionKey]?n.skewCursorStyleHandler(t,e,i):n.scaleCursorStyleHandler(t,e,i)},n.rotationWithSnapping=b("rotating",_((function(t,e,i,r){var n=e,o=n.target,s=o.translateToOriginPoint(o.getCenterPoint(),n.originX,n.originY);if(o.lockRotation)return!1;var a,h=Math.atan2(n.ey-s.y,n.ex-s.x),c=Math.atan2(r-s.y,i-s.x),l=u(c-h+n.theta);if(o.snapAngle>0){var f=o.snapAngle,d=o.snapThreshold||f,g=Math.ceil(l/f)*f,p=Math.floor(l/f)*f;Math.abs(l-p)0?o:a:(l>0&&(n=u===s?o:a),l<0&&(n=u===s?a:o),C(h)&&(n=n===o?a:o)),e.originX=n,b("skewing",_(S))(t,e,i,r))},n.skewHandlerY=function(t,e,i,r){var n,a=e.target,l=a.skewY,u=e.originX;return!a.lockSkewingY&&(0===l?n=x(e,c,c,i,r).y>0?s:h:(l>0&&(n=u===o?s:h),l<0&&(n=u===o?h:s),C(a)&&(n=n===s?h:s)),e.originY=n,b("skewing",_(T))(t,e,i,r))},n.dragHandler=function(t,e,i,r){var n=e.target,o=i-e.offsetX,s=r-e.offsetY,a=!n.get("lockMovementX")&&n.left!==o,h=!n.get("lockMovementY")&&n.top!==s;return a&&n.set("left",o),h&&n.set("top",s),(a||h)&&g("moving",y(t,e,i,r)),a||h},n.scaleOrSkewActionName=function(t,e,i){var r=t[i.canvas.altActionKey];return 0===e.x?r?"skewX":"scaleY":0===e.y?r?"skewY":"scaleX":void 0},n.rotationStyleHandler=function(t,e,i){return i.lockRotation?"not-allowed":e.cursorStyle},n.fireEvent=g,n.wrapWithFixedAnchor=_,n.wrapWithFireEvent=b,n.getLocalPoint=x,e.controlsUtils=n}(t),function(t){var e=t.fabric||(t.fabric={}),i=e.util.degreesToRadians,r=e.controlsUtils;r.renderCircleControl=function(t,e,i,r,n){r=r||{};var o,s=this.sizeX||r.cornerSize||n.cornerSize,a=this.sizeY||r.cornerSize||n.cornerSize,h=void 0!==r.transparentCorners?r.transparentCorners:n.transparentCorners,c=h?"stroke":"fill",l=!h&&(r.cornerStrokeColor||n.cornerStrokeColor),u=e,f=i;t.save(),t.fillStyle=r.cornerColor||n.cornerColor,t.strokeStyle=r.cornerStrokeColor||n.cornerStrokeColor,s>a?(o=s,t.scale(1,a/s),f=i*s/a):a>s?(o=a,t.scale(s/a,1),u=e*a/s):o=s,t.lineWidth=1,t.beginPath(),t.arc(u,f,o/2,0,2*Math.PI,!1),t[c](),l&&t.stroke(),t.restore()},r.renderSquareControl=function(t,e,r,n,o){n=n||{};var s=this.sizeX||n.cornerSize||o.cornerSize,a=this.sizeY||n.cornerSize||o.cornerSize,h=void 0!==n.transparentCorners?n.transparentCorners:o.transparentCorners,c=h?"stroke":"fill",l=!h&&(n.cornerStrokeColor||o.cornerStrokeColor),u=s/2,f=a/2;t.save(),t.fillStyle=n.cornerColor||o.cornerColor,t.strokeStyle=n.cornerStrokeColor||o.cornerStrokeColor,t.lineWidth=1,t.translate(e,r),t.rotate(i(o.angle)),t[c+"Rect"](-u,-f,s,a),l&&t.strokeRect(-u,-f,s,a),t.restore()}}(t),function(t){var e=t.fabric||(t.fabric={});e.Control=function(t){for(var e in t)this[e]=t[e]},e.Control.prototype={visible:!0,actionName:"scale",angle:0,x:0,y:0,offsetX:0,offsetY:0,sizeX:null,sizeY:null,touchSizeX:null,touchSizeY:null,cursorStyle:"crosshair",withConnection:!1,actionHandler:function(){},mouseDownHandler:function(){},mouseUpHandler:function(){},getActionHandler:function(){return this.actionHandler},getMouseDownHandler:function(){return this.mouseDownHandler},getMouseUpHandler:function(){return this.mouseUpHandler},cursorStyleHandler:function(t,e){return e.cursorStyle},getActionName:function(t,e){return e.actionName},getVisibility:function(t,e){var i=t._controlsVisibility;return i&&void 0!==i[e]?i[e]:this.visible},setVisibility:function(t){this.visible=t},positionHandler:function(t,i){return e.util.transformPoint({x:this.x*t.x+this.offsetX,y:this.y*t.y+this.offsetY},i)},calcCornerCoords:function(t,i,r,n,o){var s,a,h,c,l=o?this.touchSizeX:this.sizeX,u=o?this.touchSizeY:this.sizeY;if(l&&u&&l!==u){var f=Math.atan2(u,l),d=Math.sqrt(l*l+u*u)/2,g=f-e.util.degreesToRadians(t),p=Math.PI/2-f-e.util.degreesToRadians(t);s=d*e.util.cos(g),a=d*e.util.sin(g),h=d*e.util.cos(p),c=d*e.util.sin(p)}else{d=.7071067812*(l&&u?l:i);g=e.util.degreesToRadians(45-t);s=h=d*e.util.cos(g),a=c=d*e.util.sin(g)}return{tl:{x:r-c,y:n-h},tr:{x:r+s,y:n-a},bl:{x:r-s,y:n+a},br:{x:r+c,y:n+h}}},render:function(t,i,r,n,o){if("circle"===((n=n||{}).cornerStyle||o.cornerStyle))e.controlsUtils.renderCircleControl.call(this,t,i,r,n,o);else e.controlsUtils.renderSquareControl.call(this,t,i,r,n,o)}}}(t),function(){function t(t,e){var i,r,n,o,s=t.getAttribute("style"),a=t.getAttribute("offset")||0;if(a=(a=parseFloat(a)/(/%$/.test(a)?100:1))<0?0:a>1?1:a,s){var h=s.split(/\s*;\s*/);for(""===h[h.length-1]&&h.pop(),o=h.length;o--;){var c=h[o].split(/\s*:\s*/),l=c[0].trim(),u=c[1].trim();"stop-color"===l?i=u:"stop-opacity"===l&&(n=u)}}return i||(i=t.getAttribute("stop-color")||"rgb(0,0,0)"),n||(n=t.getAttribute("stop-opacity")),r=(i=new T.Color(i)).getAlpha(),n=isNaN(parseFloat(n))?1:parseFloat(n),n*=r*e,{offset:a,color:i.toRgb(),opacity:n}}var e=T.util.object.clone;T.Gradient=T.util.createClass({offsetX:0,offsetY:0,gradientTransform:null,gradientUnits:"pixels",type:"linear",initialize:function(t){t||(t={}),t.coords||(t.coords={});var e,i=this;Object.keys(t).forEach((function(e){i[e]=t[e]})),this.id?this.id+="_"+T.Object.__uid++:this.id=T.Object.__uid++,e={x1:t.coords.x1||0,y1:t.coords.y1||0,x2:t.coords.x2||0,y2:t.coords.y2||0},"radial"===this.type&&(e.r1=t.coords.r1||0,e.r2=t.coords.r2||0),this.coords=e,this.colorStops=t.colorStops.slice()},addColorStop:function(t){for(var e in t){var i=new T.Color(t[e]);this.colorStops.push({offset:parseFloat(e),color:i.toRgb(),opacity:i.getAlpha()})}return this},toObject:function(t){var e={type:this.type,coords:this.coords,colorStops:this.colorStops,offsetX:this.offsetX,offsetY:this.offsetY,gradientUnits:this.gradientUnits,gradientTransform:this.gradientTransform?this.gradientTransform.concat():this.gradientTransform};return T.util.populateWithProperties(this,e,t),e},toSVG:function(t,i){var r,n,o,s,a=e(this.coords,!0),h=(i=i||{},e(this.colorStops,!0)),c=a.r1>a.r2,l=this.gradientTransform?this.gradientTransform.concat():T.iMatrix.concat(),u=-this.offsetX,f=-this.offsetY,d=!!i.additionalTransform,g="pixels"===this.gradientUnits?"userSpaceOnUse":"objectBoundingBox";if(h.sort((function(t,e){return t.offset-e.offset})),"objectBoundingBox"===g?(u/=t.width,f/=t.height):(u+=t.width/2,f+=t.height/2),"path"===t.type&&"percentage"!==this.gradientUnits&&(u-=t.pathOffset.x,f-=t.pathOffset.y),l[4]-=u,l[5]-=f,s='id="SVGID_'+this.id+'" gradientUnits="'+g+'"',s+=' gradientTransform="'+(d?i.additionalTransform+" ":"")+T.util.matrixToSVG(l)+'" ',"linear"===this.type?o=["\n']:"radial"===this.type&&(o=["\n']),"radial"===this.type){if(c)for((h=h.concat()).reverse(),r=0,n=h.length;r0){var v=p/Math.max(a.r1,a.r2);for(r=0,n=h.length;r\n')}return o.push("linear"===this.type?"\n":"\n"),o.join("")},toLive:function(t){var e,i,r,n=T.util.object.clone(this.coords);if(this.type){for("linear"===this.type?e=t.createLinearGradient(n.x1,n.y1,n.x2,n.y2):"radial"===this.type&&(e=t.createRadialGradient(n.x1,n.y1,n.r1,n.x2,n.y2,n.r2)),i=0,r=this.colorStops.length;i1?1:o,isNaN(o)&&(o=1);var s,a,h,c,l=e.getElementsByTagName("stop"),u="userSpaceOnUse"===e.getAttribute("gradientUnits")?"pixels":"percentage",f=e.getAttribute("gradientTransform")||"",d=[],g=0,p=0;for("linearGradient"===e.nodeName||"LINEARGRADIENT"===e.nodeName?(s="linear",a=function(t){return{x1:t.getAttribute("x1")||0,y1:t.getAttribute("y1")||0,x2:t.getAttribute("x2")||"100%",y2:t.getAttribute("y2")||0}}(e)):(s="radial",a=function(t){return{x1:t.getAttribute("fx")||t.getAttribute("cx")||"50%",y1:t.getAttribute("fy")||t.getAttribute("cy")||"50%",r1:0,x2:t.getAttribute("cx")||"50%",y2:t.getAttribute("cy")||"50%",r2:t.getAttribute("r")||"50%"}}(e)),h=l.length;h--;)d.push(t(l[h],o));return c=T.parseTransformAttribute(f),function(t,e,i,r){var n,o;Object.keys(e).forEach((function(t){"Infinity"===(n=e[t])?o=1:"-Infinity"===n?o=0:(o=parseFloat(e[t],10),"string"==typeof n&&/^(\d+\.\d+)%|(\d+)%$/.test(n)&&(o*=.01,"pixels"===r&&("x1"!==t&&"x2"!==t&&"r2"!==t||(o*=i.viewBoxWidth||i.width),"y1"!==t&&"y2"!==t||(o*=i.viewBoxHeight||i.height)))),e[t]=o}))}(0,a,n,u),"pixels"===u&&(g=-i.left,p=-i.top),new T.Gradient({id:e.getAttribute("id"),type:s,coords:a,colorStops:d,gradientUnits:u,gradientTransform:c,offsetX:g,offsetY:p})}})}(),_=T.util.toFixed,T.Pattern=T.util.createClass({repeat:"repeat",offsetX:0,offsetY:0,crossOrigin:"",patternTransform:null,initialize:function(t,e){if(t||(t={}),this.id=T.Object.__uid++,this.setOptions(t),!t.source||t.source&&"string"!=typeof t.source)e&&e(this);else{var i=this;this.source=T.util.createImage(),T.util.loadImage(t.source,(function(t,r){i.source=t,e&&e(i,r)}),null,this.crossOrigin)}},toObject:function(t){var e,i,r=T.Object.NUM_FRACTION_DIGITS;return"string"==typeof this.source.src?e=this.source.src:"object"==typeof this.source&&this.source.toDataURL&&(e=this.source.toDataURL()),i={type:"pattern",source:e,repeat:this.repeat,crossOrigin:this.crossOrigin,offsetX:_(this.offsetX,r),offsetY:_(this.offsetY,r),patternTransform:this.patternTransform?this.patternTransform.concat():null},T.util.populateWithProperties(this,i,t),i},toSVG:function(t){var e="function"==typeof this.source?this.source():this.source,i=e.width/t.width,r=e.height/t.height,n=this.offsetX/t.width,o=this.offsetY/t.height,s="";return"repeat-x"!==this.repeat&&"no-repeat"!==this.repeat||(r=1,o&&(r+=Math.abs(o))),"repeat-y"!==this.repeat&&"no-repeat"!==this.repeat||(i=1,n&&(i+=Math.abs(n))),e.src?s=e.src:e.toDataURL&&(s=e.toDataURL()),'\n\n\n'},setOptions:function(t){for(var e in t)this[e]=t[e]},toLive:function(t){var e=this.source;if(!e)return"";if(void 0!==e.src){if(!e.complete)return"";if(0===e.naturalWidth||0===e.naturalHeight)return""}return t.createPattern(e,this.repeat)}}),function(t){var e=t.fabric||(t.fabric={}),i=e.util.toFixed;e.Shadow?e.warn("fabric.Shadow is already defined."):(e.Shadow=e.util.createClass({color:"rgb(0,0,0)",blur:0,offsetX:0,offsetY:0,affectStroke:!1,includeDefaultValues:!0,nonScaling:!1,initialize:function(t){for(var i in"string"==typeof t&&(t=this._parseShadow(t)),t)this[i]=t[i];this.id=e.Object.__uid++},_parseShadow:function(t){var i=t.trim(),r=e.Shadow.reOffsetsAndBlur.exec(i)||[];return{color:(i.replace(e.Shadow.reOffsetsAndBlur,"")||"rgb(0,0,0)").trim(),offsetX:parseFloat(r[1],10)||0,offsetY:parseFloat(r[2],10)||0,blur:parseFloat(r[3],10)||0}},toString:function(){return[this.offsetX,this.offsetY,this.blur,this.color].join("px ")},toSVG:function(t){var r=40,n=40,o=e.Object.NUM_FRACTION_DIGITS,s=e.util.rotateVector({x:this.offsetX,y:this.offsetY},e.util.degreesToRadians(-t.angle)),a=new e.Color(this.color);return t.width&&t.height&&(r=100*i((Math.abs(s.x)+this.blur)/t.width,o)+20,n=100*i((Math.abs(s.y)+this.blur)/t.height,o)+20),t.flipX&&(s.x*=-1),t.flipY&&(s.y*=-1),'\n\t\n\t\n\t\n\t\n\t\n\t\t\n\t\t\n\t\n\n'},toObject:function(){if(this.includeDefaultValues)return{color:this.color,blur:this.blur,offsetX:this.offsetX,offsetY:this.offsetY,affectStroke:this.affectStroke,nonScaling:this.nonScaling};var t={},i=e.Shadow.prototype;return["color","blur","offsetX","offsetY","affectStroke","nonScaling"].forEach((function(e){this[e]!==i[e]&&(t[e]=this[e])}),this),t}}),e.Shadow.reOffsetsAndBlur=/(?:\s|^)(-?\d+(?:\.\d*)?(?:px)?(?:\s?|$))?(-?\d+(?:\.\d*)?(?:px)?(?:\s?|$))?(\d+(?:\.\d*)?(?:px)?)?(?:\s?|$)(?:$|\s)/)}(t),function(){if(T.StaticCanvas)T.warn("fabric.StaticCanvas is already defined.");else{var t=T.util.object.extend,e=T.util.getElementOffset,i=T.util.removeFromArray,r=T.util.toFixed,n=T.util.transformPoint,o=T.util.invertTransform,s=T.util.getNodeCanvas,a=T.util.createCanvasElement,h=new Error("Could not initialize `canvas` element");T.StaticCanvas=T.util.createClass(T.CommonMethods,{initialize:function(t,e){e||(e={}),this.renderAndResetBound=this.renderAndReset.bind(this),this.requestRenderAllBound=this.requestRenderAll.bind(this),this._initStatic(t,e)},backgroundColor:"",backgroundImage:null,overlayColor:"",overlayImage:null,includeDefaultValues:!0,stateful:!1,renderOnAddRemove:!0,controlsAboveOverlay:!1,allowTouchScrolling:!1,imageSmoothingEnabled:!0,viewportTransform:T.iMatrix.concat(),backgroundVpt:!0,overlayVpt:!0,enableRetinaScaling:!0,vptCoords:{},skipOffscreen:!0,clipPath:void 0,_initStatic:function(t,e){var i=this.requestRenderAllBound;this._objects=[],this._createLowerCanvas(t),this._initOptions(e),this.interactive||this._initRetinaScaling(),e.overlayImage&&this.setOverlayImage(e.overlayImage,i),e.backgroundImage&&this.setBackgroundImage(e.backgroundImage,i),e.backgroundColor&&this.setBackgroundColor(e.backgroundColor,i),e.overlayColor&&this.setOverlayColor(e.overlayColor,i),this.calcOffset()},_isRetinaScaling:function(){return 1!==T.devicePixelRatio&&this.enableRetinaScaling},getRetinaScaling:function(){return this._isRetinaScaling()?T.devicePixelRatio:1},_initRetinaScaling:function(){if(this._isRetinaScaling()){var t=T.devicePixelRatio;this.__initRetinaScaling(t,this.lowerCanvasEl,this.contextContainer),this.upperCanvasEl&&this.__initRetinaScaling(t,this.upperCanvasEl,this.contextTop)}},__initRetinaScaling:function(t,e,i){e.setAttribute("width",this.width*t),e.setAttribute("height",this.height*t),i.scale(t,t)},calcOffset:function(){return this._offset=e(this.lowerCanvasEl),this},setOverlayImage:function(t,e,i){return this.__setBgOverlayImage("overlayImage",t,e,i)},setBackgroundImage:function(t,e,i){return this.__setBgOverlayImage("backgroundImage",t,e,i)},setOverlayColor:function(t,e){return this.__setBgOverlayColor("overlayColor",t,e)},setBackgroundColor:function(t,e){return this.__setBgOverlayColor("backgroundColor",t,e)},__setBgOverlayImage:function(t,e,i,r){return"string"==typeof e?T.util.loadImage(e,(function(e,n){if(e){var o=new T.Image(e,r);this[t]=o,o.canvas=this}i&&i(e,n)}),this,r&&r.crossOrigin):(r&&e.setOptions(r),this[t]=e,e&&(e.canvas=this),i&&i(e,!1)),this},__setBgOverlayColor:function(t,e,i){return this[t]=e,this._initGradient(e,t),this._initPattern(e,t,i),this},_createCanvasElement:function(){var t=a();if(!t)throw h;if(t.style||(t.style={}),void 0===t.getContext)throw h;return t},_initOptions:function(t){var e=this.lowerCanvasEl;this._setOptions(t),this.width=this.width||parseInt(e.width,10)||0,this.height=this.height||parseInt(e.height,10)||0,this.lowerCanvasEl.style&&(e.width=this.width,e.height=this.height,e.style.width=this.width+"px",e.style.height=this.height+"px",this.viewportTransform=this.viewportTransform.slice())},_createLowerCanvas:function(t){t&&t.getContext?this.lowerCanvasEl=t:this.lowerCanvasEl=T.util.getById(t)||this._createCanvasElement(),T.util.addClass(this.lowerCanvasEl,"lower-canvas"),this._originalCanvasStyle=this.lowerCanvasEl.style,this.interactive&&this._applyCanvasStyle(this.lowerCanvasEl),this.contextContainer=this.lowerCanvasEl.getContext("2d")},getWidth:function(){return this.width},getHeight:function(){return this.height},setWidth:function(t,e){return this.setDimensions({width:t},e)},setHeight:function(t,e){return this.setDimensions({height:t},e)},setDimensions:function(t,e){var i;for(var r in e=e||{},t)i=t[r],e.cssOnly||(this._setBackstoreDimension(r,t[r]),i+="px",this.hasLostContext=!0),e.backstoreOnly||this._setCssDimension(r,i);return this._isCurrentlyDrawing&&this.freeDrawingBrush&&this.freeDrawingBrush._setBrushStyles(),this._initRetinaScaling(),this.calcOffset(),e.cssOnly||this.requestRenderAll(),this},_setBackstoreDimension:function(t,e){return this.lowerCanvasEl[t]=e,this.upperCanvasEl&&(this.upperCanvasEl[t]=e),this.cacheCanvasEl&&(this.cacheCanvasEl[t]=e),this[t]=e,this},_setCssDimension:function(t,e){return this.lowerCanvasEl.style[t]=e,this.upperCanvasEl&&(this.upperCanvasEl.style[t]=e),this.wrapperEl&&(this.wrapperEl.style[t]=e),this},getZoom:function(){return this.viewportTransform[0]},setViewportTransform:function(t){var e,i,r,n=this._activeObject,o=this.backgroundImage,s=this.overlayImage;for(this.viewportTransform=t,i=0,r=this._objects.length;i\n'),this._setSVGBgOverlayColor(i,"background"),this._setSVGBgOverlayImage(i,"backgroundImage",e),this._setSVGObjects(i,e),this.clipPath&&i.push("\n"),this._setSVGBgOverlayColor(i,"overlay"),this._setSVGBgOverlayImage(i,"overlayImage",e),i.push(""),i.join("")},_setSVGPreamble:function(t,e){e.suppressPreamble||t.push('\n','\n')},_setSVGHeader:function(t,e){var i,n=e.width||this.width,o=e.height||this.height,s='viewBox="0 0 '+this.width+" "+this.height+'" ',a=T.Object.NUM_FRACTION_DIGITS;e.viewBox?s='viewBox="'+e.viewBox.x+" "+e.viewBox.y+" "+e.viewBox.width+" "+e.viewBox.height+'" ':this.svgViewportTransformation&&(i=this.viewportTransform,s='viewBox="'+r(-i[4]/i[0],a)+" "+r(-i[5]/i[3],a)+" "+r(this.width/i[0],a)+" "+r(this.height/i[3],a)+'" '),t.push("\n',"Created with Fabric.js ",T.version,"\n","\n",this.createSVGFontFacesMarkup(),this.createSVGRefElementsMarkup(),this.createSVGClipPathMarkup(e),"\n")},createSVGClipPathMarkup:function(t){var e=this.clipPath;return e?(e.clipPathId="CLIPPATH_"+T.Object.__uid++,'\n'+this.clipPath.toClipPathSVG(t.reviver)+"\n"):""},createSVGRefElementsMarkup:function(){var t=this;return["background","overlay"].map((function(e){var i=t[e+"Color"];if(i&&i.toLive){var r=t[e+"Vpt"],n=t.viewportTransform,o={width:t.width/(r?n[0]:1),height:t.height/(r?n[3]:1)};return i.toSVG(o,{additionalTransform:r?T.util.matrixToSVG(n):""})}})).join("")},createSVGFontFacesMarkup:function(){var t,e,i,r,n,o,s,a,h="",c={},l=T.fontPaths,u=[];for(this._objects.forEach((function t(e){u.push(e),e._objects&&e._objects.forEach(t)})),s=0,a=u.length;s',"\n",h,"","\n"].join("")),h},_setSVGObjects:function(t,e){var i,r,n,o=this._objects;for(r=0,n=o.length;r\n")}else t.push('\n")},sendToBack:function(t){if(!t)return this;var e,r,n,o=this._activeObject;if(t===o&&"activeSelection"===t.type)for(e=(n=o._objects).length;e--;)r=n[e],i(this._objects,r),this._objects.unshift(r);else i(this._objects,t),this._objects.unshift(t);return this.renderOnAddRemove&&this.requestRenderAll(),this},bringToFront:function(t){if(!t)return this;var e,r,n,o=this._activeObject;if(t===o&&"activeSelection"===t.type)for(n=o._objects,e=0;e0+c&&(s=o-1,i(this._objects,n),this._objects.splice(s,0,n)),c++;else 0!==(o=this._objects.indexOf(t))&&(s=this._findNewLowerIndex(t,o,e),i(this._objects,t),this._objects.splice(s,0,t));return this.renderOnAddRemove&&this.requestRenderAll(),this},_findNewLowerIndex:function(t,e,i){var r,n;if(i)for(r=e,n=e-1;n>=0;--n){if(t.intersectsWithObject(this._objects[n])||t.isContainedWithinObject(this._objects[n])||this._objects[n].isContainedWithinObject(t)){r=n;break}}else r=e-1;return r},bringForward:function(t,e){if(!t)return this;var r,n,o,s,a,h=this._activeObject,c=0;if(t===h&&"activeSelection"===t.type)for(r=(a=h._objects).length;r--;)n=a[r],(o=this._objects.indexOf(n))"}}),t(T.StaticCanvas.prototype,T.Observable),t(T.StaticCanvas.prototype,T.Collection),t(T.StaticCanvas.prototype,T.DataURLExporter),t(T.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',supports:function(t){var e=a();if(!e||!e.getContext)return null;var i=e.getContext("2d");return i&&"setLineDash"===t?void 0!==i.setLineDash:null}}),T.StaticCanvas.prototype.toJSON=T.StaticCanvas.prototype.toObject,T.isLikelyNode&&(T.StaticCanvas.prototype.createPNGStream=function(){var t=s(this.lowerCanvasEl);return t&&t.createPNGStream()},T.StaticCanvas.prototype.createJPEGStream=function(t){var e=s(this.lowerCanvasEl);return e&&e.createJPEGStream(t)})}}(),T.BaseBrush=T.util.createClass({color:"rgb(0, 0, 0)",width:1,shadow:null,strokeLineCap:"round",strokeLineJoin:"round",strokeMiterLimit:10,strokeDashArray:null,limitedToCanvasSize:!1,_setBrushStyles:function(){var t=this.canvas.contextTop;t.strokeStyle=this.color,t.lineWidth=this.width,t.lineCap=this.strokeLineCap,t.miterLimit=this.strokeMiterLimit,t.lineJoin=this.strokeLineJoin,t.setLineDash(this.strokeDashArray||[])},_saveAndTransform:function(t){var e=this.canvas.viewportTransform;t.save(),t.transform(e[0],e[1],e[2],e[3],e[4],e[5])},_setShadow:function(){if(this.shadow){var t=this.canvas,e=this.shadow,i=t.contextTop,r=t.getZoom();t&&t._isRetinaScaling()&&(r*=T.devicePixelRatio),i.shadowColor=e.color,i.shadowBlur=e.blur*r,i.shadowOffsetX=e.offsetX*r,i.shadowOffsetY=e.offsetY*r}},needsFullRender:function(){return new T.Color(this.color).getAlpha()<1||!!this.shadow},_resetShadow:function(){var t=this.canvas.contextTop;t.shadowColor="",t.shadowBlur=t.shadowOffsetX=t.shadowOffsetY=0},_isOutSideCanvas:function(t){return t.x<0||t.x>this.canvas.getWidth()||t.y<0||t.y>this.canvas.getHeight()}}),T.PencilBrush=T.util.createClass(T.BaseBrush,{decimate:.4,initialize:function(t){this.canvas=t,this._points=[]},_drawSegment:function(t,e,i){var r=e.midPointFrom(i);return t.quadraticCurveTo(e.x,e.y,r.x,r.y),r},onMouseDown:function(t,e){this.canvas._isMainEvent(e.e)&&(this._prepareForDrawing(t),this._captureDrawingPath(t),this._render())},onMouseMove:function(t,e){if(this.canvas._isMainEvent(e.e)&&(!0!==this.limitedToCanvasSize||!this._isOutSideCanvas(t))&&this._captureDrawingPath(t)&&this._points.length>1)if(this.needsFullRender())this.canvas.clearContext(this.canvas.contextTop),this._render();else{var i=this._points,r=i.length,n=this.canvas.contextTop;this._saveAndTransform(n),this.oldEnd&&(n.beginPath(),n.moveTo(this.oldEnd.x,this.oldEnd.y)),this.oldEnd=this._drawSegment(n,i[r-2],i[r-1],!0),n.stroke(),n.restore()}},onMouseUp:function(t){return!this.canvas._isMainEvent(t.e)||(this.oldEnd=void 0,this._finalizeAndAddPath(),!1)},_prepareForDrawing:function(t){var e=new T.Point(t.x,t.y);this._reset(),this._addPoint(e),this.canvas.contextTop.moveTo(e.x,e.y)},_addPoint:function(t){return!(this._points.length>1&&t.eq(this._points[this._points.length-1])||(this._points.push(t),0))},_reset:function(){this._points=[],this._setBrushStyles(),this._setShadow()},_captureDrawingPath:function(t){var e=new T.Point(t.x,t.y);return this._addPoint(e)},_render:function(){var t,e,i=this.canvas.contextTop,r=this._points[0],n=this._points[1];if(this._saveAndTransform(i),i.beginPath(),2===this._points.length&&r.x===n.x&&r.y===n.y){var o=this.width/1e3;r=new T.Point(r.x,r.y),n=new T.Point(n.x,n.y),r.x-=o,n.x+=o}for(i.moveTo(r.x,r.y),t=1,e=this._points.length;t=n&&(s=t[i],a.push(s));return a.push(t[o]),a},_finalizeAndAddPath:function(){this.canvas.contextTop.closePath(),this.decimate&&(this._points=this.decimatePoints(this._points,this.decimate));var t=this.convertPointsToSVGPath(this._points);if(this._isEmptySVGPath(t))this.canvas.requestRenderAll();else{var e=this.createPath(t);this.canvas.clearContext(this.canvas.contextTop),this.canvas.fire("before:path:created",{path:e}),this.canvas.add(e),this.canvas.requestRenderAll(),e.setCoords(),this._resetShadow(),this.canvas.fire("path:created",{path:e})}}}),T.CircleBrush=T.util.createClass(T.BaseBrush,{width:10,initialize:function(t){this.canvas=t,this.points=[]},drawDot:function(t){var e=this.addPoint(t),i=this.canvas.contextTop;this._saveAndTransform(i),this.dot(i,e),i.restore()},dot:function(t,e){t.fillStyle=e.fill,t.beginPath(),t.arc(e.x,e.y,e.radius,0,2*Math.PI,!1),t.closePath(),t.fill()},onMouseDown:function(t){this.points.length=0,this.canvas.clearContext(this.canvas.contextTop),this._setShadow(),this.drawDot(t)},_render:function(){var t,e,i=this.canvas.contextTop,r=this.points;for(this._saveAndTransform(i),t=0,e=r.length;t0&&!this.preserveObjectStacking){e=[],i=[];for(var n=0,o=this._objects.length;n1&&(this._activeObject._objects=i),e.push.apply(e,i)}else e=this._objects;return e},renderAll:function(){!this.contextTopDirty||this._groupSelector||this.isDrawingMode||(this.clearContext(this.contextTop),this.contextTopDirty=!1),this.hasLostContext&&this.renderTopLayer(this.contextTop);var t=this.contextContainer;return this.renderCanvas(t,this._chooseObjectsToRender()),this},renderTopLayer:function(t){t.save(),this.isDrawingMode&&this._isCurrentlyDrawing&&(this.freeDrawingBrush&&this.freeDrawingBrush._render(),this.contextTopDirty=!0),this.selection&&this._groupSelector&&(this._drawSelection(t),this.contextTopDirty=!0),t.restore()},renderTop:function(){var t=this.contextTop;return this.clearContext(t),this.renderTopLayer(t),this.fire("after:render"),this},_normalizePointer:function(t,e){var i=t.calcTransformMatrix(),r=T.util.invertTransform(i),n=this.restorePointerVpt(e);return T.util.transformPoint(n,r)},isTargetTransparent:function(t,e,i){if(t.shouldCache()&&t._cacheCanvas&&t!==this._activeObject){var r=this._normalizePointer(t,{x:e,y:i}),n=Math.max(t.cacheTranslationX+r.x*t.zoomX,0),o=Math.max(t.cacheTranslationY+r.y*t.zoomY,0);return T.util.isTransparent(t._cacheContext,Math.round(n),Math.round(o),this.targetFindTolerance)}var s=this.contextCache,a=t.selectionBackgroundColor,h=this.viewportTransform;return t.selectionBackgroundColor="",this.clearContext(s),s.save(),s.transform(h[0],h[1],h[2],h[3],h[4],h[5]),t.render(s),s.restore(),t.selectionBackgroundColor=a,T.util.isTransparent(s,e,i,this.targetFindTolerance)},_isSelectionKeyPressed:function(t){return"[object Array]"===Object.prototype.toString.call(this.selectionKey)?!!this.selectionKey.find((function(e){return!0===t[e]})):t[this.selectionKey]},_shouldClearSelection:function(t,e){var i=this.getActiveObjects(),r=this._activeObject;return!e||e&&r&&i.length>1&&-1===i.indexOf(e)&&r!==e&&!this._isSelectionKeyPressed(t)||e&&!e.evented||e&&!e.selectable&&r&&r!==e},_shouldCenterTransform:function(t,e,i){var r;if(t)return"scale"===e||"scaleX"===e||"scaleY"===e||"resizing"===e?r=this.centeredScaling||t.centeredScaling:"rotate"===e&&(r=this.centeredRotation||t.centeredRotation),r?!i:i},_getOriginFromCorner:function(t,e){var i={x:t.originX,y:t.originY};return"ml"===e||"tl"===e||"bl"===e?i.x="right":"mr"!==e&&"tr"!==e&&"br"!==e||(i.x="left"),"tl"===e||"mt"===e||"tr"===e?i.y="bottom":"bl"!==e&&"mb"!==e&&"br"!==e||(i.y="top"),i},_getActionFromCorner:function(t,e,i,r){if(!e||!t)return"drag";var n=r.controls[e];return n.getActionName(i,n,r)},_setupCurrentTransform:function(t,i,r){if(i){var n=this.getPointer(t),o=i.__corner,s=i.controls[o],a=r&&o?s.getActionHandler(t,i,s):T.controlsUtils.dragHandler,h=this._getActionFromCorner(r,o,t,i),c=this._getOriginFromCorner(i,o),l=t[this.centeredKey],u={target:i,action:h,actionHandler:a,corner:o,scaleX:i.scaleX,scaleY:i.scaleY,skewX:i.skewX,skewY:i.skewY,offsetX:n.x-i.left,offsetY:n.y-i.top,originX:c.x,originY:c.y,ex:n.x,ey:n.y,lastX:n.x,lastY:n.y,theta:e(i.angle),width:i.width*i.scaleX,shiftKey:t.shiftKey,altKey:l,original:T.util.saveObjectTransform(i)};this._shouldCenterTransform(i,h,l)&&(u.originX="center",u.originY="center"),u.original.originX=c.x,u.original.originY=c.y,this._currentTransform=u,this._beforeTransform(t)}},setCursor:function(t){this.upperCanvasEl.style.cursor=t},_drawSelection:function(t){var e=this._groupSelector,i=new T.Point(e.ex,e.ey),r=T.util.transformPoint(i,this.viewportTransform),n=new T.Point(e.ex+e.left,e.ey+e.top),o=T.util.transformPoint(n,this.viewportTransform),s=Math.min(r.x,o.x),a=Math.min(r.y,o.y),h=Math.max(r.x,o.x),c=Math.max(r.y,o.y),l=this.selectionLineWidth/2;this.selectionColor&&(t.fillStyle=this.selectionColor,t.fillRect(s,a,h-s,c-a)),this.selectionLineWidth&&this.selectionBorderColor&&(t.lineWidth=this.selectionLineWidth,t.strokeStyle=this.selectionBorderColor,s+=l,a+=l,h-=l,c-=l,T.Object.prototype._setLineDash.call(this,t,this.selectionDashArray),t.strokeRect(s,a,h-s,c-a))},findTarget:function(t,e){if(!this.skipTargetFind){var r,n,o=this.getPointer(t,!0),s=this._activeObject,a=this.getActiveObjects(),h=i(t),c=a.length>1&&!e||1===a.length;if(this.targets=[],c&&s._findTargetCorner(o,h))return s;if(a.length>1&&!e&&s===this._searchPossibleTargets([s],o))return s;if(1===a.length&&s===this._searchPossibleTargets([s],o)){if(!this.preserveObjectStacking)return s;r=s,n=this.targets,this.targets=[]}var l=this._searchPossibleTargets(this._objects,o);return t[this.altSelectionKey]&&l&&r&&l!==r&&(l=r,this.targets=n),l}},_checkTarget:function(t,e,i){if(e&&e.visible&&e.evented&&e.containsPoint(t)){if(!this.perPixelTargetFind&&!e.perPixelTargetFind||e.isEditing)return!0;if(!this.isTargetTransparent(e,i.x,i.y))return!0}},_searchPossibleTargets:function(t,e){for(var i,r,n=t.length;n--;){var o=t[n],s=o.group?this._normalizePointer(o.group,e):e;if(this._checkTarget(s,o,e)){(i=t[n]).subTargetCheck&&i instanceof T.Group&&(r=this._searchPossibleTargets(i._objects,e))&&this.targets.push(r);break}}return i},restorePointerVpt:function(t){return T.util.transformPoint(t,T.util.invertTransform(this.viewportTransform))},getPointer:function(e,i){if(this._absolutePointer&&!i)return this._absolutePointer;if(this._pointer&&i)return this._pointer;var r,n=t(e),o=this.upperCanvasEl,s=o.getBoundingClientRect(),a=s.width||0,h=s.height||0;a&&h||("top"in s&&"bottom"in s&&(h=Math.abs(s.top-s.bottom)),"right"in s&&"left"in s&&(a=Math.abs(s.right-s.left))),this.calcOffset(),n.x=n.x-this._offset.left,n.y=n.y-this._offset.top,i||(n=this.restorePointerVpt(n));var c=this.getRetinaScaling();return 1!==c&&(n.x/=c,n.y/=c),r=0===a||0===h?{width:1,height:1}:{width:o.width/a,height:o.height/h},{x:n.x*r.width,y:n.y*r.height}},_createUpperCanvas:function(){var t=this.lowerCanvasEl.className.replace(/\s*lower-canvas\s*/,""),e=this.lowerCanvasEl,i=this.upperCanvasEl;i?i.className="":(i=this._createCanvasElement(),this.upperCanvasEl=i),T.util.addClass(i,"upper-canvas "+t),this.wrapperEl.appendChild(i),this._copyCanvasStyle(e,i),this._applyCanvasStyle(i),this.contextTop=i.getContext("2d")},_createCacheCanvas:function(){this.cacheCanvasEl=this._createCanvasElement(),this.cacheCanvasEl.setAttribute("width",this.width),this.cacheCanvasEl.setAttribute("height",this.height),this.contextCache=this.cacheCanvasEl.getContext("2d")},_initWrapperElement:function(){this.wrapperEl=T.util.wrapElement(this.lowerCanvasEl,"div",{class:this.containerClass}),T.util.setStyle(this.wrapperEl,{width:this.width+"px",height:this.height+"px",position:"relative"}),T.util.makeElementUnselectable(this.wrapperEl)},_applyCanvasStyle:function(t){var e=this.width||t.width,i=this.height||t.height;T.util.setStyle(t,{position:"absolute",width:e+"px",height:i+"px",left:0,top:0,"touch-action":this.allowTouchScrolling?"manipulation":"none","-ms-touch-action":this.allowTouchScrolling?"manipulation":"none"}),t.width=e,t.height=i,T.util.makeElementUnselectable(t)},_copyCanvasStyle:function(t,e){e.style.cssText=t.style.cssText},getSelectionContext:function(){return this.contextTop},getSelectionElement:function(){return this.upperCanvasEl},getActiveObject:function(){return this._activeObject},getActiveObjects:function(){var t=this._activeObject;return t?"activeSelection"===t.type&&t._objects?t._objects.slice(0):[t]:[]},_onObjectRemoved:function(t){t===this._activeObject&&(this.fire("before:selection:cleared",{target:t}),this._discardActiveObject(),this.fire("selection:cleared",{target:t}),t.fire("deselected")),t===this._hoveredTarget&&(this._hoveredTarget=null,this._hoveredTargets=[]),this.callSuper("_onObjectRemoved",t)},_fireSelectionEvents:function(t,e){var i=!1,r=this.getActiveObjects(),n=[],o=[];t.forEach((function(t){-1===r.indexOf(t)&&(i=!0,t.fire("deselected",{e:e,target:t}),o.push(t))})),r.forEach((function(r){-1===t.indexOf(r)&&(i=!0,r.fire("selected",{e:e,target:r}),n.push(r))})),t.length>0&&r.length>0?i&&this.fire("selection:updated",{e:e,selected:n,deselected:o,updated:n[0]||o[0],target:this._activeObject}):r.length>0?this.fire("selection:created",{e:e,selected:n,target:this._activeObject}):t.length>0&&this.fire("selection:cleared",{e:e,deselected:o})},setActiveObject:function(t,e){var i=this.getActiveObjects();return this._setActiveObject(t,e),this._fireSelectionEvents(i,e),this},_setActiveObject:function(t,e){return this._activeObject!==t&&(!!this._discardActiveObject(e,t)&&(!t.onSelect({e:e})&&(this._activeObject=t,!0)))},_discardActiveObject:function(t,e){var i=this._activeObject;if(i){if(i.onDeselect({e:t,object:e}))return!1;this._activeObject=null}return!0},discardActiveObject:function(t){var e=this.getActiveObjects(),i=this.getActiveObject();return e.length&&this.fire("before:selection:cleared",{target:i,e:t}),this._discardActiveObject(t),this._fireSelectionEvents(e,t),this},dispose:function(){var t=this.wrapperEl;return this.removeListeners(),t.removeChild(this.upperCanvasEl),t.removeChild(this.lowerCanvasEl),this.contextCache=null,this.contextTop=null,["upperCanvasEl","cacheCanvasEl"].forEach(function(t){T.util.cleanUpJsdomNode(this[t]),this[t]=void 0}.bind(this)),t.parentNode&&t.parentNode.replaceChild(this.lowerCanvasEl,this.wrapperEl),delete this.wrapperEl,T.StaticCanvas.prototype.dispose.call(this),this},clear:function(){return this.discardActiveObject(),this.clearContext(this.contextTop),this.callSuper("clear")},drawControls:function(t){var e=this._activeObject;e&&e._renderControls(t)},_toObject:function(t,e,i){var r=this._realizeGroupTransformOnObject(t),n=this.callSuper("_toObject",t,e,i);return this._unwindGroupTransformOnObject(t,r),n},_realizeGroupTransformOnObject:function(t){if(t.group&&"activeSelection"===t.group.type&&this._activeObject===t.group){var e={};return["angle","flipX","flipY","left","scaleX","scaleY","skewX","skewY","top"].forEach((function(i){e[i]=t[i]})),T.util.addTransformToObject(t,this._activeObject.calcOwnMatrix()),e}return null},_unwindGroupTransformOnObject:function(t,e){e&&t.set(e)},_setSVGObject:function(t,e,i){var r=this._realizeGroupTransformOnObject(e);this.callSuper("_setSVGObject",t,e,i),this._unwindGroupTransformOnObject(e,r)},setViewportTransform:function(t){this.renderOnAddRemove&&this._activeObject&&this._activeObject.isEditing&&this._activeObject.clearContextTop(),T.StaticCanvas.prototype.setViewportTransform.call(this,t)}}),T.StaticCanvas)"prototype"!==r&&(T.Canvas[r]=T.StaticCanvas[r])}(),function(){var t=T.util.addListener,e=T.util.removeListener,i={passive:!1};function r(t,e){return t.button&&t.button===e-1}T.util.object.extend(T.Canvas.prototype,{mainTouchId:null,_initEventListeners:function(){this.removeListeners(),this._bindEvents(),this.addOrRemove(t,"add")},_getEventPrefix:function(){return this.enablePointerEvents?"pointer":"mouse"},addOrRemove:function(t,e){var r=this.upperCanvasEl,n=this._getEventPrefix();t(T.window,"resize",this._onResize),t(r,n+"down",this._onMouseDown),t(r,n+"move",this._onMouseMove,i),t(r,n+"out",this._onMouseOut),t(r,n+"enter",this._onMouseEnter),t(r,"wheel",this._onMouseWheel),t(r,"contextmenu",this._onContextMenu),t(r,"dblclick",this._onDoubleClick),t(r,"dragover",this._onDragOver),t(r,"dragenter",this._onDragEnter),t(r,"dragleave",this._onDragLeave),t(r,"drop",this._onDrop),this.enablePointerEvents||t(r,"touchstart",this._onTouchStart,i),void 0!==P&&e in P&&(P[e](r,"gesture",this._onGesture),P[e](r,"drag",this._onDrag),P[e](r,"orientation",this._onOrientationChange),P[e](r,"shake",this._onShake),P[e](r,"longpress",this._onLongPress))},removeListeners:function(){this.addOrRemove(e,"remove");var t=this._getEventPrefix();e(T.document,t+"up",this._onMouseUp),e(T.document,"touchend",this._onTouchEnd,i),e(T.document,t+"move",this._onMouseMove,i),e(T.document,"touchmove",this._onMouseMove,i)},_bindEvents:function(){this.eventsBound||(this._onMouseDown=this._onMouseDown.bind(this),this._onTouchStart=this._onTouchStart.bind(this),this._onMouseMove=this._onMouseMove.bind(this),this._onMouseUp=this._onMouseUp.bind(this),this._onTouchEnd=this._onTouchEnd.bind(this),this._onResize=this._onResize.bind(this),this._onGesture=this._onGesture.bind(this),this._onDrag=this._onDrag.bind(this),this._onShake=this._onShake.bind(this),this._onLongPress=this._onLongPress.bind(this),this._onOrientationChange=this._onOrientationChange.bind(this),this._onMouseWheel=this._onMouseWheel.bind(this),this._onMouseOut=this._onMouseOut.bind(this),this._onMouseEnter=this._onMouseEnter.bind(this),this._onContextMenu=this._onContextMenu.bind(this),this._onDoubleClick=this._onDoubleClick.bind(this),this._onDragOver=this._onDragOver.bind(this),this._onDragEnter=this._simpleEventHandler.bind(this,"dragenter"),this._onDragLeave=this._simpleEventHandler.bind(this,"dragleave"),this._onDrop=this._simpleEventHandler.bind(this,"drop"),this.eventsBound=!0)},_onGesture:function(t,e){this.__onTransformGesture&&this.__onTransformGesture(t,e)},_onDrag:function(t,e){this.__onDrag&&this.__onDrag(t,e)},_onMouseWheel:function(t){this.__onMouseWheel(t)},_onMouseOut:function(t){var e=this._hoveredTarget;this.fire("mouse:out",{target:e,e:t}),this._hoveredTarget=null,e&&e.fire("mouseout",{e:t});var i=this;this._hoveredTargets.forEach((function(r){i.fire("mouse:out",{target:e,e:t}),r&&e.fire("mouseout",{e:t})})),this._hoveredTargets=[],this._iTextInstances&&this._iTextInstances.forEach((function(t){t.isEditing&&t.hiddenTextarea.focus()}))},_onMouseEnter:function(t){this._currentTransform||this.findTarget(t)||(this.fire("mouse:over",{target:null,e:t}),this._hoveredTarget=null,this._hoveredTargets=[])},_onOrientationChange:function(t,e){this.__onOrientationChange&&this.__onOrientationChange(t,e)},_onShake:function(t,e){this.__onShake&&this.__onShake(t,e)},_onLongPress:function(t,e){this.__onLongPress&&this.__onLongPress(t,e)},_onDragOver:function(t){t.preventDefault();var e=this._simpleEventHandler("dragover",t);this._fireEnterLeaveEvents(e,t)},_onContextMenu:function(t){return this.stopContextMenu&&(t.stopPropagation(),t.preventDefault()),!1},_onDoubleClick:function(t){this._cacheTransformEventData(t),this._handleEvent(t,"dblclick"),this._resetTransformEventData(t)},getPointerId:function(t){var e=t.changedTouches;return e?e[0]&&e[0].identifier:this.enablePointerEvents?t.pointerId:-1},_isMainEvent:function(t){return!0===t.isPrimary||!1!==t.isPrimary&&("touchend"===t.type&&0===t.touches.length||(!t.changedTouches||t.changedTouches[0].identifier===this.mainTouchId))},_onTouchStart:function(r){r.preventDefault(),null===this.mainTouchId&&(this.mainTouchId=this.getPointerId(r)),this.__onMouseDown(r),this._resetTransformEventData();var n=this.upperCanvasEl,o=this._getEventPrefix();t(T.document,"touchend",this._onTouchEnd,i),t(T.document,"touchmove",this._onMouseMove,i),e(n,o+"down",this._onMouseDown)},_onMouseDown:function(r){this.__onMouseDown(r),this._resetTransformEventData();var n=this.upperCanvasEl,o=this._getEventPrefix();e(n,o+"move",this._onMouseMove,i),t(T.document,o+"up",this._onMouseUp),t(T.document,o+"move",this._onMouseMove,i)},_onTouchEnd:function(r){if(!(r.touches.length>0)){this.__onMouseUp(r),this._resetTransformEventData(),this.mainTouchId=null;var n=this._getEventPrefix();e(T.document,"touchend",this._onTouchEnd,i),e(T.document,"touchmove",this._onMouseMove,i);var o=this;this._willAddMouseDown&&clearTimeout(this._willAddMouseDown),this._willAddMouseDown=setTimeout((function(){t(o.upperCanvasEl,n+"down",o._onMouseDown),o._willAddMouseDown=0}),400)}},_onMouseUp:function(r){this.__onMouseUp(r),this._resetTransformEventData();var n=this.upperCanvasEl,o=this._getEventPrefix();this._isMainEvent(r)&&(e(T.document,o+"up",this._onMouseUp),e(T.document,o+"move",this._onMouseMove,i),t(n,o+"move",this._onMouseMove,i))},_onMouseMove:function(t){!this.allowTouchScrolling&&t.preventDefault&&t.preventDefault(),this.__onMouseMove(t)},_onResize:function(){this.calcOffset()},_shouldRender:function(t){var e=this._activeObject;return!!(!!e!=!!t||e&&t&&e!==t)||(e&&e.isEditing,!1)},__onMouseUp:function(t){var e,i=this._currentTransform,n=this._groupSelector,o=!1,s=!n||0===n.left&&0===n.top;if(this._cacheTransformEventData(t),e=this._target,this._handleEvent(t,"up:before"),r(t,3))this.fireRightClick&&this._handleEvent(t,"up",3,s);else{if(r(t,2))return this.fireMiddleClick&&this._handleEvent(t,"up",2,s),void this._resetTransformEventData();if(this.isDrawingMode&&this._isCurrentlyDrawing)this._onMouseUpInDrawingMode(t);else if(this._isMainEvent(t)){if(i&&(this._finalizeCurrentTransform(t),o=i.actionPerformed),!s){var a=e===this._activeObject;this._maybeGroupObjects(t),o||(o=this._shouldRender(e)||!a&&e===this._activeObject)}if(e){if(e.selectable&&e!==this._activeObject&&"up"===e.activeOn)this.setActiveObject(e,t),o=!0;else{var h=e._findTargetCorner(this.getPointer(t,!0),T.util.isTouchEvent(t)),c=e.controls[h],l=c&&c.getMouseUpHandler(t,e,c);if(l){var u=this.getPointer(t);l(t,i,u.x,u.y)}}e.isMoving=!1}this._setCursorFromEvent(t,e),this._handleEvent(t,"up",1,s),this._groupSelector=null,this._currentTransform=null,e&&(e.__corner=0),o?this.requestRenderAll():s||this.renderTop()}}},_simpleEventHandler:function(t,e){var i=this.findTarget(e),r=this.targets,n={e:e,target:i,subTargets:r};if(this.fire(t,n),i&&i.fire(t,n),!r)return i;for(var o=0;o1&&(e=new T.ActiveSelection(i.reverse(),{canvas:this}),this.setActiveObject(e,t))},_collectObjects:function(t){for(var e,i=[],r=this._groupSelector.ex,n=this._groupSelector.ey,o=r+this._groupSelector.left,s=n+this._groupSelector.top,a=new T.Point(b(r,o),b(n,s)),h=new T.Point(x(r,o),x(n,s)),c=!this.selectionFullyContained,l=r===o&&n===s,u=this._objects.length;u--&&!((e=this._objects[u])&&e.selectable&&e.visible&&(c&&e.intersectsWithRect(a,h,!0)||e.isContainedWithinRect(a,h,!0)||c&&e.containsPoint(a,null,!0)||c&&e.containsPoint(h,null,!0))&&(i.push(e),l)););return i.length>1&&(i=i.filter((function(e){return!e.onSelect({e:t})}))),i},_maybeGroupObjects:function(t){this.selection&&this._groupSelector&&this._groupSelectedObjects(t),this.setCursor(this.defaultCursor),this._groupSelector=null}}),T.util.object.extend(T.StaticCanvas.prototype,{toDataURL:function(t){t||(t={});var e=t.format||"png",i=t.quality||1,r=(t.multiplier||1)*(t.enableRetinaScaling?this.getRetinaScaling():1),n=this.toCanvasElement(r,t);return T.util.toDataURL(n,e,i)},toCanvasElement:function(t,e){t=t||1;var i=((e=e||{}).width||this.width)*t,r=(e.height||this.height)*t,n=this.getZoom(),o=this.width,s=this.height,a=n*t,h=this.viewportTransform,c=(h[4]-(e.left||0))*t,l=(h[5]-(e.top||0))*t,u=this.interactive,f=[a,0,0,a,c,l],d=this.enableRetinaScaling,g=T.util.createCanvasElement(),p=this.contextTop;return g.width=i,g.height=r,this.contextTop=null,this.enableRetinaScaling=!1,this.interactive=!1,this.viewportTransform=f,this.width=i,this.height=r,this.calcViewportBoundaries(),this.renderCanvas(g.getContext("2d"),this._objects),this.viewportTransform=h,this.width=o,this.height=s,this.calcViewportBoundaries(),this.interactive=u,this.enableRetinaScaling=d,this.contextTop=p,g}}),T.util.object.extend(T.StaticCanvas.prototype,{loadFromJSON:function(t,e,i){if(t){var r="string"==typeof t?JSON.parse(t):T.util.object.clone(t),n=this,o=r.clipPath,s=this.renderOnAddRemove;return this.renderOnAddRemove=!1,delete r.clipPath,this._enlivenObjects(r.objects,(function(t){n.clear(),n._setBgOverlay(r,(function(){o?n._enlivenObjects([o],(function(i){n.clipPath=i[0],n.__setupCanvas.call(n,r,t,s,e)})):n.__setupCanvas.call(n,r,t,s,e)}))}),i),this}},__setupCanvas:function(t,e,i,r){var n=this;e.forEach((function(t,e){n.insertAt(t,e)})),this.renderOnAddRemove=i,delete t.objects,delete t.backgroundImage,delete t.overlayImage,delete t.background,delete t.overlay,this._setOptions(t),this.renderAll(),r&&r()},_setBgOverlay:function(t,e){var i={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(t.backgroundImage||t.overlayImage||t.background||t.overlay){var r=function(){i.backgroundImage&&i.overlayImage&&i.backgroundColor&&i.overlayColor&&e&&e()};this.__setBgOverlay("backgroundImage",t.backgroundImage,i,r),this.__setBgOverlay("overlayImage",t.overlayImage,i,r),this.__setBgOverlay("backgroundColor",t.background,i,r),this.__setBgOverlay("overlayColor",t.overlay,i,r)}else e&&e()},__setBgOverlay:function(t,e,i,r){var n=this;if(!e)return i[t]=!0,void(r&&r());"backgroundImage"===t||"overlayImage"===t?T.util.enlivenObjects([e],(function(e){n[t]=e[0],i[t]=!0,r&&r()})):this["set"+T.util.string.capitalize(t,!0)](e,(function(){i[t]=!0,r&&r()}))},_enlivenObjects:function(t,e,i){t&&0!==t.length?T.util.enlivenObjects(t,(function(t){e&&e(t)}),null,i):e&&e([])},_toDataURL:function(t,e){this.clone((function(i){e(i.toDataURL(t))}))},_toDataURLWithMultiplier:function(t,e,i){this.clone((function(r){i(r.toDataURLWithMultiplier(t,e))}))},clone:function(t,e){var i=JSON.stringify(this.toJSON(e));this.cloneWithoutData((function(e){e.loadFromJSON(i,(function(){t&&t(e)}))}))},cloneWithoutData:function(t){var e=T.util.createCanvasElement();e.width=this.width,e.height=this.height;var i=new T.Canvas(e);this.backgroundImage?(i.setBackgroundImage(this.backgroundImage.src,(function(){i.renderAll(),t&&t(i)})),i.backgroundImageOpacity=this.backgroundImageOpacity,i.backgroundImageStretch=this.backgroundImageStretch):t&&t(i)}}),C=T.util.degreesToRadians,w=T.util.radiansToDegrees,T.util.object.extend(T.Canvas.prototype,{__onTransformGesture:function(t,e){if(!this.isDrawingMode&&t.touches&&2===t.touches.length&&"gesture"===e.gesture){var i=this.findTarget(t);void 0!==i&&(this.__gesturesParams={e:t,self:e,target:i},this.__gesturesRenderer()),this.fire("touch:gesture",{target:i,e:t,self:e})}},__gesturesParams:null,__gesturesRenderer:function(){if(null!==this.__gesturesParams&&null!==this._currentTransform){var t=this.__gesturesParams.self,e=this._currentTransform,i=this.__gesturesParams.e;e.action="scale",e.originX=e.originY="center",this._scaleObjectBy(t.scale,i),0!==t.rotation&&(e.action="rotate",this._rotateObjectByAngle(t.rotation,i)),this.requestRenderAll(),e.action="drag"}},__onDrag:function(t,e){this.fire("touch:drag",{e:t,self:e})},__onOrientationChange:function(t,e){this.fire("touch:orientation",{e:t,self:e})},__onShake:function(t,e){this.fire("touch:shake",{e:t,self:e})},__onLongPress:function(t,e){this.fire("touch:longpress",{e:t,self:e})},_scaleObjectBy:function(t,e){var i=this._currentTransform,r=i.target;return i.gestureScale=t,r._scaling=!0,T.controlsUtils.scalingEqually(e,i,0,0)},_rotateObjectByAngle:function(t,e){var i=this._currentTransform;i.target.get("lockRotation")||(i.target.rotate(w(C(t)+i.theta)),this._fire("rotating",{target:i.target,e:e,transform:i}))}}),function(t){var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.util.object.clone,n=e.util.toFixed,o=e.util.string.capitalize,s=e.util.degreesToRadians,a=!e.isLikelyNode;e.Object||(e.Object=e.util.createClass(e.CommonMethods,{type:"object",originX:"left",originY:"top",top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:!1,flipY:!1,opacity:1,angle:0,skewX:0,skewY:0,cornerSize:13,touchCornerSize:24,transparentCorners:!0,hoverCursor:null,moveCursor:null,padding:0,borderColor:"rgb(178,204,255)",borderDashArray:null,cornerColor:"rgb(178,204,255)",cornerStrokeColor:null,cornerStyle:"rect",cornerDashArray:null,centeredScaling:!1,centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"nonzero",globalCompositeOperation:"source-over",backgroundColor:"",selectionBackgroundColor:"",stroke:null,strokeWidth:1,strokeDashArray:null,strokeDashOffset:0,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:4,shadow:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,minScaleLimit:0,selectable:!0,evented:!0,visible:!0,hasControls:!0,hasBorders:!0,perPixelTargetFind:!1,includeDefaultValues:!0,lockMovementX:!1,lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockSkewingX:!1,lockSkewingY:!1,lockScalingFlip:!1,excludeFromExport:!1,objectCaching:a,statefullCache:!1,noScaleCache:!0,strokeUniform:!1,dirty:!0,__corner:0,paintFirst:"fill",activeOn:"down",stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeDashOffset strokeLineJoin strokeMiterLimit angle opacity fill globalCompositeOperation shadow visible backgroundColor skewX skewY fillRule paintFirst clipPath strokeUniform".split(" "),cacheProperties:"fill stroke strokeWidth strokeDashArray width height paintFirst strokeUniform strokeLineCap strokeDashOffset strokeLineJoin strokeMiterLimit backgroundColor clipPath".split(" "),colorProperties:"fill stroke backgroundColor".split(" "),clipPath:void 0,inverted:!1,absolutePositioned:!1,initialize:function(t){t&&this.setOptions(t)},_createCacheCanvas:function(){this._cacheProperties={},this._cacheCanvas=e.util.createCanvasElement(),this._cacheContext=this._cacheCanvas.getContext("2d"),this._updateCacheCanvas(),this.dirty=!0},_limitCacheSize:function(t){var i=e.perfLimitSizeTotal,r=t.width,n=t.height,o=e.maxCacheSideLimit,s=e.minCacheSideLimit;if(r<=o&&n<=o&&r*n<=i)return rl&&(t.zoomX/=r/l,t.width=l,t.capped=!0),n>u&&(t.zoomY/=n/u,t.height=u,t.capped=!0),t},_getCacheCanvasDimensions:function(){var t=this.getTotalObjectScaling(),e=this._getTransformedDimensions(0,0),i=e.x*t.scaleX/this.scaleX,r=e.y*t.scaleY/this.scaleY;return{width:i+2,height:r+2,zoomX:t.scaleX,zoomY:t.scaleY,x:i,y:r}},_updateCacheCanvas:function(){var t=this.canvas;if(this.noScaleCache&&t&&t._currentTransform){var i=t._currentTransform.target,r=t._currentTransform.action;if(this===i&&r.slice&&"scale"===r.slice(0,5))return!1}var n,o,s=this._cacheCanvas,a=this._limitCacheSize(this._getCacheCanvasDimensions()),h=e.minCacheSideLimit,c=a.width,l=a.height,u=a.zoomX,f=a.zoomY,d=c!==this.cacheWidth||l!==this.cacheHeight,g=this.zoomX!==u||this.zoomY!==f,p=d||g,v=0,m=0,y=!1;if(d){var _=this._cacheCanvas.width,b=this._cacheCanvas.height,x=c>_||l>b;y=x||(c<.9*_||l<.9*b)&&_>h&&b>h,x&&!a.capped&&(c>h||l>h)&&(v=.1*c,m=.1*l)}return this instanceof e.Text&&this.path&&(p=!0,y=!0,v+=this.getHeightOfLine(0)*this.zoomX,m+=this.getHeightOfLine(0)*this.zoomY),!!p&&(y?(s.width=Math.ceil(c+v),s.height=Math.ceil(l+m)):(this._cacheContext.setTransform(1,0,0,1,0,0),this._cacheContext.clearRect(0,0,s.width,s.height)),n=a.x/2,o=a.y/2,this.cacheTranslationX=Math.round(s.width/2-n)+n,this.cacheTranslationY=Math.round(s.height/2-o)+o,this.cacheWidth=c,this.cacheHeight=l,this._cacheContext.translate(this.cacheTranslationX,this.cacheTranslationY),this._cacheContext.scale(u,f),this.zoomX=u,this.zoomY=f,!0)},setOptions:function(t){this._setOptions(t),this._initGradient(t.fill,"fill"),this._initGradient(t.stroke,"stroke"),this._initPattern(t.fill,"fill"),this._initPattern(t.stroke,"stroke")},transform:function(t){var e=this.group&&!this.group._transformDone||this.group&&this.canvas&&t===this.canvas.contextTop,i=this.calcTransformMatrix(!e);t.transform(i[0],i[1],i[2],i[3],i[4],i[5])},toObject:function(t){var i=e.Object.NUM_FRACTION_DIGITS,r={type:this.type,version:e.version,originX:this.originX,originY:this.originY,left:n(this.left,i),top:n(this.top,i),width:n(this.width,i),height:n(this.height,i),fill:this.fill&&this.fill.toObject?this.fill.toObject():this.fill,stroke:this.stroke&&this.stroke.toObject?this.stroke.toObject():this.stroke,strokeWidth:n(this.strokeWidth,i),strokeDashArray:this.strokeDashArray?this.strokeDashArray.concat():this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeDashOffset:this.strokeDashOffset,strokeLineJoin:this.strokeLineJoin,strokeUniform:this.strokeUniform,strokeMiterLimit:n(this.strokeMiterLimit,i),scaleX:n(this.scaleX,i),scaleY:n(this.scaleY,i),angle:n(this.angle,i),flipX:this.flipX,flipY:this.flipY,opacity:n(this.opacity,i),shadow:this.shadow&&this.shadow.toObject?this.shadow.toObject():this.shadow,visible:this.visible,backgroundColor:this.backgroundColor,fillRule:this.fillRule,paintFirst:this.paintFirst,globalCompositeOperation:this.globalCompositeOperation,skewX:n(this.skewX,i),skewY:n(this.skewY,i)};return this.clipPath&&!this.clipPath.excludeFromExport&&(r.clipPath=this.clipPath.toObject(t),r.clipPath.inverted=this.clipPath.inverted,r.clipPath.absolutePositioned=this.clipPath.absolutePositioned),e.util.populateWithProperties(this,r,t),this.includeDefaultValues||(r=this._removeDefaultValues(r)),r},toDatalessObject:function(t){return this.toObject(t)},_removeDefaultValues:function(t){var i=e.util.getKlass(t.type).prototype;return i.stateProperties.forEach((function(e){"left"!==e&&"top"!==e&&(t[e]===i[e]&&delete t[e],"[object Array]"===Object.prototype.toString.call(t[e])&&"[object Array]"===Object.prototype.toString.call(i[e])&&0===t[e].length&&0===i[e].length&&delete t[e])})),t},toString:function(){return"#"},getObjectScaling:function(){if(!this.group)return{scaleX:this.scaleX,scaleY:this.scaleY};var t=e.util.qrDecompose(this.calcTransformMatrix());return{scaleX:Math.abs(t.scaleX),scaleY:Math.abs(t.scaleY)}},getTotalObjectScaling:function(){var t=this.getObjectScaling(),e=t.scaleX,i=t.scaleY;if(this.canvas){var r=this.canvas.getZoom(),n=this.canvas.getRetinaScaling();e*=r*n,i*=r*n}return{scaleX:e,scaleY:i}},getObjectOpacity:function(){var t=this.opacity;return this.group&&(t*=this.group.getObjectOpacity()),t},_set:function(t,i){var r="scaleX"===t||"scaleY"===t,n=this[t]!==i,o=!1;return r&&(i=this._constrainScale(i)),"scaleX"===t&&i<0?(this.flipX=!this.flipX,i*=-1):"scaleY"===t&&i<0?(this.flipY=!this.flipY,i*=-1):"shadow"!==t||!i||i instanceof e.Shadow?"dirty"===t&&this.group&&this.group.set("dirty",i):i=new e.Shadow(i),this[t]=i,n&&(o=this.group&&this.group.isOnACache(),this.cacheProperties.indexOf(t)>-1?(this.dirty=!0,o&&this.group.set("dirty",!0)):o&&this.stateProperties.indexOf(t)>-1&&this.group.set("dirty",!0)),this},setOnGroup:function(){},getViewportTransform:function(){return this.canvas&&this.canvas.viewportTransform?this.canvas.viewportTransform:e.iMatrix.concat()},isNotVisible:function(){return 0===this.opacity||!this.width&&!this.height&&0===this.strokeWidth||!this.visible},render:function(t){this.isNotVisible()||this.canvas&&this.canvas.skipOffscreen&&!this.group&&!this.isOnScreen()||(t.save(),this._setupCompositeOperation(t),this.drawSelectionBackground(t),this.transform(t),this._setOpacity(t),this._setShadow(t,this),this.shouldCache()?(this.renderCache(),this.drawCacheOnCanvas(t)):(this._removeCacheCanvas(),this.dirty=!1,this.drawObject(t),this.objectCaching&&this.statefullCache&&this.saveState({propertySet:"cacheProperties"})),t.restore())},renderCache:function(t){t=t||{},this._cacheCanvas||this._createCacheCanvas(),this.isCacheDirty()&&(this.statefullCache&&this.saveState({propertySet:"cacheProperties"}),this.drawObject(this._cacheContext,t.forClipping),this.dirty=!1)},_removeCacheCanvas:function(){this._cacheCanvas=null,this.cacheWidth=0,this.cacheHeight=0},hasStroke:function(){return this.stroke&&"transparent"!==this.stroke&&0!==this.strokeWidth},hasFill:function(){return this.fill&&"transparent"!==this.fill},needsItsOwnCache:function(){return!("stroke"!==this.paintFirst||!this.hasFill()||!this.hasStroke()||"object"!=typeof this.shadow)||!!this.clipPath},shouldCache:function(){return this.ownCaching=this.needsItsOwnCache()||this.objectCaching&&(!this.group||!this.group.isOnACache()),this.ownCaching},willDrawShadow:function(){return!!this.shadow&&(0!==this.shadow.offsetX||0!==this.shadow.offsetY)},drawClipPathOnCache:function(t){var i=this.clipPath;if(t.save(),i.inverted?t.globalCompositeOperation="destination-out":t.globalCompositeOperation="destination-in",i.absolutePositioned){var r=e.util.invertTransform(this.calcTransformMatrix());t.transform(r[0],r[1],r[2],r[3],r[4],r[5])}i.transform(t),t.scale(1/i.zoomX,1/i.zoomY),t.drawImage(i._cacheCanvas,-i.cacheTranslationX,-i.cacheTranslationY),t.restore()},drawObject:function(t,e){var i=this.fill,r=this.stroke;e?(this.fill="black",this.stroke="",this._setClippingProperties(t)):this._renderBackground(t),this._render(t),this._drawClipPath(t),this.fill=i,this.stroke=r},_drawClipPath:function(t){var e=this.clipPath;e&&(e.canvas=this.canvas,e.shouldCache(),e._transformDone=!0,e.renderCache({forClipping:!0}),this.drawClipPathOnCache(t))},drawCacheOnCanvas:function(t){t.scale(1/this.zoomX,1/this.zoomY),t.drawImage(this._cacheCanvas,-this.cacheTranslationX,-this.cacheTranslationY)},isCacheDirty:function(t){if(this.isNotVisible())return!1;if(this._cacheCanvas&&!t&&this._updateCacheCanvas())return!0;if(this.dirty||this.clipPath&&this.clipPath.absolutePositioned||this.statefullCache&&this.hasStateChanged("cacheProperties")){if(this._cacheCanvas&&!t){var e=this.cacheWidth/this.zoomX,i=this.cacheHeight/this.zoomY;this._cacheContext.clearRect(-e/2,-i/2,e,i)}return!0}return!1},_renderBackground:function(t){if(this.backgroundColor){var e=this._getNonTransformedDimensions();t.fillStyle=this.backgroundColor,t.fillRect(-e.x/2,-e.y/2,e.x,e.y),this._removeShadow(t)}},_setOpacity:function(t){this.group&&!this.group._transformDone?t.globalAlpha=this.getObjectOpacity():t.globalAlpha*=this.opacity},_setStrokeStyles:function(t,e){var i=e.stroke;i&&(t.lineWidth=e.strokeWidth,t.lineCap=e.strokeLineCap,t.lineDashOffset=e.strokeDashOffset,t.lineJoin=e.strokeLineJoin,t.miterLimit=e.strokeMiterLimit,i.toLive?"percentage"===i.gradientUnits||i.gradientTransform||i.patternTransform?this._applyPatternForTransformedGradient(t,i):(t.strokeStyle=i.toLive(t,this),this._applyPatternGradientTransform(t,i)):t.strokeStyle=e.stroke)},_setFillStyles:function(t,e){var i=e.fill;i&&(i.toLive?(t.fillStyle=i.toLive(t,this),this._applyPatternGradientTransform(t,e.fill)):t.fillStyle=i)},_setClippingProperties:function(t){t.globalAlpha=1,t.strokeStyle="transparent",t.fillStyle="#000000"},_setLineDash:function(t,e){e&&0!==e.length&&(1&e.length&&e.push.apply(e,e),t.setLineDash(e))},_renderControls:function(t,i){var r,n,o,a=this.getViewportTransform(),h=this.calcTransformMatrix();n=void 0!==(i=i||{}).hasBorders?i.hasBorders:this.hasBorders,o=void 0!==i.hasControls?i.hasControls:this.hasControls,h=e.util.multiplyTransformMatrices(a,h),r=e.util.qrDecompose(h),t.save(),t.translate(r.translateX,r.translateY),t.lineWidth=1*this.borderScaleFactor,this.group||(t.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1),t.rotate(s(r.angle)),i.forActiveSelection||this.group?n&&this.drawBordersInGroup(t,r,i):n&&this.drawBorders(t,i),o&&this.drawControls(t,i),t.restore()},_setShadow:function(t){if(this.shadow){var i,r=this.shadow,n=this.canvas,o=n&&n.viewportTransform[0]||1,s=n&&n.viewportTransform[3]||1;i=r.nonScaling?{scaleX:1,scaleY:1}:this.getObjectScaling(),n&&n._isRetinaScaling()&&(o*=e.devicePixelRatio,s*=e.devicePixelRatio),t.shadowColor=r.color,t.shadowBlur=r.blur*e.browserShadowBlurConstant*(o+s)*(i.scaleX+i.scaleY)/4,t.shadowOffsetX=r.offsetX*o*i.scaleX,t.shadowOffsetY=r.offsetY*s*i.scaleY}},_removeShadow:function(t){this.shadow&&(t.shadowColor="",t.shadowBlur=t.shadowOffsetX=t.shadowOffsetY=0)},_applyPatternGradientTransform:function(t,e){if(!e||!e.toLive)return{offsetX:0,offsetY:0};var i=e.gradientTransform||e.patternTransform,r=-this.width/2+e.offsetX||0,n=-this.height/2+e.offsetY||0;return"percentage"===e.gradientUnits?t.transform(this.width,0,0,this.height,r,n):t.transform(1,0,0,1,r,n),i&&t.transform(i[0],i[1],i[2],i[3],i[4],i[5]),{offsetX:r,offsetY:n}},_renderPaintInOrder:function(t){"stroke"===this.paintFirst?(this._renderStroke(t),this._renderFill(t)):(this._renderFill(t),this._renderStroke(t))},_render:function(){},_renderFill:function(t){this.fill&&(t.save(),this._setFillStyles(t,this),"evenodd"===this.fillRule?t.fill("evenodd"):t.fill(),t.restore())},_renderStroke:function(t){if(this.stroke&&0!==this.strokeWidth){if(this.shadow&&!this.shadow.affectStroke&&this._removeShadow(t),t.save(),this.strokeUniform&&this.group){var e=this.getObjectScaling();t.scale(1/e.scaleX,1/e.scaleY)}else this.strokeUniform&&t.scale(1/this.scaleX,1/this.scaleY);this._setLineDash(t,this.strokeDashArray),this._setStrokeStyles(t,this),t.stroke(),t.restore()}},_applyPatternForTransformedGradient:function(t,i){var r,n=this._limitCacheSize(this._getCacheCanvasDimensions()),o=e.util.createCanvasElement(),s=this.canvas.getRetinaScaling(),a=n.x/this.scaleX/s,h=n.y/this.scaleY/s;o.width=a,o.height=h,(r=o.getContext("2d")).beginPath(),r.moveTo(0,0),r.lineTo(a,0),r.lineTo(a,h),r.lineTo(0,h),r.closePath(),r.translate(a/2,h/2),r.scale(n.zoomX/this.scaleX/s,n.zoomY/this.scaleY/s),this._applyPatternGradientTransform(r,i),r.fillStyle=i.toLive(t),r.fill(),t.translate(-this.width/2-this.strokeWidth/2,-this.height/2-this.strokeWidth/2),t.scale(s*this.scaleX/n.zoomX,s*this.scaleY/n.zoomY),t.strokeStyle=r.createPattern(o,"no-repeat")},_findCenterFromElement:function(){return{x:this.left+this.width/2,y:this.top+this.height/2}},_assignTransformMatrixProps:function(){if(this.transformMatrix){var t=e.util.qrDecompose(this.transformMatrix);this.flipX=!1,this.flipY=!1,this.set("scaleX",t.scaleX),this.set("scaleY",t.scaleY),this.angle=t.angle,this.skewX=t.skewX,this.skewY=0}},_removeTransformMatrix:function(t){var i=this._findCenterFromElement();this.transformMatrix&&(this._assignTransformMatrixProps(),i=e.util.transformPoint(i,this.transformMatrix)),this.transformMatrix=null,t&&(this.scaleX*=t.scaleX,this.scaleY*=t.scaleY,this.cropX=t.cropX,this.cropY=t.cropY,i.x+=t.offsetLeft,i.y+=t.offsetTop,this.width=t.width,this.height=t.height),this.setPositionByOrigin(i,"center","center")},clone:function(t,i){var r=this.toObject(i);this.constructor.fromObject?this.constructor.fromObject(r,t):e.Object._fromObject("Object",r,t)},cloneAsImage:function(t,i){var r=this.toCanvasElement(i);return t&&t(new e.Image(r)),this},toCanvasElement:function(t){t||(t={});var i=e.util,r=i.saveObjectTransform(this),n=this.group,o=this.shadow,s=Math.abs,a=(t.multiplier||1)*(t.enableRetinaScaling?e.devicePixelRatio:1);delete this.group,t.withoutTransform&&i.resetObjectTransform(this),t.withoutShadow&&(this.shadow=null);var h,c,l,u,f=e.util.createCanvasElement(),d=this.getBoundingRect(!0,!0),g=this.shadow,p={x:0,y:0};g&&(c=g.blur,h=g.nonScaling?{scaleX:1,scaleY:1}:this.getObjectScaling(),p.x=2*Math.round(s(g.offsetX)+c)*s(h.scaleX),p.y=2*Math.round(s(g.offsetY)+c)*s(h.scaleY)),l=d.width+p.x,u=d.height+p.y,f.width=Math.ceil(l),f.height=Math.ceil(u);var v=new e.StaticCanvas(f,{enableRetinaScaling:!1,renderOnAddRemove:!1,skipOffscreen:!1});"jpeg"===t.format&&(v.backgroundColor="#fff"),this.setPositionByOrigin(new e.Point(v.width/2,v.height/2),"center","center");var m=this.canvas;v.add(this);var y=v.toCanvasElement(a||1,t);return this.shadow=o,this.set("canvas",m),n&&(this.group=n),this.set(r).setCoords(),v._objects=[],v.dispose(),v=null,y},toDataURL:function(t){return t||(t={}),e.util.toDataURL(this.toCanvasElement(t),t.format||"png",t.quality||1)},isType:function(t){return this.type===t},complexity:function(){return 1},toJSON:function(t){return this.toObject(t)},rotate:function(t){var e=("center"!==this.originX||"center"!==this.originY)&&this.centeredRotation;return e&&this._setOriginToCenter(),this.set("angle",t),e&&this._resetOrigin(),this},centerH:function(){return this.canvas&&this.canvas.centerObjectH(this),this},viewportCenterH:function(){return this.canvas&&this.canvas.viewportCenterObjectH(this),this},centerV:function(){return this.canvas&&this.canvas.centerObjectV(this),this},viewportCenterV:function(){return this.canvas&&this.canvas.viewportCenterObjectV(this),this},center:function(){return this.canvas&&this.canvas.centerObject(this),this},viewportCenter:function(){return this.canvas&&this.canvas.viewportCenterObject(this),this},getLocalPointer:function(t,i){i=i||this.canvas.getPointer(t);var r=new e.Point(i.x,i.y),n=this._getLeftTopCoords();return this.angle&&(r=e.util.rotatePoint(r,n,s(-this.angle))),{x:r.x-n.x,y:r.y-n.y}},_setupCompositeOperation:function(t){this.globalCompositeOperation&&(t.globalCompositeOperation=this.globalCompositeOperation)}}),e.util.createAccessors&&e.util.createAccessors(e.Object),i(e.Object.prototype,e.Observable),e.Object.NUM_FRACTION_DIGITS=2,e.Object._fromObject=function(t,i,n,o){var s=e[t];i=r(i,!0),e.util.enlivenPatterns([i.fill,i.stroke],(function(t){void 0!==t[0]&&(i.fill=t[0]),void 0!==t[1]&&(i.stroke=t[1]),e.util.enlivenObjects([i.clipPath],(function(t){i.clipPath=t[0];var e=o?new s(i[o],i):new s(i);n&&n(e)}))}))},e.Object.__uid=0)}(t),function(){var t=T.util.degreesToRadians,e={left:-.5,center:0,right:.5},i={top:-.5,center:0,bottom:.5};T.util.object.extend(T.Object.prototype,{translateToGivenOrigin:function(t,r,n,o,s){var a,h,c,l=t.x,u=t.y;return"string"==typeof r?r=e[r]:r-=.5,"string"==typeof o?o=e[o]:o-=.5,"string"==typeof n?n=i[n]:n-=.5,"string"==typeof s?s=i[s]:s-=.5,h=s-n,((a=o-r)||h)&&(c=this._getTransformedDimensions(),l=t.x+a*c.x,u=t.y+h*c.y),new T.Point(l,u)},translateToCenterPoint:function(e,i,r){var n=this.translateToGivenOrigin(e,i,r,"center","center");return this.angle?T.util.rotatePoint(n,e,t(this.angle)):n},translateToOriginPoint:function(e,i,r){var n=this.translateToGivenOrigin(e,"center","center",i,r);return this.angle?T.util.rotatePoint(n,e,t(this.angle)):n},getCenterPoint:function(){var t=new T.Point(this.left,this.top);return this.translateToCenterPoint(t,this.originX,this.originY)},getPointByOrigin:function(t,e){var i=this.getCenterPoint();return this.translateToOriginPoint(i,t,e)},toLocalPoint:function(e,i,r){var n,o,s=this.getCenterPoint();return n=void 0!==i&&void 0!==r?this.translateToGivenOrigin(s,"center","center",i,r):new T.Point(this.left,this.top),o=new T.Point(e.x,e.y),this.angle&&(o=T.util.rotatePoint(o,s,-t(this.angle))),o.subtractEquals(n)},setPositionByOrigin:function(t,e,i){var r=this.translateToCenterPoint(t,e,i),n=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",n.x),this.set("top",n.y)},adjustPosition:function(i){var r,n,o=t(this.angle),s=this.getScaledWidth(),a=T.util.cos(o)*s,h=T.util.sin(o)*s;r="string"==typeof this.originX?e[this.originX]:this.originX-.5,n="string"==typeof i?e[i]:i-.5,this.left+=a*(n-r),this.top+=h*(n-r),this.setCoords(),this.originX=i},_setOriginToCenter:function(){this._originalOriginX=this.originX,this._originalOriginY=this.originY;var t=this.getCenterPoint();this.originX="center",this.originY="center",this.left=t.x,this.top=t.y},_resetOrigin:function(){var t=this.translateToOriginPoint(this.getCenterPoint(),this._originalOriginX,this._originalOriginY);this.originX=this._originalOriginX,this.originY=this._originalOriginY,this.left=t.x,this.top=t.y,this._originalOriginX=null,this._originalOriginY=null},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","top")}})}(),function(){var t=T.util,e=t.degreesToRadians,i=t.multiplyTransformMatrices,r=t.transformPoint;t.object.extend(T.Object.prototype,{oCoords:null,aCoords:null,lineCoords:null,ownMatrixCache:null,matrixCache:null,controls:{},_getCoords:function(t,e){return e?t?this.calcACoords():this.calcLineCoords():(this.aCoords&&this.lineCoords||this.setCoords(!0),t?this.aCoords:this.lineCoords)},getCoords:function(t,e){return i=this._getCoords(t,e),[new T.Point(i.tl.x,i.tl.y),new T.Point(i.tr.x,i.tr.y),new T.Point(i.br.x,i.br.y),new T.Point(i.bl.x,i.bl.y)];var i},intersectsWithRect:function(t,e,i,r){var n=this.getCoords(i,r);return"Intersection"===T.Intersection.intersectPolygonRectangle(n,t,e).status},intersectsWithObject:function(t,e,i){return"Intersection"===T.Intersection.intersectPolygonPolygon(this.getCoords(e,i),t.getCoords(e,i)).status||t.isContainedWithinObject(this,e,i)||this.isContainedWithinObject(t,e,i)},isContainedWithinObject:function(t,e,i){for(var r=this.getCoords(e,i),n=e?t.aCoords:t.lineCoords,o=0,s=t._getImageLines(n);o<4;o++)if(!t.containsPoint(r[o],s))return!1;return!0},isContainedWithinRect:function(t,e,i,r){var n=this.getBoundingRect(i,r);return n.left>=t.x&&n.left+n.width<=e.x&&n.top>=t.y&&n.top+n.height<=e.y},containsPoint:function(t,e,i,r){var n=this._getCoords(i,r),o=(e=e||this._getImageLines(n),this._findCrossPoints(t,e));return 0!==o&&o%2==1},isOnScreen:function(t){if(!this.canvas)return!1;var e=this.canvas.vptCoords.tl,i=this.canvas.vptCoords.br;return!!this.getCoords(!0,t).some((function(t){return t.x<=i.x&&t.x>=e.x&&t.y<=i.y&&t.y>=e.y}))||(!!this.intersectsWithRect(e,i,!0,t)||this._containsCenterOfCanvas(e,i,t))},_containsCenterOfCanvas:function(t,e,i){var r={x:(t.x+e.x)/2,y:(t.y+e.y)/2};return!!this.containsPoint(r,null,!0,i)},isPartiallyOnScreen:function(t){if(!this.canvas)return!1;var e=this.canvas.vptCoords.tl,i=this.canvas.vptCoords.br;return!!this.intersectsWithRect(e,i,!0,t)||this.getCoords(!0,t).every((function(t){return(t.x>=i.x||t.x<=e.x)&&(t.y>=i.y||t.y<=e.y)}))&&this._containsCenterOfCanvas(e,i,t)},_getImageLines:function(t){return{topline:{o:t.tl,d:t.tr},rightline:{o:t.tr,d:t.br},bottomline:{o:t.br,d:t.bl},leftline:{o:t.bl,d:t.tl}}},_findCrossPoints:function(t,e){var i,r,n,o=0;for(var s in e)if(!((n=e[s]).o.y=t.y&&n.d.y>=t.y||(n.o.x===n.d.x&&n.o.x>=t.x?r=n.o.x:(0,i=(n.d.y-n.o.y)/(n.d.x-n.o.x),r=-(t.y-0*t.x-(n.o.y-i*n.o.x))/(0-i)),r>=t.x&&(o+=1),2!==o)))break;return o},getBoundingRect:function(e,i){var r=this.getCoords(e,i);return t.makeBoundingBoxFromPoints(r)},getScaledWidth:function(){return this._getTransformedDimensions().x},getScaledHeight:function(){return this._getTransformedDimensions().y},_constrainScale:function(t){return Math.abs(t)\n')}},toSVG:function(t){return this._createBaseSVGMarkup(this._toSVG(t),{reviver:t})},toClipPathSVG:function(t){return"\t"+this._createBaseClipPathSVGMarkup(this._toSVG(t),{reviver:t})},_createBaseClipPathSVGMarkup:function(t,e){var i=(e=e||{}).reviver,r=e.additionalTransform||"",n=[this.getSvgTransform(!0,r),this.getSvgCommons()].join(""),o=t.indexOf("COMMON_PARTS");return t[o]=n,i?i(t.join("")):t.join("")},_createBaseSVGMarkup:function(t,e){var i,r,n=(e=e||{}).noStyle,o=e.reviver,s=n?"":'style="'+this.getSvgStyles()+'" ',a=e.withShadow?'style="'+this.getSvgFilter()+'" ':"",h=this.clipPath,c=this.strokeUniform?'vector-effect="non-scaling-stroke" ':"",l=h&&h.absolutePositioned,u=this.stroke,f=this.fill,d=this.shadow,g=[],p=t.indexOf("COMMON_PARTS"),v=e.additionalTransform;return h&&(h.clipPathId="CLIPPATH_"+T.Object.__uid++,r='\n'+h.toClipPathSVG(o)+"\n"),l&&g.push("\n"),g.push("\n"),i=[s,c,n?"":this.addPaintOrder()," ",v?'transform="'+v+'" ':""].join(""),t[p]=i,f&&f.toLive&&g.push(f.toSVG(this)),u&&u.toLive&&g.push(u.toSVG(this)),d&&g.push(d.toSVG(this)),h&&g.push(r),g.push(t.join("")),g.push("\n"),l&&g.push("\n"),o?o(g.join("")):g.join("")},addPaintOrder:function(){return"fill"!==this.paintFirst?' paint-order="'+this.paintFirst+'" ':""}})}(),function(){var t=T.util.object.extend,e="stateProperties";function i(e,i,r){var n={};r.forEach((function(t){n[t]=e[t]})),t(e[i],n,!0)}function r(t,e,i){if(t===e)return!0;if(Array.isArray(t)){if(!Array.isArray(e)||t.length!==e.length)return!1;for(var n=0,o=t.length;n=0;h--)if(n=a[h],this.isControlVisible(n)&&(r=this._getImageLines(e?this.oCoords[n].touchCorner:this.oCoords[n].corner),0!==(i=this._findCrossPoints({x:o,y:s},r))&&i%2==1))return this.__corner=n,n;return!1},forEachControl:function(t){for(var e in this.controls)t(this.controls[e],e,this)},_setCornerCoords:function(){var t=this.oCoords;for(var e in t){var i=this.controls[e];t[e].corner=i.calcCornerCoords(this.angle,this.cornerSize,t[e].x,t[e].y,!1),t[e].touchCorner=i.calcCornerCoords(this.angle,this.touchCornerSize,t[e].x,t[e].y,!0)}},drawSelectionBackground:function(e){if(!this.selectionBackgroundColor||this.canvas&&!this.canvas.interactive||this.canvas&&this.canvas._activeObject!==this)return this;e.save();var i=this.getCenterPoint(),r=this._calculateCurrentDimensions(),n=this.canvas.viewportTransform;return e.translate(i.x,i.y),e.scale(1/n[0],1/n[3]),e.rotate(t(this.angle)),e.fillStyle=this.selectionBackgroundColor,e.fillRect(-r.x/2,-r.y/2,r.x,r.y),e.restore(),this},drawBorders:function(t,e){e=e||{};var i=this._calculateCurrentDimensions(),r=this.borderScaleFactor,n=i.x+r,o=i.y+r,s=void 0!==e.hasControls?e.hasControls:this.hasControls,a=!1;return t.save(),t.strokeStyle=e.borderColor||this.borderColor,this._setLineDash(t,e.borderDashArray||this.borderDashArray),t.strokeRect(-n/2,-o/2,n,o),s&&(t.beginPath(),this.forEachControl((function(e,i,r){e.withConnection&&e.getVisibility(r,i)&&(a=!0,t.moveTo(e.x*n,e.y*o),t.lineTo(e.x*n+e.offsetX,e.y*o+e.offsetY))})),a&&t.stroke()),t.restore(),this},drawBordersInGroup:function(t,e,i){i=i||{};var r=T.util.sizeAfterTransform(this.width,this.height,e),n=this.strokeWidth,o=this.strokeUniform,s=this.borderScaleFactor,a=r.x+n*(o?this.canvas.getZoom():e.scaleX)+s,h=r.y+n*(o?this.canvas.getZoom():e.scaleY)+s;return t.save(),this._setLineDash(t,i.borderDashArray||this.borderDashArray),t.strokeStyle=i.borderColor||this.borderColor,t.strokeRect(-a/2,-h/2,a,h),t.restore(),this},drawControls:function(t,e){e=e||{},t.save();var i,r,n=this.canvas.getRetinaScaling();return t.setTransform(n,0,0,n,0,0),t.strokeStyle=t.fillStyle=e.cornerColor||this.cornerColor,this.transparentCorners||(t.strokeStyle=e.cornerStrokeColor||this.cornerStrokeColor),this._setLineDash(t,e.cornerDashArray||this.cornerDashArray),this.setCoords(),this.group&&(i=this.group.calcTransformMatrix()),this.forEachControl((function(n,o,s){r=s.oCoords[o],n.getVisibility(s,o)&&(i&&(r=T.util.transformPoint(r,i)),n.render(t,r.x,r.y,e,s))})),t.restore(),this},isControlVisible:function(t){return this.controls[t]&&this.controls[t].getVisibility(this,t)},setControlVisible:function(t,e){return this._controlsVisibility||(this._controlsVisibility={}),this._controlsVisibility[t]=e,this},setControlsVisibility:function(t){for(var e in t||(t={}),t)this.setControlVisible(e,t[e]);return this},onDeselect:function(){},onSelect:function(){}})}(),T.util.object.extend(T.StaticCanvas.prototype,{FX_DURATION:500,fxCenterObjectH:function(t,e){var i=function(){},r=(e=e||{}).onComplete||i,n=e.onChange||i,o=this;return T.util.animate({startValue:t.left,endValue:this.getCenter().left,duration:this.FX_DURATION,onChange:function(e){t.set("left",e),o.requestRenderAll(),n()},onComplete:function(){t.setCoords(),r()}}),this},fxCenterObjectV:function(t,e){var i=function(){},r=(e=e||{}).onComplete||i,n=e.onChange||i,o=this;return T.util.animate({startValue:t.top,endValue:this.getCenter().top,duration:this.FX_DURATION,onChange:function(e){t.set("top",e),o.requestRenderAll(),n()},onComplete:function(){t.setCoords(),r()}}),this},fxRemove:function(t,e){var i=function(){},r=(e=e||{}).onComplete||i,n=e.onChange||i,o=this;return T.util.animate({startValue:t.opacity,endValue:0,duration:this.FX_DURATION,onChange:function(e){t.set("opacity",e),o.requestRenderAll(),n()},onComplete:function(){o.remove(t),r()}}),this}}),T.util.object.extend(T.Object.prototype,{animate:function(){if(arguments[0]&&"object"==typeof arguments[0]){var t,e,i=[];for(t in arguments[0])i.push(t);for(var r=0,n=i.length;r-1||n&&o.colorProperties.indexOf(n[1])>-1,a=n?this.get(n[0])[n[1]]:this.get(t);"from"in i||(i.from=a),s||(e=~e.indexOf("=")?a+parseFloat(e.replace("=","")):parseFloat(e));var h={startValue:i.from,endValue:e,byValue:i.by,easing:i.easing,duration:i.duration,abort:i.abort&&function(t,e,r){return i.abort.call(o,t,e,r)},onChange:function(e,s,a){n?o[n[0]][n[1]]=e:o.set(t,e),r||i.onChange&&i.onChange(e,s,a)},onComplete:function(t,e,n){r||(o.setCoords(),i.onComplete&&i.onComplete(t,e,n))}};return s?T.util.animateColor(h.startValue,h.endValue,h.duration,h):T.util.animate(h)}}),function(t){var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.util.object.clone,n={x1:1,x2:1,y1:1,y2:1};function o(t,e){var i=t.origin,r=t.axis1,n=t.axis2,o=t.dimension,s=e.nearest,a=e.center,h=e.farthest;return function(){switch(this.get(i)){case s:return Math.min(this.get(r),this.get(n));case a:return Math.min(this.get(r),this.get(n))+.5*this.get(o);case h:return Math.max(this.get(r),this.get(n))}}}e.Line?e.warn("fabric.Line is already defined"):(e.Line=e.util.createClass(e.Object,{type:"line",x1:0,y1:0,x2:0,y2:0,cacheProperties:e.Object.prototype.cacheProperties.concat("x1","x2","y1","y2"),initialize:function(t,e){t||(t=[0,0,0,0]),this.callSuper("initialize",e),this.set("x1",t[0]),this.set("y1",t[1]),this.set("x2",t[2]),this.set("y2",t[3]),this._setWidthHeight(e)},_setWidthHeight:function(t){t||(t={}),this.width=Math.abs(this.x2-this.x1),this.height=Math.abs(this.y2-this.y1),this.left="left"in t?t.left:this._getLeftToOriginX(),this.top="top"in t?t.top:this._getTopToOriginY()},_set:function(t,e){return this.callSuper("_set",t,e),void 0!==n[t]&&this._setWidthHeight(),this},_getLeftToOriginX:o({origin:"originX",axis1:"x1",axis2:"x2",dimension:"width"},{nearest:"left",center:"center",farthest:"right"}),_getTopToOriginY:o({origin:"originY",axis1:"y1",axis2:"y2",dimension:"height"},{nearest:"top",center:"center",farthest:"bottom"}),_render:function(t){t.beginPath();var e=this.calcLinePoints();t.moveTo(e.x1,e.y1),t.lineTo(e.x2,e.y2),t.lineWidth=this.strokeWidth;var i=t.strokeStyle;t.strokeStyle=this.stroke||t.fillStyle,this.stroke&&this._renderStroke(t),t.strokeStyle=i},_findCenterFromElement:function(){return{x:(this.x1+this.x2)/2,y:(this.y1+this.y2)/2}},toObject:function(t){return i(this.callSuper("toObject",t),this.calcLinePoints())},_getNonTransformedDimensions:function(){var t=this.callSuper("_getNonTransformedDimensions");return"butt"===this.strokeLineCap&&(0===this.width&&(t.y-=this.strokeWidth),0===this.height&&(t.x-=this.strokeWidth)),t},calcLinePoints:function(){var t=this.x1<=this.x2?-1:1,e=this.y1<=this.y2?-1:1,i=t*this.width*.5,r=e*this.height*.5;return{x1:i,x2:t*this.width*-.5,y1:r,y2:e*this.height*-.5}},_toSVG:function(){var t=this.calcLinePoints();return["\n']}}),e.Line.ATTRIBUTE_NAMES=e.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),e.Line.fromElement=function(t,r,n){n=n||{};var o=e.parseAttributes(t,e.Line.ATTRIBUTE_NAMES),s=[o.x1||0,o.y1||0,o.x2||0,o.y2||0];r(new e.Line(s,i(o,n)))},e.Line.fromObject=function(t,i){var n=r(t,!0);n.points=[t.x1,t.y1,t.x2,t.y2],e.Object._fromObject("Line",n,(function(t){delete t.points,i&&i(t)}),"points")})}(t),function(t){var e=t.fabric||(t.fabric={}),i=Math.PI;e.Circle?e.warn("fabric.Circle is already defined."):(e.Circle=e.util.createClass(e.Object,{type:"circle",radius:0,startAngle:0,endAngle:2*i,cacheProperties:e.Object.prototype.cacheProperties.concat("radius","startAngle","endAngle"),_set:function(t,e){return this.callSuper("_set",t,e),"radius"===t&&this.setRadius(e),this},toObject:function(t){return this.callSuper("toObject",["radius","startAngle","endAngle"].concat(t))},_toSVG:function(){var t,r=(this.endAngle-this.startAngle)%(2*i);if(0===r)t=["\n'];else{var n=e.util.cos(this.startAngle)*this.radius,o=e.util.sin(this.startAngle)*this.radius,s=e.util.cos(this.endAngle)*this.radius,a=e.util.sin(this.endAngle)*this.radius,h=r>i?"1":"0";t=['\n"]}return t},_render:function(t){t.beginPath(),t.arc(0,0,this.radius,this.startAngle,this.endAngle,!1),this._renderPaintInOrder(t)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(t){return this.radius=t,this.set("width",2*t).set("height",2*t)}}),e.Circle.ATTRIBUTE_NAMES=e.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),e.Circle.fromElement=function(t,i){var r,n=e.parseAttributes(t,e.Circle.ATTRIBUTE_NAMES);if(!("radius"in(r=n)&&r.radius>=0))throw new Error("value of `r` attribute is required and can not be negative");n.left=(n.left||0)-n.radius,n.top=(n.top||0)-n.radius,i(new e.Circle(n))},e.Circle.fromObject=function(t,i){e.Object._fromObject("Circle",t,i)})}(t),function(t){var e=t.fabric||(t.fabric={});e.Triangle?e.warn("fabric.Triangle is already defined"):(e.Triangle=e.util.createClass(e.Object,{type:"triangle",width:100,height:100,_render:function(t){var e=this.width/2,i=this.height/2;t.beginPath(),t.moveTo(-e,i),t.lineTo(0,-i),t.lineTo(e,i),t.closePath(),this._renderPaintInOrder(t)},_toSVG:function(){var t=this.width/2,e=this.height/2;return["']}}),e.Triangle.fromObject=function(t,i){return e.Object._fromObject("Triangle",t,i)})}(t),function(t){var e=t.fabric||(t.fabric={}),i=2*Math.PI;e.Ellipse?e.warn("fabric.Ellipse is already defined."):(e.Ellipse=e.util.createClass(e.Object,{type:"ellipse",rx:0,ry:0,cacheProperties:e.Object.prototype.cacheProperties.concat("rx","ry"),initialize:function(t){this.callSuper("initialize",t),this.set("rx",t&&t.rx||0),this.set("ry",t&&t.ry||0)},_set:function(t,e){switch(this.callSuper("_set",t,e),t){case"rx":this.rx=e,this.set("width",2*e);break;case"ry":this.ry=e,this.set("height",2*e)}return this},getRx:function(){return this.get("rx")*this.get("scaleX")},getRy:function(){return this.get("ry")*this.get("scaleY")},toObject:function(t){return this.callSuper("toObject",["rx","ry"].concat(t))},_toSVG:function(){return["\n']},_render:function(t){t.beginPath(),t.save(),t.transform(1,0,0,this.ry/this.rx,0,0),t.arc(0,0,this.rx,0,i,!1),t.restore(),this._renderPaintInOrder(t)}}),e.Ellipse.ATTRIBUTE_NAMES=e.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),e.Ellipse.fromElement=function(t,i){var r=e.parseAttributes(t,e.Ellipse.ATTRIBUTE_NAMES);r.left=(r.left||0)-r.rx,r.top=(r.top||0)-r.ry,i(new e.Ellipse(r))},e.Ellipse.fromObject=function(t,i){e.Object._fromObject("Ellipse",t,i)})}(t),function(t){var e=t.fabric||(t.fabric={}),i=e.util.object.extend;e.Rect?e.warn("fabric.Rect is already defined"):(e.Rect=e.util.createClass(e.Object,{stateProperties:e.Object.prototype.stateProperties.concat("rx","ry"),type:"rect",rx:0,ry:0,cacheProperties:e.Object.prototype.cacheProperties.concat("rx","ry"),initialize:function(t){this.callSuper("initialize",t),this._initRxRy()},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(t){var e=this.rx?Math.min(this.rx,this.width/2):0,i=this.ry?Math.min(this.ry,this.height/2):0,r=this.width,n=this.height,o=-this.width/2,s=-this.height/2,a=0!==e||0!==i,h=.4477152502;t.beginPath(),t.moveTo(o+e,s),t.lineTo(o+r-e,s),a&&t.bezierCurveTo(o+r-h*e,s,o+r,s+h*i,o+r,s+i),t.lineTo(o+r,s+n-i),a&&t.bezierCurveTo(o+r,s+n-h*i,o+r-h*e,s+n,o+r-e,s+n),t.lineTo(o+e,s+n),a&&t.bezierCurveTo(o+h*e,s+n,o,s+n-h*i,o,s+n-i),t.lineTo(o,s+i),a&&t.bezierCurveTo(o,s+h*i,o+h*e,s,o+e,s),t.closePath(),this._renderPaintInOrder(t)},toObject:function(t){return this.callSuper("toObject",["rx","ry"].concat(t))},_toSVG:function(){return["\n']}}),e.Rect.ATTRIBUTE_NAMES=e.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),e.Rect.fromElement=function(t,r,n){if(!t)return r(null);n=n||{};var o=e.parseAttributes(t,e.Rect.ATTRIBUTE_NAMES);o.left=o.left||0,o.top=o.top||0,o.height=o.height||0,o.width=o.width||0;var s=new e.Rect(i(n?e.util.object.clone(n):{},o));s.visible=s.visible&&s.width>0&&s.height>0,r(s)},e.Rect.fromObject=function(t,i){return e.Object._fromObject("Rect",t,i)})}(t),function(t){var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.util.array.min,n=e.util.array.max,o=e.util.toFixed;e.Polyline?e.warn("fabric.Polyline is already defined"):(e.Polyline=e.util.createClass(e.Object,{type:"polyline",points:null,cacheProperties:e.Object.prototype.cacheProperties.concat("points"),initialize:function(t,e){e=e||{},this.points=t||[],this.callSuper("initialize",e),this._setPositionDimensions(e)},_setPositionDimensions:function(t){var e,i=this._calcDimensions(t);this.width=i.width,this.height=i.height,t.fromSVG||(e=this.translateToGivenOrigin({x:i.left-this.strokeWidth/2,y:i.top-this.strokeWidth/2},"left","top",this.originX,this.originY)),void 0===t.left&&(this.left=t.fromSVG?i.left:e.x),void 0===t.top&&(this.top=t.fromSVG?i.top:e.y),this.pathOffset={x:i.left+this.width/2,y:i.top+this.height/2}},_calcDimensions:function(){var t=this.points,e=r(t,"x")||0,i=r(t,"y")||0;return{left:e,top:i,width:(n(t,"x")||0)-e,height:(n(t,"y")||0)-i}},toObject:function(t){return i(this.callSuper("toObject",t),{points:this.points.concat()})},_toSVG:function(){for(var t=[],i=this.pathOffset.x,r=this.pathOffset.y,n=e.Object.NUM_FRACTION_DIGITS,s=0,a=this.points.length;s\n']},commonRender:function(t){var e,i=this.points.length,r=this.pathOffset.x,n=this.pathOffset.y;if(!i||isNaN(this.points[i-1].y))return!1;t.beginPath(),t.moveTo(this.points[0].x-r,this.points[0].y-n);for(var o=0;o"},toObject:function(t){return n(this.callSuper("toObject",t),{path:this.path.map((function(t){return t.slice()}))})},toDatalessObject:function(t){var e=this.toObject(["sourcePath"].concat(t));return e.sourcePath&&delete e.path,e},_toSVG:function(){return["\n"]},_getOffsetTransform:function(){var t=e.Object.NUM_FRACTION_DIGITS;return" translate("+s(-this.pathOffset.x,t)+", "+s(-this.pathOffset.y,t)+")"},toClipPathSVG:function(t){var e=this._getOffsetTransform();return"\t"+this._createBaseClipPathSVGMarkup(this._toSVG(),{reviver:t,additionalTransform:e})},toSVG:function(t){var e=this._getOffsetTransform();return this._createBaseSVGMarkup(this._toSVG(),{reviver:t,additionalTransform:e})},complexity:function(){return this.path.length},_calcDimensions:function(){for(var t,n,o=[],s=[],a=0,h=0,c=0,l=0,u=0,f=this.path.length;u"},addWithUpdate:function(t){var i=!!this.group;return this._restoreObjectsState(),e.util.resetObjectTransform(this),t&&(i&&e.util.removeTransformFromObject(t,this.group.calcTransformMatrix()),this._objects.push(t),t.group=this,t._set("canvas",this.canvas)),this._calcBounds(),this._updateObjectsCoords(),this.dirty=!0,i?this.group.addWithUpdate():this.setCoords(),this},removeWithUpdate:function(t){return this._restoreObjectsState(),e.util.resetObjectTransform(this),this.remove(t),this._calcBounds(),this._updateObjectsCoords(),this.setCoords(),this.dirty=!0,this},_onObjectAdded:function(t){this.dirty=!0,t.group=this,t._set("canvas",this.canvas)},_onObjectRemoved:function(t){this.dirty=!0,delete t.group},_set:function(t,i){var r=this._objects.length;if(this.useSetOnGroup)for(;r--;)this._objects[r].setOnGroup(t,i);if("canvas"===t)for(;r--;)this._objects[r]._set(t,i);e.Object.prototype._set.call(this,t,i)},toObject:function(t){var i=this.includeDefaultValues,r=this._objects.filter((function(t){return!t.excludeFromExport})).map((function(e){var r=e.includeDefaultValues;e.includeDefaultValues=i;var n=e.toObject(t);return e.includeDefaultValues=r,n})),n=e.Object.prototype.toObject.call(this,t);return n.objects=r,n},toDatalessObject:function(t){var i,r=this.sourcePath;if(r)i=r;else{var n=this.includeDefaultValues;i=this._objects.map((function(e){var i=e.includeDefaultValues;e.includeDefaultValues=n;var r=e.toDatalessObject(t);return e.includeDefaultValues=i,r}))}var o=e.Object.prototype.toDatalessObject.call(this,t);return o.objects=i,o},render:function(t){this._transformDone=!0,this.callSuper("render",t),this._transformDone=!1},shouldCache:function(){var t=e.Object.prototype.shouldCache.call(this);if(t)for(var i=0,r=this._objects.length;i\n"],i=0,r=this._objects.length;i\n"),e},getSvgStyles:function(){var t=void 0!==this.opacity&&1!==this.opacity?"opacity: "+this.opacity+";":"",e=this.visible?"":" visibility: hidden;";return[t,this.getSvgFilter(),e].join("")},toClipPathSVG:function(t){for(var e=[],i=0,r=this._objects.length;i"},shouldCache:function(){return!1},isOnACache:function(){return!1},_renderControls:function(t,e,i){t.save(),t.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,this.callSuper("_renderControls",t,e),void 0===(i=i||{}).hasControls&&(i.hasControls=!1),i.forActiveSelection=!0;for(var r=0,n=this._objects.length;r\n','\t\n',"\n"),s=' clip-path="url(#imageCrop_'+h+')" '}if(this.imageSmoothing||(a='" image-rendering="optimizeSpeed'),i.push("\t\n"),this.stroke||this.strokeDashArray){var c=this.fill;this.fill=null,t=["\t\n'],this.fill=c}return e="fill"!==this.paintFirst?e.concat(t,i):e.concat(i,t)},getSrc:function(t){var e=t?this._element:this._originalElement;return e?e.toDataURL?e.toDataURL():this.srcFromAttribute?e.getAttribute("src"):e.src:this.src||""},setSrc:function(t,e,i){return T.util.loadImage(t,(function(t,r){this.setElement(t,i),this._setWidthHeight(),e&&e(this,r)}),this,i&&i.crossOrigin),this},toString:function(){return'#'},applyResizeFilters:function(){var t=this.resizeFilter,e=this.minimumScaleTrigger,i=this.getTotalObjectScaling(),r=i.scaleX,n=i.scaleY,o=this._filteredEl||this._originalElement;if(this.group&&this.set("dirty",!0),!t||r>e&&n>e)return this._element=o,this._filterScalingX=1,this._filterScalingY=1,this._lastScaleX=r,void(this._lastScaleY=n);T.filterBackend||(T.filterBackend=T.initFilterBackend());var s=T.util.createCanvasElement(),a=this._filteredEl?this.cacheKey+"_filtered":this.cacheKey,h=o.width,c=o.height;s.width=h,s.height=c,this._element=s,this._lastScaleX=t.scaleX=r,this._lastScaleY=t.scaleY=n,T.filterBackend.applyFilters([t],o,h,c,this._element,a),this._filterScalingX=s.width/this._originalElement.width,this._filterScalingY=s.height/this._originalElement.height},applyFilters:function(t){if(t=(t=t||this.filters||[]).filter((function(t){return t&&!t.isNeutralState()})),this.set("dirty",!0),this.removeTexture(this.cacheKey+"_filtered"),0===t.length)return this._element=this._originalElement,this._filteredEl=null,this._filterScalingX=1,this._filterScalingY=1,this;var e=this._originalElement,i=e.naturalWidth||e.width,r=e.naturalHeight||e.height;if(this._element===this._originalElement){var n=T.util.createCanvasElement();n.width=i,n.height=r,this._element=n,this._filteredEl=n}else this._element=this._filteredEl,this._filteredEl.getContext("2d").clearRect(0,0,i,r),this._lastScaleX=1,this._lastScaleY=1;return T.filterBackend||(T.filterBackend=T.initFilterBackend()),T.filterBackend.applyFilters(t,this._originalElement,i,r,this._element,this.cacheKey),this._originalElement.width===this._element.width&&this._originalElement.height===this._element.height||(this._filterScalingX=this._element.width/this._originalElement.width,this._filterScalingY=this._element.height/this._originalElement.height),this},_render:function(t){T.util.setImageSmoothing(t,this.imageSmoothing),!0!==this.isMoving&&this.resizeFilter&&this._needsResize()&&this.applyResizeFilters(),this._stroke(t),this._renderPaintInOrder(t)},drawCacheOnCanvas:function(t){T.util.setImageSmoothing(t,this.imageSmoothing),T.Object.prototype.drawCacheOnCanvas.call(this,t)},shouldCache:function(){return this.needsItsOwnCache()},_renderFill:function(t){var e=this._element;if(e){var i=this._filterScalingX,r=this._filterScalingY,n=this.width,o=this.height,s=Math.min,a=Math.max,h=a(this.cropX,0),c=a(this.cropY,0),l=e.naturalWidth||e.width,u=e.naturalHeight||e.height,f=h*i,d=c*r,g=s(n*i,l-f),p=s(o*r,u-d),v=-n/2,m=-o/2,y=s(n,l/i-h),_=s(o,u/r-c);e&&t.drawImage(e,f,d,g,p,v,m,y,_)}},_needsResize:function(){var t=this.getTotalObjectScaling();return t.scaleX!==this._lastScaleX||t.scaleY!==this._lastScaleY},_resetWidthHeight:function(){this.set(this.getOriginalSize())},_initElement:function(t,e){this.setElement(T.util.getById(t),e),T.util.addClass(this.getElement(),T.Image.CSS_CANVAS)},_initConfig:function(t){t||(t={}),this.setOptions(t),this._setWidthHeight(t)},_initFilters:function(t,e){t&&t.length?T.util.enlivenObjects(t,(function(t){e&&e(t)}),"fabric.Image.filters"):e&&e()},_setWidthHeight:function(t){t||(t={});var e=this.getElement();this.width=t.width||e.naturalWidth||e.width||0,this.height=t.height||e.naturalHeight||e.height||0},parsePreserveAspectRatioAttribute:function(){var t,e=T.util.parsePreserveAspectRatioAttribute(this.preserveAspectRatio||""),i=this._element.width,r=this._element.height,n=1,o=1,s=0,a=0,h=0,c=0,l=this.width,u=this.height,f={width:l,height:u};return!e||"none"===e.alignX&&"none"===e.alignY?(n=l/i,o=u/r):("meet"===e.meetOrSlice&&(t=(l-i*(n=o=T.util.findScaleToFit(this._element,f)))/2,"Min"===e.alignX&&(s=-t),"Max"===e.alignX&&(s=t),t=(u-r*o)/2,"Min"===e.alignY&&(a=-t),"Max"===e.alignY&&(a=t)),"slice"===e.meetOrSlice&&(t=i-l/(n=o=T.util.findScaleToCover(this._element,f)),"Mid"===e.alignX&&(h=t/2),"Max"===e.alignX&&(h=t),t=r-u/o,"Mid"===e.alignY&&(c=t/2),"Max"===e.alignY&&(c=t),i=l/n,r=u/o)),{width:i,height:r,scaleX:n,scaleY:o,offsetLeft:s,offsetTop:a,cropX:h,cropY:c}}}),T.Image.CSS_CANVAS="canvas-img",T.Image.prototype.getSvgSrc=T.Image.prototype.getSrc,T.Image.fromObject=function(t,e){var i=T.util.object.clone(t);T.util.loadImage(i.src,(function(t,r){r?e&&e(null,!0):T.Image.prototype._initFilters.call(i,i.filters,(function(r){i.filters=r||[],T.Image.prototype._initFilters.call(i,[i.resizeFilter],(function(r){i.resizeFilter=r[0],T.util.enlivenObjects([i.clipPath],(function(r){i.clipPath=r[0];var n=new T.Image(t,i);e(n,!1)}))}))}))}),null,i.crossOrigin)},T.Image.fromURL=function(t,e,i){T.util.loadImage(t,(function(t,r){e&&e(new T.Image(t,i),r)}),null,i&&i.crossOrigin)},T.Image.ATTRIBUTE_NAMES=T.SHARED_ATTRIBUTES.concat("x y width height preserveAspectRatio xlink:href crossOrigin image-rendering".split(" ")),T.Image.fromElement=function(t,i,r){var n=T.parseAttributes(t,T.Image.ATTRIBUTE_NAMES);T.Image.fromURL(n["xlink:href"],i,e(r?T.util.object.clone(r):{},n))})}(t),T.util.object.extend(T.Object.prototype,{_getAngleValueForStraighten:function(){var t=this.angle%360;return t>0?90*Math.round((t-1)/90):90*Math.round(t/90)},straighten:function(){return this.rotate(this._getAngleValueForStraighten()),this},fxStraighten:function(t){var e=function(){},i=(t=t||{}).onComplete||e,r=t.onChange||e,n=this;return T.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(t){n.rotate(t),r()},onComplete:function(){n.setCoords(),i()}}),this}}),T.util.object.extend(T.StaticCanvas.prototype,{straightenObject:function(t){return t.straighten(),this.requestRenderAll(),this},fxStraightenObject:function(t){return t.fxStraighten({onChange:this.requestRenderAllBound}),this}}),function(){function t(t,e){var i="precision "+e+" float;\nvoid main(){}",r=t.createShader(t.FRAGMENT_SHADER);return t.shaderSource(r,i),t.compileShader(r),!!t.getShaderParameter(r,t.COMPILE_STATUS)}function e(t){t&&t.tileSize&&(this.tileSize=t.tileSize),this.setupGLContext(this.tileSize,this.tileSize),this.captureGPUInfo()}T.isWebglSupported=function(e){if(T.isLikelyNode)return!1;e=e||T.WebglFilterBackend.prototype.tileSize;var i=document.createElement("canvas"),r=i.getContext("webgl")||i.getContext("experimental-webgl"),n=!1;if(r){T.maxTextureSize=r.getParameter(r.MAX_TEXTURE_SIZE),n=T.maxTextureSize>=e;for(var o=["highp","mediump","lowp"],s=0;s<3;s++)if(t(r,o[s])){T.webGlPrecision=o[s];break}}return this.isSupported=n,n},T.WebglFilterBackend=e,e.prototype={tileSize:2048,resources:{},setupGLContext:function(t,e){this.dispose(),this.createWebGLCanvas(t,e),this.aPosition=new Float32Array([0,0,0,1,1,0,1,1]),this.chooseFastestCopyGLTo2DMethod(t,e)},chooseFastestCopyGLTo2DMethod:function(t,e){var i,r=void 0!==window.performance;try{new ImageData(1,1),i=!0}catch(t){i=!1}var n="undefined"!=typeof ArrayBuffer,o="undefined"!=typeof Uint8ClampedArray;if(r&&i&&n&&o){var s=T.util.createCanvasElement(),a=new ArrayBuffer(t*e*4);if(T.forceGLPutImageData)return this.imageBuffer=a,void(this.copyGLTo2D=A);var h,c,l={imageBuffer:a,destinationWidth:t,destinationHeight:e,targetCanvas:s};s.width=t,s.height=e,h=window.performance.now(),k.call(l,this.gl,l),c=window.performance.now()-h,h=window.performance.now(),A.call(l,this.gl,l),c>window.performance.now()-h?(this.imageBuffer=a,this.copyGLTo2D=A):this.copyGLTo2D=k}},createWebGLCanvas:function(t,e){var i=T.util.createCanvasElement();i.width=t,i.height=e;var r={alpha:!0,premultipliedAlpha:!1,depth:!1,stencil:!1,antialias:!1},n=i.getContext("webgl",r);n||(n=i.getContext("experimental-webgl",r)),n&&(n.clearColor(0,0,0,0),this.canvas=i,this.gl=n)},applyFilters:function(t,e,i,r,n,o){var s,a=this.gl;o&&(s=this.getCachedTexture(o,e));var h={originalWidth:e.width||e.originalWidth,originalHeight:e.height||e.originalHeight,sourceWidth:i,sourceHeight:r,destinationWidth:i,destinationHeight:r,context:a,sourceTexture:this.createTexture(a,i,r,!s&&e),targetTexture:this.createTexture(a,i,r),originalTexture:s||this.createTexture(a,i,r,!s&&e),passes:t.length,webgl:!0,aPosition:this.aPosition,programCache:this.programCache,pass:0,filterBackend:this,targetCanvas:n},c=a.createFramebuffer();return a.bindFramebuffer(a.FRAMEBUFFER,c),t.forEach((function(t){t&&t.applyTo(h)})),function(t){var e=t.targetCanvas,i=e.width,r=e.height,n=t.destinationWidth,o=t.destinationHeight;i===n&&r===o||(e.width=n,e.height=o)}(h),this.copyGLTo2D(a,h),a.bindTexture(a.TEXTURE_2D,null),a.deleteTexture(h.sourceTexture),a.deleteTexture(h.targetTexture),a.deleteFramebuffer(c),n.getContext("2d").setTransform(1,0,0,1,0,0),h},dispose:function(){this.canvas&&(this.canvas=null,this.gl=null),this.clearWebGLCaches()},clearWebGLCaches:function(){this.programCache={},this.textureCache={}},createTexture:function(t,e,i,r){var n=t.createTexture();return t.bindTexture(t.TEXTURE_2D,n),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MAG_FILTER,t.NEAREST),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MIN_FILTER,t.NEAREST),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.CLAMP_TO_EDGE),r?t.texImage2D(t.TEXTURE_2D,0,t.RGBA,t.RGBA,t.UNSIGNED_BYTE,r):t.texImage2D(t.TEXTURE_2D,0,t.RGBA,e,i,0,t.RGBA,t.UNSIGNED_BYTE,null),n},getCachedTexture:function(t,e){if(this.textureCache[t])return this.textureCache[t];var i=this.createTexture(this.gl,e.width,e.height,e);return this.textureCache[t]=i,i},evictCachesForKey:function(t){this.textureCache[t]&&(this.gl.deleteTexture(this.textureCache[t]),delete this.textureCache[t])},copyGLTo2D:k,captureGPUInfo:function(){if(this.gpuInfo)return this.gpuInfo;var t=this.gl,e={renderer:"",vendor:""};if(!t)return e;var i=t.getExtension("WEBGL_debug_renderer_info");if(i){var r=t.getParameter(i.UNMASKED_RENDERER_WEBGL),n=t.getParameter(i.UNMASKED_VENDOR_WEBGL);r&&(e.renderer=r.toLowerCase()),n&&(e.vendor=n.toLowerCase())}return this.gpuInfo=e,e}}}(),function(){var t=function(){};function e(){}T.Canvas2dFilterBackend=e,e.prototype={evictCachesForKey:t,dispose:t,clearWebGLCaches:t,resources:{},applyFilters:function(t,e,i,r,n){var o=n.getContext("2d");o.drawImage(e,0,0,i,r);var s={sourceWidth:i,sourceHeight:r,imageData:o.getImageData(0,0,i,r),originalEl:e,originalImageData:o.getImageData(0,0,i,r),canvasEl:n,ctx:o,filterBackend:this};return t.forEach((function(t){t.applyTo(s)})),s.imageData.width===i&&s.imageData.height===r||(n.width=s.imageData.width,n.height=s.imageData.height),o.putImageData(s.imageData,0,0),s}}}(),T.Image=T.Image||{},T.Image.filters=T.Image.filters||{},T.Image.filters.BaseFilter=T.util.createClass({type:"BaseFilter",vertexSource:"attribute vec2 aPosition;\nvarying vec2 vTexCoord;\nvoid main() {\nvTexCoord = aPosition;\ngl_Position = vec4(aPosition * 2.0 - 1.0, 0.0, 1.0);\n}",fragmentSource:"precision highp float;\nvarying vec2 vTexCoord;\nuniform sampler2D uTexture;\nvoid main() {\ngl_FragColor = texture2D(uTexture, vTexCoord);\n}",initialize:function(t){t&&this.setOptions(t)},setOptions:function(t){for(var e in t)this[e]=t[e]},createProgram:function(t,e,i){e=e||this.fragmentSource,i=i||this.vertexSource,"highp"!==T.webGlPrecision&&(e=e.replace(/precision highp float/g,"precision "+T.webGlPrecision+" float"));var r=t.createShader(t.VERTEX_SHADER);if(t.shaderSource(r,i),t.compileShader(r),!t.getShaderParameter(r,t.COMPILE_STATUS))throw new Error("Vertex shader compile error for "+this.type+": "+t.getShaderInfoLog(r));var n=t.createShader(t.FRAGMENT_SHADER);if(t.shaderSource(n,e),t.compileShader(n),!t.getShaderParameter(n,t.COMPILE_STATUS))throw new Error("Fragment shader compile error for "+this.type+": "+t.getShaderInfoLog(n));var o=t.createProgram();if(t.attachShader(o,r),t.attachShader(o,n),t.linkProgram(o),!t.getProgramParameter(o,t.LINK_STATUS))throw new Error('Shader link error for "${this.type}" '+t.getProgramInfoLog(o));var s=this.getAttributeLocations(t,o),a=this.getUniformLocations(t,o)||{};return a.uStepW=t.getUniformLocation(o,"uStepW"),a.uStepH=t.getUniformLocation(o,"uStepH"),{program:o,attributeLocations:s,uniformLocations:a}},getAttributeLocations:function(t,e){return{aPosition:t.getAttribLocation(e,"aPosition")}},getUniformLocations:function(){return{}},sendAttributeData:function(t,e,i){var r=e.aPosition,n=t.createBuffer();t.bindBuffer(t.ARRAY_BUFFER,n),t.enableVertexAttribArray(r),t.vertexAttribPointer(r,2,t.FLOAT,!1,0,0),t.bufferData(t.ARRAY_BUFFER,i,t.STATIC_DRAW)},_setupFrameBuffer:function(t){var e,i,r=t.context;t.passes>1?(e=t.destinationWidth,i=t.destinationHeight,t.sourceWidth===e&&t.sourceHeight===i||(r.deleteTexture(t.targetTexture),t.targetTexture=t.filterBackend.createTexture(r,e,i)),r.framebufferTexture2D(r.FRAMEBUFFER,r.COLOR_ATTACHMENT0,r.TEXTURE_2D,t.targetTexture,0)):(r.bindFramebuffer(r.FRAMEBUFFER,null),r.finish())},_swapTextures:function(t){t.passes--,t.pass++;var e=t.targetTexture;t.targetTexture=t.sourceTexture,t.sourceTexture=e},isNeutralState:function(){var t=this.mainParameter,e=T.Image.filters[this.type].prototype;if(t){if(Array.isArray(e[t])){for(var i=e[t].length;i--;)if(this[t][i]!==e[t][i])return!1;return!0}return e[t]===this[t]}return!1},applyTo:function(t){t.webgl?(this._setupFrameBuffer(t),this.applyToWebGL(t),this._swapTextures(t)):this.applyTo2d(t)},retrieveShader:function(t){return t.programCache.hasOwnProperty(this.type)||(t.programCache[this.type]=this.createProgram(t.context)),t.programCache[this.type]},applyToWebGL:function(t){var e=t.context,i=this.retrieveShader(t);0===t.pass&&t.originalTexture?e.bindTexture(e.TEXTURE_2D,t.originalTexture):e.bindTexture(e.TEXTURE_2D,t.sourceTexture),e.useProgram(i.program),this.sendAttributeData(e,i.attributeLocations,t.aPosition),e.uniform1f(i.uniformLocations.uStepW,1/t.sourceWidth),e.uniform1f(i.uniformLocations.uStepH,1/t.sourceHeight),this.sendUniformData(e,i.uniformLocations),e.viewport(0,0,t.destinationWidth,t.destinationHeight),e.drawArrays(e.TRIANGLE_STRIP,0,4)},bindAdditionalTexture:function(t,e,i){t.activeTexture(i),t.bindTexture(t.TEXTURE_2D,e),t.activeTexture(t.TEXTURE0)},unbindAdditionalTexture:function(t,e){t.activeTexture(e),t.bindTexture(t.TEXTURE_2D,null),t.activeTexture(t.TEXTURE0)},getMainParameter:function(){return this[this.mainParameter]},setMainParameter:function(t){this[this.mainParameter]=t},sendUniformData:function(){},createHelpLayer:function(t){if(!t.helpLayer){var e=document.createElement("canvas");e.width=t.sourceWidth,e.height=t.sourceHeight,t.helpLayer=e}},toObject:function(){var t={type:this.type},e=this.mainParameter;return e&&(t[e]=this[e]),t},toJSON:function(){return this.toObject()}}),T.Image.filters.BaseFilter.fromObject=function(t,e){var i=new T.Image.filters[t.type](t);return e&&e(i),i},function(t){var e=t.fabric||(t.fabric={}),i=e.Image.filters,r=e.util.createClass;i.ColorMatrix=r(i.BaseFilter,{type:"ColorMatrix",fragmentSource:"precision highp float;\nuniform sampler2D uTexture;\nvarying vec2 vTexCoord;\nuniform mat4 uColorMatrix;\nuniform vec4 uConstants;\nvoid main() {\nvec4 color = texture2D(uTexture, vTexCoord);\ncolor *= uColorMatrix;\ncolor += uConstants;\ngl_FragColor = color;\n}",matrix:[1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0],mainParameter:"matrix",colorsOnly:!0,initialize:function(t){this.callSuper("initialize",t),this.matrix=this.matrix.slice(0)},applyTo2d:function(t){var e,i,r,n,o,s=t.imageData.data,a=s.length,h=this.matrix,c=this.colorsOnly;for(o=0;o=b||s<0||s>=_||(h=4*(a*_+s),c=v[d*m+f],e+=p[h]*c,i+=p[h+1]*c,r+=p[h+2]*c,w||(n+=p[h+3]*c));C[o]=e,C[o+1]=i,C[o+2]=r,C[o+3]=w?p[o+3]:n}t.imageData=x},getUniformLocations:function(t,e){return{uMatrix:t.getUniformLocation(e,"uMatrix"),uOpaque:t.getUniformLocation(e,"uOpaque"),uHalfSize:t.getUniformLocation(e,"uHalfSize"),uSize:t.getUniformLocation(e,"uSize")}},sendUniformData:function(t,e){t.uniform1fv(e.uMatrix,this.matrix)},toObject:function(){return i(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),e.Image.filters.Convolute.fromObject=e.Image.filters.BaseFilter.fromObject}(t),function(t){var e=t.fabric||(t.fabric={}),i=e.Image.filters,r=e.util.createClass;i.Grayscale=r(i.BaseFilter,{type:"Grayscale",fragmentSource:{average:"precision highp float;\nuniform sampler2D uTexture;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 color = texture2D(uTexture, vTexCoord);\nfloat average = (color.r + color.b + color.g) / 3.0;\ngl_FragColor = vec4(average, average, average, color.a);\n}",lightness:"precision highp float;\nuniform sampler2D uTexture;\nuniform int uMode;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 col = texture2D(uTexture, vTexCoord);\nfloat average = (max(max(col.r, col.g),col.b) + min(min(col.r, col.g),col.b)) / 2.0;\ngl_FragColor = vec4(average, average, average, col.a);\n}",luminosity:"precision highp float;\nuniform sampler2D uTexture;\nuniform int uMode;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 col = texture2D(uTexture, vTexCoord);\nfloat average = 0.21 * col.r + 0.72 * col.g + 0.07 * col.b;\ngl_FragColor = vec4(average, average, average, col.a);\n}"},mode:"average",mainParameter:"mode",applyTo2d:function(t){var e,i,r=t.imageData.data,n=r.length,o=this.mode;for(e=0;ec[0]&&n>c[1]&&o>c[2]&&r 0.0) {\n"+this.fragmentSource[t]+"}\n}"},retrieveShader:function(t){var e,i=this.type+"_"+this.mode;return t.programCache.hasOwnProperty(i)||(e=this.buildSource(this.mode),t.programCache[i]=this.createProgram(t.context,e)),t.programCache[i]},applyTo2d:function(t){var i,r,n,o,s,a,h,c=t.imageData.data,l=c.length,u=1-this.alpha;i=(h=new e.Color(this.color).getSource())[0]*this.alpha,r=h[1]*this.alpha,n=h[2]*this.alpha;for(var f=0;f=t||e<=-t)return 0;if(e<1.1920929e-7&&e>-1.1920929e-7)return 1;var i=(e*=Math.PI)/t;return a(e)/e*a(i)/i}},applyTo2d:function(t){var e=t.imageData,i=this.scaleX,r=this.scaleY;this.rcpScaleX=1/i,this.rcpScaleY=1/r;var n,o=e.width,a=e.height,h=s(o*i),c=s(a*r);"sliceHack"===this.resizeType?n=this.sliceByTwo(t,o,a,h,c):"hermite"===this.resizeType?n=this.hermiteFastResize(t,o,a,h,c):"bilinear"===this.resizeType?n=this.bilinearFiltering(t,o,a,h,c):"lanczos"===this.resizeType&&(n=this.lanczosResize(t,o,a,h,c)),t.imageData=n},sliceByTwo:function(t,i,n,o,s){var a,h,c=t.imageData,l=.5,u=!1,f=!1,d=i*l,g=n*l,p=e.filterBackend.resources,v=0,m=0,y=i,_=0;for(p.sliceByTwo||(p.sliceByTwo=document.createElement("canvas")),((a=p.sliceByTwo).width<1.5*i||a.height=e)){M=r(1e3*o(S-x.x)),b[M]||(b[M]={});for(var F=C.y-_;F<=C.y+_;F++)F<0||F>=s||(j=r(1e3*o(F-x.y)),b[M][j]||(b[M][j]=d(n(i(M*v,2)+i(j*m,2))/1e3)),(T=b[M][j])>0&&(P+=T,E+=T*l[O=4*(F*e+S)],k+=T*l[O+1],A+=T*l[O+2],D+=T*l[O+3]))}f[O=4*(w*a+h)]=E/P,f[O+1]=k/P,f[O+2]=A/P,f[O+3]=D/P}return++h1&&j<-1||(_=2*j*j*j-3*j*j+1)>0&&(T+=_*d[(M=4*(D+P*e))+3],x+=_,d[M+3]<255&&(_=_*d[M+3]/250),C+=_*d[M],w+=_*d[M+1],S+=_*d[M+2],b+=_)}p[y]=C/b,p[y+1]=w/b,p[y+2]=S/b,p[y+3]=T/x}return g},toObject:function(){return{type:this.type,scaleX:this.scaleX,scaleY:this.scaleY,resizeType:this.resizeType,lanczosLobes:this.lanczosLobes}}}),e.Image.filters.Resize.fromObject=e.Image.filters.BaseFilter.fromObject}(t),function(t){var e=t.fabric||(t.fabric={}),i=e.Image.filters,r=e.util.createClass;i.Contrast=r(i.BaseFilter,{type:"Contrast",fragmentSource:"precision highp float;\nuniform sampler2D uTexture;\nuniform float uContrast;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 color = texture2D(uTexture, vTexCoord);\nfloat contrastF = 1.015 * (uContrast + 1.0) / (1.0 * (1.015 - uContrast));\ncolor.rgb = contrastF * (color.rgb - 0.5) + 0.5;\ngl_FragColor = color;\n}",contrast:0,mainParameter:"contrast",applyTo2d:function(t){if(0!==this.contrast){var e,i=t.imageData.data,r=i.length,n=Math.floor(255*this.contrast),o=259*(n+255)/(255*(259-n));for(e=0;e1&&(e=1/this.aspectRatio):this.aspectRatio<1&&(e=this.aspectRatio),t=e*this.blur*.12,this.horizontal?i[0]=t:i[1]=t,i}}),i.Blur.fromObject=e.Image.filters.BaseFilter.fromObject}(t),function(t){var e=t.fabric||(t.fabric={}),i=e.Image.filters,r=e.util.createClass;i.Gamma=r(i.BaseFilter,{type:"Gamma",fragmentSource:"precision highp float;\nuniform sampler2D uTexture;\nuniform vec3 uGamma;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 color = texture2D(uTexture, vTexCoord);\nvec3 correction = (1.0 / uGamma);\ncolor.r = pow(color.r, correction.r);\ncolor.g = pow(color.g, correction.g);\ncolor.b = pow(color.b, correction.b);\ngl_FragColor = color;\ngl_FragColor.rgb *= color.a;\n}",gamma:[1,1,1],mainParameter:"gamma",initialize:function(t){this.gamma=[1,1,1],i.BaseFilter.prototype.initialize.call(this,t)},applyTo2d:function(t){var e,i=t.imageData.data,r=this.gamma,n=i.length,o=1/r[0],s=1/r[1],a=1/r[2];for(this.rVals||(this.rVals=new Uint8Array(256),this.gVals=new Uint8Array(256),this.bVals=new Uint8Array(256)),e=0,n=256;e'},_getCacheCanvasDimensions:function(){var t=this.callSuper("_getCacheCanvasDimensions"),e=this.fontSize;return t.width+=e*t.zoomX,t.height+=e*t.zoomY,t},_render:function(t){var e=this.path;e&&!e.isNotVisible()&&e._render(t),this._setTextStyles(t),this._renderTextLinesBackground(t),this._renderTextDecoration(t,"underline"),this._renderText(t),this._renderTextDecoration(t,"overline"),this._renderTextDecoration(t,"linethrough")},_renderText:function(t){"stroke"===this.paintFirst?(this._renderTextStroke(t),this._renderTextFill(t)):(this._renderTextFill(t),this._renderTextStroke(t))},_setTextStyles:function(t,e,i){t.textBaseline="alphabetic",t.font=this._getFontDeclaration(e,i)},calcTextWidth:function(){for(var t=this.getLineWidth(0),e=1,i=this._textLines.length;et&&(t=r)}return t},_renderTextLine:function(t,e,i,r,n,o){this._renderChars(t,e,i,r,n,o)},_renderTextLinesBackground:function(t){if(this.textBackgroundColor||this.styleHas("textBackgroundColor")){for(var e,i,r,n,o,s,a,h=t.fillStyle,c=this._getLeftOffset(),l=this._getTopOffset(),u=0,f=0,d=this.path,g=0,p=this._textLines.length;g=0:ia?u%=a:u<0&&(u+=a),this._setGraphemeOnPath(u,o,s),u+=o.kernedWidth}return{width:h,numOfSpaces:0}},_setGraphemeOnPath:function(t,i,r){var n=t+i.kernedWidth/2,o=this.path,s=e.util.getPointOnPath(o.path,n,o.segmentsInfo);i.renderLeft=s.x-r.x,i.renderTop=s.y-r.y,i.angle=s.angle+("right"===this.pathSide?Math.PI:0)},_getGraphemeBox:function(t,e,i,r,n){var o,s=this.getCompleteStyleDeclaration(e,i),a=r?this.getCompleteStyleDeclaration(e,i-1):{},h=this._measureChar(t,s,r,a),c=h.kernedWidth,l=h.width;0!==this.charSpacing&&(l+=o=this._getWidthOfCharSpacing(),c+=o);var u={width:l,left:0,height:s.fontSize,kernedWidth:c,deltaY:s.deltaY};if(i>0&&!n){var f=this.__charBounds[e][i-1];u.left=f.left+f.width+h.kernedWidth-h.width}return u},getHeightOfLine:function(t){if(this.__lineHeights[t])return this.__lineHeights[t];for(var e=this._textLines[t],i=this.getHeightOfChar(t,0),r=1,n=e.length;r0){var P=y+o+u;"rtl"===this.direction&&(P=this.width-P-f),c&&m&&(t.fillStyle=m,t.fillRect(P,l+C*r+s,f,this.fontSize/15)),u=d.left,f=d.width,c=g,m=v,r=n,s=a}else f+=d.kernedWidth;P=y+o+u;"rtl"===this.direction&&(P=this.width-P-f),t.fillStyle=v,g&&v&&t.fillRect(P,l+C*r+s,f-x,this.fontSize/15),_+=i}else _+=i;this._removeShadow(t)}},_getFontDeclaration:function(t,i){var r=t||this,n=this.fontFamily,o=e.Text.genericFonts.indexOf(n.toLowerCase())>-1,s=void 0===n||n.indexOf("'")>-1||n.indexOf(",")>-1||n.indexOf('"')>-1||o?r.fontFamily:'"'+r.fontFamily+'"';return[e.isLikelyNode?r.fontWeight:r.fontStyle,e.isLikelyNode?r.fontStyle:r.fontWeight,i?this.CACHE_FONT_SIZE+"px":r.fontSize+"px",s].join(" ")},render:function(t){this.visible&&(this.canvas&&this.canvas.skipOffscreen&&!this.group&&!this.isOnScreen()||(this._shouldClearDimensionCache()&&this.initDimensions(),this.callSuper("render",t)))},_splitTextIntoLines:function(t){for(var i=t.split(this._reNewline),r=new Array(i.length),n=["\n"],o=[],s=0;s-1&&(t.underline=!0),t.textDecoration.indexOf("line-through")>-1&&(t.linethrough=!0),t.textDecoration.indexOf("overline")>-1&&(t.overline=!0),delete t.textDecoration)}T.IText=T.util.createClass(T.Text,T.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"",cursorDelay:1e3,cursorDuration:600,caching:!0,hiddenTextareaContainer:null,_reSpace:/\s|\n/,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,__widthOfSpace:[],inCompositionMode:!1,initialize:function(t,e){this.callSuper("initialize",t,e),this.initBehavior()},setSelectionStart:function(t){t=Math.max(t,0),this._updateAndFire("selectionStart",t)},setSelectionEnd:function(t){t=Math.min(t,this.text.length),this._updateAndFire("selectionEnd",t)},_updateAndFire:function(t,e){this[t]!==e&&(this._fireSelectionChanged(),this[t]=e),this._updateTextarea()},_fireSelectionChanged:function(){this.fire("selection:changed"),this.canvas&&this.canvas.fire("text:selection:changed",{target:this})},initDimensions:function(){this.isEditing&&this.initDelayedCursor(),this.clearContextTop(),this.callSuper("initDimensions")},render:function(t){this.clearContextTop(),this.callSuper("render",t),this.cursorOffsetCache={},this.renderCursorOrSelection()},_render:function(t){this.callSuper("_render",t)},clearContextTop:function(t){if(this.isEditing&&this.canvas&&this.canvas.contextTop){var e=this.canvas.contextTop,i=this.canvas.viewportTransform;e.save(),e.transform(i[0],i[1],i[2],i[3],i[4],i[5]),this.transform(e),this._clearTextArea(e),t||e.restore()}},renderCursorOrSelection:function(){if(this.isEditing&&this.canvas&&this.canvas.contextTop){var t=this._getCursorBoundaries(),e=this.canvas.contextTop;this.clearContextTop(!0),this.selectionStart===this.selectionEnd?this.renderCursor(t,e):this.renderSelection(t,e),e.restore()}},_clearTextArea:function(t){var e=this.width+4,i=this.height+4;t.clearRect(-e/2,-i/2,e,i)},_getCursorBoundaries:function(t){void 0===t&&(t=this.selectionStart);var e=this._getLeftOffset(),i=this._getTopOffset(),r=this._getCursorBoundariesOffsets(t);return{left:e,top:i,leftOffset:r.left,topOffset:r.top}},_getCursorBoundariesOffsets:function(t){if(this.cursorOffsetCache&&"top"in this.cursorOffsetCache)return this.cursorOffsetCache;var e,i,r,n,o=0,s=0,a=this.get2DCursorLocation(t);r=a.charIndex,i=a.lineIndex;for(var h=0;h0?s:0)},"rtl"===this.direction&&(n.left*=-1),this.cursorOffsetCache=n,this.cursorOffsetCache},renderCursor:function(t,e){var i=this.get2DCursorLocation(),r=i.lineIndex,n=i.charIndex>0?i.charIndex-1:0,o=this.getValueOfPropertyAt(r,n,"fontSize"),s=this.scaleX*this.canvas.getZoom(),a=this.cursorWidth/s,h=t.topOffset,c=this.getValueOfPropertyAt(r,n,"deltaY");h+=(1-this._fontSizeFraction)*this.getHeightOfLine(r)/this.lineHeight-o*(1-this._fontSizeFraction),this.inCompositionMode&&this.renderSelection(t,e),e.fillStyle=this.cursorColor||this.getValueOfPropertyAt(r,n,"fill"),e.globalAlpha=this.__isMousedown?1:this._currentCursorOpacity,e.fillRect(t.left+t.leftOffset-a/2,h+t.top+c,a,o)},renderSelection:function(t,e){for(var i=this.inCompositionMode?this.hiddenTextarea.selectionStart:this.selectionStart,r=this.inCompositionMode?this.hiddenTextarea.selectionEnd:this.selectionEnd,n=-1!==this.textAlign.indexOf("justify"),o=this.get2DCursorLocation(i),s=this.get2DCursorLocation(r),a=o.lineIndex,h=s.lineIndex,c=o.charIndex<0?0:o.charIndex,l=s.charIndex<0?0:s.charIndex,u=a;u<=h;u++){var f,d=this._getLineLeftOffset(u)||0,g=this.getHeightOfLine(u),p=0,v=0;if(u===a&&(p=this.__charBounds[a][c].left),u>=a&&u1)&&(g/=this.lineHeight);var y=t.left+d+p,_=v-p,b=g,x=0;this.inCompositionMode?(e.fillStyle=this.compositionColor||"black",b=1,x=g):e.fillStyle=this.selectionColor,"rtl"===this.direction&&(y=this.width-y-_),e.fillRect(y,t.top+t.topOffset+x,_,b),t.topOffset+=f}},getCurrentCharFontSize:function(){var t=this._getCurrentCharIndex();return this.getValueOfPropertyAt(t.l,t.c,"fontSize")},getCurrentCharColor:function(){var t=this._getCurrentCharIndex();return this.getValueOfPropertyAt(t.l,t.c,"fill")},_getCurrentCharIndex:function(){var t=this.get2DCursorLocation(this.selectionStart,!0),e=t.charIndex>0?t.charIndex-1:0;return{l:t.lineIndex,c:e}}}),T.IText.fromObject=function(e,i){if(t(e),e.styles)for(var r in e.styles)for(var n in e.styles[r])t(e.styles[r][n]);T.Object._fromObject("IText",e,i,"text")}}(),S=T.util.object.clone,T.util.object.extend(T.IText.prototype,{initBehavior:function(){this.initAddedHandler(),this.initRemovedHandler(),this.initCursorSelectionHandlers(),this.initDoubleClickSimulation(),this.mouseMoveHandler=this.mouseMoveHandler.bind(this)},onDeselect:function(){this.isEditing&&this.exitEditing(),this.selected=!1},initAddedHandler:function(){var t=this;this.on("added",(function(){var e=t.canvas;e&&(e._hasITextHandlers||(e._hasITextHandlers=!0,t._initCanvasHandlers(e)),e._iTextInstances=e._iTextInstances||[],e._iTextInstances.push(t))}))},initRemovedHandler:function(){var t=this;this.on("removed",(function(){var e=t.canvas;e&&(e._iTextInstances=e._iTextInstances||[],T.util.removeFromArray(e._iTextInstances,t),0===e._iTextInstances.length&&(e._hasITextHandlers=!1,t._removeCanvasHandlers(e)))}))},_initCanvasHandlers:function(t){t._mouseUpITextHandler=function(){t._iTextInstances&&t._iTextInstances.forEach((function(t){t.__isMousedown=!1}))},t.on("mouse:up",t._mouseUpITextHandler)},_removeCanvasHandlers:function(t){t.off("mouse:up",t._mouseUpITextHandler)},_tick:function(){this._currentTickState=this._animateCursor(this,1,this.cursorDuration,"_onTickComplete")},_animateCursor:function(t,e,i,r){var n;return n={isAborted:!1,abort:function(){this.isAborted=!0}},t.animate("_currentCursorOpacity",e,{duration:i,onComplete:function(){n.isAborted||t[r]()},onChange:function(){t.canvas&&t.selectionStart===t.selectionEnd&&t.renderCursorOrSelection()},abort:function(){return n.isAborted}}),n},_onTickComplete:function(){var t=this;this._cursorTimeout1&&clearTimeout(this._cursorTimeout1),this._cursorTimeout1=setTimeout((function(){t._currentTickCompleteState=t._animateCursor(t,0,this.cursorDuration/2,"_tick")}),100)},initDelayedCursor:function(t){var e=this,i=t?0:this.cursorDelay;this.abortCursorAnimation(),this._currentCursorOpacity=1,this._cursorTimeout2=setTimeout((function(){e._tick()}),i)},abortCursorAnimation:function(){var t=this._currentTickState||this._currentTickCompleteState,e=this.canvas;this._currentTickState&&this._currentTickState.abort(),this._currentTickCompleteState&&this._currentTickCompleteState.abort(),clearTimeout(this._cursorTimeout1),clearTimeout(this._cursorTimeout2),this._currentCursorOpacity=0,t&&e&&e.clearContext(e.contextTop||e.contextContainer)},selectAll:function(){return this.selectionStart=0,this.selectionEnd=this._text.length,this._fireSelectionChanged(),this._updateTextarea(),this},getSelectedText:function(){return this._text.slice(this.selectionStart,this.selectionEnd).join("")},findWordBoundaryLeft:function(t){var e=0,i=t-1;if(this._reSpace.test(this._text[i]))for(;this._reSpace.test(this._text[i]);)e++,i--;for(;/\S/.test(this._text[i])&&i>-1;)e++,i--;return t-e},findWordBoundaryRight:function(t){var e=0,i=t;if(this._reSpace.test(this._text[i]))for(;this._reSpace.test(this._text[i]);)e++,i++;for(;/\S/.test(this._text[i])&&i-1;)e++,i--;return t-e},findLineBoundaryRight:function(t){for(var e=0,i=t;!/\n/.test(this._text[i])&&i0&&rthis.__selectionStartOnMouseDown?(this.selectionStart=this.__selectionStartOnMouseDown,this.selectionEnd=e):(this.selectionStart=e,this.selectionEnd=this.__selectionStartOnMouseDown),this.selectionStart===i&&this.selectionEnd===r||(this.restartCursorIfNeeded(),this._fireSelectionChanged(),this._updateTextarea(),this.renderCursorOrSelection()))}},_setEditingProps:function(){this.hoverCursor="text",this.canvas&&(this.canvas.defaultCursor=this.canvas.moveCursor="text"),this.borderColor=this.editingBorderColor,this.hasControls=this.selectable=!1,this.lockMovementX=this.lockMovementY=!0},fromStringToGraphemeSelection:function(t,e,i){var r=i.slice(0,t),n=T.util.string.graphemeSplit(r).length;if(t===e)return{selectionStart:n,selectionEnd:n};var o=i.slice(t,e);return{selectionStart:n,selectionEnd:n+T.util.string.graphemeSplit(o).length}},fromGraphemeToStringSelection:function(t,e,i){var r=i.slice(0,t).join("").length;return t===e?{selectionStart:r,selectionEnd:r}:{selectionStart:r,selectionEnd:r+i.slice(t,e).join("").length}},_updateTextarea:function(){if(this.cursorOffsetCache={},this.hiddenTextarea){if(!this.inCompositionMode){var t=this.fromGraphemeToStringSelection(this.selectionStart,this.selectionEnd,this._text);this.hiddenTextarea.selectionStart=t.selectionStart,this.hiddenTextarea.selectionEnd=t.selectionEnd}this.updateTextareaPosition()}},updateFromTextArea:function(){if(this.hiddenTextarea){this.cursorOffsetCache={},this.text=this.hiddenTextarea.value,this._shouldClearDimensionCache()&&(this.initDimensions(),this.setCoords());var t=this.fromStringToGraphemeSelection(this.hiddenTextarea.selectionStart,this.hiddenTextarea.selectionEnd,this.hiddenTextarea.value);this.selectionEnd=this.selectionStart=t.selectionEnd,this.inCompositionMode||(this.selectionStart=t.selectionStart),this.updateTextareaPosition()}},updateTextareaPosition:function(){if(this.selectionStart===this.selectionEnd){var t=this._calcTextareaPosition();this.hiddenTextarea.style.left=t.left,this.hiddenTextarea.style.top=t.top}},_calcTextareaPosition:function(){if(!this.canvas)return{x:1,y:1};var t=this.inCompositionMode?this.compositionStart:this.selectionStart,e=this._getCursorBoundaries(t),i=this.get2DCursorLocation(t),r=i.lineIndex,n=i.charIndex,o=this.getValueOfPropertyAt(r,n,"fontSize")*this.lineHeight,s=e.leftOffset,a=this.calcTransformMatrix(),h={x:e.left+s,y:e.top+e.topOffset+o},c=this.canvas.getRetinaScaling(),l=this.canvas.upperCanvasEl,u=l.width/c,f=l.height/c,d=u-o,g=f-o,p=l.clientWidth/u,v=l.clientHeight/f;return h=T.util.transformPoint(h,a),(h=T.util.transformPoint(h,this.canvas.viewportTransform)).x*=p,h.y*=v,h.x<0&&(h.x=0),h.x>d&&(h.x=d),h.y<0&&(h.y=0),h.y>g&&(h.y=g),h.x+=this.canvas._offset.left,h.y+=this.canvas._offset.top,{left:h.x+"px",top:h.y+"px",fontSize:o+"px",charHeight:o}},_saveEditingProps:function(){this._savedProps={hasControls:this.hasControls,borderColor:this.borderColor,lockMovementX:this.lockMovementX,lockMovementY:this.lockMovementY,hoverCursor:this.hoverCursor,selectable:this.selectable,defaultCursor:this.canvas&&this.canvas.defaultCursor,moveCursor:this.canvas&&this.canvas.moveCursor}},_restoreEditingProps:function(){this._savedProps&&(this.hoverCursor=this._savedProps.hoverCursor,this.hasControls=this._savedProps.hasControls,this.borderColor=this._savedProps.borderColor,this.selectable=this._savedProps.selectable,this.lockMovementX=this._savedProps.lockMovementX,this.lockMovementY=this._savedProps.lockMovementY,this.canvas&&(this.canvas.defaultCursor=this._savedProps.defaultCursor,this.canvas.moveCursor=this._savedProps.moveCursor))},exitEditing:function(){var t=this._textBeforeEdit!==this.text,e=this.hiddenTextarea;return this.selected=!1,this.isEditing=!1,this.selectionEnd=this.selectionStart,e&&(e.blur&&e.blur(),e.parentNode&&e.parentNode.removeChild(e)),this.hiddenTextarea=null,this.abortCursorAnimation(),this._restoreEditingProps(),this._currentCursorOpacity=0,this._shouldClearDimensionCache()&&(this.initDimensions(),this.setCoords()),this.fire("editing:exited"),t&&this.fire("modified"),this.canvas&&(this.canvas.off("mouse:move",this.mouseMoveHandler),this.canvas.fire("text:editing:exited",{target:this}),t&&this.canvas.fire("object:modified",{target:this})),this},_removeExtraneousStyles:function(){for(var t in this.styles)this._textLines[t]||delete this.styles[t]},removeStyleFromTo:function(t,e){var i,r,n=this.get2DCursorLocation(t,!0),o=this.get2DCursorLocation(e,!0),s=n.lineIndex,a=n.charIndex,h=o.lineIndex,c=o.charIndex;if(s!==h){if(this.styles[s])for(i=a;i=c&&(r[l-f]=r[u],delete r[u])}},shiftLineStyles:function(t,e){var i=S(this.styles);for(var r in this.styles){var n=parseInt(r,10);n>t&&(this.styles[n+e]=i[n],i[n-e]||delete this.styles[n])}},restartCursorIfNeeded:function(){this._currentTickState&&!this._currentTickState.isAborted&&this._currentTickCompleteState&&!this._currentTickCompleteState.isAborted||this.initDelayedCursor()},insertNewlineStyleObject:function(t,e,i,r){var n,o={},s=!1,a=this._unwrappedTextLines[t].length===e;for(var h in i||(i=1),this.shiftLineStyles(t,i),this.styles[t]&&(n=this.styles[t][0===e?e:e-1]),this.styles[t]){var c=parseInt(h,10);c>=e&&(s=!0,o[c-e]=this.styles[t][h],a&&0===e||delete this.styles[t][h])}var l=!1;for(s&&!a&&(this.styles[t+i]=o,l=!0),l&&i--;i>0;)r&&r[i-1]?this.styles[t+i]={0:S(r[i-1])}:n?this.styles[t+i]={0:S(n)}:delete this.styles[t+i],i--;this._forceClearCache=!0},insertCharStyleObject:function(t,e,i,r){this.styles||(this.styles={});var n=this.styles[t],o=n?S(n):{};for(var s in i||(i=1),o){var a=parseInt(s,10);a>=e&&(n[a+i]=o[a],o[a-i]||delete n[a])}if(this._forceClearCache=!0,r)for(;i--;)Object.keys(r[i]).length&&(this.styles[t]||(this.styles[t]={}),this.styles[t][e+i]=S(r[i]));else if(n)for(var h=n[e?e-1:1];h&&i--;)this.styles[t][e+i]=S(h)},insertNewStyleBlock:function(t,e,i){for(var r=this.get2DCursorLocation(e,!0),n=[0],o=0,s=0;s0&&(this.insertCharStyleObject(r.lineIndex,r.charIndex,n[0],i),i=i&&i.slice(n[0]+1)),o&&this.insertNewlineStyleObject(r.lineIndex,r.charIndex+n[0],o),s=1;s0?this.insertCharStyleObject(r.lineIndex+s,0,n[s],i):i&&(this.styles[r.lineIndex+s][0]=i[0]),i=i&&i.slice(n[s]+1);n[s]>0&&this.insertCharStyleObject(r.lineIndex+s,0,n[s],i)},setSelectionStartEndWithShift:function(t,e,i){i<=t?(e===t?this._selectionDirection="left":"right"===this._selectionDirection&&(this._selectionDirection="left",this.selectionEnd=t),this.selectionStart=i):i>t&&it?this.selectionStart=t:this.selectionStart<0&&(this.selectionStart=0),this.selectionEnd>t?this.selectionEnd=t:this.selectionEnd<0&&(this.selectionEnd=0)}}),T.util.object.extend(T.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+new Date,this.__lastLastClickTime=+new Date,this.__lastPointer={},this.on("mousedown",this.onMouseDown)},onMouseDown:function(t){if(this.canvas){this.__newClickTime=+new Date;var e=t.pointer;this.isTripleClick(e)&&(this.fire("tripleclick",t),this._stopEvent(t.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=e,this.__lastIsEditing=this.isEditing,this.__lastSelected=this.selected}},isTripleClick:function(t){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===t.x&&this.__lastPointer.y===t.y},_stopEvent:function(t){t.preventDefault&&t.preventDefault(),t.stopPropagation&&t.stopPropagation()},initCursorSelectionHandlers:function(){this.initMousedownHandler(),this.initMouseupHandler(),this.initClicks()},doubleClickHandler:function(t){this.isEditing&&this.selectWord(this.getSelectionStartFromPointer(t.e))},tripleClickHandler:function(t){this.isEditing&&this.selectLine(this.getSelectionStartFromPointer(t.e))},initClicks:function(){this.on("mousedblclick",this.doubleClickHandler),this.on("tripleclick",this.tripleClickHandler)},_mouseDownHandler:function(t){!this.canvas||!this.editable||t.e.button&&1!==t.e.button||(this.__isMousedown=!0,this.selected&&(this.inCompositionMode=!1,this.setCursorByClick(t.e)),this.isEditing&&(this.__selectionStartOnMouseDown=this.selectionStart,this.selectionStart===this.selectionEnd&&this.abortCursorAnimation(),this.renderCursorOrSelection()))},_mouseDownHandlerBefore:function(t){!this.canvas||!this.editable||t.e.button&&1!==t.e.button||(this.selected=this===this.canvas._activeObject)},initMousedownHandler:function(){this.on("mousedown",this._mouseDownHandler),this.on("mousedown:before",this._mouseDownHandlerBefore)},initMouseupHandler:function(){this.on("mouseup",this.mouseUpHandler)},mouseUpHandler:function(t){if(this.__isMousedown=!1,!(!this.editable||this.group||t.transform&&t.transform.actionPerformed||t.e.button&&1!==t.e.button)){if(this.canvas){var e=this.canvas._activeObject;if(e&&e!==this)return}this.__lastSelected&&!this.__corner?(this.selected=!1,this.__lastSelected=!1,this.enterEditing(t.e),this.selectionStart===this.selectionEnd?this.initDelayedCursor(!0):this.renderCursorOrSelection()):this.selected=!0}},setCursorByClick:function(t){var e=this.getSelectionStartFromPointer(t),i=this.selectionStart,r=this.selectionEnd;t.shiftKey?this.setSelectionStartEndWithShift(i,r,e):(this.selectionStart=e,this.selectionEnd=e),this.isEditing&&(this._fireSelectionChanged(),this._updateTextarea())},getSelectionStartFromPointer:function(t){for(var e,i=this.getLocalPointer(t),r=0,n=0,o=0,s=0,a=0,h=0,c=this._textLines.length;h0&&(s+=this._textLines[h-1].length+this.missingNewlineOffset(h-1));n=this._getLineLeftOffset(a)*this.scaleX,e=this._textLines[a],"rtl"===this.direction&&(i.x=this.width*this.scaleX-i.x+n);for(var l=0,u=e.length;lo||s<0?0:1);return this.flipX&&(a=n-a),a>this._text.length&&(a=this._text.length),a}}),T.util.object.extend(T.IText.prototype,{initHiddenTextarea:function(){this.hiddenTextarea=T.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off"),this.hiddenTextarea.setAttribute("autocorrect","off"),this.hiddenTextarea.setAttribute("autocomplete","off"),this.hiddenTextarea.setAttribute("spellcheck","false"),this.hiddenTextarea.setAttribute("data-fabric-hiddentextarea",""),this.hiddenTextarea.setAttribute("wrap","off");var t=this._calcTextareaPosition();this.hiddenTextarea.style.cssText="position: absolute; top: "+t.top+"; left: "+t.left+"; z-index: -999; opacity: 0; width: 1px; height: 1px; font-size: 1px; paddingーtop: "+t.fontSize+";",this.hiddenTextareaContainer?this.hiddenTextareaContainer.appendChild(this.hiddenTextarea):T.document.body.appendChild(this.hiddenTextarea),T.util.addListener(this.hiddenTextarea,"keydown",this.onKeyDown.bind(this)),T.util.addListener(this.hiddenTextarea,"keyup",this.onKeyUp.bind(this)),T.util.addListener(this.hiddenTextarea,"input",this.onInput.bind(this)),T.util.addListener(this.hiddenTextarea,"copy",this.copy.bind(this)),T.util.addListener(this.hiddenTextarea,"cut",this.copy.bind(this)),T.util.addListener(this.hiddenTextarea,"paste",this.paste.bind(this)),T.util.addListener(this.hiddenTextarea,"compositionstart",this.onCompositionStart.bind(this)),T.util.addListener(this.hiddenTextarea,"compositionupdate",this.onCompositionUpdate.bind(this)),T.util.addListener(this.hiddenTextarea,"compositionend",this.onCompositionEnd.bind(this)),!this._clickHandlerInitialized&&this.canvas&&(T.util.addListener(this.canvas.upperCanvasEl,"click",this.onClick.bind(this)),this._clickHandlerInitialized=!0)},keysMap:{9:"exitEditing",27:"exitEditing",33:"moveCursorUp",34:"moveCursorDown",35:"moveCursorRight",36:"moveCursorLeft",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown"},keysMapRtl:{9:"exitEditing",27:"exitEditing",33:"moveCursorUp",34:"moveCursorDown",35:"moveCursorLeft",36:"moveCursorRight",37:"moveCursorRight",38:"moveCursorUp",39:"moveCursorLeft",40:"moveCursorDown"},ctrlKeysMapUp:{67:"copy",88:"cut"},ctrlKeysMapDown:{65:"selectAll"},onClick:function(){this.hiddenTextarea&&this.hiddenTextarea.focus()},onKeyDown:function(t){if(this.isEditing){var e="rtl"===this.direction?this.keysMapRtl:this.keysMap;if(t.keyCode in e)this[e[t.keyCode]](t);else{if(!(t.keyCode in this.ctrlKeysMapDown)||!t.ctrlKey&&!t.metaKey)return;this[this.ctrlKeysMapDown[t.keyCode]](t)}t.stopImmediatePropagation(),t.preventDefault(),t.keyCode>=33&&t.keyCode<=40?(this.inCompositionMode=!1,this.clearContextTop(),this.renderCursorOrSelection()):this.canvas&&this.canvas.requestRenderAll()}},onKeyUp:function(t){!this.isEditing||this._copyDone||this.inCompositionMode?this._copyDone=!1:t.keyCode in this.ctrlKeysMapUp&&(t.ctrlKey||t.metaKey)&&(this[this.ctrlKeysMapUp[t.keyCode]](t),t.stopImmediatePropagation(),t.preventDefault(),this.canvas&&this.canvas.requestRenderAll())},onInput:function(t){var e=this.fromPaste;if(this.fromPaste=!1,t&&t.stopPropagation(),this.isEditing){var i,r,n,o,s,a=this._splitTextIntoLines(this.hiddenTextarea.value).graphemeText,h=this._text.length,c=a.length,l=c-h,u=this.selectionStart,f=this.selectionEnd,d=u!==f;if(""===this.hiddenTextarea.value)return this.styles={},this.updateFromTextArea(),this.fire("changed"),void(this.canvas&&(this.canvas.fire("text:changed",{target:this}),this.canvas.requestRenderAll()));var g=this.fromStringToGraphemeSelection(this.hiddenTextarea.selectionStart,this.hiddenTextarea.selectionEnd,this.hiddenTextarea.value),p=u>g.selectionStart;d?(i=this._text.slice(u,f),l+=f-u):c0&&(r+=(i=this.__charBounds[t][e-1]).left+i.width),r},getDownCursorOffset:function(t,e){var i=this._getSelectionForOffset(t,e),r=this.get2DCursorLocation(i),n=r.lineIndex;if(n===this._textLines.length-1||t.metaKey||34===t.keyCode)return this._text.length-i;var o=r.charIndex,s=this._getWidthBeforeCursor(n,o),a=this._getIndexOnLine(n+1,s);return this._textLines[n].slice(o).length+a+1+this.missingNewlineOffset(n)},_getSelectionForOffset:function(t,e){return t.shiftKey&&this.selectionStart!==this.selectionEnd&&e?this.selectionEnd:this.selectionStart},getUpCursorOffset:function(t,e){var i=this._getSelectionForOffset(t,e),r=this.get2DCursorLocation(i),n=r.lineIndex;if(0===n||t.metaKey||33===t.keyCode)return-i;var o=r.charIndex,s=this._getWidthBeforeCursor(n,o),a=this._getIndexOnLine(n-1,s),h=this._textLines[n].slice(0,o),c=this.missingNewlineOffset(n-1);return-this._textLines[n-1].length+a-h.length+(1-c)},_getIndexOnLine:function(t,e){for(var i,r,n=this._textLines[t],o=this._getLineLeftOffset(t),s=0,a=0,h=n.length;ae){r=!0;var c=o-i,l=o,u=Math.abs(c-e);s=Math.abs(l-e)=this._text.length&&this.selectionEnd>=this._text.length||this._moveCursorUpOrDown("Down",t)},moveCursorUp:function(t){0===this.selectionStart&&0===this.selectionEnd||this._moveCursorUpOrDown("Up",t)},_moveCursorUpOrDown:function(t,e){var i=this["get"+t+"CursorOffset"](e,"right"===this._selectionDirection);e.shiftKey?this.moveCursorWithShift(i):this.moveCursorWithoutShift(i),0!==i&&(this.setSelectionInBoundaries(),this.abortCursorAnimation(),this._currentCursorOpacity=1,this.initDelayedCursor(),this._fireSelectionChanged(),this._updateTextarea())},moveCursorWithShift:function(t){var e="left"===this._selectionDirection?this.selectionStart+t:this.selectionEnd+t;return this.setSelectionStartEndWithShift(this.selectionStart,this.selectionEnd,e),0!==t},moveCursorWithoutShift:function(t){return t<0?(this.selectionStart+=t,this.selectionEnd=this.selectionStart):(this.selectionEnd+=t,this.selectionStart=this.selectionEnd),0!==t},moveCursorLeft:function(t){0===this.selectionStart&&0===this.selectionEnd||this._moveCursorLeftOrRight("Left",t)},_move:function(t,e,i){var r;if(t.altKey)r=this["findWordBoundary"+i](this[e]);else{if(!t.metaKey&&35!==t.keyCode&&36!==t.keyCode)return this[e]+="Left"===i?-1:1,!0;r=this["findLineBoundary"+i](this[e])}if(void 0!==typeof r&&this[e]!==r)return this[e]=r,!0},_moveLeft:function(t,e){return this._move(t,e,"Left")},_moveRight:function(t,e){return this._move(t,e,"Right")},moveCursorLeftWithoutShift:function(t){var e=!0;return this._selectionDirection="left",this.selectionEnd===this.selectionStart&&0!==this.selectionStart&&(e=this._moveLeft(t,"selectionStart")),this.selectionEnd=this.selectionStart,e},moveCursorLeftWithShift:function(t){return"right"===this._selectionDirection&&this.selectionStart!==this.selectionEnd?this._moveLeft(t,"selectionEnd"):0!==this.selectionStart?(this._selectionDirection="left",this._moveLeft(t,"selectionStart")):void 0},moveCursorRight:function(t){this.selectionStart>=this._text.length&&this.selectionEnd>=this._text.length||this._moveCursorLeftOrRight("Right",t)},_moveCursorLeftOrRight:function(t,e){var i="moveCursor"+t+"With";this._currentCursorOpacity=1,e.shiftKey?i+="Shift":i+="outShift",this[i](e)&&(this.abortCursorAnimation(),this.initDelayedCursor(),this._fireSelectionChanged(),this._updateTextarea())},moveCursorRightWithShift:function(t){return"left"===this._selectionDirection&&this.selectionStart!==this.selectionEnd?this._moveRight(t,"selectionStart"):this.selectionEnd!==this._text.length?(this._selectionDirection="right",this._moveRight(t,"selectionEnd")):void 0},moveCursorRightWithoutShift:function(t){var e=!0;return this._selectionDirection="right",this.selectionStart===this.selectionEnd?(e=this._moveRight(t,"selectionStart"),this.selectionEnd=this.selectionStart):this.selectionStart=this.selectionEnd,e},removeChars:function(t,e){void 0===e&&(e=t+1),this.removeStyleFromTo(t,e),this._text.splice(t,e-t),this.text=this._text.join(""),this.set("dirty",!0),this._shouldClearDimensionCache()&&(this.initDimensions(),this.setCoords()),this._removeExtraneousStyles()},insertChars:function(t,e,i,r){void 0===r&&(r=i),r>i&&this.removeStyleFromTo(i,r);var n=T.util.string.graphemeSplit(t);this.insertNewStyleBlock(n,i,e),this._text=[].concat(this._text.slice(0,i),n,this._text.slice(r)),this.text=this._text.join(""),this.set("dirty",!0),this._shouldClearDimensionCache()&&(this.initDimensions(),this.setCoords()),this._removeExtraneousStyles()}}),function(){var t=T.util.toFixed,e=/ +/g;T.util.object.extend(T.Text.prototype,{_toSVG:function(){var t=this._getSVGLeftTopOffsets(),e=this._getSVGTextAndBg(t.textTop,t.textLeft);return this._wrapSVGTextAndBg(e)},toSVG:function(t){return this._createBaseSVGMarkup(this._toSVG(),{reviver:t,noStyle:!0,withShadow:!0})},_getSVGLeftTopOffsets:function(){return{textLeft:-this.width/2,textTop:-this.height/2,lineTop:this.getHeightOfLine(0)}},_wrapSVGTextAndBg:function(t){var e=this.getSvgTextDecoration(this);return[t.textBgRects.join(""),'\t\t",t.textSpans.join(""),"\n"]},_getSVGTextAndBg:function(t,e){var i,r=[],n=[],o=t;this._setSVGBg(n);for(var s=0,a=this._textLines.length;s",T.util.string.escapeXml(i),""].join("")},_setSVGTextLineText:function(t,e,i,r){var n,o,s,a,h,c=this.getHeightOfLine(e),l=-1!==this.textAlign.indexOf("justify"),u="",f=0,d=this._textLines[e];r+=c*(1-this._fontSizeFraction)/this.lineHeight;for(var g=0,p=d.length-1;g<=p;g++)h=g===p||this.charSpacing,u+=d[g],s=this.__charBounds[e][g],0===f?(i+=s.kernedWidth-s.width,f+=s.width):f+=s.kernedWidth,l&&!h&&this._reSpaceAndTab.test(d[g])&&(h=!0),h||(n=n||this.getCompleteStyleDeclaration(e,g),o=this.getCompleteStyleDeclaration(e,g+1),h=this._hasStyleChangedForSvg(n,o)),h&&(a=this._getStyleDeclaration(e,g)||{},t.push(this._createTextCharSpan(u,a,i,r)),u="",n=o,i+=f,f=0)},_pushTextBgRect:function(e,i,r,n,o,s){var a=T.Object.NUM_FRACTION_DIGITS;e.push("\t\t\n')},_setSVGTextLineBg:function(t,e,i,r){for(var n,o,s=this._textLines[e],a=this.getHeightOfLine(e)/this.lineHeight,h=0,c=0,l=this.getValueOfPropertyAt(e,0,"textBackgroundColor"),u=0,f=s.length;uthis.width&&this._set("width",this.dynamicMinWidth),-1!==this.textAlign.indexOf("justify")&&this.enlargeSpaces(),this.height=this.calcTextHeight(),this.saveState({propertySet:"_dimensionAffectingProps"}))},_generateStyleMap:function(t){for(var e=0,i=0,r=0,n={},o=0;o0?(i=0,r++,e++):!this.splitByGrapheme&&this._reSpaceAndTab.test(t.graphemeText[r])&&o>0&&(i++,r++),n[o]={line:e,offset:i},r+=t.graphemeLines[o].length,i+=t.graphemeLines[o].length;return n},styleHas:function(t,i){if(this._styleMap&&!this.isWrapping){var r=this._styleMap[i];r&&(i=r.line)}return e.Text.prototype.styleHas.call(this,t,i)},isEmptyStyles:function(t){if(!this.styles)return!0;var e,i,r=0,n=!1,o=this._styleMap[t],s=this._styleMap[t+1];for(var a in o&&(t=o.line,r=o.offset),s&&(n=s.line===t,e=s.offset),i=void 0===t?this.styles:{line:this.styles[t]})for(var h in i[a])if(h>=r&&(!n||hr&&!v?(a.push(h),h=[],o=d,v=!0):o+=m,v||s||h.push(f),h=h.concat(l),g=s?0:this._measureWord([f],i,u),u++,v=!1,d>p&&(p=d);return y&&a.push(h),p+n>this.dynamicMinWidth&&(this.dynamicMinWidth=p-m+n),a},isEndOfWrapping:function(t){return!this._styleMap[t+1]||this._styleMap[t+1].line!==this._styleMap[t].line},missingNewlineOffset:function(t){return this.splitByGrapheme?this.isEndOfWrapping(t)?1:0:1},_splitTextIntoLines:function(t){for(var i=e.Text.prototype._splitTextIntoLines.call(this,t),r=this._wrapText(i.lines,this.width),n=new Array(r.length),o=0;o","",e.toSVG(t.reviver),"",""];return e._objects[0].fill=i,r.join("\n")}return""},_createBaseSVGMarkup:function(t,e){var i=this.getEraser();if(i){var n=this.eraserToSVG(e);this.clipPath=null;var o=r.call(this,t,e);return this.clipPath=i,[n,o.replace(">",'mask="url(#'+i.clipPathId+')" >')].join("\n")}return r.call(this,t,e)}});var n=T.Group.prototype._restoreObjectsState,o=T.Group.prototype.toObject,s=T.Group.prototype._getBounds;T.util.object.extend(T.Group.prototype,{_getBounds:function(t,e,i){if(this.eraser)return this.width=this._objects[0].width,void(this.height=this._objects[0].height);s.call(this,t,e,i)},_addEraserPathToObjects:function(t){this._objects.forEach((function(e){T.EraserBrush.prototype._addPathToObjectEraser.call(T.EraserBrush.prototype,e,t)}))},applyEraserToObjects:function(){var t=this;if(this.getEraser()){var e=t.calcTransformMatrix();t.getEraser().clone((function(i){var r=i._objects[0].clipPath;t.clipPath=r||void 0,i.getObjects("path").forEach((function(i){var n=T.util.multiplyTransformMatrices(e,i.calcTransformMatrix());T.util.applyTransformToObject(i,n),r?r.clone((function(r){T.EraserBrush.prototype.applyClipPathToPath.call(T.EraserBrush.prototype,i,r,e),t._addEraserPathToObjects(i)})):t._addEraserPathToObjects(i)}))}))}},_restoreObjectsState:function(){return!0===this.erasable&&this.applyEraserToObjects(),n.call(this)},toObject:function(t){return o.call(this,["eraser"].concat(t))}}),T.util.object.extend(T.Canvas.prototype,{isErasing:function(){return this.isDrawingMode&&this.freeDrawingBrush&&"eraser"===this.freeDrawingBrush.type&&this.freeDrawingBrush._isErasing},renderAll:function(){if(!this.contextTopDirty||this._groupSelector||this.isDrawingMode||(this.clearContext(this.contextTop),this.contextTopDirty=!1),!this.isErasing()){this.hasLostContext&&this.renderTopLayer(this.contextTop);var t=this.contextContainer;return this.renderCanvas(t,this._chooseObjectsToRender()),this}this.freeDrawingBrush._render()}}),T.EraserBrush=T.util.createClass(T.PencilBrush,{type:"eraser",_ready:!1,_drawOverlayOnTop:!1,_isErasing:!1,initialize:function(t){this.callSuper("initialize",t),this._renderBound=this._render.bind(this),this.render=this.render.bind(this)},hideObject:function(t){t&&(t._originalOpacity=t.opacity,t.set({opacity:0}))},restoreObjectVisibility:function(t){t&&t._originalOpacity&&(t.set({opacity:t._originalOpacity}),t._originalOpacity=void 0)},_isErasable:function(t){return!1!==t.erasable},prepareCanvasBackgroundForLayer:function(t){if("overlay"!==t){var e=this.canvas.backgroundImage,i="top"===t;e&&this._isErasable(e)===!i&&this.hideObject(e)}},prepareCanvasOverlayForLayer:function(t){var e=this.canvas,i=e.overlayImage,r=!!e.overlayColor;if(e.overlayColor&&"overlay"!==t&&(this.__overlayColor=e.overlayColor,delete e.overlayColor),"bottom"===t)return this.hideObject(i),!1;var n="top"===t,o=i&&!this._isErasable(i)||r;return i&&this._isErasable(i)===!n&&this.hideObject(i),o},restoreCanvasDrawables:function(){var t=this.canvas;this.__overlayColor&&(t.overlayColor=this.__overlayColor,delete this.__overlayColor),this.restoreObjectVisibility(t.backgroundImage),this.restoreObjectVisibility(t.overlayImage)},prepareCollectionTraversal:function(t){var e=this;t.forEachObject((function(t){t.forEachObject&&"deep"===t.erasable?e.prepareCollectionTraversal(t):t.erasable&&e.hideObject(t)}))},restoreCollectionTraversal:function(t){var e=this;t.forEachObject((function(t){t.forEachObject&&"deep"===t.erasable?e.restoreCollectionTraversal(t):e.restoreObjectVisibility(t)}))},prepareCanvasObjectsForLayer:function(t){"bottom"===t&&this.prepareCollectionTraversal(this.canvas)},restoreCanvasObjectsFromLayer:function(t){"bottom"===t&&this.restoreCollectionTraversal(this.canvas)},prepareCanvasForLayer:function(t){return this.prepareCanvasBackgroundForLayer(t),this.prepareCanvasObjectsForLayer(t),this.prepareCanvasOverlayForLayer(t)},restoreCanvasFromLayer:function(t){this.restoreCanvasDrawables(),this.restoreCanvasObjectsFromLayer(t)},renderBottomLayer:function(){var t=this.canvas;this.prepareCanvasForLayer("bottom"),t.renderCanvas(t.getContext(),t.getObjects().filter((function(t){return!t.erasable||t.forEachObject}))),this.restoreCanvasFromLayer("bottom")},renderTopLayer:function(){var t=this.canvas;this._drawOverlayOnTop=this.prepareCanvasForLayer("top"),t.renderCanvas(t.contextTop,t.getObjects()),this.callSuper("_render"),this.restoreCanvasFromLayer("top")},renderOverlay:function(){this.prepareCanvasForLayer("overlay");var t=this.canvas,e=t.contextTop;t._renderOverlay(e),this.restoreCanvasFromLayer("overlay")},_saveAndTransform:function(t){this.callSuper("_saveAndTransform",t),t.globalCompositeOperation="destination-out"},needsFullRender:function(){return this.callSuper("needsFullRender")||this._drawOverlayOnTop},onMouseDown:function(t,e){this.canvas._isMainEvent(e.e)&&(this._prepareForDrawing(t),this._captureDrawingPath(t),this._isErasing=!0,this.canvas.fire("erasing:start"),this._ready=!0,this._render())},_render:function(){this._ready&&(this.isRendering=1,this.renderBottomLayer(),this.renderTopLayer(),this.renderOverlay(),this.isRendering=0)},render:function(){return!!this._isErasing&&(this.isRendering?this.isRendering=T.util.requestAnimFrame(this._renderBound):this._render(),!0)},applyClipPathToPath:function(t,e,i){var r=t.calcTransformMatrix(),n=e.calcTransformMatrix(),o=T.util.multiplyTransformMatrices(T.util.invertTransform(r),i);return T.util.applyTransformToObject(e,T.util.multiplyTransformMatrices(o,n)),t.clipPath=e,t},clonePathWithClipPath:function(t,e,i){var r=e.calcTransformMatrix(),n=e.getClipPath(),o=this;t.clone((function(t){n.clone((function(e){i(o.applyClipPathToPath(t,e,r))}))}))},_addPathToObjectEraser:function(t,e){var i,r=this;if(t.forEachObject&&"deep"===t.erasable){var n=t._objects.filter((function(t){return t.erasable}));n.length>0&&t.clipPath?this.clonePathWithClipPath(e,t,(function(t){n.forEach((function(e){r._addPathToObjectEraser(e,t)}))})):n.length>0&&n.forEach((function(t){r._addPathToObjectEraser(t,e)}))}else{if(t.getEraser())i=t.clipPath;else{var o=t._getNonTransformedDimensions(),s=new T.Rect({fill:"rgb(0,0,0)",width:o.x,height:o.y,clipPath:t.clipPath,originX:"center",originY:"center"});i=new T.Group([s],{eraser:!0})}e.clone((function(e){e.globalCompositeOperation="destination-out";var n=T.util.multiplyTransformMatrices(T.util.invertTransform(t.calcTransformMatrix()),e.calcTransformMatrix());T.util.applyTransformToObject(e,n),i.addWithUpdate(e),t.set({clipPath:i,dirty:!0}),t.fire("erasing:end",{path:e}),t.group&&Array.isArray(r.__subTargets)&&r.__subTargets.push(t)}))}},applyEraserToCanvas:function(t){var e=this.canvas,i={};return["backgroundImage","overlayImage"].forEach((function(r){var n=e[r];n&&n.erasable&&(this._addPathToObjectEraser(n,t),i[r]=n)}),this),i},_finalizeAndAddPath:function(){var t=this.canvas.contextTop,e=this.canvas;t.closePath(),this.decimate&&(this._points=this.decimatePoints(this._points,this.decimate)),e.clearContext(e.contextTop),this._isErasing=!1;var i=this._points&&this._points.length>1?this.convertPointsToSVGPath(this._points):null;if(!i||this._isEmptySVGPath(i))return e.fire("erasing:end"),void e.requestRenderAll();var r=this.createPath(i);r.setCoords(),e.fire("before:path:created",{path:r});var n=this.applyEraserToCanvas(r),o=this;this.__subTargets=[];var s=[];e.forEachObject((function(t){t.erasable&&t.intersectsWithObject(r,!0,!0)&&(o._addPathToObjectEraser(t,r),s.push(t))})),e.fire("erasing:end",{path:r,targets:s,subTargets:this.__subTargets,drawables:n}),delete this.__subTargets,e.requestRenderAll(),r.setCoords(),this._resetShadow(),e.fire("path:created",{path:r})}})}()}(tt);var rt=tt.fabric;export{tt as default,rt as fabric}; +//# sourceMappingURL=/sm/4595deba885e6b95e012cf1ed9deed8a7b30edf3ae4c7d4bd5cc11d619b75c11.map \ No newline at end of file diff --git a/comfyui-easy-use/web_version/v2/assets/lodash-DkvwM0Z9.js b/comfyui-easy-use/web_version/v2/assets/lodash-DkvwM0Z9.js new file mode 100644 index 0000000000000000000000000000000000000000..d8c64ec8188d45c84c31267f31bcba7d86c0a346 --- /dev/null +++ b/comfyui-easy-use/web_version/v2/assets/lodash-DkvwM0Z9.js @@ -0,0 +1,9 @@ +var t="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function n(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}var r=function(){this.__data__=[],this.size=0};var e=function(t,n){return t===n||t!=t&&n!=n},u=e;var o=function(t,n){for(var r=t.length;r--;)if(u(t[r][0],n))return r;return-1},i=o,a=Array.prototype.splice;var c=o;var f=o;var l=o;var s=r,p=function(t){var n=this.__data__,r=i(n,t);return!(r<0)&&(r==n.length-1?n.pop():a.call(n,r,1),--this.size,!0)},h=function(t){var n=this.__data__,r=c(n,t);return r<0?void 0:n[r][1]},v=function(t){return f(this.__data__,t)>-1},_=function(t,n){var r=this.__data__,e=l(r,t);return e<0?(++this.size,r.push([t,n])):r[e][1]=n,this};function g(t){var n=-1,r=null==t?0:t.length;for(this.clear();++n-1&&t%1==0&&t-1&&t%1==0&&t<=9007199254740991},Tn=P,Wn=Un,Bn=ln,Cn={};Cn["[object Float32Array]"]=Cn["[object Float64Array]"]=Cn["[object Int8Array]"]=Cn["[object Int16Array]"]=Cn["[object Int32Array]"]=Cn["[object Uint8Array]"]=Cn["[object Uint8ClampedArray]"]=Cn["[object Uint16Array]"]=Cn["[object Uint32Array]"]=!0,Cn["[object Arguments]"]=Cn["[object Array]"]=Cn["[object ArrayBuffer]"]=Cn["[object Boolean]"]=Cn["[object DataView]"]=Cn["[object Date]"]=Cn["[object Error]"]=Cn["[object Function]"]=Cn["[object Map]"]=Cn["[object Number]"]=Cn["[object Object]"]=Cn["[object RegExp]"]=Cn["[object Set]"]=Cn["[object String]"]=Cn["[object WeakMap]"]=!1;var Ln=function(t){return Bn(t)&&Wn(t.length)&&!!Cn[Tn(t)]};var Pn=function(t){return function(n){return t(n)}},Fn={exports:{}};!function(t,n){var r=x,e=n&&!n.nodeType&&n,u=e&&t&&!t.nodeType&&t,o=u&&u.exports===e&&r.process,i=function(){try{var t=u&&u.require&&u.require("util").types;return t||o&&o.binding&&o.binding("util")}catch(n){}}();t.exports=i}(Fn,Fn.exports);var $n=Fn.exports,Dn=Ln,Mn=Pn,Nn=$n&&$n.isTypedArray,qn=Nn?Mn(Nn):Dn,Vn=fn,Zn=zn,Gn=Sn,Kn=kn,Hn=Rn,Jn=qn,Yn=Object.prototype.hasOwnProperty;var Qn=function(t,n){var r=Gn(t),e=!r&&Zn(t),u=!r&&!e&&Kn(t),o=!r&&!e&&!u&&Jn(t),i=r||e||u||o,a=i?Vn(t.length,String):[],c=a.length;for(var f in t)!n&&!Yn.call(t,f)||i&&("length"==f||u&&("offset"==f||"parent"==f)||o&&("buffer"==f||"byteLength"==f||"byteOffset"==f)||Hn(f,c))||a.push(f);return a},Xn=Object.prototype;var tr=function(t){var n=t&&t.constructor;return t===("function"==typeof n&&n.prototype||Xn)};var nr=function(t,n){return function(r){return t(n(r))}},rr=nr(Object.keys,Object),er=tr,ur=rr,or=Object.prototype.hasOwnProperty;var ir=N,ar=Un;var cr=function(t){return null!=t&&ar(t.length)&&!ir(t)},fr=Qn,lr=function(t){if(!er(t))return ur(t);var n=[];for(var r in Object(t))or.call(t,r)&&"constructor"!=r&&n.push(r);return n},sr=cr;var pr=function(t){return sr(t)?fr(t):lr(t)},hr=cn,vr=pr;var _r=function(t,n){return t&&hr(n,vr(n),t)};var gr=F,yr=tr,dr=function(t){var n=[];if(null!=t)for(var r in Object(t))n.push(r);return n},br=Object.prototype.hasOwnProperty;var wr=Qn,jr=function(t){if(!gr(t))return dr(t);var n=yr(t),r=[];for(var e in t)("constructor"!=e||!n&&br.call(t,e))&&r.push(e);return r},mr=cr;var xr=function(t){return mr(t)?wr(t,!0):jr(t)},Ar=cn,Or=xr;var zr=function(t,n){return t&&Ar(n,Or(n),t)},Sr={exports:{}};!function(t,n){var r=z,e=n&&!n.nodeType&&n,u=e&&t&&!t.nodeType&&t,o=u&&u.exports===e?r.Buffer:void 0,i=o?o.allocUnsafe:void 0;t.exports=function(t,n){if(n)return t.slice();var r=t.length,e=i?i(r):new t.constructor(r);return t.copy(e),e}}(Sr,Sr.exports);var Ir=Sr.exports;var kr=function(t,n){var r=-1,e=t.length;for(n||(n=Array(e));++r + * Copyright OpenJS Foundation and other contributors + * Released under MIT license + * Based on Underscore.js 1.8.3 + * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + */!function(n,r){(function(){var e,u="Expected a function",o="__lodash_hash_undefined__",i="__lodash_placeholder__",a=16,c=32,f=64,l=128,s=256,p=1/0,h=9007199254740991,v=NaN,_=4294967295,g=[["ary",l],["bind",1],["bindKey",2],["curry",8],["curryRight",a],["flip",512],["partial",c],["partialRight",f],["rearg",s]],y="[object Arguments]",d="[object Array]",b="[object Boolean]",w="[object Date]",j="[object Error]",m="[object Function]",x="[object GeneratorFunction]",A="[object Map]",O="[object Number]",z="[object Object]",S="[object Promise]",I="[object RegExp]",k="[object Set]",E="[object String]",R="[object Symbol]",U="[object WeakMap]",T="[object ArrayBuffer]",W="[object DataView]",B="[object Float32Array]",C="[object Float64Array]",L="[object Int8Array]",P="[object Int16Array]",F="[object Int32Array]",$="[object Uint8Array]",D="[object Uint8ClampedArray]",M="[object Uint16Array]",N="[object Uint32Array]",q=/\b__p \+= '';/g,V=/\b(__p \+=) '' \+/g,Z=/(__e\(.*?\)|\b__t\)) \+\n'';/g,G=/&(?:amp|lt|gt|quot|#39);/g,K=/[&<>"']/g,H=RegExp(G.source),J=RegExp(K.source),Y=/<%-([\s\S]+?)%>/g,Q=/<%([\s\S]+?)%>/g,X=/<%=([\s\S]+?)%>/g,tt=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,nt=/^\w*$/,rt=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,et=/[\\^$.*+?()[\]{}|]/g,ut=RegExp(et.source),ot=/^\s+/,it=/\s/,at=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,ct=/\{\n\/\* \[wrapped with (.+)\] \*/,ft=/,? & /,lt=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g,st=/[()=,{}\[\]\/\s]/,pt=/\\(\\)?/g,ht=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,vt=/\w*$/,_t=/^[-+]0x[0-9a-f]+$/i,gt=/^0b[01]+$/i,yt=/^\[object .+?Constructor\]$/,dt=/^0o[0-7]+$/i,bt=/^(?:0|[1-9]\d*)$/,wt=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,jt=/($^)/,mt=/['\n\r\u2028\u2029\\]/g,xt="\\ud800-\\udfff",At="\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff",Ot="\\u2700-\\u27bf",zt="a-z\\xdf-\\xf6\\xf8-\\xff",St="A-Z\\xc0-\\xd6\\xd8-\\xde",It="\\ufe0e\\ufe0f",kt="\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",Et="['’]",Rt="["+xt+"]",Ut="["+kt+"]",Tt="["+At+"]",Wt="\\d+",Bt="["+Ot+"]",Ct="["+zt+"]",Lt="[^"+xt+kt+Wt+Ot+zt+St+"]",Pt="\\ud83c[\\udffb-\\udfff]",Ft="[^"+xt+"]",$t="(?:\\ud83c[\\udde6-\\uddff]){2}",Dt="[\\ud800-\\udbff][\\udc00-\\udfff]",Mt="["+St+"]",Nt="\\u200d",qt="(?:"+Ct+"|"+Lt+")",Vt="(?:"+Mt+"|"+Lt+")",Zt="(?:['’](?:d|ll|m|re|s|t|ve))?",Gt="(?:['’](?:D|LL|M|RE|S|T|VE))?",Kt="(?:"+Tt+"|"+Pt+")"+"?",Ht="["+It+"]?",Jt=Ht+Kt+("(?:"+Nt+"(?:"+[Ft,$t,Dt].join("|")+")"+Ht+Kt+")*"),Yt="(?:"+[Bt,$t,Dt].join("|")+")"+Jt,Qt="(?:"+[Ft+Tt+"?",Tt,$t,Dt,Rt].join("|")+")",Xt=RegExp(Et,"g"),tn=RegExp(Tt,"g"),nn=RegExp(Pt+"(?="+Pt+")|"+Qt+Jt,"g"),rn=RegExp([Mt+"?"+Ct+"+"+Zt+"(?="+[Ut,Mt,"$"].join("|")+")",Vt+"+"+Gt+"(?="+[Ut,Mt+qt,"$"].join("|")+")",Mt+"?"+qt+"+"+Zt,Mt+"+"+Gt,"\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])","\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])",Wt,Yt].join("|"),"g"),en=RegExp("["+Nt+xt+At+It+"]"),un=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,on=["Array","Buffer","DataView","Date","Error","Float32Array","Float64Array","Function","Int8Array","Int16Array","Int32Array","Map","Math","Object","Promise","RegExp","Set","String","Symbol","TypeError","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","WeakMap","_","clearTimeout","isFinite","parseInt","setTimeout"],an=-1,cn={};cn[B]=cn[C]=cn[L]=cn[P]=cn[F]=cn[$]=cn[D]=cn[M]=cn[N]=!0,cn[y]=cn[d]=cn[T]=cn[b]=cn[W]=cn[w]=cn[j]=cn[m]=cn[A]=cn[O]=cn[z]=cn[I]=cn[k]=cn[E]=cn[U]=!1;var fn={};fn[y]=fn[d]=fn[T]=fn[W]=fn[b]=fn[w]=fn[B]=fn[C]=fn[L]=fn[P]=fn[F]=fn[A]=fn[O]=fn[z]=fn[I]=fn[k]=fn[E]=fn[R]=fn[$]=fn[D]=fn[M]=fn[N]=!0,fn[j]=fn[m]=fn[U]=!1;var ln={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},sn=parseFloat,pn=parseInt,hn="object"==typeof t&&t&&t.Object===Object&&t,vn="object"==typeof self&&self&&self.Object===Object&&self,_n=hn||vn||Function("return this")(),gn=r&&!r.nodeType&&r,yn=gn&&n&&!n.nodeType&&n,dn=yn&&yn.exports===gn,bn=dn&&hn.process,wn=function(){try{var t=yn&&yn.require&&yn.require("util").types;return t||bn&&bn.binding&&bn.binding("util")}catch(n){}}(),jn=wn&&wn.isArrayBuffer,mn=wn&&wn.isDate,xn=wn&&wn.isMap,An=wn&&wn.isRegExp,On=wn&&wn.isSet,zn=wn&&wn.isTypedArray;function Sn(t,n,r){switch(r.length){case 0:return t.call(n);case 1:return t.call(n,r[0]);case 2:return t.call(n,r[0],r[1]);case 3:return t.call(n,r[0],r[1],r[2])}return t.apply(n,r)}function In(t,n,r,e){for(var u=-1,o=null==t?0:t.length;++u-1}function Wn(t,n,r){for(var e=-1,u=null==t?0:t.length;++e-1;);return r}function er(t,n){for(var r=t.length;r--&&Nn(n,t[r],0)>-1;);return r}var ur=Kn({"À":"A","Á":"A","Â":"A","Ã":"A","Ä":"A","Å":"A","à":"a","á":"a","â":"a","ã":"a","ä":"a","å":"a","Ç":"C","ç":"c","Ð":"D","ð":"d","È":"E","É":"E","Ê":"E","Ë":"E","è":"e","é":"e","ê":"e","ë":"e","Ì":"I","Í":"I","Î":"I","Ï":"I","ì":"i","í":"i","î":"i","ï":"i","Ñ":"N","ñ":"n","Ò":"O","Ó":"O","Ô":"O","Õ":"O","Ö":"O","Ø":"O","ò":"o","ó":"o","ô":"o","õ":"o","ö":"o","ø":"o","Ù":"U","Ú":"U","Û":"U","Ü":"U","ù":"u","ú":"u","û":"u","ü":"u","Ý":"Y","ý":"y","ÿ":"y","Æ":"Ae","æ":"ae","Þ":"Th","þ":"th","ß":"ss","Ā":"A","Ă":"A","Ą":"A","ā":"a","ă":"a","ą":"a","Ć":"C","Ĉ":"C","Ċ":"C","Č":"C","ć":"c","ĉ":"c","ċ":"c","č":"c","Ď":"D","Đ":"D","ď":"d","đ":"d","Ē":"E","Ĕ":"E","Ė":"E","Ę":"E","Ě":"E","ē":"e","ĕ":"e","ė":"e","ę":"e","ě":"e","Ĝ":"G","Ğ":"G","Ġ":"G","Ģ":"G","ĝ":"g","ğ":"g","ġ":"g","ģ":"g","Ĥ":"H","Ħ":"H","ĥ":"h","ħ":"h","Ĩ":"I","Ī":"I","Ĭ":"I","Į":"I","İ":"I","ĩ":"i","ī":"i","ĭ":"i","į":"i","ı":"i","Ĵ":"J","ĵ":"j","Ķ":"K","ķ":"k","ĸ":"k","Ĺ":"L","Ļ":"L","Ľ":"L","Ŀ":"L","Ł":"L","ĺ":"l","ļ":"l","ľ":"l","ŀ":"l","ł":"l","Ń":"N","Ņ":"N","Ň":"N","Ŋ":"N","ń":"n","ņ":"n","ň":"n","ŋ":"n","Ō":"O","Ŏ":"O","Ő":"O","ō":"o","ŏ":"o","ő":"o","Ŕ":"R","Ŗ":"R","Ř":"R","ŕ":"r","ŗ":"r","ř":"r","Ś":"S","Ŝ":"S","Ş":"S","Š":"S","ś":"s","ŝ":"s","ş":"s","š":"s","Ţ":"T","Ť":"T","Ŧ":"T","ţ":"t","ť":"t","ŧ":"t","Ũ":"U","Ū":"U","Ŭ":"U","Ů":"U","Ű":"U","Ų":"U","ũ":"u","ū":"u","ŭ":"u","ů":"u","ű":"u","ų":"u","Ŵ":"W","ŵ":"w","Ŷ":"Y","ŷ":"y","Ÿ":"Y","Ź":"Z","Ż":"Z","Ž":"Z","ź":"z","ż":"z","ž":"z","IJ":"IJ","ij":"ij","Œ":"Oe","œ":"oe","ʼn":"'n","ſ":"s"}),or=Kn({"&":"&","<":"<",">":">",'"':""","'":"'"});function ir(t){return"\\"+ln[t]}function ar(t){return en.test(t)}function cr(t){var n=-1,r=Array(t.size);return t.forEach((function(t,e){r[++n]=[e,t]})),r}function fr(t,n){return function(r){return t(n(r))}}function lr(t,n){for(var r=-1,e=t.length,u=0,o=[];++r",""":'"',"'":"'"});var gr=function t(n){var r=(n=null==n?_n:gr.defaults(_n.Object(),n,gr.pick(_n,on))).Array,it=n.Date,xt=n.Error,At=n.Function,Ot=n.Math,zt=n.Object,St=n.RegExp,It=n.String,kt=n.TypeError,Et=r.prototype,Rt=At.prototype,Ut=zt.prototype,Tt=n["__core-js_shared__"],Wt=Rt.toString,Bt=Ut.hasOwnProperty,Ct=0,Lt=function(){var t=/[^.]+$/.exec(Tt&&Tt.keys&&Tt.keys.IE_PROTO||"");return t?"Symbol(src)_1."+t:""}(),Pt=Ut.toString,Ft=Wt.call(zt),$t=_n._,Dt=St("^"+Wt.call(Bt).replace(et,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),Mt=dn?n.Buffer:e,Nt=n.Symbol,qt=n.Uint8Array,Vt=Mt?Mt.allocUnsafe:e,Zt=fr(zt.getPrototypeOf,zt),Gt=zt.create,Kt=Ut.propertyIsEnumerable,Ht=Et.splice,Jt=Nt?Nt.isConcatSpreadable:e,Yt=Nt?Nt.iterator:e,Qt=Nt?Nt.toStringTag:e,nn=function(){try{var t=lo(zt,"defineProperty");return t({},"",{}),t}catch(n){}}(),en=n.clearTimeout!==_n.clearTimeout&&n.clearTimeout,ln=it&&it.now!==_n.Date.now&&it.now,hn=n.setTimeout!==_n.setTimeout&&n.setTimeout,vn=Ot.ceil,gn=Ot.floor,yn=zt.getOwnPropertySymbols,bn=Mt?Mt.isBuffer:e,wn=n.isFinite,$n=Et.join,Kn=fr(zt.keys,zt),yr=Ot.max,dr=Ot.min,br=it.now,wr=n.parseInt,jr=Ot.random,mr=Et.reverse,xr=lo(n,"DataView"),Ar=lo(n,"Map"),Or=lo(n,"Promise"),zr=lo(n,"Set"),Sr=lo(n,"WeakMap"),Ir=lo(zt,"create"),kr=Sr&&new Sr,Er={},Rr=$o(xr),Ur=$o(Ar),Tr=$o(Or),Wr=$o(zr),Br=$o(Sr),Cr=Nt?Nt.prototype:e,Lr=Cr?Cr.valueOf:e,Pr=Cr?Cr.toString:e;function Fr(t){if(ea(t)&&!Zi(t)&&!(t instanceof Nr)){if(t instanceof Mr)return t;if(Bt.call(t,"__wrapped__"))return Do(t)}return new Mr(t)}var $r=function(){function t(){}return function(n){if(!ra(n))return{};if(Gt)return Gt(n);t.prototype=n;var r=new t;return t.prototype=e,r}}();function Dr(){}function Mr(t,n){this.__wrapped__=t,this.__actions__=[],this.__chain__=!!n,this.__index__=0,this.__values__=e}function Nr(t){this.__wrapped__=t,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=_,this.__views__=[]}function qr(t){var n=-1,r=null==t?0:t.length;for(this.clear();++n=n?t:n)),t}function ae(t,n,r,u,o,i){var a,c=1&n,f=2&n,l=4&n;if(r&&(a=o?r(t,u,o,i):r(t)),a!==e)return a;if(!ra(t))return t;var s=Zi(t);if(s){if(a=function(t){var n=t.length,r=new t.constructor(n);n&&"string"==typeof t[0]&&Bt.call(t,"index")&&(r.index=t.index,r.input=t.input);return r}(t),!c)return Iu(t,a)}else{var p=ho(t),h=p==m||p==x;if(Ji(t))return mu(t,c);if(p==z||p==y||h&&!o){if(a=f||h?{}:_o(t),!c)return f?function(t,n){return ku(t,po(t),n)}(t,function(t,n){return t&&ku(n,Wa(n),t)}(a,t)):function(t,n){return ku(t,so(t),n)}(t,ee(a,t))}else{if(!fn[p])return o?t:{};a=function(t,n,r){var e=t.constructor;switch(n){case T:return xu(t);case b:case w:return new e(+t);case W:return function(t,n){var r=n?xu(t.buffer):t.buffer;return new t.constructor(r,t.byteOffset,t.byteLength)}(t,r);case B:case C:case L:case P:case F:case $:case D:case M:case N:return Au(t,r);case A:return new e;case O:case E:return new e(t);case I:return function(t){var n=new t.constructor(t.source,vt.exec(t));return n.lastIndex=t.lastIndex,n}(t);case k:return new e;case R:return u=t,Lr?zt(Lr.call(u)):{}}var u}(t,p,c)}}i||(i=new Kr);var v=i.get(t);if(v)return v;i.set(t,a),ca(t)?t.forEach((function(e){a.add(ae(e,n,r,e,t,i))})):ua(t)&&t.forEach((function(e,u){a.set(u,ae(e,n,r,u,t,i))}));var _=s?e:(l?f?eo:ro:f?Wa:Ta)(t);return kn(_||t,(function(e,u){_&&(e=t[u=e]),te(a,u,ae(e,n,r,u,t,i))})),a}function ce(t,n,r){var u=r.length;if(null==t)return!u;for(t=zt(t);u--;){var o=r[u],i=n[o],a=t[o];if(a===e&&!(o in t)||!i(a))return!1}return!0}function fe(t,n,r){if("function"!=typeof t)throw new kt(u);return Eo((function(){t.apply(e,r)}),n)}function le(t,n,r,e){var u=-1,o=Tn,i=!0,a=t.length,c=[],f=n.length;if(!a)return c;r&&(n=Bn(n,Xn(r))),e?(o=Wn,i=!1):n.length>=200&&(o=nr,i=!1,n=new Gr(n));t:for(;++u-1},Vr.prototype.set=function(t,n){var r=this.__data__,e=ne(r,t);return e<0?(++this.size,r.push([t,n])):r[e][1]=n,this},Zr.prototype.clear=function(){this.size=0,this.__data__={hash:new qr,map:new(Ar||Vr),string:new qr}},Zr.prototype.delete=function(t){var n=co(this,t).delete(t);return this.size-=n?1:0,n},Zr.prototype.get=function(t){return co(this,t).get(t)},Zr.prototype.has=function(t){return co(this,t).has(t)},Zr.prototype.set=function(t,n){var r=co(this,t),e=r.size;return r.set(t,n),this.size+=r.size==e?0:1,this},Gr.prototype.add=Gr.prototype.push=function(t){return this.__data__.set(t,o),this},Gr.prototype.has=function(t){return this.__data__.has(t)},Kr.prototype.clear=function(){this.__data__=new Vr,this.size=0},Kr.prototype.delete=function(t){var n=this.__data__,r=n.delete(t);return this.size=n.size,r},Kr.prototype.get=function(t){return this.__data__.get(t)},Kr.prototype.has=function(t){return this.__data__.has(t)},Kr.prototype.set=function(t,n){var r=this.__data__;if(r instanceof Vr){var e=r.__data__;if(!Ar||e.length<199)return e.push([t,n]),this.size=++r.size,this;r=this.__data__=new Zr(e)}return r.set(t,n),this.size=r.size,this};var se=Uu(be),pe=Uu(we,!0);function he(t,n){var r=!0;return se(t,(function(t,e,u){return r=!!n(t,e,u)})),r}function ve(t,n,r){for(var u=-1,o=t.length;++u0&&r(a)?n>1?ge(a,n-1,r,e,u):Cn(u,a):e||(u[u.length]=a)}return u}var ye=Tu(),de=Tu(!0);function be(t,n){return t&&ye(t,n,Ta)}function we(t,n){return t&&de(t,n,Ta)}function je(t,n){return Un(n,(function(n){return Xi(t[n])}))}function me(t,n){for(var r=0,u=(n=du(n,t)).length;null!=t&&rn}function ze(t,n){return null!=t&&Bt.call(t,n)}function Se(t,n){return null!=t&&n in zt(t)}function Ie(t,n,u){for(var o=u?Wn:Tn,i=t[0].length,a=t.length,c=a,f=r(a),l=1/0,s=[];c--;){var p=t[c];c&&n&&(p=Bn(p,Xn(n))),l=dr(p.length,l),f[c]=!u&&(n||i>=120&&p.length>=120)?new Gr(c&&p):e}p=t[0];var h=-1,v=f[0];t:for(;++h=a?c:c*("desc"==r[e]?-1:1)}return t.index-n.index}(t,n,r)}))}function qe(t,n,r){for(var e=-1,u=n.length,o={};++e-1;)a!==t&&Ht.call(a,c,1),Ht.call(t,c,1);return t}function Ze(t,n){for(var r=t?n.length:0,e=r-1;r--;){var u=n[r];if(r==e||u!==o){var o=u;yo(u)?Ht.call(t,u,1):lu(t,u)}}return t}function Ge(t,n){return t+gn(jr()*(n-t+1))}function Ke(t,n){var r="";if(!t||n<1||n>h)return r;do{n%2&&(r+=t),(n=gn(n/2))&&(t+=t)}while(n);return r}function He(t,n){return Ro(zo(t,n,oc),t+"")}function Je(t){return Jr(Ma(t))}function Ye(t,n){var r=Ma(t);return Wo(r,ie(n,0,r.length))}function Qe(t,n,r,u){if(!ra(t))return t;for(var o=-1,i=(n=du(n,t)).length,a=i-1,c=t;null!=c&&++oo?0:o+n),(e=e>o?o:e)<0&&(e+=o),o=n>e?0:e-n>>>0,n>>>=0;for(var i=r(o);++u>>1,i=t[o];null!==i&&!la(i)&&(r?i<=n:i=200){var f=n?null:Ku(t);if(f)return sr(f);i=!1,u=nr,c=new Gr}else c=n?[]:a;t:for(;++e=u?t:ru(t,n,r)}var ju=en||function(t){return _n.clearTimeout(t)};function mu(t,n){if(n)return t.slice();var r=t.length,e=Vt?Vt(r):new t.constructor(r);return t.copy(e),e}function xu(t){var n=new t.constructor(t.byteLength);return new qt(n).set(new qt(t)),n}function Au(t,n){var r=n?xu(t.buffer):t.buffer;return new t.constructor(r,t.byteOffset,t.length)}function Ou(t,n){if(t!==n){var r=t!==e,u=null===t,o=t==t,i=la(t),a=n!==e,c=null===n,f=n==n,l=la(n);if(!c&&!l&&!i&&t>n||i&&a&&f&&!c&&!l||u&&a&&f||!r&&f||!o)return 1;if(!u&&!i&&!l&&t1?r[o-1]:e,a=o>2?r[2]:e;for(i=t.length>3&&"function"==typeof i?(o--,i):e,a&&bo(r[0],r[1],a)&&(i=o<3?e:i,o=1),n=zt(n);++u-1?o[i?n[a]:a]:e}}function Pu(t){return no((function(n){var r=n.length,o=r,i=Mr.prototype.thru;for(t&&n.reverse();o--;){var a=n[o];if("function"!=typeof a)throw new kt(u);if(i&&!c&&"wrapper"==oo(a))var c=new Mr([],!0)}for(o=c?o:r;++o1&&w.reverse(),h&&sc))return!1;var l=i.get(t),s=i.get(n);if(l&&s)return l==n&&s==t;var p=-1,h=!0,v=2&r?new Gr:e;for(i.set(t,n),i.set(n,t);++p-1&&t%1==0&&t1?"& ":"")+n[e],n=n.join(r>2?", ":" "),t.replace(at,"{\n/* [wrapped with "+n+"] */\n")}(e,function(t,n){return kn(g,(function(r){var e="_."+r[0];n&r[1]&&!Tn(t,e)&&t.push(e)})),t.sort()}(function(t){var n=t.match(ct);return n?n[1].split(ft):[]}(e),r)))}function To(t){var n=0,r=0;return function(){var u=br(),o=16-(u-r);if(r=u,o>0){if(++n>=800)return arguments[0]}else n=0;return t.apply(e,arguments)}}function Wo(t,n){var r=-1,u=t.length,o=u-1;for(n=n===e?u:n;++r1?t[n-1]:e;return r="function"==typeof r?(t.pop(),r):e,ai(t,r)}));function vi(t){var n=Fr(t);return n.__chain__=!0,n}function _i(t,n){return n(t)}var gi=no((function(t){var n=t.length,r=n?t[0]:0,u=this.__wrapped__,o=function(n){return oe(n,t)};return!(n>1||this.__actions__.length)&&u instanceof Nr&&yo(r)?((u=u.slice(r,+r+(n?1:0))).__actions__.push({func:_i,args:[o],thisArg:e}),new Mr(u,this.__chain__).thru((function(t){return n&&!t.length&&t.push(e),t}))):this.thru(o)}));var yi=Eu((function(t,n,r){Bt.call(t,r)?++t[r]:ue(t,r,1)}));var di=Lu(Vo),bi=Lu(Zo);function wi(t,n){return(Zi(t)?kn:se)(t,ao(n,3))}function ji(t,n){return(Zi(t)?En:pe)(t,ao(n,3))}var mi=Eu((function(t,n,r){Bt.call(t,r)?t[r].push(n):ue(t,r,[n])}));var xi=He((function(t,n,e){var u=-1,o="function"==typeof n,i=Ki(t)?r(t.length):[];return se(t,(function(t){i[++u]=o?Sn(n,t,e):ke(t,n,e)})),i})),Ai=Eu((function(t,n,r){ue(t,r,n)}));function Oi(t,n){return(Zi(t)?Bn:Pe)(t,ao(n,3))}var zi=Eu((function(t,n,r){t[r?0:1].push(n)}),(function(){return[[],[]]}));var Si=He((function(t,n){if(null==t)return[];var r=n.length;return r>1&&bo(t,n[0],n[1])?n=[]:r>2&&bo(n[0],n[1],n[2])&&(n=[n[0]]),Ne(t,ge(n,1),[])})),Ii=ln||function(){return _n.Date.now()};function ki(t,n,r){return n=r?e:n,n=t&&null==n?t.length:n,Ju(t,l,e,e,e,e,n)}function Ei(t,n){var r;if("function"!=typeof n)throw new kt(u);return t=ga(t),function(){return--t>0&&(r=n.apply(this,arguments)),t<=1&&(n=e),r}}var Ri=He((function(t,n,r){var e=1;if(r.length){var u=lr(r,io(Ri));e|=c}return Ju(t,e,n,r,u)})),Ui=He((function(t,n,r){var e=3;if(r.length){var u=lr(r,io(Ui));e|=c}return Ju(n,e,t,r,u)}));function Ti(t,n,r){var o,i,a,c,f,l,s=0,p=!1,h=!1,v=!0;if("function"!=typeof t)throw new kt(u);function _(n){var r=o,u=i;return o=i=e,s=n,c=t.apply(u,r)}function g(t){var r=t-l;return l===e||r>=n||r<0||h&&t-s>=a}function y(){var t=Ii();if(g(t))return d(t);f=Eo(y,function(t){var r=n-(t-l);return h?dr(r,a-(t-s)):r}(t))}function d(t){return f=e,v&&o?_(t):(o=i=e,c)}function b(){var t=Ii(),r=g(t);if(o=arguments,i=this,l=t,r){if(f===e)return function(t){return s=t,f=Eo(y,n),p?_(t):c}(l);if(h)return ju(f),f=Eo(y,n),_(l)}return f===e&&(f=Eo(y,n)),c}return n=da(n)||0,ra(r)&&(p=!!r.leading,a=(h="maxWait"in r)?yr(da(r.maxWait)||0,n):a,v="trailing"in r?!!r.trailing:v),b.cancel=function(){f!==e&&ju(f),s=0,o=l=i=f=e},b.flush=function(){return f===e?c:d(Ii())},b}var Wi=He((function(t,n){return fe(t,1,n)})),Bi=He((function(t,n,r){return fe(t,da(n)||0,r)}));function Ci(t,n){if("function"!=typeof t||null!=n&&"function"!=typeof n)throw new kt(u);var r=function(){var e=arguments,u=n?n.apply(this,e):e[0],o=r.cache;if(o.has(u))return o.get(u);var i=t.apply(this,e);return r.cache=o.set(u,i)||o,i};return r.cache=new(Ci.Cache||Zr),r}function Li(t){if("function"!=typeof t)throw new kt(u);return function(){var n=arguments;switch(n.length){case 0:return!t.call(this);case 1:return!t.call(this,n[0]);case 2:return!t.call(this,n[0],n[1]);case 3:return!t.call(this,n[0],n[1],n[2])}return!t.apply(this,n)}}Ci.Cache=Zr;var Pi=bu((function(t,n){var r=(n=1==n.length&&Zi(n[0])?Bn(n[0],Xn(ao())):Bn(ge(n,1),Xn(ao()))).length;return He((function(e){for(var u=-1,o=dr(e.length,r);++u=n})),Vi=Ee(function(){return arguments}())?Ee:function(t){return ea(t)&&Bt.call(t,"callee")&&!Kt.call(t,"callee")},Zi=r.isArray,Gi=jn?Xn(jn):function(t){return ea(t)&&Ae(t)==T};function Ki(t){return null!=t&&na(t.length)&&!Xi(t)}function Hi(t){return ea(t)&&Ki(t)}var Ji=bn||dc,Yi=mn?Xn(mn):function(t){return ea(t)&&Ae(t)==w};function Qi(t){if(!ea(t))return!1;var n=Ae(t);return n==j||"[object DOMException]"==n||"string"==typeof t.message&&"string"==typeof t.name&&!ia(t)}function Xi(t){if(!ra(t))return!1;var n=Ae(t);return n==m||n==x||"[object AsyncFunction]"==n||"[object Proxy]"==n}function ta(t){return"number"==typeof t&&t==ga(t)}function na(t){return"number"==typeof t&&t>-1&&t%1==0&&t<=h}function ra(t){var n=typeof t;return null!=t&&("object"==n||"function"==n)}function ea(t){return null!=t&&"object"==typeof t}var ua=xn?Xn(xn):function(t){return ea(t)&&ho(t)==A};function oa(t){return"number"==typeof t||ea(t)&&Ae(t)==O}function ia(t){if(!ea(t)||Ae(t)!=z)return!1;var n=Zt(t);if(null===n)return!0;var r=Bt.call(n,"constructor")&&n.constructor;return"function"==typeof r&&r instanceof r&&Wt.call(r)==Ft}var aa=An?Xn(An):function(t){return ea(t)&&Ae(t)==I};var ca=On?Xn(On):function(t){return ea(t)&&ho(t)==k};function fa(t){return"string"==typeof t||!Zi(t)&&ea(t)&&Ae(t)==E}function la(t){return"symbol"==typeof t||ea(t)&&Ae(t)==R}var sa=zn?Xn(zn):function(t){return ea(t)&&na(t.length)&&!!cn[Ae(t)]};var pa=Vu(Le),ha=Vu((function(t,n){return t<=n}));function va(t){if(!t)return[];if(Ki(t))return fa(t)?hr(t):Iu(t);if(Yt&&t[Yt])return function(t){for(var n,r=[];!(n=t.next()).done;)r.push(n.value);return r}(t[Yt]());var n=ho(t);return(n==A?cr:n==k?sr:Ma)(t)}function _a(t){return t?(t=da(t))===p||t===-1/0?17976931348623157e292*(t<0?-1:1):t==t?t:0:0===t?t:0}function ga(t){var n=_a(t),r=n%1;return n==n?r?n-r:n:0}function ya(t){return t?ie(ga(t),0,_):0}function da(t){if("number"==typeof t)return t;if(la(t))return v;if(ra(t)){var n="function"==typeof t.valueOf?t.valueOf():t;t=ra(n)?n+"":n}if("string"!=typeof t)return 0===t?t:+t;t=Qn(t);var r=gt.test(t);return r||dt.test(t)?pn(t.slice(2),r?2:8):_t.test(t)?v:+t}function ba(t){return ku(t,Wa(t))}function wa(t){return null==t?"":cu(t)}var ja=Ru((function(t,n){if(xo(n)||Ki(n))ku(n,Ta(n),t);else for(var r in n)Bt.call(n,r)&&te(t,r,n[r])})),ma=Ru((function(t,n){ku(n,Wa(n),t)})),xa=Ru((function(t,n,r,e){ku(n,Wa(n),t,e)})),Aa=Ru((function(t,n,r,e){ku(n,Ta(n),t,e)})),Oa=no(oe);var za=He((function(t,n){t=zt(t);var r=-1,u=n.length,o=u>2?n[2]:e;for(o&&bo(n[0],n[1],o)&&(u=1);++r1),n})),ku(t,eo(t),r),e&&(r=ae(r,7,Xu));for(var u=n.length;u--;)lu(r,n[u]);return r}));var Pa=no((function(t,n){return null==t?{}:function(t,n){return qe(t,n,(function(n,r){return ka(t,r)}))}(t,n)}));function Fa(t,n){if(null==t)return{};var r=Bn(eo(t),(function(t){return[t]}));return n=ao(n),qe(t,r,(function(t,r){return n(t,r[0])}))}var $a=Hu(Ta),Da=Hu(Wa);function Ma(t){return null==t?[]:tr(t,Ta(t))}var Na=Bu((function(t,n,r){return n=n.toLowerCase(),t+(r?qa(n):n)}));function qa(t){return Qa(wa(t).toLowerCase())}function Va(t){return(t=wa(t))&&t.replace(wt,ur).replace(tn,"")}var Za=Bu((function(t,n,r){return t+(r?"-":"")+n.toLowerCase()})),Ga=Bu((function(t,n,r){return t+(r?" ":"")+n.toLowerCase()})),Ka=Wu("toLowerCase");var Ha=Bu((function(t,n,r){return t+(r?"_":"")+n.toLowerCase()}));var Ja=Bu((function(t,n,r){return t+(r?" ":"")+Qa(n)}));var Ya=Bu((function(t,n,r){return t+(r?" ":"")+n.toUpperCase()})),Qa=Wu("toUpperCase");function Xa(t,n,r){return t=wa(t),(n=r?e:n)===e?function(t){return un.test(t)}(t)?function(t){return t.match(rn)||[]}(t):function(t){return t.match(lt)||[]}(t):t.match(n)||[]}var tc=He((function(t,n){try{return Sn(t,e,n)}catch(r){return Qi(r)?r:new xt(r)}})),nc=no((function(t,n){return kn(n,(function(n){n=Fo(n),ue(t,n,Ri(t[n],t))})),t}));function rc(t){return function(){return t}}var ec=Pu(),uc=Pu(!0);function oc(t){return t}function ic(t){return We("function"==typeof t?t:ae(t,1))}var ac=He((function(t,n){return function(r){return ke(r,t,n)}})),cc=He((function(t,n){return function(r){return ke(t,r,n)}}));function fc(t,n,r){var e=Ta(n),u=je(n,e);null!=r||ra(n)&&(u.length||!e.length)||(r=n,n=t,t=this,u=je(n,Ta(n)));var o=!(ra(r)&&"chain"in r&&!r.chain),i=Xi(t);return kn(u,(function(r){var e=n[r];t[r]=e,i&&(t.prototype[r]=function(){var n=this.__chain__;if(o||n){var r=t(this.__wrapped__);return(r.__actions__=Iu(this.__actions__)).push({func:e,args:arguments,thisArg:t}),r.__chain__=n,r}return e.apply(t,Cn([this.value()],arguments))})})),t}function lc(){}var sc=Mu(Bn),pc=Mu(Rn),hc=Mu(Fn);function vc(t){return wo(t)?Gn(Fo(t)):function(t){return function(n){return me(n,t)}}(t)}var _c=qu(),gc=qu(!0);function yc(){return[]}function dc(){return!1}var bc=Du((function(t,n){return t+n}),0),wc=Gu("ceil"),jc=Du((function(t,n){return t/n}),1),mc=Gu("floor");var xc,Ac=Du((function(t,n){return t*n}),1),Oc=Gu("round"),zc=Du((function(t,n){return t-n}),0);return Fr.after=function(t,n){if("function"!=typeof n)throw new kt(u);return t=ga(t),function(){if(--t<1)return n.apply(this,arguments)}},Fr.ary=ki,Fr.assign=ja,Fr.assignIn=ma,Fr.assignInWith=xa,Fr.assignWith=Aa,Fr.at=Oa,Fr.before=Ei,Fr.bind=Ri,Fr.bindAll=nc,Fr.bindKey=Ui,Fr.castArray=function(){if(!arguments.length)return[];var t=arguments[0];return Zi(t)?t:[t]},Fr.chain=vi,Fr.chunk=function(t,n,u){n=(u?bo(t,n,u):n===e)?1:yr(ga(n),0);var o=null==t?0:t.length;if(!o||n<1)return[];for(var i=0,a=0,c=r(vn(o/n));io?0:o+r),(u=u===e||u>o?o:ga(u))<0&&(u+=o),u=r>u?0:ya(u);r>>0)?(t=wa(t))&&("string"==typeof n||null!=n&&!aa(n))&&!(n=cu(n))&&ar(t)?wu(hr(t),0,r):t.split(n,r):[]},Fr.spread=function(t,n){if("function"!=typeof t)throw new kt(u);return n=null==n?0:yr(ga(n),0),He((function(r){var e=r[n],u=wu(r,0,n);return e&&Cn(u,e),Sn(t,this,u)}))},Fr.tail=function(t){var n=null==t?0:t.length;return n?ru(t,1,n):[]},Fr.take=function(t,n,r){return t&&t.length?ru(t,0,(n=r||n===e?1:ga(n))<0?0:n):[]},Fr.takeRight=function(t,n,r){var u=null==t?0:t.length;return u?ru(t,(n=u-(n=r||n===e?1:ga(n)))<0?0:n,u):[]},Fr.takeRightWhile=function(t,n){return t&&t.length?pu(t,ao(n,3),!1,!0):[]},Fr.takeWhile=function(t,n){return t&&t.length?pu(t,ao(n,3)):[]},Fr.tap=function(t,n){return n(t),t},Fr.throttle=function(t,n,r){var e=!0,o=!0;if("function"!=typeof t)throw new kt(u);return ra(r)&&(e="leading"in r?!!r.leading:e,o="trailing"in r?!!r.trailing:o),Ti(t,n,{leading:e,maxWait:n,trailing:o})},Fr.thru=_i,Fr.toArray=va,Fr.toPairs=$a,Fr.toPairsIn=Da,Fr.toPath=function(t){return Zi(t)?Bn(t,Fo):la(t)?[t]:Iu(Po(wa(t)))},Fr.toPlainObject=ba,Fr.transform=function(t,n,r){var e=Zi(t),u=e||Ji(t)||sa(t);if(n=ao(n,4),null==r){var o=t&&t.constructor;r=u?e?new o:[]:ra(t)&&Xi(o)?$r(Zt(t)):{}}return(u?kn:be)(t,(function(t,e,u){return n(r,t,e,u)})),r},Fr.unary=function(t){return ki(t,1)},Fr.union=ei,Fr.unionBy=ui,Fr.unionWith=oi,Fr.uniq=function(t){return t&&t.length?fu(t):[]},Fr.uniqBy=function(t,n){return t&&t.length?fu(t,ao(n,2)):[]},Fr.uniqWith=function(t,n){return n="function"==typeof n?n:e,t&&t.length?fu(t,e,n):[]},Fr.unset=function(t,n){return null==t||lu(t,n)},Fr.unzip=ii,Fr.unzipWith=ai,Fr.update=function(t,n,r){return null==t?t:su(t,n,yu(r))},Fr.updateWith=function(t,n,r,u){return u="function"==typeof u?u:e,null==t?t:su(t,n,yu(r),u)},Fr.values=Ma,Fr.valuesIn=function(t){return null==t?[]:tr(t,Wa(t))},Fr.without=ci,Fr.words=Xa,Fr.wrap=function(t,n){return Fi(yu(n),t)},Fr.xor=fi,Fr.xorBy=li,Fr.xorWith=si,Fr.zip=pi,Fr.zipObject=function(t,n){return _u(t||[],n||[],te)},Fr.zipObjectDeep=function(t,n){return _u(t||[],n||[],Qe)},Fr.zipWith=hi,Fr.entries=$a,Fr.entriesIn=Da,Fr.extend=ma,Fr.extendWith=xa,fc(Fr,Fr),Fr.add=bc,Fr.attempt=tc,Fr.camelCase=Na,Fr.capitalize=qa,Fr.ceil=wc,Fr.clamp=function(t,n,r){return r===e&&(r=n,n=e),r!==e&&(r=(r=da(r))==r?r:0),n!==e&&(n=(n=da(n))==n?n:0),ie(da(t),n,r)},Fr.clone=function(t){return ae(t,4)},Fr.cloneDeep=function(t){return ae(t,5)},Fr.cloneDeepWith=function(t,n){return ae(t,5,n="function"==typeof n?n:e)},Fr.cloneWith=function(t,n){return ae(t,4,n="function"==typeof n?n:e)},Fr.conformsTo=function(t,n){return null==n||ce(t,n,Ta(n))},Fr.deburr=Va,Fr.defaultTo=function(t,n){return null==t||t!=t?n:t},Fr.divide=jc,Fr.endsWith=function(t,n,r){t=wa(t),n=cu(n);var u=t.length,o=r=r===e?u:ie(ga(r),0,u);return(r-=n.length)>=0&&t.slice(r,o)==n},Fr.eq=Mi,Fr.escape=function(t){return(t=wa(t))&&J.test(t)?t.replace(K,or):t},Fr.escapeRegExp=function(t){return(t=wa(t))&&ut.test(t)?t.replace(et,"\\$&"):t},Fr.every=function(t,n,r){var u=Zi(t)?Rn:he;return r&&bo(t,n,r)&&(n=e),u(t,ao(n,3))},Fr.find=di,Fr.findIndex=Vo,Fr.findKey=function(t,n){return Dn(t,ao(n,3),be)},Fr.findLast=bi,Fr.findLastIndex=Zo,Fr.findLastKey=function(t,n){return Dn(t,ao(n,3),we)},Fr.floor=mc,Fr.forEach=wi,Fr.forEachRight=ji,Fr.forIn=function(t,n){return null==t?t:ye(t,ao(n,3),Wa)},Fr.forInRight=function(t,n){return null==t?t:de(t,ao(n,3),Wa)},Fr.forOwn=function(t,n){return t&&be(t,ao(n,3))},Fr.forOwnRight=function(t,n){return t&&we(t,ao(n,3))},Fr.get=Ia,Fr.gt=Ni,Fr.gte=qi,Fr.has=function(t,n){return null!=t&&vo(t,n,ze)},Fr.hasIn=ka,Fr.head=Ko,Fr.identity=oc,Fr.includes=function(t,n,r,e){t=Ki(t)?t:Ma(t),r=r&&!e?ga(r):0;var u=t.length;return r<0&&(r=yr(u+r,0)),fa(t)?r<=u&&t.indexOf(n,r)>-1:!!u&&Nn(t,n,r)>-1},Fr.indexOf=function(t,n,r){var e=null==t?0:t.length;if(!e)return-1;var u=null==r?0:ga(r);return u<0&&(u=yr(e+u,0)),Nn(t,n,u)},Fr.inRange=function(t,n,r){return n=_a(n),r===e?(r=n,n=0):r=_a(r),function(t,n,r){return t>=dr(n,r)&&t=-9007199254740991&&t<=h},Fr.isSet=ca,Fr.isString=fa,Fr.isSymbol=la,Fr.isTypedArray=sa,Fr.isUndefined=function(t){return t===e},Fr.isWeakMap=function(t){return ea(t)&&ho(t)==U},Fr.isWeakSet=function(t){return ea(t)&&"[object WeakSet]"==Ae(t)},Fr.join=function(t,n){return null==t?"":$n.call(t,n)},Fr.kebabCase=Za,Fr.last=Qo,Fr.lastIndexOf=function(t,n,r){var u=null==t?0:t.length;if(!u)return-1;var o=u;return r!==e&&(o=(o=ga(r))<0?yr(u+o,0):dr(o,u-1)),n==n?function(t,n,r){for(var e=r+1;e--;)if(t[e]===n)return e;return e}(t,n,o):Mn(t,Vn,o,!0)},Fr.lowerCase=Ga,Fr.lowerFirst=Ka,Fr.lt=pa,Fr.lte=ha,Fr.max=function(t){return t&&t.length?ve(t,oc,Oe):e},Fr.maxBy=function(t,n){return t&&t.length?ve(t,ao(n,2),Oe):e},Fr.mean=function(t){return Zn(t,oc)},Fr.meanBy=function(t,n){return Zn(t,ao(n,2))},Fr.min=function(t){return t&&t.length?ve(t,oc,Le):e},Fr.minBy=function(t,n){return t&&t.length?ve(t,ao(n,2),Le):e},Fr.stubArray=yc,Fr.stubFalse=dc,Fr.stubObject=function(){return{}},Fr.stubString=function(){return""},Fr.stubTrue=function(){return!0},Fr.multiply=Ac,Fr.nth=function(t,n){return t&&t.length?Me(t,ga(n)):e},Fr.noConflict=function(){return _n._===this&&(_n._=$t),this},Fr.noop=lc,Fr.now=Ii,Fr.pad=function(t,n,r){t=wa(t);var e=(n=ga(n))?pr(t):0;if(!n||e>=n)return t;var u=(n-e)/2;return Nu(gn(u),r)+t+Nu(vn(u),r)},Fr.padEnd=function(t,n,r){t=wa(t);var e=(n=ga(n))?pr(t):0;return n&&en){var u=t;t=n,n=u}if(r||t%1||n%1){var o=jr();return dr(t+o*(n-t+sn("1e-"+((o+"").length-1))),n)}return Ge(t,n)},Fr.reduce=function(t,n,r){var e=Zi(t)?Ln:Hn,u=arguments.length<3;return e(t,ao(n,4),r,u,se)},Fr.reduceRight=function(t,n,r){var e=Zi(t)?Pn:Hn,u=arguments.length<3;return e(t,ao(n,4),r,u,pe)},Fr.repeat=function(t,n,r){return n=(r?bo(t,n,r):n===e)?1:ga(n),Ke(wa(t),n)},Fr.replace=function(){var t=arguments,n=wa(t[0]);return t.length<3?n:n.replace(t[1],t[2])},Fr.result=function(t,n,r){var u=-1,o=(n=du(n,t)).length;for(o||(o=1,t=e);++uh)return[];var r=_,e=dr(t,_);n=ao(n),t-=_;for(var u=Yn(e,n);++r=i)return t;var c=r-pr(u);if(c<1)return u;var f=a?wu(a,0,c).join(""):t.slice(0,c);if(o===e)return f+u;if(a&&(c+=f.length-c),aa(o)){if(t.slice(c).search(o)){var l,s=f;for(o.global||(o=St(o.source,wa(vt.exec(o))+"g")),o.lastIndex=0;l=o.exec(s);)var p=l.index;f=f.slice(0,p===e?c:p)}}else if(t.indexOf(cu(o),c)!=c){var h=f.lastIndexOf(o);h>-1&&(f=f.slice(0,h))}return f+u},Fr.unescape=function(t){return(t=wa(t))&&H.test(t)?t.replace(G,_r):t},Fr.uniqueId=function(t){var n=++Ct;return wa(t)+n},Fr.upperCase=Ya,Fr.upperFirst=Qa,Fr.each=wi,Fr.eachRight=ji,Fr.first=Ko,fc(Fr,(xc={},be(Fr,(function(t,n){Bt.call(Fr.prototype,n)||(xc[n]=t)})),xc),{chain:!1}),Fr.VERSION="4.17.21",kn(["bind","bindKey","curry","curryRight","partial","partialRight"],(function(t){Fr[t].placeholder=Fr})),kn(["drop","take"],(function(t,n){Nr.prototype[t]=function(r){r=r===e?1:yr(ga(r),0);var u=this.__filtered__&&!n?new Nr(this):this.clone();return u.__filtered__?u.__takeCount__=dr(r,u.__takeCount__):u.__views__.push({size:dr(r,_),type:t+(u.__dir__<0?"Right":"")}),u},Nr.prototype[t+"Right"]=function(n){return this.reverse()[t](n).reverse()}})),kn(["filter","map","takeWhile"],(function(t,n){var r=n+1,e=1==r||3==r;Nr.prototype[t]=function(t){var n=this.clone();return n.__iteratees__.push({iteratee:ao(t,3),type:r}),n.__filtered__=n.__filtered__||e,n}})),kn(["head","last"],(function(t,n){var r="take"+(n?"Right":"");Nr.prototype[t]=function(){return this[r](1).value()[0]}})),kn(["initial","tail"],(function(t,n){var r="drop"+(n?"":"Right");Nr.prototype[t]=function(){return this.__filtered__?new Nr(this):this[r](1)}})),Nr.prototype.compact=function(){return this.filter(oc)},Nr.prototype.find=function(t){return this.filter(t).head()},Nr.prototype.findLast=function(t){return this.reverse().find(t)},Nr.prototype.invokeMap=He((function(t,n){return"function"==typeof t?new Nr(this):this.map((function(r){return ke(r,t,n)}))})),Nr.prototype.reject=function(t){return this.filter(Li(ao(t)))},Nr.prototype.slice=function(t,n){t=ga(t);var r=this;return r.__filtered__&&(t>0||n<0)?new Nr(r):(t<0?r=r.takeRight(-t):t&&(r=r.drop(t)),n!==e&&(r=(n=ga(n))<0?r.dropRight(-n):r.take(n-t)),r)},Nr.prototype.takeRightWhile=function(t){return this.reverse().takeWhile(t).reverse()},Nr.prototype.toArray=function(){return this.take(_)},be(Nr.prototype,(function(t,n){var r=/^(?:filter|find|map|reject)|While$/.test(n),u=/^(?:head|last)$/.test(n),o=Fr[u?"take"+("last"==n?"Right":""):n],i=u||/^find/.test(n);o&&(Fr.prototype[n]=function(){var n=this.__wrapped__,a=u?[1]:arguments,c=n instanceof Nr,f=a[0],l=c||Zi(n),s=function(t){var n=o.apply(Fr,Cn([t],a));return u&&p?n[0]:n};l&&r&&"function"==typeof f&&1!=f.length&&(c=l=!1);var p=this.__chain__,h=!!this.__actions__.length,v=i&&!p,_=c&&!h;if(!i&&l){n=_?n:new Nr(this);var g=t.apply(n,a);return g.__actions__.push({func:_i,args:[s],thisArg:e}),new Mr(g,p)}return v&&_?t.apply(this,a):(g=this.thru(s),v?u?g.value()[0]:g.value():g)})})),kn(["pop","push","shift","sort","splice","unshift"],(function(t){var n=Et[t],r=/^(?:push|sort|unshift)$/.test(t)?"tap":"thru",e=/^(?:pop|shift)$/.test(t);Fr.prototype[t]=function(){var t=arguments;if(e&&!this.__chain__){var u=this.value();return n.apply(Zi(u)?u:[],t)}return this[r]((function(r){return n.apply(Zi(r)?r:[],t)}))}})),be(Nr.prototype,(function(t,n){var r=Fr[n];if(r){var e=r.name+"";Bt.call(Er,e)||(Er[e]=[]),Er[e].push({name:n,func:r})}})),Er[Fu(e,2).name]=[{name:"wrapper",func:e}],Nr.prototype.clone=function(){var t=new Nr(this.__wrapped__);return t.__actions__=Iu(this.__actions__),t.__dir__=this.__dir__,t.__filtered__=this.__filtered__,t.__iteratees__=Iu(this.__iteratees__),t.__takeCount__=this.__takeCount__,t.__views__=Iu(this.__views__),t},Nr.prototype.reverse=function(){if(this.__filtered__){var t=new Nr(this);t.__dir__=-1,t.__filtered__=!0}else(t=this.clone()).__dir__*=-1;return t},Nr.prototype.value=function(){var t=this.__wrapped__.value(),n=this.__dir__,r=Zi(t),e=n<0,u=r?t.length:0,o=function(t,n,r){var e=-1,u=r.length;for(;++e=this.__values__.length;return{done:t,value:t?e:this.__values__[this.__index__++]}},Fr.prototype.plant=function(t){for(var n,r=this;r instanceof Dr;){var u=Do(r);u.__index__=0,u.__values__=e,n?o.__wrapped__=u:n=u;var o=u;r=r.__wrapped__}return o.__wrapped__=t,n},Fr.prototype.reverse=function(){var t=this.__wrapped__;if(t instanceof Nr){var n=t;return this.__actions__.length&&(n=new Nr(this)),(n=n.reverse()).__actions__.push({func:_i,args:[ri],thisArg:e}),new Mr(n,this.__chain__)}return this.thru(ri)},Fr.prototype.toJSON=Fr.prototype.valueOf=Fr.prototype.value=function(){return hu(this.__wrapped__,this.__actions__)},Fr.prototype.first=Fr.prototype.head,Yt&&(Fr.prototype[Yt]=function(){return this}),Fr}();yn?((yn.exports=gr)._=gr,gn._=gr):_n._=gr}).call(t)}(Bu,Bu.exports);export{Wu as c}; diff --git a/comfyui-easy-use/web_version/v2/assets/primeuix-CNMLIuxO.js b/comfyui-easy-use/web_version/v2/assets/primeuix-CNMLIuxO.js new file mode 100644 index 0000000000000000000000000000000000000000..12144472b75f9e4c8f01201833fa299639df4e7b --- /dev/null +++ b/comfyui-easy-use/web_version/v2/assets/primeuix-CNMLIuxO.js @@ -0,0 +1 @@ +var e=Object.defineProperty,t=Object.getOwnPropertySymbols,n=Object.prototype.hasOwnProperty,r=Object.prototype.propertyIsEnumerable,s=(t,n,r)=>n in t?e(t,n,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[n]=r;function o(e){return null==e||""===e||Array.isArray(e)&&0===e.length||!(e instanceof Date)&&"object"==typeof e&&0===Object.keys(e).length}function i(e,t,n=new WeakSet){if(e===t)return!0;if(!e||!t||"object"!=typeof e||"object"!=typeof t)return!1;if(n.has(e)||n.has(t))return!1;n.add(e).add(t);let r,s,o,a=Array.isArray(e),l=Array.isArray(t);if(a&&l){if(s=e.length,s!=t.length)return!1;for(r=s;0!=r--;)if(!i(e[r],t[r],n))return!1;return!0}if(a!=l)return!1;let u=e instanceof Date,c=t instanceof Date;if(u!=c)return!1;if(u&&c)return e.getTime()==t.getTime();let d=e instanceof RegExp,h=t instanceof RegExp;if(d!=h)return!1;if(d&&h)return e.toString()==t.toString();let f=Object.keys(e);if(s=f.length,s!==Object.keys(t).length)return!1;for(r=s;0!=r--;)if(!Object.prototype.hasOwnProperty.call(t,f[r]))return!1;for(r=s;0!=r--;)if(o=f[r],!i(e[o],t[o],n))return!1;return!0}function a(e,t){return i(e,t)}function l(e){return!!(e&&e.constructor&&e.call&&e.apply)}function u(e){return!o(e)}function c(e,t){if(!e||!t)return null;try{const n=e[t];if(u(n))return n}catch(n){}if(Object.keys(e).length){if(l(t))return t(e);if(-1===t.indexOf("."))return e[t];{let n=t.split("."),r=e;for(let e=0,t=n.length;ey(e)===s))||""],n),r.join("."),n):void 0:m(e,n)}function b(e,t=!0){return Array.isArray(e)&&(t||0!==e.length)}function S(e=""){return u(e)&&1===e.length&&!!e.match(/\S| /)}function x(e,t){if(t){const n=t.test(e);return t.lastIndex=0,n}return!1}function $(...e){const o=(e={},i={})=>{const a=((e,o)=>{for(var i in o||(o={}))n.call(o,i)&&s(e,i,o[i]);if(t)for(var i of t(o))r.call(o,i)&&s(e,i,o[i]);return e})({},e);return Object.keys(i).forEach((t=>{p(i[t])&&t in e&&p(e[t])?a[t]=o(e[t],i[t]):a[t]=i[t]})),a};return e.reduce(((e,t,n)=>0===n?t:o(e,t)),{})}function k(e){return e?e.replace(/\/\*(?:(?!\*\/)[\s\S])*\*\/|[\r\n\t]+/g,"").replace(/ {2,}/g," ").replace(/ ([{:}]) /g,"$1").replace(/([;,]) /g,"$1").replace(/ !/g,"!").replace(/: /g,":"):e}function w(e){if(e&&/[\xC0-\xFF\u0100-\u017E]/.test(e)){const t={A:/[\xC0-\xC5\u0100\u0102\u0104]/g,AE:/[\xC6]/g,C:/[\xC7\u0106\u0108\u010A\u010C]/g,D:/[\xD0\u010E\u0110]/g,E:/[\xC8-\xCB\u0112\u0114\u0116\u0118\u011A]/g,G:/[\u011C\u011E\u0120\u0122]/g,H:/[\u0124\u0126]/g,I:/[\xCC-\xCF\u0128\u012A\u012C\u012E\u0130]/g,IJ:/[\u0132]/g,J:/[\u0134]/g,K:/[\u0136]/g,L:/[\u0139\u013B\u013D\u013F\u0141]/g,N:/[\xD1\u0143\u0145\u0147\u014A]/g,O:/[\xD2-\xD6\xD8\u014C\u014E\u0150]/g,OE:/[\u0152]/g,R:/[\u0154\u0156\u0158]/g,S:/[\u015A\u015C\u015E\u0160]/g,T:/[\u0162\u0164\u0166]/g,U:/[\xD9-\xDC\u0168\u016A\u016C\u016E\u0170\u0172]/g,W:/[\u0174]/g,Y:/[\xDD\u0176\u0178]/g,Z:/[\u0179\u017B\u017D]/g,a:/[\xE0-\xE5\u0101\u0103\u0105]/g,ae:/[\xE6]/g,c:/[\xE7\u0107\u0109\u010B\u010D]/g,d:/[\u010F\u0111]/g,e:/[\xE8-\xEB\u0113\u0115\u0117\u0119\u011B]/g,g:/[\u011D\u011F\u0121\u0123]/g,i:/[\xEC-\xEF\u0129\u012B\u012D\u012F\u0131]/g,ij:/[\u0133]/g,j:/[\u0135]/g,k:/[\u0137,\u0138]/g,l:/[\u013A\u013C\u013E\u0140\u0142]/g,n:/[\xF1\u0144\u0146\u0148\u014B]/g,p:/[\xFE]/g,o:/[\xF2-\xF6\xF8\u014D\u014F\u0151]/g,oe:/[\u0153]/g,r:/[\u0155\u0157\u0159]/g,s:/[\u015B\u015D\u015F\u0161]/g,t:/[\u0163\u0165\u0167]/g,u:/[\xF9-\xFC\u0169\u016B\u016D\u016F\u0171\u0173]/g,w:/[\u0175]/g,y:/[\xFD\xFF\u0177]/g,z:/[\u017A\u017C\u017E]/g};for(let n in t)e=e.replace(t[n],n)}return e}function C(e){return g(e,!1)?e[0].toUpperCase()+e.slice(1):e}function O(e){return g(e)?e.replace(/(_)/g,"-").replace(/[A-Z]/g,((e,t)=>0===t?e:"-"+e.toLowerCase())).toLowerCase():e}function L(e){return g(e)?e.replace(/[A-Z]/g,((e,t)=>0===t?e:"."+e.toLowerCase())).toLowerCase():e}function E(){const e=new Map;return{on(t,n){let r=e.get(t);return r?r.push(n):r=[n],e.set(t,r),this},off(t,n){let r=e.get(t);return r&&r.splice(r.indexOf(n)>>>0,1),this},emit(t,n){let r=e.get(t);r&&r.slice().map((e=>{e(n)}))},clear(){e.clear()}}}var j=Object.defineProperty,N=Object.defineProperties,_=Object.getOwnPropertyDescriptors,A=Object.getOwnPropertySymbols,P=Object.prototype.hasOwnProperty,T=Object.prototype.propertyIsEnumerable,D=(e,t,n)=>t in e?j(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,F=(e,t)=>{for(var n in t||(t={}))P.call(t,n)&&D(e,n,t[n]);if(A)for(var n of A(t))T.call(t,n)&&D(e,n,t[n]);return e},R=(e,t)=>N(e,_(t)),B=(e,t)=>{var n={};for(var r in e)P.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&A)for(var r of A(e))t.indexOf(r)<0&&T.call(e,r)&&(n[r]=e[r]);return n},W=E();function V(e,t){b(e)?e.push(...t||[]):p(e)&&Object.assign(e,t)}function H(e="",t=""){return function(e){return e.replaceAll(/ /g,"").replace(/[^\w]/g,"-")}(`${g(e,!1)&&g(t,!1)?`${e}-`:e}${t}`)}function I(e="",t=""){return`--${H(e,t)}`}function M(e,t="",n="",r=[],s){if(g(e)){const t=/{([^}]*)}/g,o=e.trim();if(function(e=""){return((e.match(/{/g)||[]).length+(e.match(/}/g)||[]).length)%2!=0}(o))return;if(x(o,t)){const e=o.replaceAll(t,(e=>{const t=e.replace(/{|}/g,"").split(".").filter((e=>!r.some((t=>x(e,t)))));return`var(${I(n,O(t.join("-")))}${u(s)?`, ${s}`:""})`})),i=/(\d+\s+[\+\-\*\/]\s+\d+)/g,a=/var\([^)]+\)/g;return x(e.replace(a,"0"),i)?`calc(${e})`:e}return o}if(function(e){return u(e)&&!isNaN(e)}(e))return e}function z(e,t){return e?`${e}{${t}}`:""}var K=(...e)=>Z(U.getTheme(),...e),Z=(e={},t,n,r)=>{if(t){const{variable:s,options:i}=U.defaults||{},{prefix:a,transform:l}=(null==e?void 0:e.options)||i||{},u=x(t,/{([^}]*)}/g)?t:`{${t}}`;return"value"===r||o(r)&&"strict"===l?U.getTokenValue(t):M(u,void 0,a,[s.excludedKeyRegex],n)}return""};function q(e,t={}){const n=U.defaults.variable,{prefix:r=n.prefix,selector:s=n.selector,excludedKeyRegex:o=n.excludedKeyRegex}=t,i=(e,t="")=>Object.entries(e).reduce(((e,[n,s])=>{const a=x(n,o)?H(t):H(t,O(n)),l=function(e){return p(e)&&e.hasOwnProperty("value")&&e.hasOwnProperty("type")?e.value:e}(s);if(p(l)){const{variables:t,tokens:n}=i(l,a);V(e.tokens,n),V(e.variables,t)}else e.tokens.push((r?a.replace(`${r}-`,""):a).replaceAll("-",".")),function(e,t,n){g(t,!1)&&e.push(`${t}:${n};`)}(e.variables,I(a),M(l,a,r,[o]));return e}),{variables:[],tokens:[]}),{variables:a,tokens:l}=i(e,r);return{value:a,tokens:l,declarations:a.join(""),css:z(s,a.join(""))}}var Y={regex:{rules:{class:{pattern:/^\.([a-zA-Z][\w-]*)$/,resolve(e){return{type:"class",selector:e,matched:this.pattern.test(e.trim())}}},attr:{pattern:/^\[(.*)\]$/,resolve(e){return{type:"attr",selector:`:root${e}`,matched:this.pattern.test(e.trim())}}},media:{pattern:/^@media (.*)$/,resolve(e){return{type:"media",selector:`${e}{:root{[CSS]}}`,matched:this.pattern.test(e.trim())}}},system:{pattern:/^system$/,resolve(e){return{type:"system",selector:"@media (prefers-color-scheme: dark){:root{[CSS]}}",matched:this.pattern.test(e.trim())}}},custom:{resolve:e=>({type:"custom",selector:e,matched:!0})}},resolve(e){const t=Object.keys(this.rules).filter((e=>"custom"!==e)).map((e=>this.rules[e]));return[e].flat().map((e=>{var n;return null!=(n=t.map((t=>t.resolve(e))).find((e=>e.matched)))?n:this.rules.custom.resolve(e)}))}},_toVariables:(e,t)=>q(e,{prefix:null==t?void 0:t.prefix}),getCommon({name:e="",theme:t={},params:n,set:r,defaults:s}){var o,i,a,l,c,d,h;const{preset:f,options:p}=t;let g,y,v,b,S,x,$;if(u(f)&&"strict"!==p.transform){const{primitive:t,semantic:n,extend:k}=f,w=n||{},{colorScheme:C}=w,O=B(w,["colorScheme"]),L=k||{},{colorScheme:E}=L,j=B(L,["colorScheme"]),N=C||{},{dark:_}=N,A=B(N,["dark"]),P=E||{},{dark:T}=P,D=B(P,["dark"]),F=u(t)?this._toVariables({primitive:t},p):{},R=u(O)?this._toVariables({semantic:O},p):{},W=u(A)?this._toVariables({light:A},p):{},V=u(_)?this._toVariables({dark:_},p):{},H=u(j)?this._toVariables({semantic:j},p):{},I=u(D)?this._toVariables({light:D},p):{},M=u(T)?this._toVariables({dark:T},p):{},[z,Z]=[null!=(o=F.declarations)?o:"",F.tokens],[q,Y]=[null!=(i=R.declarations)?i:"",R.tokens||[]],[U,X]=[null!=(a=W.declarations)?a:"",W.tokens||[]],[J,G]=[null!=(l=V.declarations)?l:"",V.tokens||[]],[Q,ee]=[null!=(c=H.declarations)?c:"",H.tokens||[]],[te,ne]=[null!=(d=I.declarations)?d:"",I.tokens||[]],[re,se]=[null!=(h=M.declarations)?h:"",M.tokens||[]];g=this.transformCSS(e,z,"light","variable",p,r,s),y=Z;v=`${this.transformCSS(e,`${q}${U}`,"light","variable",p,r,s)}${this.transformCSS(e,`${J}`,"dark","variable",p,r,s)}`,b=[...new Set([...Y,...X,...G])];S=`${this.transformCSS(e,`${Q}${te}color-scheme:light`,"light","variable",p,r,s)}${this.transformCSS(e,`${re}color-scheme:dark`,"dark","variable",p,r,s)}`,x=[...new Set([...ee,...ne,...se])],$=m(f.css,{dt:K})}return{primitive:{css:g,tokens:y},semantic:{css:v,tokens:b},global:{css:S,tokens:x},style:$}},getPreset({name:e="",preset:t={},options:n,params:r,set:s,defaults:o,selector:i}){var a,l,c;let d,h,f;if(u(t)&&"strict"!==n.transform){const r=e.replace("-directive",""),p=t,{colorScheme:g,extend:y,css:v}=p,b=B(p,["colorScheme","extend","css"]),S=y||{},{colorScheme:x}=S,$=B(S,["colorScheme"]),k=g||{},{dark:w}=k,C=B(k,["dark"]),O=x||{},{dark:L}=O,E=B(O,["dark"]),j=u(b)?this._toVariables({[r]:F(F({},b),$)},n):{},N=u(C)?this._toVariables({[r]:F(F({},C),E)},n):{},_=u(w)?this._toVariables({[r]:F(F({},w),L)},n):{},[A,P]=[null!=(a=j.declarations)?a:"",j.tokens||[]],[T,D]=[null!=(l=N.declarations)?l:"",N.tokens||[]],[R,W]=[null!=(c=_.declarations)?c:"",_.tokens||[]];d=`${this.transformCSS(r,`${A}${T}`,"light","variable",n,s,o,i)}${this.transformCSS(r,R,"dark","variable",n,s,o,i)}`,h=[...new Set([...P,...D,...W])],f=m(v,{dt:K})}return{css:d,tokens:h,style:f}},getPresetC({name:e="",theme:t={},params:n,set:r,defaults:s}){var o;const{preset:i,options:a}=t,l=null==(o=null==i?void 0:i.components)?void 0:o[e];return this.getPreset({name:e,preset:l,options:a,params:n,set:r,defaults:s})},getPresetD({name:e="",theme:t={},params:n,set:r,defaults:s}){var o;const i=e.replace("-directive",""),{preset:a,options:l}=t,u=null==(o=null==a?void 0:a.directives)?void 0:o[i];return this.getPreset({name:i,preset:u,options:l,params:n,set:r,defaults:s})},applyDarkColorScheme:e=>!("none"===e.darkModeSelector||!1===e.darkModeSelector),getColorSchemeOption(e,t){var n;return this.applyDarkColorScheme(e)?this.regex.resolve(!0===e.darkModeSelector?t.options.darkModeSelector:null!=(n=e.darkModeSelector)?n:t.options.darkModeSelector):[]},getLayerOrder(e,t={},n,r){const{cssLayer:s}=t;if(s){return`@layer ${m(s.order||"primeui",n)}`}return""},getCommonStyleSheet({name:e="",theme:t={},params:n,props:r={},set:s,defaults:o}){const i=this.getCommon({name:e,theme:t,params:n,set:s,defaults:o}),a=Object.entries(r).reduce(((e,[t,n])=>e.push(`${t}="${n}"`)&&e),[]).join(" ");return Object.entries(i||{}).reduce(((e,[t,n])=>{if(null==n?void 0:n.css){const r=k(null==n?void 0:n.css),s=`${t}-variables`;e.push(``)}return e}),[]).join("")},getStyleSheet({name:e="",theme:t={},params:n,props:r={},set:s,defaults:o}){var i;const a={name:e,theme:t,params:n,set:s,defaults:o},l=null==(i=e.includes("-directive")?this.getPresetD(a):this.getPresetC(a))?void 0:i.css,u=Object.entries(r).reduce(((e,[t,n])=>e.push(`${t}="${n}"`)&&e),[]).join(" ");return l?``:""},createTokens(e={},t,n="",r="",s={}){return Object.entries(e).forEach((([e,i])=>{const a=x(e,t.variable.excludedKeyRegex)?n:n?`${n}.${L(e)}`:L(e),l=r?`${r}.${e}`:e;p(i)?this.createTokens(i,t,a,l,s):(s[a]||(s[a]={paths:[],computed(e,t={}){var n,r;return 1===this.paths.length?null==(n=this.paths[0])?void 0:n.computed(this.paths[0].scheme,t.binding):e&&"none"!==e?null==(r=this.paths.find((t=>t.scheme===e)))?void 0:r.computed(e,t.binding):this.paths.map((e=>e.computed(e.scheme,t[e.scheme])))}}),s[a].paths.push({path:l,value:i,scheme:l.includes("colorScheme.light")?"light":l.includes("colorScheme.dark")?"dark":"none",computed(e,t={}){const n=/{([^}]*)}/g;let r=i;if(t.name=this.path,t.binding||(t.binding={}),x(i,n)){const o=i.trim().replaceAll(n,(n=>{var r;const o=n.replace(/{|}/g,""),i=null==(r=s[o])?void 0:r.computed(e,t);return b(i)&&2===i.length?`light-dark(${i[0].value},${i[1].value})`:null==i?void 0:i.value})),a=/(\d+\w*\s+[\+\-\*\/]\s+\d+\w*)/g,l=/var\([^)]+\)/g;r=x(o.replace(l,"0"),a)?`calc(${o})`:o}return o(t.binding)&&delete t.binding,{colorScheme:e,path:this.path,paths:t,value:r.includes("undefined")?void 0:r}}}))})),s},getTokenValue(e,t,n){var r;const s=t.split(".").filter((e=>!x(e.toLowerCase(),n.variable.excludedKeyRegex))).join(".");const o=t.includes("colorScheme.light")?"light":t.includes("colorScheme.dark")?"dark":void 0,i=[null==(r=e[s])?void 0:r.computed(o)].flat().filter((e=>e));return 1===i.length?i[0].value:i.reduce(((e={},t)=>{const n=t,{colorScheme:r}=n,s=B(n,["colorScheme"]);return e[r]=s,e}),void 0)},getSelectorRule:(e,t,n,r)=>"class"===n||"attr"===n?z(u(t)?`${e}${t},${e} ${t}`:e,r):z(e,u(t)?z(t,r):r),transformCSS(e,t,n,r,s={},o,i,a){if(u(t)){const{cssLayer:l}=s;if("style"!==r){const e=this.getColorSchemeOption(s,i);t="dark"===n?e.reduce(((e,{type:n,selector:r})=>(u(r)&&(e+=r.includes("[CSS]")?r.replace("[CSS]",t):this.getSelectorRule(r,a,n,t)),e)),""):z(null!=a?a:":root",t)}if(l){const n={name:"primeui",order:"primeui"};p(l)&&(n.name=m(l.name,{name:e,type:r})),u(n.name)&&(t=z(`@layer ${n.name}`,t),null==o||o.layerNames(n.name))}return t}return""}},U={defaults:{variable:{prefix:"p",selector:":root",excludedKeyRegex:/^(primitive|semantic|components|directives|variables|colorscheme|light|dark|common|root|states|extend|css)$/gi},options:{prefix:"p",darkModeSelector:"system",cssLayer:!1}},_theme:void 0,_layerNames:new Set,_loadedStyleNames:new Set,_loadingStyles:new Set,_tokens:{},update(e={}){const{theme:t}=e;t&&(this._theme=R(F({},t),{options:F(F({},this.defaults.options),t.options)}),this._tokens=Y.createTokens(this.preset,this.defaults),this.clearLoadedStyleNames())},get theme(){return this._theme},get preset(){var e;return(null==(e=this.theme)?void 0:e.preset)||{}},get options(){var e;return(null==(e=this.theme)?void 0:e.options)||{}},get tokens(){return this._tokens},getTheme(){return this.theme},setTheme(e){this.update({theme:e}),W.emit("theme:change",e)},getPreset(){return this.preset},setPreset(e){this._theme=R(F({},this.theme),{preset:e}),this._tokens=Y.createTokens(e,this.defaults),this.clearLoadedStyleNames(),W.emit("preset:change",e),W.emit("theme:change",this.theme)},getOptions(){return this.options},setOptions(e){this._theme=R(F({},this.theme),{options:e}),this.clearLoadedStyleNames(),W.emit("options:change",e),W.emit("theme:change",this.theme)},getLayerNames(){return[...this._layerNames]},setLayerNames(e){this._layerNames.add(e)},getLoadedStyleNames(){return this._loadedStyleNames},isStyleNameLoaded(e){return this._loadedStyleNames.has(e)},setLoadedStyleName(e){this._loadedStyleNames.add(e)},deleteLoadedStyleName(e){this._loadedStyleNames.delete(e)},clearLoadedStyleNames(){this._loadedStyleNames.clear()},getTokenValue(e){return Y.getTokenValue(this.tokens,e,this.defaults)},getCommon(e="",t){return Y.getCommon({name:e,theme:this.theme,params:t,defaults:this.defaults,set:{layerNames:this.setLayerNames.bind(this)}})},getComponent(e="",t){const n={name:e,theme:this.theme,params:t,defaults:this.defaults,set:{layerNames:this.setLayerNames.bind(this)}};return Y.getPresetC(n)},getDirective(e="",t){const n={name:e,theme:this.theme,params:t,defaults:this.defaults,set:{layerNames:this.setLayerNames.bind(this)}};return Y.getPresetD(n)},getCustomPreset(e="",t,n,r){const s={name:e,preset:t,options:this.options,selector:n,params:r,defaults:this.defaults,set:{layerNames:this.setLayerNames.bind(this)}};return Y.getPreset(s)},getLayerOrderCSS(e=""){return Y.getLayerOrder(e,this.options,{names:this.getLayerNames()},this.defaults)},transformCSS(e="",t,n="style",r){return Y.transformCSS(e,t,r,n,this.options,{layerNames:this.setLayerNames.bind(this)},this.defaults)},getCommonStyleSheet(e="",t,n={}){return Y.getCommonStyleSheet({name:e,theme:this.theme,params:t,props:n,defaults:this.defaults,set:{layerNames:this.setLayerNames.bind(this)}})},getStyleSheet(e,t,n={}){return Y.getStyleSheet({name:e,theme:this.theme,params:t,props:n,defaults:this.defaults,set:{layerNames:this.setLayerNames.bind(this)}})},onStyleMounted(e){this._loadingStyles.add(e)},onStyleUpdated(e){this._loadingStyles.add(e)},onStyleLoaded(e,{name:t}){this._loadingStyles.size&&(this._loadingStyles.delete(t),W.emit(`theme:${t}:load`,e),!this._loadingStyles.size&&W.emit("theme:load"))}};function X(e,t){return!!e&&(e.classList?e.classList.contains(t):new RegExp("(^| )"+t+"( |$)","gi").test(e.className))}function J(e,t){if(e&&t){const n=t=>{X(e,t)||(e.classList?e.classList.add(t):e.className+=" "+t)};[t].flat().filter(Boolean).forEach((e=>e.split(" ").forEach(n)))}}function G(e){for(const n of null==document?void 0:document.styleSheets)try{for(const t of null==n?void 0:n.cssRules)for(const n of null==t?void 0:t.style)if(e.test(n))return{name:n,value:t.style.getPropertyValue(n).trim()}}catch(t){}return null}function Q(e,t){if(e&&t){const n=t=>{e.classList?e.classList.remove(t):e.className=e.className.replace(new RegExp("(^|\\b)"+t.split(" ").join("|")+"(\\b|$)","gi")," ")};[t].flat().filter(Boolean).forEach((e=>e.split(" ").forEach(n)))}}function ee(e){let t={width:0,height:0};return e&&(e.style.visibility="hidden",e.style.display="block",t.width=e.offsetWidth,t.height=e.offsetHeight,e.style.display="none",e.style.visibility="visible"),t}function te(){let e=window,t=document,n=t.documentElement,r=t.getElementsByTagName("body")[0];return{width:e.innerWidth||n.clientWidth||r.clientWidth,height:e.innerHeight||n.clientHeight||r.clientHeight}}function ne(){let e=document.documentElement;return(window.pageXOffset||e.scrollLeft)-(e.clientLeft||0)}function re(){let e=document.documentElement;return(window.pageYOffset||e.scrollTop)-(e.clientTop||0)}function se(e,t,n=!0){var r,s,o,i;if(e){const a=e.offsetParent?{width:e.offsetWidth,height:e.offsetHeight}:ee(e),l=a.height,u=a.width,c=t.offsetHeight,d=t.offsetWidth,h=t.getBoundingClientRect(),f=re(),p=ne(),m=te();let g,y,v="top";h.top+c+l>m.height?(g=h.top+f-l,v="bottom",g<0&&(g=f)):g=c+h.top+f,y=h.left+u>m.width?Math.max(0,h.left+p+d-u):h.left+p,e.style.top=g+"px",e.style.left=y+"px",e.style.transformOrigin=v,n&&(e.style.marginTop="bottom"===v?`calc(${null!=(s=null==(r=G(/-anchor-gutter$/))?void 0:r.value)?s:"2px"} * -1)`:null!=(i=null==(o=G(/-anchor-gutter$/))?void 0:o.value)?i:"")}}function oe(e,t){e&&("string"==typeof t?e.style.cssText=t:Object.entries(t||{}).forEach((([t,n])=>e.style[t]=n)))}function ie(e,t){if(e instanceof HTMLElement){return e.offsetWidth}return 0}function ae(e,t,n=!0){var r,s,o,i;if(e){const a=e.offsetParent?{width:e.offsetWidth,height:e.offsetHeight}:ee(e),l=t.offsetHeight,u=t.getBoundingClientRect(),c=te();let d,h,f="top";u.top+l+a.height>c.height?(d=-1*a.height,f="bottom",u.top+d<0&&(d=-1*u.top)):d=l,h=a.width>c.width?-1*u.left:u.left+a.width>c.width?-1*(u.left+a.width-c.width):0,e.style.top=d+"px",e.style.left=h+"px",e.style.transformOrigin=f,n&&(e.style.marginTop="bottom"===f?`calc(${null!=(s=null==(r=G(/-anchor-gutter$/))?void 0:r.value)?s:"2px"} * -1)`:null!=(i=null==(o=G(/-anchor-gutter$/))?void 0:o.value)?i:"")}}function le(e){return"object"==typeof HTMLElement?e instanceof HTMLElement:e&&"object"==typeof e&&null!==e&&1===e.nodeType&&"string"==typeof e.nodeName}var ue=void 0;function ce(e){{if(null!=ue)return ue;let e=document.createElement("div");oe(e,{width:"100px",height:"100px",overflow:"scroll",position:"absolute",top:"-9999px"}),document.body.appendChild(e);let t=e.offsetWidth-e.clientWidth;return document.body.removeChild(e),ue=t,t}}function de(e,t={}){if(le(e)){const n=(t,r)=>{var s,o;const i=(null==(s=null==e?void 0:e.$attrs)?void 0:s[t])?[null==(o=null==e?void 0:e.$attrs)?void 0:o[t]]:[];return[r].flat().reduce(((e,r)=>{if(null!=r){const s=typeof r;if("string"===s||"number"===s)e.push(r);else if("object"===s){const s=Array.isArray(r)?n(t,r):Object.entries(r).map((([e,n])=>"style"!==t||!n&&0!==n?n?e:void 0:`${e.replace(/([a-z])([A-Z])/g,"$1-$2").toLowerCase()}:${n}`));e=s.length?e.concat(s.filter((e=>!!e))):e}}return e}),i)};Object.entries(t).forEach((([t,r])=>{if(null!=r){const s=t.match(/^on(.+)/);s?e.addEventListener(s[1].toLowerCase(),r):"p-bind"===t||"pBind"===t?de(e,r):(r="class"===t?[...new Set(n("class",r))].join(" ").trim():"style"===t?n("style",r).join(";").trim():r,(e.$attrs=e.$attrs||{})&&(e.$attrs[t]=r),e.setAttribute(t,r))}}))}}function he(e,t={},...n){if(e){const r=document.createElement(e);return de(r,t),r.append(...n),r}}function fe(e,t){if(e){e.style.opacity="0";let n=+new Date,r="0",s=function(){r=""+(+e.style.opacity+((new Date).getTime()-n)/t),e.style.opacity=r,n=+new Date,+r<1&&(window.requestAnimationFrame&&requestAnimationFrame(s)||setTimeout(s,16))};s()}}function pe(e,t){return le(e)?e.matches(t)?e:e.querySelector(t):null}function me(e,t){e&&document.activeElement!==e&&e.focus(t)}function ge(e,t){if(le(e)){const n=e.getAttribute(t);return isNaN(n)?"true"===n||"false"===n?"true"===n:n:+n}}function ye(e,t=""){let n=function(e,t){return le(e)?Array.from(e.querySelectorAll(t)):[]}(e,`button:not([tabindex = "-1"]):not([disabled]):not([style*="display:none"]):not([hidden])${t},\n [href][clientHeight][clientWidth]:not([tabindex = "-1"]):not([disabled]):not([style*="display:none"]):not([hidden])${t},\n input:not([tabindex = "-1"]):not([disabled]):not([style*="display:none"]):not([hidden])${t},\n select:not([tabindex = "-1"]):not([disabled]):not([style*="display:none"]):not([hidden])${t},\n textarea:not([tabindex = "-1"]):not([disabled]):not([style*="display:none"]):not([hidden])${t},\n [tabIndex]:not([tabIndex = "-1"]):not([disabled]):not([style*="display:none"]):not([hidden])${t},\n [contenteditable]:not([tabIndex = "-1"]):not([disabled]):not([style*="display:none"]):not([hidden])${t}`),r=[];for(let s of n)"none"!=getComputedStyle(s).display&&"hidden"!=getComputedStyle(s).visibility&&r.push(s);return r}function ve(e,t){const n=ye(e,t);return n.length>0?n[0]:null}function be(e){if(e){let t=e.offsetHeight,n=getComputedStyle(e);return t-=parseFloat(n.paddingTop)+parseFloat(n.paddingBottom)+parseFloat(n.borderTopWidth)+parseFloat(n.borderBottomWidth),t}return 0}function Se(e){if(e){e.style.visibility="hidden",e.style.display="block";let t=e.offsetHeight;return e.style.display="none",e.style.visibility="visible",t}return 0}function xe(e){if(e){e.style.visibility="hidden",e.style.display="block";let t=e.offsetWidth;return e.style.display="none",e.style.visibility="visible",t}return 0}function $e(e){if(e){let t=e.parentNode;return t&&t instanceof ShadowRoot&&t.host&&(t=t.host),t}return null}function ke(e,t){const n=ye(e,t);return n.length>0?n[n.length-1]:null}function we(e){if(e){let t=e.getBoundingClientRect();return{top:t.top+(window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0),left:t.left+(window.pageXOffset||document.documentElement.scrollLeft||document.body.scrollLeft||0)}}return{top:"auto",left:"auto"}}function Ce(e,t){if(e){return e.offsetHeight}return 0}function Oe(e,t=[]){const n=$e(e);return null===n?t:Oe(n,t.concat([n]))}function Le(e){let t=[];if(e){let n=Oe(e);const r=/(auto|scroll)/,s=e=>{try{let t=window.getComputedStyle(e,null);return r.test(t.getPropertyValue("overflow"))||r.test(t.getPropertyValue("overflowX"))||r.test(t.getPropertyValue("overflowY"))}catch(t){return!1}};for(let e of n){let n=1===e.nodeType&&e.dataset.scrollselectors;if(n){let r=n.split(",");for(let n of r){let r=pe(e,n);r&&s(r)&&t.push(r)}}9!==e.nodeType&&s(e)&&t.push(e)}}return t}function Ee(e){return!(null==e||!e.nodeName||!$e(e))}function je(e){if(e){let t=e.offsetWidth,n=getComputedStyle(e);return t-=parseFloat(n.paddingLeft)+parseFloat(n.paddingRight)+parseFloat(n.borderLeftWidth)+parseFloat(n.borderRightWidth),t}return 0}function Ne(){return/(android)/i.test(navigator.userAgent)}function _e(){return!("undefined"==typeof window||!window.document||!window.document.createElement)}function Ae(e){return!(!e||null==e.offsetParent)}function Pe(e){return!!e&&"rtl"===getComputedStyle(e).direction}function Te(){return"ontouchstart"in window||navigator.maxTouchPoints>0||navigator.msMaxTouchPoints>0}function De(e,t){var n,r;if(e){const s=e.parentElement,o=we(s),i=te(),a=e.offsetParent?e.offsetWidth:xe(e),l=e.offsetParent?e.offsetHeight:Se(e),u=ie(null==(n=null==s?void 0:s.children)?void 0:n[0]),c=Ce(null==(r=null==s?void 0:s.children)?void 0:r[0]);let d="",h="";o.left+u+a>i.width-ce()?o.lefti.height?`-${l-c}px`:"0px",e.style.top=h,e.style.left=d}}function Fe(e,t="",n){le(e)&&null!=n&&e.setAttribute(t,n)}var Re={};function Be(e="pui_id_"){return Re.hasOwnProperty(e)||(Re[e]=0),Re[e]++,`${e}${Re[e]}`}var We=function(){let e=[];const t=(t,n,r=0)=>[...e].reverse().find((e=>!0))||{key:t,value:r},n=e=>e&&parseInt(e.style.zIndex,10)||0;return{get:n,set:(n,r,s)=>{r&&(r.style.zIndex=String(((n,r,s=999)=>{const o=t(n,r,s),i=o.value+(o.key===n?0:s)+1;return e.push({key:n,value:i}),i})(n,!0,s)))},clear:t=>{var r;t&&(r=n(t),e=e.filter((e=>e.value!==r)),t.style.zIndex="")},getCurrent:e=>(e=>t(e).value)(e)}}();export{h as $,Q as A,be as B,je as C,ie as D,E,Ce as F,we as G,J as H,ge as I,Ae as J,me as K,Ne as L,S as M,ve as N,ke as O,oe as P,ae as Q,se as R,Te as S,ye as T,f as U,fe as V,ne as W,re as X,te as Y,We as Z,X as _,w as a,Pe as a0,xe as a1,Se as a2,De as a3,Fe as b,_e as c,m as d,d as e,u as f,U as g,K as h,Ee as i,$ as j,W as k,pe as l,k as m,l as n,v as o,g as p,b as q,c as r,de as s,y as t,Be as u,o as v,p as w,C as x,Le as y,he as z}; diff --git a/comfyui-easy-use/web_version/v2/assets/primevue-CWKvsPkZ.js b/comfyui-easy-use/web_version/v2/assets/primevue-CWKvsPkZ.js new file mode 100644 index 0000000000000000000000000000000000000000..f343c69cfb2a148fd3136dac7ec713a466109cd9 --- /dev/null +++ b/comfyui-easy-use/web_version/v2/assets/primevue-CWKvsPkZ.js @@ -0,0 +1 @@ +import{r as e,a as t,e as n,s as o,b as i,i as r,c as l,d as a,f as u,m as s,g as c,h as d,E as v,j as f,k as m,u as p,l as h,t as g,n as y,o as b,p as C,q as S,v as $,w,x as P,y as O}from"./primeuix-CNMLIuxO.js";import{r as T,y as _,z as j,o as L,A as x,w as N,s as V,B as M,a as k,c as D,b as E}from"./vue-Cu3MA6TM.js";var A="startsWith",I="contains",B="notContains",F="endsWith",U="equals",R="notEquals",z="lt",W="lte",Z="gt",H="gte",Y="dateIs",q="dateIsNot",G="dateBefore",J="dateAfter";function K(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!n){if(Array.isArray(e)||(n=function(e,t){if(e){if("string"==typeof e)return Q(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Q(e,t):void 0}}(e))||t){n&&(e=n);var o=0,i=function(){};return{s:i,n:function(){return o>=e.length?{done:!0}:{done:!1,value:e[o++]}},e:function(e){throw e},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var r,l=!0,a=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return l=e.done,e},e:function(e){a=!0,r=e},f:function(){try{l||null==n.return||n.return()}finally{if(a)throw r}}}}function Q(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,o=Array(t);nt.getTime():e>t)},gte:function(e,t){return null==t||null!=e&&(e.getTime&&t.getTime?e.getTime()>=t.getTime():e>=t)},dateIs:function(e,t){return null==t||null!=e&&e.toDateString()===t.toDateString()},dateIsNot:function(e,t){return null==t||null!=e&&e.toDateString()!==t.toDateString()},dateBefore:function(e,t){return null==t||null!=e&&e.getTime()t.getTime()}},register:function(e,t){this.filters[e]=t}};function ee(e){return(ee="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function te(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function ne(e){for(var t=1;t1&&void 0!==arguments[1]?arguments[1]:{},n=T(!1),a=T(e),u=T(null),s=l()?window.document:void 0,c=t.document,d=void 0===c?s:c,v=t.immediate,f=void 0===v||v,m=t.manual,p=void 0!==m&&m,h=t.name,g=void 0===h?"style_".concat(++ie):h,y=t.id,b=void 0===y?void 0:y,C=t.media,S=void 0===C?void 0:C,$=t.nonce,w=void 0===$?void 0:$,P=t.first,O=void 0!==P&&P,V=t.onMounted,M=void 0===V?void 0:V,k=t.onUpdated,D=void 0===k?void 0:k,E=t.onLoad,A=void 0===E?void 0:E,I=t.props,B=void 0===I?{}:I,F=function(){},U=function(t){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(d){var l=ne(ne({},B),r),s=l.name||g,c=l.id||b,v=l.nonce||w;u.value=d.querySelector('style[data-primevue-style-id="'.concat(s,'"]'))||d.getElementById(c)||d.createElement("style"),u.value.isConnected||(a.value=t||e,o(u.value,{type:"text/css",id:c,media:S,nonce:v}),O?d.head.prepend(u.value):d.head.appendChild(u.value),i(u.value,"data-primevue-style-id",s),o(u.value,l),u.value.onload=function(e){return null==A?void 0:A(e,{name:s})},null==M||M(s)),n.value||(F=N(a,(function(e){u.value.textContent=e,null==D||D(s)}),{immediate:!0}),n.value=!0)}};return f&&!p&&function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];j()?L(e):t?e():x(e)}(U),{id:b,name:g,el:u,css:a,unload:function(){d&&n.value&&(F(),r(u.value)&&d.head.removeChild(u.value),n.value=!1)},load:U,isLoaded:_(n)}}function le(e){return(le="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function ae(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var o,i,r,l,a=[],u=!0,s=!1;try{if(r=(n=n.call(e)).next,0===t);else for(;!(u=(o=r.call(n)).done)&&(a.push(o.value),a.length!==t);u=!0);}catch(c){s=!0,i=c}finally{try{if(!u&&null!=n.return&&(l=n.return(),Object(l)!==l))return}finally{if(s)throw i}}return a}}(e,t)||function(e,t){if(e){if("string"==typeof e)return ue(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?ue(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function ue(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,o=Array(t);n1&&void 0!==arguments[1]?arguments[1]:{},n=(arguments.length>2&&void 0!==arguments[2]?arguments[2]:function(e){return e})(a(e,{dt:d}));return u(n)?re(s(n),ce({name:this.name},t)):{}},loadCSS:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return this.load(this.css,e)},loadTheme:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";return this.load(this.theme,t,(function(){var o=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";return c.transformCSS(t.name||e.name,"".concat(o).concat(n))}))},getCommonTheme:function(e){return c.getCommon(this.name,e)},getComponentTheme:function(e){return c.getComponent(this.name,e)},getDirectiveTheme:function(e){return c.getDirective(this.name,e)},getPresetTheme:function(e,t,n){return c.getCustomPreset(this.name,e,t,n)},getLayerOrderThemeCSS:function(){return c.getLayerOrderCSS(this.name)},getStyleSheet:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(this.css){var n=a(this.css,{dt:d})||"",o=s("".concat(n).concat(e)),i=Object.entries(t).reduce((function(e,t){var n=ae(t,2),o=n[0],i=n[1];return e.push("".concat(o,'="').concat(i,'"'))&&e}),[]).join(" ");return u(o)?'"):""}return""},getCommonThemeStyleSheet:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return c.getCommonStyleSheet(this.name,e,t)},getThemeStyleSheet:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=[c.getStyleSheet(this.name,e,t)];if(this.theme){var o="base"===this.name?"global-style":"".concat(this.name,"-style"),i=a(this.theme,{dt:d}),r=s(c.transformCSS(o,i)),l=Object.entries(t).reduce((function(e,t){var n=ae(t,2),o=n[0],i=n[1];return e.push("".concat(o,'="').concat(i,'"'))&&e}),[]).join(" ");u(r)&&n.push('"))}return n.join("")},extend:function(e){return ce(ce({},this),{},{css:void 0,theme:void 0},e)}},fe=v();function me(e){return(me="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function pe(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function he(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,o=Array(t);n1?t-1:0),o=1;o0&&void 0!==arguments[0]?arguments[0]:function(){};we.clearLoadedStyleNames(),m.on("theme:change",e)},_getHostInstance:function(e){return e?this.$options.hostName?e.$.type.name===this.$options.hostName?e:this._getHostInstance(e.$parentInstance):e.$parentInstance:void 0},_getPropValue:function(e){var t;return this[e]||(null===(t=this._getHostInstance(this))||void 0===t?void 0:t[e])},_getOptionValue:function(e){return b(e,arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",arguments.length>2&&void 0!==arguments[2]?arguments[2]:{})},_getPTValue:function(){var e,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},i=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],r=/./g.test(n)&&!!o[n.split(".")[0]],l=this._getPropValue("ptOptions")||(null===(e=this.$primevueConfig)||void 0===e?void 0:e.ptOptions)||{},a=l.mergeSections,u=void 0===a||a,s=l.mergeProps,c=void 0!==s&&s,d=i?r?this._useGlobalPT(this._getPTClassValue,n,o):this._useDefaultPT(this._getPTClassValue,n,o):void 0,v=r?void 0:this._getPTSelf(t,this._getPTClassValue,n,Me(Me({},o),{},{global:d||{}})),f=this._getPTDatasets(n);return u||!u&&v?c?this._mergeProps(c,d,v,f):Me(Me(Me({},d),v),f):Me(Me({},v),f)},_getPTSelf:function(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length,n=new Array(t>1?t-1:0),o=1;o0&&void 0!==arguments[0]?arguments[0]:"",o="data-pc-",i="root"===n&&u(null===(e=this.pt)||void 0===e?void 0:e["data-pc-section"]);return"transition"!==n&&Me(Me({},"root"===n&&Me(Me(ke({},"".concat(o,"name"),g(i?null===(t=this.pt)||void 0===t?void 0:t["data-pc-section"]:this.$.type.name)),i&&ke({},"".concat(o,"extend"),g(this.$.type.name))),l()&&ke({},"".concat(this.$attrSelector),""))),{},ke({},"".concat(o,"section"),g(n)))},_getPTClassValue:function(){var e=this._getOptionValue.apply(this,arguments);return C(e)||S(e)?{class:e}:e},_getPT:function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",o=arguments.length>2?arguments[2]:void 0,i=function(e){var i,r=arguments.length>1&&void 0!==arguments[1]&&arguments[1],l=o?o(e):e,a=g(n),u=g(t.$name);return null!==(i=r?a!==u?null==l?void 0:l[a]:void 0:null==l?void 0:l[a])&&void 0!==i?i:l};return null!=e&&e.hasOwnProperty("_usept")?{_usept:e._usept,originalValue:i(e.originalValue),value:i(e.value)}:i(e,!0)},_usePT:function(e,t,n,o){var i=function(e){return t(e,n,o)};if(null!=e&&e.hasOwnProperty("_usept")){var r,l=e._usept||(null===(r=this.$primevueConfig)||void 0===r?void 0:r.ptOptions)||{},a=l.mergeSections,u=void 0===a||a,s=l.mergeProps,c=void 0!==s&&s,d=i(e.originalValue),v=i(e.value);if(void 0===d&&void 0===v)return;return C(v)?v:C(d)?d:u||!u&&v?c?this._mergeProps(c,d,v):Me(Me({},d),v):v}return i(e)},_useGlobalPT:function(e,t,n){return this._usePT(this.globalPT,e,t,n)},_useDefaultPT:function(e,t,n){return this._usePT(this.defaultPT,e,t,n)},ptm:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return this._getPTValue(this.pt,e,Me(Me({},this.$params),t))},ptmi:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return M(this.$_attrsWithoutPT,this.ptm(e,t))},ptmo:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this._getPTValue(e,t,Me({instance:this},n),!1)},cx:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return this.isUnstyled?void 0:this._getOptionValue(this.$style.classes,e,Me(Me({},this.$params),t))},sx:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(!(arguments.length>1&&void 0!==arguments[1])||arguments[1]){var n=this._getOptionValue(this.$style.inlineStyles,e,Me(Me({},this.$params),t));return[this._getOptionValue(Pe.inlineStyles,e,Me(Me({},this.$params),t)),n]}}},computed:{globalPT:function(){var e,t=this;return this._getPT(null===(e=this.$primevueConfig)||void 0===e?void 0:e.pt,void 0,(function(e){return a(e,{instance:t})}))},defaultPT:function(){var e,t=this;return this._getPT(null===(e=this.$primevueConfig)||void 0===e?void 0:e.pt,void 0,(function(e){return t._getOptionValue(e,t.$name,Me({},t.$params))||a(e,Me({},t.$params))}))},isUnstyled:function(){var e;return void 0!==this.unstyled?this.unstyled:null===(e=this.$primevueConfig)||void 0===e?void 0:e.unstyled},$inProps:function(){var e,t=Object.keys((null===(e=this.$.vnode)||void 0===e?void 0:e.props)||{});return Object.fromEntries(Object.entries(this.$props).filter((function(e){var n=_e(e,1)[0];return null==t?void 0:t.includes(n)})))},$theme:function(){var e;return null===(e=this.$primevueConfig)||void 0===e?void 0:e.theme},$style:function(){return Me(Me({classes:void 0,inlineStyles:void 0,load:function(){},loadCSS:function(){},loadTheme:function(){}},(this._getHostInstance(this)||{}).$style),this.$options.style)},$styleOptions:function(){var e;return{nonce:null===(e=this.$primevueConfig)||void 0===e||null===(e=e.csp)||void 0===e?void 0:e.nonce}},$primevueConfig:function(){var e;return null===(e=this.$primevue)||void 0===e?void 0:e.config},$name:function(){return this.$options.hostName||this.$.type.name},$params:function(){var e=this._getHostInstance(this)||this.$parent;return{instance:this,props:this.$props,state:this.$data,attrs:this.$attrs,parent:{instance:e,props:null==e?void 0:e.$props,state:null==e?void 0:e.$data,attrs:null==e?void 0:e.$attrs}}},$_attrsPT:function(){return Object.entries(this.$attrs||{}).filter((function(e){var t=_e(e,1)[0];return null==t?void 0:t.startsWith("pt:")})).reduce((function(e,t){var n=_e(t,2),o=n[0],i=n[1],r=Te(o.split(":")).slice(1);return null==r||r.reduce((function(e,t,n,o){return!e[t]&&(e[t]=n===o.length-1?i:{}),e[t]}),e),e}),{})},$_attrsWithoutPT:function(){return Object.entries(this.$attrs||{}).filter((function(e){var t=_e(e,1)[0];return!(null!=t&&t.startsWith("pt:"))})).reduce((function(e,t){var n=_e(t,2),o=n[0],i=n[1];return e[o]=i,e}),{})}}},Ee=ve.extend({name:"baseicon",css:"\n.p-icon {\n display: inline-block;\n vertical-align: baseline;\n}\n\n.p-icon-spin {\n -webkit-animation: p-icon-spin 2s infinite linear;\n animation: p-icon-spin 2s infinite linear;\n}\n\n@-webkit-keyframes p-icon-spin {\n 0% {\n -webkit-transform: rotate(0deg);\n transform: rotate(0deg);\n }\n 100% {\n -webkit-transform: rotate(359deg);\n transform: rotate(359deg);\n }\n}\n\n@keyframes p-icon-spin {\n 0% {\n -webkit-transform: rotate(0deg);\n transform: rotate(0deg);\n }\n 100% {\n -webkit-transform: rotate(359deg);\n transform: rotate(359deg);\n }\n}\n"});function Ae(e){return(Ae="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function Ie(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function Be(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,o=Array(t);n0&&void 0!==arguments[0]?arguments[0]:{},o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"",r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},l=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],a=function(){var e=Ge._getOptionValue.apply(Ge,arguments);return C(e)||S(e)?{class:e}:e},u=(null===(e=n.binding)||void 0===e||null===(e=e.value)||void 0===e?void 0:e.ptOptions)||(null===(t=n.$primevueConfig)||void 0===t?void 0:t.ptOptions)||{},s=u.mergeSections,c=void 0===s||s,d=u.mergeProps,v=void 0!==d&&d,f=l?Ge._useDefaultPT(n,n.defaultPT(),a,i,r):void 0,m=Ge._usePT(n,Ge._getPT(o,n.$name),a,i,Ye(Ye({},r),{},{global:f||{}})),p=Ge._getPTDatasets(n,i);return c||!c&&m?v?Ge._mergeProps(n,v,f,m,p):Ye(Ye(Ye({},f),m),p):Ye(Ye({},m),p)},_getPTDatasets:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n="data-pc-";return Ye(Ye({},"root"===t&&qe({},"".concat(n,"name"),g(e.$name))),{},qe({},"".concat(n,"section"),g(t)))},_getPT:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2?arguments[2]:void 0,o=function(e){var o,i=n?n(e):e,r=g(t);return null!==(o=null==i?void 0:i[r])&&void 0!==o?o:i};return null!=e&&e.hasOwnProperty("_usept")?{_usept:e._usept,originalValue:o(e.originalValue),value:o(e.value)}:o(e)},_usePT:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1?arguments[1]:void 0,n=arguments.length>2?arguments[2]:void 0,o=arguments.length>3?arguments[3]:void 0,i=arguments.length>4?arguments[4]:void 0,r=function(e){return n(e,o,i)};if(null!=t&&t.hasOwnProperty("_usept")){var l,a=t._usept||(null===(l=e.$primevueConfig)||void 0===l?void 0:l.ptOptions)||{},u=a.mergeSections,s=void 0===u||u,c=a.mergeProps,d=void 0!==c&&c,v=r(t.originalValue),f=r(t.value);if(void 0===v&&void 0===f)return;return C(f)?f:C(v)?v:s||!s&&f?d?Ge._mergeProps(e,d,v,f):Ye(Ye({},v),f):f}return r(t)},_useDefaultPT:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2?arguments[2]:void 0,o=arguments.length>3?arguments[3]:void 0,i=arguments.length>4?arguments[4]:void 0;return Ge._usePT(e,t,n,o,i)},_loadStyles:function(e,t,n){var o,i=Ge._getConfig(t,n),r={nonce:null==i||null===(o=i.csp)||void 0===o?void 0:o.nonce};Ge._loadCoreStyles(e.$instance,r),Ge._loadThemeStyles(e.$instance,r),Ge._loadScopedThemeStyles(e.$instance,r),Ge._themeChangeListener((function(){return Ge._loadThemeStyles(e.$instance,r)}))},_loadCoreStyles:function(){var e,t,n,o=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},i=arguments.length>1?arguments[1]:void 0;!we.isStyleNameLoaded(null===(e=o.$style)||void 0===e?void 0:e.name)&&null!==(t=o.$style)&&void 0!==t&&t.name&&(ve.loadCSS(i),null===(n=o.$style)||void 0===n||n.loadCSS(i),we.setLoadedStyleName(o.$style.name))},_loadThemeStyles:function(){var e,t,n,o=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},i=arguments.length>1?arguments[1]:void 0;if(!(null!=o&&o.isUnstyled()||"none"===(null==o||null===(e=o.theme)||void 0===e?void 0:e.call(o)))){if(!c.isStyleNameLoaded("common")){var r,l,a=(null===(r=o.$style)||void 0===r||null===(l=r.getCommonTheme)||void 0===l?void 0:l.call(r))||{},u=a.primitive,s=a.semantic,d=a.global,v=a.style;ve.load(null==u?void 0:u.css,Ye({name:"primitive-variables"},i)),ve.load(null==s?void 0:s.css,Ye({name:"semantic-variables"},i)),ve.load(null==d?void 0:d.css,Ye({name:"global-variables"},i)),ve.loadTheme(Ye({name:"global-style"},i),v),c.setLoadedStyleName("common")}if(!c.isStyleNameLoaded(null===(t=o.$style)||void 0===t?void 0:t.name)&&null!==(n=o.$style)&&void 0!==n&&n.name){var f,m,p,h,g=(null===(f=o.$style)||void 0===f||null===(m=f.getDirectiveTheme)||void 0===m?void 0:m.call(f))||{},y=g.css,b=g.style;null===(p=o.$style)||void 0===p||p.load(y,Ye({name:"".concat(o.$style.name,"-variables")},i)),null===(h=o.$style)||void 0===h||h.loadTheme(Ye({name:"".concat(o.$style.name,"-style")},i),b),c.setLoadedStyleName(o.$style.name)}if(!c.isStyleNameLoaded("layer-order")){var C,S,$=null===(C=o.$style)||void 0===C||null===(S=C.getLayerOrderThemeCSS)||void 0===S?void 0:S.call(C);ve.load($,Ye({name:"layer-order",first:!0},i)),c.setLoadedStyleName("layer-order")}}},_loadScopedThemeStyles:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1?arguments[1]:void 0,n=e.preset();if(n&&e.$attrSelector){var o,i,r,l=((null===(o=e.$style)||void 0===o||null===(i=o.getPresetTheme)||void 0===i?void 0:i.call(o,n,"[".concat(e.$attrSelector,"]")))||{}).css,a=null===(r=e.$style)||void 0===r?void 0:r.load(l,Ye({name:"".concat(e.$attrSelector,"-").concat(e.$style.name)},t));e.scopedStyleEl=a.el}},_themeChangeListener:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:function(){};we.clearLoadedStyleNames(),m.on("theme:change",e)},_hook:function(e,t,n,o,i,r){var l,a,u="on".concat(P(t)),s=Ge._getConfig(o,i),c=null==n?void 0:n.$instance,d=Ge._usePT(c,Ge._getPT(null==o||null===(l=o.value)||void 0===l?void 0:l.pt,e),Ge._getOptionValue,"hooks.".concat(u)),v=Ge._useDefaultPT(c,null==s||null===(a=s.pt)||void 0===a||null===(a=a.directives)||void 0===a?void 0:a[e],Ge._getOptionValue,"hooks.".concat(u)),f={el:n,binding:o,vnode:i,prevVnode:r};null==d||d(c,f),null==v||v(c,f)},_mergeProps:function(){for(var e=arguments.length>1?arguments[1]:void 0,t=arguments.length,n=new Array(t>2?t-2:0),o=2;o1&&void 0!==arguments[1]?arguments[1]:{},n=function(n,o,i,r,l){var a,u,s,c;o._$instances=o._$instances||{};var d=Ge._getConfig(i,r),v=o._$instances[e]||{},f=$(v)?Ye(Ye({},t),null==t?void 0:t.methods):{};o._$instances[e]=Ye(Ye({},v),{},{$name:e,$host:o,$binding:i,$modifiers:null==i?void 0:i.modifiers,$value:null==i?void 0:i.value,$el:v.$el||o||void 0,$style:Ye({classes:void 0,inlineStyles:void 0,load:function(){},loadCSS:function(){},loadTheme:function(){}},null==t?void 0:t.style),$primevueConfig:d,$attrSelector:null===(a=o.$pd)||void 0===a||null===(a=a[e])||void 0===a?void 0:a.attrSelector,defaultPT:function(){return Ge._getPT(null==d?void 0:d.pt,void 0,(function(t){var n;return null==t||null===(n=t.directives)||void 0===n?void 0:n[e]}))},isUnstyled:function(){var e,t;return void 0!==(null===(e=o.$instance)||void 0===e||null===(e=e.$binding)||void 0===e||null===(e=e.value)||void 0===e?void 0:e.unstyled)?null===(t=o.$instance)||void 0===t||null===(t=t.$binding)||void 0===t||null===(t=t.value)||void 0===t?void 0:t.unstyled:null==d?void 0:d.unstyled},theme:function(){var e;return null===(e=o.$instance)||void 0===e||null===(e=e.$primevueConfig)||void 0===e?void 0:e.theme},preset:function(){var e;return null===(e=o.$instance)||void 0===e||null===(e=e.$binding)||void 0===e||null===(e=e.value)||void 0===e?void 0:e.dt},ptm:function(){var e,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return Ge._getPTValue(o.$instance,null===(e=o.$instance)||void 0===e||null===(e=e.$binding)||void 0===e||null===(e=e.value)||void 0===e?void 0:e.pt,t,Ye({},n))},ptmo:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return Ge._getPTValue(o.$instance,e,t,n,!1)},cx:function(){var e,t,n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return null!==(e=o.$instance)&&void 0!==e&&e.isUnstyled()?void 0:Ge._getOptionValue(null===(t=o.$instance)||void 0===t||null===(t=t.$style)||void 0===t?void 0:t.classes,n,Ye({},i))},sx:function(){var e,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return!(arguments.length>1&&void 0!==arguments[1])||arguments[1]?Ge._getOptionValue(null===(e=o.$instance)||void 0===e||null===(e=e.$style)||void 0===e?void 0:e.inlineStyles,t,Ye({},n)):void 0}},f),o.$instance=o._$instances[e],null===(u=(s=o.$instance)[n])||void 0===u||u.call(s,o,i,r,l),o["$".concat(e)]=o.$instance,Ge._hook(e,n,o,i,r,l),o.$pd||(o.$pd={}),o.$pd[e]=Ye(Ye({},null===(c=o.$pd)||void 0===c?void 0:c[e]),{},{name:e,instance:o.$instance})};return{created:function(t,o,i,r){t.$pd||(t.$pd={}),t.$pd[e]={name:e,attrSelector:p("pd")},n("created",t,o,i,r)},beforeMount:function(e,t,o,i){Ge._loadStyles(e,t,o),n("beforeMount",e,t,o,i),function(e){var t,n,o,i,r,l=null===(t=e.$instance)||void 0===t?void 0:t.watch;null==l||null===(n=l.config)||void 0===n||n.call(e.$instance,null===(o=e.$instance)||void 0===o?void 0:o.$primevueConfig),fe.on("config:change",(function(t){var n,o=t.newValue,i=t.oldValue;return null==l||null===(n=l.config)||void 0===n?void 0:n.call(e.$instance,o,i)})),null==l||null===(i=l["config.ripple"])||void 0===i||i.call(e.$instance,null===(r=e.$instance)||void 0===r||null===(r=r.$primevueConfig)||void 0===r?void 0:r.ripple),fe.on("config:ripple:change",(function(t){var n,o=t.newValue,i=t.oldValue;return null==l||null===(n=l["config.ripple"])||void 0===n?void 0:n.call(e.$instance,o,i)}))}(e)},mounted:function(e,t,o,i){Ge._loadStyles(e,t,o),n("mounted",e,t,o,i)},beforeUpdate:function(e,t,o,i){n("beforeUpdate",e,t,o,i)},updated:function(e,t,o,i){Ge._loadStyles(e,t,o),n("updated",e,t,o,i)},beforeUnmount:function(e,t,o,i){n("beforeUnmount",e,t,o,i)},unmounted:function(e,t,o,i){var r;null===(r=e.$instance)||void 0===r||null===(r=r.scopedStyleEl)||void 0===r||null===(r=r.value)||void 0===r||r.remove(),n("unmounted",e,t,o,i)}}},extend:function(){var e=We(Ge._getMeta.apply(Ge,arguments),2),t=e[0],n=e[1];return Ye({extend:function(){var e=We(Ge._getMeta.apply(Ge,arguments),2),t=e[0],o=e[1];return Ge.extend(t,Ye(Ye(Ye({},n),null==n?void 0:n.methods),o))}},Ge._extend(t,n))}};function Je(e){return(Je="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function Ke(e,t,n){return t&&function(e,t){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:function(){};!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.element=t,this.listener=n}),[{key:"bindScrollListener",value:function(){this.scrollableParents=O(this.element);for(var e=0;e0&&void 0!==arguments[0]?arguments[0]:"pv_id_")}var tt={name:"BlankIcon",extends:Ue};tt.render=function(e,t,n,o,i,r){return k(),D("svg",M({width:"14",height:"14",viewBox:"0 0 14 14",fill:"none",xmlns:"http://www.w3.org/2000/svg"},e.pti()),t[0]||(t[0]=[E("rect",{width:"1",height:"1",fill:"currentColor","fill-opacity":"0"},null,-1)]),16)};var nt={name:"CheckIcon",extends:Ue};nt.render=function(e,t,n,o,i,r){return k(),D("svg",M({width:"14",height:"14",viewBox:"0 0 14 14",fill:"none",xmlns:"http://www.w3.org/2000/svg"},e.pti()),t[0]||(t[0]=[E("path",{d:"M4.86199 11.5948C4.78717 11.5923 4.71366 11.5745 4.64596 11.5426C4.57826 11.5107 4.51779 11.4652 4.46827 11.4091L0.753985 7.69483C0.683167 7.64891 0.623706 7.58751 0.580092 7.51525C0.536478 7.44299 0.509851 7.36177 0.502221 7.27771C0.49459 7.19366 0.506156 7.10897 0.536046 7.03004C0.565935 6.95111 0.613367 6.88 0.674759 6.82208C0.736151 6.76416 0.8099 6.72095 0.890436 6.69571C0.970973 6.67046 1.05619 6.66385 1.13966 6.67635C1.22313 6.68886 1.30266 6.72017 1.37226 6.76792C1.44186 6.81567 1.4997 6.8786 1.54141 6.95197L4.86199 10.2503L12.6397 2.49483C12.7444 2.42694 12.8689 2.39617 12.9932 2.40745C13.1174 2.41873 13.2343 2.47141 13.3251 2.55705C13.4159 2.64268 13.4753 2.75632 13.4938 2.87973C13.5123 3.00315 13.4888 3.1292 13.4271 3.23768L5.2557 11.4091C5.20618 11.4652 5.14571 11.5107 5.07801 11.5426C5.01031 11.5745 4.9368 11.5923 4.86199 11.5948Z",fill:"currentColor"},null,-1)]),16)};var ot={name:"ChevronDownIcon",extends:Ue};ot.render=function(e,t,n,o,i,r){return k(),D("svg",M({width:"14",height:"14",viewBox:"0 0 14 14",fill:"none",xmlns:"http://www.w3.org/2000/svg"},e.pti()),t[0]||(t[0]=[E("path",{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",fill:"currentColor"},null,-1)]),16)};var it={name:"SearchIcon",extends:Ue};it.render=function(e,t,n,o,i,r){return k(),D("svg",M({width:"14",height:"14",viewBox:"0 0 14 14",fill:"none",xmlns:"http://www.w3.org/2000/svg"},e.pti()),t[0]||(t[0]=[E("path",{"fill-rule":"evenodd","clip-rule":"evenodd",d:"M2.67602 11.0265C3.6661 11.688 4.83011 12.0411 6.02086 12.0411C6.81149 12.0411 7.59438 11.8854 8.32483 11.5828C8.87005 11.357 9.37808 11.0526 9.83317 10.6803L12.9769 13.8241C13.0323 13.8801 13.0983 13.9245 13.171 13.9548C13.2438 13.985 13.3219 14.0003 13.4007 14C13.4795 14.0003 13.5575 13.985 13.6303 13.9548C13.7031 13.9245 13.7691 13.8801 13.8244 13.8241C13.9367 13.7116 13.9998 13.5592 13.9998 13.4003C13.9998 13.2414 13.9367 13.089 13.8244 12.9765L10.6807 9.8328C11.053 9.37773 11.3573 8.86972 11.5831 8.32452C11.8857 7.59408 12.0414 6.81119 12.0414 6.02056C12.0414 4.8298 11.6883 3.66579 11.0268 2.67572C10.3652 1.68564 9.42494 0.913972 8.32483 0.45829C7.22472 0.00260857 6.01418 -0.116618 4.84631 0.115686C3.67844 0.34799 2.60568 0.921393 1.76369 1.76338C0.921698 2.60537 0.348296 3.67813 0.115991 4.84601C-0.116313 6.01388 0.00291375 7.22441 0.458595 8.32452C0.914277 9.42464 1.68595 10.3649 2.67602 11.0265ZM3.35565 2.0158C4.14456 1.48867 5.07206 1.20731 6.02086 1.20731C7.29317 1.20731 8.51338 1.71274 9.41304 2.6124C10.3127 3.51206 10.8181 4.73226 10.8181 6.00457C10.8181 6.95337 10.5368 7.88088 10.0096 8.66978C9.48251 9.45868 8.73328 10.0736 7.85669 10.4367C6.98011 10.7997 6.01554 10.8947 5.08496 10.7096C4.15439 10.5245 3.2996 10.0676 2.62869 9.39674C1.95778 8.72583 1.50089 7.87104 1.31579 6.94046C1.13068 6.00989 1.22568 5.04532 1.58878 4.16874C1.95187 3.29215 2.56675 2.54292 3.35565 2.0158Z",fill:"currentColor"},null,-1)]),16)};var rt={name:"TimesIcon",extends:Ue};rt.render=function(e,t,n,o,i,r){return k(),D("svg",M({width:"14",height:"14",viewBox:"0 0 14 14",fill:"none",xmlns:"http://www.w3.org/2000/svg"},e.pti()),t[0]||(t[0]=[E("path",{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",fill:"currentColor"},null,-1)]),16)};var lt={name:"BaseEditableHolder",extends:De,emits:["update:modelValue","value-change"],props:{modelValue:{type:null,default:void 0},defaultValue:{type:null,default:void 0},name:{type:String,default:void 0},invalid:{type:Boolean,default:void 0},disabled:{type:Boolean,default:!1},formControl:{type:Object,default:void 0}},inject:{$parentInstance:{default:void 0},$pcForm:{default:void 0},$pcFormField:{default:void 0}},data:function(){return{d_value:this.defaultValue||this.modelValue}},watch:{modelValue:function(e){this.d_value=e},defaultValue:function(e){this.d_value=e},$formName:{immediate:!0,handler:function(e){var t,n;this.formField=(null===(t=this.$pcForm)||void 0===t||null===(n=t.register)||void 0===n?void 0:n.call(t,e,this.$formControl))||{}}},$formControl:{immediate:!0,handler:function(e){var t,n;this.formField=(null===(t=this.$pcForm)||void 0===t||null===(n=t.register)||void 0===n?void 0:n.call(t,this.$formName,e))||{}}},$formDefaultValue:{immediate:!0,handler:function(e){this.d_value!==e&&(this.d_value=e)}}},formField:{},methods:{writeValue:function(e,t){var n,o;this.controlled&&(this.d_value=e,this.$emit("update:modelValue",e)),this.$emit("value-change",e),null===(n=(o=this.formField).onChange)||void 0===n||n.call(o,{originalEvent:t,value:e})}},computed:{$filled:function(){return u(this.d_value)},$invalid:function(){var e,t,n,o;return null!==(e=null!==(t=this.invalid)&&void 0!==t?t:null===(n=this.$pcFormField)||void 0===n||null===(n=n.$field)||void 0===n?void 0:n.invalid)&&void 0!==e?e:null===(o=this.$pcForm)||void 0===o||null===(o=o.states)||void 0===o||null===(o=o[this.$formName])||void 0===o?void 0:o.invalid},$formName:function(){var e;return this.name||(null===(e=this.$formControl)||void 0===e?void 0:e.name)},$formControl:function(){var e;return this.formControl||(null===(e=this.$pcFormField)||void 0===e?void 0:e.formControl)},$formDefaultValue:function(){var e,t,n,o;return null!==(e=null!==(t=this.d_value)&&void 0!==t?t:null===(n=this.$pcFormField)||void 0===n?void 0:n.initialValue)&&void 0!==e?e:null===(o=this.$pcForm)||void 0===o||null===(o=o.initialValues)||void 0===o?void 0:o[this.$formName]},controlled:function(){return this.$inProps.hasOwnProperty("modelValue")||!this.$inProps.hasOwnProperty("modelValue")&&!this.$inProps.hasOwnProperty("defaultValue")},filled:function(){return this.$filled}}},at={name:"BaseInput",extends:lt,props:{size:{type:String,default:null},fluid:{type:Boolean,default:null},variant:{type:String,default:null}},inject:{$parentInstance:{default:void 0},$pcFluid:{default:void 0}},computed:{$variant:function(){var e;return null!==(e=this.variant)&&void 0!==e?e:this.$primevue.config.inputStyle||this.$primevue.config.inputVariant},$fluid:function(){var e;return null!==(e=this.fluid)&&void 0!==e?e:!!this.$pcFluid},hasFluid:function(){return this.$fluid}}},ut={name:"MinusIcon",extends:Ue};ut.render=function(e,t,n,o,i,r){return k(),D("svg",M({width:"14",height:"14",viewBox:"0 0 14 14",fill:"none",xmlns:"http://www.w3.org/2000/svg"},e.pti()),t[0]||(t[0]=[E("path",{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",fill:"currentColor"},null,-1)]),16)};var st={name:"TimesCircleIcon",extends:Ue};st.render=function(e,t,n,o,i,r){return k(),D("svg",M({width:"14",height:"14",viewBox:"0 0 14 14",fill:"none",xmlns:"http://www.w3.org/2000/svg"},e.pti()),t[0]||(t[0]=[E("path",{"fill-rule":"evenodd","clip-rule":"evenodd",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",fill:"currentColor"},null,-1)]),16)};var ct={name:"AngleRightIcon",extends:Ue};ct.render=function(e,t,n,o,i,r){return k(),D("svg",M({width:"14",height:"14",viewBox:"0 0 14 14",fill:"none",xmlns:"http://www.w3.org/2000/svg"},e.pti()),t[0]||(t[0]=[E("path",{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",fill:"currentColor"},null,-1)]),16)};export{ve as B,Xe as C,X as F,$e as P,et as U,Ge as a,Re as b,at as c,rt as d,ot as e,it as f,nt as g,tt as h,ut as i,st as j,lt as k,ct as l,De as s}; diff --git a/comfyui-easy-use/web_version/v2/assets/vendor-D0iX-Vke.js b/comfyui-easy-use/web_version/v2/assets/vendor-D0iX-Vke.js new file mode 100644 index 0000000000000000000000000000000000000000..bee47be9cee1d9e91433c3e3e0eeef3807d80c41 --- /dev/null +++ b/comfyui-easy-use/web_version/v2/assets/vendor-D0iX-Vke.js @@ -0,0 +1,7 @@ +import{C as t,r as e,m as n,w as o,s as i,D as r,E as s,G as l,H as a,I as c,J as u,A as d,K as p,L as h,h as f,M as b,a as m,c as g,p as v,N as y,t as x,B as I,O as k,P as w,e as O,f as S,q as L,k as $,b as C,n as z,Q as E,T,F as _,i as M,d as P,R as V,S as F,U as A}from"./vue-Cu3MA6TM.js";import{f as K,v as D,z as B,A as H,B as j,C as R,D as G,F as U,G as N,H as W,I as q,E as X,c as Y,J as Z,l as J,Z as Q,r as tt,K as et,L as nt,M as ot,N as it,O as rt,P as st,Q as lt,R as at,S as ct,T as ut,e as dt,U as pt,i as ht,V as ft,W as bt,X as mt,Y as gt,_ as vt,$ as yt,a0 as xt,d as It,a1 as kt,a2 as wt,a3 as Ot}from"./primeuix-CNMLIuxO.js";import{B as St,s as Lt,a as $t,b as Ct,c as zt,U as Et,C as Tt,F as _t,d as Mt,e as Pt,f as Vt,g as Ft,h as At,i as Kt,j as Dt,k as Bt,l as Ht}from"./primevue-CWKvsPkZ.js"; +/*! + * pinia v2.2.1 + * (c) 2024 Eduardo San Martin Morote + * @license MIT + */ +let jt;const Rt=t=>jt=t,Gt=Symbol();function Ut(t){return t&&"object"==typeof t&&"[object Object]"===Object.prototype.toString.call(t)&&"function"!=typeof t.toJSON}var Nt,Wt;function qt(){const o=t(!0),i=o.run((()=>e({})));let r=[],s=[];const l=n({install(t){Rt(l),l._a=t,t.provide(Gt,l),t.config.globalProperties.$pinia=l,s.forEach((t=>r.push(t))),s=[]},use(t){return this._a?r.push(t):s.push(t),this},_p:r,_a:null,_e:o,_s:new Map,state:i});return l}(Wt=Nt||(Nt={})).direct="direct",Wt.patchObject="patch object",Wt.patchFunction="patch function";const Xt=()=>{};function Yt(t,e,n,o=Xt){t.push(e);const i=()=>{const n=t.indexOf(e);n>-1&&(t.splice(n,1),o())};return!n&&c()&&u(i),i}function Zt(t,...e){t.slice().forEach((t=>{t(...e)}))}const Jt=t=>t(),Qt=Symbol(),te=Symbol();function ee(t,e){t instanceof Map&&e instanceof Map?e.forEach(((e,n)=>t.set(n,e))):t instanceof Set&&e instanceof Set&&e.forEach(t.add,t);for(const n in e){if(!e.hasOwnProperty(n))continue;const o=e[n],i=t[n];Ut(i)&&Ut(o)&&t.hasOwnProperty(n)&&!r(o)&&!s(o)?t[n]=ee(i,o):t[n]=o}return t}const ne=Symbol();const{assign:oe}=Object;function ie(n,a,c={},u,p,h){let f;const b=oe({actions:{}},c),m={deep:!0};let g,v,y,x=[],I=[];const k=u.state.value[n];let w;function O(t){let e;g=v=!1,"function"==typeof t?(t(u.state.value[n]),e={type:Nt.patchFunction,storeId:n,events:y}):(ee(u.state.value[n],t),e={type:Nt.patchObject,payload:t,storeId:n,events:y});const o=w=Symbol();d().then((()=>{w===o&&(g=!0)})),v=!0,Zt(x,e,u.state.value[n])}h||k||(u.state.value[n]={}),e({});const S=h?function(){const{state:t}=c,e=t?t():{};this.$patch((t=>{oe(t,e)}))}:Xt;const L=(t,e="")=>{if(Qt in t)return t[te]=e,t;const o=function(){Rt(u);const e=Array.from(arguments),i=[],r=[];let s;Zt(I,{args:e,name:o[te],store:C,after:function(t){i.push(t)},onError:function(t){r.push(t)}});try{s=t.apply(this&&this.$id===n?this:C,e)}catch(l){throw Zt(r,l),l}return s instanceof Promise?s.then((t=>(Zt(i,t),t))).catch((t=>(Zt(r,t),Promise.reject(t)))):(Zt(i,s),s)};return o[Qt]=!0,o[te]=e,o},$={_p:u,$id:n,$onAction:Yt.bind(null,I),$patch:O,$reset:S,$subscribe(t,e={}){const i=Yt(x,t,e.detached,(()=>r())),r=f.run((()=>o((()=>u.state.value[n]),(o=>{("sync"===e.flush?v:g)&&t({storeId:n,type:Nt.direct,events:y},o)}),oe({},m,e))));return i},$dispose:function(){f.stop(),x=[],I=[],u._s.delete(n)}},C=i($);u._s.set(n,C);const z=(u._a&&u._a.runWithContext||Jt)((()=>u._e.run((()=>(f=t()).run((()=>a({action:L})))))));for(const t in z){const e=z[t];if(r(e)&&(!r(T=e)||!T.effect)||s(e))h||(!k||Ut(E=e)&&E.hasOwnProperty(ne)||(r(e)?e.value=k[t]:ee(e,k[t])),u.state.value[n][t]=e);else if("function"==typeof e){const n=L(e,t);z[t]=n,b.actions[t]=e}}var E,T;return oe(C,z),oe(l(C),z),Object.defineProperty(C,"$state",{get:()=>u.state.value[n],set:t=>{O((e=>{oe(e,t)}))}}),u._p.forEach((t=>{oe(C,f.run((()=>t({store:C,app:u._a,pinia:u,options:b}))))})),k&&h&&c.hydrate&&c.hydrate(C.$state,k),g=!0,v=!0,C}function re(t,e,o){let i,r;const s="function"==typeof e;function l(t,o){const l=b();(t=t||(l?p(Gt,null):null))&&Rt(t),(t=jt)._s.has(i)||(s?ie(i,e,r,t):function(t,e,o){const{state:i,actions:r,getters:s}=e,l=o.state.value[t];let a;a=ie(t,(function(){l||(o.state.value[t]=i?i():{});const e=h(o.state.value[t]);return oe(e,r,Object.keys(s||{}).reduce(((e,i)=>(e[i]=n(f((()=>{Rt(o);const e=o._s.get(t);return s[i].call(e,e)}))),e)),{}))}),e,o,0,!0)}(i,r,t));return t._s.get(i)}return"string"==typeof t?(i=t,r=s?o:e):(r=t,i=t.id),l.$id=i,l}function se(t){{t=l(t);const e={};for(const n in t){const o=t[n];(r(o)||s(o))&&(e[n]=a(t,n))}return e}}const le="undefined"!=typeof navigator&&navigator.userAgent.toLowerCase().indexOf("firefox")>0;function ae(t,e,n,o){t.addEventListener?t.addEventListener(e,n,o):t.attachEvent&&t.attachEvent("on".concat(e),n)}function ce(t,e,n,o){t.removeEventListener?t.removeEventListener(e,n,o):t.detachEvent&&t.detachEvent("on".concat(e),n)}function ue(t,e){const n=e.slice(0,e.length-1);for(let o=0;o=0;)e[n-1]+=",",e.splice(n,1),n=e.lastIndexOf("");return e}const pe={backspace:8,"⌫":8,tab:9,clear:12,enter:13,"↩":13,return:13,esc:27,escape:27,space:32,left:37,up:38,right:39,down:40,del:46,delete:46,ins:45,insert:45,home:36,end:35,pageup:33,pagedown:34,capslock:20,num_0:96,num_1:97,num_2:98,num_3:99,num_4:100,num_5:101,num_6:102,num_7:103,num_8:104,num_9:105,num_multiply:106,num_add:107,num_enter:108,num_subtract:109,num_decimal:110,num_divide:111,"⇪":20,",":188,".":190,"/":191,"`":192,"-":le?173:189,"=":le?61:187,";":le?59:186,"'":222,"[":219,"]":221,"\\":220},he={"⇧":16,shift:16,"⌥":18,alt:18,option:18,"⌃":17,ctrl:17,control:17,"⌘":91,cmd:91,command:91},fe={16:"shiftKey",18:"altKey",17:"ctrlKey",91:"metaKey",shiftKey:16,ctrlKey:17,altKey:18,metaKey:91},be={16:!1,18:!1,17:!1,91:!1},me={};for(let Oo=1;Oo<20;Oo++)pe["f".concat(Oo)]=111+Oo;let ge=[],ve=null,ye="all";const xe=new Map,Ie=t=>pe[t.toLowerCase()]||he[t.toLowerCase()]||t.toUpperCase().charCodeAt(0);function ke(t){ye=t||"all"}function we(){return ye||"all"}function Oe(t){if(void 0===t)Object.keys(me).forEach((t=>{Array.isArray(me[t])&&me[t].forEach((t=>Se(t))),delete me[t]})),ze(null);else if(Array.isArray(t))t.forEach((t=>{t.key&&Se(t)}));else if("object"==typeof t)t.key&&Se(t);else if("string"==typeof t){for(var e=arguments.length,n=new Array(e>1?e-1:0),o=1;o{let{key:e,scope:n,method:o,splitKey:i="+"}=t;de(e).forEach((t=>{const e=t.split(i),r=e.length,s=e[r-1],l="*"===s?"*":Ie(s);if(!me[l])return;n||(n=we());const a=r>1?ue(he,e):[],c=[];me[l]=me[l].filter((t=>{const e=(!o||t.method===o)&&t.scope===n&&function(t,e){const n=t.length>=e.length?t:e,o=t.length>=e.length?e:t;let i=!0;for(let r=0;rze(t)))}))};function Le(t,e,n,o){if(e.element!==o)return;let i;if(e.scope===n||"all"===e.scope){i=e.mods.length>0;for(const t in be)Object.prototype.hasOwnProperty.call(be,t)&&(!be[t]&&e.mods.indexOf(+t)>-1||be[t]&&-1===e.mods.indexOf(+t))&&(i=!1);(0!==e.mods.length||be[16]||be[18]||be[17]||be[91])&&!i&&"*"!==e.shortcut||(e.keys=[],e.keys=e.keys.concat(ge),!1===e.method(t,e)&&(t.preventDefault?t.preventDefault():t.returnValue=!1,t.stopPropagation&&t.stopPropagation(),t.cancelBubble&&(t.cancelBubble=!0)))}}function $e(t,e){const n=me["*"];let o=t.keyCode||t.which||t.charCode;if(!Ce.filter.call(this,t))return;if(93!==o&&224!==o||(o=91),-1===ge.indexOf(o)&&229!==o&&ge.push(o),["ctrlKey","altKey","shiftKey","metaKey"].forEach((e=>{const n=fe[e];t[e]&&-1===ge.indexOf(n)?ge.push(n):!t[e]&&ge.indexOf(n)>-1?ge.splice(ge.indexOf(n),1):"metaKey"===e&&t[e]&&3===ge.length&&(t.ctrlKey||t.shiftKey||t.altKey||(ge=ge.slice(ge.indexOf(n))))})),o in be){be[o]=!0;for(const t in he)he[t]===o&&(Ce[t]=!0);if(!n)return}for(const l in be)Object.prototype.hasOwnProperty.call(be,l)&&(be[l]=t[fe[l]]);t.getModifierState&&(!t.altKey||t.ctrlKey)&&t.getModifierState("AltGraph")&&(-1===ge.indexOf(17)&&ge.push(17),-1===ge.indexOf(18)&&ge.push(18),be[17]=!0,be[18]=!0);const i=we();if(n)for(let l=0;l1&&(i=ue(he,t)),(t="*"===(t=t[t.length-1])?"*":Ie(t))in me||(me[t]=[]),me[t].push({keyup:a,keydown:c,scope:r,mods:i,shortcut:o[l],method:n,key:o[l],splitKey:u,element:s});if(void 0!==s&&window){if(!xe.has(s)){const t=function(){return $e(arguments.length>0&&void 0!==arguments[0]?arguments[0]:window.event,s)},e=function(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:window.event;$e(t,s),function(t){let e=t.keyCode||t.which||t.charCode;const n=ge.indexOf(e);if(n>=0&&ge.splice(n,1),t.key&&"meta"===t.key.toLowerCase()&&ge.splice(0,ge.length),93!==e&&224!==e||(e=91),e in be){be[e]=!1;for(const t in he)he[t]===e&&(Ce[t]=!1)}}(t)};xe.set(s,{keydownListener:t,keyupListenr:e,capture:d}),ae(s,"keydown",t,d),ae(s,"keyup",e,d)}if(!ve){const t=()=>{ge=[]};ve={listener:t,capture:d},ae(window,"focus",t,d)}}}function ze(t){const e=Object.values(me).flat();if(e.findIndex((e=>{let{element:n}=e;return n===t}))<0){const{keydownListener:e,keyupListenr:n,capture:o}=xe.get(t)||{};e&&n&&(ce(t,"keyup",n,o),ce(t,"keydown",e,o),xe.delete(t))}if(e.length<=0||xe.size<=0){if(Object.keys(xe).forEach((t=>{const{keydownListener:e,keyupListenr:n,capture:o}=xe.get(t)||{};e&&n&&(ce(t,"keyup",n,o),ce(t,"keydown",e,o),xe.delete(t))})),xe.clear(),Object.keys(me).forEach((t=>delete me[t])),ve){const{listener:t,capture:e}=ve;ce(window,"focus",t,e),ve=null}}}const Ee={getPressedKeyString:function(){return ge.map((t=>{return e=t,Object.keys(pe).find((t=>pe[t]===e))||(t=>Object.keys(he).find((e=>he[e]===t)))(t)||String.fromCharCode(t);var e}))},setScope:ke,getScope:we,deleteScope:function(t,e){let n,o;t||(t=we());for(const i in me)if(Object.prototype.hasOwnProperty.call(me,i))for(n=me[i],o=0;o{let{element:e}=t;return ze(e)}))}else o++;we()===t&&ke(e||"all")},getPressedKeyCodes:function(){return ge.slice(0)},getAllKeyCodes:function(){const t=[];return Object.keys(me).forEach((e=>{me[e].forEach((e=>{let{key:n,scope:o,mods:i,shortcut:r}=e;t.push({scope:o,shortcut:r,mods:i,keys:n.split("+").map((t=>Ie(t)))})}))})),t},isPressed:function(t){return"string"==typeof t&&(t=Ie(t)),-1!==ge.indexOf(t)},filter:function(t){const e=t.target||t.srcElement,{tagName:n}=e;let o=!0;const i="INPUT"===n&&!["checkbox","radio","range","button","file","reset","submit","color"].includes(e.type);return(e.isContentEditable||(i||"TEXTAREA"===n||"SELECT"===n)&&!e.readOnly)&&(o=!1),o},trigger:function(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"all";Object.keys(me).forEach((n=>{me[n].filter((n=>n.scope===e&&n.shortcut===t)).forEach((t=>{t&&t.method&&t.method()}))}))},unbind:Oe,keyMap:pe,modifier:he,modifierMap:fe};for(const Oo in Ee)Object.prototype.hasOwnProperty.call(Ee,Oo)&&(Ce[Oo]=Ee[Oo]);if("undefined"!=typeof window){const t=window.hotkeys;Ce.noConflict=e=>(e&&window.hotkeys===Ce&&(window.hotkeys=t),Ce),window.hotkeys=Ce}var Te={root:function(t){var e=t.props,n=t.instance;return["p-badge p-component",{"p-badge-circle":K(e.value)&&1===String(e.value).length,"p-badge-dot":D(e.value)&&!n.$slots.default,"p-badge-sm":"small"===e.size,"p-badge-lg":"large"===e.size,"p-badge-xl":"xlarge"===e.size,"p-badge-info":"info"===e.severity,"p-badge-success":"success"===e.severity,"p-badge-warn":"warn"===e.severity,"p-badge-danger":"danger"===e.severity,"p-badge-secondary":"secondary"===e.severity,"p-badge-contrast":"contrast"===e.severity}]}},_e=St.extend({name:"badge",theme:function(t){var e=t.dt;return"\n.p-badge {\n display: inline-flex;\n border-radius: ".concat(e("badge.border.radius"),";\n align-items: center;\n justify-content: center;\n padding: ").concat(e("badge.padding"),";\n background: ").concat(e("badge.primary.background"),";\n color: ").concat(e("badge.primary.color"),";\n font-size: ").concat(e("badge.font.size"),";\n font-weight: ").concat(e("badge.font.weight"),";\n min-width: ").concat(e("badge.min.width"),";\n height: ").concat(e("badge.height"),";\n}\n\n.p-badge-dot {\n width: ").concat(e("badge.dot.size"),";\n min-width: ").concat(e("badge.dot.size"),";\n height: ").concat(e("badge.dot.size"),";\n border-radius: 50%;\n padding: 0;\n}\n\n.p-badge-circle {\n padding: 0;\n border-radius: 50%;\n}\n\n.p-badge-secondary {\n background: ").concat(e("badge.secondary.background"),";\n color: ").concat(e("badge.secondary.color"),";\n}\n\n.p-badge-success {\n background: ").concat(e("badge.success.background"),";\n color: ").concat(e("badge.success.color"),";\n}\n\n.p-badge-info {\n background: ").concat(e("badge.info.background"),";\n color: ").concat(e("badge.info.color"),";\n}\n\n.p-badge-warn {\n background: ").concat(e("badge.warn.background"),";\n color: ").concat(e("badge.warn.color"),";\n}\n\n.p-badge-danger {\n background: ").concat(e("badge.danger.background"),";\n color: ").concat(e("badge.danger.color"),";\n}\n\n.p-badge-contrast {\n background: ").concat(e("badge.contrast.background"),";\n color: ").concat(e("badge.contrast.color"),";\n}\n\n.p-badge-sm {\n font-size: ").concat(e("badge.sm.font.size"),";\n min-width: ").concat(e("badge.sm.min.width"),";\n height: ").concat(e("badge.sm.height"),";\n}\n\n.p-badge-lg {\n font-size: ").concat(e("badge.lg.font.size"),";\n min-width: ").concat(e("badge.lg.min.width"),";\n height: ").concat(e("badge.lg.height"),";\n}\n\n.p-badge-xl {\n font-size: ").concat(e("badge.xl.font.size"),";\n min-width: ").concat(e("badge.xl.min.width"),";\n height: ").concat(e("badge.xl.height"),";\n}\n")},classes:Te}),Me={name:"Badge",extends:{name:"BaseBadge",extends:Lt,props:{value:{type:[String,Number],default:null},severity:{type:String,default:null},size:{type:String,default:null}},style:_e,provide:function(){return{$pcBadge:this,$parentInstance:this}}},inheritAttrs:!1};Me.render=function(t,e,n,o,i,r){return m(),g("span",I({class:t.cx("root")},t.ptmi("root")),[v(t.$slots,"default",{},(function(){return[y(x(t.value),1)]}))],16)};var Pe=St.extend({name:"ripple-directive",theme:function(t){var e=t.dt;return"\n.p-ink {\n display: block;\n position: absolute;\n background: ".concat(e("ripple.background"),";\n border-radius: 100%;\n transform: scale(0);\n pointer-events: none;\n}\n\n.p-ink-active {\n animation: ripple 0.4s linear;\n}\n\n@keyframes ripple {\n 100% {\n opacity: 0;\n transform: scale(2.5);\n }\n}\n")},classes:{root:"p-ink"}});function Ve(t){return(Ve="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function Fe(t){return function(t){if(Array.isArray(t))return Ae(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||function(t,e){if(t){if("string"==typeof t)return Ae(t,e);var n={}.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Ae(t,e):void 0}}(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Ae(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,o=Array(e);n .p-virtualscroller-content {\n display: flex;\n}\n\n.p-virtualscroller-inline .p-virtualscroller-content {\n position: static;\n}\n",theme:function(t){var e=t.dt;return"\n.p-virtualscroller-loader {\n background: ".concat(e("virtualscroller.loader.mask.background"),";\n color: ").concat(e("virtualscroller.loader.mask.color"),";\n}\n\n.p-virtualscroller-loading-icon {\n font-size: ").concat(e("virtualscroller.loader.icon.size"),";\n width: ").concat(e("virtualscroller.loader.icon.size"),";\n height: ").concat(e("virtualscroller.loader.icon.size"),";\n}\n")}});function Je(t){return(Je="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function Qe(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);e&&(o=o.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,o)}return n}function tn(t){for(var e=1;e1&&void 0!==arguments[1]?arguments[1]:"auto",o=this.isBoth(),i=this.isHorizontal();if(o?t.every((function(t){return t>-1})):t>-1){var r=this.first,s=this.element,l=s.scrollTop,a=void 0===l?0:l,c=s.scrollLeft,u=void 0===c?0:c,d=this.calculateNumItems().numToleratedItems,p=this.getContentPosition(),h=this.itemSize,f=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;return t<=(arguments.length>1?arguments[1]:void 0)?0:t},b=function(t,e,n){return t*e+n},m=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;return e.scrollTo({left:t,top:o,behavior:n})},g=o?{rows:0,cols:0}:0,v=!1,y=!1;o?(m(b((g={rows:f(t[0],d[0]),cols:f(t[1],d[1])}).cols,h[1],p.left),b(g.rows,h[0],p.top)),y=this.lastScrollPos.top!==a||this.lastScrollPos.left!==u,v=g.rows!==r.rows||g.cols!==r.cols):(g=f(t,d),i?m(b(g,h,p.left),a):m(u,b(g,h,p.top)),y=this.lastScrollPos!==(i?u:a),v=g!==r),this.isRangeChanged=v,y&&(this.first=g)}},scrollInView:function(t,e){var n=this,o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"auto";if(e){var i=this.isBoth(),r=this.isHorizontal();if(i?t.every((function(t){return t>-1})):t>-1){var s=this.getRenderedRange(),l=s.first,a=s.viewport,c=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;return n.scrollTo({left:t,top:e,behavior:o})},u="to-end"===e;if("to-start"===e){if(i)a.first.rows-l.rows>t[0]?c(a.first.cols*this.itemSize[1],(a.first.rows-1)*this.itemSize[0]):a.first.cols-l.cols>t[1]&&c((a.first.cols-1)*this.itemSize[1],a.first.rows*this.itemSize[0]);else if(a.first-l>t){var d=(a.first-1)*this.itemSize;r?c(d,0):c(0,d)}}else if(u)if(i)a.last.rows-l.rows<=t[0]+1?c(a.first.cols*this.itemSize[1],(a.first.rows+1)*this.itemSize[0]):a.last.cols-l.cols<=t[1]+1&&c((a.first.cols+1)*this.itemSize[1],a.first.rows*this.itemSize[0]);else if(a.last-l<=t+1){var p=(a.first+1)*this.itemSize;r?c(p,0):c(0,p)}}}else this.scrollToIndex(t,o)},getRenderedRange:function(){var t=function(t,e){return Math.floor(t/(e||t))},e=this.first,n=0;if(this.element){var o=this.isBoth(),i=this.isHorizontal(),r=this.element,s=r.scrollTop,l=r.scrollLeft;if(o)n={rows:(e={rows:t(s,this.itemSize[0]),cols:t(l,this.itemSize[1])}).rows+this.numItemsInViewport.rows,cols:e.cols+this.numItemsInViewport.cols};else n=(e=t(i?l:s,this.itemSize))+this.numItemsInViewport}return{first:this.first,last:this.last,viewport:{first:e,last:n}}},calculateNumItems:function(){var t=this.isBoth(),e=this.isHorizontal(),n=this.itemSize,o=this.getContentPosition(),i=this.element?this.element.offsetWidth-o.left:0,r=this.element?this.element.offsetHeight-o.top:0,s=function(t,e){return Math.ceil(t/(e||t))},l=function(t){return Math.ceil(t/2)},a=t?{rows:s(r,n[0]),cols:s(i,n[1])}:s(e?i:r,n);return{numItemsInViewport:a,numToleratedItems:this.d_numToleratedItems||(t?[l(a.rows),l(a.cols)]:l(a))}},calculateOptions:function(){var t=this,e=this.isBoth(),n=this.first,o=this.calculateNumItems(),i=o.numItemsInViewport,r=o.numToleratedItems,s=function(e,n,o){var i=arguments.length>3&&void 0!==arguments[3]&&arguments[3];return t.getLast(e+n+(e0&&void 0!==arguments[0]?arguments[0]:0,o=arguments.length>1?arguments[1]:void 0;return this.items?Math.min(o?(null===(t=this.columns||this.items[0])||void 0===t?void 0:t.length)||0:(null===(e=this.items)||void 0===e?void 0:e.length)||0,n):0},getContentPosition:function(){if(this.content){var t=getComputedStyle(this.content),e=parseFloat(t.paddingLeft)+Math.max(parseFloat(t.left)||0,0),n=parseFloat(t.paddingRight)+Math.max(parseFloat(t.right)||0,0),o=parseFloat(t.paddingTop)+Math.max(parseFloat(t.top)||0,0),i=parseFloat(t.paddingBottom)+Math.max(parseFloat(t.bottom)||0,0);return{left:e,right:n,top:o,bottom:i,x:e+n,y:o+i}}return{left:0,right:0,top:0,bottom:0,x:0,y:0}},setSize:function(){var t=this;if(this.element){var e=this.isBoth(),n=this.isHorizontal(),o=this.element.parentElement,i=this.scrollWidth||"".concat(this.element.offsetWidth||o.offsetWidth,"px"),r=this.scrollHeight||"".concat(this.element.offsetHeight||o.offsetHeight,"px"),s=function(e,n){return t.element.style[e]=n};e||n?(s("height",r),s("width",i)):s("height",r)}},setSpacerSize:function(){var t=this,e=this.items;if(e){var n=this.isBoth(),o=this.isHorizontal(),i=this.getContentPosition(),r=function(e,n,o){var i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0;return t.spacerStyle=tn(tn({},t.spacerStyle),en({},"".concat(e),(n||[]).length*o+i+"px"))};n?(r("height",e,this.itemSize[0],i.y),r("width",this.columns||e[1],this.itemSize[1],i.x)):o?r("width",this.columns||e,this.itemSize,i.x):r("height",e,this.itemSize,i.y)}},setContentPosition:function(t){var e=this;if(this.content&&!this.appendOnly){var n=this.isBoth(),o=this.isHorizontal(),i=t?t.first:this.first,r=function(t,e){return t*e},s=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;return e.contentStyle=tn(tn({},e.contentStyle),{transform:"translate3d(".concat(t,"px, ").concat(n,"px, 0)")})};if(n)s(r(i.cols,this.itemSize[1]),r(i.rows,this.itemSize[0]));else{var l=r(i,this.itemSize);o?s(l,0):s(0,l)}}},onScrollPositionChange:function(t){var e=this,n=t.target,o=this.isBoth(),i=this.isHorizontal(),r=this.getContentPosition(),s=function(t,e){return t?t>e?t-e:t:0},l=function(t,e){return Math.floor(t/(e||t))},a=function(t,e,n,o,i,r){return t<=i?i:r?n-o-i:e+i-1},c=function(t,e,n,o,i,r,s){return t<=r?0:Math.max(0,s?te?n:t-2*r)},u=function(t,n,o,i,r,s){var l=n+i+2*r;return t>=r&&(l+=r+1),e.getLast(l,s)},d=s(n.scrollTop,r.top),p=s(n.scrollLeft,r.left),h=o?{rows:0,cols:0}:0,f=this.last,b=!1,m=this.lastScrollPos;if(o){var g=this.lastScrollPos.top<=d,v=this.lastScrollPos.left<=p;if(!this.appendOnly||this.appendOnly&&(g||v)){var y={rows:l(d,this.itemSize[0]),cols:l(p,this.itemSize[1])},x={rows:a(y.rows,this.first.rows,this.last.rows,this.numItemsInViewport.rows,this.d_numToleratedItems[0],g),cols:a(y.cols,this.first.cols,this.last.cols,this.numItemsInViewport.cols,this.d_numToleratedItems[1],v)};h={rows:c(y.rows,x.rows,this.first.rows,this.last.rows,this.numItemsInViewport.rows,this.d_numToleratedItems[0],g),cols:c(y.cols,x.cols,this.first.cols,this.last.cols,this.numItemsInViewport.cols,this.d_numToleratedItems[1],v)},f={rows:u(y.rows,h.rows,this.last.rows,this.numItemsInViewport.rows,this.d_numToleratedItems[0]),cols:u(y.cols,h.cols,this.last.cols,this.numItemsInViewport.cols,this.d_numToleratedItems[1],!0)},b=h.rows!==this.first.rows||f.rows!==this.last.rows||h.cols!==this.first.cols||f.cols!==this.last.cols||this.isRangeChanged,m={top:d,left:p}}}else{var I=i?p:d,k=this.lastScrollPos<=I;if(!this.appendOnly||this.appendOnly&&k){var w=l(I,this.itemSize);f=u(w,h=c(w,a(w,this.first,this.last,this.numItemsInViewport,this.d_numToleratedItems,k),this.first,this.last,this.numItemsInViewport,this.d_numToleratedItems,k),this.last,this.numItemsInViewport,this.d_numToleratedItems),b=h!==this.first||f!==this.last||this.isRangeChanged,m=I}}return{first:h,last:f,isRangeChanged:b,scrollPos:m}},onScrollChange:function(t){var e=this.onScrollPositionChange(t),n=e.first,o=e.last,i=e.isRangeChanged,r=e.scrollPos;if(i){var s={first:n,last:o};if(this.setContentPosition(s),this.first=n,this.last=o,this.lastScrollPos=r,this.$emit("scroll-index-change",s),this.lazy&&this.isPageChanged(n)){var l,a,c={first:this.step?Math.min(this.getPageByFirst(n)*this.step,((null===(l=this.items)||void 0===l?void 0:l.length)||0)-this.step):n,last:Math.min(this.step?(this.getPageByFirst(n)+1)*this.step:o,(null===(a=this.items)||void 0===a?void 0:a.length)||0)};(this.lazyLoadState.first!==c.first||this.lazyLoadState.last!==c.last)&&this.$emit("lazy-load",c),this.lazyLoadState=c}}},onScroll:function(t){var e=this;if(this.$emit("scroll",t),this.delay){if(this.scrollTimeout&&clearTimeout(this.scrollTimeout),this.isPageChanged()){if(!this.d_loading&&this.showLoader)(this.onScrollPositionChange(t).isRangeChanged||!!this.step&&this.isPageChanged())&&(this.d_loading=!0);this.scrollTimeout=setTimeout((function(){e.onScrollChange(t),!e.d_loading||!e.showLoader||e.lazy&&void 0!==e.loading||(e.d_loading=!1,e.page=e.getPageByFirst())}),this.delay)}}else this.onScrollChange(t)},onResize:function(){var t=this;this.resizeTimeout&&clearTimeout(this.resizeTimeout),this.resizeTimeout=setTimeout((function(){if(Z(t.element)){var e=t.isBoth(),n=t.isVertical(),o=t.isHorizontal(),i=[R(t.element),j(t.element)],r=i[0],s=i[1],l=r!==t.defaultWidth,a=s!==t.defaultHeight;(e?l||a:o?l:!!n&&a)&&(t.d_numToleratedItems=t.numToleratedItems,t.defaultWidth=r,t.defaultHeight=s,t.defaultContentWidth=R(t.content),t.defaultContentHeight=j(t.content),t.init())}}),this.resizeDelay)},bindResizeListener:function(){this.resizeListener||(this.resizeListener=this.onResize.bind(this),window.addEventListener("resize",this.resizeListener),window.addEventListener("orientationchange",this.resizeListener))},unbindResizeListener:function(){this.resizeListener&&(window.removeEventListener("resize",this.resizeListener),window.removeEventListener("orientationchange",this.resizeListener),this.resizeListener=null)},getOptions:function(t){var e=(this.items||[]).length,n=this.isBoth()?this.first.rows+t:this.first+t;return{index:n,count:e,first:0===n,last:n===e-1,even:n%2==0,odd:n%2!=0}},getLoaderOptions:function(t,e){var n=this.loaderArr.length;return tn({index:t,count:n,first:0===t,last:t===n-1,even:t%2==0,odd:t%2!=0},e)},getPageByFirst:function(t){return Math.floor(((null!=t?t:this.first)+4*this.d_numToleratedItems)/(this.step||1))},isPageChanged:function(t){return!(this.step&&!this.lazy)||this.page!==this.getPageByFirst(null!=t?t:this.first)},setContentEl:function(t){this.content=t||this.content||J(this.element,'[data-pc-section="content"]')},elementRef:function(t){this.element=t},contentRef:function(t){this.content=t}},computed:{containerClass:function(){return["p-virtualscroller",this.class,{"p-virtualscroller-inline":this.inline,"p-virtualscroller-both p-both-scroll":this.isBoth(),"p-virtualscroller-horizontal p-horizontal-scroll":this.isHorizontal()}]},contentClass:function(){return["p-virtualscroller-content",{"p-virtualscroller-loading":this.d_loading}]},loaderClass:function(){return["p-virtualscroller-loader",{"p-virtualscroller-loader-mask":!this.$slots.loader}]},loadedItems:function(){var t=this;return this.items&&!this.d_loading?this.isBoth()?this.items.slice(this.appendOnly?0:this.first.rows,this.last.rows).map((function(e){return t.columns?e:e.slice(t.appendOnly?0:t.first.cols,t.last.cols)})):this.isHorizontal()&&this.columns?this.items:this.items.slice(this.appendOnly?0:this.first,this.last):[]},loadedRows:function(){return this.d_loading?this.loaderDisabled?this.loaderArr:[]:this.loadedItems},loadedColumns:function(){if(this.columns){var t=this.isBoth(),e=this.isHorizontal();if(t||e)return this.d_loading&&this.loaderDisabled?t?this.loaderArr[0]:this.loaderArr:this.columns.slice(t?this.first.cols:this.first,t?this.last.cols:this.last)}return this.columns}},components:{SpinnerIcon:Ct}},on=["tabindex"];nn.render=function(t,e,n,o,i,r){var s=k("SpinnerIcon");return t.disabled?(m(),g(_,{key:1},[v(t.$slots,"default"),v(t.$slots,"content",{items:t.items,rows:t.items,columns:r.loadedColumns})],64)):(m(),g("div",I({key:0,ref:r.elementRef,class:r.containerClass,tabindex:t.tabindex,style:t.style,onScroll:e[0]||(e[0]=function(){return r.onScroll&&r.onScroll.apply(r,arguments)})},t.ptmi("root")),[v(t.$slots,"content",{styleClass:r.contentClass,items:r.loadedItems,getItemOptions:r.getOptions,loading:i.d_loading,getLoaderOptions:r.getLoaderOptions,itemSize:t.itemSize,rows:r.loadedRows,columns:r.loadedColumns,contentRef:r.contentRef,spacerStyle:i.spacerStyle,contentStyle:i.contentStyle,vertical:r.isVertical(),horizontal:r.isHorizontal(),both:r.isBoth()},(function(){return[C("div",I({ref:r.contentRef,class:r.contentClass,style:i.contentStyle},t.ptm("content")),[(m(!0),g(_,null,M(r.loadedItems,(function(e,n){return v(t.$slots,"item",{key:n,item:e,options:r.getOptions(n)})})),128))],16)]})),t.showSpacer?(m(),g("div",I({key:0,class:"p-virtualscroller-spacer",style:i.spacerStyle},t.ptm("spacer")),null,16)):$("",!0),!t.loaderDisabled&&t.showLoader&&i.d_loading?(m(),g("div",I({key:1,class:r.loaderClass},t.ptm("loader")),[t.$slots&&t.$slots.loader?(m(!0),g(_,{key:0},M(i.loaderArr,(function(e,n){return v(t.$slots,"loader",{key:n,options:r.getLoaderOptions(n,r.isBoth()&&{numCols:t.d_numItemsInViewport.cols})})})),128)):$("",!0),v(t.$slots,"loadingicon",{},(function(){return[P(s,I({spin:"",class:"p-virtualscroller-loading-icon"},t.ptm("loadingIcon")),null,16)]}))],16)):$("",!0)],16,on))};var rn=St.extend({name:"select",theme:function(t){var e=t.dt;return"\n.p-select {\n display: inline-flex;\n cursor: pointer;\n position: relative;\n user-select: none;\n background: ".concat(e("select.background"),";\n border: 1px solid ").concat(e("select.border.color"),";\n transition: background ").concat(e("select.transition.duration"),", color ").concat(e("select.transition.duration"),", border-color ").concat(e("select.transition.duration"),",\n outline-color ").concat(e("select.transition.duration"),", box-shadow ").concat(e("select.transition.duration"),";\n border-radius: ").concat(e("select.border.radius"),";\n outline-color: transparent;\n box-shadow: ").concat(e("select.shadow"),";\n}\n\n.p-select:not(.p-disabled):hover {\n border-color: ").concat(e("select.hover.border.color"),";\n}\n\n.p-select:not(.p-disabled).p-focus {\n border-color: ").concat(e("select.focus.border.color"),";\n box-shadow: ").concat(e("select.focus.ring.shadow"),";\n outline: ").concat(e("select.focus.ring.width")," ").concat(e("select.focus.ring.style")," ").concat(e("select.focus.ring.color"),";\n outline-offset: ").concat(e("select.focus.ring.offset"),";\n}\n\n.p-select.p-variant-filled {\n background: ").concat(e("select.filled.background"),";\n}\n\n.p-select.p-variant-filled:not(.p-disabled):hover {\n background: ").concat(e("select.filled.hover.background"),";\n}\n\n.p-select.p-variant-filled:not(.p-disabled).p-focus {\n background: ").concat(e("select.filled.focus.background"),";\n}\n\n.p-select.p-invalid {\n border-color: ").concat(e("select.invalid.border.color"),";\n}\n\n.p-select.p-disabled {\n opacity: 1;\n background: ").concat(e("select.disabled.background"),";\n}\n\n.p-select-clear-icon {\n position: absolute;\n top: 50%;\n margin-top: -0.5rem;\n color: ").concat(e("select.clear.icon.color"),";\n inset-inline-end: ").concat(e("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(e("select.dropdown.color"),";\n width: ").concat(e("select.dropdown.width"),";\n border-start-end-radius: ").concat(e("select.border.radius"),";\n border-end-end-radius: ").concat(e("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(e("select.padding.y")," ").concat(e("select.padding.x"),";\n text-overflow: ellipsis;\n cursor: pointer;\n color: ").concat(e("select.color"),";\n background: transparent;\n border: 0 none;\n outline: 0 none;\n}\n\n.p-select-label.p-placeholder {\n color: ").concat(e("select.placeholder.color"),";\n}\n\n.p-select.p-invalid .p-select-label.p-placeholder {\n color: ").concat(e("select.invalid.placeholder.color"),";\n}\n\n.p-select:has(.p-select-clear-icon) .p-select-label {\n padding-inline-end: calc(1rem + ").concat(e("select.padding.x"),");\n}\n\n.p-select.p-disabled .p-select-label {\n color: ").concat(e("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(e("select.overlay.background"),";\n color: ").concat(e("select.overlay.color"),";\n border: 1px solid ").concat(e("select.overlay.border.color"),";\n border-radius: ").concat(e("select.overlay.border.radius"),";\n box-shadow: ").concat(e("select.overlay.shadow"),";\n}\n\n.p-select-header {\n padding: ").concat(e("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(e("select.option.group.padding"),";\n background: ").concat(e("select.option.group.background"),";\n color: ").concat(e("select.option.group.color"),";\n font-weight: ").concat(e("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(e("select.list.padding"),";\n gap: ").concat(e("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(e("select.option.padding"),";\n border: 0 none;\n color: ").concat(e("select.option.color"),";\n background: transparent;\n transition: background ").concat(e("select.transition.duration"),", color ").concat(e("select.transition.duration"),", border-color ").concat(e("select.transition.duration"),",\n box-shadow ").concat(e("select.transition.duration"),", outline-color ").concat(e("select.transition.duration"),";\n border-radius: ").concat(e("select.option.border.radius"),";\n}\n\n.p-select-option:not(.p-select-option-selected):not(.p-disabled).p-focus {\n background: ").concat(e("select.option.focus.background"),";\n color: ").concat(e("select.option.focus.color"),";\n}\n\n.p-select-option.p-select-option-selected {\n background: ").concat(e("select.option.selected.background"),";\n color: ").concat(e("select.option.selected.color"),";\n}\n\n.p-select-option.p-select-option-selected.p-focus {\n background: ").concat(e("select.option.selected.focus.background"),";\n color: ").concat(e("select.option.selected.focus.color"),";\n}\n\n.p-select-option-check-icon {\n position: relative;\n margin-inline-start: ").concat(e("select.checkmark.gutter.start"),";\n margin-inline-end: ").concat(e("select.checkmark.gutter.end"),";\n color: ").concat(e("select.checkmark.color"),";\n}\n\n.p-select-empty-message {\n padding: ").concat(e("select.empty.message.padding"),";\n}\n\n.p-select-fluid {\n display: flex;\n width: 100%;\n}\n\n.p-select-sm .p-select-label {\n font-size: ").concat(e("select.sm.font.size"),";\n padding-block: ").concat(e("select.sm.padding.y"),";\n padding-inline: ").concat(e("select.sm.padding.x"),";\n}\n\n.p-select-sm .p-select-dropdown .p-icon {\n font-size: ").concat(e("select.sm.font.size"),";\n width: ").concat(e("select.sm.font.size"),";\n height: ").concat(e("select.sm.font.size"),";\n}\n\n.p-select-lg .p-select-label {\n font-size: ").concat(e("select.lg.font.size"),";\n padding-block: ").concat(e("select.lg.padding.y"),";\n padding-inline: ").concat(e("select.lg.padding.x"),";\n}\n\n.p-select-lg .p-select-dropdown .p-icon {\n font-size: ").concat(e("select.lg.font.size"),";\n width: ").concat(e("select.lg.font.size"),";\n height: ").concat(e("select.lg.font.size"),";\n}\n")},classes:{root:function(t){var e=t.instance,n=t.props,o=t.state;return["p-select p-component p-inputwrapper",{"p-disabled":n.disabled,"p-invalid":e.$invalid,"p-variant-filled":"filled"===e.$variant,"p-focus":o.focused,"p-inputwrapper-filled":e.$filled,"p-inputwrapper-focus":o.focused||o.overlayVisible,"p-select-open":o.overlayVisible,"p-select-fluid":e.$fluid,"p-select-sm p-inputfield-sm":"small"===n.size,"p-select-lg p-inputfield-lg":"large"===n.size}]},label:function(t){var e=t.instance,n=t.props;return["p-select-label",{"p-placeholder":!n.editable&&e.label===n.placeholder,"p-select-label-empty":!(n.editable||e.$slots.value||"p-emptylabel"!==e.label&&0!==e.label.length)}]},clearIcon:"p-select-clear-icon",dropdown:"p-select-dropdown",loadingicon:"p-select-loading-icon",dropdownIcon:"p-select-dropdown-icon",overlay:"p-select-overlay p-component",header:"p-select-header",pcFilter:"p-select-filter",listContainer:"p-select-list-container",list:"p-select-list",optionGroup:"p-select-option-group",optionGroupLabel:"p-select-option-group-label",option:function(t){var e=t.instance,n=t.props,o=t.state,i=t.option,r=t.focusedOption;return["p-select-option",{"p-select-option-selected":e.isSelected(i)&&n.highlightOnSelect,"p-focus":o.focusedOptionIndex===r,"p-disabled":e.isOptionDisabled(i)}]},optionLabel:"p-select-option-label",optionCheckIcon:"p-select-option-check-icon",optionBlankIcon:"p-select-option-blank-icon",emptyMessage:"p-select-empty-message"}});function sn(t){return(sn="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function ln(t){return function(t){if(Array.isArray(t))return an(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||function(t,e){if(t){if("string"==typeof t)return an(t,e);var n={}.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?an(t,e):void 0}}(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function an(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,o=Array(e);n2&&void 0!==arguments[2])||arguments[2],o=this.getOptionValue(e);this.updateModel(t,o),n&&this.hide(!0)},onOptionMouseMove:function(t,e){this.focusOnHover&&this.changeFocusedOptionIndex(t,e)},onFilterChange:function(t){var e=t.target.value;this.filterValue=e,this.focusedOptionIndex=-1,this.$emit("filter",{originalEvent:t,value:e}),!this.virtualScrollerDisabled&&this.virtualScroller.scrollToIndex(0)},onFilterKeyDown:function(t){if(!t.isComposing)switch(t.code){case"ArrowDown":this.onArrowDownKey(t);break;case"ArrowUp":this.onArrowUpKey(t,!0);break;case"ArrowLeft":case"ArrowRight":this.onArrowLeftKey(t,!0);break;case"Home":this.onHomeKey(t,!0);break;case"End":this.onEndKey(t,!0);break;case"Enter":case"NumpadEnter":this.onEnterKey(t);break;case"Escape":this.onEscapeKey(t);break;case"Tab":this.onTabKey(t,!0)}},onFilterBlur:function(){this.focusedOptionIndex=-1},onFilterUpdated:function(){this.overlayVisible&&this.alignOverlay()},onOverlayClick:function(t){Xe.emit("overlay-click",{originalEvent:t,target:this.$el})},onOverlayKeyDown:function(t){if("Escape"===t.code)this.onEscapeKey(t)},onArrowDownKey:function(t){if(this.overlayVisible){var e=-1!==this.focusedOptionIndex?this.findNextOptionIndex(this.focusedOptionIndex):this.clicked?this.findFirstOptionIndex():this.findFirstFocusedOptionIndex();this.changeFocusedOptionIndex(t,e)}else this.show(),this.editable&&this.changeFocusedOptionIndex(t,this.findSelectedOptionIndex());t.preventDefault()},onArrowUpKey:function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(t.altKey&&!e)-1!==this.focusedOptionIndex&&this.onOptionSelect(t,this.visibleOptions[this.focusedOptionIndex]),this.overlayVisible&&this.hide(),t.preventDefault();else{var n=-1!==this.focusedOptionIndex?this.findPrevOptionIndex(this.focusedOptionIndex):this.clicked?this.findLastOptionIndex():this.findLastFocusedOptionIndex();this.changeFocusedOptionIndex(t,n),!this.overlayVisible&&this.show(),t.preventDefault()}},onArrowLeftKey:function(t){arguments.length>1&&void 0!==arguments[1]&&arguments[1]&&(this.focusedOptionIndex=-1)},onHomeKey:function(t){if(arguments.length>1&&void 0!==arguments[1]&&arguments[1]){var e=t.currentTarget;t.shiftKey?e.setSelectionRange(0,t.target.selectionStart):(e.setSelectionRange(0,0),this.focusedOptionIndex=-1)}else this.changeFocusedOptionIndex(t,this.findFirstOptionIndex()),!this.overlayVisible&&this.show();t.preventDefault()},onEndKey:function(t){if(arguments.length>1&&void 0!==arguments[1]&&arguments[1]){var e=t.currentTarget;if(t.shiftKey)e.setSelectionRange(t.target.selectionStart,e.value.length);else{var n=e.value.length;e.setSelectionRange(n,n),this.focusedOptionIndex=-1}}else this.changeFocusedOptionIndex(t,this.findLastOptionIndex()),!this.overlayVisible&&this.show();t.preventDefault()},onPageUpKey:function(t){this.scrollInView(0),t.preventDefault()},onPageDownKey:function(t){this.scrollInView(this.visibleOptions.length-1),t.preventDefault()},onEnterKey:function(t){this.overlayVisible?(-1!==this.focusedOptionIndex&&this.onOptionSelect(t,this.visibleOptions[this.focusedOptionIndex]),this.hide()):(this.focusedOptionIndex=-1,this.onArrowDownKey(t)),t.preventDefault()},onSpaceKey:function(t){!(arguments.length>1&&void 0!==arguments[1]&&arguments[1])&&this.onEnterKey(t)},onEscapeKey:function(t){this.overlayVisible&&this.hide(!0),t.preventDefault(),t.stopPropagation()},onTabKey:function(t){arguments.length>1&&void 0!==arguments[1]&&arguments[1]||(this.overlayVisible&&this.hasFocusableElements()?(et(this.$refs.firstHiddenFocusableElementOnOverlay),t.preventDefault()):(-1!==this.focusedOptionIndex&&this.onOptionSelect(t,this.visibleOptions[this.focusedOptionIndex]),this.overlayVisible&&this.hide(this.filter)))},onBackspaceKey:function(t){arguments.length>1&&void 0!==arguments[1]&&arguments[1]&&!this.overlayVisible&&this.show()},onOverlayEnter:function(t){var e=this;Q.set("overlay",t,this.$primevue.config.zIndex.overlay),st(t,{position:"absolute",top:"0",left:"0"}),this.alignOverlay(),this.scrollInView(),setTimeout((function(){e.autoFilterFocus&&e.filter&&et(e.$refs.filterInput.$el)}),1)},onOverlayAfterEnter:function(){this.bindOutsideClickListener(),this.bindScrollListener(),this.bindResizeListener(),this.$emit("show")},onOverlayLeave:function(){var t=this;this.unbindOutsideClickListener(),this.unbindScrollListener(),this.unbindResizeListener(),this.autoFilterFocus&&this.filter&&!this.editable&&this.$nextTick((function(){et(t.$refs.filterInput.$el)})),this.$emit("hide"),this.overlay=null},onOverlayAfterLeave:function(t){Q.clear(t)},alignOverlay:function(){"self"===this.appendTo?lt(this.overlay,this.$el):(this.overlay.style.minWidth=G(this.$el)+"px",at(this.overlay,this.$el))},bindOutsideClickListener:function(){var t=this;this.outsideClickListener||(this.outsideClickListener=function(e){t.overlayVisible&&t.overlay&&!t.$el.contains(e.target)&&!t.overlay.contains(e.target)&&t.hide()},document.addEventListener("click",this.outsideClickListener))},unbindOutsideClickListener:function(){this.outsideClickListener&&(document.removeEventListener("click",this.outsideClickListener),this.outsideClickListener=null)},bindScrollListener:function(){var t=this;this.scrollHandler||(this.scrollHandler=new Tt(this.$refs.container,(function(){t.overlayVisible&&t.hide()}))),this.scrollHandler.bindScrollListener()},unbindScrollListener:function(){this.scrollHandler&&this.scrollHandler.unbindScrollListener()},bindResizeListener:function(){var t=this;this.resizeListener||(this.resizeListener=function(){t.overlayVisible&&!ct()&&t.hide()},window.addEventListener("resize",this.resizeListener))},unbindResizeListener:function(){this.resizeListener&&(window.removeEventListener("resize",this.resizeListener),this.resizeListener=null)},bindLabelClickListener:function(){var t=this;if(!this.editable&&!this.labelClickListener){var e=document.querySelector('label[for="'.concat(this.labelId,'"]'));e&&Z(e)&&(this.labelClickListener=function(){et(t.$refs.focusInput)},e.addEventListener("click",this.labelClickListener))}},unbindLabelClickListener:function(){if(this.labelClickListener){var t=document.querySelector('label[for="'.concat(this.labelId,'"]'));t&&Z(t)&&t.removeEventListener("click",this.labelClickListener)}},hasFocusableElements:function(){return ut(this.overlay,':not([data-p-hidden-focusable="true"])').length>0},isOptionMatched:function(t){var e;return this.isValidOption(t)&&"string"==typeof this.getOptionLabel(t)&&(null===(e=this.getOptionLabel(t))||void 0===e?void 0:e.toLocaleLowerCase(this.filterLocale).startsWith(this.searchValue.toLocaleLowerCase(this.filterLocale)))},isValidOption:function(t){return K(t)&&!(this.isOptionDisabled(t)||this.isOptionGroup(t))},isValidSelectedOption:function(t){return this.isValidOption(t)&&this.isSelected(t)},isSelected:function(t){return dt(this.d_value,this.getOptionValue(t),this.equalityKey)},findFirstOptionIndex:function(){var t=this;return this.visibleOptions.findIndex((function(e){return t.isValidOption(e)}))},findLastOptionIndex:function(){var t=this;return pt(this.visibleOptions,(function(e){return t.isValidOption(e)}))},findNextOptionIndex:function(t){var e=this,n=t-1?n+t+1:t},findPrevOptionIndex:function(t){var e=this,n=t>0?pt(this.visibleOptions.slice(0,t),(function(t){return e.isValidOption(t)})):-1;return n>-1?n:t},findSelectedOptionIndex:function(){var t=this;return this.$filled?this.visibleOptions.findIndex((function(e){return t.isValidSelectedOption(e)})):-1},findFirstFocusedOptionIndex:function(){var t=this.findSelectedOptionIndex();return t<0?this.findFirstOptionIndex():t},findLastFocusedOptionIndex:function(){var t=this.findSelectedOptionIndex();return t<0?this.findLastOptionIndex():t},searchOptions:function(t,e){var n=this;this.searchValue=(this.searchValue||"")+e;var o=-1,i=!1;return K(this.searchValue)&&(-1!==(o=-1!==this.focusedOptionIndex?-1===(o=this.visibleOptions.slice(this.focusedOptionIndex).findIndex((function(t){return n.isOptionMatched(t)})))?this.visibleOptions.slice(0,this.focusedOptionIndex).findIndex((function(t){return n.isOptionMatched(t)})):o+this.focusedOptionIndex:this.visibleOptions.findIndex((function(t){return n.isOptionMatched(t)})))&&(i=!0),-1===o&&-1===this.focusedOptionIndex&&(o=this.findFirstFocusedOptionIndex()),-1!==o&&this.changeFocusedOptionIndex(t,o)),this.searchTimeout&&clearTimeout(this.searchTimeout),this.searchTimeout=setTimeout((function(){n.searchValue="",n.searchTimeout=null}),500),i},changeFocusedOptionIndex:function(t,e){this.focusedOptionIndex!==e&&(this.focusedOptionIndex=e,this.scrollInView(),this.selectOnFocus&&this.onOptionSelect(t,this.visibleOptions[e],!1))},scrollInView:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:-1;this.$nextTick((function(){var n=-1!==e?"".concat(t.id,"_").concat(e):t.focusedOptionId,o=J(t.list,'li[id="'.concat(n,'"]'));o?o.scrollIntoView&&o.scrollIntoView({block:"nearest",inline:"start"}):t.virtualScrollerDisabled||t.virtualScroller&&t.virtualScroller.scrollToIndex(-1!==e?e:t.focusedOptionIndex)}))},autoUpdateModel:function(){this.selectOnFocus&&this.autoOptionFocus&&!this.$filled&&(this.focusedOptionIndex=this.findFirstFocusedOptionIndex(),this.onOptionSelect(null,this.visibleOptions[this.focusedOptionIndex],!1))},updateModel:function(t,e){this.writeValue(e,t),this.$emit("change",{originalEvent:t,value:e})},flatOptions:function(t){var e=this;return(t||[]).reduce((function(t,n,o){t.push({optionGroup:n,group:!0,index:o});var i=e.getOptionGroupChildren(n);return i&&i.forEach((function(e){return t.push(e)})),t}),[])},overlayRef:function(t){this.overlay=t},listRef:function(t,e){this.list=t,e&&e(t)},virtualScrollerRef:function(t){this.virtualScroller=t}},computed:{visibleOptions:function(){var t=this,e=this.optionGroupLabel?this.flatOptions(this.options):this.options||[];if(this.filterValue){var n=_t.filter(e,this.searchFields,this.filterValue,this.filterMatchMode,this.filterLocale);if(this.optionGroupLabel){var o=this.options||[],i=[];return o.forEach((function(e){var o=t.getOptionGroupChildren(e).filter((function(t){return n.includes(t)}));o.length>0&&i.push(un(un({},e),{},dn({},"string"==typeof t.optionGroupChildren?t.optionGroupChildren:"items",ln(o))))})),this.flatOptions(i)}return n}return e},hasSelectedOption:function(){return this.$filled},label:function(){var t=this.findSelectedOptionIndex();return-1!==t?this.getOptionLabel(this.visibleOptions[t]):this.placeholder||"p-emptylabel"},editableInputValue:function(){var t=this.findSelectedOptionIndex();return-1!==t?this.getOptionLabel(this.visibleOptions[t]):this.d_value||""},equalityKey:function(){return this.optionValue?null:this.dataKey},searchFields:function(){return this.filterFields||[this.optionLabel]},filterResultMessageText:function(){return K(this.visibleOptions)?this.filterMessageText.replaceAll("{0}",this.visibleOptions.length):this.emptyFilterMessageText},filterMessageText:function(){return this.filterMessage||this.$primevue.config.locale.searchMessage||""},emptyFilterMessageText:function(){return this.emptyFilterMessage||this.$primevue.config.locale.emptySearchMessage||this.$primevue.config.locale.emptyFilterMessage||""},emptyMessageText:function(){return this.emptyMessage||this.$primevue.config.locale.emptyMessage||""},selectionMessageText:function(){return this.selectionMessage||this.$primevue.config.locale.selectionMessage||""},emptySelectionMessageText:function(){return this.emptySelectionMessage||this.$primevue.config.locale.emptySelectionMessage||""},selectedMessageText:function(){return this.$filled?this.selectionMessageText.replaceAll("{0}","1"):this.emptySelectionMessageText},focusedOptionId:function(){return-1!==this.focusedOptionIndex?"".concat(this.id,"_").concat(this.focusedOptionIndex):null},ariaSetSize:function(){var t=this;return this.visibleOptions.filter((function(e){return!t.isOptionGroup(e)})).length},isClearIconVisible:function(){return this.showClear&&null!=this.d_value&&K(this.options)},virtualScrollerDisabled:function(){return!this.virtualScrollerOptions}},directives:{ripple:De},components:{InputText:We,VirtualScroller:nn,Portal:Ye,InputIcon:Ne,IconField:Ue,TimesIcon:Mt,ChevronDownIcon:Pt,SpinnerIcon:Ct,SearchIcon:Vt,CheckIcon:Ft,BlankIcon:At}},hn=["id"],fn=["id","value","placeholder","tabindex","disabled","aria-label","aria-labelledby","aria-expanded","aria-controls","aria-activedescendant","aria-invalid"],bn=["id","tabindex","aria-label","aria-labelledby","aria-expanded","aria-controls","aria-activedescendant","aria-disabled"],mn=["id"],gn=["id"],vn=["id","aria-label","aria-selected","aria-disabled","aria-setsize","aria-posinset","onClick","onMousemove","data-p-selected","data-p-focused","data-p-disabled"];pn.render=function(t,e,n,o,i,r){var s=k("SpinnerIcon"),l=k("InputText"),a=k("SearchIcon"),c=k("InputIcon"),u=k("IconField"),d=k("CheckIcon"),p=k("BlankIcon"),h=k("VirtualScroller"),f=k("Portal"),b=w("ripple");return m(),g("div",I({ref:"container",id:i.id,class:t.cx("root"),onClick:e[11]||(e[11]=function(){return r.onContainerClick&&r.onContainerClick.apply(r,arguments)})},t.ptmi("root")),[t.editable?(m(),g("input",I({key:0,ref:"focusInput",id:t.labelId||t.inputId,type:"text",class:[t.cx("label"),t.inputClass,t.labelClass],style:[t.inputStyle,t.labelStyle],value:r.editableInputValue,placeholder:t.placeholder,tabindex:t.disabled?-1:t.tabindex,disabled:t.disabled,autocomplete:"off",role:"combobox","aria-label":t.ariaLabel,"aria-labelledby":t.ariaLabelledby,"aria-haspopup":"listbox","aria-expanded":i.overlayVisible,"aria-controls":i.id+"_list","aria-activedescendant":i.focused?r.focusedOptionId:void 0,"aria-invalid":t.invalid||void 0,onFocus:e[0]||(e[0]=function(){return r.onFocus&&r.onFocus.apply(r,arguments)}),onBlur:e[1]||(e[1]=function(){return r.onBlur&&r.onBlur.apply(r,arguments)}),onKeydown:e[2]||(e[2]=function(){return r.onKeyDown&&r.onKeyDown.apply(r,arguments)}),onInput:e[3]||(e[3]=function(){return r.onEditableInput&&r.onEditableInput.apply(r,arguments)})},t.ptm("label")),null,16,fn)):(m(),g("span",I({key:1,ref:"focusInput",id:t.labelId||t.inputId,class:[t.cx("label"),t.inputClass,t.labelClass],style:[t.inputStyle,t.labelStyle],tabindex:t.disabled?-1:t.tabindex,role:"combobox","aria-label":t.ariaLabel||("p-emptylabel"===r.label?void 0:r.label),"aria-labelledby":t.ariaLabelledby,"aria-haspopup":"listbox","aria-expanded":i.overlayVisible,"aria-controls":i.id+"_list","aria-activedescendant":i.focused?r.focusedOptionId:void 0,"aria-disabled":t.disabled,onFocus:e[4]||(e[4]=function(){return r.onFocus&&r.onFocus.apply(r,arguments)}),onBlur:e[5]||(e[5]=function(){return r.onBlur&&r.onBlur.apply(r,arguments)}),onKeydown:e[6]||(e[6]=function(){return r.onKeyDown&&r.onKeyDown.apply(r,arguments)})},t.ptm("label")),[v(t.$slots,"value",{value:t.d_value,placeholder:t.placeholder},(function(){var t;return[y(x("p-emptylabel"===r.label?" ":null!==(t=r.label)&&void 0!==t?t:"empty"),1)]}))],16,bn)),r.isClearIconVisible?v(t.$slots,"clearicon",{key:2,class:z(t.cx("clearIcon")),clearCallback:r.onClearClick},(function(){return[(m(),S(E(t.clearIcon?"i":"TimesIcon"),I({ref:"clearIcon",class:[t.cx("clearIcon"),t.clearIcon],onClick:r.onClearClick},t.ptm("clearIcon"),{"data-pc-section":"clearicon"}),null,16,["class","onClick"]))]})):$("",!0),C("div",I({class:t.cx("dropdown")},t.ptm("dropdown")),[t.loading?v(t.$slots,"loadingicon",{key:0,class:z(t.cx("loadingIcon"))},(function(){return[t.loadingIcon?(m(),g("span",I({key:0,class:[t.cx("loadingIcon"),"pi-spin",t.loadingIcon],"aria-hidden":"true"},t.ptm("loadingIcon")),null,16)):(m(),S(s,I({key:1,class:t.cx("loadingIcon"),spin:"","aria-hidden":"true"},t.ptm("loadingIcon")),null,16,["class"]))]})):v(t.$slots,"dropdownicon",{key:1,class:z(t.cx("dropdownIcon"))},(function(){return[(m(),S(E(t.dropdownIcon?"span":"ChevronDownIcon"),I({class:[t.cx("dropdownIcon"),t.dropdownIcon],"aria-hidden":"true"},t.ptm("dropdownIcon")),null,16,["class"]))]}))],16),P(f,{appendTo:t.appendTo},{default:L((function(){return[P(V,I({name:"p-connected-overlay",onEnter:r.onOverlayEnter,onAfterEnter:r.onOverlayAfterEnter,onLeave:r.onOverlayLeave,onAfterLeave:r.onOverlayAfterLeave},t.ptm("transition")),{default:L((function(){return[i.overlayVisible?(m(),g("div",I({key:0,ref:r.overlayRef,class:[t.cx("overlay"),t.panelClass,t.overlayClass],style:[t.panelStyle,t.overlayStyle],onClick:e[9]||(e[9]=function(){return r.onOverlayClick&&r.onOverlayClick.apply(r,arguments)}),onKeydown:e[10]||(e[10]=function(){return r.onOverlayKeyDown&&r.onOverlayKeyDown.apply(r,arguments)})},t.ptm("overlay")),[C("span",I({ref:"firstHiddenFocusableElementOnOverlay",role:"presentation","aria-hidden":"true",class:"p-hidden-accessible p-hidden-focusable",tabindex:0,onFocus:e[7]||(e[7]=function(){return r.onFirstHiddenFocus&&r.onFirstHiddenFocus.apply(r,arguments)})},t.ptm("hiddenFirstFocusableEl"),{"data-p-hidden-accessible":!0,"data-p-hidden-focusable":!0}),null,16),v(t.$slots,"header",{value:t.d_value,options:r.visibleOptions}),t.filter?(m(),g("div",I({key:0,class:t.cx("header")},t.ptm("header")),[P(u,{unstyled:t.unstyled,pt:t.ptm("pcFilterContainer")},{default:L((function(){return[P(l,{ref:"filterInput",type:"text",value:i.filterValue,onVnodeMounted:r.onFilterUpdated,onVnodeUpdated:r.onFilterUpdated,class:z(t.cx("pcFilter")),placeholder:t.filterPlaceholder,variant:t.variant,unstyled:t.unstyled,role:"searchbox",autocomplete:"off","aria-owns":i.id+"_list","aria-activedescendant":r.focusedOptionId,onKeydown:r.onFilterKeyDown,onBlur:r.onFilterBlur,onInput:r.onFilterChange,pt:t.ptm("pcFilter")},null,8,["value","onVnodeMounted","onVnodeUpdated","class","placeholder","variant","unstyled","aria-owns","aria-activedescendant","onKeydown","onBlur","onInput","pt"]),P(c,{unstyled:t.unstyled,pt:t.ptm("pcFilterIconContainer")},{default:L((function(){return[v(t.$slots,"filtericon",{},(function(){return[t.filterIcon?(m(),g("span",I({key:0,class:t.filterIcon},t.ptm("filterIcon")),null,16)):(m(),S(a,F(I({key:1},t.ptm("filterIcon"))),null,16))]}))]})),_:3},8,["unstyled","pt"])]})),_:3},8,["unstyled","pt"]),C("span",I({role:"status","aria-live":"polite",class:"p-hidden-accessible"},t.ptm("hiddenFilterResult"),{"data-p-hidden-accessible":!0}),x(r.filterResultMessageText),17)],16)):$("",!0),C("div",I({class:t.cx("listContainer"),style:{"max-height":r.virtualScrollerDisabled?t.scrollHeight:""}},t.ptm("listContainer")),[P(h,I({ref:r.virtualScrollerRef},t.virtualScrollerOptions,{items:r.visibleOptions,style:{height:t.scrollHeight},tabindex:-1,disabled:r.virtualScrollerDisabled,pt:t.ptm("virtualScroller")}),A({content:L((function(e){var n=e.styleClass,o=e.contentRef,s=e.items,l=e.getItemOptions,a=e.contentStyle,c=e.itemSize;return[C("ul",I({ref:function(t){return r.listRef(t,o)},id:i.id+"_list",class:[t.cx("list"),n],style:a,role:"listbox"},t.ptm("list")),[(m(!0),g(_,null,M(s,(function(e,n){return m(),g(_,{key:r.getOptionRenderKey(e,r.getOptionIndex(n,l))},[r.isOptionGroup(e)?(m(),g("li",I({key:0,id:i.id+"_"+r.getOptionIndex(n,l),style:{height:c?c+"px":void 0},class:t.cx("optionGroup"),role:"option",ref_for:!0},t.ptm("optionGroup")),[v(t.$slots,"optiongroup",{option:e.optionGroup,index:r.getOptionIndex(n,l)},(function(){return[C("span",I({class:t.cx("optionGroupLabel"),ref_for:!0},t.ptm("optionGroupLabel")),x(r.getOptionGroupLabel(e.optionGroup)),17)]}))],16,gn)):O((m(),g("li",I({key:1,id:i.id+"_"+r.getOptionIndex(n,l),class:t.cx("option",{option:e,focusedOption:r.getOptionIndex(n,l)}),style:{height:c?c+"px":void 0},role:"option","aria-label":r.getOptionLabel(e),"aria-selected":r.isSelected(e),"aria-disabled":r.isOptionDisabled(e),"aria-setsize":r.ariaSetSize,"aria-posinset":r.getAriaPosInset(r.getOptionIndex(n,l)),onClick:function(t){return r.onOptionSelect(t,e)},onMousemove:function(t){return r.onOptionMouseMove(t,r.getOptionIndex(n,l))},"data-p-selected":r.isSelected(e),"data-p-focused":i.focusedOptionIndex===r.getOptionIndex(n,l),"data-p-disabled":r.isOptionDisabled(e),ref_for:!0},r.getPTItemOptions(e,l,n,"option")),[t.checkmark?(m(),g(_,{key:0},[r.isSelected(e)?(m(),S(d,I({key:0,class:t.cx("optionCheckIcon"),ref_for:!0},t.ptm("optionCheckIcon")),null,16,["class"])):(m(),S(p,I({key:1,class:t.cx("optionBlankIcon"),ref_for:!0},t.ptm("optionBlankIcon")),null,16,["class"]))],64)):$("",!0),v(t.$slots,"option",{option:e,selected:r.isSelected(e),index:r.getOptionIndex(n,l)},(function(){return[C("span",I({class:t.cx("optionLabel"),ref_for:!0},t.ptm("optionLabel")),x(r.getOptionLabel(e)),17)]}))],16,vn)),[[b]])],64)})),128)),i.filterValue&&(!s||s&&0===s.length)?(m(),g("li",I({key:0,class:t.cx("emptyMessage"),role:"option"},t.ptm("emptyMessage"),{"data-p-hidden-accessible":!0}),[v(t.$slots,"emptyfilter",{},(function(){return[y(x(r.emptyFilterMessageText),1)]}))],16)):!t.options||t.options&&0===t.options.length?(m(),g("li",I({key:1,class:t.cx("emptyMessage"),role:"option"},t.ptm("emptyMessage"),{"data-p-hidden-accessible":!0}),[v(t.$slots,"empty",{},(function(){return[y(x(r.emptyMessageText),1)]}))],16)):$("",!0)],16,mn)]})),_:2},[t.$slots.loader?{name:"loader",fn:L((function(e){var n=e.options;return[v(t.$slots,"loader",{options:n})]})),key:"0"}:void 0]),1040,["items","style","disabled","pt"])],16),v(t.$slots,"footer",{value:t.d_value,options:r.visibleOptions}),!t.options||t.options&&0===t.options.length?(m(),g("span",I({key:1,role:"status","aria-live":"polite",class:"p-hidden-accessible"},t.ptm("hiddenEmptyMessage"),{"data-p-hidden-accessible":!0}),x(r.emptyMessageText),17)):$("",!0),C("span",I({role:"status","aria-live":"polite",class:"p-hidden-accessible"},t.ptm("hiddenSelectedMessage"),{"data-p-hidden-accessible":!0}),x(r.selectedMessageText),17),C("span",I({ref:"lastHiddenFocusableElementOnOverlay",role:"presentation","aria-hidden":"true",class:"p-hidden-accessible p-hidden-focusable",tabindex:0,onFocus:e[8]||(e[8]=function(){return r.onLastHiddenFocus&&r.onLastHiddenFocus.apply(r,arguments)})},t.ptm("hiddenLastFocusableEl"),{"data-p-hidden-accessible":!0,"data-p-hidden-focusable":!0}),null,16)],16)):$("",!0)]})),_:3},16,["onEnter","onAfterEnter","onLeave","onAfterLeave"])]})),_:3},8,["appendTo"])],16,hn)};var yn=St.extend({name:"tooltip-directive",theme:function(t){var e=t.dt;return"\n.p-tooltip {\n position: absolute;\n display: none;\n max-width: ".concat(e("tooltip.max.width"),";\n}\n\n.p-tooltip-right,\n.p-tooltip-left {\n padding: 0 ").concat(e("tooltip.gutter"),";\n}\n\n.p-tooltip-top,\n.p-tooltip-bottom {\n padding: ").concat(e("tooltip.gutter")," 0;\n}\n\n.p-tooltip-text {\n white-space: pre-line;\n word-break: break-word;\n background: ").concat(e("tooltip.background"),";\n color: ").concat(e("tooltip.color"),";\n padding: ").concat(e("tooltip.padding"),";\n box-shadow: ").concat(e("tooltip.shadow"),";\n border-radius: ").concat(e("tooltip.border.radius"),";\n}\n\n.p-tooltip-arrow {\n position: absolute;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid;\n}\n\n.p-tooltip-right .p-tooltip-arrow {\n margin-top: calc(-1 * ").concat(e("tooltip.gutter"),");\n border-width: ").concat(e("tooltip.gutter")," ").concat(e("tooltip.gutter")," ").concat(e("tooltip.gutter")," 0;\n border-right-color: ").concat(e("tooltip.background"),";\n}\n\n.p-tooltip-left .p-tooltip-arrow {\n margin-top: calc(-1 * ").concat(e("tooltip.gutter"),");\n border-width: ").concat(e("tooltip.gutter")," 0 ").concat(e("tooltip.gutter")," ").concat(e("tooltip.gutter"),";\n border-left-color: ").concat(e("tooltip.background"),";\n}\n\n.p-tooltip-top .p-tooltip-arrow {\n margin-left: calc(-1 * ").concat(e("tooltip.gutter"),");\n border-width: ").concat(e("tooltip.gutter")," ").concat(e("tooltip.gutter")," 0 ").concat(e("tooltip.gutter"),";\n border-top-color: ").concat(e("tooltip.background"),";\n border-bottom-color: ").concat(e("tooltip.background"),";\n}\n\n.p-tooltip-bottom .p-tooltip-arrow {\n margin-left: calc(-1 * ").concat(e("tooltip.gutter"),");\n border-width: 0 ").concat(e("tooltip.gutter")," ").concat(e("tooltip.gutter")," ").concat(e("tooltip.gutter"),";\n border-top-color: ").concat(e("tooltip.background"),";\n border-bottom-color: ").concat(e("tooltip.background"),";\n}\n")},classes:{root:"p-tooltip p-component",arrow:"p-tooltip-arrow",text:"p-tooltip-text"}});function xn(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var n=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=n){var o,i,r,s,l=[],a=!0,c=!1;try{if(r=(n=n.call(t)).next,0===e);else for(;!(a=(o=r.call(n)).done)&&(l.push(o.value),l.length!==e);a=!0);}catch(u){c=!0,i=u}finally{try{if(!a&&null!=n.return&&(s=n.return(),Object(s)!==s))return}finally{if(c)throw i}}return l}}(t,e)||function(t,e){if(t){if("string"==typeof t)return In(t,e);var n={}.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?In(t,e):void 0}}(t,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function In(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,o=Array(e);nl.width||i<0||o<0||o+s>l.height},getTarget:function(t){var e;return vt(t,"p-inputwrapper")&&null!==(e=J(t,"input"))&&void 0!==e?e:t},getModifiers:function(t){return t.modifiers&&Object.keys(t.modifiers).length?t.modifiers:t.arg&&"object"===wn(t.arg)?Object.entries(t.arg).reduce((function(t,e){var n=xn(e,2),o=n[0],i=n[1];return"event"!==o&&"position"!==o||(t[i]=!0),t}),{}):{}}}}),Sn=St.extend({name:"checkbox",theme:function(t){var e=t.dt;return"\n.p-checkbox {\n position: relative;\n display: inline-flex;\n user-select: none;\n vertical-align: bottom;\n width: ".concat(e("checkbox.width"),";\n height: ").concat(e("checkbox.height"),";\n}\n\n.p-checkbox-input {\n cursor: pointer;\n appearance: none;\n position: absolute;\n inset-block-start: 0;\n inset-inline-start: 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(e("checkbox.border.radius"),";\n}\n\n.p-checkbox-box {\n display: flex;\n justify-content: center;\n align-items: center;\n border-radius: ").concat(e("checkbox.border.radius"),";\n border: 1px solid ").concat(e("checkbox.border.color"),";\n background: ").concat(e("checkbox.background"),";\n width: ").concat(e("checkbox.width"),";\n height: ").concat(e("checkbox.height"),";\n transition: background ").concat(e("checkbox.transition.duration"),", color ").concat(e("checkbox.transition.duration"),", border-color ").concat(e("checkbox.transition.duration"),", box-shadow ").concat(e("checkbox.transition.duration"),", outline-color ").concat(e("checkbox.transition.duration"),";\n outline-color: transparent;\n box-shadow: ").concat(e("checkbox.shadow"),";\n}\n\n.p-checkbox-icon {\n transition-duration: ").concat(e("checkbox.transition.duration"),";\n color: ").concat(e("checkbox.icon.color"),";\n font-size: ").concat(e("checkbox.icon.size"),";\n width: ").concat(e("checkbox.icon.size"),";\n height: ").concat(e("checkbox.icon.size"),";\n}\n\n.p-checkbox:not(.p-disabled):has(.p-checkbox-input:hover) .p-checkbox-box {\n border-color: ").concat(e("checkbox.hover.border.color"),";\n}\n\n.p-checkbox-checked .p-checkbox-box {\n border-color: ").concat(e("checkbox.checked.border.color"),";\n background: ").concat(e("checkbox.checked.background"),";\n}\n\n.p-checkbox-checked .p-checkbox-icon {\n color: ").concat(e("checkbox.icon.checked.color"),";\n}\n\n.p-checkbox-checked:not(.p-disabled):has(.p-checkbox-input:hover) .p-checkbox-box {\n background: ").concat(e("checkbox.checked.hover.background"),";\n border-color: ").concat(e("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(e("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(e("checkbox.focus.border.color"),";\n box-shadow: ").concat(e("checkbox.focus.ring.shadow"),";\n outline: ").concat(e("checkbox.focus.ring.width")," ").concat(e("checkbox.focus.ring.style")," ").concat(e("checkbox.focus.ring.color"),";\n outline-offset: ").concat(e("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(e("checkbox.checked.focus.border.color"),";\n}\n\n.p-checkbox.p-invalid > .p-checkbox-box {\n border-color: ").concat(e("checkbox.invalid.border.color"),";\n}\n\n.p-checkbox.p-variant-filled .p-checkbox-box {\n background: ").concat(e("checkbox.filled.background"),";\n}\n\n.p-checkbox-checked.p-variant-filled .p-checkbox-box {\n background: ").concat(e("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(e("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(e("checkbox.disabled.background"),";\n border-color: ").concat(e("checkbox.checked.disabled.border.color"),";\n}\n\n.p-checkbox.p-disabled .p-checkbox-box .p-checkbox-icon {\n color: ").concat(e("checkbox.icon.disabled.color"),";\n}\n\n.p-checkbox-sm,\n.p-checkbox-sm .p-checkbox-box {\n width: ").concat(e("checkbox.sm.width"),";\n height: ").concat(e("checkbox.sm.height"),";\n}\n\n.p-checkbox-sm .p-checkbox-icon {\n font-size: ").concat(e("checkbox.icon.sm.size"),";\n width: ").concat(e("checkbox.icon.sm.size"),";\n height: ").concat(e("checkbox.icon.sm.size"),";\n}\n\n.p-checkbox-lg,\n.p-checkbox-lg .p-checkbox-box {\n width: ").concat(e("checkbox.lg.width"),";\n height: ").concat(e("checkbox.lg.height"),";\n}\n\n.p-checkbox-lg .p-checkbox-icon {\n font-size: ").concat(e("checkbox.icon.lg.size"),";\n width: ").concat(e("checkbox.icon.lg.size"),";\n height: ").concat(e("checkbox.icon.lg.size"),";\n}\n")},classes:{root:function(t){var e=t.instance,n=t.props;return["p-checkbox p-component",{"p-checkbox-checked":e.checked,"p-disabled":n.disabled,"p-invalid":e.$pcCheckboxGroup?e.$pcCheckboxGroup.$invalid:e.$invalid,"p-variant-filled":"filled"===e.$variant,"p-checkbox-sm p-inputfield-sm":"small"===n.size,"p-checkbox-lg p-inputfield-lg":"large"===n.size}]},box:"p-checkbox-box",input:"p-checkbox-input",icon:"p-checkbox-icon"}});function Ln(t){return function(t){if(Array.isArray(t))return $n(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||function(t,e){if(t){if("string"==typeof t)return $n(t,e);var n={}.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?$n(t,e):void 0}}(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function $n(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,o=Array(e);nt.length)&&(e=t.length);for(var n=0,o=Array(e);n2&&void 0!==arguments[2]?arguments[2]:-1,i=arguments.length>3&&void 0!==arguments[3]&&arguments[3];if(!this.disabled&&!this.isOptionDisabled(e)){var r=null;r=this.isSelected(e)?this.d_value.filter((function(t){return!dt(t,n.getOptionValue(e),n.equalityKey)})):[].concat(Bn(this.d_value||[]),[this.getOptionValue(e)]),this.updateModel(t,r),-1!==o&&(this.focusedOptionIndex=o),i&&et(this.$refs.focusInput)}},onOptionMouseMove:function(t,e){this.focusOnHover&&this.changeFocusedOptionIndex(t,e)},onOptionSelectRange:function(t){var e=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:-1,o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:-1;if(-1===n&&(n=this.findNearestSelectedOptionIndex(o,!0)),-1===o&&(o=this.findNearestSelectedOptionIndex(n)),-1!==n&&-1!==o){var i=Math.min(n,o),r=Math.max(n,o),s=this.visibleOptions.slice(i,r+1).filter((function(t){return e.isValidOption(t)})).map((function(t){return e.getOptionValue(t)}));this.updateModel(t,s)}},onFilterChange:function(t){var e=t.target.value;this.filterValue=e,this.focusedOptionIndex=-1,this.$emit("filter",{originalEvent:t,value:e}),!this.virtualScrollerDisabled&&this.virtualScroller.scrollToIndex(0)},onFilterKeyDown:function(t){switch(t.code){case"ArrowDown":this.onArrowDownKey(t);break;case"ArrowUp":this.onArrowUpKey(t,!0);break;case"ArrowLeft":case"ArrowRight":this.onArrowLeftKey(t,!0);break;case"Home":this.onHomeKey(t,!0);break;case"End":this.onEndKey(t,!0);break;case"Enter":case"NumpadEnter":this.onEnterKey(t);break;case"Escape":this.onEscapeKey(t);break;case"Tab":this.onTabKey(t,!0)}},onFilterBlur:function(){this.focusedOptionIndex=-1},onFilterUpdated:function(){this.overlayVisible&&this.alignOverlay()},onOverlayClick:function(t){Xe.emit("overlay-click",{originalEvent:t,target:this.$el})},onOverlayKeyDown:function(t){if("Escape"===t.code)this.onEscapeKey(t)},onArrowDownKey:function(t){if(this.overlayVisible){var e=-1!==this.focusedOptionIndex?this.findNextOptionIndex(this.focusedOptionIndex):this.clicked?this.findFirstOptionIndex():this.findFirstFocusedOptionIndex();t.shiftKey&&this.onOptionSelectRange(t,this.startRangeIndex,e),this.changeFocusedOptionIndex(t,e)}else this.show();t.preventDefault()},onArrowUpKey:function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(t.altKey&&!e)-1!==this.focusedOptionIndex&&this.onOptionSelect(t,this.visibleOptions[this.focusedOptionIndex]),this.overlayVisible&&this.hide(),t.preventDefault();else{var n=-1!==this.focusedOptionIndex?this.findPrevOptionIndex(this.focusedOptionIndex):this.clicked?this.findLastOptionIndex():this.findLastFocusedOptionIndex();t.shiftKey&&this.onOptionSelectRange(t,n,this.startRangeIndex),this.changeFocusedOptionIndex(t,n),!this.overlayVisible&&this.show(),t.preventDefault()}},onArrowLeftKey:function(t){arguments.length>1&&void 0!==arguments[1]&&arguments[1]&&(this.focusedOptionIndex=-1)},onHomeKey:function(t){if(arguments.length>1&&void 0!==arguments[1]&&arguments[1]){var e=t.currentTarget;t.shiftKey?e.setSelectionRange(0,t.target.selectionStart):(e.setSelectionRange(0,0),this.focusedOptionIndex=-1)}else{var n=t.metaKey||t.ctrlKey,o=this.findFirstOptionIndex();t.shiftKey&&n&&this.onOptionSelectRange(t,o,this.startRangeIndex),this.changeFocusedOptionIndex(t,o),!this.overlayVisible&&this.show()}t.preventDefault()},onEndKey:function(t){if(arguments.length>1&&void 0!==arguments[1]&&arguments[1]){var e=t.currentTarget;if(t.shiftKey)e.setSelectionRange(t.target.selectionStart,e.value.length);else{var n=e.value.length;e.setSelectionRange(n,n),this.focusedOptionIndex=-1}}else{var o=t.metaKey||t.ctrlKey,i=this.findLastOptionIndex();t.shiftKey&&o&&this.onOptionSelectRange(t,this.startRangeIndex,i),this.changeFocusedOptionIndex(t,i),!this.overlayVisible&&this.show()}t.preventDefault()},onPageUpKey:function(t){this.scrollInView(0),t.preventDefault()},onPageDownKey:function(t){this.scrollInView(this.visibleOptions.length-1),t.preventDefault()},onEnterKey:function(t){this.overlayVisible?-1!==this.focusedOptionIndex&&(t.shiftKey?this.onOptionSelectRange(t,this.focusedOptionIndex):this.onOptionSelect(t,this.visibleOptions[this.focusedOptionIndex])):(this.focusedOptionIndex=-1,this.onArrowDownKey(t)),t.preventDefault()},onEscapeKey:function(t){this.overlayVisible&&this.hide(!0),t.preventDefault()},onTabKey:function(t){arguments.length>1&&void 0!==arguments[1]&&arguments[1]||(this.overlayVisible&&this.hasFocusableElements()?(et(t.shiftKey?this.$refs.lastHiddenFocusableElementOnOverlay:this.$refs.firstHiddenFocusableElementOnOverlay),t.preventDefault()):(-1!==this.focusedOptionIndex&&this.onOptionSelect(t,this.visibleOptions[this.focusedOptionIndex]),this.overlayVisible&&this.hide(this.filter)))},onShiftKey:function(){this.startRangeIndex=this.focusedOptionIndex},onOverlayEnter:function(t){Q.set("overlay",t,this.$primevue.config.zIndex.overlay),st(t,{position:"absolute",top:"0",left:"0"}),this.alignOverlay(),this.scrollInView(),this.autoFilterFocus&&et(this.$refs.filterInput.$el)},onOverlayAfterEnter:function(){this.bindOutsideClickListener(),this.bindScrollListener(),this.bindResizeListener(),this.$emit("show")},onOverlayLeave:function(){this.unbindOutsideClickListener(),this.unbindScrollListener(),this.unbindResizeListener(),this.$emit("hide"),this.overlay=null},onOverlayAfterLeave:function(t){Q.clear(t)},alignOverlay:function(){"self"===this.appendTo?lt(this.overlay,this.$el):(this.overlay.style.minWidth=G(this.$el)+"px",at(this.overlay,this.$el))},bindOutsideClickListener:function(){var t=this;this.outsideClickListener||(this.outsideClickListener=function(e){t.overlayVisible&&t.isOutsideClicked(e)&&t.hide()},document.addEventListener("click",this.outsideClickListener))},unbindOutsideClickListener:function(){this.outsideClickListener&&(document.removeEventListener("click",this.outsideClickListener),this.outsideClickListener=null)},bindScrollListener:function(){var t=this;this.scrollHandler||(this.scrollHandler=new Tt(this.$refs.container,(function(){t.overlayVisible&&t.hide()}))),this.scrollHandler.bindScrollListener()},unbindScrollListener:function(){this.scrollHandler&&this.scrollHandler.unbindScrollListener()},bindResizeListener:function(){var t=this;this.resizeListener||(this.resizeListener=function(){t.overlayVisible&&!ct()&&t.hide()},window.addEventListener("resize",this.resizeListener))},unbindResizeListener:function(){this.resizeListener&&(window.removeEventListener("resize",this.resizeListener),this.resizeListener=null)},isOutsideClicked:function(t){return!(this.$el.isSameNode(t.target)||this.$el.contains(t.target)||this.overlay&&this.overlay.contains(t.target))},getLabelByValue:function(t){var e=this,n=(this.optionGroupLabel?this.flatOptions(this.options):this.options||[]).find((function(n){return!e.isOptionGroup(n)&&dt(e.getOptionValue(n),t,e.equalityKey)}));return n?this.getOptionLabel(n):null},getSelectedItemsLabel:function(){var t=/{(.*?)}/,e=this.selectedItemsLabel||this.$primevue.config.locale.selectionMessage;return t.test(e)?e.replace(e.match(t)[0],this.d_value.length+""):e},onToggleAll:function(t){var e=this;if(null!==this.selectAll)this.$emit("selectall-change",{originalEvent:t,checked:!this.allSelected});else{var n=this.allSelected?[]:this.visibleOptions.filter((function(t){return e.isValidOption(t)})).map((function(t){return e.getOptionValue(t)}));this.updateModel(t,n)}},removeOption:function(t,e){var n=this;t.stopPropagation();var o=this.d_value.filter((function(t){return!dt(t,e,n.equalityKey)}));this.updateModel(t,o)},clearFilter:function(){this.filterValue=null},hasFocusableElements:function(){return ut(this.overlay,':not([data-p-hidden-focusable="true"])').length>0},isOptionMatched:function(t){var e;return this.isValidOption(t)&&"string"==typeof this.getOptionLabel(t)&&(null===(e=this.getOptionLabel(t))||void 0===e?void 0:e.toLocaleLowerCase(this.filterLocale).startsWith(this.searchValue.toLocaleLowerCase(this.filterLocale)))},isValidOption:function(t){return K(t)&&!(this.isOptionDisabled(t)||this.isOptionGroup(t))},isValidSelectedOption:function(t){return this.isValidOption(t)&&this.isSelected(t)},isEquals:function(t,e){return dt(t,e,this.equalityKey)},isSelected:function(t){var e=this,n=this.getOptionValue(t);return(this.d_value||[]).some((function(t){return e.isEquals(t,n)}))},findFirstOptionIndex:function(){var t=this;return this.visibleOptions.findIndex((function(e){return t.isValidOption(e)}))},findLastOptionIndex:function(){var t=this;return pt(this.visibleOptions,(function(e){return t.isValidOption(e)}))},findNextOptionIndex:function(t){var e=this,n=t-1?n+t+1:t},findPrevOptionIndex:function(t){var e=this,n=t>0?pt(this.visibleOptions.slice(0,t),(function(t){return e.isValidOption(t)})):-1;return n>-1?n:t},findSelectedOptionIndex:function(){var t=this;if(this.$filled)for(var e,n=function(){var e=t.d_value[o],n=t.visibleOptions.findIndex((function(n){return t.isValidSelectedOption(n)&&t.isEquals(e,t.getOptionValue(n))}));if(n>-1)return{v:n}},o=this.d_value.length-1;o>=0;o--)if(e=n())return e.v;return-1},findFirstSelectedOptionIndex:function(){var t=this;return this.$filled?this.visibleOptions.findIndex((function(e){return t.isValidSelectedOption(e)})):-1},findLastSelectedOptionIndex:function(){var t=this;return this.$filled?pt(this.visibleOptions,(function(e){return t.isValidSelectedOption(e)})):-1},findNextSelectedOptionIndex:function(t){var e=this,n=this.$filled&&t-1?n+t+1:-1},findPrevSelectedOptionIndex:function(t){var e=this,n=this.$filled&&t>0?pt(this.visibleOptions.slice(0,t),(function(t){return e.isValidSelectedOption(t)})):-1;return n>-1?n:-1},findNearestSelectedOptionIndex:function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=-1;return this.$filled&&(n=e?-1===(n=this.findPrevSelectedOptionIndex(t))?this.findNextSelectedOptionIndex(t):n:-1===(n=this.findNextSelectedOptionIndex(t))?this.findPrevSelectedOptionIndex(t):n),n>-1?n:t},findFirstFocusedOptionIndex:function(){var t=this.findSelectedOptionIndex();return t<0?this.findFirstOptionIndex():t},findLastFocusedOptionIndex:function(){var t=this.findSelectedOptionIndex();return t<0?this.findLastOptionIndex():t},searchOptions:function(t){var e=this;this.searchValue=(this.searchValue||"")+t.key;var n=-1;K(this.searchValue)&&(-1===(n=-1!==this.focusedOptionIndex?-1===(n=this.visibleOptions.slice(this.focusedOptionIndex).findIndex((function(t){return e.isOptionMatched(t)})))?this.visibleOptions.slice(0,this.focusedOptionIndex).findIndex((function(t){return e.isOptionMatched(t)})):n+this.focusedOptionIndex:this.visibleOptions.findIndex((function(t){return e.isOptionMatched(t)})))&&-1===this.focusedOptionIndex&&(n=this.findFirstFocusedOptionIndex()),-1!==n&&this.changeFocusedOptionIndex(t,n)),this.searchTimeout&&clearTimeout(this.searchTimeout),this.searchTimeout=setTimeout((function(){e.searchValue="",e.searchTimeout=null}),500)},changeFocusedOptionIndex:function(t,e){this.focusedOptionIndex!==e&&(this.focusedOptionIndex=e,this.scrollInView(),this.selectOnFocus&&this.onOptionSelect(t,this.visibleOptions[e]))},scrollInView:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:-1;this.$nextTick((function(){var n=-1!==e?"".concat(t.id,"_").concat(e):t.focusedOptionId,o=J(t.list,'li[id="'.concat(n,'"]'));o?o.scrollIntoView&&o.scrollIntoView({block:"nearest",inline:"nearest"}):t.virtualScrollerDisabled||t.virtualScroller&&t.virtualScroller.scrollToIndex(-1!==e?e:t.focusedOptionIndex)}))},autoUpdateModel:function(){if(this.selectOnFocus&&this.autoOptionFocus&&!this.$filled){this.focusedOptionIndex=this.findFirstFocusedOptionIndex();var t=this.getOptionValue(this.visibleOptions[this.focusedOptionIndex]);this.updateModel(null,[t])}},updateModel:function(t,e){this.writeValue(e,t),this.$emit("change",{originalEvent:t,value:e})},flatOptions:function(t){var e=this;return(t||[]).reduce((function(t,n,o){t.push({optionGroup:n,group:!0,index:o});var i=e.getOptionGroupChildren(n);return i&&i.forEach((function(e){return t.push(e)})),t}),[])},overlayRef:function(t){this.overlay=t},listRef:function(t,e){this.list=t,e&&e(t)},virtualScrollerRef:function(t){this.virtualScroller=t}},computed:{visibleOptions:function(){var t=this,e=this.optionGroupLabel?this.flatOptions(this.options):this.options||[];if(this.filterValue){var n=_t.filter(e,this.searchFields,this.filterValue,this.filterMatchMode,this.filterLocale);if(this.optionGroupLabel){var o=this.options||[],i=[];return o.forEach((function(e){var o=t.getOptionGroupChildren(e).filter((function(t){return n.includes(t)}));o.length>0&&i.push(Kn(Kn({},e),{},Dn({},"string"==typeof t.optionGroupChildren?t.optionGroupChildren:"items",Bn(o))))})),this.flatOptions(i)}return n}return e},label:function(){var t;if(this.d_value&&this.d_value.length){if(K(this.maxSelectedLabels)&&this.d_value.length>this.maxSelectedLabels)return this.getSelectedItemsLabel();t="";for(var e=0;ethis.maxSelectedLabels},allSelected:function(){var t=this;return null!==this.selectAll?this.selectAll:K(this.visibleOptions)&&this.visibleOptions.every((function(e){return t.isOptionGroup(e)||t.isOptionDisabled(e)||t.isSelected(e)}))},hasSelectedOption:function(){return this.$filled},equalityKey:function(){return this.optionValue?null:this.dataKey},searchFields:function(){return this.filterFields||[this.optionLabel]},maxSelectionLimitReached:function(){return this.selectionLimit&&this.d_value&&this.d_value.length===this.selectionLimit},filterResultMessageText:function(){return K(this.visibleOptions)?this.filterMessageText.replaceAll("{0}",this.visibleOptions.length):this.emptyFilterMessageText},filterMessageText:function(){return this.filterMessage||this.$primevue.config.locale.searchMessage||""},emptyFilterMessageText:function(){return this.emptyFilterMessage||this.$primevue.config.locale.emptySearchMessage||this.$primevue.config.locale.emptyFilterMessage||""},emptyMessageText:function(){return this.emptyMessage||this.$primevue.config.locale.emptyMessage||""},selectionMessageText:function(){return this.selectionMessage||this.$primevue.config.locale.selectionMessage||""},emptySelectionMessageText:function(){return this.emptySelectionMessage||this.$primevue.config.locale.emptySelectionMessage||""},selectedMessageText:function(){return this.$filled?this.selectionMessageText.replaceAll("{0}",this.d_value.length):this.emptySelectionMessageText},focusedOptionId:function(){return-1!==this.focusedOptionIndex?"".concat(this.id,"_").concat(this.focusedOptionIndex):null},ariaSetSize:function(){var t=this;return this.visibleOptions.filter((function(e){return!t.isOptionGroup(e)})).length},toggleAllAriaLabel:function(){return this.$primevue.config.locale.aria?this.$primevue.config.locale.aria[this.allSelected?"selectAll":"unselectAll"]:void 0},listAriaLabel:function(){return this.$primevue.config.locale.aria?this.$primevue.config.locale.aria.listLabel:void 0},virtualScrollerDisabled:function(){return!this.virtualScrollerOptions},hasFluid:function(){return D(this.fluid)?!!this.$pcFluid:this.fluid},isClearIconVisible:function(){return this.showClear&&null!=this.d_value&&K(this.options)}},directives:{ripple:De},components:{InputText:We,Checkbox:Cn,VirtualScroller:nn,Portal:Ye,Chip:_n,IconField:Ue,InputIcon:Ne,TimesIcon:Mt,SearchIcon:Vt,ChevronDownIcon:Pt,SpinnerIcon:Ct,CheckIcon:Ft}};function Rn(t){return(Rn="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function Gn(t,e,n){return(e=function(t){var e=function(t,e){if("object"!=Rn(t)||!t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var o=n.call(t,e||"default");if("object"!=Rn(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==Rn(e)?e:e+""}(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}var Un=["id","disabled","placeholder","tabindex","aria-label","aria-labelledby","aria-expanded","aria-controls","aria-activedescendant","aria-invalid"],Nn={key:0},Wn=["id","aria-label"],qn=["id"],Xn=["id","aria-label","aria-selected","aria-disabled","aria-setsize","aria-posinset","onClick","onMousemove","data-p-selected","data-p-focused","data-p-disabled"];jn.render=function(t,e,n,o,i,r){var s=k("Chip"),l=k("SpinnerIcon"),a=k("Checkbox"),c=k("InputText"),u=k("SearchIcon"),d=k("InputIcon"),p=k("IconField"),h=k("VirtualScroller"),f=k("Portal"),b=w("ripple");return m(),g("div",I({ref:"container",class:t.cx("root"),style:t.sx("root"),onClick:e[7]||(e[7]=function(){return r.onContainerClick&&r.onContainerClick.apply(r,arguments)})},t.ptmi("root")),[C("div",I({class:"p-hidden-accessible"},t.ptm("hiddenInputContainer"),{"data-p-hidden-accessible":!0}),[C("input",I({ref:"focusInput",id:t.inputId,type:"text",readonly:"",disabled:t.disabled,placeholder:t.placeholder,tabindex:t.disabled?-1:t.tabindex,role:"combobox","aria-label":t.ariaLabel,"aria-labelledby":t.ariaLabelledby,"aria-haspopup":"listbox","aria-expanded":i.overlayVisible,"aria-controls":i.id+"_list","aria-activedescendant":i.focused?r.focusedOptionId:void 0,"aria-invalid":t.invalid||void 0,onFocus:e[0]||(e[0]=function(){return r.onFocus&&r.onFocus.apply(r,arguments)}),onBlur:e[1]||(e[1]=function(){return r.onBlur&&r.onBlur.apply(r,arguments)}),onKeydown:e[2]||(e[2]=function(){return r.onKeyDown&&r.onKeyDown.apply(r,arguments)})},t.ptm("hiddenInput")),null,16,Un)],16),C("div",I({class:t.cx("labelContainer")},t.ptm("labelContainer")),[C("div",I({class:t.cx("label")},t.ptm("label")),[v(t.$slots,"value",{value:t.d_value,placeholder:t.placeholder},(function(){return["comma"===t.display?(m(),g(_,{key:0},[y(x(r.label||"empty"),1)],64)):"chip"===t.display?(m(),g(_,{key:1},[r.chipSelectedItems?(m(),g("span",Nn,x(r.label),1)):(m(!0),g(_,{key:1},M(t.d_value,(function(e){return m(),g("span",I({key:r.getLabelByValue(e),class:t.cx("chipItem"),ref_for:!0},t.ptm("chipItem")),[v(t.$slots,"chip",{value:e,removeCallback:function(t){return r.removeOption(t,e)}},(function(){return[P(s,{class:z(t.cx("pcChip")),label:r.getLabelByValue(e),removeIcon:t.chipIcon||t.removeTokenIcon,removable:"",unstyled:t.unstyled,onRemove:function(t){return r.removeOption(t,e)},pt:t.ptm("pcChip")},{removeicon:L((function(){return[v(t.$slots,t.$slots.chipicon?"chipicon":"removetokenicon",{class:z(t.cx("chipIcon")),item:e,removeCallback:function(t){return r.removeOption(t,e)}})]})),_:2},1032,["class","label","removeIcon","unstyled","onRemove","pt"])]}))],16)})),128)),t.d_value&&0!==t.d_value.length?$("",!0):(m(),g(_,{key:2},[y(x(t.placeholder||"empty"),1)],64))],64)):$("",!0)]}))],16)],16),r.isClearIconVisible?v(t.$slots,"clearicon",{key:0,class:z(t.cx("clearIcon")),clearCallback:r.onClearClick},(function(){return[(m(),S(E(t.clearIcon?"i":"TimesIcon"),I({ref:"clearIcon",class:[t.cx("clearIcon"),t.clearIcon],onClick:r.onClearClick},t.ptm("clearIcon"),{"data-pc-section":"clearicon"}),null,16,["class","onClick"]))]})):$("",!0),C("div",I({class:t.cx("dropdown")},t.ptm("dropdown")),[t.loading?v(t.$slots,"loadingicon",{key:0,class:z(t.cx("loadingIcon"))},(function(){return[t.loadingIcon?(m(),g("span",I({key:0,class:[t.cx("loadingIcon"),"pi-spin",t.loadingIcon],"aria-hidden":"true"},t.ptm("loadingIcon")),null,16)):(m(),S(l,I({key:1,class:t.cx("loadingIcon"),spin:"","aria-hidden":"true"},t.ptm("loadingIcon")),null,16,["class"]))]})):v(t.$slots,"dropdownicon",{key:1,class:z(t.cx("dropdownIcon"))},(function(){return[(m(),S(E(t.dropdownIcon?"span":"ChevronDownIcon"),I({class:[t.cx("dropdownIcon"),t.dropdownIcon],"aria-hidden":"true"},t.ptm("dropdownIcon")),null,16,["class"]))]}))],16),P(f,{appendTo:t.appendTo},{default:L((function(){return[P(V,I({name:"p-connected-overlay",onEnter:r.onOverlayEnter,onAfterEnter:r.onOverlayAfterEnter,onLeave:r.onOverlayLeave,onAfterLeave:r.onOverlayAfterLeave},t.ptm("transition")),{default:L((function(){return[i.overlayVisible?(m(),g("div",I({key:0,ref:r.overlayRef,style:[t.panelStyle,t.overlayStyle],class:[t.cx("overlay"),t.panelClass,t.overlayClass],onClick:e[5]||(e[5]=function(){return r.onOverlayClick&&r.onOverlayClick.apply(r,arguments)}),onKeydown:e[6]||(e[6]=function(){return r.onOverlayKeyDown&&r.onOverlayKeyDown.apply(r,arguments)})},t.ptm("overlay")),[C("span",I({ref:"firstHiddenFocusableElementOnOverlay",role:"presentation","aria-hidden":"true",class:"p-hidden-accessible p-hidden-focusable",tabindex:0,onFocus:e[3]||(e[3]=function(){return r.onFirstHiddenFocus&&r.onFirstHiddenFocus.apply(r,arguments)})},t.ptm("hiddenFirstFocusableEl"),{"data-p-hidden-accessible":!0,"data-p-hidden-focusable":!0}),null,16),v(t.$slots,"header",{value:t.d_value,options:r.visibleOptions}),t.showToggleAll&&null==t.selectionLimit||t.filter?(m(),g("div",I({key:0,class:t.cx("header")},t.ptm("header")),[t.showToggleAll&&null==t.selectionLimit?(m(),S(a,{key:0,modelValue:r.allSelected,binary:!0,disabled:t.disabled,variant:t.variant,"aria-label":r.toggleAllAriaLabel,onChange:r.onToggleAll,unstyled:t.unstyled,pt:r.getHeaderCheckboxPTOptions("pcHeaderCheckbox")},{icon:L((function(e){return[t.$slots.headercheckboxicon?(m(),S(E(t.$slots.headercheckboxicon),{key:0,checked:e.checked,class:z(e.class)},null,8,["checked","class"])):e.checked?(m(),S(E(t.checkboxIcon?"span":"CheckIcon"),I({key:1,class:[e.class,Gn({},t.checkboxIcon,e.checked)]},r.getHeaderCheckboxPTOptions("pcHeaderCheckbox.icon")),null,16,["class"])):$("",!0)]})),_:1},8,["modelValue","disabled","variant","aria-label","onChange","unstyled","pt"])):$("",!0),t.filter?(m(),S(p,{key:1,class:z(t.cx("pcFilterContainer")),unstyled:t.unstyled,pt:t.ptm("pcFilterContainer")},{default:L((function(){return[P(c,{ref:"filterInput",value:i.filterValue,onVnodeMounted:r.onFilterUpdated,onVnodeUpdated:r.onFilterUpdated,class:z(t.cx("pcFilter")),placeholder:t.filterPlaceholder,disabled:t.disabled,variant:t.variant,unstyled:t.unstyled,role:"searchbox",autocomplete:"off","aria-owns":i.id+"_list","aria-activedescendant":r.focusedOptionId,onKeydown:r.onFilterKeyDown,onBlur:r.onFilterBlur,onInput:r.onFilterChange,pt:t.ptm("pcFilter")},null,8,["value","onVnodeMounted","onVnodeUpdated","class","placeholder","disabled","variant","unstyled","aria-owns","aria-activedescendant","onKeydown","onBlur","onInput","pt"]),P(d,{unstyled:t.unstyled,pt:t.ptm("pcFilterIconContainer")},{default:L((function(){return[v(t.$slots,"filtericon",{},(function(){return[t.filterIcon?(m(),g("span",I({key:0,class:t.filterIcon},t.ptm("filterIcon")),null,16)):(m(),S(u,F(I({key:1},t.ptm("filterIcon"))),null,16))]}))]})),_:3},8,["unstyled","pt"])]})),_:3},8,["class","unstyled","pt"])):$("",!0),t.filter?(m(),g("span",I({key:2,role:"status","aria-live":"polite",class:"p-hidden-accessible"},t.ptm("hiddenFilterResult"),{"data-p-hidden-accessible":!0}),x(r.filterResultMessageText),17)):$("",!0)],16)):$("",!0),C("div",I({class:t.cx("listContainer"),style:{"max-height":r.virtualScrollerDisabled?t.scrollHeight:""}},t.ptm("listContainer")),[P(h,I({ref:r.virtualScrollerRef},t.virtualScrollerOptions,{items:r.visibleOptions,style:{height:t.scrollHeight},tabindex:-1,disabled:r.virtualScrollerDisabled,pt:t.ptm("virtualScroller")}),A({content:L((function(e){var n=e.styleClass,o=e.contentRef,s=e.items,l=e.getItemOptions,c=e.contentStyle,u=e.itemSize;return[C("ul",I({ref:function(t){return r.listRef(t,o)},id:i.id+"_list",class:[t.cx("list"),n],style:c,role:"listbox","aria-multiselectable":"true","aria-label":r.listAriaLabel},t.ptm("list")),[(m(!0),g(_,null,M(s,(function(e,n){return m(),g(_,{key:r.getOptionRenderKey(e,r.getOptionIndex(n,l))},[r.isOptionGroup(e)?(m(),g("li",I({key:0,id:i.id+"_"+r.getOptionIndex(n,l),style:{height:u?u+"px":void 0},class:t.cx("optionGroup"),role:"option",ref_for:!0},t.ptm("optionGroup")),[v(t.$slots,"optiongroup",{option:e.optionGroup,index:r.getOptionIndex(n,l)},(function(){return[y(x(r.getOptionGroupLabel(e.optionGroup)),1)]}))],16,qn)):O((m(),g("li",I({key:1,id:i.id+"_"+r.getOptionIndex(n,l),style:{height:u?u+"px":void 0},class:t.cx("option",{option:e,index:n,getItemOptions:l}),role:"option","aria-label":r.getOptionLabel(e),"aria-selected":r.isSelected(e),"aria-disabled":r.isOptionDisabled(e),"aria-setsize":r.ariaSetSize,"aria-posinset":r.getAriaPosInset(r.getOptionIndex(n,l)),onClick:function(t){return r.onOptionSelect(t,e,r.getOptionIndex(n,l),!0)},onMousemove:function(t){return r.onOptionMouseMove(t,r.getOptionIndex(n,l))},ref_for:!0},r.getCheckboxPTOptions(e,l,n,"option"),{"data-p-selected":r.isSelected(e),"data-p-focused":i.focusedOptionIndex===r.getOptionIndex(n,l),"data-p-disabled":r.isOptionDisabled(e)}),[P(a,{defaultValue:r.isSelected(e),binary:!0,tabindex:-1,variant:t.variant,unstyled:t.unstyled,pt:r.getCheckboxPTOptions(e,l,n,"pcOptionCheckbox")},{icon:L((function(o){return[t.$slots.optioncheckboxicon||t.$slots.itemcheckboxicon?(m(),S(E(t.$slots.optioncheckboxicon||t.$slots.itemcheckboxicon),{key:0,checked:o.checked,class:z(o.class)},null,8,["checked","class"])):o.checked?(m(),S(E(t.checkboxIcon?"span":"CheckIcon"),I({key:1,class:[o.class,Gn({},t.checkboxIcon,o.checked)],ref_for:!0},r.getCheckboxPTOptions(e,l,n,"pcOptionCheckbox.icon")),null,16,["class"])):$("",!0)]})),_:2},1032,["defaultValue","variant","unstyled","pt"]),v(t.$slots,"option",{option:e,selected:r.isSelected(e),index:r.getOptionIndex(n,l)},(function(){return[C("span",I({ref_for:!0},t.ptm("optionLabel")),x(r.getOptionLabel(e)),17)]}))],16,Xn)),[[b]])],64)})),128)),i.filterValue&&(!s||s&&0===s.length)?(m(),g("li",I({key:0,class:t.cx("emptyMessage"),role:"option"},t.ptm("emptyMessage")),[v(t.$slots,"emptyfilter",{},(function(){return[y(x(r.emptyFilterMessageText),1)]}))],16)):!t.options||t.options&&0===t.options.length?(m(),g("li",I({key:1,class:t.cx("emptyMessage"),role:"option"},t.ptm("emptyMessage")),[v(t.$slots,"empty",{},(function(){return[y(x(r.emptyMessageText),1)]}))],16)):$("",!0)],16,Wn)]})),_:2},[t.$slots.loader?{name:"loader",fn:L((function(e){var n=e.options;return[v(t.$slots,"loader",{options:n})]})),key:"0"}:void 0]),1040,["items","style","disabled","pt"])],16),v(t.$slots,"footer",{value:t.d_value,options:r.visibleOptions}),!t.options||t.options&&0===t.options.length?(m(),g("span",I({key:1,role:"status","aria-live":"polite",class:"p-hidden-accessible"},t.ptm("hiddenEmptyMessage"),{"data-p-hidden-accessible":!0}),x(r.emptyMessageText),17)):$("",!0),C("span",I({role:"status","aria-live":"polite",class:"p-hidden-accessible"},t.ptm("hiddenSelectedMessage"),{"data-p-hidden-accessible":!0}),x(r.selectedMessageText),17),C("span",I({ref:"lastHiddenFocusableElementOnOverlay",role:"presentation","aria-hidden":"true",class:"p-hidden-accessible p-hidden-focusable",tabindex:0,onFocus:e[4]||(e[4]=function(){return r.onLastHiddenFocus&&r.onLastHiddenFocus.apply(r,arguments)})},t.ptm("hiddenLastFocusableEl"),{"data-p-hidden-accessible":!0,"data-p-hidden-focusable":!0}),null,16)],16)):$("",!0)]})),_:3},16,["onEnter","onAfterEnter","onLeave","onAfterLeave"])]})),_:3},8,["appendTo"])],16)};var Yn=St.extend({name:"slider",theme:function(t){var e=t.dt;return"\n.p-slider {\n position: relative;\n background: ".concat(e("slider.track.background"),";\n border-radius: ").concat(e("slider.track.border.radius"),";\n}\n\n.p-slider-handle {\n cursor: grab;\n touch-action: none;\n user-select: none;\n display: flex;\n justify-content: center;\n align-items: center;\n height: ").concat(e("slider.handle.height"),";\n width: ").concat(e("slider.handle.width"),";\n background: ").concat(e("slider.handle.background"),";\n border-radius: ").concat(e("slider.handle.border.radius"),";\n transition: background ").concat(e("slider.transition.duration"),", color ").concat(e("slider.transition.duration"),", border-color ").concat(e("slider.transition.duration"),", box-shadow ").concat(e("slider.transition.duration"),", outline-color ").concat(e("slider.transition.duration"),';\n outline-color: transparent;\n}\n\n.p-slider-handle::before {\n content: "";\n width: ').concat(e("slider.handle.content.width"),";\n height: ").concat(e("slider.handle.content.height"),";\n display: block;\n background: ").concat(e("slider.handle.content.background"),";\n border-radius: ").concat(e("slider.handle.content.border.radius"),";\n box-shadow: ").concat(e("slider.handle.content.shadow"),";\n transition: background ").concat(e("slider.transition.duration"),";\n}\n\n.p-slider:not(.p-disabled) .p-slider-handle:hover {\n background: ").concat(e("slider.handle.hover.background"),";\n}\n\n.p-slider:not(.p-disabled) .p-slider-handle:hover::before {\n background: ").concat(e("slider.handle.content.hover.background"),";\n}\n\n.p-slider-handle:focus-visible {\n box-shadow: ").concat(e("slider.handle.focus.ring.shadow"),";\n outline: ").concat(e("slider.handle.focus.ring.width")," ").concat(e("slider.handle.focus.ring.style")," ").concat(e("slider.handle.focus.ring.color"),";\n outline-offset: ").concat(e("slider.handle.focus.ring.offset"),";\n}\n\n.p-slider-range {\n display: block;\n background: ").concat(e("slider.range.background"),";\n border-radius: ").concat(e("slider.border.radius"),";\n}\n\n.p-slider.p-slider-horizontal {\n height: ").concat(e("slider.track.size"),";\n}\n\n.p-slider-horizontal .p-slider-range {\n inset-block-start: 0;\n inset-inline-start: 0;\n height: 100%;\n}\n\n.p-slider-horizontal .p-slider-handle {\n inset-block-start: 50%;\n margin-block-start: calc(-1 * calc(").concat(e("slider.handle.height")," / 2));\n margin-inline-start: calc(-1 * calc(").concat(e("slider.handle.width")," / 2));\n}\n\n.p-slider-vertical {\n min-height: 100px;\n width: ").concat(e("slider.track.size"),";\n}\n\n.p-slider-vertical .p-slider-handle {\n inset-inline-start: 50%;\n margin-inline-start: calc(-1 * calc(").concat(e("slider.handle.width")," / 2));\n margin-block-end: calc(-1 * calc(").concat(e("slider.handle.height")," / 2));\n}\n\n.p-slider-vertical .p-slider-range {\n inset-block-end: 0;\n inset-inline-start: 0;\n width: 100%;\n}\n")},classes:{root:function(t){var e=t.instance,n=t.props;return["p-slider p-component",{"p-disabled":n.disabled,"p-invalid":e.$invalid,"p-slider-horizontal":"horizontal"===n.orientation,"p-slider-vertical":"vertical"===n.orientation}]},range:"p-slider-range",handle:"p-slider-handle"},inlineStyles:{handle:{position:"absolute"},range:{position:"absolute"}}});function Zn(t){return function(t){if(Array.isArray(t))return Jn(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||function(t,e){if(t){if("string"==typeof t)return Jn(t,e);var n={}.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Jn(t,e):void 0}}(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Jn(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,o=Array(e);n0&&(i=r+Math.floor(i/this.step-r/this.step)*this.step)}else i=Math.floor(i);this.updateModel(t,i)},updateModel:function(t,e){var n,o=parseFloat(e.toFixed(10));this.range?(n=this.value?Zn(this.value):[],0==this.handleIndex?(o=this.max&&(o=this.max),n[0]=o):(o>this.max?o=this.max:o<=this.min&&(o=this.min),n[1]=o)):(othis.max&&(o=this.max),n=o),this.writeValue(n,t),this.$emit("change",n)},onDragStart:function(t,e){this.disabled||(this.$el.setAttribute("data-p-sliding",!0),this.dragging=!0,this.updateDomData(),this.range&&this.value[0]===this.max?this.handleIndex=0:this.handleIndex=e,t.currentTarget.focus())},onDrag:function(t){this.dragging&&this.setValue(t)},onDragEnd:function(t){this.dragging&&(this.dragging=!1,this.$el.setAttribute("data-p-sliding",!1),this.$emit("slideend",{originalEvent:t,value:this.value}))},onBarClick:function(t){this.disabled||"handle"!==q(t.target,"data-pc-section")&&(this.updateDomData(),this.setValue(t))},onMouseDown:function(t,e){this.bindDragListeners(),this.onDragStart(t,e)},onKeyDown:function(t,e){switch(this.handleIndex=e,t.code){case"ArrowDown":case"ArrowLeft":this.decrementValue(t,e),t.preventDefault();break;case"ArrowUp":case"ArrowRight":this.incrementValue(t,e),t.preventDefault();break;case"PageDown":this.decrementValue(t,e,!0),t.preventDefault();break;case"PageUp":this.incrementValue(t,e,!0),t.preventDefault();break;case"Home":this.updateModel(t,this.min),t.preventDefault();break;case"End":this.updateModel(t,this.max),t.preventDefault()}},onBlur:function(t,e){var n,o;null===(n=(o=this.formField).onBlur)||void 0===n||n.call(o,t)},decrementValue:function(t,e){var n,o=arguments.length>2&&void 0!==arguments[2]&&arguments[2];n=this.range?this.step?this.value[e]-this.step:this.value[e]-1:this.step?this.value-this.step:!this.step&&o?this.value-10:this.value-1,this.updateModel(t,n),t.preventDefault()},incrementValue:function(t,e){var n,o=arguments.length>2&&void 0!==arguments[2]&&arguments[2];n=this.range?this.step?this.value[e]+this.step:this.value[e]+1:this.step?this.value+this.step:!this.step&&o?this.value+10:this.value+1,this.updateModel(t,n),t.preventDefault()},bindDragListeners:function(){this.dragListener||(this.dragListener=this.onDrag.bind(this),document.addEventListener("mousemove",this.dragListener)),this.dragEndListener||(this.dragEndListener=this.onDragEnd.bind(this),document.addEventListener("mouseup",this.dragEndListener))},unbindDragListeners:function(){this.dragListener&&(document.removeEventListener("mousemove",this.dragListener),this.dragListener=null),this.dragEndListener&&(document.removeEventListener("mouseup",this.dragEndListener),this.dragEndListener=null)},rangeStyle:function(){if(this.range){var t=this.rangeEndPosition>this.rangeStartPosition?this.rangeEndPosition-this.rangeStartPosition:this.rangeStartPosition-this.rangeEndPosition,e=this.rangeEndPosition>this.rangeStartPosition?this.rangeStartPosition:this.rangeEndPosition;return this.horizontal?{"inset-inline-start":e+"%",width:t+"%"}:{bottom:e+"%",height:t+"%"}}return this.horizontal?{width:this.handlePosition+"%"}:{height:this.handlePosition+"%"}},handleStyle:function(){return this.horizontal?{"inset-inline-start":this.handlePosition+"%"}:{bottom:this.handlePosition+"%"}},rangeStartHandleStyle:function(){return this.horizontal?{"inset-inline-start":this.rangeStartPosition+"%"}:{bottom:this.rangeStartPosition+"%"}},rangeEndHandleStyle:function(){return this.horizontal?{"inset-inline-start":this.rangeEndPosition+"%"}:{bottom:this.rangeEndPosition+"%"}}},computed:{value:function(){var t,e,n,o,i;return this.range?[null!==(e=null===(n=this.d_value)||void 0===n?void 0:n[0])&&void 0!==e?e:this.min,null!==(o=null===(i=this.d_value)||void 0===i?void 0:i[1])&&void 0!==o?o:this.max]:null!==(t=this.d_value)&&void 0!==t?t:this.min},horizontal:function(){return"horizontal"===this.orientation},vertical:function(){return"vertical"===this.orientation},handlePosition:function(){return this.valuethis.max?100:100*(this.value-this.min)/(this.max-this.min)},rangeStartPosition:function(){return this.value&&void 0!==this.value[0]?this.value[0]this.max?100:100*(this.value[1]-this.min)/(this.max-this.min):100}}},to=["tabindex","aria-valuemin","aria-valuenow","aria-valuemax","aria-labelledby","aria-label","aria-orientation"],eo=["tabindex","aria-valuemin","aria-valuenow","aria-valuemax","aria-labelledby","aria-label","aria-orientation"],no=["tabindex","aria-valuemin","aria-valuenow","aria-valuemax","aria-labelledby","aria-label","aria-orientation"];Qn.render=function(t,e,n,o,i,r){return m(),g("div",I({class:t.cx("root"),onClick:e[18]||(e[18]=function(){return r.onBarClick&&r.onBarClick.apply(r,arguments)})},t.ptmi("root"),{"data-p-sliding":!1}),[C("span",I({class:t.cx("range"),style:[t.sx("range"),r.rangeStyle()]},t.ptm("range")),null,16),t.range?$("",!0):(m(),g("span",I({key:0,class:t.cx("handle"),style:[t.sx("handle"),r.handleStyle()],onTouchstartPassive:e[0]||(e[0]=function(t){return r.onDragStart(t)}),onTouchmovePassive:e[1]||(e[1]=function(t){return r.onDrag(t)}),onTouchend:e[2]||(e[2]=function(t){return r.onDragEnd(t)}),onMousedown:e[3]||(e[3]=function(t){return r.onMouseDown(t)}),onKeydown:e[4]||(e[4]=function(t){return r.onKeyDown(t)}),onBlur:e[5]||(e[5]=function(t){return r.onBlur(t)}),tabindex:t.tabindex,role:"slider","aria-valuemin":t.min,"aria-valuenow":t.d_value,"aria-valuemax":t.max,"aria-labelledby":t.ariaLabelledby,"aria-label":t.ariaLabel,"aria-orientation":t.orientation},t.ptm("handle")),null,16,to)),t.range?(m(),g("span",I({key:1,class:t.cx("handle"),style:[t.sx("handle"),r.rangeStartHandleStyle()],onTouchstartPassive:e[6]||(e[6]=function(t){return r.onDragStart(t,0)}),onTouchmovePassive:e[7]||(e[7]=function(t){return r.onDrag(t)}),onTouchend:e[8]||(e[8]=function(t){return r.onDragEnd(t)}),onMousedown:e[9]||(e[9]=function(t){return r.onMouseDown(t,0)}),onKeydown:e[10]||(e[10]=function(t){return r.onKeyDown(t,0)}),onBlur:e[11]||(e[11]=function(t){return r.onBlur(t,0)}),tabindex:t.tabindex,role:"slider","aria-valuemin":t.min,"aria-valuenow":t.d_value?t.d_value[0]:null,"aria-valuemax":t.max,"aria-labelledby":t.ariaLabelledby,"aria-label":t.ariaLabel,"aria-orientation":t.orientation},t.ptm("startHandler")),null,16,eo)):$("",!0),t.range?(m(),g("span",I({key:2,class:t.cx("handle"),style:[t.sx("handle"),r.rangeEndHandleStyle()],onTouchstartPassive:e[12]||(e[12]=function(t){return r.onDragStart(t,1)}),onTouchmovePassive:e[13]||(e[13]=function(t){return r.onDrag(t)}),onTouchend:e[14]||(e[14]=function(t){return r.onDragEnd(t)}),onMousedown:e[15]||(e[15]=function(t){return r.onMouseDown(t,1)}),onKeydown:e[16]||(e[16]=function(t){return r.onKeyDown(t,1)}),onBlur:e[17]||(e[17]=function(t){return r.onBlur(t,1)}),tabindex:t.tabindex,role:"slider","aria-valuemin":t.min,"aria-valuenow":t.d_value?t.d_value[1]:null,"aria-valuemax":t.max,"aria-labelledby":t.ariaLabelledby,"aria-label":t.ariaLabel,"aria-orientation":t.orientation},t.ptm("endHandler")),null,16,no)):$("",!0)],16)};var oo={name:"Card",extends:{name:"BaseCard",extends:Lt,style:St.extend({name:"card",theme:function(t){var e=t.dt;return"\n.p-card {\n background: ".concat(e("card.background"),";\n color: ").concat(e("card.color"),";\n box-shadow: ").concat(e("card.shadow"),";\n border-radius: ").concat(e("card.border.radius"),";\n display: flex;\n flex-direction: column;\n}\n\n.p-card-caption {\n display: flex;\n flex-direction: column;\n gap: ").concat(e("card.caption.gap"),";\n}\n\n.p-card-body {\n padding: ").concat(e("card.body.padding"),";\n display: flex;\n flex-direction: column;\n gap: ").concat(e("card.body.gap"),";\n}\n\n.p-card-title {\n font-size: ").concat(e("card.title.font.size"),";\n font-weight: ").concat(e("card.title.font.weight"),";\n}\n\n.p-card-subtitle {\n color: ").concat(e("card.subtitle.color"),";\n}\n")},classes:{root:"p-card p-component",header:"p-card-header",body:"p-card-body",caption:"p-card-caption",title:"p-card-title",subtitle:"p-card-subtitle",content:"p-card-content",footer:"p-card-footer"}}),provide:function(){return{$pcCard:this,$parentInstance:this}}},inheritAttrs:!1};oo.render=function(t,e,n,o,i,r){return m(),g("div",I({class:t.cx("root")},t.ptmi("root")),[t.$slots.header?(m(),g("div",I({key:0,class:t.cx("header")},t.ptm("header")),[v(t.$slots,"header")],16)):$("",!0),C("div",I({class:t.cx("body")},t.ptm("body")),[t.$slots.title||t.$slots.subtitle?(m(),g("div",I({key:0,class:t.cx("caption")},t.ptm("caption")),[t.$slots.title?(m(),g("div",I({key:0,class:t.cx("title")},t.ptm("title")),[v(t.$slots,"title")],16)):$("",!0),t.$slots.subtitle?(m(),g("div",I({key:1,class:t.cx("subtitle")},t.ptm("subtitle")),[v(t.$slots,"subtitle")],16)):$("",!0)],16)):$("",!0),C("div",I({class:t.cx("content")},t.ptm("content")),[v(t.$slots,"content")],16),t.$slots.footer?(m(),g("div",I({key:1,class:t.cx("footer")},t.ptm("footer")),[v(t.$slots,"footer")],16)):$("",!0)],16)],16)};var io=St.extend({name:"contextmenu",theme:function(t){var e=t.dt;return"\n.p-contextmenu {\n background: ".concat(e("contextmenu.background"),";\n color: ").concat(e("contextmenu.color"),";\n border: 1px solid ").concat(e("contextmenu.border.color"),";\n border-radius: ").concat(e("contextmenu.border.radius"),";\n box-shadow: ").concat(e("contextmenu.shadow"),";\n min-width: 12.5rem;\n}\n\n.p-contextmenu-root-list,\n.p-contextmenu-submenu {\n margin: 0;\n padding: ").concat(e("contextmenu.list.padding"),";\n list-style: none;\n outline: 0 none;\n display: flex;\n flex-direction: column;\n gap: ").concat(e("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(e("contextmenu.background"),";\n color: ").concat(e("contextmenu.color"),";\n border: 1px solid ").concat(e("contextmenu.border.color"),";\n border-radius: ").concat(e("contextmenu.border.radius"),";\n box-shadow: ").concat(e("contextmenu.shadow"),";\n}\n\n.p-contextmenu-item {\n position: relative;\n}\n\n.p-contextmenu-item-content {\n transition: background ").concat(e("contextmenu.transition.duration"),", color ").concat(e("contextmenu.transition.duration"),";\n border-radius: ").concat(e("contextmenu.item.border.radius"),";\n color: ").concat(e("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(e("contextmenu.item.padding"),";\n gap: ").concat(e("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(e("contextmenu.item.icon.color"),";\n}\n\n.p-contextmenu-submenu-icon {\n color: ").concat(e("contextmenu.submenu.icon.color"),";\n margin-left: auto;\n font-size: ").concat(e("contextmenu.submenu.icon.size"),";\n width: ").concat(e("contextmenu.submenu.icon.size"),";\n height: ").concat(e("contextmenu.submenu.icon.size"),";\n}\n\n.p-contextmenu-submenu-icon:dir(rtl) {\n margin-left: 0;\n margin-right: auto;\n}\n\n.p-contextmenu-item.p-focus > .p-contextmenu-item-content {\n color: ").concat(e("contextmenu.item.focus.color"),";\n background: ").concat(e("contextmenu.item.focus.background"),";\n}\n\n.p-contextmenu-item.p-focus > .p-contextmenu-item-content .p-contextmenu-item-icon {\n color: ").concat(e("contextmenu.item.icon.focus.color"),";\n}\n\n.p-contextmenu-item.p-focus > .p-contextmenu-item-content .p-contextmenu-submenu-icon {\n color: ").concat(e("contextmenu.submenu.icon.focus.color"),";\n}\n\n.p-contextmenu-item:not(.p-disabled) > .p-contextmenu-item-content:hover {\n color: ").concat(e("contextmenu.item.focus.color"),";\n background: ").concat(e("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(e("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(e("contextmenu.submenu.icon.focus.color"),";\n}\n\n.p-contextmenu-item-active > .p-contextmenu-item-content {\n color: ").concat(e("contextmenu.item.active.color"),";\n background: ").concat(e("contextmenu.item.active.background"),";\n}\n\n.p-contextmenu-item-active > .p-contextmenu-item-content .p-contextmenu-item-icon {\n color: ").concat(e("contextmenu.item.icon.active.color"),";\n}\n\n.p-contextmenu-item-active > .p-contextmenu-item-content .p-contextmenu-submenu-icon {\n color: ").concat(e("contextmenu.submenu.icon.active.color"),";\n}\n\n.p-contextmenu-separator {\n border-block-start: 1px solid ").concat(e("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.p-contextmenu-mobile .p-contextmenu-submenu {\n position: static;\n box-shadow: none;\n border: 0 none;\n padding-inline-start: ").concat(e("tieredmenu.submenu.mobile.indent"),";\n padding-inline-end: 0;\n}\n\n.p-contextmenu-mobile .p-contextmenu-submenu-icon {\n transition: transform 0.2s;\n transform: rotate(90deg);\n}\n\n.p-contextmenu-mobile .p-contextmenu-item-active > .p-contextmenu-item-content .p-contextmenu-submenu-icon {\n transform: rotate(-90deg);\n}\n")},classes:{root:function(t){return["p-contextmenu p-component",{"p-contextmenu-mobile":t.instance.queryMatches}]},rootList:"p-contextmenu-root-list",item:function(t){var e=t.instance,n=t.processedItem;return["p-contextmenu-item",{"p-contextmenu-item-active":e.isItemActive(n),"p-focus":e.isItemFocused(n),"p-disabled":e.isItemDisabled(n)}]},itemContent:"p-contextmenu-item-content",itemLink:"p-contextmenu-item-link",itemIcon:"p-contextmenu-item-icon",itemLabel:"p-contextmenu-item-label",submenuIcon:"p-contextmenu-submenu-icon",submenu:"p-contextmenu-submenu",separator:"p-contextmenu-separator"}}),ro={name:"BaseContextMenu",extends:Lt,props:{model:{type:Array,default:null},appendTo:{type:[String,Object],default:"body"},autoZIndex:{type:Boolean,default:!0},baseZIndex:{type:Number,default:0},global:{type:Boolean,default:!1},breakpoint:{type:String,default:"960px"},tabindex:{type:Number,default:0},ariaLabelledby:{type:String,default:null},ariaLabel:{type:String,default:null}},style:io,provide:function(){return{$pcContextMenu:this,$parentInstance:this}}},so={name:"ContextMenuSub",hostName:"ContextMenu",extends:Lt,emits:["item-click","item-mouseenter","item-mousemove"],props:{items:{type:Array,default:null},menuId:{type:String,default:null},focusedItemId:{type:String,default:null},root:{type:Boolean,default:!1},visible:{type:Boolean,default:!1},level:{type:Number,default:0},templates:{type:Object,default:null},activeItemPath:{type:Object,default:null},tabindex:{type:Number,default:0}},methods:{getItemId:function(t){return"".concat(this.menuId,"_").concat(t.key)},getItemKey:function(t){return this.getItemId(t)},getItemProp:function(t,e,n){return t&&t.item?It(t.item[e],n):void 0},getItemLabel:function(t){return this.getItemProp(t,"label")},getItemLabelId:function(t){return"".concat(this.menuId,"_").concat(t.key,"_label")},getPTOptions:function(t,e,n){return this.ptm(t,{context:{item:e.item,active:this.isItemActive(e),focused:this.isItemFocused(e),disabled:this.isItemDisabled(e),index:n}})},isItemActive:function(t){return this.activeItemPath.some((function(e){return e.key===t.key}))},isItemVisible:function(t){return!1!==this.getItemProp(t,"visible")},isItemDisabled:function(t){return this.getItemProp(t,"disabled")},isItemFocused:function(t){return this.focusedItemId===this.getItemId(t)},isItemGroup:function(t){return K(t.items)},onItemClick:function(t,e){this.getItemProp(e,"command",{originalEvent:t,item:e.item}),this.$emit("item-click",{originalEvent:t,processedItem:e,isFocus:!0})},onItemMouseEnter:function(t,e){this.$emit("item-mouseenter",{originalEvent:t,processedItem:e})},onItemMouseMove:function(t,e){this.$emit("item-mousemove",{originalEvent:t,processedItem:e,isFocus:!0})},getAriaSetSize:function(){var t=this;return this.items.filter((function(e){return t.isItemVisible(e)&&!t.getItemProp(e,"separator")})).length},getAriaPosInset:function(t){var e=this;return t-this.items.slice(0,t).filter((function(t){return e.isItemVisible(t)&&e.getItemProp(t,"separator")})).length+1},onEnter:function(){Ot(this.$refs.container,this.level)},getMenuItemProps:function(t,e){return{action:I({class:this.cx("itemLink"),tabindex:-1},this.getPTOptions("itemLink",t,e)),icon:I({class:[this.cx("itemIcon"),this.getItemProp(t,"icon")]},this.getPTOptions("itemIcon",t,e)),label:I({class:this.cx("itemLabel")},this.getPTOptions("itemLabel",t,e)),submenuicon:I({class:this.cx("submenuIcon")},this.getPTOptions("submenuicon",t,e))}}},components:{AngleRightIcon:Ht},directives:{ripple:De}},lo=["tabindex"],ao=["id","aria-label","aria-disabled","aria-expanded","aria-haspopup","aria-level","aria-setsize","aria-posinset","data-p-active","data-p-focused","data-p-disabled"],co=["onClick","onMouseenter","onMousemove"],uo=["href","target"],po=["id"],ho=["id"];so.render=function(t,e,n,o,i,r){var s=k("AngleRightIcon"),l=k("ContextMenuSub",!0),a=w("ripple");return m(),S(V,I({name:"p-contextmenusub",onEnter:r.onEnter},t.ptm("menu.transition")),{default:L((function(){return[n.root||n.visible?(m(),g("ul",I({key:0,ref:"container",tabindex:n.tabindex},t.ptm("rootList")),[(m(!0),g(_,null,M(n.items,(function(o,i){return m(),g(_,{key:r.getItemKey(o)},[r.isItemVisible(o)&&!r.getItemProp(o,"separator")?(m(),g("li",I({key:0,id:r.getItemId(o),style:r.getItemProp(o,"style"),class:[t.cx("item",{processedItem:o}),r.getItemProp(o,"class")],role:"menuitem","aria-label":r.getItemLabel(o),"aria-disabled":r.isItemDisabled(o)||void 0,"aria-expanded":r.isItemGroup(o)?r.isItemActive(o):void 0,"aria-haspopup":r.isItemGroup(o)&&!r.getItemProp(o,"to")?"menu":void 0,"aria-level":n.level+1,"aria-setsize":r.getAriaSetSize(),"aria-posinset":r.getAriaPosInset(i),ref_for:!0},r.getPTOptions("item",o,i),{"data-p-active":r.isItemActive(o),"data-p-focused":r.isItemFocused(o),"data-p-disabled":r.isItemDisabled(o)}),[C("div",I({class:t.cx("itemContent"),onClick:function(t){return r.onItemClick(t,o)},onMouseenter:function(t){return r.onItemMouseEnter(t,o)},onMousemove:function(t){return r.onItemMouseMove(t,o)},ref_for:!0},r.getPTOptions("itemContent",o,i)),[n.templates.item?(m(),S(E(n.templates.item),{key:1,item:o.item,hasSubmenu:r.getItemProp(o,"items"),label:r.getItemLabel(o),props:r.getMenuItemProps(o,i)},null,8,["item","hasSubmenu","label","props"])):O((m(),g("a",I({key:0,href:r.getItemProp(o,"url"),class:t.cx("itemLink"),target:r.getItemProp(o,"target"),tabindex:"-1",ref_for:!0},r.getPTOptions("itemLink",o,i)),[n.templates.itemicon?(m(),S(E(n.templates.itemicon),{key:0,item:o.item,class:z(t.cx("itemIcon"))},null,8,["item","class"])):r.getItemProp(o,"icon")?(m(),g("span",I({key:1,class:[t.cx("itemIcon"),r.getItemProp(o,"icon")],ref_for:!0},r.getPTOptions("itemIcon",o,i)),null,16)):$("",!0),C("span",I({id:r.getItemLabelId(o),class:t.cx("itemLabel"),ref_for:!0},r.getPTOptions("itemLabel",o,i)),x(r.getItemLabel(o)),17,po),r.getItemProp(o,"items")?(m(),g(_,{key:2},[n.templates.submenuicon?(m(),S(E(n.templates.submenuicon),{key:0,active:r.isItemActive(o),class:z(t.cx("submenuIcon"))},null,8,["active","class"])):(m(),S(s,I({key:1,class:t.cx("submenuIcon"),ref_for:!0},r.getPTOptions("submenuicon",o,i)),null,16,["class"]))],64)):$("",!0)],16,uo)),[[a]])],16,co),r.isItemVisible(o)&&r.isItemGroup(o)?(m(),S(l,I({key:0,id:r.getItemId(o)+"_list",role:"menu",class:t.cx("submenu"),menuId:n.menuId,focusedItemId:n.focusedItemId,items:o.items,templates:n.templates,activeItemPath:n.activeItemPath,level:n.level+1,visible:r.isItemActive(o)&&r.isItemGroup(o),pt:t.pt,unstyled:t.unstyled,onItemClick:e[0]||(e[0]=function(e){return t.$emit("item-click",e)}),onItemMouseenter:e[1]||(e[1]=function(e){return t.$emit("item-mouseenter",e)}),onItemMousemove:e[2]||(e[2]=function(e){return t.$emit("item-mousemove",e)}),"aria-labelledby":r.getItemLabelId(o),ref_for:!0},t.ptm("submenu")),null,16,["id","class","menuId","focusedItemId","items","templates","activeItemPath","level","visible","pt","unstyled","aria-labelledby"])):$("",!0)],16,ao)):$("",!0),r.isItemVisible(o)&&r.getItemProp(o,"separator")?(m(),g("li",I({key:1,id:r.getItemId(o),style:r.getItemProp(o,"style"),class:[t.cx("separator"),r.getItemProp(o,"class")],role:"separator",ref_for:!0},t.ptm("separator")),null,16,ho)):$("",!0)],64)})),128))],16,lo)):$("",!0)]})),_:1},16,["onEnter"])};var fo={name:"ContextMenu",extends:ro,inheritAttrs:!1,emits:["focus","blur","show","hide","before-show","before-hide"],target:null,outsideClickListener:null,resizeListener:null,documentContextMenuListener:null,matchMediaListener:null,pageX:null,pageY:null,container:null,list:null,data:function(){return{id:this.$attrs.id,focused:!1,focusedItemInfo:{index:-1,level:0,parentKey:""},activeItemPath:[],visible:!1,submenuVisible:!1,query:null,queryMatches:!1}},watch:{"$attrs.id":function(t){this.id=t||Et()},activeItemPath:function(t){K(t)?(this.bindOutsideClickListener(),this.bindResizeListener()):this.visible||(this.unbindOutsideClickListener(),this.unbindResizeListener())}},mounted:function(){this.id=this.id||Et(),this.bindMatchMediaListener(),this.global&&this.bindDocumentContextMenuListener()},beforeUnmount:function(){this.unbindResizeListener(),this.unbindOutsideClickListener(),this.unbindDocumentContextMenuListener(),this.unbindMatchMediaListener(),this.container&&this.autoZIndex&&Q.clear(this.container),this.target=null,this.container=null},methods:{getItemProp:function(t,e){return t?It(t[e]):void 0},getItemLabel:function(t){return this.getItemProp(t,"label")},isItemDisabled:function(t){return this.getItemProp(t,"disabled")},isItemVisible:function(t){return!1!==this.getItemProp(t,"visible")},isItemGroup:function(t){return K(this.getItemProp(t,"items"))},isItemSeparator:function(t){return this.getItemProp(t,"separator")},getProccessedItemLabel:function(t){return t?this.getItemLabel(t.item):void 0},isProccessedItemGroup:function(t){return t&&K(t.items)},toggle:function(t){this.visible?this.hide():this.show(t)},show:function(t){this.$emit("before-show"),this.activeItemPath=[],this.focusedItemInfo={index:-1,level:0,parentKey:""},et(this.list),this.pageX=t.pageX,this.pageY=t.pageY,this.visible?this.position():this.visible=!0,t.stopPropagation(),t.preventDefault()},hide:function(){this.$emit("before-hide"),this.visible=!1,this.activeItemPath=[],this.focusedItemInfo={index:-1,level:0,parentKey:""}},onFocus:function(t){this.focused=!0,this.focusedItemInfo=-1!==this.focusedItemInfo.index?this.focusedItemInfo:{index:-1,level:0,parentKey:""},this.$emit("focus",t)},onBlur:function(t){this.focused=!1,this.focusedItemInfo={index:-1,level:0,parentKey:""},this.searchValue="",this.$emit("blur",t)},onKeyDown:function(t){var e=t.metaKey||t.ctrlKey;switch(t.code){case"ArrowDown":this.onArrowDownKey(t);break;case"ArrowUp":this.onArrowUpKey(t);break;case"ArrowLeft":this.onArrowLeftKey(t);break;case"ArrowRight":this.onArrowRightKey(t);break;case"Home":this.onHomeKey(t);break;case"End":this.onEndKey(t);break;case"Space":this.onSpaceKey(t);break;case"Enter":case"NumpadEnter":this.onEnterKey(t);break;case"Escape":this.onEscapeKey(t);break;case"Tab":this.onTabKey(t);break;case"PageDown":case"PageUp":case"Backspace":case"ShiftLeft":case"ShiftRight":break;default:!e&&ot(t.key)&&this.searchItems(t,t.key)}},onItemChange:function(t,e){var n=t.processedItem,o=t.isFocus;if(!D(n)){var i=n.index,r=n.key,s=n.level,l=n.parentKey,a=n.items,c=K(a),u=this.activeItemPath.filter((function(t){return t.parentKey!==l&&t.parentKey!==r}));c&&(u.push(n),this.submenuVisible=!0),this.focusedItemInfo={index:i,level:s,parentKey:l},o&&et(this.list),"hover"===e&&this.queryMatches||(this.activeItemPath=u)}},onItemClick:function(t){var e=t.processedItem,n=this.isProccessedItemGroup(e);if(this.isSelected(e)){var o=e.index,i=e.key,r=e.level,s=e.parentKey;this.activeItemPath=this.activeItemPath.filter((function(t){return i!==t.key&&i.startsWith(t.key)})),this.focusedItemInfo={index:o,level:r,parentKey:s},et(this.list)}else n?this.onItemChange(t):this.hide()},onItemMouseEnter:function(t){this.onItemChange(t,"hover")},onItemMouseMove:function(t){this.focused&&this.changeFocusedItemIndex(t,t.processedItem.index)},onArrowDownKey:function(t){var e=-1!==this.focusedItemInfo.index?this.findNextItemIndex(this.focusedItemInfo.index):this.findFirstFocusedItemIndex();this.changeFocusedItemIndex(t,e),t.preventDefault()},onArrowUpKey:function(t){if(t.altKey){if(-1!==this.focusedItemInfo.index){var e=this.visibleItems[this.focusedItemInfo.index];!this.isProccessedItemGroup(e)&&this.onItemChange({originalEvent:t,processedItem:e})}this.popup&&this.hide(),t.preventDefault()}else{var n=-1!==this.focusedItemInfo.index?this.findPrevItemIndex(this.focusedItemInfo.index):this.findLastFocusedItemIndex();this.changeFocusedItemIndex(t,n),t.preventDefault()}},onArrowLeftKey:function(t){var e=this,n=this.visibleItems[this.focusedItemInfo.index],o=this.activeItemPath.find((function(t){return t.key===n.parentKey}));D(n.parent)||(this.focusedItemInfo={index:-1,parentKey:o?o.parentKey:""},this.searchValue="",this.onArrowDownKey(t)),this.activeItemPath=this.activeItemPath.filter((function(t){return t.parentKey!==e.focusedItemInfo.parentKey})),t.preventDefault()},onArrowRightKey:function(t){var e=this.visibleItems[this.focusedItemInfo.index];this.isProccessedItemGroup(e)&&(this.onItemChange({originalEvent:t,processedItem:e}),this.focusedItemInfo={index:-1,parentKey:e.key},this.searchValue="",this.onArrowDownKey(t)),t.preventDefault()},onHomeKey:function(t){this.changeFocusedItemIndex(t,this.findFirstItemIndex()),t.preventDefault()},onEndKey:function(t){this.changeFocusedItemIndex(t,this.findLastItemIndex()),t.preventDefault()},onEnterKey:function(t){if(-1!==this.focusedItemInfo.index){var e=J(this.list,'li[id="'.concat("".concat(this.focusedItemIdx),'"]')),n=e&&J(e,'[data-pc-section="itemlink"]');n?n.click():e&&e.click();var o=this.visibleItems[this.focusedItemInfo.index];!this.isProccessedItemGroup(o)&&(this.focusedItemInfo.index=this.findFirstFocusedItemIndex())}t.preventDefault()},onSpaceKey:function(t){this.onEnterKey(t)},onEscapeKey:function(t){this.hide(),!this.popup&&(this.focusedItemInfo.index=this.findFirstFocusedItemIndex()),t.preventDefault()},onTabKey:function(t){if(-1!==this.focusedItemInfo.index){var e=this.visibleItems[this.focusedItemInfo.index];!this.isProccessedItemGroup(e)&&this.onItemChange({originalEvent:t,processedItem:e})}this.hide()},onEnter:function(t){st(t,{position:"absolute"}),this.position(),this.autoZIndex&&Q.set("menu",t,this.baseZIndex+this.$primevue.config.zIndex.menu)},onAfterEnter:function(){this.bindOutsideClickListener(),this.bindResizeListener(),this.$emit("show"),et(this.list)},onLeave:function(){this.$emit("hide"),this.container=null},onAfterLeave:function(t){this.autoZIndex&&Q.clear(t),this.unbindOutsideClickListener(),this.unbindResizeListener()},position:function(){var t=this.pageX+1,e=this.pageY+1,n=this.container.offsetParent?this.container.offsetWidth:kt(this.container),o=this.container.offsetParent?this.container.offsetHeight:wt(this.container),i=gt(),r=window.scrollY||document.documentElement.scrollTop||document.body.scrollTop||0,s=window.scrollX||document.documentElement.scrollLeft||document.body.scrollLeft||0;t+n-s>i.width&&(t-=n),e+o-r>i.height&&(e-=o),t-1?n+t+1:t},findPrevItemIndex:function(t){var e=this,n=t>0?pt(this.visibleItems.slice(0,t),(function(t){return e.isValidItem(t)})):-1;return n>-1?n:t},findSelectedItemIndex:function(){var t=this;return this.visibleItems.findIndex((function(e){return t.isValidSelectedItem(e)}))},findFirstFocusedItemIndex:function(){var t=this.findSelectedItemIndex();return t<0?this.findFirstItemIndex():t},findLastFocusedItemIndex:function(){var t=this.findSelectedItemIndex();return t<0?this.findLastItemIndex():t},searchItems:function(t,e){var n=this;this.searchValue=(this.searchValue||"")+e;var o=-1,i=!1;return-1!==(o=-1!==this.focusedItemInfo.index?-1===(o=this.visibleItems.slice(this.focusedItemInfo.index).findIndex((function(t){return n.isItemMatched(t)})))?this.visibleItems.slice(0,this.focusedItemInfo.index).findIndex((function(t){return n.isItemMatched(t)})):o+this.focusedItemInfo.index:this.visibleItems.findIndex((function(t){return n.isItemMatched(t)})))&&(i=!0),-1===o&&-1===this.focusedItemInfo.index&&(o=this.findFirstFocusedItemIndex()),-1!==o&&this.changeFocusedItemIndex(t,o),this.searchTimeout&&clearTimeout(this.searchTimeout),this.searchTimeout=setTimeout((function(){n.searchValue="",n.searchTimeout=null}),500),i},changeFocusedItemIndex:function(t,e){this.focusedItemInfo.index!==e&&(this.focusedItemInfo.index=e,this.scrollInView())},scrollInView:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:-1,e=-1!==t?"".concat(this.id,"_").concat(t):this.focusedItemIdx,n=J(this.list,'li[id="'.concat(e,'"]'));n&&n.scrollIntoView&&n.scrollIntoView({block:"nearest",inline:"start"})},createProcessedItems:function(t){var e=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"",r=[];return t&&t.forEach((function(t,s){var l=(""!==i?i+"_":"")+s,a={item:t,index:s,level:n,key:l,parent:o,parentKey:i};a.items=e.createProcessedItems(t.items,n+1,a,l),r.push(a)})),r},containerRef:function(t){this.container=t},listRef:function(t){this.list=t?t.$el:void 0}},computed:{processedItems:function(){return this.createProcessedItems(this.model||[])},visibleItems:function(){var t=this,e=this.activeItemPath.find((function(e){return e.key===t.focusedItemInfo.parentKey}));return e?e.items:this.processedItems},focusedItemIdx:function(){return-1!==this.focusedItemInfo.index?"".concat(this.id).concat(K(this.focusedItemInfo.parentKey)?"_"+this.focusedItemInfo.parentKey:"","_").concat(this.focusedItemInfo.index):null}},components:{ContextMenuSub:so,Portal:Ye}};fo.render=function(t,e,n,o,i,r){var s=k("ContextMenuSub"),l=k("Portal");return m(),S(l,{appendTo:t.appendTo},{default:L((function(){return[P(V,I({name:"p-contextmenu",onEnter:r.onEnter,onAfterEnter:r.onAfterEnter,onLeave:r.onLeave,onAfterLeave:r.onAfterLeave},t.ptm("transition")),{default:L((function(){return[i.visible?(m(),g("div",I({key:0,ref:r.containerRef,class:t.cx("root")},t.ptmi("root")),[P(s,{ref:r.listRef,id:i.id+"_list",class:z(t.cx("rootList")),role:"menubar",root:!0,tabindex:t.tabindex,"aria-orientation":"vertical","aria-activedescendant":i.focused?r.focusedItemIdx:void 0,menuId:i.id,focusedItemId:i.focused?r.focusedItemIdx:void 0,items:r.processedItems,templates:t.$slots,activeItemPath:i.activeItemPath,"aria-labelledby":t.ariaLabelledby,"aria-label":t.ariaLabel,level:0,visible:i.submenuVisible,pt:t.pt,unstyled:t.unstyled,onFocus:r.onFocus,onBlur:r.onBlur,onKeydown:r.onKeyDown,onItemClick:r.onItemClick,onItemMouseenter:r.onItemMouseEnter,onItemMousemove:r.onItemMouseMove},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)):$("",!0)]})),_:1},16,["onEnter","onAfterEnter","onLeave","onAfterLeave"])]})),_:1},8,["appendTo"])};var bo=St.extend({name:"togglebutton",theme:function(t){var e=t.dt;return"\n.p-togglebutton {\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 color: ".concat(e("togglebutton.color"),";\n background: ").concat(e("togglebutton.background"),";\n border: 1px solid ").concat(e("togglebutton.border.color"),";\n padding: ").concat(e("togglebutton.padding"),";\n font-size: 1rem;\n font-family: inherit;\n font-feature-settings: inherit;\n transition: background ").concat(e("togglebutton.transition.duration"),", color ").concat(e("togglebutton.transition.duration"),", border-color ").concat(e("togglebutton.transition.duration"),",\n outline-color ").concat(e("togglebutton.transition.duration"),", box-shadow ").concat(e("togglebutton.transition.duration"),";\n border-radius: ").concat(e("togglebutton.border.radius"),";\n outline-color: transparent;\n font-weight: ").concat(e("togglebutton.font.weight"),";\n}\n\n.p-togglebutton-content {\n position: relative;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: ").concat(e("togglebutton.gap"),';\n}\n\n.p-togglebutton-label,\n.p-togglebutton-icon {\n position: relative;\n transition: none;\n}\n\n.p-togglebutton::before {\n content: "";\n background: transparent;\n transition: background ').concat(e("togglebutton.transition.duration"),", color ").concat(e("togglebutton.transition.duration"),", border-color ").concat(e("togglebutton.transition.duration"),",\n outline-color ").concat(e("togglebutton.transition.duration"),", box-shadow ").concat(e("togglebutton.transition.duration"),";\n position: absolute;\n inset-inline-start: ").concat(e("togglebutton.content.left"),";\n inset-block-start: ").concat(e("togglebutton.content.top"),";\n width: calc(100% - calc(2 * ").concat(e("togglebutton.content.left"),"));\n height: calc(100% - calc(2 * ").concat(e("togglebutton.content.top"),"));\n border-radius: ").concat(e("togglebutton.border.radius"),";\n}\n\n.p-togglebutton.p-togglebutton-checked::before {\n background: ").concat(e("togglebutton.content.checked.background"),";\n box-shadow: ").concat(e("togglebutton.content.checked.shadow"),";\n}\n\n.p-togglebutton:not(:disabled):not(.p-togglebutton-checked):hover {\n background: ").concat(e("togglebutton.hover.background"),";\n color: ").concat(e("togglebutton.hover.color"),";\n}\n\n.p-togglebutton.p-togglebutton-checked {\n background: ").concat(e("togglebutton.checked.background"),";\n border-color: ").concat(e("togglebutton.checked.border.color"),";\n color: ").concat(e("togglebutton.checked.color"),";\n}\n\n.p-togglebutton:focus-visible {\n box-shadow: ").concat(e("togglebutton.focus.ring.shadow"),";\n outline: ").concat(e("togglebutton.focus.ring.width")," ").concat(e("togglebutton.focus.ring.style")," ").concat(e("togglebutton.focus.ring.color"),";\n outline-offset: ").concat(e("togglebutton.focus.ring.offset"),";\n}\n\n.p-togglebutton.p-invalid {\n border-color: ").concat(e("togglebutton.invalid.border.color"),";\n}\n\n.p-togglebutton:disabled {\n opacity: 1;\n cursor: default;\n background: ").concat(e("togglebutton.disabled.background"),";\n border-color: ").concat(e("togglebutton.disabled.border.color"),";\n color: ").concat(e("togglebutton.disabled.color"),";\n}\n\n.p-togglebutton-icon {\n color: ").concat(e("togglebutton.icon.color"),";\n}\n\n.p-togglebutton:not(:disabled):not(.p-togglebutton-checked):hover .p-togglebutton-icon {\n color: ").concat(e("togglebutton.icon.hover.color"),";\n}\n\n.p-togglebutton.p-togglebutton-checked .p-togglebutton-icon {\n color: ").concat(e("togglebutton.icon.checked.color"),";\n}\n\n.p-togglebutton:disabled .p-togglebutton-icon {\n color: ").concat(e("togglebutton.icon.disabled.color"),";\n}\n\n.p-togglebutton-sm {\n padding: ").concat(e("togglebutton.sm.padding"),";\n font-size: ").concat(e("togglebutton.sm.font.size"),";\n}\n\n.p-togglebutton-lg {\n padding: ").concat(e("togglebutton.lg.padding"),";\n font-size: ").concat(e("togglebutton.lg.font.size"),";\n}\n")},classes:{root:function(t){var e=t.instance,n=t.props;return["p-togglebutton p-component",{"p-togglebutton-checked":e.active,"p-invalid":e.$invalid,"p-togglebutton-sm p-inputfield-sm":"small"===n.size,"p-togglebutton-lg p-inputfield-lg":"large"===n.size}]},content:"p-togglebutton-content",icon:"p-togglebutton-icon",label:"p-togglebutton-label"}}),mo={name:"ToggleButton",extends:{name:"BaseToggleButton",extends:Bt,props:{onIcon:String,offIcon:String,onLabel:{type:String,default:"Yes"},offLabel:{type:String,default:"No"},iconPos:{type:String,default:"left"},readonly:{type:Boolean,default:!1},tabindex:{type:Number,default:null},ariaLabelledby:{type:String,default:null},ariaLabel:{type:String,default:null},size:{type:String,default:null}},style:bo,provide:function(){return{$pcToggleButton:this,$parentInstance:this}}},inheritAttrs:!1,emits:["change"],methods:{getPTOptions:function(t){return("root"===t?this.ptmi:this.ptm)(t,{context:{active:this.active,disabled:this.disabled}})},onChange:function(t){this.disabled||this.readonly||(this.writeValue(!this.d_value,t),this.$emit("change",t))},onBlur:function(t){var e,n;null===(e=(n=this.formField).onBlur)||void 0===e||e.call(n,t)}},computed:{active:function(){return!0===this.d_value},hasLabel:function(){return K(this.onLabel)&&K(this.offLabel)},label:function(){return this.hasLabel?this.d_value?this.onLabel:this.offLabel:" "}},directives:{ripple:De}},go=["tabindex","disabled","aria-pressed","aria-labelledby","data-p-checked","data-p-disabled"];mo.render=function(t,e,n,o,i,r){var s=w("ripple");return O((m(),g("button",I({type:"button",class:t.cx("root"),tabindex:t.tabindex,disabled:t.disabled,"aria-pressed":t.d_value,onClick:e[0]||(e[0]=function(){return r.onChange&&r.onChange.apply(r,arguments)}),onBlur:e[1]||(e[1]=function(){return r.onBlur&&r.onBlur.apply(r,arguments)})},r.getPTOptions("root"),{"aria-labelledby":t.ariaLabelledby,"data-p-checked":r.active,"data-p-disabled":t.disabled}),[C("span",I({class:t.cx("content")},r.getPTOptions("content")),[v(t.$slots,"default",{},(function(){return[v(t.$slots,"icon",{value:t.d_value,class:z(t.cx("icon"))},(function(){return[t.onIcon||t.offIcon?(m(),g("span",I({key:0,class:[t.cx("icon"),t.d_value?t.onIcon:t.offIcon]},r.getPTOptions("icon")),null,16)):$("",!0)]})),C("span",I({class:t.cx("label")},r.getPTOptions("label")),x(r.label),17)]}))],16)],16,go)),[[s]])};var vo=St.extend({name:"selectbutton",theme:function(t){var e=t.dt;return"\n.p-selectbutton {\n display: inline-flex;\n user-select: none;\n vertical-align: bottom;\n outline-color: transparent;\n border-radius: ".concat(e("selectbutton.border.radius"),";\n}\n\n.p-selectbutton .p-togglebutton {\n border-radius: 0;\n border-width: 1px 1px 1px 0;\n}\n\n.p-selectbutton .p-togglebutton:focus-visible {\n position: relative;\n z-index: 1;\n}\n\n.p-selectbutton .p-togglebutton:first-child {\n border-inline-start-width: 1px;\n border-start-start-radius: ").concat(e("selectbutton.border.radius"),";\n border-end-start-radius: ").concat(e("selectbutton.border.radius"),";\n}\n\n.p-selectbutton .p-togglebutton:last-child {\n border-start-end-radius: ").concat(e("selectbutton.border.radius"),";\n border-end-end-radius: ").concat(e("selectbutton.border.radius"),";\n}\n\n.p-selectbutton.p-invalid {\n outline: 1px solid ").concat(e("selectbutton.invalid.border.color"),";\n outline-offset: 0;\n}\n")},classes:{root:function(t){return["p-selectbutton p-component",{"p-invalid":t.instance.$invalid}]}}});function yo(t){return function(t){if(Array.isArray(t))return Io(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||xo(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function xo(t,e){if(t){if("string"==typeof t)return Io(t,e);var n={}.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Io(t,e):void 0}}function Io(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,o=Array(e);n=t.length?{done:!0}:{done:!1,value:t[o++]}},e:function(t){throw t},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var r,s=!0,l=!1;return{s:function(){n=n.call(t)},n:function(){var t=n.next();return s=t.done,t},e:function(t){l=!0,r=t},f:function(){try{s||null==n.return||n.return()}finally{if(l)throw r}}}}(this.d_value);try{for(i.s();!(o=i.n()).done;){var r=o.value;if(dt(r,n,this.equalityKey)){e=!0;break}}}catch(s){i.e(s)}finally{i.f()}}}else e=dt(this.d_value,n,this.equalityKey);return e}},computed:{equalityKey:function(){return this.optionValue?null:this.dataKey}},directives:{ripple:De},components:{ToggleButton:mo}},wo=["aria-labelledby"];ko.render=function(t,e,n,o,i,r){var s=k("ToggleButton");return m(),g("div",I({class:t.cx("root"),role:"group","aria-labelledby":t.ariaLabelledby},t.ptmi("root")),[(m(!0),g(_,null,M(t.options,(function(e,n){return m(),S(s,{key:r.getOptionRenderKey(e),modelValue:r.isSelected(e),onLabel:r.getOptionLabel(e),offLabel:r.getOptionLabel(e),disabled:t.disabled||r.isOptionDisabled(e),unstyled:t.unstyled,size:t.size,readonly:!t.allowEmpty&&r.isSelected(e),onChange:function(t){return r.onOptionSelect(t,e,n)},pt:t.ptm("pcToggleButton")},A({_:2},[t.$slots.option?{name:"default",fn:L((function(){return[v(t.$slots,"option",{option:e,index:n},(function(){return[C("span",I({ref_for:!0},t.ptm("pcToggleButton").label),x(r.getOptionLabel(e)),17)]}))]})),key:"0"}:void 0]),1032,["modelValue","onLabel","offLabel","disabled","unstyled","size","readonly","onChange","pt"])})),128))],16,wo)};export{On as T,pn as a,jn as b,Qn as c,re as d,se as e,Ne as f,We as g,Ce as h,Ue as i,ko as j,oo as k,fo as l,qt as m,Ge as s}; diff --git a/comfyui-easy-use/web_version/v2/assets/vue-Cu3MA6TM.js b/comfyui-easy-use/web_version/v2/assets/vue-Cu3MA6TM.js new file mode 100644 index 0000000000000000000000000000000000000000..a2023bb55b04b119bf1476179734efa332163f34 --- /dev/null +++ b/comfyui-easy-use/web_version/v2/assets/vue-Cu3MA6TM.js @@ -0,0 +1,23 @@ +/** +* @vue/shared v3.5.17 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/ +/*! #__NO_SIDE_EFFECTS__ */ +function e(e){const t=Object.create(null);for(const n of e.split(","))t[n]=1;return e=>e in t}const t={},n=[],s=()=>{},r=()=>!1,o=e=>111===e.charCodeAt(0)&&110===e.charCodeAt(1)&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),i=e=>e.startsWith("onUpdate:"),l=Object.assign,c=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},a=Object.prototype.hasOwnProperty,u=(e,t)=>a.call(e,t),f=Array.isArray,p=e=>"[object Map]"===x(e),d=e=>"[object Set]"===x(e),h=e=>"[object Date]"===x(e),v=e=>"function"==typeof e,g=e=>"string"==typeof e,m=e=>"symbol"==typeof e,_=e=>null!==e&&"object"==typeof e,y=e=>(_(e)||v(e))&&v(e.then)&&v(e.catch),b=Object.prototype.toString,x=e=>b.call(e),S=e=>x(e).slice(8,-1),C=e=>"[object Object]"===x(e),w=e=>g(e)&&"NaN"!==e&&"-"!==e[0]&&""+parseInt(e,10)===e,k=e(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),A=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},T=/-(\w)/g,E=A((e=>e.replace(T,((e,t)=>t?t.toUpperCase():"")))),O=/\B([A-Z])/g,F=A((e=>e.replace(O,"-$1").toLowerCase())),L=A((e=>e.charAt(0).toUpperCase()+e.slice(1))),M=A((e=>e?`on${L(e)}`:"")),j=(e,t)=>!Object.is(e,t),P=(e,...t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:s,value:n})},V=e=>{const t=parseFloat(e);return isNaN(t)?e:t},R=e=>{const t=g(e)?Number(e):NaN;return isNaN(t)?e:t};let $;const I=()=>$||($="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:"undefined"!=typeof global?global:{});function N(e){if(f(e)){const t={};for(let n=0;n{if(e){const n=e.split(B);n.length>1&&(t[n[0].trim()]=n[1].trim())}})),t}function K(e){let t="";if(g(e))t=e;else if(f(e))for(let n=0;nJ(e,t)))}const X=e=>!(!e||!0!==e.__v_isRef),Q=e=>g(e)?e:null==e?"":f(e)||_(e)&&(e.toString===b||!v(e.toString))?X(e)?Q(e.value):JSON.stringify(e,Y,2):String(e),Y=(e,t)=>X(t)?Y(e,t.value):p(t)?{[`Map(${t.size})`]:[...t.entries()].reduce(((e,[t,n],s)=>(e[ee(t,s)+" =>"]=n,e)),{})}:d(t)?{[`Set(${t.size})`]:[...t.values()].map((e=>ee(e)))}:m(t)?ee(t):!_(t)||f(t)||C(t)?t:String(t),ee=(e,t="")=>{var n;return m(e)?`Symbol(${null!=(n=e.description)?n:t})`:e}; +/** +* @vue/reactivity v3.5.17 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/ +let te,ne;class se{constructor(e=!1){this.detached=e,this._active=!0,this._on=0,this.effects=[],this.cleanups=[],this._isPaused=!1,this.parent=te,!e&&te&&(this.index=(te.scopes||(te.scopes=[])).push(this)-1)}get active(){return this._active}pause(){if(this._active){let e,t;if(this._isPaused=!0,this.scopes)for(e=0,t=this.scopes.length;e0&&0==--this._on&&(te=this.prevScope,this.prevScope=void 0)}stop(e){if(this._active){let t,n;for(this._active=!1,t=0,n=this.effects.length;t0)return;if(ue){let e=ue;for(ue=void 0;e;){const t=e.next;e.next=void 0,e.flags&=-9,e=t}}let e;for(;ae;){let n=ae;for(ae=void 0;n;){const s=n.next;if(n.next=void 0,n.flags&=-9,1&n.flags)try{n.trigger()}catch(t){e||(e=t)}n=s}}if(e)throw e}function ve(e){for(let t=e.deps;t;t=t.nextDep)t.version=-1,t.prevActiveLink=t.dep.activeLink,t.dep.activeLink=t}function ge(e){let t,n=e.depsTail,s=n;for(;s;){const e=s.prevDep;-1===s.version?(s===n&&(n=e),ye(s),be(s)):t=s,s.dep.activeLink=s.prevActiveLink,s.prevActiveLink=void 0,s=e}e.deps=t,e.depsTail=n}function me(e){for(let t=e.deps;t;t=t.nextDep)if(t.dep.version!==t.version||t.dep.computed&&(_e(t.dep.computed)||t.dep.version!==t.version))return!0;return!!e._dirty}function _e(e){if(4&e.flags&&!(16&e.flags))return;if(e.flags&=-17,e.globalVersion===Ae)return;if(e.globalVersion=Ae,!e.isSSR&&128&e.flags&&(!e.deps&&!e._dirty||!me(e)))return;e.flags|=2;const t=e.dep,n=ne,s=xe;ne=e,xe=!0;try{ve(e);const n=e.fn(e._value);(0===t.version||j(n,e._value))&&(e.flags|=128,e._value=n,t.version++)}catch(r){throw t.version++,r}finally{ne=n,xe=s,ge(e),e.flags&=-3}}function ye(e,t=!1){const{dep:n,prevSub:s,nextSub:r}=e;if(s&&(s.nextSub=r,e.prevSub=void 0),r&&(r.prevSub=s,e.nextSub=void 0),n.subs===e&&(n.subs=s,!s&&n.computed)){n.computed.flags&=-5;for(let e=n.computed.deps;e;e=e.nextDep)ye(e,!0)}t||--n.sc||!n.map||n.map.delete(n.key)}function be(e){const{prevDep:t,nextDep:n}=e;t&&(t.nextDep=n,e.prevDep=void 0),n&&(n.prevDep=t,e.nextDep=void 0)}let xe=!0;const Se=[];function Ce(){Se.push(xe),xe=!1}function we(){const e=Se.pop();xe=void 0===e||e}function ke(e){const{cleanup:t}=e;if(e.cleanup=void 0,t){const e=ne;ne=void 0;try{t()}finally{ne=e}}}let Ae=0;class Te{constructor(e,t){this.sub=e,this.dep=t,this.version=t.version,this.nextDep=this.prevDep=this.nextSub=this.prevSub=this.prevActiveLink=void 0}}class Ee{constructor(e){this.computed=e,this.version=0,this.activeLink=void 0,this.subs=void 0,this.map=void 0,this.key=void 0,this.sc=0,this.__v_skip=!0}track(e){if(!ne||!xe||ne===this.computed)return;let t=this.activeLink;if(void 0===t||t.sub!==ne)t=this.activeLink=new Te(ne,this),ne.deps?(t.prevDep=ne.depsTail,ne.depsTail.nextDep=t,ne.depsTail=t):ne.deps=ne.depsTail=t,Oe(t);else if(-1===t.version&&(t.version=this.version,t.nextDep)){const e=t.nextDep;e.prevDep=t.prevDep,t.prevDep&&(t.prevDep.nextDep=e),t.prevDep=ne.depsTail,t.nextDep=void 0,ne.depsTail.nextDep=t,ne.depsTail=t,ne.deps===t&&(ne.deps=e)}return t}trigger(e){this.version++,Ae++,this.notify(e)}notify(e){de();try{0;for(let e=this.subs;e;e=e.prevSub)e.sub.notify()&&e.sub.dep.notify()}finally{he()}}}function Oe(e){if(e.dep.sc++,4&e.sub.flags){const t=e.dep.computed;if(t&&!e.dep.subs){t.flags|=20;for(let e=t.deps;e;e=e.nextDep)Oe(e)}const n=e.dep.subs;n!==e&&(e.prevSub=n,n&&(n.nextSub=e)),e.dep.subs=e}}const Fe=new WeakMap,Le=Symbol(""),Me=Symbol(""),je=Symbol("");function Pe(e,t,n){if(xe&&ne){let t=Fe.get(e);t||Fe.set(e,t=new Map);let s=t.get(n);s||(t.set(n,s=new Ee),s.map=t,s.key=n),s.track()}}function De(e,t,n,s,r,o){const i=Fe.get(e);if(!i)return void Ae++;const l=e=>{e&&e.trigger()};if(de(),"clear"===t)i.forEach(l);else{const r=f(e),o=r&&w(n);if(r&&"length"===n){const e=Number(s);i.forEach(((t,n)=>{("length"===n||n===je||!m(n)&&n>=e)&&l(t)}))}else switch((void 0!==n||i.has(void 0))&&l(i.get(n)),o&&l(i.get(je)),t){case"add":r?o&&l(i.get("length")):(l(i.get(Le)),p(e)&&l(i.get(Me)));break;case"delete":r||(l(i.get(Le)),p(e)&&l(i.get(Me)));break;case"set":p(e)&&l(i.get(Le))}}he()}function Ve(e){const t=yt(e);return t===e?t:(Pe(t,0,je),mt(e)?t:t.map(xt))}function Re(e){return Pe(e=yt(e),0,je),e}const $e={__proto__:null,[Symbol.iterator](){return Ie(this,Symbol.iterator,xt)},concat(...e){return Ve(this).concat(...e.map((e=>f(e)?Ve(e):e)))},entries(){return Ie(this,"entries",(e=>(e[1]=xt(e[1]),e)))},every(e,t){return Ue(this,"every",e,t,void 0,arguments)},filter(e,t){return Ue(this,"filter",e,t,(e=>e.map(xt)),arguments)},find(e,t){return Ue(this,"find",e,t,xt,arguments)},findIndex(e,t){return Ue(this,"findIndex",e,t,void 0,arguments)},findLast(e,t){return Ue(this,"findLast",e,t,xt,arguments)},findLastIndex(e,t){return Ue(this,"findLastIndex",e,t,void 0,arguments)},forEach(e,t){return Ue(this,"forEach",e,t,void 0,arguments)},includes(...e){return We(this,"includes",e)},indexOf(...e){return We(this,"indexOf",e)},join(e){return Ve(this).join(e)},lastIndexOf(...e){return We(this,"lastIndexOf",e)},map(e,t){return Ue(this,"map",e,t,void 0,arguments)},pop(){return He(this,"pop")},push(...e){return He(this,"push",e)},reduce(e,...t){return Be(this,"reduce",e,t)},reduceRight(e,...t){return Be(this,"reduceRight",e,t)},shift(){return He(this,"shift")},some(e,t){return Ue(this,"some",e,t,void 0,arguments)},splice(...e){return He(this,"splice",e)},toReversed(){return Ve(this).toReversed()},toSorted(e){return Ve(this).toSorted(e)},toSpliced(...e){return Ve(this).toSpliced(...e)},unshift(...e){return He(this,"unshift",e)},values(){return Ie(this,"values",xt)}};function Ie(e,t,n){const s=Re(e),r=s[t]();return s===e||mt(e)||(r._next=r.next,r.next=()=>{const e=r._next();return e.value&&(e.value=n(e.value)),e}),r}const Ne=Array.prototype;function Ue(e,t,n,s,r,o){const i=Re(e),l=i!==e&&!mt(e),c=i[t];if(c!==Ne[t]){const t=c.apply(e,o);return l?xt(t):t}let a=n;i!==e&&(l?a=function(t,s){return n.call(this,xt(t),s,e)}:n.length>2&&(a=function(t,s){return n.call(this,t,s,e)}));const u=c.call(i,a,s);return l&&r?r(u):u}function Be(e,t,n,s){const r=Re(e);let o=n;return r!==e&&(mt(e)?n.length>3&&(o=function(t,s,r){return n.call(this,t,s,r,e)}):o=function(t,s,r){return n.call(this,t,xt(s),r,e)}),r[t](o,...s)}function We(e,t,n){const s=yt(e);Pe(s,0,je);const r=s[t](...n);return-1!==r&&!1!==r||!_t(n[0])?r:(n[0]=yt(n[0]),s[t](...n))}function He(e,t,n=[]){Ce(),de();const s=yt(e)[t].apply(e,n);return he(),we(),s}const Ke=e("__proto__,__v_isRef,__isVue"),qe=new Set(Object.getOwnPropertyNames(Symbol).filter((e=>"arguments"!==e&&"caller"!==e)).map((e=>Symbol[e])).filter(m));function ze(e){m(e)||(e=String(e));const t=yt(this);return Pe(t,0,e),t.hasOwnProperty(e)}class Ge{constructor(e=!1,t=!1){this._isReadonly=e,this._isShallow=t}get(e,t,n){if("__v_skip"===t)return e.__v_skip;const s=this._isReadonly,r=this._isShallow;if("__v_isReactive"===t)return!s;if("__v_isReadonly"===t)return s;if("__v_isShallow"===t)return r;if("__v_raw"===t)return n===(s?r?ft:ut:r?at:ct).get(e)||Object.getPrototypeOf(e)===Object.getPrototypeOf(n)?e:void 0;const o=f(e);if(!s){let e;if(o&&(e=$e[t]))return e;if("hasOwnProperty"===t)return ze}const i=Reflect.get(e,t,Ct(e)?e:n);return(m(t)?qe.has(t):Ke(t))?i:(s||Pe(e,0,t),r?i:Ct(i)?o&&w(t)?i:i.value:_(i)?s?dt(i):pt(i):i)}}class Je extends Ge{constructor(e=!1){super(!1,e)}set(e,t,n,s){let r=e[t];if(!this._isShallow){const t=gt(r);if(mt(n)||gt(n)||(r=yt(r),n=yt(n)),!f(e)&&Ct(r)&&!Ct(n))return!t&&(r.value=n,!0)}const o=f(e)&&w(t)?Number(t)e,tt=e=>Reflect.getPrototypeOf(e);function nt(e){return function(...t){return"delete"!==e&&("clear"===e?void 0:this)}}function st(e,t){const n={get(n){const s=this.__v_raw,r=yt(s),o=yt(n);e||(j(n,o)&&Pe(r,0,n),Pe(r,0,o));const{has:i}=tt(r),l=t?et:e?St:xt;return i.call(r,n)?l(s.get(n)):i.call(r,o)?l(s.get(o)):void(s!==r&&s.get(n))},get size(){const t=this.__v_raw;return!e&&Pe(yt(t),0,Le),Reflect.get(t,"size",t)},has(t){const n=this.__v_raw,s=yt(n),r=yt(t);return e||(j(t,r)&&Pe(s,0,t),Pe(s,0,r)),t===r?n.has(t):n.has(t)||n.has(r)},forEach(n,s){const r=this,o=r.__v_raw,i=yt(o),l=t?et:e?St:xt;return!e&&Pe(i,0,Le),o.forEach(((e,t)=>n.call(s,l(e),l(t),r)))}};l(n,e?{add:nt("add"),set:nt("set"),delete:nt("delete"),clear:nt("clear")}:{add(e){t||mt(e)||gt(e)||(e=yt(e));const n=yt(this);return tt(n).has.call(n,e)||(n.add(e),De(n,"add",e,e)),this},set(e,n){t||mt(n)||gt(n)||(n=yt(n));const s=yt(this),{has:r,get:o}=tt(s);let i=r.call(s,e);i||(e=yt(e),i=r.call(s,e));const l=o.call(s,e);return s.set(e,n),i?j(n,l)&&De(s,"set",e,n):De(s,"add",e,n),this},delete(e){const t=yt(this),{has:n,get:s}=tt(t);let r=n.call(t,e);r||(e=yt(e),r=n.call(t,e)),s&&s.call(t,e);const o=t.delete(e);return r&&De(t,"delete",e,void 0),o},clear(){const e=yt(this),t=0!==e.size,n=e.clear();return t&&De(e,"clear",void 0,void 0),n}});return["keys","values","entries",Symbol.iterator].forEach((s=>{n[s]=function(e,t,n){return function(...s){const r=this.__v_raw,o=yt(r),i=p(o),l="entries"===e||e===Symbol.iterator&&i,c="keys"===e&&i,a=r[e](...s),u=n?et:t?St:xt;return!t&&Pe(o,0,c?Me:Le),{next(){const{value:e,done:t}=a.next();return t?{value:e,done:t}:{value:l?[u(e[0]),u(e[1])]:u(e),done:t}},[Symbol.iterator](){return this}}}}(s,e,t)})),n}function rt(e,t){const n=st(e,t);return(t,s,r)=>"__v_isReactive"===s?!e:"__v_isReadonly"===s?e:"__v_raw"===s?t:Reflect.get(u(n,s)&&s in t?n:t,s,r)}const ot={get:rt(!1,!1)},it={get:rt(!1,!0)},lt={get:rt(!0,!1)},ct=new WeakMap,at=new WeakMap,ut=new WeakMap,ft=new WeakMap;function pt(e){return gt(e)?e:ht(e,!1,Xe,ot,ct)}function dt(e){return ht(e,!0,Qe,lt,ut)}function ht(e,t,n,s,r){if(!_(e))return e;if(e.__v_raw&&(!t||!e.__v_isReactive))return e;const o=(i=e).__v_skip||!Object.isExtensible(i)?0:function(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}(S(i));var i;if(0===o)return e;const l=r.get(e);if(l)return l;const c=new Proxy(e,2===o?s:n);return r.set(e,c),c}function vt(e){return gt(e)?vt(e.__v_raw):!(!e||!e.__v_isReactive)}function gt(e){return!(!e||!e.__v_isReadonly)}function mt(e){return!(!e||!e.__v_isShallow)}function _t(e){return!!e&&!!e.__v_raw}function yt(e){const t=e&&e.__v_raw;return t?yt(t):e}function bt(e){return!u(e,"__v_skip")&&Object.isExtensible(e)&&D(e,"__v_skip",!0),e}const xt=e=>_(e)?pt(e):e,St=e=>_(e)?dt(e):e;function Ct(e){return!!e&&!0===e.__v_isRef}function wt(e){return At(e,!1)}function kt(e){return At(e,!0)}function At(e,t){return Ct(e)?e:new Tt(e,t)}class Tt{constructor(e,t){this.dep=new Ee,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=t?e:yt(e),this._value=t?e:xt(e),this.__v_isShallow=t}get value(){return this.dep.track(),this._value}set value(e){const t=this._rawValue,n=this.__v_isShallow||mt(e)||gt(e);e=n?e:yt(e),j(e,t)&&(this._rawValue=e,this._value=n?e:xt(e),this.dep.trigger())}}function Et(e){return Ct(e)?e.value:e}function Ot(e){return v(e)?e():Et(e)}const Ft={get:(e,t,n)=>"__v_raw"===t?e:Et(Reflect.get(e,t,n)),set:(e,t,n,s)=>{const r=e[t];return Ct(r)&&!Ct(n)?(r.value=n,!0):Reflect.set(e,t,n,s)}};function Lt(e){return vt(e)?e:new Proxy(e,Ft)}function Mt(e){const t=f(e)?new Array(e.length):{};for(const n in e)t[n]=Vt(e,n);return t}class jt{constructor(e,t,n){this._object=e,this._key=t,this._defaultValue=n,this.__v_isRef=!0,this._value=void 0}get value(){const e=this._object[this._key];return this._value=void 0===e?this._defaultValue:e}set value(e){this._object[this._key]=e}get dep(){return function(e,t){const n=Fe.get(e);return n&&n.get(t)}(yt(this._object),this._key)}}class Pt{constructor(e){this._getter=e,this.__v_isRef=!0,this.__v_isReadonly=!0,this._value=void 0}get value(){return this._value=this._getter()}}function Dt(e,t,n){return Ct(e)?e:v(e)?new Pt(e):_(e)&&arguments.length>1?Vt(e,t,n):wt(e)}function Vt(e,t,n){const s=e[t];return Ct(s)?s:new jt(e,t,n)}class Rt{constructor(e,t,n){this.fn=e,this.setter=t,this._value=void 0,this.dep=new Ee(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=Ae-1,this.next=void 0,this.effect=this,this.__v_isReadonly=!t,this.isSSR=n}notify(){if(this.flags|=16,!(8&this.flags)&&ne!==this)return pe(this,!0),!0}get value(){const e=this.dep.track();return _e(this),e&&(e.version=this.dep.version),this._value}set value(e){this.setter&&this.setter(e)}}const $t={},It=new WeakMap;let Nt;function Ut(e,n,r=t){const{immediate:o,deep:i,once:l,scheduler:a,augmentJob:u,call:p}=r,d=e=>i?e:mt(e)||!1===i||0===i?Bt(e,1):Bt(e);let h,g,m,_,y=!1,b=!1;if(Ct(e)?(g=()=>e.value,y=mt(e)):vt(e)?(g=()=>d(e),y=!0):f(e)?(b=!0,y=e.some((e=>vt(e)||mt(e))),g=()=>e.map((e=>Ct(e)?e.value:vt(e)?d(e):v(e)?p?p(e,2):e():void 0))):g=v(e)?n?p?()=>p(e,2):e:()=>{if(m){Ce();try{m()}finally{we()}}const t=Nt;Nt=h;try{return p?p(e,3,[_]):e(_)}finally{Nt=t}}:s,n&&i){const e=g,t=!0===i?1/0:i;g=()=>Bt(e(),t)}const x=oe(),S=()=>{h.stop(),x&&x.active&&c(x.effects,h)};if(l&&n){const e=n;n=(...t)=>{e(...t),S()}}let C=b?new Array(e.length).fill($t):$t;const w=e=>{if(1&h.flags&&(h.dirty||e))if(n){const e=h.run();if(i||y||(b?e.some(((e,t)=>j(e,C[t]))):j(e,C))){m&&m();const t=Nt;Nt=h;try{const t=[e,C===$t?void 0:b&&C[0]===$t?[]:C,_];C=e,p?p(n,3,t):n(...t)}finally{Nt=t}}}else h.run()};return u&&u(w),h=new ce(g),h.scheduler=a?()=>a(w,!1):w,_=e=>function(e,t=!1,n=Nt){if(n){let t=It.get(n);t||It.set(n,t=[]),t.push(e)}}(e,!1,h),m=h.onStop=()=>{const e=It.get(h);if(e){if(p)p(e,4);else for(const t of e)t();It.delete(h)}},n?o?w(!0):C=h.run():a?a(w.bind(null,!0),!0):h.run(),S.pause=h.pause.bind(h),S.resume=h.resume.bind(h),S.stop=S,S}function Bt(e,t=1/0,n){if(t<=0||!_(e)||e.__v_skip)return e;if((n=n||new Set).has(e))return e;if(n.add(e),t--,Ct(e))Bt(e.value,t,n);else if(f(e))for(let s=0;s{Bt(e,t,n)}));else if(C(e)){for(const s in e)Bt(e[s],t,n);for(const s of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,s)&&Bt(e[s],t,n)}return e} +/** +* @vue/runtime-core v3.5.17 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/function Wt(e,t,n,s){try{return s?e(...s):e()}catch(r){Kt(r,t,n)}}function Ht(e,t,n,s){if(v(e)){const r=Wt(e,t,n,s);return r&&y(r)&&r.catch((e=>{Kt(e,t,n)})),r}if(f(e)){const r=[];for(let o=0;o=rn(n)?qt.push(e):qt.splice(function(e){let t=zt+1,n=qt.length;for(;t>>1,r=qt[s],o=rn(r);orn(e)-rn(t)));if(Gt.length=0,Jt)return void Jt.push(...e);for(Jt=e,Zt=0;Ztnull==e.id?2&e.flags?-1:1/0:e.id;function on(e){try{for(zt=0;zt{s._d&&Mr(-1);const r=an(t);let o;try{o=e(...n)}finally{an(r),s._d&&Mr(1)}return o};return s._n=!0,s._c=!0,s._d=!0,s}function fn(e,n){if(null===ln)return e;const s=uo(ln),r=e.dirs||(e.dirs=[]);for(let o=0;oe.__isTeleport,vn=e=>e&&(e.disabled||""===e.disabled),gn=e=>e&&(e.defer||""===e.defer),mn=e=>"undefined"!=typeof SVGElement&&e instanceof SVGElement,_n=e=>"function"==typeof MathMLElement&&e instanceof MathMLElement,yn=(e,t)=>{const n=e&&e.to;if(g(n)){if(t){return t(n)}return null}return n},bn={name:"Teleport",__isTeleport:!0,process(e,t,n,s,r,o,i,l,c,a){const{mc:u,pc:f,pbc:p,o:{insert:d,querySelector:h,createText:v,createComment:g}}=a,m=vn(t.props);let{shapeFlag:_,children:y,dynamicChildren:b}=t;if(null==e){const e=t.el=v(""),a=t.anchor=v("");d(e,n,s),d(a,n,s);const f=(e,t)=>{16&_&&(r&&r.isCE&&(r.ce._teleportTarget=e),u(y,e,t,r,o,i,l,c))},p=()=>{const e=t.target=yn(t.props,h),n=wn(e,t,v,d);e&&("svg"!==i&&mn(e)?i="svg":"mathml"!==i&&_n(e)&&(i="mathml"),m||(f(e,n),Cn(t,!1)))};m&&(f(n,a),Cn(t,!0)),gn(t.props)?(t.el.__isMounted=!1,tr((()=>{p(),delete t.el.__isMounted}),o)):p()}else{if(gn(t.props)&&!1===e.el.__isMounted)return void tr((()=>{bn.process(e,t,n,s,r,o,i,l,c,a)}),o);t.el=e.el,t.targetStart=e.targetStart;const u=t.anchor=e.anchor,d=t.target=e.target,v=t.targetAnchor=e.targetAnchor,g=vn(e.props),_=g?n:d,y=g?u:v;if("svg"===i||mn(d)?i="svg":("mathml"===i||_n(d))&&(i="mathml"),b?(p(e.dynamicChildren,b,_,r,o,i,l),or(e,t,!0)):c||f(e,t,_,y,r,o,i,l,!1),m)g?t.props&&e.props&&t.props.to!==e.props.to&&(t.props.to=e.props.to):xn(t,n,u,a,1);else if((t.props&&t.props.to)!==(e.props&&e.props.to)){const e=t.target=yn(t.props,h);e&&xn(t,e,null,a,0)}else g&&xn(t,d,v,a,1);Cn(t,m)}},remove(e,t,n,{um:s,o:{remove:r}},o){const{shapeFlag:i,children:l,anchor:c,targetStart:a,targetAnchor:u,target:f,props:p}=e;if(f&&(r(a),r(u)),o&&r(c),16&i){const e=o||!vn(p);for(let r=0;r{const t=e.subTree;return t.component?On(t.component):t};function Fn(e){let t=e[0];if(e.length>1)for(const n of e)if(n.type!==Ar){t=n;break}return t}const Ln={name:"BaseTransition",props:En,setup(e,{slots:t}){const n=Yr(),s=function(){const e={isMounted:!1,isLeaving:!1,isUnmounting:!1,leavingVNodes:new Map};return Jn((()=>{e.isMounted=!0})),Qn((()=>{e.isUnmounting=!0})),e}();return()=>{const r=t.default&&Rn(t.default(),!0);if(!r||!r.length)return;const o=Fn(r),i=yt(e),{mode:l}=i;if(s.isLeaving)return Pn(o);const c=Dn(o);if(!c)return Pn(o);let a=jn(c,i,s,n,(e=>a=e));c.type!==Ar&&Vn(c,a);let u=n.subTree&&Dn(n.subTree);if(u&&u.type!==Ar&&!Rr(c,u)&&On(n).type!==Ar){let e=jn(u,i,s,n);if(Vn(u,e),"out-in"===l&&c.type!==Ar)return s.isLeaving=!0,e.afterLeave=()=>{s.isLeaving=!1,8&n.job.flags||n.update(),delete e.afterLeave,u=void 0},Pn(o);"in-out"===l&&c.type!==Ar?e.delayLeave=(e,t,n)=>{Mn(s,u)[String(u.key)]=u,e[kn]=()=>{t(),e[kn]=void 0,delete a.delayedLeave,u=void 0},a.delayedLeave=()=>{n(),delete a.delayedLeave,u=void 0}}:u=void 0}else u&&(u=void 0);return o}}};function Mn(e,t){const{leavingVNodes:n}=e;let s=n.get(t.type);return s||(s=Object.create(null),n.set(t.type,s)),s}function jn(e,t,n,s,r){const{appear:o,mode:i,persisted:l=!1,onBeforeEnter:c,onEnter:a,onAfterEnter:u,onEnterCancelled:p,onBeforeLeave:d,onLeave:h,onAfterLeave:v,onLeaveCancelled:g,onBeforeAppear:m,onAppear:_,onAfterAppear:y,onAppearCancelled:b}=t,x=String(e.key),S=Mn(n,e),C=(e,t)=>{e&&Ht(e,s,9,t)},w=(e,t)=>{const n=t[1];C(e,t),f(e)?e.every((e=>e.length<=1))&&n():e.length<=1&&n()},k={mode:i,persisted:l,beforeEnter(t){let s=c;if(!n.isMounted){if(!o)return;s=m||c}t[kn]&&t[kn](!0);const r=S[x];r&&Rr(e,r)&&r.el[kn]&&r.el[kn](),C(s,[t])},enter(e){let t=a,s=u,r=p;if(!n.isMounted){if(!o)return;t=_||a,s=y||u,r=b||p}let i=!1;const l=e[An]=t=>{i||(i=!0,C(t?r:s,[e]),k.delayedLeave&&k.delayedLeave(),e[An]=void 0)};t?w(t,[e,l]):l()},leave(t,s){const r=String(e.key);if(t[An]&&t[An](!0),n.isUnmounting)return s();C(d,[t]);let o=!1;const i=t[kn]=n=>{o||(o=!0,s(),C(n?g:v,[t]),t[kn]=void 0,S[r]===e&&delete S[r])};S[r]=e,h?w(h,[t,i]):i()},clone(e){const o=jn(e,t,n,s,r);return r&&r(o),o}};return k}function Pn(e){if(Un(e))return(e=Br(e)).children=null,e}function Dn(e){if(!Un(e))return hn(e.type)&&e.children?Fn(e.children):e;if(e.component)return e.component.subTree;const{shapeFlag:t,children:n}=e;if(n){if(16&t)return n[0];if(32&t&&v(n.default))return n.default()}}function Vn(e,t){6&e.shapeFlag&&e.component?(e.transition=t,Vn(e.component.subTree,t)):128&e.shapeFlag?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function Rn(e,t=!1,n){let s=[],r=0;for(let o=0;o1)for(let o=0;oIn(e,n&&(f(n)?n[t]:n),s,r,o)));if(Nn(r)&&!o)return void(512&r.shapeFlag&&r.type.__asyncResolved&&r.component.subTree.component&&In(e,n,s,r.component.subTree));const i=4&r.shapeFlag?uo(r.component):r.el,l=o?null:i,{i:a,r:p}=e,d=n&&n.r,h=a.refs===t?a.refs={}:a.refs,m=a.setupState,_=yt(m),y=m===t?()=>!1:e=>u(_,e);if(null!=d&&d!==p&&(g(d)?(h[d]=null,y(d)&&(m[d]=null)):Ct(d)&&(d.value=null)),v(p))Wt(p,a,12,[l,h]);else{const t=g(p),n=Ct(p);if(t||n){const r=()=>{if(e.f){const n=t?y(p)?m[p]:h[p]:p.value;o?f(n)&&c(n,i):f(n)?n.includes(i)||n.push(i):t?(h[p]=[i],y(p)&&(m[p]=h[p])):(p.value=[i],e.k&&(h[e.k]=p.value))}else t?(h[p]=l,y(p)&&(m[p]=l)):n&&(p.value=l,e.k&&(h[e.k]=l))};l?(r.id=-1,tr(r,s)):r()}}}I().requestIdleCallback,I().cancelIdleCallback;const Nn=e=>!!e.type.__asyncLoader,Un=e=>e.type.__isKeepAlive;function Bn(e,t){Hn(e,"a",t)}function Wn(e,t){Hn(e,"da",t)}function Hn(e,t,n=Qr){const s=e.__wdc||(e.__wdc=()=>{let t=n;for(;t;){if(t.isDeactivated)return;t=t.parent}return e()});if(qn(t,s,n),n){let e=n.parent;for(;e&&e.parent;)Un(e.parent.vnode)&&Kn(s,t,n,e),e=e.parent}}function Kn(e,t,n,s){const r=qn(t,e,s,!0);Yn((()=>{c(s[t],r)}),n)}function qn(e,t,n=Qr,s=!1){if(n){const r=n[e]||(n[e]=[]),o=t.__weh||(t.__weh=(...s)=>{Ce();const r=no(n),o=Ht(t,n,e,s);return r(),we(),o});return s?r.unshift(o):r.push(o),o}}const zn=e=>(t,n=Qr)=>{io&&"sp"!==e||qn(e,((...e)=>t(...e)),n)},Gn=zn("bm"),Jn=zn("m"),Zn=zn("bu"),Xn=zn("u"),Qn=zn("bum"),Yn=zn("um"),es=zn("sp"),ts=zn("rtg"),ns=zn("rtc");function ss(e,t=Qr){qn("ec",e,t)}const rs="components";function os(e,t){return as(rs,e,!0,t)||e}const is=Symbol.for("v-ndc");function ls(e){return g(e)?as(rs,e,!1)||e:e||is}function cs(e){return as("directives",e)}function as(e,t,n=!0,s=!1){const r=ln||Qr;if(r){const n=r.type;if(e===rs){const e=fo(n,!1);if(e&&(e===t||e===E(t)||e===L(E(t))))return n}const o=us(r[e]||n[e],t)||us(r.appContext[e],t);return!o&&s?n:o}}function us(e,t){return e&&(e[t]||e[E(t)]||e[L(E(t))])}function fs(e,t,n,s){let r;const o=n,i=f(e);if(i||g(e)){let n=!1,s=!1;i&&vt(e)&&(n=!mt(e),s=gt(e),e=Re(e)),r=new Array(e.length);for(let i=0,l=e.length;it(e,n,void 0,o)));else{const n=Object.keys(e);r=new Array(n.length);for(let s=0,i=n.length;s{const t=s.fn(...e);return t&&(t.key=s.key),t}:s.fn)}return e}function ds(e,t,n={},s,r){if(ln.ce||ln.parent&&Nn(ln.parent)&&ln.parent.ce)return"default"!==t&&(n.name=t),Fr(),Dr(wr,null,[Ur("slot",n,s&&s())],64);let o=e[t];o&&o._c&&(o._d=!1),Fr();const i=o&&hs(o(n)),l=n.key||i&&i.key,c=Dr(wr,{key:(l&&!m(l)?l:`_${t}`)+(!i&&s?"_fb":"")},i||(s?s():[]),i&&1===e._?64:-2);return!r&&c.scopeId&&(c.slotScopeIds=[c.scopeId+"-s"]),o&&o._c&&(o._d=!0),c}function hs(e){return e.some((e=>!Vr(e)||e.type!==Ar&&!(e.type===wr&&!hs(e.children))))?e:null}const vs=e=>e?ro(e)?uo(e):vs(e.parent):null,gs=l(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>vs(e.parent),$root:e=>vs(e.root),$host:e=>e.ce,$emit:e=>e.emit,$options:e=>ws(e),$forceUpdate:e=>e.f||(e.f=()=>{en(e.update)}),$nextTick:e=>e.n||(e.n=Yt.bind(e.proxy)),$watch:e=>dr.bind(e)}),ms=(e,n)=>e!==t&&!e.__isScriptSetup&&u(e,n),_s={get({_:e},n){if("__v_skip"===n)return!0;const{ctx:s,setupState:r,data:o,props:i,accessCache:l,type:c,appContext:a}=e;let f;if("$"!==n[0]){const c=l[n];if(void 0!==c)switch(c){case 1:return r[n];case 2:return o[n];case 4:return s[n];case 3:return i[n]}else{if(ms(r,n))return l[n]=1,r[n];if(o!==t&&u(o,n))return l[n]=2,o[n];if((f=e.propsOptions[0])&&u(f,n))return l[n]=3,i[n];if(s!==t&&u(s,n))return l[n]=4,s[n];bs&&(l[n]=0)}}const p=gs[n];let d,h;return p?("$attrs"===n&&Pe(e.attrs,0,""),p(e)):(d=c.__cssModules)&&(d=d[n])?d:s!==t&&u(s,n)?(l[n]=4,s[n]):(h=a.config.globalProperties,u(h,n)?h[n]:void 0)},set({_:e},n,s){const{data:r,setupState:o,ctx:i}=e;return ms(o,n)?(o[n]=s,!0):r!==t&&u(r,n)?(r[n]=s,!0):!u(e.props,n)&&(("$"!==n[0]||!(n.slice(1)in e))&&(i[n]=s,!0))},has({_:{data:e,setupState:n,accessCache:s,ctx:r,appContext:o,propsOptions:i}},l){let c;return!!s[l]||e!==t&&u(e,l)||ms(n,l)||(c=i[0])&&u(c,l)||u(r,l)||u(gs,l)||u(o.config.globalProperties,l)},defineProperty(e,t,n){return null!=n.get?e._.accessCache[t]=0:u(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};function ys(e){return f(e)?e.reduce(((e,t)=>(e[t]=null,e)),{}):e}let bs=!0;function xs(e){const t=ws(e),n=e.proxy,r=e.ctx;bs=!1,t.beforeCreate&&Ss(t.beforeCreate,e,"bc");const{data:o,computed:i,methods:l,watch:c,provide:a,inject:u,created:p,beforeMount:d,mounted:h,beforeUpdate:g,updated:m,activated:y,deactivated:b,beforeDestroy:x,beforeUnmount:S,destroyed:C,unmounted:w,render:k,renderTracked:A,renderTriggered:T,errorCaptured:E,serverPrefetch:O,expose:F,inheritAttrs:L,components:M,directives:j,filters:P}=t;if(u&&function(e,t){f(e)&&(e=Es(e));for(const n in e){const s=e[n];let r;r=_(s)?"default"in s?Vs(s.from||n,s.default,!0):Vs(s.from||n):Vs(s),Ct(r)?Object.defineProperty(t,n,{enumerable:!0,configurable:!0,get:()=>r.value,set:e=>r.value=e}):t[n]=r}}(u,r,null),l)for(const s in l){const e=l[s];v(e)&&(r[s]=e.bind(n))}if(o){const t=o.call(n,n);_(t)&&(e.data=pt(t))}if(bs=!0,i)for(const f in i){const e=i[f],t=v(e)?e.bind(n,n):v(e.get)?e.get.bind(n,n):s,o=!v(e)&&v(e.set)?e.set.bind(n):s,l=po({get:t,set:o});Object.defineProperty(r,f,{enumerable:!0,configurable:!0,get:()=>l.value,set:e=>l.value=e})}if(c)for(const s in c)Cs(c[s],r,n,s);if(a){const e=v(a)?a.call(n):a;Reflect.ownKeys(e).forEach((t=>{!function(e,t){if(Qr){let n=Qr.provides;const s=Qr.parent&&Qr.parent.provides;s===n&&(n=Qr.provides=Object.create(s)),n[e]=t}else;}(t,e[t])}))}function D(e,t){f(t)?t.forEach((t=>e(t.bind(n)))):t&&e(t.bind(n))}if(p&&Ss(p,e,"c"),D(Gn,d),D(Jn,h),D(Zn,g),D(Xn,m),D(Bn,y),D(Wn,b),D(ss,E),D(ns,A),D(ts,T),D(Qn,S),D(Yn,w),D(es,O),f(F))if(F.length){const t=e.exposed||(e.exposed={});F.forEach((e=>{Object.defineProperty(t,e,{get:()=>n[e],set:t=>n[e]=t})}))}else e.exposed||(e.exposed={});k&&e.render===s&&(e.render=k),null!=L&&(e.inheritAttrs=L),M&&(e.components=M),j&&(e.directives=j),O&&$n(e)}function Ss(e,t,n){Ht(f(e)?e.map((e=>e.bind(t.proxy))):e.bind(t.proxy),t,n)}function Cs(e,t,n,s){let r=s.includes(".")?hr(n,s):()=>n[s];if(g(e)){const n=t[e];v(n)&&fr(r,n)}else if(v(e))fr(r,e.bind(n));else if(_(e))if(f(e))e.forEach((e=>Cs(e,t,n,s)));else{const s=v(e.handler)?e.handler.bind(n):t[e.handler];v(s)&&fr(r,s,e)}}function ws(e){const t=e.type,{mixins:n,extends:s}=t,{mixins:r,optionsCache:o,config:{optionMergeStrategies:i}}=e.appContext,l=o.get(t);let c;return l?c=l:r.length||n||s?(c={},r.length&&r.forEach((e=>ks(c,e,i,!0))),ks(c,t,i)):c=t,_(t)&&o.set(t,c),c}function ks(e,t,n,s=!1){const{mixins:r,extends:o}=t;o&&ks(e,o,n,!0),r&&r.forEach((t=>ks(e,t,n,!0)));for(const i in t)if(s&&"expose"===i);else{const s=As[i]||n&&n[i];e[i]=s?s(e[i],t[i]):t[i]}return e}const As={data:Ts,props:Ls,emits:Ls,methods:Fs,computed:Fs,beforeCreate:Os,created:Os,beforeMount:Os,mounted:Os,beforeUpdate:Os,updated:Os,beforeDestroy:Os,beforeUnmount:Os,destroyed:Os,unmounted:Os,activated:Os,deactivated:Os,errorCaptured:Os,serverPrefetch:Os,components:Fs,directives:Fs,watch:function(e,t){if(!e)return t;if(!t)return e;const n=l(Object.create(null),e);for(const s in t)n[s]=Os(e[s],t[s]);return n},provide:Ts,inject:function(e,t){return Fs(Es(e),Es(t))}};function Ts(e,t){return t?e?function(){return l(v(e)?e.call(this,this):e,v(t)?t.call(this,this):t)}:t:e}function Es(e){if(f(e)){const t={};for(let n=0;n(o.has(e)||(e&&v(e.install)?(o.add(e),e.install(a,...t)):v(e)&&(o.add(e),e(a,...t))),a),mixin:e=>(r.mixins.includes(e)||r.mixins.push(e),a),component:(e,t)=>t?(r.components[e]=t,a):r.components[e],directive:(e,t)=>t?(r.directives[e]=t,a):r.directives[e],mount(o,i,l){if(!c){const u=a._ceVNode||Ur(n,s);return u.appContext=r,!0===l?l="svg":!1===l&&(l=void 0),i&&t?t(u,o):e(u,o,l),c=!0,a._container=o,o.__vue_app__=a,uo(u.component)}},onUnmount(e){i.push(e)},unmount(){c&&(Ht(i,a._instance,16),e(null,a._container),delete a._container.__vue_app__)},provide:(e,t)=>(r.provides[e]=t,a),runWithContext(e){const t=Ds;Ds=a;try{return e()}finally{Ds=t}}};return a}}let Ds=null;function Vs(e,t,n=!1){const s=Qr||ln;if(s||Ds){let r=Ds?Ds._context.provides:s?null==s.parent||s.ce?s.vnode.appContext&&s.vnode.appContext.provides:s.parent.provides:void 0;if(r&&e in r)return r[e];if(arguments.length>1)return n&&v(t)?t.call(s&&s.proxy):t}}function Rs(){return!!(Qr||ln||Ds)}const $s={},Is=()=>Object.create($s),Ns=e=>Object.getPrototypeOf(e)===$s;function Us(e,t,n,s=!1){const r={},o=Is();e.propsDefaults=Object.create(null),Bs(e,t,r,o);for(const i in e.propsOptions[0])i in r||(r[i]=void 0);n?e.props=s?r:ht(r,!1,Ye,it,at):e.type.props?e.props=r:e.props=o,e.attrs=o}function Bs(e,n,s,r){const[o,i]=e.propsOptions;let l,c=!1;if(n)for(let t in n){if(k(t))continue;const a=n[t];let f;o&&u(o,f=E(t))?i&&i.includes(f)?(l||(l={}))[f]=a:s[f]=a:_r(e.emitsOptions,t)||t in r&&a===r[t]||(r[t]=a,c=!0)}if(i){const n=yt(s),r=l||t;for(let t=0;t{d=!0;const[t,n]=Ks(e,s,!0);l(a,t),n&&p.push(...n)};!r&&s.mixins.length&&s.mixins.forEach(t),e.extends&&t(e.extends),e.mixins&&e.mixins.forEach(t)}if(!c&&!d)return _(e)&&o.set(e,n),n;if(f(c))for(let n=0;n"_"===e[0]||"$stable"===e,Gs=e=>f(e)?e.map(Kr):[Kr(e)],Js=(e,t,n)=>{if(t._n)return t;const s=un(((...e)=>Gs(t(...e))),n);return s._c=!1,s},Zs=(e,t,n)=>{const s=e._ctx;for(const r in e){if(zs(r))continue;const n=e[r];if(v(n))t[r]=Js(0,n,s);else if(null!=n){const e=Gs(n);t[r]=()=>e}}},Xs=(e,t)=>{const n=Gs(t);e.slots.default=()=>n},Qs=(e,t,n)=>{for(const s in t)!n&&zs(s)||(e[s]=t[s])},Ys=(e,t,n)=>{const s=e.slots=Is();if(32&e.vnode.shapeFlag){const e=t.__;e&&D(s,"__",e,!0);const r=t._;r?(Qs(s,t,n),n&&D(s,"_",r,!0)):Zs(t,s)}else t&&Xs(e,t)},er=(e,n,s)=>{const{vnode:r,slots:o}=e;let i=!0,l=t;if(32&r.shapeFlag){const e=n._;e?s&&1===e?i=!1:Qs(o,n,s):(i=!n.$stable,Zs(n,o)),l=n}else n&&(Xs(e,n),l={default:1});if(i)for(const t in o)zs(t)||null!=l[t]||delete o[t]},tr=function(e,t){t&&t.pendingBranch?f(e)?t.effects.push(...e):t.effects.push(e):(f(n=e)?Gt.push(...n):Jt&&-1===n.id?Jt.splice(Zt+1,0,n):1&n.flags||(Gt.push(n),n.flags|=1),tn());var n};function nr(e){return function(e){I().__VUE__=!0;const{insert:r,remove:o,patchProp:i,createElement:l,createText:c,createComment:a,setText:p,setElementText:d,parentNode:h,nextSibling:v,setScopeId:g=s,insertStaticContent:m}=e,_=(e,t,n,s=null,r=null,o=null,i=void 0,l=null,c=!!t.dynamicChildren)=>{if(e===t)return;e&&!Rr(e,t)&&(s=Q(e),z(e,r,o,!0),e=null),-2===t.patchFlag&&(c=!1,t.dynamicChildren=null);const{type:a,ref:u,shapeFlag:f}=t;switch(a){case kr:b(e,t,n,s);break;case Ar:x(e,t,n,s);break;case Tr:null==e&&S(t,n,s,i);break;case wr:V(e,t,n,s,r,o,i,l,c);break;default:1&f?A(e,t,n,s,r,o,i,l,c):6&f?R(e,t,n,s,r,o,i,l,c):(64&f||128&f)&&a.process(e,t,n,s,r,o,i,l,c,te)}null!=u&&r?In(u,e&&e.ref,o,t||e,!t):null==u&&e&&null!=e.ref&&In(e.ref,null,o,e,!0)},b=(e,t,n,s)=>{if(null==e)r(t.el=c(t.children),n,s);else{const n=t.el=e.el;t.children!==e.children&&p(n,t.children)}},x=(e,t,n,s)=>{null==e?r(t.el=a(t.children||""),n,s):t.el=e.el},S=(e,t,n,s)=>{[e.el,e.anchor]=m(e.children,t,n,s,e.el,e.anchor)},C=({el:e,anchor:t},n,s)=>{let o;for(;e&&e!==t;)o=v(e),r(e,n,s),e=o;r(t,n,s)},w=({el:e,anchor:t})=>{let n;for(;e&&e!==t;)n=v(e),o(e),e=n;o(t)},A=(e,t,n,s,r,o,i,l,c)=>{"svg"===t.type?i="svg":"math"===t.type&&(i="mathml"),null==e?T(t,n,s,r,o,i,l,c):M(e,t,r,o,i,l,c)},T=(e,t,n,s,o,c,a,u)=>{let f,p;const{props:h,shapeFlag:v,transition:g,dirs:m}=e;if(f=e.el=l(e.type,c,h&&h.is,h),8&v?d(f,e.children):16&v&&L(e.children,f,null,s,o,sr(e,c),a,u),m&&pn(e,null,s,"created"),O(f,e,e.scopeId,a,s),h){for(const e in h)"value"===e||k(e)||i(f,e,null,h[e],c,s);"value"in h&&i(f,"value",null,h.value,c),(p=h.onVnodeBeforeMount)&&Jr(p,s,e)}m&&pn(e,null,s,"beforeMount");const _=function(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}(o,g);_&&g.beforeEnter(f),r(f,t,n),((p=h&&h.onVnodeMounted)||_||m)&&tr((()=>{p&&Jr(p,s,e),_&&g.enter(f),m&&pn(e,null,s,"mounted")}),o)},O=(e,t,n,s,r)=>{if(n&&g(e,n),s)for(let o=0;o{for(let a=c;a{const a=n.el=e.el;let{patchFlag:u,dynamicChildren:f,dirs:p}=n;u|=16&e.patchFlag;const h=e.props||t,v=n.props||t;let g;if(s&&rr(s,!1),(g=v.onVnodeBeforeUpdate)&&Jr(g,s,n,e),p&&pn(n,e,s,"beforeUpdate"),s&&rr(s,!0),(h.innerHTML&&null==v.innerHTML||h.textContent&&null==v.textContent)&&d(a,""),f?j(e.dynamicChildren,f,a,s,r,sr(n,o),l):c||W(e,n,a,null,s,r,sr(n,o),l,!1),u>0){if(16&u)D(a,h,v,s,o);else if(2&u&&h.class!==v.class&&i(a,"class",null,v.class,o),4&u&&i(a,"style",h.style,v.style,o),8&u){const e=n.dynamicProps;for(let t=0;t{g&&Jr(g,s,n,e),p&&pn(n,e,s,"updated")}),r)},j=(e,t,n,s,r,o,i)=>{for(let l=0;l{if(n!==s){if(n!==t)for(const t in n)k(t)||t in s||i(e,t,n[t],null,o,r);for(const t in s){if(k(t))continue;const l=s[t],c=n[t];l!==c&&"value"!==t&&i(e,t,c,l,o,r)}"value"in s&&i(e,"value",n.value,s.value,o)}},V=(e,t,n,s,o,i,l,a,u)=>{const f=t.el=e?e.el:c(""),p=t.anchor=e?e.anchor:c("");let{patchFlag:d,dynamicChildren:h,slotScopeIds:v}=t;v&&(a=a?a.concat(v):v),null==e?(r(f,n,s),r(p,n,s),L(t.children||[],n,p,o,i,l,a,u)):d>0&&64&d&&h&&e.dynamicChildren?(j(e.dynamicChildren,h,n,o,i,l,a),(null!=t.key||o&&t===o.subTree)&&or(e,t,!0)):W(e,t,n,p,o,i,l,a,u)},R=(e,t,n,s,r,o,i,l,c)=>{t.slotScopeIds=l,null==e?512&t.shapeFlag?r.ctx.activate(t,n,s,i,c):$(t,n,s,r,o,i,c):N(e,t,c)},$=(e,n,s,r,o,i,l)=>{const c=e.component=function(e,n,s){const r=e.type,o=(n?n.appContext:e.appContext)||Zr,i={uid:Xr++,vnode:e,type:r,parent:n,appContext:o,root:null,next:null,subTree:null,effect:null,update:null,job:null,scope:new se(!0),render:null,proxy:null,exposed:null,exposeProxy:null,withProxy:null,provides:n?n.provides:Object.create(o.provides),ids:n?n.ids:["",0,0],accessCache:null,renderCache:[],components:null,directives:null,propsOptions:Ks(r,o),emitsOptions:mr(r,o),emit:null,emitted:null,propsDefaults:t,inheritAttrs:r.inheritAttrs,ctx:t,data:t,props:t,attrs:t,slots:t,refs:t,setupState:t,setupContext:null,suspense:s,suspenseId:s?s.pendingId:0,asyncDep:null,asyncResolved:!1,isMounted:!1,isUnmounted:!1,isDeactivated:!1,bc:null,c:null,bm:null,m:null,bu:null,u:null,um:null,bum:null,da:null,a:null,rtg:null,rtc:null,ec:null,sp:null};i.ctx={_:i},i.root=n?n.root:i,i.emit=gr.bind(null,i),e.ce&&e.ce(i);return i}(e,r,o);if(Un(e)&&(c.ctx.renderer=te),function(e,t=!1,n=!1){t&&to(t);const{props:s,children:r}=e.vnode,o=ro(e);Us(e,s,o,t),Ys(e,r,n||t);const i=o?function(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,_s);const{setup:s}=n;if(s){Ce();const n=e.setupContext=s.length>1?function(e){const t=t=>{e.exposed=t||{}};return{attrs:new Proxy(e.attrs,ao),slots:e.slots,emit:e.emit,expose:t}}(e):null,r=no(e),o=Wt(s,e,0,[e.props,n]),i=y(o);if(we(),r(),!i&&!e.sp||Nn(e)||$n(e),i){if(o.then(so,so),t)return o.then((n=>{lo(e,n,t)})).catch((t=>{Kt(t,e,0)}));e.asyncDep=o}else lo(e,o,t)}else co(e,t)}(e,t):void 0;t&&to(!1)}(c,!1,l),c.asyncDep){if(o&&o.registerDep(c,U,l),!e.el){const e=c.subTree=Ur(Ar);x(null,e,n,s)}}else U(c,e,n,s,o,i,l)},N=(e,t,n)=>{const s=t.component=e.component;if(function(e,t,n){const{props:s,children:r,component:o}=e,{props:i,children:l,patchFlag:c}=t,a=o.emitsOptions;if(t.dirs||t.transition)return!0;if(!(n&&c>=0))return!(!r&&!l||l&&l.$stable)||s!==i&&(s?!i||Sr(s,i,a):!!i);if(1024&c)return!0;if(16&c)return s?Sr(s,i,a):!!i;if(8&c){const e=t.dynamicProps;for(let t=0;t{const l=()=>{if(e.isMounted){let{next:t,bu:n,u:s,parent:c,vnode:a}=e;{const n=ir(e);if(n)return t&&(t.el=a.el,B(e,t,i)),void n.asyncDep.then((()=>{e.isUnmounted||l()}))}let u,f=t;rr(e,!1),t?(t.el=a.el,B(e,t,i)):t=a,n&&P(n),(u=t.props&&t.props.onVnodeBeforeUpdate)&&Jr(u,c,t,a),rr(e,!0);const p=yr(e),d=e.subTree;e.subTree=p,_(d,p,h(d.el),Q(d),e,r,o),t.el=p.el,null===f&&function({vnode:e,parent:t},n){for(;t;){const s=t.subTree;if(s.suspense&&s.suspense.activeBranch===e&&(s.el=e.el),s!==e)break;(e=t.vnode).el=n,t=t.parent}}(e,p.el),s&&tr(s,r),(u=t.props&&t.props.onVnodeUpdated)&&tr((()=>Jr(u,c,t,a)),r)}else{let i;const{el:l,props:c}=t,{bm:a,m:u,parent:f,root:p,type:d}=e,h=Nn(t);if(rr(e,!1),a&&P(a),!h&&(i=c&&c.onVnodeBeforeMount)&&Jr(i,f,t),rr(e,!0),l&&re){const t=()=>{e.subTree=yr(e),re(l,e.subTree,e,r,null)};h&&d.__asyncHydrate?d.__asyncHydrate(l,e,t):t()}else{p.ce&&!1!==p.ce._def.shadowRoot&&p.ce._injectChildStyle(d);const i=e.subTree=yr(e);_(null,i,n,s,e,r,o),t.el=i.el}if(u&&tr(u,r),!h&&(i=c&&c.onVnodeMounted)){const e=t;tr((()=>Jr(i,f,e)),r)}(256&t.shapeFlag||f&&Nn(f.vnode)&&256&f.vnode.shapeFlag)&&e.a&&tr(e.a,r),e.isMounted=!0,t=n=s=null}};e.scope.on();const c=e.effect=new ce(l);e.scope.off();const a=e.update=c.run.bind(c),u=e.job=c.runIfDirty.bind(c);u.i=e,u.id=e.uid,c.scheduler=()=>en(u),rr(e,!0),a()},B=(e,t,n)=>{t.component=e;const s=e.vnode.props;e.vnode=t,e.next=null,function(e,t,n,s){const{props:r,attrs:o,vnode:{patchFlag:i}}=e,l=yt(r),[c]=e.propsOptions;let a=!1;if(!(s||i>0)||16&i){let s;Bs(e,t,r,o)&&(a=!0);for(const o in l)t&&(u(t,o)||(s=F(o))!==o&&u(t,s))||(c?!n||void 0===n[o]&&void 0===n[s]||(r[o]=Ws(c,l,o,void 0,e,!0)):delete r[o]);if(o!==l)for(const e in o)t&&u(t,e)||(delete o[e],a=!0)}else if(8&i){const n=e.vnode.dynamicProps;for(let s=0;s{const a=e&&e.children,u=e?e.shapeFlag:0,f=t.children,{patchFlag:p,shapeFlag:h}=t;if(p>0){if(128&p)return void K(a,f,n,s,r,o,i,l,c);if(256&p)return void H(a,f,n,s,r,o,i,l,c)}8&h?(16&u&&X(a,r,o),f!==a&&d(n,f)):16&u?16&h?K(a,f,n,s,r,o,i,l,c):X(a,r,o,!0):(8&u&&d(n,""),16&h&&L(f,n,s,r,o,i,l,c))},H=(e,t,s,r,o,i,l,c,a)=>{t=t||n;const u=(e=e||n).length,f=t.length,p=Math.min(u,f);let d;for(d=0;df?X(e,o,i,!0,!1,p):L(t,s,r,o,i,l,c,a,p)},K=(e,t,s,r,o,i,l,c,a)=>{let u=0;const f=t.length;let p=e.length-1,d=f-1;for(;u<=p&&u<=d;){const n=e[u],r=t[u]=a?qr(t[u]):Kr(t[u]);if(!Rr(n,r))break;_(n,r,s,null,o,i,l,c,a),u++}for(;u<=p&&u<=d;){const n=e[p],r=t[d]=a?qr(t[d]):Kr(t[d]);if(!Rr(n,r))break;_(n,r,s,null,o,i,l,c,a),p--,d--}if(u>p){if(u<=d){const e=d+1,n=ed)for(;u<=p;)z(e[u],o,i,!0),u++;else{const h=u,v=u,g=new Map;for(u=v;u<=d;u++){const e=t[u]=a?qr(t[u]):Kr(t[u]);null!=e.key&&g.set(e.key,u)}let m,y=0;const b=d-v+1;let x=!1,S=0;const C=new Array(b);for(u=0;u=b){z(n,o,i,!0);continue}let r;if(null!=n.key)r=g.get(n.key);else for(m=v;m<=d;m++)if(0===C[m-v]&&Rr(n,t[m])){r=m;break}void 0===r?z(n,o,i,!0):(C[r-v]=u+1,r>=S?S=r:x=!0,_(n,t[r],s,null,o,i,l,c,a),y++)}const w=x?function(e){const t=e.slice(),n=[0];let s,r,o,i,l;const c=e.length;for(s=0;s>1,e[n[l]]0&&(t[s]=n[o-1]),n[o]=s)}}o=n.length,i=n[o-1];for(;o-- >0;)n[o]=i,i=t[i];return n}(C):n;for(m=w.length-1,u=b-1;u>=0;u--){const e=v+u,n=t[e],p=e+1{const{el:l,type:c,transition:a,children:u,shapeFlag:f}=e;if(6&f)return void q(e.component.subTree,t,n,s);if(128&f)return void e.suspense.move(t,n,s);if(64&f)return void c.move(e,t,n,te);if(c===wr){r(l,t,n);for(let e=0;ea.enter(l)),i);else{const{leave:s,delayLeave:i,afterLeave:c}=a,u=()=>{e.ctx.isUnmounted?o(l):r(l,t,n)},f=()=>{s(l,(()=>{u(),c&&c()}))};i?i(l,u,f):f()}else r(l,t,n)},z=(e,t,n,s=!1,r=!1)=>{const{type:o,props:i,ref:l,children:c,dynamicChildren:a,shapeFlag:u,patchFlag:f,dirs:p,cacheIndex:d}=e;if(-2===f&&(r=!1),null!=l&&(Ce(),In(l,null,n,e,!0),we()),null!=d&&(t.renderCache[d]=void 0),256&u)return void t.ctx.deactivate(e);const h=1&u&&p,v=!Nn(e);let g;if(v&&(g=i&&i.onVnodeBeforeUnmount)&&Jr(g,t,e),6&u)Z(e.component,n,s);else{if(128&u)return void e.suspense.unmount(n,s);h&&pn(e,null,t,"beforeUnmount"),64&u?e.type.remove(e,t,n,te,s):a&&!a.hasOnce&&(o!==wr||f>0&&64&f)?X(a,t,n,!1,!0):(o===wr&&384&f||!r&&16&u)&&X(c,t,n),s&&G(e)}(v&&(g=i&&i.onVnodeUnmounted)||h)&&tr((()=>{g&&Jr(g,t,e),h&&pn(e,null,t,"unmounted")}),n)},G=e=>{const{type:t,el:n,anchor:s,transition:r}=e;if(t===wr)return void J(n,s);if(t===Tr)return void w(e);const i=()=>{o(n),r&&!r.persisted&&r.afterLeave&&r.afterLeave()};if(1&e.shapeFlag&&r&&!r.persisted){const{leave:t,delayLeave:s}=r,o=()=>t(n,i);s?s(e.el,i,o):o()}else i()},J=(e,t)=>{let n;for(;e!==t;)n=v(e),o(e),e=n;o(t)},Z=(e,t,n)=>{const{bum:s,scope:r,job:o,subTree:i,um:l,m:c,a:a,parent:u,slots:{__:p}}=e;lr(c),lr(a),s&&P(s),u&&f(p)&&p.forEach((e=>{u.renderCache[e]=void 0})),r.stop(),o&&(o.flags|=8,z(i,e,t,n)),l&&tr(l,t),tr((()=>{e.isUnmounted=!0}),t),t&&t.pendingBranch&&!t.isUnmounted&&e.asyncDep&&!e.asyncResolved&&e.suspenseId===t.pendingId&&(t.deps--,0===t.deps&&t.resolve())},X=(e,t,n,s=!1,r=!1,o=0)=>{for(let i=o;i{if(6&e.shapeFlag)return Q(e.component.subTree);if(128&e.shapeFlag)return e.suspense.next();const t=v(e.anchor||e.el),n=t&&t[dn];return n?v(n):t};let Y=!1;const ee=(e,t,n)=>{null==e?t._vnode&&z(t._vnode,null,null,!0):_(t._vnode||null,e,t,null,null,null,n),t._vnode=e,Y||(Y=!0,nn(),sn(),Y=!1)},te={p:_,um:z,m:q,r:G,mt:$,mc:L,pc:W,pbc:j,n:Q,o:e};let ne,re;return{render:ee,hydrate:ne,createApp:Ps(ee,ne)}}(e)}function sr({type:e,props:t},n){return"svg"===n&&"foreignObject"===e||"mathml"===n&&"annotation-xml"===e&&t&&t.encoding&&t.encoding.includes("html")?void 0:n}function rr({effect:e,job:t},n){n?(e.flags|=32,t.flags|=4):(e.flags&=-33,t.flags&=-5)}function or(e,t,n=!1){const s=e.children,r=t.children;if(f(s)&&f(r))for(let o=0;oVs(cr);function ur(e,t){return pr(e,null,t)}function fr(e,t,n){return pr(e,t,n)}function pr(e,n,r=t){const{immediate:o,deep:i,flush:c,once:a}=r,u=l({},r),f=n&&o||!n&&"post"!==c;let p;if(io)if("sync"===c){const e=ar();p=e.__watcherHandles||(e.__watcherHandles=[])}else if(!f){const e=()=>{};return e.stop=s,e.resume=s,e.pause=s,e}const d=Qr;u.call=(e,t,n)=>Ht(e,d,t,n);let h=!1;"post"===c?u.scheduler=e=>{tr(e,d&&d.suspense)}:"sync"!==c&&(h=!0,u.scheduler=(e,t)=>{t?e():en(e)}),u.augmentJob=e=>{n&&(e.flags|=4),h&&(e.flags|=2,d&&(e.id=d.uid,e.i=d))};const v=Ut(e,n,u);return io&&(p?p.push(v):f&&v()),v}function dr(e,t,n){const s=this.proxy,r=g(e)?e.includes(".")?hr(s,e):()=>s[e]:e.bind(s,s);let o;v(t)?o=t:(o=t.handler,n=t);const i=no(this),l=pr(r,o.bind(s),n);return i(),l}function hr(e,t){const n=t.split(".");return()=>{let t=e;for(let e=0;e"modelValue"===t||"model-value"===t?e.modelModifiers:e[`${t}Modifiers`]||e[`${E(t)}Modifiers`]||e[`${F(t)}Modifiers`];function gr(e,n,...s){if(e.isUnmounted)return;const r=e.vnode.props||t;let o=s;const i=n.startsWith("update:"),l=i&&vr(r,n.slice(7));let c;l&&(l.trim&&(o=s.map((e=>g(e)?e.trim():e))),l.number&&(o=s.map(V)));let a=r[c=M(n)]||r[c=M(E(n))];!a&&i&&(a=r[c=M(F(n))]),a&&Ht(a,e,6,o);const u=r[c+"Once"];if(u){if(e.emitted){if(e.emitted[c])return}else e.emitted={};e.emitted[c]=!0,Ht(u,e,6,o)}}function mr(e,t,n=!1){const s=t.emitsCache,r=s.get(e);if(void 0!==r)return r;const o=e.emits;let i={},c=!1;if(!v(e)){const s=e=>{const n=mr(e,t,!0);n&&(c=!0,l(i,n))};!n&&t.mixins.length&&t.mixins.forEach(s),e.extends&&s(e.extends),e.mixins&&e.mixins.forEach(s)}return o||c?(f(o)?o.forEach((e=>i[e]=null)):l(i,o),_(e)&&s.set(e,i),i):(_(e)&&s.set(e,null),null)}function _r(e,t){return!(!e||!o(t))&&(t=t.slice(2).replace(/Once$/,""),u(e,t[0].toLowerCase()+t.slice(1))||u(e,F(t))||u(e,t))}function yr(e){const{type:t,vnode:n,proxy:s,withProxy:r,propsOptions:[o],slots:l,attrs:c,emit:a,render:u,renderCache:f,props:p,data:d,setupState:h,ctx:v,inheritAttrs:g}=e,m=an(e);let _,y;try{if(4&n.shapeFlag){const e=r||s,t=e;_=Kr(u.call(t,e,f,p,h,d,v)),y=c}else{const e=t;0,_=Kr(e.length>1?e(p,{attrs:c,slots:l,emit:a}):e(p,null)),y=t.props?c:br(c)}}catch(x){Er.length=0,Kt(x,e,1),_=Ur(Ar)}let b=_;if(y&&!1!==g){const e=Object.keys(y),{shapeFlag:t}=b;e.length&&7&t&&(o&&e.some(i)&&(y=xr(y,o)),b=Br(b,y,!1,!0))}return n.dirs&&(b=Br(b,null,!1,!0),b.dirs=b.dirs?b.dirs.concat(n.dirs):n.dirs),n.transition&&Vn(b,n.transition),_=b,an(m),_}const br=e=>{let t;for(const n in e)("class"===n||"style"===n||o(n))&&((t||(t={}))[n]=e[n]);return t},xr=(e,t)=>{const n={};for(const s in e)i(s)&&s.slice(9)in t||(n[s]=e[s]);return n};function Sr(e,t,n){const s=Object.keys(t);if(s.length!==Object.keys(e).length)return!0;for(let r=0;re.__isSuspense;const wr=Symbol.for("v-fgt"),kr=Symbol.for("v-txt"),Ar=Symbol.for("v-cmt"),Tr=Symbol.for("v-stc"),Er=[];let Or=null;function Fr(e=!1){Er.push(Or=e?null:[])}let Lr=1;function Mr(e,t=!1){Lr+=e,e<0&&Or&&t&&(Or.hasOnce=!0)}function jr(e){return e.dynamicChildren=Lr>0?Or||n:null,Er.pop(),Or=Er[Er.length-1]||null,Lr>0&&Or&&Or.push(e),e}function Pr(e,t,n,s,r,o){return jr(Nr(e,t,n,s,r,o,!0))}function Dr(e,t,n,s,r){return jr(Ur(e,t,n,s,r,!0))}function Vr(e){return!!e&&!0===e.__v_isVNode}function Rr(e,t){return e.type===t.type&&e.key===t.key}const $r=({key:e})=>null!=e?e:null,Ir=({ref:e,ref_key:t,ref_for:n})=>("number"==typeof e&&(e=""+e),null!=e?g(e)||Ct(e)||v(e)?{i:ln,r:e,k:t,f:!!n}:e:null);function Nr(e,t=null,n=null,s=0,r=null,o=(e===wr?0:1),i=!1,l=!1){const c={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&$r(t),ref:t&&Ir(t),scopeId:cn,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetStart:null,targetAnchor:null,staticCount:0,shapeFlag:o,patchFlag:s,dynamicProps:r,dynamicChildren:null,appContext:null,ctx:ln};return l?(zr(c,n),128&o&&e.normalize(c)):n&&(c.shapeFlag|=g(n)?8:16),Lr>0&&!i&&Or&&(c.patchFlag>0||6&o)&&32!==c.patchFlag&&Or.push(c),c}const Ur=function(e,t=null,n=null,s=0,r=null,o=!1){e&&e!==is||(e=Ar);if(Vr(e)){const s=Br(e,t,!0);return n&&zr(s,n),Lr>0&&!o&&Or&&(6&s.shapeFlag?Or[Or.indexOf(e)]=s:Or.push(s)),s.patchFlag=-2,s}i=e,v(i)&&"__vccOpts"in i&&(e=e.__vccOpts);var i;if(t){t=function(e){return e?_t(e)||Ns(e)?l({},e):e:null}(t);let{class:e,style:n}=t;e&&!g(e)&&(t.class=K(e)),_(n)&&(_t(n)&&!f(n)&&(n=l({},n)),t.style=N(n))}const c=g(e)?1:Cr(e)?128:hn(e)?64:_(e)?4:v(e)?2:0;return Nr(e,t,n,s,r,c,o,!0)};function Br(e,t,n=!1,s=!1){const{props:r,ref:o,patchFlag:i,children:l,transition:c}=e,a=t?Gr(r||{},t):r,u={__v_isVNode:!0,__v_skip:!0,type:e.type,props:a,key:a&&$r(a),ref:t&&t.ref?n&&o?f(o)?o.concat(Ir(t)):[o,Ir(t)]:Ir(t):o,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:l,target:e.target,targetStart:e.targetStart,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==wr?-1===i?16:16|i:i,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:c,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&Br(e.ssContent),ssFallback:e.ssFallback&&Br(e.ssFallback),el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce};return c&&s&&Vn(u,c.clone(u)),u}function Wr(e=" ",t=0){return Ur(kr,null,e,t)}function Hr(e="",t=!1){return t?(Fr(),Dr(Ar,null,e)):Ur(Ar,null,e)}function Kr(e){return null==e||"boolean"==typeof e?Ur(Ar):f(e)?Ur(wr,null,e.slice()):Vr(e)?qr(e):Ur(kr,null,String(e))}function qr(e){return null===e.el&&-1!==e.patchFlag||e.memo?e:Br(e)}function zr(e,t){let n=0;const{shapeFlag:s}=e;if(null==t)t=null;else if(f(t))n=16;else if("object"==typeof t){if(65&s){const n=t.default;return void(n&&(n._c&&(n._d=!1),zr(e,n()),n._c&&(n._d=!0)))}{n=32;const s=t._;s||Ns(t)?3===s&&ln&&(1===ln.slots._?t._=1:(t._=2,e.patchFlag|=1024)):t._ctx=ln}}else v(t)?(t={default:t,_ctx:ln},n=32):(t=String(t),64&s?(n=16,t=[Wr(t)]):n=8);e.children=t,e.shapeFlag|=n}function Gr(...e){const t={};for(let n=0;nQr||ln;let eo,to;{const e=I(),t=(t,n)=>{let s;return(s=e[t])||(s=e[t]=[]),s.push(n),e=>{s.length>1?s.forEach((t=>t(e))):s[0](e)}};eo=t("__VUE_INSTANCE_SETTERS__",(e=>Qr=e)),to=t("__VUE_SSR_SETTERS__",(e=>io=e))}const no=e=>{const t=Qr;return eo(e),e.scope.on(),()=>{e.scope.off(),eo(t)}},so=()=>{Qr&&Qr.scope.off(),eo(null)};function ro(e){return 4&e.vnode.shapeFlag}let oo,io=!1;function lo(e,t,n){v(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:_(t)&&(e.setupState=Lt(t)),co(e,n)}function co(e,t,n){const r=e.type;if(!e.render){if(!t&&oo&&!r.render){const t=r.template||ws(e).template;if(t){const{isCustomElement:n,compilerOptions:s}=e.appContext.config,{delimiters:o,compilerOptions:i}=r,c=l(l({isCustomElement:n,delimiters:o},s),i);r.render=oo(t,c)}}e.render=r.render||s}{const t=no(e);Ce();try{xs(e)}finally{we(),t()}}}const ao={get:(e,t)=>(Pe(e,0,""),e[t])};function uo(e){return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy(Lt(bt(e.exposed)),{get:(t,n)=>n in t?t[n]:n in gs?gs[n](e):void 0,has:(e,t)=>t in e||t in gs})):e.proxy}function fo(e,t=!0){return v(e)?e.displayName||e.name:e.name||t&&e.__name}const po=(e,t)=>{const n=function(e,t,n=!1){let s,r;return v(e)?s=e:(s=e.get,r=e.set),new Rt(s,r,n)}(e,0,io);return n};function ho(e,t,n){const s=arguments.length;return 2===s?_(t)&&!f(t)?Vr(t)?Ur(e,null,[t]):Ur(e,t):Ur(e,null,t):(s>3?n=Array.prototype.slice.call(arguments,2):3===s&&Vr(n)&&(n=[n]),Ur(e,t,n))}const vo="3.5.17"; +/** +* @vue/runtime-dom v3.5.17 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/let go;const mo="undefined"!=typeof window&&window.trustedTypes;if(mo)try{go=mo.createPolicy("vue",{createHTML:e=>e})}catch(yi){}const _o=go?e=>go.createHTML(e):e=>e,yo="undefined"!=typeof document?document:null,bo=yo&&yo.createElement("template"),xo={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,s)=>{const r="svg"===t?yo.createElementNS("http://www.w3.org/2000/svg",e):"mathml"===t?yo.createElementNS("http://www.w3.org/1998/Math/MathML",e):n?yo.createElement(e,{is:n}):yo.createElement(e);return"select"===e&&s&&null!=s.multiple&&r.setAttribute("multiple",s.multiple),r},createText:e=>yo.createTextNode(e),createComment:e=>yo.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>yo.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,s,r,o){const i=n?n.previousSibling:t.lastChild;if(r&&(r===o||r.nextSibling))for(;t.insertBefore(r.cloneNode(!0),n),r!==o&&(r=r.nextSibling););else{bo.innerHTML=_o("svg"===s?`${e}`:"mathml"===s?`${e}`:e);const r=bo.content;if("svg"===s||"mathml"===s){const e=r.firstChild;for(;e.firstChild;)r.appendChild(e.firstChild);r.removeChild(e)}t.insertBefore(r,n)}return[i?i.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},So="transition",Co="animation",wo=Symbol("_vtc"),ko={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String},Ao=l({},En,ko),To=(e=>(e.displayName="Transition",e.props=Ao,e))(((e,{slots:t})=>ho(Ln,function(e){const t={};for(const l in e)l in ko||(t[l]=e[l]);if(!1===e.css)return t;const{name:n="v",type:s,duration:r,enterFromClass:o=`${n}-enter-from`,enterActiveClass:i=`${n}-enter-active`,enterToClass:c=`${n}-enter-to`,appearFromClass:a=o,appearActiveClass:u=i,appearToClass:f=c,leaveFromClass:p=`${n}-leave-from`,leaveActiveClass:d=`${n}-leave-active`,leaveToClass:h=`${n}-leave-to`}=e,v=function(e){if(null==e)return null;if(_(e))return[Fo(e.enter),Fo(e.leave)];{const t=Fo(e);return[t,t]}}(r),g=v&&v[0],m=v&&v[1],{onBeforeEnter:y,onEnter:b,onEnterCancelled:x,onLeave:S,onLeaveCancelled:C,onBeforeAppear:w=y,onAppear:k=b,onAppearCancelled:A=x}=t,T=(e,t,n,s)=>{e._enterCancelled=s,Mo(e,t?f:c),Mo(e,t?u:i),n&&n()},E=(e,t)=>{e._isLeaving=!1,Mo(e,p),Mo(e,h),Mo(e,d),t&&t()},O=e=>(t,n)=>{const r=e?k:b,i=()=>T(t,e,n);Eo(r,[t,i]),jo((()=>{Mo(t,e?a:o),Lo(t,e?f:c),Oo(r)||Do(t,s,g,i)}))};return l(t,{onBeforeEnter(e){Eo(y,[e]),Lo(e,o),Lo(e,i)},onBeforeAppear(e){Eo(w,[e]),Lo(e,a),Lo(e,u)},onEnter:O(!1),onAppear:O(!0),onLeave(e,t){e._isLeaving=!0;const n=()=>E(e,t);Lo(e,p),e._enterCancelled?(Lo(e,d),$o()):($o(),Lo(e,d)),jo((()=>{e._isLeaving&&(Mo(e,p),Lo(e,h),Oo(S)||Do(e,s,m,n))})),Eo(S,[e,n])},onEnterCancelled(e){T(e,!1,void 0,!0),Eo(x,[e])},onAppearCancelled(e){T(e,!0,void 0,!0),Eo(A,[e])},onLeaveCancelled(e){E(e),Eo(C,[e])}})}(e),t))),Eo=(e,t=[])=>{f(e)?e.forEach((e=>e(...t))):e&&e(...t)},Oo=e=>!!e&&(f(e)?e.some((e=>e.length>1)):e.length>1);function Fo(e){return R(e)}function Lo(e,t){t.split(/\s+/).forEach((t=>t&&e.classList.add(t))),(e[wo]||(e[wo]=new Set)).add(t)}function Mo(e,t){t.split(/\s+/).forEach((t=>t&&e.classList.remove(t)));const n=e[wo];n&&(n.delete(t),n.size||(e[wo]=void 0))}function jo(e){requestAnimationFrame((()=>{requestAnimationFrame(e)}))}let Po=0;function Do(e,t,n,s){const r=e._endId=++Po,o=()=>{r===e._endId&&s()};if(null!=n)return setTimeout(o,n);const{type:i,timeout:l,propCount:c}=function(e,t){const n=window.getComputedStyle(e),s=e=>(n[e]||"").split(", "),r=s(`${So}Delay`),o=s(`${So}Duration`),i=Vo(r,o),l=s(`${Co}Delay`),c=s(`${Co}Duration`),a=Vo(l,c);let u=null,f=0,p=0;t===So?i>0&&(u=So,f=i,p=o.length):t===Co?a>0&&(u=Co,f=a,p=c.length):(f=Math.max(i,a),u=f>0?i>a?So:Co:null,p=u?u===So?o.length:c.length:0);const d=u===So&&/\b(transform|all)(,|$)/.test(s(`${So}Property`).toString());return{type:u,timeout:f,propCount:p,hasTransform:d}}(e,t);if(!i)return s();const a=i+"end";let u=0;const f=()=>{e.removeEventListener(a,p),o()},p=t=>{t.target===e&&++u>=c&&f()};setTimeout((()=>{uRo(t)+Ro(e[n]))))}function Ro(e){return"auto"===e?0:1e3*Number(e.slice(0,-1).replace(",","."))}function $o(){return document.body.offsetHeight}const Io=Symbol("_vod"),No=Symbol("_vsh"),Uo=Symbol(""),Bo=/(^|;)\s*display\s*:/;const Wo=/\s*!important$/;function Ho(e,t,n){if(f(n))n.forEach((n=>Ho(e,t,n)));else if(null==n&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const s=function(e,t){const n=qo[t];if(n)return n;let s=E(t);if("filter"!==s&&s in e)return qo[t]=s;s=L(s);for(let r=0;r{if(e._vts){if(e._vts<=n.attached)return}else e._vts=Date.now();Ht(function(e,t){if(f(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map((e=>t=>!t._stopped&&e&&e(t)))}return t}(e,n.value),t,5,[e])};return n.value=e,n.attached=ni(),n}(s,r);Zo(e,n,i,l)}else i&&(!function(e,t,n,s){e.removeEventListener(t,n,s)}(e,n,i,l),o[t]=void 0)}}const Yo=/(?:Once|Passive|Capture)$/;let ei=0;const ti=Promise.resolve(),ni=()=>ei||(ti.then((()=>ei=0)),ei=Date.now());const si=e=>111===e.charCodeAt(0)&&110===e.charCodeAt(1)&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123;const ri=e=>{const t=e.props["onUpdate:modelValue"]||!1;return f(t)?e=>P(t,e):t},oi=Symbol("_assign"),ii={deep:!0,created(e,t,n){e[oi]=ri(n),Zo(e,"change",(()=>{const t=e._modelValue,n=function(e){return"_value"in e?e._value:e.value}(e),s=e.checked,r=e[oi];if(f(t)){const e=Z(t,n),o=-1!==e;if(s&&!o)r(t.concat(n));else if(!s&&o){const n=[...t];n.splice(e,1),r(n)}}else if(d(t)){const e=new Set(t);s?e.add(n):e.delete(n),r(e)}else r(ci(e,s))}))},mounted:li,beforeUpdate(e,t,n){e[oi]=ri(n),li(e,t,n)}};function li(e,{value:t,oldValue:n},s){let r;if(e._modelValue=t,f(t))r=Z(t,s.props.value)>-1;else if(d(t))r=t.has(s.props.value);else{if(t===n)return;r=J(t,ci(e,!0))}e.checked!==r&&(e.checked=r)}function ci(e,t){const n=t?"_trueValue":"_falseValue";return n in e?e[n]:t}const ai=["ctrl","shift","alt","meta"],ui={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>"button"in e&&0!==e.button,middle:e=>"button"in e&&1!==e.button,right:e=>"button"in e&&2!==e.button,exact:(e,t)=>ai.some((n=>e[`${n}Key`]&&!t.includes(n)))},fi=(e,t)=>{const n=e._withMods||(e._withMods={}),s=t.join(".");return n[s]||(n[s]=(n,...s)=>{for(let e=0;e{const n=e._withKeys||(e._withKeys={}),s=t.join(".");return n[s]||(n[s]=n=>{if(!("key"in n))return;const s=F(n.key);return t.some((e=>e===s||pi[e]===s))?e(n):void 0})},hi=l({patchProp:(e,t,n,s,r,l)=>{const c="svg"===r;"class"===t?function(e,t,n){const s=e[wo];s&&(t=(t?[t,...s]:[...s]).join(" ")),null==t?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}(e,s,c):"style"===t?function(e,t,n){const s=e.style,r=g(n);let o=!1;if(n&&!r){if(t)if(g(t))for(const e of t.split(";")){const t=e.slice(0,e.indexOf(":")).trim();null==n[t]&&Ho(s,t,"")}else for(const e in t)null==n[e]&&Ho(s,e,"");for(const e in n)"display"===e&&(o=!0),Ho(s,e,n[e])}else if(r){if(t!==n){const e=s[Uo];e&&(n+=";"+e),s.cssText=n,o=Bo.test(n)}}else t&&e.removeAttribute("style");Io in e&&(e[Io]=o?s.display:"",e[No]&&(s.display="none"))}(e,n,s):o(t)?i(t)||Qo(e,t,0,s,l):("."===t[0]?(t=t.slice(1),1):"^"===t[0]?(t=t.slice(1),0):function(e,t,n,s){if(s)return"innerHTML"===t||"textContent"===t||!!(t in e&&si(t)&&v(n));if("spellcheck"===t||"draggable"===t||"translate"===t||"autocorrect"===t)return!1;if("form"===t)return!1;if("list"===t&&"INPUT"===e.tagName)return!1;if("type"===t&&"TEXTAREA"===e.tagName)return!1;if("width"===t||"height"===t){const t=e.tagName;if("IMG"===t||"VIDEO"===t||"CANVAS"===t||"SOURCE"===t)return!1}if(si(t)&&g(n))return!1;return t in e}(e,t,s,c))?(Jo(e,t,s),e.tagName.includes("-")||"value"!==t&&"checked"!==t&&"selected"!==t||Go(e,t,s,c,0,"value"!==t)):!e._isVueCE||!/[A-Z]/.test(t)&&g(s)?("true-value"===t?e._trueValue=s:"false-value"===t&&(e._falseValue=s),Go(e,t,s,c)):Jo(e,E(t),s,0,t)}},xo);let vi;function gi(){return vi||(vi=nr(hi))}const mi=(...e)=>{gi().render(...e)},_i=(...e)=>{const t=gi().createApp(...e),{mount:n}=t;return t.mount=e=>{const s=function(e){if(g(e)){return document.querySelector(e)}return e}(e);if(!s)return;const r=t._component;v(r)||r.render||r.template||(r.template=s.innerHTML),1===s.nodeType&&(s.textContent="");const o=n(s,!1,function(e){if(e instanceof SVGElement)return"svg";if("function"==typeof MathMLElement&&e instanceof MathMLElement)return"mathml"}(s));return s instanceof Element&&(s.removeAttribute("v-cloak"),s.setAttribute("data-v-app","")),o},t};export{Yt as A,Gr as B,re as C,Ct as D,vt as E,wr as F,yt as G,Dt as H,oe as I,ie as J,Vs as K,Mt as L,Rs as M,Wr as N,os as O,cs as P,ls as Q,To as R,q as S,Sn as T,ps as U,kt as V,Ot as W,ur as X,di as Y,mi as Z,ho as _,Fr as a,Nr as b,Pr as c,Ur as d,fn as e,Dr as f,Qn as g,po as h,fs as i,fi as j,Hr as k,N as l,bt as m,K as n,Jn as o,ds as p,un as q,wt as r,pt as s,Q as t,Et as u,ii as v,fr as w,_i as x,dt as y,Yr as z}; diff --git a/comfyui-easy-use/web_version/v2/assets/vueuse-Chow9bSK.js b/comfyui-easy-use/web_version/v2/assets/vueuse-Chow9bSK.js new file mode 100644 index 0000000000000000000000000000000000000000..50d10682c45c83c691e6e4f536ab9fc7193c125e --- /dev/null +++ b/comfyui-easy-use/web_version/v2/assets/vueuse-Chow9bSK.js @@ -0,0 +1 @@ +import{I as e,J as t,o as n,A as o,w as s,z as l,V as u,h as r,W as i,X as a,u as c}from"./vue-Cu3MA6TM.js";function v(n){return!!e()&&(t(n),!0)}const d="undefined"!=typeof window&&"undefined"!=typeof document;"undefined"!=typeof WorkerGlobalScope&&(globalThis,WorkerGlobalScope);const f=e=>null!=e,p=Object.prototype.toString,m=e=>"[object Object]"===p.call(e),h=()=>{};function g(e){return Array.isArray(e)?e:[e]}function w(e,t=!0,s){l()?n(e,s):t?e():o(e)}const y=d?window:void 0;function b(e){var t;const n=i(e);return null!=(t=null==n?void 0:n.$el)?t:n}function O(...e){const t=[],n=()=>{t.forEach((e=>e())),t.length=0},o=r((()=>{const t=g(i(e[0])).filter((e=>null!=e));return t.every((e=>"string"!=typeof e))?t:void 0})),l=(u=([e,o,s,l])=>{if(n(),!(null==e?void 0:e.length)||!(null==o?void 0:o.length)||!(null==s?void 0:s.length))return;const u=m(l)?{...l}:l;t.push(...e.flatMap((e=>o.flatMap((t=>s.map((n=>((e,t,n,o)=>(e.addEventListener(t,n,o),()=>e.removeEventListener(t,n,o)))(e,t,n,u))))))))},a={flush:"post"},s((()=>{var t,n;return[null!=(n=null==(t=o.value)?void 0:t.map((e=>b(e))))?n:[y].filter((e=>null!=e)),g(i(o.value?e[1]:e[0])),g(c(o.value?e[2]:e[1])),i(o.value?e[3]:e[2])]}),u,{...a,immediate:!0}));var u,a;return v(n),()=>{l(),n()}}function E(e){const t=function(){const e=u(!1),t=l();return t&&n((()=>{e.value=!0}),t),e}();return r((()=>(t.value,Boolean(e()))))}function X(e,t,n={}){const{window:o=y,...l}=n;let u;const a=E((()=>o&&"MutationObserver"in o)),c=()=>{u&&(u.disconnect(),u=void 0)},d=r((()=>{const t=g(i(e)).map(b).filter(f);return new Set(t)})),p=s((()=>d.value),(e=>{c(),a.value&&e.size&&(u=new MutationObserver(t),e.forEach((e=>u.observe(e,l))))}),{immediate:!0,flush:"post"}),m=()=>{p(),c()};return v(m),{isSupported:a,stop:m,takeRecords:()=>null==u?void 0:u.takeRecords()}}function Y(e,t={}){const{delayEnter:n=0,delayLeave:o=0,triggerOnRemoval:s=!1,window:l=y}=t,i=u(!1);let c;const d=e=>{const t=e?n:o;c&&(clearTimeout(c),c=void 0),t?c=setTimeout((()=>i.value=e),t):i.value=e};return l?(O(e,"mouseenter",(()=>d(!0)),{passive:!0}),O(e,"mouseleave",(()=>d(!1)),{passive:!0}),s&&function(e,t,n={}){const{window:o=y,document:s=(null==o?void 0:o.document),flush:l="sync"}=n;if(!o||!s)return h;let u;const r=e=>{null==u||u(),u=e},i=a((()=>{const n=b(e);if(n){const{stop:e}=X(s,(e=>{e.map((e=>[...e.removedNodes])).flat().some((e=>e===n||e.contains(n)))&&t(e)}),{window:o,childList:!0,subtree:!0});r(e)}}),{flush:l}),c=()=>{i(),r()};v(c)}(r((()=>b(e))),(()=>d(!1))),i):i}function x(e,t,n={}){const{root:o,rootMargin:l="0px",threshold:a=0,window:c=y,immediate:d=!0}=n,p=E((()=>c&&"IntersectionObserver"in c)),m=r((()=>g(i(e)).map(b).filter(f)));let w=h;const O=u(d),X=p.value?s((()=>[m.value,b(o),O.value]),(([e,n])=>{if(w(),!O.value)return;if(!e.length)return;const o=new IntersectionObserver(t,{root:b(n),rootMargin:l,threshold:a});e.forEach((e=>e&&o.observe(e))),w=()=>{o.disconnect(),w=h}}),{immediate:d,flush:"post"}):h,Y=()=>{w(),X(),O.value=!1};return v(Y),{isSupported:p,isActive:O,pause(){w(),O.value=!1},resume(){O.value=!0},stop:Y}}const M={page:e=>[e.pageX,e.pageY],client:e=>[e.clientX,e.clientY],screen:e=>[e.screenX,e.screenY],movement:e=>e instanceof MouseEvent?[e.movementX,e.movementY]:null};function S(e,t={}){const{windowResize:n=!0,windowScroll:o=!0,handleOutside:l=!0,window:a=y}=t,c=t.type||"page",{x:d,y:f,sourceType:p}=function(e={}){const{type:t="page",touch:n=!0,resetOnTouchEnds:o=!1,initialValue:s={x:0,y:0},window:l=y,target:r=l,scroll:i=!0,eventFilter:a}=e;let c=null,v=0,d=0;const f=u(s.x),p=u(s.y),m=u(null),h="function"==typeof t?t:M[t],g=e=>{const t=h(e);c=e,t&&([f.value,p.value]=t,m.value="mouse"),l&&(v=l.scrollX,d=l.scrollY)},w=e=>{if(e.touches.length>0){const t=h(e.touches[0]);t&&([f.value,p.value]=t,m.value="touch")}},b=()=>{if(!c||!l)return;const e=h(c);c instanceof MouseEvent&&e&&(f.value=e[0]+l.scrollX-v,p.value=e[1]+l.scrollY-d)},E=()=>{f.value=s.x,p.value=s.y},X=a?e=>a((()=>g(e)),{}):e=>g(e),Y=a?e=>a((()=>w(e)),{}):e=>w(e),x=a?()=>a((()=>b()),{}):()=>b();if(r){const e={passive:!0};O(r,["mousemove","dragover"],X,e),n&&"movement"!==t&&(O(r,["touchstart","touchmove"],Y,e),o&&O(r,"touchend",E,e)),i&&"page"===t&&O(l,"scroll",x,e)}return{x:f,y:p,sourceType:m}}(t),m=u(null!=e?e:null==a?void 0:a.document.body),h=u(0),g=u(0),Y=u(0),x=u(0),S=u(0),R=u(0),T=u(!0);function z(){if(!a)return;const e=b(m);if(!(e&&e instanceof Element))return;const{left:t,top:n,width:o,height:s}=e.getBoundingClientRect();Y.value=t+("page"===c?a.pageXOffset:0),x.value=n+("page"===c?a.pageYOffset:0),S.value=s,R.value=o;const u=d.value-Y.value,r=f.value-x.value;T.value=0===o||0===s||u<0||r<0||u>o||r>s,l&&(h.value=u,g.value=r)}const A=[];if(w((()=>{z()})),a){const{stop:e}=function(e,t,n={}){const{window:o=y,...l}=n;let u;const a=E((()=>o&&"ResizeObserver"in o)),c=()=>{u&&(u.disconnect(),u=void 0)},d=r((()=>{const t=i(e);return Array.isArray(t)?t.map((e=>b(e))):[b(t)]})),f=s(d,(e=>{if(c(),a.value&&o){u=new ResizeObserver(t);for(const t of e)t&&u.observe(t,l)}}),{immediate:!0,flush:"post"}),p=()=>{c(),f()};return v(p),{isSupported:a,stop:p}}(m,z),{stop:t}=X(m,z,{attributeFilter:["style","class"]}),l=s([m,d,f],z);A.push(e,t,l),O(document,"mouseleave",(()=>T.value=!0),{passive:!0}),o&&A.push(O("scroll",z,{capture:!0,passive:!0})),n&&A.push(O("resize",z,{passive:!0}))}return{x:d,y:f,sourceType:p,elementX:h,elementY:g,elementPositionX:Y,elementPositionY:x,elementHeight:S,elementWidth:R,isOutside:T,stop:function(){A.forEach((e=>e())),A.length=0}}}export{x as a,S as b,Y as c,O as u}; diff --git a/comfyui-easy-use/wildcards/example.txt b/comfyui-easy-use/wildcards/example.txt new file mode 100644 index 0000000000000000000000000000000000000000..a6a84d2af192eb64018ef2ee51c2566dcb7bab1a --- /dev/null +++ b/comfyui-easy-use/wildcards/example.txt @@ -0,0 +1,10 @@ +blue +red +yellow +green +brown +pink +purple +orange +black +white \ No newline at end of file diff --git a/comfyui-flux-continuum/.github/FUNDING.yml b/comfyui-flux-continuum/.github/FUNDING.yml new file mode 100644 index 0000000000000000000000000000000000000000..83e07ebdf050ef5f0196011040c2ad67bc0d2da0 --- /dev/null +++ b/comfyui-flux-continuum/.github/FUNDING.yml @@ -0,0 +1,4 @@ +# These are supported funding model platforms + +github: robertvoy +buy_me_a_coffee: robertvoy diff --git a/comfyui-flux-continuum/.github/workflows/publish_action.yml b/comfyui-flux-continuum/.github/workflows/publish_action.yml new file mode 100644 index 0000000000000000000000000000000000000000..be0b02fa23a31379cd886015704f48396aa016c3 --- /dev/null +++ b/comfyui-flux-continuum/.github/workflows/publish_action.yml @@ -0,0 +1,20 @@ +name: Publish to Comfy registry +on: + workflow_dispatch: + push: + branches: + - main + paths: + - "pyproject.toml" + +jobs: + publish-node: + name: Publish Custom Node to registry + runs-on: ubuntu-latest + steps: + - name: Check out code + uses: actions/checkout@v4 + - name: Publish Custom Node + uses: Comfy-Org/publish-node-action@main + with: + personal_access_token: ${{ secrets.REGISTRY_ACCESS_TOKEN }} diff --git a/comfyui-flux-continuum/.tracking b/comfyui-flux-continuum/.tracking new file mode 100644 index 0000000000000000000000000000000000000000..412aaa49c2ea55cc902ccdb0442c2fc9b893500a --- /dev/null +++ b/comfyui-flux-continuum/.tracking @@ -0,0 +1,26 @@ +.github/FUNDING.yml +.github/workflows/publish_action.yml +LICENSE +README.md +__init__.py +fonts/Inter_24pt-Medium.ttf +fonts/ShareTechMono-Regular.ttf +misc.py +pyproject.toml +web/getsetorder.js +web/guidanceversions.js +web/help.js +web/hint.js +web/imagedisplay.js +web/imagetransfershortcut.js +web/impactpackfix.js +web/outputgetnode.js +web/samplerversions.js +web/tabs.js +web/textversions.js +workflow/Flux+ 1.3_release.json +workflow/Flux+ 1.4.4_release.json +workflow/Flux+ 1.4.5_release.json +workflow/Flux+ 1.6.4_release.json +workflow/Flux+ 1.7.0_release.json +workflow/Flux+ Light 1.0.0_release.json \ No newline at end of file diff --git a/comfyui-flux-continuum/LICENSE b/comfyui-flux-continuum/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..d7355f8181021742002458eb7a35da327f2a8195 --- /dev/null +++ b/comfyui-flux-continuum/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2024 Robert + +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. diff --git a/comfyui-flux-continuum/README.md b/comfyui-flux-continuum/README.md new file mode 100644 index 0000000000000000000000000000000000000000..4a075b96cdb870547230128c9dc957acd495c11c --- /dev/null +++ b/comfyui-flux-continuum/README.md @@ -0,0 +1,276 @@ +# ComfyUI Flux Continuum - Modular Interface + +![banner_2](https://github.com/user-attachments/assets/5681868a-002d-46a4-9fc2-7455af728821) + +> A modular workflow that brings order to the chaos of image generation pipelines. + +📺 [Watch the Tutorial](https://www.youtube.com/watch?v=cjWuPcRZ1j0) + +## Updates +- **1.7.0:** Enhanced workflow and usability update 📺 [Watch Video Update](https://www.youtube.com/watch?v=e_7cYbBwjFc) + - **Image Transfer Shortcut**: Use `Ctrl+Shift+C` to copy images from Img Preview to Img Load (customizable in Settings > Keybinding > Image Transfer) + - **Configurable Model Router**: Dynamic model selection with customizable JSON mapping for flexible workflows + - **Hint System**: Interactive hint nodes provide contextual help throughout the workflow + - **Crop & Stitch**: Enhanced inpainting/outpainting with automatic crop and stitch functionality + - **Smart Guidance**: Automatic guidance value of 30 for inpainting, outpainting, canny, and depth operations + - **TeaCache Integration**: Optional speed boost for all outputs (trades some quality for performance) + - **Improved Preprocessor Preview Logic**: CN Input is used for previewing when ControlNet strength > 0, otherwise uses Img Load + - **Workflow Reorganization**: Modules reordered for more logical flow + - **Redux Naming**: IP Adapter renamed to Redux for consistency with BFL terminology + +
    +
    📋 Older Changelog (Click to expand) + +- **1.6.4:** ControlNet Union Pro v2 Update 📺 [Watch Video Update](https://www.youtube.com/watch?v=oh1P_4d9_HI) + - ControlNet Union Pro v2: Integrated the new Depth, Canny, OpenPose ControlNets + - New canny preprocessor control + - Removed the input preview tab + - Better upscaling controls + - New Redux (IPAdapter) implementation + +- **Flux Continuum Light 1.0.0:** + - Light version of the workflow with all the basic functions that requires only the FLUX.1-dev model. [Download](https://github.com/robertvoy/ComfyUI-Flux-Continuum/blob/main/workflow/Flux%2B%20Light%201.0.0_release.json) + +- **1.4.2:** Black Forest Labs tools update + - Black Forest Labs tools: Integrated the new Redux, Depth, Canny, Fill models + - Preview Panel: Preview all your image inputs and masks at a glance + - Mask Feather Control: Feather the mask using one control + - Text Versions: Add more tabs via properties + - New Nodes: *FluxContinuumModelRouter*, *OutputGet*, *OutputGetString*, *OutputTextDisplay*, *DrawTextConfig* and *ConfigurableDrawText* + + + +## Overview + +ComfyUI Flux Continuum revolutionises workflow management through a thoughtful dual-interface design: + +- **Front-end**: A consistent control interface shared across all modules +- **Back-end**: Powerful, modular architecture for customisation and experimentation + +## ✨ Core Features + +> Perfect for creators who want a consistent, streamlined experience across all image generation tasks, while maintaining the power to customize when needed. + +- **Unified Control Interface** + - Single set of controls affects all relevant modules + - Smart guidance adjustment based on operation type + - Consistent experience across all generation tasks + +- **Smart Workflow Management** + - Only activates nodes and models required for current task + - Toggle between different output types seamlessly + - Efficiently handles resource allocation + - Optional TeaCache for speed optimization + +- **Universal Model Integration** + - LoRAs, ControlNets and Redux work across all output modules + - Seamless Black Forest Labs model support + - Configurable model routing for custom workflows + +- **Enhanced Usability** + - Interactive hint system for contextual help + - Quick image transfer with keyboard shortcut + - Intelligent preprocessing based on control values + - Crop & stitch for seamless inpainting/outpainting + +--- + +## 🚀 Quick Start +📺 **New to Flux Continuum?** [Watch the tutorial first](https://www.youtube.com/watch?v=cjWuPcRZ1j0) +1. Clone repo to the custom nodes folder +```shell +git clone https://github.com/robertvoy/ComfyUI-Flux-Continuum +``` +2. [Download](https://github.com/robertvoy/ComfyUI-Flux-Continuum/blob/main/workflow/Flux%2B%201.7.0_release.json) and import the workflow into ComfyUI +3. Install missing custom nodes using the ComfyUI Manager +4. Configure your models in the config panel (press `2` to access) +5. Download any missing models (see Model Downloads section below) +6. Return to the main interface (press `1`) +7. Select `txt2img` from the output selector (top left corner) +8. Run the workflow to generate your first image + +--- + +## 🎯 Usage Guide + +### Output Selection +The workflow is controlled by the **Output selector** in the top-left corner. Select your desired output and all relevant controls will automatically apply. + +### Key Controls + +**🎨 Main Generation** +- **Prompt**: Your text description for generation +- **Denoise**: Controls strength for img2img operations (0 = no change, 1 = completely new) +- **Steps**: Number of sampling steps (higher = more detail, slower) +- **Guidance**: How closely to follow the prompt (automatically set to 30 for inpainting/outpainting/canny/depth) +- **TeaCache**: Toggle for speed boost (some quality trade-off) + +**🖼️ Input Images** +- **Img Load**: Primary image for all img2img operations (inpainting, outpainting, detailer, upscaling) +- **CN Input**: Source for ControlNet preprocessing +- **Redux 1-3**: Up to 3 reference images for style transfer (use very low strength values) +- **Tip**: Use `Ctrl+Shift+C` to quickly copy from Img Preview to Img Load + +**🎛️ ControlNet & Redux** +- ControlNets activate when strength > 0 +- When CN strength > 0, preprocessor uses CN Input; otherwise uses Img Load +- Preview preprocessor results by selecting corresponding output (e.g., "preprocessor canny") +- Redux sliders control each Redux input individually (1 = Redux 1, etc.) + +**Recommended ControlNet Values:** +- **Canny**: Strength=0.7, End=0.8 +- **Depth**: Strength=0.8, End=0.8 +- **Pose**: Strength=0.9, End=0.65 + +**🔧 Image Processing** +- Resize, crop, sharpen, color correct, or pad images +- Preview results with "imgload prep" output +- Bypass nodes after processing to avoid reprocessing (`Ctrl+B`) + +**⬆️ Upscaling** +- **Resolution Multiply**: Multiplies image resolution after any preprocessing +- **Upscale Model**: Choose your upscaling model (recommended: 4xNomos8kDAT) +- 📺 [Watch Upscaling Tutorial](https://www.youtube.com/watch?v=TmF3JK_1AAs) + +--- + +## 🎯 Workflow Modules + +### Main Modules +> All modules use the same unified control interface + +| Module | Description | +|--------|-------------| +| **txt2img** | Standard text-to-image generation from prompts | +| **txt2img noise injection** | Enhanced detail generation ([Learn more](https://youtu.be/tned5bYOC08?si=qfP2Sv2VOTzDK-uL&t=1335)) | +| **img2img** | Transform existing images with text prompts | +| **inpainting** | Edit specific areas with automatic crop & stitch using BFL Fill model | +| **outpainting** | Expand images beyond boundaries with smart padding and BFL Fill model | +| **canny** | Edge-guided generation using BFL Canny model | +| **depth** | Depth-guided generation using BFL Depth model | +| **detailer** | Focused refinement using mask selection | +| **ultimate upscaler** | Advanced tiled upscaling with full control | +| **upscaler** | Simple model-based upscaling | + +### Utility Modules + +| Module | Description | +|--------|-------------| +| **imgload prep** | Preview processed images after crop/sharpen/resize/padding | +| **preprocessor canny** | Preview canny edge detection results | +| **preprocessor depth** | Preview depth map generation | +| **preprocessor openpose** | Preview pose detection results | + +--- + +## 🔧 Custom Nodes + +> *These custom nodes were made specifically for this workflow and are required for it to work* + +### Interface Enhancement Nodes + +- **Hint Node**: + - Interactive help system throughout the workflow + - Hover for contextual information + - Right-click to edit hint content + - Supports markdown formatting + +- **Tabs**: + - Space-saving node organization + - Add tabs via properties panel + - Compatible with most nodes + - Special handling for unsupported nodes + +- **Sliders**: + - Suite of pre-configured sliders + - Optimized ranges and defaults for common operations + - Includes: Denoise, Step, Guidance, Batch, GPU, ControlNet, Redux, and more + +- **OutputGet System**: + - Filters set nodes with prefix `Output -` + - **OutputTextDisplay**: Visual display of selected output + - **OutputGetString**: String output for conditional routing + +- **Text Versions**: + - Multi-tab text management (default 5 tabs) + - Add more tabs via properties panel + - Save different prompt versions + - Perfect for A/B testing + +- **ImageDisplay**: + - Base64 image display on canvas + - Configurable via properties + - Useful for reference images + +### Workflow Control Nodes + +- **Image Transfer Shortcut**: + - `Ctrl+Shift+C` copies from Img Preview to Img Load + - Customizable in ComfyUI keybindings + +- **Configurable Model Router**: + - Dynamic model selection with JSON mapping + - Flexible routing based on conditions + - Supports lazy loading for efficiency + +- **Sampler Parameter Packer/Unpacker**: + - Consolidate sampler settings + - Tabbed interface for version control + +- **Image Batch Boolean**: + - Conditional batch processing + - Smart second image loading + +- **Configurable Draw Text**: + - Advanced text rendering on images + - Configurable fonts, colors, shadows, alignment + +- **Pass Nodes**: + - Extended pass-through for Latent, Pipe, SEGS, and Int data types + - Maintains data flow integrity + +--- + +## 📥 Model Downloads + +### Required Models + +**unet folder:** +- [flux1-dev.safetensors](https://huggingface.co/black-forest-labs/FLUX.1-dev/resolve/main/flux1-dev.safetensors) +- [flux1-depth-dev.safetensors](https://huggingface.co/black-forest-labs/FLUX.1-Depth-dev/resolve/main/flux1-depth-dev.safetensors) +- [flux1-canny-dev.safetensors](https://huggingface.co/black-forest-labs/FLUX.1-Canny-dev/resolve/main/flux1-canny-dev.safetensors) +- [flux1-fill-dev.safetensors](https://huggingface.co/black-forest-labs/FLUX.1-Fill-dev/resolve/main/flux1-fill-dev.safetensors) + +> **Note**: If you don't use Canny or Depth models, you can bypass their load nodes and skip downloading them. + +**vae folder:** +- [ae.safetensors](https://huggingface.co/black-forest-labs/FLUX.1-dev/resolve/main/ae.safetensors) + +**clip folder:** +- [t5xxl_fp8_e4m3fn.safetensors](https://huggingface.co/comfyanonymous/flux_text_encoders/resolve/main/t5xxl_fp8_e4m3fn.safetensors) +- [clip_l.safetensors](https://huggingface.co/comfyanonymous/flux_text_encoders/resolve/main/clip_l.safetensors) + +**style_models folder:** +- [flux1-redux-dev.safetensors](https://huggingface.co/black-forest-labs/FLUX.1-Redux-dev/resolve/main/flux1-redux-dev.safetensors) + +**clip_vision folder:** +- [sigclip_vision_patch14_384.safetensors](https://huggingface.co/Comfy-Org/sigclip_vision_384/resolve/main/sigclip_vision_patch14_384.safetensors) + +**controlnet/FLUX folder:** +- [FLUX.1-dev-ControlNet-Union-Pro-2.0.safetensors](https://huggingface.co/Shakker-Labs/FLUX.1-dev-ControlNet-Union-Pro-2.0/resolve/main/diffusion_pytorch_model.safetensors) *(rename file)* + +--- + +## 🔜 Coming Soon + +- **Multi-GPU Support**: Distributed processing across multiple GPUs + +--- + +## 🙏 Acknowledgments + +Special thanks to the creators of these essential custom node packs: +- [rgthree ComfyUI Extensions](https://github.com/rgthree/rgthree-comfy) +- [ComfyUI Essentials](https://github.com/cubiq/ComfyUI_essentials) +- [ComfyUI Impact Pack](https://github.com/ltdrdata/ComfyUI-Impact-Pack) +- [ComfyUI KJNodes](https://github.com/kijai/ComfyUI-KJNodes) diff --git a/comfyui-flux-continuum/__init__.py b/comfyui-flux-continuum/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..fe87a3d28e08047a11f05010206ee5d853d8efb1 --- /dev/null +++ b/comfyui-flux-continuum/__init__.py @@ -0,0 +1,41 @@ +from .misc import MISC_CLASS_MAPPINGS + +# Merge both mappings into a single dictionary for the custom nodes +NODE_CLASS_MAPPINGS = {**MISC_CLASS_MAPPINGS} +WEB_DIRECTORY = "./web" + +# Optional: You can also define NODE_DISPLAY_NAME_MAPPINGS if you want custom display names in the UI +NODE_DISPLAY_NAME_MAPPINGS = { + "StepSlider": "Step Slider", + "DenoiseSlider": "Denoise Slider", + "GuidanceSlider": "Guidance Slider", + "GPUSlider": "GPU Slider", + "BatchSlider": "Batch Slider", + "IPAdapterSlider": "IPAdapter Slider", + "MaxShiftSlider": "Max Shift Slider", + "ControlNetSlider": "ControlNet Slider", + "CannySlider": "CannySlider", + "SelectFromBatch": "Select From Batch", + "LatentPass": "LatentPass", + "SEGSPass": "SEGSPass", + "PipePass": "PipePass", + "IntPass": "IntPass", + "TextVersions": "Text Versions", + "ResolutionPicker": "Resolution Picker", + "ResolutionMultiplySlider": "ResolutionMultiplySlider", + "SamplerParameterPacker": "Sampler Parameter Packer", + "SamplerParameterUnpacker": "Sampler Parameter Unpacker", + "ImpactControlBridgeFix": "ImpactControlBridgeFix", + "BooleanToEnabled": "Boolean To Enabled", + "OutputGetString": "OutputGetString", + "SplitVec2": "SplitVec2", + "SplitVec3": "SplitVec3", + "SimpleTextTruncate": "Simple Text Truncate", + "FluxContinuumModelRouter": "Flux Continuum Model Router", + "ConfigurableModelRouter": "Configurable Model Router", + "ImageBatchBoolean": "Image Batch Boolean", + "DrawTextConfig": "DrawTextConfig", + "ConfigurableDrawText": "ConfigurableDrawText" +} + +__all__ = ['NODE_CLASS_MAPPINGS', 'NODE_DISPLAY_NAME_MAPPINGS'] \ No newline at end of file diff --git a/comfyui-flux-continuum/__pycache__/__init__.cpython-310.pyc b/comfyui-flux-continuum/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..06674bde9feac3ea5c3e76eb15765de5085059f5 Binary files /dev/null and b/comfyui-flux-continuum/__pycache__/__init__.cpython-310.pyc differ diff --git a/comfyui-flux-continuum/__pycache__/misc.cpython-310.pyc b/comfyui-flux-continuum/__pycache__/misc.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..256a1c2791607e62372a3c212cecfe03a2200b85 Binary files /dev/null and b/comfyui-flux-continuum/__pycache__/misc.cpython-310.pyc differ diff --git a/comfyui-flux-continuum/fonts/ShareTechMono-Regular.ttf b/comfyui-flux-continuum/fonts/ShareTechMono-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..0ae0b19750c51a751bc45f54622443d55d643999 Binary files /dev/null and b/comfyui-flux-continuum/fonts/ShareTechMono-Regular.ttf differ diff --git a/comfyui-flux-continuum/misc.py b/comfyui-flux-continuum/misc.py new file mode 100644 index 0000000000000000000000000000000000000000..2bf5f5ddc68d66827126f46a080859b6f59a378e --- /dev/null +++ b/comfyui-flux-continuum/misc.py @@ -0,0 +1,941 @@ +import nodes +from server import PromptServer +import torch +import comfy.samplers +import os +import time +from PIL import Image, ImageDraw, ImageFont, ImageColor, ImageFilter +import torchvision.transforms.v2 as T +import numpy as np +import folder_paths +import numpy as np +import json +from typing import Any, Mapping, Tuple + +class AnyType(str): + def __ne__(self, __value: object) -> bool: + return False + +any_typ = AnyType("*") + +class DenoiseSlider: + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "value": ("FLOAT", { "display": "slider", "default": 0.5, "min": 0.0, "max": 1.0, "step": 0.001 }), + }, + } + + RETURN_TYPES = ("FLOAT", ) + FUNCTION = "execute" + CATEGORY = "Flux-Continuum/Sliders" + DESCRIPTION = """Control the **denoising strength** for img2img operations, including: inpainting, ultimate upscaler and detailer. + - A value of **1.0** means a completely new image. + - A value of **0.0** means no change to the latent image.""" + + def execute(self, value): + return (value, ) + +class StepSlider: + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "value": ("FLOAT", { "display": "slider", "default": 25.0, "min": 0.0, "max": 50.0, "step": 1.0 }), + }, + } + RETURN_TYPES = ("INT", ) + FUNCTION = "execute" + CATEGORY = "Flux-Continuum/Sliders" + DESCRIPTION = "Set the number of **sampling steps**. Higher values can increase detail but take longer to process." + def execute(self, value): + # Use round() instead of int() to ensure proper integer conversion + return (int(round(value)), ) + +class BatchSlider: + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "value": ("FLOAT", { "display": "slider", "default": 1.0, "min": 1.0, "max": 10.0, "step": 1.0 }), + }, + } + RETURN_TYPES = ("INT", ) + FUNCTION = "execute" + CATEGORY = "Flux-Continuum/Sliders" + DESCRIPTION = "Provides a slider for controlling batch size with range 1-10" + def execute(self, value): + # Use round() instead of int() to ensure proper integer conversion + return (int(round(value)), ) + +class ResolutionMultiplySlider: + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "value": ("FLOAT", { "display": "slider", "default": 1.0, "min": 1.0, "max": 10.0, "step": 0.1 }), + }, + } + RETURN_TYPES = ("FLOAT", ) + FUNCTION = "execute" + CATEGORY = "Flux-Continuum/Sliders" + DESCRIPTION = "Provides a slider for controlling resolution multiplication for upscaling, with range 1-10" + def execute(self, value): + return (value, ) + +class GPUSlider: + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "value": ("FLOAT", { "display": "slider", "default": 1.0, "min": 1.0, "max": 4.0, "step": 1.0 }), + }, + } + RETURN_TYPES = ("INT", ) + FUNCTION = "execute" + CATEGORY = "Flux-Continuum/Sliders" + DESCRIPTION = "Provides a slider for selecting number of GPUs with range 1-4" + def execute(self, value): + # Use round() instead of int() to ensure proper integer conversion + return (int(round(value)), ) + +class SelectFromBatch: + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "value": ("FLOAT", { "display": "slider", "default": 0.0, "min": 0.0, "max": 24.0, "step": 1.0 }), + }, + } + RETURN_TYPES = ("INT", ) + FUNCTION = "execute" + CATEGORY = "Flux-Continuum/Sliders" + DESCRIPTION = "Provides a slider for selecting specific images from a batch with range 0-24" + def execute(self, value): + # Use round() instead of int() to ensure proper integer conversion + return (int(round(value)), ) + +class GuidanceSlider: + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "value": ("FLOAT", { "display": "slider", "default": 2.5, "min": -1.0, "max": 30.0, "step": 0.1 }), + }, + } + + RETURN_TYPES = ("FLOAT", ) + FUNCTION = "execute" + CATEGORY = "Flux-Continuum/Sliders" + DESCRIPTION = "Higher values make the output adhere more strictly to the prompt. Select between different presets for convenience. NOTE: FLUX Continuum workflow automatically sets your guidance to 30 when you're doing inpainting, outpainting, canny, or depth operations." + + def execute(self, value): + # Return the float value directly + return (value, ) + +class MaxShiftSlider: + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "value": ("FLOAT", { "display": "slider", "default": 1.15, "min": 0.0, "max": 4.0, "step": 0.05 }), + }, + } + + RETURN_TYPES = ("FLOAT", ) + FUNCTION = "execute" + CATEGORY = "Flux-Continuum/Sliders" + DESCRIPTION = "Control the **maximum pixel shift**, often used to introduce variation." + + def execute(self, value): + # Return the float value directly + return (value, ) + +class ControlNetSlider: + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "Strength": ("FLOAT", { "display": "slider", "default": 1, "min": 0.0, "max": 1.0, "step": 0.05 }), + "Start": ("FLOAT", { "display": "slider", "default": 0, "min": 0.0, "max": 1.0, "step": 0.05 }), + "End": ("FLOAT", { "display": "slider", "default": 1, "min": 0.0, "max": 1.0, "step": 0.05 }), + }, + } + + RETURN_TYPES = ("VEC3", ) + FUNCTION = "execute" + CATEGORY = "Flux-Continuum/Sliders" + DESCRIPTION = """- **Strength**: The overall influence of the ControlNet. +- **Start**: The step at which the ControlNet begins to apply (as a percentage). +- **End**: The step at which the ControlNet stops applying (as a percentage).""" + + def execute(self, Strength, Start, End): + # Return the three values as a VEC3 + return ((Strength, Start, End), ) + +class CannySlider: + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "Low_Threshold": ("FLOAT", { "display": "slider", "default": 0.40, "min": 0.1, "max": 0.99, "step": 0.01 }), + "High_Threshold": ("FLOAT", { "display": "slider", "default": 0.80, "min": 0.1, "max": 0.99, "step": 0.01 }) + }, + } + + RETURN_TYPES = ("VEC2", ) + FUNCTION = "execute" + CATEGORY = "Flux-Continuum/Sliders" + DESCRIPTION = "Provides two sliders for canny preprocessor parameters" + + def execute(self, Low_Threshold, High_Threshold): + # Return the two values as a VEC2 + return ((Low_Threshold, High_Threshold), ) + +class IPAdapterSlider: + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "IP1": ("FLOAT", { "display": "slider", "default": 0, "min": 0.0, "max": 1.0, "step": 0.05 }), + "IP2": ("FLOAT", { "display": "slider", "default": 0, "min": 0.0, "max": 1.0, "step": 0.05 }), + "IP3": ("FLOAT", { "display": "slider", "default": 0, "min": 0.0, "max": 1.0, "step": 0.05 }), + }, + } + + RETURN_TYPES = ("VEC3",) + FUNCTION = "execute" + CATEGORY = "Flux-Continuum/Sliders" + DESCRIPTION = "Control the strength of up to three different Redux inputs simultaneously." + + def execute(self, IP1, IP2, IP3): + # Return the three values as a VEC3 + return ((IP1, IP2, IP3),) + +class SEGSPass: + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "SEGS": ("SEGS",), + }, + } + + RETURN_TYPES = ("SEGS", ) + FUNCTION = "execute" + CATEGORY = "Flux-Continuum/Utilities" + + def execute(self, SEGS): + # Return the integer value directly + return (SEGS, ) + +class PipePass: + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "PIPE_LINE": ("PIPE_LINE",), + }, + } + + RETURN_TYPES = ("PIPE_LINE", ) + FUNCTION = "execute" + CATEGORY = "Flux-Continuum/Utilities" + + def execute(self, PIPE_LINE): + return (PIPE_LINE, ) + +class LatentPass: + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "latent": ("LATENT",), + }, + } + RETURN_TYPES = ("LATENT", ) + FUNCTION = "execute" + CATEGORY = "Flux-Continuum/Utilities" + + def execute(self, latent): + # Simply pass through the latent data + return (latent, ) + +class IntPass: + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "INT": ("INT",), + }, + } + RETURN_TYPES = ("INT", ) + FUNCTION = "execute" + CATEGORY = "Flux-Continuum/Utilities" + + def execute(self, INT): + # Simply pass through an integer + return (INT, ) + +class ResolutionPicker: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "resolution": (["704x1408 (0.5)","704x1344 (0.52)","768x1344 (0.57)","768x1280 (0.6)","832x1216 (0.68)","832x1152 (0.72)","896x1152 (0.78)","896x1088 (0.82)","960x1088 (0.88)","960x1024 (0.94)","1024x1024 (1.0)","1024x960 (1.07)","1088x960 (1.13)","1088x896 (1.21)","1152x896 (1.29)","1152x832 (1.38)","1216x832 (1.46)","1280x768 (1.67)","1344x768 (1.75)","1344x704 (1.91)","1408x704 (2.0)","1472x704 (2.09)","1536x640 (2.4)","1600x640 (2.5)","1664x576 (2.89)","1728x576 (3.0)",], {"default": "1024x1024 (1.0)"}), + }} + RETURN_TYPES = (["704x1408 (0.5)","704x1344 (0.52)","768x1344 (0.57)","768x1280 (0.6)","832x1216 (0.68)","832x1152 (0.72)","896x1152 (0.78)","896x1088 (0.82)","960x1088 (0.88)","960x1024 (0.94)","1024x1024 (1.0)","1024x960 (1.07)","1088x960 (1.13)","1088x896 (1.21)","1152x896 (1.29)","1152x832 (1.38)","1216x832 (1.46)","1280x768 (1.67)","1344x768 (1.75)","1344x704 (1.91)","1408x704 (2.0)","1472x704 (2.09)","1536x640 (2.4)","1600x640 (2.5)","1664x576 (2.89)","1728x576 (3.0)",],) + RETURN_NAMES = ("resolution",) + FUNCTION = "execute" + CATEGORY = "Flux-Continuum/Utilities" + DESCRIPTION = "Provides a convenient dropdown menu to select from a list of common, pre-calculated image **resolutions** and their aspect ratios. Perfect for FLUX." + + def execute(self, resolution): + return (resolution,) + +class SamplerParameterPacker: + CATEGORY = 'Flux-Continuum/Utilities' + RETURN_TYPES = ("SAMPLER_PARAMS",) + RETURN_NAMES = ("sampler_params",) + FUNCTION = "pack_parameters" + DESCRIPTION = "Packs sampler and scheduler selections into a single parameter object for efficient passing" + + @classmethod + def INPUT_TYPES(cls): + return {"required": { + "sampler": (comfy.samplers.KSampler.SAMPLERS,), + "scheduler": (comfy.samplers.KSampler.SCHEDULERS,), + }} + + def pack_parameters(self, sampler, scheduler): + return ((sampler, str(sampler), scheduler, str(scheduler)),) + +class SamplerParameterUnpacker: + CATEGORY = 'Flux-Continuum/Utilities' + RETURN_TYPES = (comfy.samplers.KSampler.SAMPLERS, "STRING", any_typ, "STRING",) + RETURN_NAMES = ("sampler", "sampler_name", "scheduler", "scheduler_name",) + FUNCTION = "unpack_parameters" + DESCRIPTION = "Unpacks previously packed sampler parameters back into individual components" + + @classmethod + def INPUT_TYPES(cls): + return {"required": { + "sampler_params": ("SAMPLER_PARAMS",), + }} + + def unpack_parameters(self, sampler_params): + sampler, sampler_name, scheduler, scheduler_name = sampler_params + return (sampler, sampler_name, scheduler, scheduler_name,) + +class TextVersions: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "text": ("STRING", {"default": "", "multiline": True, "dynamicPrompts": True}), + }, + } + + RETURN_TYPES = ("STRING",) + RETURN_NAMES = ("text",) + FUNCTION = "process_text" + CATEGORY = "Flux-Continuum/Utilities" + DESCRIPTION = "Provides a multi-tab interface for managing different versions of text input" + + def __init__(self): + self.order = 0 + + def process_text(self, text): + return (text,) + +def workflow_to_map(workflow): + nodes_map = {} + links = {} + + # Create a lookup table for links and nodes + for links_data in workflow['links']: + links[links_data[0]] = links_data[1:] + + for node_data in workflow['nodes']: + nodes_map[str(node_data['id'])] = node_data + + return nodes_map, links + +def is_execution_model_version_supported(): + try: + import comfy_execution + return True + except: + return False + + +class ImpactControlBridgeFix: + @classmethod + def INPUT_TYPES(cls): + return {"required": { + "value": (any_typ,), + "mode": ("BOOLEAN", {"default": True, "label_on": "Active", "label_off": "Stop/Mute/Bypass"}), + "behavior": (["Stop", "Mute", "Bypass"], ), + }, + "hidden": {"unique_id": "UNIQUE_ID", "prompt": "PROMPT", "extra_pnginfo": "EXTRA_PNGINFO"} + } + + FUNCTION = "doit" + CATEGORY = "Flux-Continuum/Utilities" + RETURN_TYPES = (any_typ,) + RETURN_NAMES = ("value",) + OUTPUT_NODE = True + + DESCRIPTION = ("When behavior is Stop and mode is active, the input value is passed directly to the output.\n" + "When behavior is Mute/Bypass and mode is active, the node connected to the output is changed to active state.\n" + "When behavior is Stop and mode is Stop/Mute/Bypass, the workflow execution of the current node is halted.\n" + "When behavior is Mute/Bypass and mode is Stop/Mute/Bypass, the node connected to the output is changed to Mute/Bypass state.") + + @classmethod + def IS_CHANGED(self, value, mode, behavior="Stop", unique_id=None, prompt=None, extra_pnginfo=None): + if behavior == "Stop": + return value, mode, behavior + + try: + if prompt and 'extra_data' in prompt and 'extra_pnginfo' in prompt['extra_data']: + workflow = prompt['extra_data']['extra_pnginfo'].get('workflow') + if workflow: + nodes_map, links = workflow_to_map(workflow) + next_nodes = [] + for link in nodes_map[unique_id]['outputs'][0]['links']: + node_id = str(links[link][2]) + if node_id in nodes_map: + next_nodes.append(node_id) + return next_nodes + except: + pass + + return 0 + + def doit(self, value, mode, behavior="Stop", unique_id=None, prompt=None, extra_pnginfo=None): + # Check for execution model support + if is_execution_model_version_supported(): + from comfy_execution.graph import ExecutionBlocker + else: + print("[Impact Pack] ImpactControlBridge: ComfyUI is outdated. The 'Stop' behavior cannot function properly.") + + # Handle Stop behavior + if behavior == "Stop": + if mode: + return (value, ) + else: + return (ExecutionBlocker(None), ) + + # Handle other behaviors + try: + # Validate extra_pnginfo + if not extra_pnginfo or not isinstance(extra_pnginfo, dict) or 'workflow' not in extra_pnginfo: + return (value, ) + + workflow_nodes, links = workflow_to_map(extra_pnginfo['workflow']) + + # Initialize node lists + active_nodes = [] + mute_nodes = [] + bypass_nodes = [] + + node_outputs = workflow_nodes.get(unique_id, {}).get('outputs', []) + if not node_outputs: + return (value, ) + + output_links = node_outputs[0].get('links', []) + + for link in output_links: + try: + node_id = str(links[link][2]) + next_nodes = [] + if node_id in workflow_nodes: + next_nodes.append(node_id) + + for next_node_id in next_nodes: + node_mode = workflow_nodes[next_node_id].get('mode', 0) + + if node_mode == 0: + active_nodes.append(next_node_id) + elif node_mode == 2: + mute_nodes.append(next_node_id) + elif node_mode == 4: + bypass_nodes.append(next_node_id) + except: + continue + + # Handle mode-specific behavior + if mode: + # active + should_be_active_nodes = mute_nodes + bypass_nodes + if should_be_active_nodes: + PromptServer.instance.send_sync("impact-bridge-continue", + {"node_id": unique_id, + 'actives': list(should_be_active_nodes)}) + nodes.interrupt_processing() + + elif behavior == "Mute" or behavior == True: + # mute + should_be_mute_nodes = active_nodes + bypass_nodes + if should_be_mute_nodes: + PromptServer.instance.send_sync("impact-bridge-continue", + {"node_id": unique_id, + 'mutes': list(should_be_mute_nodes)}) + nodes.interrupt_processing() + + else: + # bypass + should_be_bypass_nodes = active_nodes + mute_nodes + if should_be_bypass_nodes: + PromptServer.instance.send_sync("impact-bridge-continue", + {"node_id": unique_id, + 'bypasses': list(should_be_bypass_nodes)}) + nodes.interrupt_processing() + + except Exception as e: + print(f"[Impact Pack] Error in ImpactControlBridge: {str(e)}") + + return (value, ) + +class BooleanToEnabled: + """Convert boolean value to enabled string format""" + def __init__(self): + pass + + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + "BOOLEAN": ("BOOLEAN",), + }, + } + + RETURN_TYPES = (["true", "false", "remote"],) # Match the exact format from RemoteQueueWorker + RETURN_NAMES = ("enabled",) + FUNCTION = "convert" + CATEGORY = "Flux-Continuum/Utilities" + TITLE = "Boolean to Enabled" + DESCRIPTION = "Converts boolean values to 'true'/'false'/'remote' strings for ComfyUI_NetDist" + + def convert(self, BOOLEAN): + # Convert boolean to appropriate string value + return ("true" if BOOLEAN else "false",) + +class OutputGetString: + @classmethod + def INPUT_TYPES(s): + return { + "required": { + + }, + "hidden": { + "unique_id": "UNIQUE_ID", + "prompt": "PROMPT", + "title": ("STRING", {"default": ""}) + } + } + + RETURN_TYPES = ("STRING",) + RETURN_NAMES = ("STRING",) + FUNCTION = "process" + CATEGORY = "Flux-Continuum/Utilities" + OUTPUT_NODE = True + + def process(self, title, unique_id, prompt): + title = title[len("Output - "):] + return (title,) + + + +# Type definition for Vec3 +Vec3 = Tuple[float, float, float] +Vec2 = Tuple[float, float] + +# Zero vector constant +VEC3_ZERO = (0.0, 0.0, 0.0) +VEC2_ZERO = (0.0, 0.0) + +class SplitVec3: + @classmethod + def INPUT_TYPES(cls) -> Mapping[str, Any]: + return {"required": {"a": ("VEC3", {"default": VEC3_ZERO})}} + + RETURN_TYPES = ("FLOAT", "FLOAT", "FLOAT") + FUNCTION = "op" + CATEGORY = "Flux-Continuum/Utilities" + DESCRIPTION = "Splits a vector3 input into its three individual float components" + + def op(self, a: Vec3) -> tuple[float, float, float]: + return (a[0], a[1], a[2]) + +class SplitVec2: + @classmethod + def INPUT_TYPES(cls) -> Mapping[str, Any]: + return {"required": {"a": ("VEC2", {"default": (0.0, 0.0)})}} + RETURN_TYPES = ("FLOAT", "FLOAT") + FUNCTION = "op" + CATEGORY = "Flux-Continuum/Utilities" + DESCRIPTION = "Splits a vector2 input into its two individual float components" + def op(self, a) -> tuple[float, float]: + return (a[0], a[1]) + +class SimpleTextTruncate: + def __init__(self): + pass + + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + "text": ("STRING", {"forceInput": True}), + "word_count": ("INT", {"default": 10, "min": 0, "max": 99999999, "step": 1}), + } + } + + RETURN_TYPES = ("STRING",) + RETURN_NAMES = ("TEXT",) + FUNCTION = "truncate_words" + CATEGORY = "Text Operations" + DESCRIPTION = "Truncates input text to a specified number of words" + + def truncate_words(self, text, word_count): + if text is None: + return ("",) # Return as a tuple + + words = str(text).split() + result = ' '.join(words[:word_count]) + + # Return as a tuple since RETURN_TYPES is defined as a tuple + return (result,) + +class FluxContinuumModelRouter: + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "condition": ("STRING", {"default": ""}) + }, + "optional": { + "flux_fill": ("MODEL", {"lazy": True}), # Lazy load for inpainting/outpainting + "flux_depth": ("MODEL", {"lazy": True}), # Lazy load for depth + "flux_canny": ("MODEL", {"lazy": True}), # Lazy load for canny + "flux_dev": ("MODEL", {"lazy": True}), # Lazy load for default case + } + } + + RETURN_TYPES = ("MODEL",) + FUNCTION = "route_model" + CATEGORY = "Flux-Continuum/Utilities" + DESCRIPTION = "For Flux Continuum workflow only. Routes model selection based on conditional input for different tasks (fill, depth, canny, dev)" + + def check_lazy_status(self, condition, flux_fill=None, flux_depth=None, flux_canny=None, flux_dev=None): + condition = condition.lower().strip() + needed = [] + + # Only request the model we actually need based on the condition + if condition in ["inpainting", "outpainting"]: + if flux_fill is None: + needed.append("flux_fill") + elif condition == "depth": + if flux_depth is None: + needed.append("flux_depth") + elif condition == "canny": + if flux_canny is None: + needed.append("flux_canny") + else: + if flux_dev is None: + needed.append("flux_dev") + + return needed + + def route_model(self, condition, flux_fill=None, flux_depth=None, flux_canny=None, flux_dev=None): + condition = condition.lower().strip() + + if condition in ["inpainting", "outpainting"]: + print(f"ModelRouter: Condition '{condition}' matched - Selected flux_fill model") + return (flux_fill,) + elif condition == "depth": + print(f"ModelRouter: Condition '{condition}' matched - Selected flux_depth model") + return (flux_depth,) + elif condition == "canny": + print(f"ModelRouter: Condition '{condition}' matched - Selected flux_canny model") + return (flux_canny,) + else: + return (flux_dev,) + +class ConfigurableModelRouter: + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + # This will be a text box widget on the node for manual input + "condition": ("STRING", {"multiline": False, "default": "default"}), + + # The JSON config is also a widget on the node + "routing_config": ("STRING", { + "multiline": True, + "default": '{\n "default": 1,\n "inpainting": 2,\n "depth": 3,\n "canny": 4\n}' + }), + }, + "optional": { + "model_1": ("MODEL", {"lazy": True}), + "model_2": ("MODEL", {"lazy": True}), + "model_3": ("MODEL", {"lazy": True}), + "model_4": ("MODEL", {"lazy": True}), + "model_5": ("MODEL", {"lazy": True}), + } + } + + RETURN_TYPES = ("MODEL",) + FUNCTION = "route_model" + CATEGORY = "Flux-Continuum/Utilities" + DESCRIPTION = """ +A dynamic model router that selects one of its inputs based on a configurable JSON mapping. +How to Use: +1. **Configure Logic:** Edit the `routing_config` JSON to map condition strings (e.g., `"inpainting"`) to an input index (e.g., `2`). +2. The `"default"` key is used if no other condition matches. +""" + + # It's an instance method, so it can correctly read the widget values. + def check_lazy_status(self, condition, routing_config, **kwargs): + needed = [] + try: + config = json.loads(routing_config) + + # Use the values from the widgets to find the target index + target_index = config.get(condition.strip().lower(), config.get("default", 1)) + + # Construct the name of the model input we need to load + model_key = f"model_{target_index}" + + # If the required model hasn't been loaded yet, request it by name + if kwargs.get(model_key) is None: + needed.append(model_key) + except: + # If the JSON is invalid, do nothing. + pass + + print(f"[Model Router Check] Condition: '{condition}', Needing to load: {needed}") + return needed + + def route_model(self, condition, routing_config, **kwargs): + # This logic runs after the needed model has been loaded. + config = json.loads(routing_config) + target_index = config.get(condition.strip().lower(), config.get("default", 1)) + model_key = f"model_{target_index}" + + # Check that the model exists and is connected + if model_key not in kwargs or kwargs.get(model_key) is None: + raise ValueError(f"Input '{model_key}' is required for condition '{condition}' but is not connected or loaded.") + + print(f"Model Router: Successfully routed to '{model_key}'") + return (kwargs[model_key],) + +class ImageBatchBoolean: + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "image1": ("IMAGE",), + "image2": ("IMAGE", {"lazy": True}), # Make image2 lazy + "batch_enabled": ("BOOLEAN", {"default": True}), + } + } + + RETURN_TYPES = ("IMAGE",) + FUNCTION = "batch" + CATEGORY = "Flux-Continuum/Utilities" + + def check_lazy_status(self, image1, image2, batch_enabled): + needed = [] + # Only need image2 if batching is enabled + if image2 is None and batch_enabled: + needed.append("image2") + return needed + + def batch(self, image1, image2, batch_enabled): + # If batching is disabled, just return the first image + if not batch_enabled: + return (image1,) + + # If batching is enabled, perform the normal batch operation + if image1.shape[1:] != image2.shape[1:]: + image2 = comfy.utils.common_upscale( + image2.movedim(-1,1), + image1.shape[2], + image1.shape[1], + "bilinear", + "center" + ).movedim(1,-1) + + s = torch.cat((image1, image2), dim=0) + return (s,) + +# based on ComfyUI Essentials: github.com/cubiq/ComfyUI_essentials + +MAX_RESOLUTION = 2048 +FONTS_DIR = os.path.join(os.path.dirname(os.path.realpath(__file__)), "fonts") + +def hex_to_rgba(hex_color): + hex_color = hex_color.lstrip('#') + if len(hex_color) == 6: + r, g, b = tuple(int(hex_color[i:i+2], 16) for i in (0, 2, 4)) + return (r, g, b, 255) + elif len(hex_color) == 8: + r, g, b, a = tuple(int(hex_color[i:i+2], 16) for i in (0, 2, 4, 6)) + return (r, g, b, a) + else: + raise ValueError("Invalid hex color format") + +class DrawTextConfig: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "font": (sorted([f for f in os.listdir(FONTS_DIR) if f.endswith('.ttf') or f.endswith('.otf')]), ), + "size": ("INT", { "default": 56, "min": 1, "max": 9999, "step": 1 }), + "color": ("STRING", { "multiline": False, "default": "#FFFFFF" }), + "background_color": ("STRING", { "multiline": False, "default": "#00000000" }), + "padding": ("INT", { "default": 20, "min": 0, "max": 500, "step": 1 }), + "shadow_distance": ("INT", { "default": 0, "min": 0, "max": 100, "step": 1 }), + "shadow_blur": ("INT", { "default": 0, "min": 0, "max": 100, "step": 1 }), + "shadow_color": ("STRING", { "multiline": False, "default": "#000000" }), + "horizontal_align": (["left", "center", "right"],), + "vertical_align": (["top", "center", "bottom"],), + "offset_x": ("INT", { "default": 0, "min": -MAX_RESOLUTION, "max": MAX_RESOLUTION, "step": 1 }), + "offset_y": ("INT", { "default": 0, "min": -MAX_RESOLUTION, "max": MAX_RESOLUTION, "step": 1 }), + "direction": (["ltr", "rtl"],), + }} + + RETURN_TYPES = ("TEXT_STYLE",) + FUNCTION = "configure" + CATEGORY = "text" + DESCRIPTION = "Configures text rendering parameters including font, size, color, alignment, and effects" + + def configure(self, font, size, color, background_color, padding, shadow_distance, shadow_blur, + shadow_color, horizontal_align, vertical_align, offset_x, offset_y, direction): + return ({ + "font": font, + "size": size, + "color": color, + "background_color": background_color, + "padding": padding, + "shadow_distance": shadow_distance, + "shadow_blur": shadow_blur, + "shadow_color": shadow_color, + "horizontal_align": horizontal_align, + "vertical_align": vertical_align, + "offset_x": offset_x, + "offset_y": offset_y, + "direction": direction + },) + +class ConfigurableDrawText: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "TEXT": ("STRING", {"multiline": True}), + "TEXT_STYLE": ("TEXT_STYLE",), + "IMAGE": ("IMAGE",), + }} + + RETURN_TYPES = ("IMAGE",) + FUNCTION = "draw" + CATEGORY = "text" + DESCRIPTION = "Renders text onto images using previously configured text style parameters" + + def draw(self, TEXT, TEXT_STYLE, IMAGE): + font = ImageFont.truetype(os.path.join(FONTS_DIR, TEXT_STYLE["font"]), TEXT_STYLE["size"]) + + lines = TEXT.split("\n") + if TEXT_STYLE["direction"] == "rtl": + lines = [line[::-1] for line in lines] + + ascent, descent = font.getmetrics() + line_spacing = ascent + descent + text_width = max(font.getbbox(line)[2] - font.getbbox(line)[0] for line in lines) + text_height = line_spacing * (len(lines) - 1) + ascent + descent + + IMAGE = T.ToPILImage()(IMAGE.permute([0,3,1,2])[0]).convert('RGBA') + width = IMAGE.width + height = IMAGE.height + image = Image.new('RGBA', (width, height), (0,0,0,0)) + + box_width = text_width + (TEXT_STYLE["padding"] * 2) + box_height = text_height + (TEXT_STYLE["padding"] * 2) + + if TEXT_STYLE["horizontal_align"] == "left": + box_x = TEXT_STYLE["offset_x"] + elif TEXT_STYLE["horizontal_align"] == "center": + box_x = (width - box_width) // 2 + TEXT_STYLE["offset_x"] + else: # right + box_x = width - box_width + TEXT_STYLE["offset_x"] + + if TEXT_STYLE["vertical_align"] == "top": + box_y = TEXT_STYLE["offset_y"] + elif TEXT_STYLE["vertical_align"] == "center": + box_y = (height - box_height) // 2 + TEXT_STYLE["offset_y"] + else: # bottom + box_y = height - box_height + TEXT_STYLE["offset_y"] + + x = box_x + TEXT_STYLE["padding"] + y = box_y + TEXT_STYLE["padding"] + + draw = ImageDraw.Draw(image) + draw.rectangle([box_x, box_y, box_x + box_width, box_y + box_height], + fill=hex_to_rgba(TEXT_STYLE["background_color"])) + + image_shadow = None + if TEXT_STYLE["shadow_distance"] > 0: + image_shadow = image.copy() + + for i, line in enumerate(lines): + current_y = y + (i * line_spacing) + + draw = ImageDraw.Draw(image) + draw.text((x, current_y), line, font=font, fill=hex_to_rgba(TEXT_STYLE["color"])) + + if image_shadow is not None: + draw = ImageDraw.Draw(image_shadow) + draw.text((x + TEXT_STYLE["shadow_distance"], current_y + TEXT_STYLE["shadow_distance"]), + line, font=font, fill=hex_to_rgba(TEXT_STYLE["shadow_color"])) + + if image_shadow is not None: + image_shadow = image_shadow.filter(ImageFilter.GaussianBlur(TEXT_STYLE["shadow_blur"])) + image = Image.alpha_composite(image_shadow, image) + + image = Image.alpha_composite(IMAGE, image) + image = T.ToTensor()(image).unsqueeze(0).permute([0,2,3,1]) + + return (image[:, :, :, :3],) + +MISC_CLASS_MAPPINGS = { + "DenoiseSlider": DenoiseSlider, + "StepSlider": StepSlider, + "GuidanceSlider": GuidanceSlider, + "BatchSlider": BatchSlider, + "MaxShiftSlider": MaxShiftSlider, + "ControlNetSlider": ControlNetSlider, + "IPAdapterSlider": IPAdapterSlider, + "CannySlider": CannySlider, + "SelectFromBatch": SelectFromBatch, + "GPUSlider": GPUSlider, + "SEGSPass": SEGSPass, + "IntPass": IntPass, + "PipePass": PipePass, + "LatentPass": LatentPass, + "ResolutionPicker": ResolutionPicker, + "ResolutionMultiplySlider": ResolutionMultiplySlider, + "SamplerParameterPacker": SamplerParameterPacker, + "SamplerParameterUnpacker": SamplerParameterUnpacker, + "TextVersions": TextVersions, + "ImpactControlBridgeFix": ImpactControlBridgeFix, + "BooleanToEnabled": BooleanToEnabled, + "OutputGetString": OutputGetString, + "SplitVec2": SplitVec2, + "SplitVec3": SplitVec3, + "SimpleTextTruncate": SimpleTextTruncate, + "FluxContinuumModelRouter": FluxContinuumModelRouter, + "ConfigurableModelRouter": ConfigurableModelRouter, + "ImageBatchBoolean": ImageBatchBoolean, + "DrawTextConfig": DrawTextConfig, + "ConfigurableDrawText": ConfigurableDrawText +} diff --git a/comfyui-flux-continuum/pyproject.toml b/comfyui-flux-continuum/pyproject.toml new file mode 100644 index 0000000000000000000000000000000000000000..8fd7f36aeb0aa4a278bcface52797b2952af36a9 --- /dev/null +++ b/comfyui-flux-continuum/pyproject.toml @@ -0,0 +1,15 @@ +[project] +name = "comfyui-flux-continuum" +description = "Set of custom nodes to use with the ComfyUI Flux Continuum: Modular Interface. NODES: Text Versions, Image64 Display, Tabs, Step Slider, Denoise Slider, Guidance Slider, Batch Slider, Max Shift Slider, ControlNet Slider and more" +version = "1.7.1" +license = {file = "LICENSE"} +dependencies = [] + +[project.urls] +Repository = "https://github.com/robertvoy/ComfyUI-Flux-Continuum" +# Used by Comfy Registry https://comfyregistry.org + +[tool.comfy] +PublisherId = "robertvoy" +DisplayName = "ComfyUI-Flux-Continuum" +Icon = "" diff --git a/comfyui-flux-continuum/web/getsetorder.js b/comfyui-flux-continuum/web/getsetorder.js new file mode 100644 index 0000000000000000000000000000000000000000..089973e49a563c9dbf4de332e2b469f53f7613ac --- /dev/null +++ b/comfyui-flux-continuum/web/getsetorder.js @@ -0,0 +1,64 @@ +import { app } from "../../../scripts/app.js"; + +const originalAlert = window.alert; +window.alert = (message) => { + if (message === "Error: Set node input undefined. Most likely you're missing custom nodes") { + return; + } + originalAlert(message); +}; + +// Configuration for nodes that should be forced to back +const BACKGROUND_NODE_CONFIG = { + nodes: { + "ImagePass": -200, + "GetNode": -100, + "SetNode": -150 + } +}; + +app.registerExtension({ + name: "FluxContinuum.GetSetNodeOrdering", + async setup() { + const originalLoadGraphData = app.loadGraphData; + app.loadGraphData = function(graph_data) { + const result = originalLoadGraphData.apply(this, arguments); + + // Using requestAnimationFrame instead of setTimeout for better performance + requestAnimationFrame(() => { + if (!app.graph?._nodes?.length) return; + + const nodes = app.graph._nodes; + + // Batch z-index updates + for (let i = 0; i < nodes.length; i++) { + const zIndex = BACKGROUND_NODE_CONFIG.nodes[nodes[i].type]; + if (zIndex !== undefined) { + nodes[i].z_index = zIndex; + } + } + + // In-place sort + nodes.sort((a, b) => (a.z_index || 0) - (b.z_index || 0)); + + // Mark canvas as dirty + app.canvas.setDirty(true, true); + }); + + return result; + }; + }, + + async beforeRegisterNodeDef(nodeType, nodeData, app) { + const zIndex = BACKGROUND_NODE_CONFIG.nodes[nodeType.type]; + if (zIndex === undefined) return; + + const onNodeCreated = nodeType.prototype.onNodeCreated; + nodeType.prototype.onNodeCreated = function() { + if (onNodeCreated) { + onNodeCreated.apply(this, arguments); + } + this.z_index = zIndex; + }; + } +}); \ No newline at end of file diff --git a/comfyui-flux-continuum/web/guidanceversions.js b/comfyui-flux-continuum/web/guidanceversions.js new file mode 100644 index 0000000000000000000000000000000000000000..89e4ec5e64ff5407ab3181a3f5036270cdd90a97 --- /dev/null +++ b/comfyui-flux-continuum/web/guidanceversions.js @@ -0,0 +1,160 @@ +import { app } from "../../../scripts/app.js"; + +// Configuration Constants +const TAB_CONFIG = { + width: 40, + height: 15, + fontSize: 10, + normalColor: "#0d0d0d", + selectedColor: "#666666", + textColor: "white", + borderRadius: 4, + spacing: 10, + offset: 14, + labels: ["1", "2", "3"], // 3 preset tabs + yPosition: 6 +}; + +app.registerExtension({ + name: "FluxContinuum.TabbedGuidanceSlider", + + // Modern API uses nodeCreated instead of beforeRegisterNodeDef + nodeCreated(node) { + // Only apply to GuidanceSlider nodes + if (node.type !== "GuidanceSlider" && node.comfyClass !== "GuidanceSlider") return; + + console.log("TabbedGuidanceSlider: Found GuidanceSlider node", node); + + // Store original methods + const originalOnNodeCreated = node.onNodeCreated; + const originalOnDrawForeground = node.onDrawForeground; + const originalGetBounding = node.getBounding; + const originalOnSerialize = node.onSerialize; + const originalOnConfigure = node.onConfigure; + const originalOnMouseDown = node.onMouseDown; // IMPORTANT: Store the original onMouseDown + + // Override methods + node.onNodeCreated = function() { + if (originalOnNodeCreated) { + originalOnNodeCreated.apply(this, arguments); + } + + // Initialize tab state and content + this.activeTab = 0; + this.tabContents = TAB_CONFIG.labels.map(() => ({ + value: this.widgets[0].value + })); + + // Store widget reference + this.valueWidget = this.widgets[0]; + + // Add change listener to widget + this.valueWidget.callback = () => { + this.tabContents[this.activeTab].value = this.valueWidget.value; + }; + }; + + node.onDrawForeground = function(ctx) { + if (originalOnDrawForeground) { + originalOnDrawForeground.apply(this, arguments); + } + + if (this.flags.collapsed) return; + + ctx.save(); + + // Draw tabs + TAB_CONFIG.labels.forEach((label, i) => { + const x = TAB_CONFIG.offset + (TAB_CONFIG.width + TAB_CONFIG.spacing) * i; + const y = TAB_CONFIG.yPosition; + + // Draw tab background + ctx.fillStyle = i === this.activeTab ? TAB_CONFIG.selectedColor : TAB_CONFIG.normalColor; + ctx.beginPath(); + ctx.roundRect(x, y, TAB_CONFIG.width, TAB_CONFIG.height, TAB_CONFIG.borderRadius); + ctx.fill(); + + // Draw tab text + ctx.fillStyle = TAB_CONFIG.textColor; + ctx.font = `${TAB_CONFIG.fontSize}px Arial`; + ctx.textAlign = "center"; + ctx.textBaseline = "middle"; + ctx.fillText(label, x + TAB_CONFIG.width / 2, y + TAB_CONFIG.height / 2); + }); + + ctx.restore(); + }; + + node.onMouseDown = function(event, local_pos, graphCanvas) { + const [x, y] = local_pos; + const { yPosition, height, width, spacing, offset, labels } = TAB_CONFIG; + + // Check if click is in tab area + if (y >= yPosition && y <= yPosition + height) { + for (let i = 0; i < labels.length; i++) { + const tabX = offset + (width + spacing) * i; + if (x >= tabX && x <= tabX + width) { + if (i === this.activeTab) return false; + + // Save current widget value to current tab + this.tabContents[this.activeTab] = { + value: this.valueWidget.value + }; + + // Switch tab + this.activeTab = i; + + // Load content from new tab + this.valueWidget.value = this.tabContents[i].value; + + this.setDirtyCanvas(true); + return true; + } + } + } + + // IMPORTANT: Call the original onMouseDown if we didn't handle the click + if (originalOnMouseDown) { + return originalOnMouseDown.apply(this, arguments); + } + + return false; + }; + + node.getBounding = function() { + const bounds = originalGetBounding ? originalGetBounding.apply(this, arguments) : [0, 0, 200, 100]; + const tabsHeight = Math.abs(TAB_CONFIG.yPosition) + TAB_CONFIG.height; + bounds[1] -= tabsHeight; // Extend top boundary to include tabs + bounds[3] += tabsHeight; // Add tab height to total height + return bounds; + }; + + node.onSerialize = function(o) { + if (originalOnSerialize) { + originalOnSerialize.apply(this, arguments); + } + o.tabContents = this.tabContents; + o.activeTab = this.activeTab; + }; + + node.onConfigure = function(o) { + if (originalOnConfigure) { + originalOnConfigure.apply(this, arguments); + } + if (o.tabContents && Array.isArray(o.tabContents)) { + // Ensure tabContents length matches number of tabs + this.tabContents = TAB_CONFIG.labels.map((_, i) => + o.tabContents[i] || { + value: this.valueWidget.value + } + ); + this.activeTab = o.activeTab >= 0 && o.activeTab < TAB_CONFIG.labels.length ? o.activeTab : 0; + + // Load the active tab's content + if (this.valueWidget) { + this.valueWidget.value = this.tabContents[this.activeTab].value; + } + } + }; + } +}); \ No newline at end of file diff --git a/comfyui-flux-continuum/web/help.js b/comfyui-flux-continuum/web/help.js new file mode 100644 index 0000000000000000000000000000000000000000..70ca89b07f18ed352685eb7ffe56d5f91a75d814 --- /dev/null +++ b/comfyui-flux-continuum/web/help.js @@ -0,0 +1,287 @@ +import { app } from "../../../scripts/app.js"; + +// Replace this with the category/categories used by your nodes. +const categories = ["Flux-Continuum/Utilities", "Flux-Continuum/Sliders"]; + +// --- MODIFICATION 3: Change the extension name to be unique --- +app.registerExtension({ + name: "FluxContinuum.Help", // A unique name for your extension + async beforeRegisterNodeDef(nodeType, nodeData) { + + if (app.ui.settings.getSettingValue("KJNodes.helpPopup") === false) { + return; + } + + try { + // --- MODIFICATION 4: Corrected Logic --- + // Check if the node's category matches any in our list. + const hasMatchingCategory = categories.some(cat => nodeData?.category?.startsWith(cat)); + + if (hasMatchingCategory) { + addDocumentation(nodeData, nodeType); + } + + } catch (error) { + console.error("Error in registering MyNodePack.HelpPopup", error); + } + }, +}); + +const create_documentation_stylesheet = () => { + const tag = 'my-documentation-stylesheet' // Use a unique tag + + let styleTag = document.head.querySelector(tag) + + if (!styleTag) { + styleTag = document.createElement('style') + styleTag.type = 'text/css' + styleTag.id = tag + styleTag.innerHTML = ` + .kj-documentation-popup { + background: var(--comfy-menu-bg); + position: absolute; + color: var(--fg-color); + font: 12px monospace; + line-height: 1.5em; + padding: 10px; + border-radius: 10px; + border-style: solid; + border-width: medium; + border-color: var(--border-color); + z-index: 50; /* Increased z-index */ + overflow: hidden; + max-width: 450px; /* Set a maximum width */ + min-width: 200px; /* Set a minimum width */ + word-wrap: break-word; /* Ensure long words wrap */ + } + .content-wrapper { + overflow: auto; + max-height: 100%; + /* Scrollbar styling for Chrome */ + &::-webkit-scrollbar { + width: 6px; + } + &::-webkit-scrollbar-track { + background: var(--bg-color); + } + &::-webkit-scrollbar-thumb { + background-color: var(--fg-color); + border-radius: 6px; + border: 3px solid var(--bg-color); + } + + /* Scrollbar styling for Firefox */ + scrollbar-width: thin; + scrollbar-color: var(--fg-color) var(--bg-color); + a { + color: yellow; + } + a:visited { + color: orange; + } + a:hover { + color: red; + } + } + ` + document.head.appendChild(styleTag) + } +} + +/** Add documentation widget to the selected node */ +export const addDocumentation = ( + nodeData, + nodeType, + opts = { icon_size: 14, icon_margin: 4 },) => { + + opts = opts || {} + const iconSize = opts.icon_size ? opts.icon_size : 14 + const iconMargin = opts.icon_margin ? opts.icon_margin : 4 + let docElement = null + let contentWrapper = null + //if no description in the node python code, don't do anything + if (!nodeData.description) { + return + } + + const drawFg = nodeType.prototype.onDrawForeground + nodeType.prototype.onDrawForeground = function (ctx) { + const r = drawFg ? drawFg.apply(this, arguments) : undefined + if (this.flags.collapsed) return r + + // icon position + const x = this.size[0] - iconSize - iconMargin + + // create the popup + if (this.show_doc && docElement === null) { + docElement = document.createElement('div') + contentWrapper = document.createElement('div'); + docElement.appendChild(contentWrapper); + + create_documentation_stylesheet() + contentWrapper.classList.add('content-wrapper'); + docElement.classList.add('kj-documentation-popup') + + contentWrapper.innerHTML = DOMPurify.sanitize(marked.parse(nodeData.description,)) + + // resize handle + const resizeHandle = document.createElement('div'); + resizeHandle.style.width = '0'; + resizeHandle.style.height = '0'; + resizeHandle.style.position = 'absolute'; + resizeHandle.style.bottom = '0'; + resizeHandle.style.right = '0'; + resizeHandle.style.cursor = 'se-resize'; + + // Add pseudo-elements to create a triangle shape + const borderColor = getComputedStyle(document.documentElement).getPropertyValue('--border-color').trim(); + resizeHandle.style.borderTop = '10px solid transparent'; + resizeHandle.style.borderLeft = '10px solid transparent'; + resizeHandle.style.borderBottom = `10px solid ${borderColor}`; + resizeHandle.style.borderRight = `10px solid ${borderColor}`; + + docElement.appendChild(resizeHandle) + let isResizing = false + let startX, startY, startWidth, startHeight + + resizeHandle.addEventListener('mousedown', function (e) { + e.preventDefault(); + e.stopPropagation(); + isResizing = true; + startX = e.clientX; + startY = e.clientY; + startWidth = parseInt(document.defaultView.getComputedStyle(docElement).width, 10); + startHeight = parseInt(document.defaultView.getComputedStyle(docElement).height, 10); + }, + { signal: this.docCtrl.signal }, + ); + + // close button + const closeButton = document.createElement('div'); + closeButton.textContent = '❌'; + closeButton.style.position = 'absolute'; + closeButton.style.top = '0'; + closeButton.style.right = '0'; + closeButton.style.cursor = 'pointer'; + closeButton.style.padding = '5px'; + closeButton.style.color = 'red'; + closeButton.style.fontSize = '12px'; + + docElement.appendChild(closeButton) + + closeButton.addEventListener('mousedown', (e) => { + e.stopPropagation(); + this.show_doc = !this.show_doc + docElement.parentNode.removeChild(docElement) + docElement = null + if (contentWrapper) { + contentWrapper.remove() + contentWrapper = null + } + }, + { signal: this.docCtrl.signal }, + ); + + document.addEventListener('mousemove', function (e) { + if (!isResizing) return; + const scale = app.canvas.ds.scale; + const newWidth = startWidth + (e.clientX - startX) / scale; + const newHeight = startHeight + (e.clientY - startY) / scale;; + docElement.style.width = `${newWidth}px`; + docElement.style.height = `${newHeight}px`; + }, + { signal: this.docCtrl.signal }, + ); + + document.addEventListener('mouseup', function () { + isResizing = false + }, + { signal: this.docCtrl.signal }, + ) + + document.body.appendChild(docElement) + } + // close the popup + else if (!this.show_doc && docElement !== null) { + docElement.parentNode.removeChild(docElement) + docElement = null + } + // update position of the popup + if (this.show_doc && docElement !== null) { + const rect = ctx.canvas.getBoundingClientRect() + const scaleX = rect.width / ctx.canvas.width + const scaleY = rect.height / ctx.canvas.height + + const transform = new DOMMatrix() + .scaleSelf(scaleX, scaleY) + .multiplySelf(ctx.getTransform()) + .translateSelf(this.size[0], 0) // Adjusted position slightly + .translateSelf(10, 0) + + const scale = new DOMMatrix() + .scaleSelf(transform.a, transform.d); + const bcr = app.canvas.canvas.getBoundingClientRect() + + const styleObject = { + transformOrigin: '0 0', + transform: scale, + left: `${bcr.x + transform.e}px`, + top: `${bcr.y + transform.f}px`, + }; + Object.assign(docElement.style, styleObject); + } + + ctx.save() + ctx.translate(x, iconSize - 38) + ctx.scale(iconSize / 24, iconSize / 24) + ctx.font = 'bold 24px monospace' + ctx.fillStyle = this.show_doc ? 'orange' : 'rgba(255, 255, 255, 0.4)'; + ctx.fillText('?', 0, 24) + ctx.restore() + return r + } + // handle clicking of the icon + const mouseDown = nodeType.prototype.onMouseDown + nodeType.prototype.onMouseDown = function (e, localPos, canvas) { + const r = mouseDown ? mouseDown.apply(this, arguments) : undefined + const iconX = this.size[0] - iconSize - iconMargin + const iconY = iconSize - 34 + if ( + localPos[0] > iconX && + localPos[0] < iconX + iconSize && + localPos[1] > iconY && + localPos[1] < iconY + iconSize + ) { + if (this.show_doc === undefined) { + this.show_doc = true + } else { + this.show_doc = !this.show_doc + } + if (this.show_doc) { + this.docCtrl = new AbortController() + } else { + if (this.docCtrl) { + this.docCtrl.abort() + } + } + return true; + } + return r; + } + const onRem = nodeType.prototype.onRemoved + + nodeType.prototype.onRemoved = function () { + const r = onRem ? onRem.apply(this, []) : undefined + + if (docElement) { + docElement.remove() + docElement = null + } + + if (contentWrapper) { + contentWrapper.remove() + contentWrapper = null + } + return r + } +} \ No newline at end of file diff --git a/comfyui-flux-continuum/web/hint.js b/comfyui-flux-continuum/web/hint.js new file mode 100644 index 0000000000000000000000000000000000000000..c387b43aba167d58b19e3c51156ddf5550fa78d0 --- /dev/null +++ b/comfyui-flux-continuum/web/hint.js @@ -0,0 +1,297 @@ +import { app } from "../../../scripts/app.js"; + +app.registerExtension({ + name: "FluxContinuum.HintNode", + + registerCustomNodes() { + + const LiteGraph = window.LiteGraph; + + // --- Stylesheet for the popup --- + const create_hint_stylesheet = () => { + const tagId = 'flux-hint-stylesheet-final'; + if (document.head.querySelector(`#${tagId}`)) return; + + const styleTag = document.createElement('style'); + styleTag.id = tagId; + styleTag.innerHTML = ` + .flux-hint-popup-final { + background: var(--comfy-menu-bg); + position: absolute; + color: var(--fg-color); + font: 12px monospace; + line-height: 1.5em; + padding: 25px; + border-radius: 10px; + border: 1px solid var(--border-color); + z-index: 101; + overflow: hidden; + min-width: 200px; + max-width: 500px; + min-height: 50px; + box-shadow: 0 4px 12px rgba(0,0,0,0.3); + } + .flux-hint-popup-final .content-wrapper { + overflow: auto; + max-height: 400px; + white-space: pre-wrap; + } + .flux-hint-popup-final .content-wrapper p, + .flux-hint-popup-final .content-wrapper h1, + .flux-hint-popup-final .content-wrapper h2, + .flux-hint-popup-final .content-wrapper h3, + .flux-hint-popup-final .content-wrapper h4, + .flux-hint-popup-final .content-wrapper h5, + .flux-hint-popup-final .content-wrapper h6 { + margin-top: 0.1em !important; + margin-bottom: 0.1em !important; + } + .flux-hint-edit-dialog textarea { + width: 500px; + height: 200px; + font-family: monospace; + } + .flux-hint-edit-dialog .buttons { + text-align: right; + margin-top: 10px; + } + `; + document.head.appendChild(styleTag); + }; + + // --- Define the custom Hint Node class --- + class FCHintNode extends LiteGraph.LGraphNode { + constructor() { + super("Hint"); + + this.isVirtualNode = true; + this.shape = LiteGraph.ROUND_SHAPE; + this.resizable = false; + this.size = [20, 20]; + + this.properties = { + hint_content: "Right-click me and choose 'Edit Hint' to add multi-line text!\n\n**Markdown** is supported.", + saved_size: null + }; + + this.popupElement = null; + this.contentWrapper = null; + this.docCtrl = null; + this.closeTimer = null; + + create_hint_stylesheet(); + } + + // --- Core LiteGraph Methods --- + + getExtraMenuOptions(canvas, options) { + options.unshift({ + content: "Edit Hint...", + callback: () => { + const initialValue = this.properties.hint_content; + + const dialogContent = ` +
    + +
    + + +
    +
    `; + + const dialog = canvas.createDialog(dialogContent, { + title: "Edit Hint Content", + close_on_click_outside: true, + }); + + const textarea = dialog.querySelector("textarea"); + const saveBtn = dialog.querySelector("#hint-save-btn"); + const cancelBtn = dialog.querySelector("#hint-cancel-btn"); + + saveBtn.addEventListener('click', () => { + this.properties.hint_content = textarea.value; + if (this.popupElement) { + this.updatePopupContent(); + } + dialog.close(); + }); + + cancelBtn.addEventListener('click', () => { + dialog.close(); + }); + } + }); + } + + computeSize(out) { + if (this.properties.saved_size) return this.properties.saved_size; + return [20, 20]; + } + + onAdded(graph) { + if (this.properties.saved_size) this.size = this.properties.saved_size; + } + + onResize(size) { } + + onMouseEnter(e) { + if (this.closeTimer) clearTimeout(this.closeTimer); + this.createPopup(); + } + + onMouseLeave(e) { + this.closeTimer = setTimeout(() => this.removePopup(), 300); + } + + onDrawBackground(ctx) {} + + onDrawForeground(ctx) { + if (this.flags.collapsed) return; + + ctx.save(); + ctx.font = 'bold ' + (this.size[1] * 0.6) + 'px monospace'; + ctx.fillStyle = this.popupElement ? 'orange' : 'rgba(255, 255, 255, 0.7)'; + ctx.textAlign = 'center'; + ctx.textBaseline = 'middle'; + ctx.fillText('?', this.size[0] / 2, this.size[1] / 2 + 2); + ctx.restore(); + + if (this.popupElement) { + this.updatePopupPosition(ctx); + } + } + + onRemoved() { + this.removePopup(); + } + + onSerialize(o) { + o.size = this.size; + o.hint_content = this.properties.hint_content; + } + + onConfigure(o) { + if (o.size) { + this.properties.saved_size = o.size; + this.size = o.size; + } + if (o.hint_content) this.properties.hint_content = o.hint_content; + } + + // --- Popup Management --- + updatePopupPosition(ctx) { + if (!this.popupElement || !ctx) return; + + const canvas = app.canvas.canvas; + const rect = canvas.getBoundingClientRect(); + const scaleX = rect.width / canvas.width; + const scaleY = rect.height / canvas.height; + + const transform = new DOMMatrix() + .scaleSelf(scaleX, scaleY) + .multiplySelf(ctx.getTransform()) + .translateSelf(this.size[0], 0) + .translateSelf(10 / scaleX, 0); + + const scale = new DOMMatrix().scaleSelf(transform.a, transform.d); + + Object.assign(this.popupElement.style, { + transformOrigin: '0 0', + transform: scale, + left: `${rect.x + transform.e}px`, + top: `${rect.y + transform.f}px`, + }); + } + + createPopup() { + if (this.popupElement) return; + + this.popupElement = document.createElement('div'); + this.contentWrapper = document.createElement('div'); + this.popupElement.appendChild(this.contentWrapper); + + this.popupElement.className = 'flux-hint-popup-final'; + this.contentWrapper.className = 'content-wrapper'; + + this.popupElement.addEventListener('mouseenter', () => { + if (this.closeTimer) clearTimeout(this.closeTimer); + }); + this.popupElement.addEventListener('mouseleave', () => { + this.closeTimer = setTimeout(() => this.removePopup(), 300); + }); + + this.updatePopupContent(); + this.addPopupControls(); + + document.body.appendChild(this.popupElement); + } + + removePopup() { + if (this.closeTimer) clearTimeout(this.closeTimer); + if (this.popupElement) this.popupElement.remove(); + if (this.docCtrl) this.docCtrl.abort(); + this.popupElement = null; + this.docCtrl = null; + } + + updatePopupContent() { + if (!this.contentWrapper) return; + const content = this.properties.hint_content || ""; + + if (window.marked && window.DOMPurify) { + const html = marked.parse(content, { breaks: true }); + this.contentWrapper.innerHTML = DOMPurify.sanitize(html); + } else { + this.contentWrapper.textContent = content; + } + } + + addPopupControls() { + const resizeHandle = document.createElement('div'); + Object.assign(resizeHandle.style, { + width: '0', height: '0', position: 'absolute', bottom: '0', right: '0', cursor: 'se-resize', + borderTop: '10px solid transparent', borderLeft: '10px solid transparent', + borderBottom: '10px solid var(--border-color)', borderRight: '10px solid var(--border-color)' + }); + this.popupElement.appendChild(resizeHandle); + + // ** The close button creation logic has been removed. ** + + this.docCtrl = new AbortController(); + const signal = this.docCtrl.signal; + + let isResizing = false, startX, startY, startWidth, startHeight; + + resizeHandle.addEventListener('mousedown', (e) => { + e.preventDefault(); e.stopPropagation(); + isResizing = true; + startX = e.clientX; startY = e.clientY; + startWidth = this.popupElement.offsetWidth; + startHeight = this.popupElement.offsetHeight; + }, { signal }); + + document.addEventListener('mousemove', (e) => { + if (!isResizing) return; + const newWidth = startWidth + (e.clientX - startX); + const newHeight = startHeight + (e.clientY - startY); + this.popupElement.style.width = `${newWidth}px`; + this.popupElement.style.height = `${newHeight}px`; + }, { signal }); + + document.addEventListener('mouseup', () => { isResizing = false; }, { signal }); + } + } + + // --- Register the Node with LiteGraph --- + const nodeClassName = "Hint Node"; + const nodeCategory = "Flux-Continuum/Utilities"; + + LiteGraph.registerNodeType(nodeClassName, Object.assign(FCHintNode, { + title: "Hint", + title_mode: LiteGraph.NO_TITLE, + category: nodeCategory + })); + + FCHintNode.prototype.flags = { no_title: true }; + } +}); \ No newline at end of file diff --git a/comfyui-flux-continuum/web/imagedisplay.js b/comfyui-flux-continuum/web/imagedisplay.js new file mode 100644 index 0000000000000000000000000000000000000000..8a7b94f14e7a238cb890d60e97afd706a4fb6907 --- /dev/null +++ b/comfyui-flux-continuum/web/imagedisplay.js @@ -0,0 +1,171 @@ +import { app } from "../../../scripts/app.js"; + +// Default white square image (200x200 pixels, white) +const DEFAULT_IMAGE = "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"; + +class ImageDisplay extends LGraphNode { + constructor() { + super(); + this.isVirtualNode = true; + this.shape = LiteGraph.BOX_SHAPE; + + this.size = [200, 200]; + this.bgcolor = "#00000000"; + this.color = "#00000000"; + this.resizable = true; + + // Add properties to store original dimensions and image data + this.properties = { + originalWidth: 200, + originalHeight: 200, + maintainAspectRatio: true, + imageBase64: DEFAULT_IMAGE, // Initialize with default image + }; + + this.addProperty("imageBase64", DEFAULT_IMAGE, "string"); // Add widget for image input + + this.widgets_up = true; + this.img = new Image(); + this.loaded = false; + + this.setupImage(); + } + + setupImage() { + this.img.onload = () => { + console.log("Image loaded successfully!"); + console.log("Image dimensions:", this.img.width, "x", this.img.height); + this.loaded = true; + + // Store original dimensions + this.properties.originalWidth = this.img.width; + this.properties.originalHeight = this.img.height; + + // Set initial size if not restored from previous session + if (!this.properties.lastWidth) { + this.size[0] = this.img.width; + this.size[1] = this.img.height; + } else { + // Restore previous size + this.size[0] = this.properties.lastWidth; + this.size[1] = this.properties.lastHeight; + } + + this.setDirtyCanvas(true); + }; + + this.img.onerror = (err) => { + console.error("Error loading image:", err); + // If loading fails, revert to default image + if (this.properties.imageBase64 !== DEFAULT_IMAGE) { + console.log("Reverting to default image"); + this.properties.imageBase64 = DEFAULT_IMAGE; + this.img.src = "data:image/png;base64," + DEFAULT_IMAGE; + } + }; + + // Load initial image + this.img.src = "data:image/png;base64," + this.properties.imageBase64; + } + + // Method to update image when base64 property changes + onPropertyChanged(name, value) { + if (name === "imageBase64") { + this.loaded = false; + // If value is empty, use default image + const imageData = value || DEFAULT_IMAGE; + this.img.src = "data:image/png;base64," + imageData; + } + } + + // Handle resizing with aspect ratio + onResize(size) { + if (this.properties.maintainAspectRatio && this.loaded) { + const aspectRatio = this.properties.originalWidth / this.properties.originalHeight; + const currentRatio = size[0] / size[1]; + + if (currentRatio > aspectRatio) { + size[0] = size[1] * aspectRatio; + } else { + size[1] = size[0] / aspectRatio; + } + } + + this.properties.lastWidth = size[0]; + this.properties.lastHeight = size[1]; + + return size; + } + + // Serialize the node state + onSerialize(o) { + if (this.loaded) { + o.lastWidth = this.size[0]; + o.lastHeight = this.size[1]; + o.imageBase64 = this.properties.imageBase64; // Save image data + } + } + + // Deserialize the node state + onConfigure(o) { + if (o.lastWidth !== undefined) { + this.properties.lastWidth = o.lastWidth; + this.properties.lastHeight = o.lastHeight; + } + if (o.imageBase64 !== undefined) { + this.properties.imageBase64 = o.imageBase64; + this.onPropertyChanged("imageBase64", o.imageBase64); + } + } +} + +// Override the default node drawing +const oldDrawNode = LGraphCanvas.prototype.drawNode; +LGraphCanvas.prototype.drawNode = function(node, ctx) { + if (node.constructor === ImageDisplay) { + const tmp_shape = node.shape; + const tmp_color = node.color; + const tmp_bgcolor = node.bgcolor; + + node.shape = null; + node.color = "#00000000"; + node.bgcolor = "#00000000"; + + const r = oldDrawNode.apply(this, arguments); + + if (node.img && node.loaded) { + ctx.save(); + ctx.drawImage(node.img, 0, 0, node.size[0], node.size[1]); + ctx.restore(); + } + + node.shape = tmp_shape; + node.color = tmp_color; + node.bgcolor = tmp_bgcolor; + + return r; + } + return oldDrawNode.apply(this, arguments); +}; + +app.registerExtension({ + name: "FluxContinuum.ImageDisplay", + async beforeRegisterNodeDef(nodeType, nodeData, app) { + if (nodeData.name === "ImageDisplay") { + nodeType.prototype.execute = () => {}; + } + }, + registerCustomNodes() { + LiteGraph.registerNodeType( + "ImageDisplay", + Object.assign(ImageDisplay, { + title: "ImageDisplay", + title_mode: LiteGraph.NO_TITLE, + category: "Flux-Continuum/Utilities", + comfyClass: "ImageDisplay" + }) + ); + + ImageDisplay.prototype.flags = { no_title: true }; + } +}); \ No newline at end of file diff --git a/comfyui-flux-continuum/web/imagetransfershortcut.js b/comfyui-flux-continuum/web/imagetransfershortcut.js new file mode 100644 index 0000000000000000000000000000000000000000..168fb4d6d2106df959588c849e2e0698b9a3c18d --- /dev/null +++ b/comfyui-flux-continuum/web/imagetransfershortcut.js @@ -0,0 +1,80 @@ +import { app } from "/scripts/app.js"; +import { api } from "/scripts/api.js"; + +app.registerExtension({ + name: "FluxContinuum.ImageTransfer", + + commands: [ + { + id: "imageTransfer", + label: "Image Transfer", + function: async () => { + const sourceNodeTitle = "Img Preview"; + const destNodeTitle = "Img Load"; + + try { + const sourceNode = app.graph.findNodesByTitle(sourceNodeTitle)?.[0]; + const destNode = app.graph.findNodesByTitle(destNodeTitle)?.[0]; + + if (!sourceNode || !destNode) { + console.error(`Custom Command: Could not find nodes "${sourceNodeTitle}" and/or "${destNodeTitle}".`); + return; + } + + if (!sourceNode.images || sourceNode.images.length === 0) { + console.warn(`Custom Command: Source node "${sourceNodeTitle}" has no image to copy.`); + return; + } + + // Get the current image index + let currentIndex = sourceNode.imageIndex ?? 0; + + // Ensure index is within bounds + currentIndex = Math.max(0, Math.min(currentIndex, sourceNode.images.length - 1)); + + // Use the selected image + const imageInfo = sourceNode.images[currentIndex]; + + const response = await api.fetchApi(`/view?filename=${encodeURIComponent(imageInfo.filename)}&type=${imageInfo.type}&subfolder=${encodeURIComponent(imageInfo.subfolder)}`); + const imageBlob = await response.blob(); + + const formData = new FormData(); + formData.append("image", imageBlob, imageInfo.filename); + formData.append("overwrite", "true"); + + const uploadResponse = await api.fetchApi('/upload/image', { + method: 'POST', + body: formData + }); + + const uploadResult = await uploadResponse.json(); + + if (!uploadResult || !uploadResult.name) { + throw new Error("Upload failed or did not return a valid filename from the server."); + } + + const newFilename = uploadResult.name; + const imageWidget = destNode.widgets.find((w) => w.name === "image"); + + if (imageWidget) { + imageWidget.value = newFilename; + if (imageWidget.callback) { + imageWidget.callback(imageWidget.value); + } + destNode.setDirtyCanvas(true, true); + } else { + console.error(`Custom Command: Could not find the 'image' widget on "${destNodeTitle}".`); + } + } catch (error) { + console.error("Custom Command: An error occurred:", error); + } + }, + }, + ], + keybindings: [ + { + combo: { key: "c", ctrl: true, shift: true }, + commandId: "imageTransfer", + }, + ], +}); diff --git a/comfyui-flux-continuum/web/impactpackfix.js b/comfyui-flux-continuum/web/impactpackfix.js new file mode 100644 index 0000000000000000000000000000000000000000..7837b96ada705411685b435dc158e0c00bba4423 --- /dev/null +++ b/comfyui-flux-continuum/web/impactpackfix.js @@ -0,0 +1,29 @@ +import { app } from "../../scripts/app.js"; + +app.registerExtension({ + name: "FluxContinuum.ImpactControlBridgeFix", + async beforeRegisterNodeDef(nodeType, nodeData, app) { + if(nodeData.name == "ImpactControlBridge") { + const onConnectionsChange = nodeType.prototype.onConnectionsChange; + nodeType.prototype.onConnectionsChange = function (type, index, connected, link_info) { + if(index != 0 || !link_info || this.inputs[0].type != '*') + return; + + // assign type + let slot_type = '*'; + + if(type == 2) { + slot_type = link_info.type; + } + else { + const node = app.graph.getNodeById(link_info.origin_id); + slot_type = node.outputs[link_info.origin_slot].type; + } + + this.inputs[0].type = slot_type; + this.outputs[0].type = slot_type; + this.outputs[0].label = slot_type; + } + } + } +}); \ No newline at end of file diff --git a/comfyui-flux-continuum/web/outputgetnode.js b/comfyui-flux-continuum/web/outputgetnode.js new file mode 100644 index 0000000000000000000000000000000000000000..a1a5b70a4834d066d17f8e3c82f87e7e7b190ba7 --- /dev/null +++ b/comfyui-flux-continuum/web/outputgetnode.js @@ -0,0 +1,519 @@ +import { app } from "../../../scripts/app.js"; + +//based on KJNodes SetGet: https://github.com/kijai/ComfyUI-KJNodes + +// Configuration +const CONFIG = { + NODE: { + name: "OutputGet", + category: "Flux-Continuum/Utilities", + title: "OutputGet", + defaultColor: "#FFF", + prefix: "Output -" + }, + CACHE: { + timeout: 1000, + debounceWait: 100 + }, + ERRORS: { + singletonError: "Error: Only one OutputGet node is allowed.", + noSetNodeError: "No Output SetNode found for", + errorTimeout: 5000 + } +}; + +// Helper functions +function debounce(func, wait = CONFIG.CACHE.debounceWait) { + let timeout; + return function executedFunction(...args) { + const later = () => { + clearTimeout(timeout); + func.apply(this, args); + }; + clearTimeout(timeout); + timeout = setTimeout(later, wait); + }; +} + +function createCachedFunction(fn) { + let cache = null; + let lastUpdate = 0; + + return function (...args) { + const now = Date.now(); + if (!cache || (now - lastUpdate) > CONFIG.CACHE.timeout) { + cache = fn.apply(this, args); + lastUpdate = now; + } + return cache; + }; +} + +app.registerExtension({ + name: "FluxContinuum.OutputGet", + registerCustomNodes() { + class OutputGetNode extends LGraphNode { + static instance = null; + + constructor(title) { + super(title); + + if (OutputGetNode.instance) { + alert(CONFIG.ERRORS.singletonError); + setTimeout(() => this.graph?.remove(this), 0); + return; + } + + OutputGetNode.instance = this; + + if (!this.properties) { + this.properties = {}; + } + this.properties.showOutputText = true; + const node = this; + + const widget = this.addWidget( + "combo", + "Selected", + "", + function (value, canvas, node, pos, event) { + try { + this.value = value; + node.widgets[0].value = value; + node.onRename(); + node.graph._version++; + node.setDirtyCanvas(true, true); + node.updateGetStringTitles(); + } catch (error) { + console.error("Error in combo widget callback:", error); + } + }, + { + values: () => node.getSetterNodeTitles(node.graph), + } + ); + + this.addOutput("*", '*'); + + this.onConnectionsChange = function (slotType, slot, isChangeConnect, link_info, output) { + try { + this.validateLinks(); + if (link_info && node.graph) { + const setter = node.findSetter(node.graph); + if (setter) { + let linkType = setter.inputs[0].type; + node.setType(linkType); + node.updateGetStringTitles(); + } + } + node.setDirtyCanvas(true, true); + } catch (error) { + console.error("Error in onConnectionsChange:", error); + } + }; + + this.setName = function (name) { + try { + node.widgets[0].value = name; + node.onRename(); + node.serialize(); + node.updateGetStringTitles(); + } catch (error) { + console.error("Error in setName:", error); + } + }; + + this.onRename = function () { + try { + const setter = node.findSetter(node.graph); + if (setter) { + let linkType = setter.inputs[0].type; + node.setType(linkType); + node.title = setter.widgets[0].value; + + if (app.ui.settings.getSettingValue("KJNodes.nodeAutoColor")) { + setColorAndBgColor.call(node, linkType); + } + + node.updateGetStringTitles(); + } else { + node.setType('*'); + } + } catch (error) { + console.error("Error in onRename:", error); + } + }; + + this.updateGetStringTitles = debounce(function () { + try { + const getStringNodes = this.graph._nodes.filter((n) => n.type === "OutputGetString"); + getStringNodes.forEach((getStringNode) => { + getStringNode.title = "GetString_" + this.title; + }); + } catch (error) { + console.error("Error updating GetString titles:", error); + } + }, CONFIG.CACHE.debounceWait); + + this.getSetterNodeTitles = createCachedFunction(function (graph) { + return graph._nodes + .filter(node => node.type === 'SetNode' && node.widgets[0].value.startsWith(CONFIG.NODE.prefix)) + .map(node => node.widgets[0].value) + .sort(); + }); + + this.defaultVisibility = true; + this.serialize_widgets = true; + this.drawConnection = false; + this.slotColor = CONFIG.NODE.defaultColor; + this.currentSetter = null; + this.canvas = app.canvas; + this.isVirtualNode = true; + } + + onRemoved() { + if (OutputGetNode.instance === this) { + OutputGetNode.instance = null; + } + this.drawConnection = false; + this.currentSetter = null; + } + + validateLinks() { + if (this.outputs[0].type !== '*' && this.outputs[0].links) { + this.outputs[0].links.filter((linkId) => { + const link = this.graph.links[linkId]; + return link && (link.type !== this.outputs[0].type && link.type !== '*'); + }).forEach((linkId) => { + this.graph.removeLink(linkId); + }); + } + } + + setType(type) { + this.outputs[0].name = type; + this.outputs[0].type = type; + this.validateLinks(); + } + + findSetter(graph) { + const name = this.widgets[0].value; + return graph._nodes.find( + (otherNode) => + otherNode.type === 'SetNode' && + otherNode.widgets[0].value === name && + name !== '' && + name.startsWith(CONFIG.NODE.prefix) + ); + } + + goToSetter() { + const setter = this.findSetter(this.graph); + if (setter) { + this.canvas.centerOnNode(setter); + this.canvas.selectNode(setter); + } + } + + getInputLink(slot) { + try { + const setter = this.findSetter(this.graph); + if (setter) { + const slotInfo = setter.inputs[slot]; + return this.graph.links[slotInfo.link]; + } else { + const message = `${CONFIG.ERRORS.noSetNodeError} ${this.widgets[0].value}`; + if (!window.isAlertShown) { + window.isAlertShown = true; + alert(message); + setTimeout(() => (window.isAlertShown = false), CONFIG.ERRORS.errorTimeout); + } + } + } catch (error) { + console.error("Error in getInputLink:", error); + return null; + } + } + + getExtraMenuOptions(_, options) { + let menuEntry = this.drawConnection ? "Hide connections" : "Show connections"; + + options.unshift( + { + content: "Go to output setter", + callback: () => { + this.goToSetter(); + }, + }, + { + content: menuEntry, + callback: () => { + try { + this.currentSetter = this.findSetter(this.graph); + if (!this.currentSetter) return; + let linkType = this.currentSetter.inputs[0].type; + this.drawConnection = !this.drawConnection; + this.slotColor = this.canvas.default_connection_color_byType[linkType]; + this.canvas.setDirty(true, true); + } catch (error) { + console.error("Error in menu callback:", error); + } + }, + } + ); + } + + onDrawForeground(ctx, lGraphCanvas) { + if (this.drawConnection) { + this._drawVirtualLink(lGraphCanvas, ctx); + } + } + + _drawVirtualLink(lGraphCanvas, ctx) { + if (!this.currentSetter) return; + + try { + let start_node_slotpos = this.currentSetter.getConnectionPos(false, 0); + start_node_slotpos = [ + start_node_slotpos[0] - this.pos[0], + start_node_slotpos[1] - this.pos[1], + ]; + let end_node_slotpos = [0, -LiteGraph.NODE_TITLE_HEIGHT * 0.5]; + lGraphCanvas.renderLink( + ctx, + start_node_slotpos, + end_node_slotpos, + null, + false, + null, + this.slotColor + ); + } catch (error) { + console.error("Error drawing virtual link:", error); + } + } + } + + LiteGraph.registerNodeType(CONFIG.NODE.name, OutputGetNode); + OutputGetNode.category = CONFIG.NODE.category; + + const originalCheckNodeTypes = LGraphCanvas.prototype.checkNodeTypes; + LGraphCanvas.prototype.checkNodeTypes = function() { + const r = originalCheckNodeTypes.apply(this, arguments); + + if (r && r.type === CONFIG.NODE.name && OutputGetNode.hasInstance()) { + r.disabled = true; + r.tooltip = CONFIG.ERRORS.singletonError; + } + + return r; + }; + }, +}); + +app.registerExtension({ + name: "FluxContinuum.OutputGetString", + async beforeRegisterNodeDef(nodeType, nodeData) { + if (nodeData.name !== "OutputGetString") { + return; + } + + // Ensure the widget is hidden and updated + const ensureHiddenWidget = (node) => { + let widget = node.widgets?.find((w) => w.name === "title"); + if (!widget) { + // If the widget does not exist, create it + widget = { name: "title", value: "", hidden: true, serialize: true }; + node.widgets = node.widgets || []; + node.widgets.push(widget); + } + // Keep it hidden and serialized + widget.hidden = true; + return widget; + }; + + // Update title and widget values + const updateGetStringTitles = (graph) => { + const getStringNodes = graph._nodes.filter((n) => n.type === "OutputGetString"); + const outputGetNode = graph._nodes.find((n) => n.type === CONFIG.NODE.name); + + getStringNodes.forEach((node) => { + const titleWidget = ensureHiddenWidget(node); + if (outputGetNode) { + // Update the title and widget value + const newTitle = "GetString_" + outputGetNode.title; + node.title = newTitle; + titleWidget.value = newTitle.replace("GetString_", ""); + } else { + // Default title if no OutputGet node + node.title = "GetString"; + titleWidget.value = ""; + } + }); + }; + + // Hijack app.queuePrompt to update titles on execution + const originalQueuePrompt = app.queuePrompt; + app.queuePrompt = async function () { + const graph = app.graph; + if (graph) { + updateGetStringTitles(graph); + } + return await originalQueuePrompt.apply(this, arguments); + }; + + // Initialize hidden widget on node addition + nodeType.prototype.onAdded = function (graph) { + ensureHiddenWidget(this); + this.updateTitle(); + }; + + // Update title when called + nodeType.prototype.updateTitle = function () { + if (!this.graph) { + return; + } + const outputGetNode = this.findOutputGetNode(this.graph); + if (outputGetNode) { + this.title = "GetString_" + outputGetNode.title; + } else { + this.title = "GetString"; + } + }; + + // Find the OutputGet node in the graph + nodeType.prototype.findOutputGetNode = function (graph) { + return graph._nodes.find((node) => node.type === CONFIG.NODE.name); + }; + }, +}); + +class TextDisplay extends LGraphNode { + constructor() { + super(); + this.isVirtualNode = true; + this.shape = LiteGraph.BOX_SHAPE; + this.size = [200, 50]; + this.resizable = true; + this.properties = { + fontSize: 24, + fontFamily: "Arial", + fontColor: "#ffffff", + textAlign: "center", + bgColor: "transparent", + padding: 10 + }; + this.widgets_up = true; + this.bgcolor = "#00000000"; + } + + onAdded(graph) { + // When added to a graph, move to end of nodes array + if (graph && graph._nodes) { + const index = graph._nodes.indexOf(this); + if (index !== -1) { + graph._nodes.splice(index, 1); + graph._nodes.push(this); + } + } + } + + onDragFinished() { + // After dragging, ensure node stays at end of array + if (this.graph && this.graph._nodes) { + const index = this.graph._nodes.indexOf(this); + if (index !== -1) { + this.graph._nodes.splice(index, 1); + this.graph._nodes.push(this); + } + } + } + + onDrawForeground(ctx) { + if (!this.graph) return; + + // Always ensure this node is at the end of the array before drawing + const index = this.graph._nodes.indexOf(this); + if (index !== -1 && index !== this.graph._nodes.length - 1) { + this.graph._nodes.splice(index, 1); + this.graph._nodes.push(this); + } + + const outputGetNode = this.findOutputGetNode(this.graph); + if (!outputGetNode || !outputGetNode.widgets[0]) { + this.displayText = "NO OUTPUTGET NODE FOUND"; + } else { + this.displayText = outputGetNode.widgets[0].value || "NO SELECTION"; + this.displayText = this.displayText.toUpperCase(); + } + + ctx.save(); + ctx.textAlign = this.properties.textAlign; + ctx.textBaseline = "middle"; + ctx.fillStyle = this.properties.fontColor || "#ffffff"; + ctx.font = `${this.properties.fontSize}px ${this.properties.fontFamily}`; + + const x = this.properties.textAlign === "center" ? this.size[0] / 2 : + this.properties.textAlign === "right" ? this.size[0] - 10 : 10; + + const y = this.size[1] / 2; + ctx.fillText(this.displayText, x, y); + ctx.restore(); + } + + findOutputGetNode(graph) { + return graph._nodes.find((node) => node.type === "OutputGet"); + } + + onResize(size) { + size[0] = Math.max(50, size[0]); + size[1] = Math.max(20, size[1]); + return size; + } + + onDblClick(event, pos, canvas) { + LGraphCanvas.active_canvas.showShowNodePanel(this); + } +} + +// Node type registration with required static properties +TextDisplay.title = "OutputTextDisplay"; +TextDisplay.title_mode = LiteGraph.NO_TITLE; +TextDisplay.collapsable = false; + +const oldDrawNode = LGraphCanvas.prototype.drawNode; +LGraphCanvas.prototype.drawNode = function(node, ctx) { + if (node.constructor === TextDisplay) { + const tmp_shape = node.shape; + node.shape = null; + const r = oldDrawNode.apply(this, arguments); + if (node.onDrawForeground) { + node.onDrawForeground(ctx); + } + node.shape = tmp_shape; + return r; + } + return oldDrawNode.apply(this, arguments); +}; + +app.registerExtension({ + name: "FluxContinuum.OutputTextDisplay", + registerCustomNodes() { + LiteGraph.registerNodeType( + "OutputTextDisplay", + Object.assign(TextDisplay, { + title: "OutputTextDisplay", + title_mode: LiteGraph.NO_TITLE, + category: "Flux-Continuum/Utilities", + comfyClass: "OutputTextDisplay", + "@fontSize": { type: "number" }, + "@fontFamily": { type: "string" }, + "@fontColor": { type: "string", default: "#ffffff" }, + "@bgColor": { type: "string", default: "#00000000" }, + "@textAlign": { type: "combo", values: ["left", "center", "right"] }, + "@padding": { type: "number" } + }) + ); + TextDisplay.prototype.flags = { no_title: true }; + } +}); \ No newline at end of file diff --git a/comfyui-flux-continuum/web/samplerversions.js b/comfyui-flux-continuum/web/samplerversions.js new file mode 100644 index 0000000000000000000000000000000000000000..124cc61595919c3a6f422aba3e7a04015d204be9 --- /dev/null +++ b/comfyui-flux-continuum/web/samplerversions.js @@ -0,0 +1,165 @@ +import { app } from "../../../scripts/app.js"; + +// Configuration Constants +const TAB_CONFIG = { + width: 40, + height: 15, + fontSize: 10, + normalColor: "#0d0d0d", + selectedColor: "#666666", + textColor: "white", + borderRadius: 4, + spacing: 10, + offset: 16, + labels: ["1", "2", "3"], // 3 tabs + yPosition: 6 +}; + +app.registerExtension({ + name: "FluxContinuum.SamplerParameterPacker", + nodeCreated(node) { + // Only apply to SamplerParameterPacker nodes + if (node.type !== "SamplerParameterPacker" && node.comfyClass !== "SamplerParameterPacker") return; + + // Preserve original methods + const originalOnNodeCreated = node.onNodeCreated; + const originalOnDrawForeground = node.onDrawForeground; + const originalGetBounding = node.getBounding; + const originalOnSerialize = node.onSerialize; + const originalOnConfigure = node.onConfigure; + const originalOnMouseDown = node.onMouseDown; // IMPORTANT: Store the original onMouseDown + + node.onNodeCreated = function() { + if (originalOnNodeCreated) { + originalOnNodeCreated.apply(this, arguments); + } + + // Initialize tab state and content + this.activeTab = 0; + this.tabContents = TAB_CONFIG.labels.map(() => ({ + sampler: this.widgets[0].value, + scheduler: this.widgets[1].value + })); + + // Store widget references + this.samplerWidget = this.widgets[0]; + this.schedulerWidget = this.widgets[1]; + + // Add change listeners to widgets + this.samplerWidget.callback = () => { + this.tabContents[this.activeTab].sampler = this.samplerWidget.value; + }; + + this.schedulerWidget.callback = () => { + this.tabContents[this.activeTab].scheduler = this.schedulerWidget.value; + }; + }; + + node.onDrawForeground = function(ctx) { + if (originalOnDrawForeground) { + originalOnDrawForeground.apply(this, arguments); + } + + if (this.flags.collapsed) return; + + ctx.save(); + + // Draw tabs + TAB_CONFIG.labels.forEach((label, i) => { + const x = TAB_CONFIG.offset + (TAB_CONFIG.width + TAB_CONFIG.spacing) * i; + const y = TAB_CONFIG.yPosition; + + // Draw tab background + ctx.fillStyle = i === this.activeTab ? TAB_CONFIG.selectedColor : TAB_CONFIG.normalColor; + ctx.beginPath(); + ctx.roundRect(x, y, TAB_CONFIG.width, TAB_CONFIG.height, TAB_CONFIG.borderRadius); + ctx.fill(); + + // Draw tab text + ctx.fillStyle = TAB_CONFIG.textColor; + ctx.font = `${TAB_CONFIG.fontSize}px Arial`; + ctx.textAlign = "center"; + ctx.textBaseline = "middle"; + ctx.fillText(label, x + TAB_CONFIG.width / 2, y + TAB_CONFIG.height / 2); + }); + + ctx.restore(); + }; + + node.onMouseDown = function(event, local_pos, graphCanvas) { + const [x, y] = local_pos; + const { yPosition, height, width, spacing, offset, labels } = TAB_CONFIG; + + // Check if click is in tab area + if (y >= yPosition && y <= yPosition + height) { + for (let i = 0; i < labels.length; i++) { + const tabX = offset + (width + spacing) * i; + if (x >= tabX && x <= tabX + width) { + if (i === this.activeTab) return false; + + // Save current widget values to current tab + this.tabContents[this.activeTab] = { + sampler: this.samplerWidget.value, + scheduler: this.schedulerWidget.value + }; + + // Switch tab + this.activeTab = i; + + // Load content from new tab + this.samplerWidget.value = this.tabContents[i].sampler; + this.schedulerWidget.value = this.tabContents[i].scheduler; + + this.setDirtyCanvas(true); + return true; + } + } + } + + // IMPORTANT: Call the original onMouseDown if we didn't handle the click + if (originalOnMouseDown) { + return originalOnMouseDown.apply(this, arguments); + } + + return false; + }; + + node.getBounding = function() { + const bounds = originalGetBounding ? originalGetBounding.apply(this, arguments) : [0, 0, 200, 100]; + const tabsHeight = Math.abs(TAB_CONFIG.yPosition) + TAB_CONFIG.height; + bounds[1] -= tabsHeight; // Extend top boundary to include tabs + bounds[3] += tabsHeight; // Add tab height to total height + return bounds; + }; + + node.onSerialize = function(o) { + if (originalOnSerialize) { + originalOnSerialize.apply(this, arguments); + } + o.tabContents = this.tabContents; + o.activeTab = this.activeTab; + }; + + node.onConfigure = function(o) { + if (originalOnConfigure) { + originalOnConfigure.apply(this, arguments); + } + if (o.tabContents && Array.isArray(o.tabContents)) { + // Ensure tabContents length matches number of tabs + this.tabContents = TAB_CONFIG.labels.map((_, i) => + o.tabContents[i] || { + sampler: this.samplerWidget.value, + scheduler: this.schedulerWidget.value + } + ); + this.activeTab = o.activeTab >= 0 && o.activeTab < TAB_CONFIG.labels.length ? o.activeTab : 0; + + // Load the active tab's content + if (this.samplerWidget && this.schedulerWidget) { + this.samplerWidget.value = this.tabContents[this.activeTab].sampler; + this.schedulerWidget.value = this.tabContents[this.activeTab].scheduler; + } + } + }; + } +}); \ No newline at end of file diff --git a/comfyui-flux-continuum/web/tabs.js b/comfyui-flux-continuum/web/tabs.js new file mode 100644 index 0000000000000000000000000000000000000000..98e7431199182963bf9ab00d96ea7a834dd1a523 --- /dev/null +++ b/comfyui-flux-continuum/web/tabs.js @@ -0,0 +1,521 @@ +import { app } from "../../../scripts/app.js"; + +/** + * Constants for node and tab dimensions and appearance + * @readonly + */ +const NODE_METRICS = { + TITLE_HEIGHT: 30, + TAB_HEIGHT: 48, + DEFAULT_TAB_X_OFFSET: 10, + DEFAULT_SECOND_TAB_OFFSET: 80, + MIN_TAB_SPACING: 5 // Minimum spacing between tabs +}; + +/** + * Style configuration for tabs + * @readonly + */ +const TAB_STYLE = { + defaultWidth: 65, + minWidth: 30, // Minimum allowed tab width + maxWidth: 200, // Maximum allowed tab width + height: 18, + fontSize: 9, + normalColor: "#5a5a5a", + textColor: "white", + borderRadius: 4, + fontFamily: "'Segoe UI', Arial, sans-serif" +}; + +/** + * Utility class for bounding box calculations + * Optimizes memory usage by reusing a single Float32Array + */ +class BoundingBoxCalculator { + constructor() { + this.boundingBoxBuffer = new Float32Array(4); + } + + /** + * Calculate the bounding box containing all provided rectangles + * @param {Array<{x: number, y: number, width: number, height: number}>} rects - Array of rectangles + * @returns {Float32Array} Bounding box as [x, y, width, height] + */ + calculate(rects) { + if (!rects || rects.length === 0) { + this.boundingBoxBuffer.set([0, 0, 0, 0]); + return this.boundingBoxBuffer; + } + + let minX = rects[0].x; + let minY = rects[0].y; + let maxX = rects[0].x + rects[0].width; + let maxY = rects[0].y + rects[0].height; + + for (let i = 1; i < rects.length; i++) { + const rect = rects[i]; + minX = Math.min(minX, rect.x); + minY = Math.min(minY, rect.y); + maxX = Math.max(maxX, rect.x + rect.width); + maxY = Math.max(maxY, rect.y + rect.height); + } + + this.boundingBoxBuffer.set([minX, minY, maxX - minX, maxY - minY]); + return this.boundingBoxBuffer; + } +} + +// Create a single instance of the calculator for reuse +const boundingBoxCalculator = new BoundingBoxCalculator(); + +/** + * Class to handle tab interactions and rendering + */ +class TabManager { + /** + * Get the width of a tab, with validation + * @param {Object} config - Tab configuration + * @param {boolean} isSecondTab - Whether this is the second tab + * @returns {number} - The tab width + */ + static getTabWidth(config, isSecondTab = false) { + try { + if (!config) { + return TAB_STYLE.defaultWidth; + } + + let width; + if (isSecondTab) { + width = config.secondTabWidth || TAB_STYLE.defaultWidth; + } else { + width = config.width || TAB_STYLE.defaultWidth; + } + + // Validate width is within acceptable range + return Math.min(Math.max(width, TAB_STYLE.minWidth), TAB_STYLE.maxWidth); + } catch (error) { + console.warn("Error getting tab width:", error); + return TAB_STYLE.defaultWidth; + } + } + + /** + * Check if tabs would overlap with current configuration + * @param {Object} properties - Node properties + * @returns {boolean} - True if tabs would overlap + */ + static wouldTabsOverlap(properties) { + if (!properties.hasSecondTab) return false; + + const tab1End = properties.tabXOffset + properties.tabWidth; + const tab2Start = properties.secondTabOffset; + + return tab2Start < tab1End + NODE_METRICS.MIN_TAB_SPACING; + } + + /** + * Draw a tab on the canvas + * @param {CanvasRenderingContext2D} ctx - Canvas context + * @param {number} x - X position + * @param {number} y - Y position + * @param {string} text - Tab text + * @param {number} width - Tab width + */ + static drawTab(ctx, x, y, text, width) { + const { height, fontSize, normalColor, textColor, borderRadius, fontFamily } = TAB_STYLE; + + ctx.save(); + ctx.fillStyle = normalColor; + + // Draw tab background + ctx.beginPath(); + ctx.moveTo(x + borderRadius, y); + ctx.lineTo(x + width - borderRadius, y); + ctx.quadraticCurveTo(x + width, y, x + width, y + borderRadius); + ctx.lineTo(x + width, y + height); + ctx.lineTo(x, y + height); + ctx.lineTo(x, y + borderRadius); + ctx.quadraticCurveTo(x, y, x + borderRadius, y); + ctx.closePath(); + ctx.fill(); + + // Text rendering with optimizations + ctx.fillStyle = textColor; + ctx.textRendering = 'optimizeLegibility'; + ctx.imageSmoothingEnabled = true; + ctx.font = `${fontSize}px ${fontFamily}`; + ctx.textAlign = "center"; + ctx.textBaseline = "middle"; + + // Truncate text if it's too long for the tab + let displayText = text; + const textWidth = ctx.measureText(text).width; + if (textWidth > width - 10) { + // Create ellipsis if text is too long + while (ctx.measureText(displayText + "...").width > width - 10 && displayText.length > 0) { + displayText = displayText.slice(0, -1); + } + displayText += "..."; + } + + ctx.fillText(displayText, x + width / 2, y + height / 2); + ctx.restore(); + } + + /** + * Handle tab click to reorder the node + * @param {LiteGraph.LGraphNode} node - The node being clicked + * @param {boolean} toFront - Whether to bring the node to front + * @returns {Function} - Cleanup function + */ + static handleNodeOrder(node, toFront = true) { + const { graph } = node; + if (!graph?._nodes) return null; + + const index = graph._nodes.indexOf(node); + if (index === -1) return null; + + let frameId; + + const handleDeselection = () => { + frameId = requestAnimationFrame(() => { + app.canvas.deselectNode(node); + node.setDirtyCanvas(true, true); + }); + }; + + // Reorder the node + graph._nodes.splice(index, 1); + if (toFront) { + graph._nodes.push(node); + } else { + graph._nodes.unshift(node); + } + + handleDeselection(); + + // Return cleanup function + return () => { + if (frameId) { + cancelAnimationFrame(frameId); + } + }; + } +} + +/** + * Helper function to check if a point is inside a rectangle + * @param {number} x - Point X coordinate + * @param {number} y - Point Y coordinate + * @param {number} rx - Rectangle X coordinate + * @param {number} ry - Rectangle Y coordinate + * @param {number} rw - Rectangle width + * @param {number} rh - Rectangle height + * @returns {boolean} - True if point is inside rectangle + */ +const isInsideRect = (x, y, rx, ry, rw, rh) => ( + x >= rx && x <= rx + rw && y >= ry && y <= ry + rh +); + +/** + * Main class to handle node tab functionality + */ +class NodeWithTabs { + /** + * Initialize a node with tab properties + * @param {LiteGraph.LGraphNode} node - The node being created + */ + static onNodeCreated(node) { + // Add properties to the node when it's created + node.addProperty("enableTabs", false, "boolean", "Enable tabs above the node"); + node.addProperty("tabWidth", TAB_STYLE.defaultWidth, "number", "Width of the main tab"); + node.addProperty("tabXOffset", NODE_METRICS.DEFAULT_TAB_X_OFFSET, "number", "X offset for the main tab"); + node.addProperty("hasSecondTab", false, "boolean", "Enable a second tab"); + node.addProperty("secondTabText", "Send Back", "string", "Text for the second tab"); + node.addProperty("secondTabOffset", NODE_METRICS.DEFAULT_SECOND_TAB_OFFSET, "number", "X offset for second tab"); + node.addProperty("secondTabWidth", TAB_STYLE.defaultWidth, "number", "Width of the second tab"); + + // Add a method to validate tab configuration + node.validateTabConfiguration = function() { + // Ensure tabs don't overlap + if (TabManager.wouldTabsOverlap(this.properties)) { + this.properties.secondTabOffset = this.properties.tabXOffset + + this.properties.tabWidth + NODE_METRICS.MIN_TAB_SPACING; + } + + // Validate tab widths + this.properties.tabWidth = TabManager.getTabWidth({ width: this.properties.tabWidth }); + this.properties.secondTabWidth = TabManager.getTabWidth( + { secondTabWidth: this.properties.secondTabWidth }, + true + ); + }; + } +} + +/** + * ComfyUI NodeTabExtension + * + * This extension adds customizable tabs to ComfyUI nodes. + * Features: + * - Add one or two tabs to a node + * - Customize tab text, width, and position + * - Click tabs to bring node to front or send to back + * + * Usage: + * 1. Enable tabs on a node by setting the "enableTabs" property to true + * 2. Customize the main tab width and position with "tabWidth" and "tabXOffset" + * 3. Enable a second tab with "hasSecondTab" and customize with "secondTabText", + * "secondTabOffset", and "secondTabWidth" + */ +app.registerExtension({ + name: "FluxContinuum.NodeTabExtension", + + // Using the modern nodeCreated hook that works with the latest ComfyUI version + nodeCreated(node) { + try { + // Store original methods to call them when appropriate + const originalMethods = { + onNodeCreated: node.onNodeCreated, + getBounding: node.getBounding, + isPointInside: node.isPointInside, + onMouseDown: node.onMouseDown, + onMouseUp: node.onMouseUp, + onDrawForeground: node.onDrawForeground, + onPropertyChanged: node.onPropertyChanged + }; + + // Override onNodeCreated method + node.onNodeCreated = function() { + if (originalMethods.onNodeCreated) { + originalMethods.onNodeCreated.apply(this, arguments); + } + NodeWithTabs.onNodeCreated(this); + }; + + // Call onNodeCreated immediately if the node is already created + if (node.flags && !node._tabsInitialized) { + NodeWithTabs.onNodeCreated(node); + node._tabsInitialized = true; + } + + // Add support for property validation + node.onPropertyChanged = function(property, value) { + if (originalMethods.onPropertyChanged) { + originalMethods.onPropertyChanged.call(this, property, value); + } + + // If a tab-related property changed, validate the configuration + const tabProperties = [ + "tabWidth", "tabXOffset", "hasSecondTab", + "secondTabOffset", "secondTabWidth" + ]; + + if (tabProperties.includes(property)) { + this.validateTabConfiguration(); + } + }; + + /** + * Get the bounding box for the node including tabs + */ + node.getBounding = function(out) { + if (!this.properties?.enableTabs || this.flags.collapsed) { + return originalMethods.getBounding.call(this, out); + } + + // Validate tab configuration + this.validateTabConfiguration(); + + out = out || new Float32Array(4); + const [width, height] = this.size; + const [nodeX, nodeY] = this.pos; + + const rects = [ + // Body and title + { + x: nodeX, + y: nodeY - NODE_METRICS.TITLE_HEIGHT, + width, + height: height + NODE_METRICS.TITLE_HEIGHT + }, + // Main tab + { + x: nodeX + this.properties.tabXOffset, + y: nodeY - NODE_METRICS.TAB_HEIGHT, + width: this.properties.tabWidth, + height: TAB_STYLE.height + } + ]; + + if (this.properties.hasSecondTab) { + rects.push({ + x: nodeX + this.properties.secondTabOffset, + y: nodeY - NODE_METRICS.TAB_HEIGHT, + width: this.properties.secondTabWidth, + height: TAB_STYLE.height + }); + } + + // Calculate the bounding box + const result = boundingBoxCalculator.calculate(rects); + + // Copy values to the out parameter + out.set(result); + return out; + }; + + /** + * Check if a point is inside the node or its tabs + */ + node.isPointInside = function(x, y, margin = 0) { + if (!this.properties?.enableTabs || this.flags.collapsed) { + return originalMethods.isPointInside.call(this, x, y, margin); + } + + // Validate tab configuration + this.validateTabConfiguration(); + + const [nodeX, nodeY] = this.pos; + const [width, height] = this.size; + + // During rectangle selection, use a simpler hit test that includes the margin + if (margin > 0) { + const boundingBox = this.getBounding(); + return isInsideRect( + x, y, + boundingBox[0] - margin, + boundingBox[1] - margin, + boundingBox[2] + 2 * margin, + boundingBox[3] + 2 * margin + ); + } + + // For regular clicking, keep the detailed hit testing + const bodyAndTitle = isInsideRect(x, y, + nodeX, nodeY - NODE_METRICS.TITLE_HEIGHT, + width, height + NODE_METRICS.TITLE_HEIGHT + ); + if (bodyAndTitle) return true; + + const mainTabHit = isInsideRect(x, y, + nodeX + this.properties.tabXOffset, + nodeY - NODE_METRICS.TAB_HEIGHT, + this.properties.tabWidth, + TAB_STYLE.height + ); + if (mainTabHit) return true; + + if (this.properties.hasSecondTab) { + return isInsideRect(x, y, + nodeX + this.properties.secondTabOffset, + nodeY - NODE_METRICS.TAB_HEIGHT, + this.properties.secondTabWidth, + TAB_STYLE.height + ); + } + + return false; + }; + + /** + * Handle mouse down event on the node or its tabs + */ + node.onMouseDown = function(event, local_pos, graphCanvas) { + if (!this.properties?.enableTabs || this.flags.collapsed) { + return originalMethods.onMouseDown?.call(this, event, local_pos, graphCanvas) ?? false; + } + + // Validate tab configuration + this.validateTabConfiguration(); + + const [localX, localY] = local_pos; + let tabHandled = false; + let cleanup = null; + + // Check main tab click + const mainTabHit = isInsideRect(localX, localY, + this.properties.tabXOffset, -NODE_METRICS.TAB_HEIGHT, + this.properties.tabWidth, TAB_STYLE.height + ); + if (mainTabHit) { + cleanup = TabManager.handleNodeOrder(this, true); + tabHandled = true; + } + + // Check second tab click + if (!tabHandled && this.properties.hasSecondTab) { + const secondTabHit = isInsideRect(localX, localY, + this.properties.secondTabOffset, -NODE_METRICS.TAB_HEIGHT, + this.properties.secondTabWidth, TAB_STYLE.height + ); + if (secondTabHit) { + cleanup = TabManager.handleNodeOrder(this, false); + tabHandled = true; + } + } + + // If tab was handled, return early + if (tabHandled) { + // Store cleanup function to be called later + this._tabCleanup = cleanup; + return true; + } + + // If no tab was clicked, delegate to original handler + const originalResult = originalMethods.onMouseDown?.call(this, event, local_pos, graphCanvas) ?? false; + return originalResult; + }; + + /** + * Clean up any pending tab operations when mouse is released + */ + node.onMouseUp = function(event) { + // Call any pending tab cleanup + if (this._tabCleanup) { + this._tabCleanup(); + this._tabCleanup = null; + } + + // Call original handler + if (originalMethods.onMouseUp) { + return originalMethods.onMouseUp.call(this, event); + } + }; + + /** + * Draw the tabs above the node + */ + node.onDrawForeground = function(ctx) { + // Call original method first + if (originalMethods.onDrawForeground) { + originalMethods.onDrawForeground.call(this, ctx); + } + + if (!this.properties?.enableTabs || this.flags.collapsed) { + return; + } + + // Validate tab configuration + this.validateTabConfiguration(); + + ctx.save(); + const baseY = -NODE_METRICS.TAB_HEIGHT; + + // Draw main tab + TabManager.drawTab(ctx, this.properties.tabXOffset, baseY, this.title, this.properties.tabWidth); + + // Draw second tab if enabled + if (this.properties.hasSecondTab) { + TabManager.drawTab(ctx, this.properties.secondTabOffset, baseY, + this.properties.secondTabText, this.properties.secondTabWidth); + } + + ctx.restore(); + }; + } catch (error) { + console.error("NodeTabExtension: Error initializing node", error); + } + } +}); \ No newline at end of file diff --git a/comfyui-flux-continuum/web/textversions.js b/comfyui-flux-continuum/web/textversions.js new file mode 100644 index 0000000000000000000000000000000000000000..51855af9fffd00f98d4f5b76b808313cc187feda --- /dev/null +++ b/comfyui-flux-continuum/web/textversions.js @@ -0,0 +1,223 @@ +import { app } from "../../../scripts/app.js"; + +/** + * Default and limit configurations + */ +const CONFIG = { + DEFAULT_VERSION_AMOUNT: 5, + MAX_VERSION_AMOUNT: 100, + MIN_VERSION_AMOUNT: 1 +}; + +/** + * Visual style configuration for version tabs + */ +const TAB_STYLE = { + width: 40, + height: 18, + fontSize: 10, + normalColor: "#333333", + selectedColor: "#666666", + textColor: "white", + borderRadius: 4, + spacing: 10, + offset: 10, + yPosition: 10 +}; + +function createTabConfig(numVersions) { + return { + ...TAB_STYLE, + labels: Array.from({length: numVersions}, (_, i) => (i + 1).toString()) + }; +} + +function debounce(func, wait) { + let timeout; + return function executedFunction(...args) { + const later = () => { + clearTimeout(timeout); + func(...args); + }; + clearTimeout(timeout); + timeout = setTimeout(later, wait); + }; +} + +app.registerExtension({ + name: "FluxContinuum.TextVersions", + + // Modern API uses nodeCreated instead of beforeRegisterNodeDef + nodeCreated(node) { + // Only apply to TextVersions nodes + if (node.type !== "TextVersions" && node.comfyClass !== "TextVersions") return; + + // Store original methods + const onNodeCreated = node.onNodeCreated; + const onDrawBackground = node.onDrawBackground; + const getBounding = node.getBounding; + const onSerialize = node.onSerialize; + const onConfigure = node.onConfigure; + const onMouseDown = node.onMouseDown; // IMPORTANT: Store the original onMouseDown + + // Add onNodeCreated to the node + node.onNodeCreated = function() { + if (onNodeCreated) { + onNodeCreated.apply(this, arguments); + } + + // Add properties + this.addProperty("versionAmount", CONFIG.DEFAULT_VERSION_AMOUNT, "number"); + + // Initialize node + if (!this.properties) { + this.properties = {}; + } + this.properties.versionAmount = this.properties.versionAmount || CONFIG.DEFAULT_VERSION_AMOUNT; + + // Create tab config based on number of versions + this.tabConfig = createTabConfig(this.properties.versionAmount); + + // Initialize tab state and content + this.activeTab = 0; + this.tabContents = Array(this.properties.versionAmount).fill(""); + + // Store reference to the text widget + this.textWidget = this.widgets.find(w => w.name === "text"); + + // Initial content setup + if (this.textWidget) { + this.textWidget.value = this.tabContents[this.activeTab]; + + // Add debounced change event listener + if (this.textWidget.inputEl) { + const saveContent = debounce(() => { + this.tabContents[this.activeTab] = this.textWidget.value; + }, 300); + + this.textWidget.inputEl.addEventListener("input", saveContent); + } + } + }; + + node.onPropertyChanged = function(name, value) { + if (name === "versionAmount") { + const newValue = Math.max(CONFIG.MIN_VERSION_AMOUNT, + Math.min(CONFIG.MAX_VERSION_AMOUNT, Math.floor(value))); + const oldContents = [...this.tabContents]; + this.properties.versionAmount = newValue; + this.tabConfig = createTabConfig(newValue); + this.tabContents = Array(newValue).fill("").map((_, i) => oldContents[i] || ""); + this.activeTab = Math.min(this.activeTab, newValue - 1); + if (this.textWidget) { + this.textWidget.value = this.tabContents[this.activeTab]; + } + this.setDirtyCanvas(true); + } + }; + + node.onDrawBackground = function(ctx) { + if (onDrawBackground) { + onDrawBackground.apply(this, arguments); + } + + if (this.flags.collapsed) return; + + ctx.save(); + + // Create clipping region for overflow + const nodeWidth = this.size[0]; + const clipPadding = 10; + ctx.beginPath(); + ctx.rect(clipPadding, this.tabConfig.yPosition - 5, + nodeWidth - (2 * clipPadding), + this.tabConfig.height + 10); + ctx.clip(); + + // Draw tabs + this.tabConfig.labels.forEach((label, i) => { + const x = this.tabConfig.offset + (this.tabConfig.width + this.tabConfig.spacing) * i; + const y = this.tabConfig.yPosition; + + ctx.fillStyle = i === this.activeTab ? this.tabConfig.selectedColor : this.tabConfig.normalColor; + ctx.beginPath(); + ctx.roundRect(x, y, this.tabConfig.width, this.tabConfig.height, this.tabConfig.borderRadius); + ctx.fill(); + + ctx.fillStyle = this.tabConfig.textColor; + ctx.font = `${this.tabConfig.fontSize}px Arial`; + ctx.textAlign = "center"; + ctx.textBaseline = "middle"; + ctx.fillText(label, x + this.tabConfig.width / 2, y + this.tabConfig.height / 2); + }); + + ctx.restore(); + }; + + node.onMouseDown = function(event, local_pos, graphCanvas) { + const [x, y] = local_pos; + const { yPosition, height, width, spacing, offset, labels } = this.tabConfig; + + if (y >= yPosition && y <= yPosition + height) { + for (let i = 0; i < labels.length; i++) { + const tabX = offset + (width + spacing) * i; + if (x >= tabX && x <= tabX + width) { + if (i === this.activeTab) return false; + + if (this.textWidget) { + this.tabContents[this.activeTab] = this.textWidget.value; + } + + this.activeTab = i; + + if (this.textWidget) { + this.textWidget.value = this.tabContents[i]; + } + + this.setDirtyCanvas(true); + return true; + } + } + } + + // IMPORTANT: Call the original onMouseDown if we didn't handle the click + if (onMouseDown) { + return onMouseDown.apply(this, arguments); + } + + return false; + }; + + node.getBounding = function() { + const bounds = getBounding?.apply(this, arguments) || new Float32Array(4); + const tabsHeight = Math.abs(this.tabConfig.yPosition) + this.tabConfig.height; + bounds[1] -= tabsHeight; + bounds[3] += tabsHeight; + return bounds; + }; + + node.onSerialize = function(o) { + if (onSerialize) { + onSerialize.apply(this, arguments); + } + o.tabContents = this.tabContents; + o.activeTab = this.activeTab; + }; + + node.onConfigure = function(o) { + if (onConfigure) { + onConfigure.apply(this, arguments); + } + + this.tabConfig = createTabConfig(this.properties.versionAmount); + + if (o.tabContents && Array.isArray(o.tabContents)) { + this.tabContents = Array(this.properties.versionAmount).fill("").map((_, i) => o.tabContents[i] || ""); + this.activeTab = o.activeTab >= 0 && o.activeTab < this.properties.versionAmount ? o.activeTab : 0; + if (this.textWidget) { + this.textWidget.value = this.tabContents[this.activeTab]; + } + } + }; + } +}); \ No newline at end of file diff --git a/comfyui-flux-continuum/workflow/Flux+ 1.3_release.json b/comfyui-flux-continuum/workflow/Flux+ 1.3_release.json new file mode 100644 index 0000000000000000000000000000000000000000..c72a167fa5a0d33b43eec10181d67f5d469597db --- /dev/null +++ b/comfyui-flux-continuum/workflow/Flux+ 1.3_release.json @@ -0,0 +1,20460 @@ +{ + "last_node_id": 3156, + "last_link_id": 4684, + "nodes": [ + { + "id": 1026, + "type": "ImagePass", + "pos": [ + 660, + 220 + ], + "size": [ + 210, + 30 + ], + "flags": { + "collapsed": true + }, + "order": 154, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 1744, + "shape": 7 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 1745 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "ImagePass", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 1113, + "type": "ImagePass", + "pos": [ + 5567.8857421875, + 6493.90966796875 + ], + "size": [ + 210, + 30 + ], + "flags": { + "collapsed": true + }, + "order": 158, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 4511, + "shape": 7 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 1859 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "ImagePass", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 1346, + "type": "ImagePass", + "pos": [ + 1790, + 1000 + ], + "size": [ + 140, + 30 + ], + "flags": { + "collapsed": true + }, + "order": 329, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 4607, + "shape": 7 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 2073 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "ImagePass", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 644, + "type": "SetNode", + "pos": [ + 4493.2578125, + 240.7759246826172 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 312, + "mode": 0, + "inputs": [ + { + "name": "BASIC_PIPE", + "type": "BASIC_PIPE", + "link": 1187 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_pipe", + "properties": { + "previousName": "pipe" + }, + "widgets_values": [ + "pipe" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 712, + "type": "SetNode", + "pos": [ + 5569.60400390625, + 1606.9547119140625 + ], + "size": [ + 210, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 346, + "mode": 0, + "inputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "link": 2030 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_Output - inpaint", + "properties": { + "previousName": "Output - inpaint" + }, + "widgets_values": [ + "Output - inpaint" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 715, + "type": "SetNode", + "pos": [ + 5973.2578125, + 220.7759552001953 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 337, + "mode": 0, + "inputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "link": 1538 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_Output - txt2img", + "properties": { + "previousName": "Output - txt2img" + }, + "widgets_values": [ + "Output - txt2img" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 716, + "type": "SetNode", + "pos": [ + 5776.8857421875, + 6489.90966796875 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 232, + "mode": 0, + "inputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "link": 1859 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_final", + "properties": { + "previousName": "final" + }, + "widgets_values": [ + "final" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 723, + "type": "SetNode", + "pos": [ + 1431.1396484375, + 1160.7176513671875 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 223, + "mode": 0, + "inputs": [ + { + "name": "STRING", + "type": "STRING", + "link": 3492 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_prompt", + "properties": { + "previousName": "prompt" + }, + "widgets_values": [ + "prompt" + ] + }, + { + "id": 729, + "type": "SetNode", + "pos": [ + 5428.25927734375, + 3585.4765625 + ], + "size": [ + 252, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 331, + "mode": 0, + "inputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "link": 2177 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_Output - ultimate upscaler", + "properties": { + "previousName": "Output - ultimate upscaler" + }, + "widgets_values": [ + "Output - ultimate upscaler" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 788, + "type": "SetNode", + "pos": [ + 1590.7579345703125, + 1348.9764404296875 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 224, + "mode": 0, + "inputs": [ + { + "name": "STRING", + "type": "STRING", + "link": 3493 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": [], + "slot_index": 0 + } + ], + "title": "Set_tags", + "properties": { + "previousName": "tags" + }, + "widgets_values": [ + "tags" + ] + }, + { + "id": 832, + "type": "SetNode", + "pos": [ + 3613.2578125, + 366.5325927734375 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 205, + "mode": 0, + "inputs": [ + { + "name": "VAE", + "type": "VAE", + "link": 4425 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_vae", + "properties": { + "previousName": "vae" + }, + "widgets_values": [ + "vae" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 873, + "type": "SetNode", + "pos": [ + 5448.25927734375, + 4285.47607421875 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 332, + "mode": 0, + "inputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "link": 2206 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_Output - detailer", + "properties": { + "previousName": "Output - detailer" + }, + "widgets_values": [ + "Output - detailer" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 925, + "type": "SetNode", + "pos": [ + 680, + 1180 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 207, + "mode": 0, + "inputs": [ + { + "name": "INT", + "type": "INT", + "link": 1589 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_seed", + "properties": { + "previousName": "seed" + }, + "widgets_values": [ + "seed" + ] + }, + { + "id": 1023, + "type": "SetNode", + "pos": [ + 670, + 220 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 230, + "mode": 0, + "inputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "link": 1745 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_send", + "properties": { + "previousName": "send" + }, + "widgets_values": [ + "send" + ] + }, + { + "id": 1061, + "type": "SetNode", + "pos": [ + 7663.2578125, + 254.91954040527344 + ], + "size": [ + 302.3999938964844, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 362, + "mode": 0, + "inputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "link": 1783 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_Output - txt2img_noise injection", + "properties": { + "previousName": "Output - txt2img_noise injection" + }, + "widgets_values": [ + "Output - txt2img_noise injection" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 1075, + "type": "SetNode", + "pos": [ + 4695.26611328125, + 999.5366821289062 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 313, + "mode": 0, + "inputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "link": 1802 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_Output - img2img", + "properties": { + "previousName": "Output - img2img" + }, + "widgets_values": [ + "Output - img2img" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 1095, + "type": "SetNode", + "pos": [ + 480, + 1070 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 211, + "mode": 0, + "inputs": [ + { + "name": "INT", + "type": "INT", + "link": 2305 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_batch", + "properties": { + "previousName": "batch" + }, + "widgets_values": [ + "batch" + ] + }, + { + "id": 1105, + "type": "SetNode", + "pos": [ + 3620, + 220 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 225, + "mode": 0, + "inputs": [ + { + "name": "MODEL", + "type": "MODEL", + "link": 3494 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_model", + "properties": { + "previousName": "model" + }, + "widgets_values": [ + "model" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 1114, + "type": "SetNode", + "pos": [ + 3620, + 500 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 204, + "mode": 0, + "inputs": [ + { + "name": "CLIP", + "type": "CLIP", + "link": 4424 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_clip", + "properties": { + "previousName": "clip" + }, + "widgets_values": [ + "clip" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 1116, + "type": "SetNode", + "pos": [ + 650, + 350 + ], + "size": [ + 285.375, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 233, + "mode": 0, + "inputs": [ + { + "name": "MODEL", + "type": "MODEL", + "link": 1863 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_loras", + "properties": { + "previousName": "loras" + }, + "widgets_values": [ + "loras" + ] + }, + { + "id": 1217, + "type": "SetNode", + "pos": [ + 1940, + 650 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 208, + "mode": 0, + "inputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "link": 2000 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_denoise", + "properties": { + "previousName": "denoise" + }, + "widgets_values": [ + "denoise" + ] + }, + { + "id": 1271, + "type": "SetNode", + "pos": [ + 4135.2470703125, + 6430.484375 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 254, + "mode": 0, + "inputs": [ + { + "name": "COMBO", + "type": "COMBO", + "link": 3464 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_scheduler", + "properties": { + "previousName": "scheduler" + }, + "widgets_values": [ + "scheduler" + ] + }, + { + "id": 1272, + "type": "SetNode", + "pos": [ + 4135.2470703125, + 6540.484375 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 255, + "mode": 0, + "inputs": [ + { + "name": "STRING", + "type": "STRING", + "link": 3466 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_scheduler_name", + "properties": { + "previousName": "scheduler_name" + }, + "widgets_values": [ + "scheduler_name" + ] + }, + { + "id": 1280, + "type": "SetNode", + "pos": [ + 670, + 750 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 209, + "mode": 0, + "inputs": [ + { + "name": "INT", + "type": "INT", + "link": 2002 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_steps", + "properties": { + "previousName": "steps" + }, + "widgets_values": [ + "steps" + ] + }, + { + "id": 1281, + "type": "SetNode", + "pos": [ + 650, + 860 + ], + "size": [ + 210, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 210, + "mode": 0, + "inputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "link": 2001 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_guidance", + "properties": { + "previousName": "guidance" + }, + "widgets_values": [ + "guidance" + ] + }, + { + "id": 1320, + "type": "SetNode", + "pos": [ + 1920, + 240 + ], + "size": [ + 210, + 60 + ], + "flags": { + "collapsed": true, + "pinned": true + }, + "order": 229, + "mode": 0, + "inputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "link": 4446 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": [], + "slot_index": 0 + } + ], + "title": "Set_loadImage", + "properties": { + "previousName": "loadImage" + }, + "widgets_values": [ + "loadImage" + ] + }, + { + "id": 1321, + "type": "SetNode", + "pos": [ + 1940, + 300 + ], + "size": [ + 210, + 60 + ], + "flags": { + "collapsed": true, + "pinned": true + }, + "order": 227, + "mode": 0, + "inputs": [ + { + "name": "MASK", + "type": "MASK", + "link": 4515 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_mask", + "properties": { + "previousName": "mask" + }, + "widgets_values": [ + "mask" + ] + }, + { + "id": 1330, + "type": "SetNode", + "pos": [ + 1881.1695556640625, + 1443.02587890625 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 212, + "mode": 0, + "inputs": [ + { + "name": "UPSCALE_MODEL", + "type": "UPSCALE_MODEL", + "link": 2361 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_upscale_model", + "properties": { + "previousName": "" + }, + "widgets_values": [ + "upscale_model" + ] + }, + { + "id": 1331, + "type": "SetNode", + "pos": [ + 1920, + 1300 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true, + "pinned": true + }, + "order": 215, + "mode": 0, + "inputs": [ + { + "name": "INT", + "type": "INT", + "link": 3215 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_res multiply", + "properties": { + "previousName": "res multiply" + }, + "widgets_values": [ + "res multiply" + ] + }, + { + "id": 1345, + "type": "SetNode", + "pos": [ + 1800, + 1050 + ], + "size": [ + 268.79998779296875, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 342, + "mode": 0, + "inputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "link": 2073 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_Output - imgload_prep", + "properties": { + "previousName": "Output - imgload_prep" + }, + "widgets_values": [ + "Output - imgload_prep" + ] + }, + { + "id": 1392, + "type": "SetNode", + "pos": [ + 4448.25927734375, + 3765.4775390625 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 294, + "mode": 0, + "inputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "link": 3433 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_Output - upscaler", + "properties": { + "previousName": "Output - upscaler" + }, + "widgets_values": [ + "Output - upscaler" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 1508, + "type": "SetNode", + "pos": [ + 4135.2470703125, + 6470.48388671875 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 252, + "mode": 0, + "inputs": [ + { + "name": "COMBO", + "type": "COMBO", + "link": 3463 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_sampler", + "properties": { + "previousName": "sampler" + }, + "widgets_values": [ + "sampler" + ] + }, + { + "id": 1510, + "type": "SetNode", + "pos": [ + 4135.2470703125, + 6500.48388671875 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 253, + "mode": 0, + "inputs": [ + { + "name": "STRING", + "type": "STRING", + "link": 3465 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_sampler_name", + "properties": { + "previousName": "sampler_name" + }, + "widgets_values": [ + "sampler_name" + ] + }, + { + "id": 1518, + "type": "SetNode", + "pos": [ + 5603.2578125, + 600.77587890625 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 240, + "mode": 0, + "inputs": [ + { + "name": "SAMPLER", + "type": "SAMPLER", + "link": 2335 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_sampler_convert", + "properties": { + "previousName": "sampler_convert" + }, + "widgets_values": [ + "sampler_convert" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 1617, + "type": "SetNode", + "pos": [ + 650, + 940 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 213, + "mode": 0, + "inputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "link": 2418 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_max shift", + "properties": { + "previousName": "max shift" + }, + "widgets_values": [ + "max shift" + ] + }, + { + "id": 2122, + "type": "SetNode", + "pos": [ + 6098.259765625, + 6450.18798828125 + ], + "size": [ + 319.20001220703125, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 0, + "mode": 0, + "inputs": [ + { + "name": "*", + "type": "*", + "link": null + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_Output END -----------------------", + "properties": { + "previousName": "Output END -----------------------" + }, + "widgets_values": [ + "Output END -----------------------" + ] + }, + { + "id": 2129, + "type": "SetNode", + "pos": [ + 6098.259765625, + 6500.18798828125 + ], + "size": [ + 310.79998779296875, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 1, + "mode": 0, + "inputs": [ + { + "name": "*", + "type": "*", + "link": null + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_--------- SELECT Output ---------", + "properties": { + "previousName": "--------- SELECT Output ---------" + }, + "widgets_values": [ + "--------- SELECT Output ---------" + ] + }, + { + "id": 2273, + "type": "SetNode", + "pos": [ + 7498.462890625, + 5117.22998046875 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 352, + "mode": 0, + "inputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "link": 3356 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_cond_cnApplied", + "properties": { + "previousName": "cond_cnApplied" + }, + "widgets_values": [ + "cond_cnApplied" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 2285, + "type": "SetNode", + "pos": [ + 5773.65234375, + 6065.1103515625 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 350, + "mode": 0, + "inputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "link": 3295 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_Output - preprocessor", + "properties": { + "previousName": "Output - preprocessor" + }, + "widgets_values": [ + "Output - preprocessor" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 2287, + "type": "SetNode", + "pos": [ + 5293.65283203125, + 5635.1103515625 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 325, + "mode": 0, + "inputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "link": 3296 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 4032 + ], + "slot_index": 0 + } + ], + "title": "Set_pre_OpenPose", + "properties": { + "previousName": "pre_OpenPose" + }, + "widgets_values": [ + "pre_OpenPose" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 2288, + "type": "SetNode", + "pos": [ + 5273.65283203125, + 5915.1103515625 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 324, + "mode": 0, + "inputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "link": 3297 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 4031 + ], + "slot_index": 0 + } + ], + "title": "Set_pre_Depth", + "properties": { + "previousName": "pre_Depth" + }, + "widgets_values": [ + "pre_Depth" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 2289, + "type": "SetNode", + "pos": [ + 5274.7216796875, + 6064.35986328125 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 323, + "mode": 0, + "inputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "link": 4026 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 4030 + ], + "slot_index": 0 + } + ], + "title": "Set_pre_Lineart", + "properties": { + "previousName": "pre_Lineart" + }, + "widgets_values": [ + "pre_Lineart" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 2290, + "type": "SetNode", + "pos": [ + 1831.615234375, + 804.8087768554688 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 216, + "mode": 0, + "inputs": [ + { + "name": "VEC3", + "type": "VEC3", + "link": 3299 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_cn_slider_depth", + "properties": { + "previousName": "cn_slider_depth" + }, + "widgets_values": [ + "cn_slider_depth" + ] + }, + { + "id": 2311, + "type": "SetNode", + "pos": [ + 1791.615234375, + 804.8087768554688 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 218, + "mode": 0, + "inputs": [ + { + "name": "VEC3", + "type": "VEC3", + "link": 3347 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_cn_slider_lineart", + "properties": { + "previousName": "cn_slider_lineart" + }, + "widgets_values": [ + "cn_slider_lineart" + ] + }, + { + "id": 2313, + "type": "SetNode", + "pos": [ + 1811.615234375, + 804.8087768554688 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 219, + "mode": 0, + "inputs": [ + { + "name": "VEC3", + "type": "VEC3", + "link": 3348 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_cn_slider_pose", + "properties": { + "previousName": "cn_slider_pose" + }, + "widgets_values": [ + "cn_slider_pose" + ] + }, + { + "id": 2315, + "type": "SetNode", + "pos": [ + 1900, + 798.9000244140625 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 220, + "mode": 0, + "inputs": [ + { + "name": "VEC3", + "type": "VEC3", + "link": 3349 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_cn_slider_tile", + "properties": { + "previousName": "cn_slider_tile" + }, + "widgets_values": [ + "cn_slider_tile" + ] + }, + { + "id": 2342, + "type": "SetNode", + "pos": [ + 7490, + 5368 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 353, + "mode": 0, + "inputs": [ + { + "name": "SEGS", + "type": "SEGS", + "link": 3403 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_segs_cnApplied", + "properties": { + "previousName": "segs_cnApplied" + }, + "widgets_values": [ + "segs_cnApplied" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 2428, + "type": "SetNode", + "pos": [ + 650, + 1350 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 221, + "mode": 0, + "inputs": [ + { + "name": "COMBO", + "type": "COMBO", + "link": 3447 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_resolution", + "properties": { + "previousName": "resolution" + }, + "widgets_values": [ + "resolution" + ] + }, + { + "id": 2437, + "type": "SetNode", + "pos": [ + 610, + 620 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 222, + "mode": 0, + "inputs": [ + { + "name": "SAMPLER_PARAMS", + "type": "SAMPLER_PARAMS", + "link": 3460 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_sampler params", + "properties": { + "previousName": "sampler params" + }, + "widgets_values": [ + "sampler params" + ] + }, + { + "id": 2475, + "type": "SetNode", + "pos": [ + 3610, + 590 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 217, + "mode": 0, + "inputs": [ + { + "name": "CONTROL_NET", + "type": "CONTROL_NET", + "link": 3505 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_controlnet_model", + "properties": { + "previousName": "controlnet_model" + }, + "widgets_values": [ + "controlnet_model" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 2507, + "type": "SetNode", + "pos": [ + 4623.2578125, + 550.7760620117188 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 249, + "mode": 0, + "inputs": [ + { + "name": "INT", + "type": "INT", + "link": 3543 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_width", + "properties": { + "previousName": "width" + }, + "widgets_values": [ + "width" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 2508, + "type": "SetNode", + "pos": [ + 4623.2578125, + 600.77587890625 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 251, + "mode": 0, + "inputs": [ + { + "name": "INT", + "type": "INT", + "link": 3544 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_height", + "properties": { + "previousName": "height" + }, + "widgets_values": [ + "height" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 2784, + "type": "SetNode", + "pos": [ + 1900, + 350 + ], + "size": [ + 210, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 228, + "mode": 0, + "inputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "link": 4469 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_loadImage_cn", + "properties": { + "previousName": "loadImage_cn" + }, + "widgets_values": [ + "loadImage_cn" + ] + }, + { + "id": 3032, + "type": "SetNode", + "pos": [ + 4623.2578125, + 500.77618408203125 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 248, + "mode": 0, + "inputs": [ + { + "name": "LATENT", + "type": "LATENT", + "link": 4514 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_latent", + "properties": { + "previousName": "latent" + }, + "widgets_values": [ + "latent" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 3057, + "type": "SetNode", + "pos": [ + 5767.1435546875, + 2728.443115234375 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 339, + "mode": 0, + "inputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "link": 4543 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_Output - outpaint", + "properties": { + "previousName": "Output - outpaint" + }, + "widgets_values": [ + "Output - outpaint" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 3094, + "type": "SetNode", + "pos": [ + 3613.2578125, + 696.5328979492188 + ], + "size": [ + 260.3999938964844, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 226, + "mode": 0, + "inputs": [ + { + "name": "CONTROL_NET", + "type": "CONTROL_NET", + "link": 4592 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_controlnet_model_inpainting", + "properties": { + "previousName": "controlnet_model_inpainting" + }, + "widgets_values": [ + "controlnet_model_inpainting" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 3103, + "type": "SetNode", + "pos": [ + 1830, + 1120 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 330, + "mode": 0, + "inputs": [ + { + "name": "MASK", + "type": "MASK", + "link": 4608 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_mask_outpainting", + "properties": { + "previousName": "mask_outpainting" + }, + "widgets_values": [ + "mask_outpainting" + ] + }, + { + "id": 596, + "type": "GetNode", + "pos": [ + 5313.2578125, + 370.7759704589844 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 2, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 1360 + ], + "slot_index": 0 + } + ], + "title": "Get_seed", + "properties": {}, + "widgets_values": [ + "seed" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 645, + "type": "GetNode", + "pos": [ + 4718.25927734375, + 4355.474609375 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 3, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "BASIC_PIPE", + "type": "BASIC_PIPE", + "links": [ + 3152 + ], + "slot_index": 0 + } + ], + "title": "Get_pipe", + "properties": {}, + "widgets_values": [ + "pipe" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 708, + "type": "GetNode", + "pos": [ + 4928.25927734375, + 3715.477294921875 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 4, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 2173 + ], + "slot_index": 0 + } + ], + "title": "Get_seed", + "properties": {}, + "widgets_values": [ + "seed" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 713, + "type": "GetNode", + "pos": [ + 480, + 200 + ], + "size": [ + 310, + 60 + ], + "flags": { + "collapsed": false, + "pinned": true + }, + "order": 5, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 1744 + ], + "slot_index": 0 + } + ], + "title": "Get_Output - txt2img", + "properties": {}, + "widgets_values": [ + "Output - txt2img" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 717, + "type": "GetNode", + "pos": [ + 1000, + 150 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 6, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 1372, + 3426, + 4414 + ], + "slot_index": 0 + } + ], + "title": "Get_final", + "properties": {}, + "widgets_values": [ + "final" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 724, + "type": "GetNode", + "pos": [ + 3953.2578125, + 590.7759399414062 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 7, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "STRING", + "type": "STRING", + "links": [ + 1442 + ], + "slot_index": 0 + } + ], + "title": "Get_prompt", + "properties": {}, + "widgets_values": [ + "prompt" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 726, + "type": "GetNode", + "pos": [ + 4839.33056640625, + 6439.1826171875 + ], + "size": [ + 313.42822265625, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 8, + "mode": 4, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 2380 + ], + "slot_index": 0 + } + ], + "title": "Get_final", + "properties": {}, + "widgets_values": [ + "final" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 793, + "type": "GetNode", + "pos": [ + 3963.2578125, + 550.7760620117188 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 9, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "STRING", + "type": "STRING", + "links": [ + 1443 + ], + "slot_index": 0 + } + ], + "title": "Get_tags", + "properties": {}, + "widgets_values": [ + "tags" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 933, + "type": "GetNode", + "pos": [ + 4533.8857421875, + 3681.912841796875 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 10, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "BASIC_PIPE", + "type": "BASIC_PIPE", + "links": [ + 1599 + ] + } + ], + "title": "Get_pipe", + "properties": {}, + "widgets_values": [ + "pipe" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 965, + "type": "GetNode", + "pos": [ + 3725.26708984375, + 999.5366821289062 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 11, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "VAE", + "type": "VAE", + "links": [ + 1680, + 1804 + ], + "slot_index": 0 + } + ], + "title": "Get_vae", + "properties": {}, + "widgets_values": [ + "vae" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1022, + "type": "GetNode", + "pos": [ + 5396.8857421875, + 6493.90966796875 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 12, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 4511 + ], + "slot_index": 0 + } + ], + "title": "Get_send", + "properties": {}, + "widgets_values": [ + "send" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1057, + "type": "GetNode", + "pos": [ + 6263.2578125, + 274.9195251464844 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 13, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 1775 + ], + "slot_index": 0 + } + ], + "title": "Get_seed", + "properties": {}, + "widgets_values": [ + "seed" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1064, + "type": "GetNode", + "pos": [ + 7333.2578125, + 214.91949462890625 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 14, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "VAE", + "type": "VAE", + "links": [ + 1786 + ] + } + ], + "title": "Get_vae", + "properties": {}, + "widgets_values": [ + "vae" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1079, + "type": "GetNode", + "pos": [ + 4105.26611328125, + 1049.53662109375 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 15, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "links": [ + 3363 + ], + "slot_index": 0 + } + ], + "title": "Get_loras", + "properties": {}, + "widgets_values": [ + "loras" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1086, + "type": "GetNode", + "pos": [ + 3965.26611328125, + 1219.53662109375 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 16, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 1813 + ], + "slot_index": 0 + } + ], + "title": "Get_seed", + "properties": {}, + "widgets_values": [ + "seed" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1099, + "type": "GetNode", + "pos": [ + 6333.2578125, + 404.919677734375 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 17, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "LATENT", + "type": "LATENT", + "links": [ + 2105 + ], + "slot_index": 0 + } + ], + "title": "Get_latent", + "properties": {}, + "widgets_values": [ + "latent" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1106, + "type": "GetNode", + "pos": [ + 650, + 350 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 18, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "links": [ + 3092 + ], + "slot_index": 0 + } + ], + "title": "Get_model", + "properties": {}, + "widgets_values": [ + "model" + ] + }, + { + "id": 1115, + "type": "GetNode", + "pos": [ + 660, + 350 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 19, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "CLIP", + "type": "CLIP", + "links": [ + 3432 + ], + "slot_index": 0 + } + ], + "title": "Get_clip", + "properties": {}, + "widgets_values": [ + "clip" + ] + }, + { + "id": 1117, + "type": "GetNode", + "pos": [ + 4143.2578125, + 370.7759704589844 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 20, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "links": [ + 1864, + 3293 + ], + "slot_index": 0 + } + ], + "title": "Get_loras", + "properties": {}, + "widgets_values": [ + "loras" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1136, + "type": "GetNode", + "pos": [ + 6623.2578125, + -9.223752975463867 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 21, + "mode": 4, + "inputs": [], + "outputs": [ + { + "name": "VAE", + "type": "VAE", + "links": [ + 1879 + ], + "slot_index": 0 + } + ], + "title": "Get_vae", + "properties": {}, + "widgets_values": [ + "vae" + ] + }, + { + "id": 1162, + "type": "GetNode", + "pos": [ + 3865.26611328125, + 1139.53662109375 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 22, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 1920 + ], + "slot_index": 0 + } + ], + "title": "Get_batch", + "properties": {}, + "widgets_values": [ + "batch" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1218, + "type": "GetNode", + "pos": [ + 4918.25927734375, + 3845.47705078125 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 23, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "links": [ + 2174 + ], + "slot_index": 0 + } + ], + "title": "Get_denoise", + "properties": {}, + "widgets_values": [ + "denoise" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1219, + "type": "GetNode", + "pos": [ + 3955.26611328125, + 1179.53662109375 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 24, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "links": [ + 1952 + ], + "slot_index": 0 + } + ], + "title": "Get_denoise", + "properties": {}, + "widgets_values": [ + "denoise" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1282, + "type": "GetNode", + "pos": [ + 3965.26611328125, + 1309.5374755859375 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 25, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 2003 + ], + "slot_index": 0 + } + ], + "title": "Get_steps", + "properties": {}, + "widgets_values": [ + "steps" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1286, + "type": "GetNode", + "pos": [ + 4025.26611328125, + 1269.5369873046875 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 26, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "STRING", + "type": "STRING", + "links": [ + 2005 + ] + } + ], + "title": "Get_scheduler_name", + "properties": {}, + "widgets_values": [ + "scheduler_name" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1287, + "type": "GetNode", + "pos": [ + 3945.26611328125, + 1349.5380859375 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 27, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "links": [ + 2006 + ], + "slot_index": 0 + } + ], + "title": "Get_guidance", + "properties": {}, + "widgets_values": [ + "guidance" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1291, + "type": "GetNode", + "pos": [ + 3643.073486328125, + 1603.580322265625 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 28, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "VAE", + "type": "VAE", + "links": [ + 2020, + 4654, + 4679 + ], + "slot_index": 0 + } + ], + "title": "Get_vae", + "properties": {}, + "widgets_values": [ + "vae" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1298, + "type": "GetNode", + "pos": [ + 4729.6015625, + 1956.954345703125 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 29, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 2023 + ], + "slot_index": 0 + } + ], + "title": "Get_seed", + "properties": {}, + "widgets_values": [ + "seed" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1300, + "type": "GetNode", + "pos": [ + 4564.45556640625, + 1847.50830078125 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 30, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 2018 + ], + "slot_index": 0 + } + ], + "title": "Get_batch", + "properties": {}, + "widgets_values": [ + "batch" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1301, + "type": "GetNode", + "pos": [ + 4729.6015625, + 1916.954345703125 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 31, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "links": [ + 2022 + ], + "slot_index": 0 + } + ], + "title": "Get_denoise", + "properties": {}, + "widgets_values": [ + "denoise" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1302, + "type": "GetNode", + "pos": [ + 4729.6015625, + 2036.9542236328125 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 32, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 2024 + ], + "slot_index": 0 + } + ], + "title": "Get_steps", + "properties": {}, + "widgets_values": [ + "steps" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1304, + "type": "GetNode", + "pos": [ + 4799.6015625, + 1996.9542236328125 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 33, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "STRING", + "type": "STRING", + "links": [ + 2014 + ] + } + ], + "title": "Get_scheduler_name", + "properties": {}, + "widgets_values": [ + "scheduler_name" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1305, + "type": "GetNode", + "pos": [ + 4269.63623046875, + 2467.340087890625 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 34, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "links": [ + 4660 + ], + "slot_index": 0 + } + ], + "title": "Get_guidance", + "properties": {}, + "widgets_values": [ + "guidance" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1308, + "type": "GetNode", + "pos": [ + 4928.25927734375, + 3755.4775390625 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 35, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 2175 + ], + "slot_index": 0 + } + ], + "title": "Get_steps", + "properties": {}, + "widgets_values": [ + "steps" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1311, + "type": "GetNode", + "pos": [ + 4918.25927734375, + 3805.4775390625 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 36, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "COMBO", + "type": "COMBO", + "links": [ + 2176 + ] + } + ], + "title": "Get_scheduler", + "properties": {}, + "widgets_values": [ + "scheduler" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1312, + "type": "GetNode", + "pos": [ + 4688.25927734375, + 4545.47509765625 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 37, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "links": [ + 2034 + ], + "slot_index": 0 + } + ], + "title": "Get_denoise", + "properties": {}, + "widgets_values": [ + "denoise" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1313, + "type": "GetNode", + "pos": [ + 4708.25927734375, + 4465.4755859375 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 38, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 2035 + ], + "slot_index": 0 + } + ], + "title": "Get_steps", + "properties": {}, + "widgets_values": [ + "steps" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1317, + "type": "GetNode", + "pos": [ + 5263.2578125, + 480.77618408203125 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 39, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "COMBO", + "type": "COMBO", + "links": [ + 2037 + ] + } + ], + "title": "Get_scheduler", + "properties": {}, + "widgets_values": [ + "scheduler" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1318, + "type": "GetNode", + "pos": [ + 5273.2578125, + 520.7761840820312 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 40, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 2038 + ] + } + ], + "title": "Get_steps", + "properties": {}, + "widgets_values": [ + "steps" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1319, + "type": "GetNode", + "pos": [ + 3933.2578125, + 630.7757568359375 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 41, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "links": [ + 2039 + ], + "slot_index": 0 + } + ], + "title": "Get_guidance", + "properties": {}, + "widgets_values": [ + "guidance" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1323, + "type": "GetNode", + "pos": [ + 3645.267578125, + 1209.53662109375 + ], + "size": [ + 280, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 42, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 2071 + ], + "slot_index": 0 + } + ], + "title": "Get_Output - imgload_prep", + "properties": {}, + "widgets_values": [ + "Output - imgload_prep" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1325, + "type": "GetNode", + "pos": [ + 3638.261474609375, + 4295.47509765625 + ], + "size": [ + 268.79998779296875, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 43, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 2202 + ], + "slot_index": 0 + } + ], + "title": "Get_Output - imgload_prep", + "properties": {}, + "widgets_values": [ + "Output - imgload_prep" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1327, + "type": "GetNode", + "pos": [ + 3633.073486328125, + 1797.580078125 + ], + "size": [ + 268.79998779296875, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 44, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 4635, + 4653, + 4680 + ], + "slot_index": 0 + } + ], + "title": "Get_Output - imgload_prep", + "properties": {}, + "widgets_values": [ + "Output - imgload_prep" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1328, + "type": "GetNode", + "pos": [ + 4558.25927734375, + 4505.47509765625 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 45, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "COMBO", + "type": "COMBO", + "links": [ + 2055 + ] + } + ], + "title": "Get_scheduler", + "properties": {}, + "widgets_values": [ + "scheduler" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1339, + "type": "GetNode", + "pos": [ + 3648.260986328125, + 3605.476318359375 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 46, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "UPSCALE_MODEL", + "type": "UPSCALE_MODEL", + "links": [ + 2163 + ], + "slot_index": 0 + } + ], + "title": "Get_upscale_model", + "properties": {}, + "widgets_values": [ + "upscale_model" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1340, + "type": "GetNode", + "pos": [ + 3658.260986328125, + 3805.4775390625 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 47, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 2064, + 2065 + ], + "slot_index": 0 + } + ], + "title": "Get_res multiply", + "properties": {}, + "widgets_values": [ + "res multiply" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1344, + "type": "GetNode", + "pos": [ + 1770, + 1180 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 48, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 2792 + ], + "slot_index": 0 + } + ], + "title": "Get_loadImage", + "properties": {}, + "widgets_values": [ + "loadImage" + ] + }, + { + "id": 1388, + "type": "GetNode", + "pos": [ + 3648.260986328125, + 3725.477294921875 + ], + "size": [ + 268.79998779296875, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 49, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 2165, + 2166 + ], + "slot_index": 0 + } + ], + "title": "Get_Output - imgload_prep", + "properties": {}, + "widgets_values": [ + "Output - imgload_prep" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1406, + "type": "GetNode", + "pos": [ + 4493.8857421875, + 4451.90966796875 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 50, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 2231 + ], + "slot_index": 0 + } + ], + "title": "Get_seed", + "properties": {}, + "widgets_values": [ + "seed" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1410, + "type": "GetNode", + "pos": [ + 3648.260986328125, + 4345.474609375 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 51, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 2212 + ], + "slot_index": 0 + } + ], + "title": "Get_batch", + "properties": {}, + "widgets_values": [ + "batch" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1515, + "type": "GetNode", + "pos": [ + 5223.2578125, + 600.77587890625 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 52, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "COMBO", + "type": "COMBO", + "links": [ + 2333 + ] + } + ], + "title": "Get_sampler", + "properties": {}, + "widgets_values": [ + "sampler" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1520, + "type": "GetNode", + "pos": [ + 6283.2578125, + 364.9195556640625 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 53, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "SAMPLER", + "type": "SAMPLER", + "links": [ + 2337, + 2338 + ], + "slot_index": 0 + } + ], + "title": "Get_sampler_convert", + "properties": {}, + "widgets_values": [ + "sampler_convert" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1523, + "type": "GetNode", + "pos": [ + 4688.25927734375, + 4585.47412109375 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 54, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "COMBO", + "type": "COMBO", + "links": [ + 2341 + ] + } + ], + "title": "Get_sampler", + "properties": {}, + "widgets_values": [ + "sampler" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1524, + "type": "GetNode", + "pos": [ + 4918.25927734375, + 3895.475341796875 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 55, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "COMBO", + "type": "COMBO", + "links": [ + 2342 + ] + } + ], + "title": "Get_sampler", + "properties": {}, + "widgets_values": [ + "sampler" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1525, + "type": "GetNode", + "pos": [ + 4768.455078125, + 2464.50830078125 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 56, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "STRING", + "type": "STRING", + "links": [ + 2343 + ], + "slot_index": 0 + } + ], + "title": "Get_sampler_name", + "properties": {}, + "widgets_values": [ + "sampler_name" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1526, + "type": "GetNode", + "pos": [ + 4035.26611328125, + 1389.53857421875 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 57, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "STRING", + "type": "STRING", + "links": [ + 2344 + ], + "slot_index": 0 + } + ], + "title": "Get_sampler_name", + "properties": {}, + "widgets_values": [ + "sampler_name" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1602, + "type": "GetNode", + "pos": [ + 4413.8857421875, + 6481.90966796875 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 58, + "mode": 4, + "inputs": [], + "outputs": [ + { + "name": "STRING", + "type": "STRING", + "links": [ + 2400 + ], + "slot_index": 0 + } + ], + "title": "Get_prompt", + "properties": {}, + "widgets_values": [ + "prompt" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1618, + "type": "GetNode", + "pos": [ + 4853.2578125, + 480.77618408203125 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 59, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "links": [ + 2404 + ], + "slot_index": 0 + } + ], + "title": "Get_max shift", + "properties": {}, + "widgets_values": [ + "max shift" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1620, + "type": "GetNode", + "pos": [ + 4713.8857421875, + 3561.912841796875 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 60, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "links": [ + 2406 + ], + "slot_index": 0 + } + ], + "title": "Get_max shift", + "properties": {}, + "widgets_values": [ + "max shift" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1621, + "type": "GetNode", + "pos": [ + 4668.0712890625, + 2504.113037109375 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 61, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "links": [ + 2407 + ], + "slot_index": 0 + } + ], + "title": "Get_max shift", + "properties": {}, + "widgets_values": [ + "max shift" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1623, + "type": "GetNode", + "pos": [ + 3935.26611328125, + 1429.538818359375 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 62, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "links": [ + 2409 + ], + "slot_index": 0 + } + ], + "title": "Get_max shift", + "properties": {}, + "widgets_values": [ + "max shift" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1677, + "type": "GetNode", + "pos": [ + 4029.69970703125, + 2223.154541015625 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 63, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "links": [ + 2471 + ], + "slot_index": 0 + } + ], + "title": "Get_denoise", + "properties": {}, + "widgets_values": [ + "denoise" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 2217, + "type": "GetNode", + "pos": [ + 4200, + 580 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 64, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 3214 + ], + "slot_index": 0 + } + ], + "title": "Get_batch", + "properties": {}, + "widgets_values": [ + "batch" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 2264, + "type": "GetNode", + "pos": [ + 3653.3984375, + 5119.3701171875 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 65, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "BASIC_PIPE", + "type": "BASIC_PIPE", + "links": [ + 3269 + ], + "slot_index": 0 + } + ], + "title": "Get_pipe", + "properties": {}, + "widgets_values": [ + "pipe" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 2270, + "type": "GetNode", + "pos": [ + 4623.396484375, + 5199.3701171875 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 66, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 3392, + 3678 + ], + "slot_index": 0 + } + ], + "title": "Get_pre_Lineart", + "properties": {}, + "widgets_values": [ + "pre_Lineart" + ] + }, + { + "id": 2275, + "type": "GetNode", + "pos": [ + 5023.2578125, + 470.776123046875 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 67, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [ + 3354 + ], + "slot_index": 0 + } + ], + "title": "Get_cond_cnApplied", + "properties": {}, + "widgets_values": [ + "cond_cnApplied" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 2291, + "type": "GetNode", + "pos": [ + 4193.396484375, + 5259.3701171875 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 68, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "VEC3", + "type": "VEC3", + "links": [ + 3300 + ], + "slot_index": 0 + } + ], + "title": "Get_cn_slider_lineart", + "properties": {}, + "widgets_values": [ + "cn_slider_lineart" + ] + }, + { + "id": 2294, + "type": "GetNode", + "pos": [ + 5353.396484375, + 5189.3701171875 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 69, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 3310, + 3396 + ], + "slot_index": 0 + } + ], + "title": "Get_pre_Depth", + "properties": {}, + "widgets_values": [ + "pre_Depth" + ] + }, + { + "id": 2295, + "type": "GetNode", + "pos": [ + 6063.396484375, + 5179.3701171875 + ], + "size": [ + 280, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 70, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 3311, + 3400 + ], + "slot_index": 0 + } + ], + "title": "Get_pre_OpenPose", + "properties": {}, + "widgets_values": [ + "pre_OpenPose" + ] + }, + { + "id": 2297, + "type": "GetNode", + "pos": [ + 4983.396484375, + 5279.3701171875 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 71, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "VEC3", + "type": "VEC3", + "links": [ + 3312 + ], + "slot_index": 0 + } + ], + "title": "Get_cn_slider_depth", + "properties": {}, + "widgets_values": [ + "cn_slider_depth" + ] + }, + { + "id": 2299, + "type": "GetNode", + "pos": [ + 5753.396484375, + 5279.3701171875 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 72, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "VEC3", + "type": "VEC3", + "links": [ + 3318 + ], + "slot_index": 0 + } + ], + "title": "Get_cn_slider_pose", + "properties": {}, + "widgets_values": [ + "cn_slider_pose" + ] + }, + { + "id": 2304, + "type": "GetNode", + "pos": [ + 6453.396484375, + 5279.3701171875 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 73, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "VEC3", + "type": "VEC3", + "links": [ + 3331 + ], + "slot_index": 0 + } + ], + "title": "Get_cn_slider_tile", + "properties": {}, + "widgets_values": [ + "cn_slider_tile" + ] + }, + { + "id": 2305, + "type": "GetNode", + "pos": [ + 6813.396484375, + 5179.3701171875 + ], + "size": [ + 268.79998779296875, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 74, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 4073 + ], + "slot_index": 0 + } + ], + "title": "Get_loadImage_cn", + "properties": {}, + "widgets_values": [ + "loadImage_cn" + ] + }, + { + "id": 2328, + "type": "GetNode", + "pos": [ + 4055.26611328125, + 1089.53662109375 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 75, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [ + 3362 + ], + "slot_index": 0 + } + ], + "title": "Get_cond_cnApplied", + "properties": {}, + "widgets_values": [ + "cond_cnApplied" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 2329, + "type": "GetNode", + "pos": [ + 4949.6015625, + 1736.9554443359375 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 76, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "links": [ + 3364 + ], + "slot_index": 0 + } + ], + "title": "Get_loras", + "properties": {}, + "widgets_values": [ + "loras" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 2330, + "type": "GetNode", + "pos": [ + 4234.45458984375, + 1847.50830078125 + ], + "size": [ + 260, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 77, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [ + 4675 + ], + "slot_index": 0 + } + ], + "title": "Get_cond_cnApplied", + "properties": {}, + "widgets_values": [ + "cond_cnApplied" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 2332, + "type": "GetNode", + "pos": [ + 4873.8857421875, + 3661.912841796875 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 78, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [ + 3366 + ], + "slot_index": 0 + } + ], + "title": "Get_cond_cnApplied", + "properties": {}, + "widgets_values": [ + "cond_cnApplied" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 2337, + "type": "GetNode", + "pos": [ + 3643.3984375, + 5359.3701171875 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 79, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "MASK", + "type": "MASK", + "links": [ + 3377 + ], + "slot_index": 0 + } + ], + "title": "Get_mask", + "properties": {}, + "widgets_values": [ + "mask" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 2343, + "type": "GetNode", + "pos": [ + 4648.25927734375, + 4315.474609375 + ], + "size": [ + 210, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 80, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "SEGS", + "type": "SEGS", + "links": [ + 3382 + ], + "slot_index": 0 + } + ], + "title": "Get_segs_cnApplied", + "properties": {}, + "widgets_values": [ + "segs_cnApplied" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 2364, + "type": "GetNode", + "pos": [ + 1150, + 150 + ], + "size": [ + 268.79998779296875, + 58 + ], + "flags": { + "collapsed": true, + "pinned": true + }, + "order": 81, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 3425 + ], + "slot_index": 0 + } + ], + "title": "Get_loadImage", + "properties": {}, + "widgets_values": [ + "loadImage" + ] + }, + { + "id": 2429, + "type": "GetNode", + "pos": [ + 4180, + 620 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 82, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "COMBO", + "type": "COMBO", + "links": [ + 3448 + ], + "slot_index": 0 + } + ], + "title": "Get_resolution", + "properties": {}, + "widgets_values": [ + "resolution" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 2438, + "type": "GetNode", + "pos": [ + 3655.25048828125, + 6490.48388671875 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 83, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "SAMPLER_PARAMS", + "type": "SAMPLER_PARAMS", + "links": [ + 3461 + ], + "slot_index": 0 + } + ], + "title": "Get_sampler params", + "properties": {}, + "widgets_values": [ + "sampler params" + ] + }, + { + "id": 2472, + "type": "GetNode", + "pos": [ + 5653.2578125, + 220.7759552001953 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 84, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "VAE", + "type": "VAE", + "links": [ + 3499 + ], + "slot_index": 0 + } + ], + "title": "Get_vae", + "properties": {}, + "widgets_values": [ + "vae" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 2474, + "type": "GetNode", + "pos": [ + 3653.3984375, + 5019.3701171875 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 85, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "CONTROL_NET", + "type": "CONTROL_NET", + "links": [ + 3528 + ], + "slot_index": 0 + } + ], + "title": "Get_controlnet_model", + "properties": {}, + "widgets_values": [ + "controlnet_model" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 2566, + "type": "GetNode", + "pos": [ + 4033.6513671875, + 6065.1103515625 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 86, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "VEC3", + "type": "VEC3", + "links": [ + 3646 + ], + "slot_index": 0 + } + ], + "title": "Get_cn_slider_lineart", + "properties": {}, + "widgets_values": [ + "cn_slider_lineart" + ] + }, + { + "id": 2571, + "type": "GetNode", + "pos": [ + 4023.651123046875, + 5895.1103515625 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 87, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "VEC3", + "type": "VEC3", + "links": [ + 3652 + ], + "slot_index": 0 + } + ], + "title": "Get_cn_slider_depth", + "properties": {}, + "widgets_values": [ + "cn_slider_depth" + ] + }, + { + "id": 2575, + "type": "GetNode", + "pos": [ + 4053.651611328125, + 5625.1103515625 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 88, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "VEC3", + "type": "VEC3", + "links": [ + 3656 + ], + "slot_index": 0 + } + ], + "title": "Get_cn_slider_pose", + "properties": {}, + "widgets_values": [ + "cn_slider_pose" + ] + }, + { + "id": 2783, + "type": "GetNode", + "pos": [ + 3663.65380859375, + 5895.1103515625 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 89, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 4012 + ] + } + ], + "title": "Get_loadImage_cn", + "properties": {}, + "widgets_values": [ + "loadImage_cn" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3060, + "type": "GetNode", + "pos": [ + 3656.754638671875, + 2731.075439453125 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 90, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "VAE", + "type": "VAE", + "links": [ + 4561, + 4591 + ], + "slot_index": 0 + } + ], + "title": "Get_vae", + "properties": {}, + "widgets_values": [ + "vae" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3065, + "type": "GetNode", + "pos": [ + 4867.1435546875, + 3128.443115234375 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 91, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 4563 + ], + "slot_index": 0 + } + ], + "title": "Get_seed", + "properties": {}, + "widgets_values": [ + "seed" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3067, + "type": "GetNode", + "pos": [ + 4697.1435546875, + 3038.443115234375 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 92, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 4638 + ], + "slot_index": 0 + } + ], + "title": "Get_batch", + "properties": {}, + "widgets_values": [ + "batch" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3069, + "type": "GetNode", + "pos": [ + 4867.1435546875, + 3208.443115234375 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 93, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 4564 + ], + "slot_index": 0 + } + ], + "title": "Get_steps", + "properties": {}, + "widgets_values": [ + "steps" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3071, + "type": "GetNode", + "pos": [ + 4937.1435546875, + 3168.443115234375 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 94, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "STRING", + "type": "STRING", + "links": [ + 4553 + ] + } + ], + "title": "Get_scheduler_name", + "properties": {}, + "widgets_values": [ + "scheduler_name" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3072, + "type": "GetNode", + "pos": [ + 4847.1435546875, + 3248.443115234375 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 95, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "links": [ + 4565 + ], + "slot_index": 0 + } + ], + "title": "Get_guidance", + "properties": {}, + "widgets_values": [ + "guidance" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3074, + "type": "GetNode", + "pos": [ + 3646.754638671875, + 2921.075439453125 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 96, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "MASK", + "type": "MASK", + "links": [ + 4620 + ], + "slot_index": 0 + } + ], + "title": "Get_mask_outpainting", + "properties": {}, + "widgets_values": [ + "mask_outpainting" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3076, + "type": "GetNode", + "pos": [ + 4957.1435546875, + 3288.443115234375 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 97, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "STRING", + "type": "STRING", + "links": [ + 4556 + ], + "slot_index": 0 + } + ], + "title": "Get_sampler_name", + "properties": {}, + "widgets_values": [ + "sampler_name" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3077, + "type": "GetNode", + "pos": [ + 4857.1435546875, + 3328.443115234375 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 98, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "links": [ + 4566 + ], + "slot_index": 0 + } + ], + "title": "Get_max shift", + "properties": {}, + "widgets_values": [ + "max shift" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3084, + "type": "GetNode", + "pos": [ + 5147.1435546875, + 2848.443115234375 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 99, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "links": [ + 4548 + ], + "slot_index": 0 + } + ], + "title": "Get_loras", + "properties": {}, + "widgets_values": [ + "loras" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3097, + "type": "GetNode", + "pos": [ + 3646.754638671875, + 2811.075439453125 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 100, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 4597, + 4664 + ], + "slot_index": 0 + } + ], + "title": "Get_Output - imgload_prep", + "properties": {}, + "widgets_values": [ + "Output - imgload_prep" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3099, + "type": "GetNode", + "pos": [ + 3646.8837890625, + 2870.912841796875 + ], + "size": [ + 260.3999938964844, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 101, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "CONTROL_NET", + "type": "CONTROL_NET", + "links": [ + 4596 + ], + "slot_index": 0 + } + ], + "title": "Get_controlnet_model_inpainting", + "properties": {}, + "widgets_values": [ + "controlnet_model_inpainting" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3106, + "type": "GetNode", + "pos": [ + 3647.1416015625, + 3008.443115234375 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 102, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "BASIC_PIPE", + "type": "BASIC_PIPE", + "links": [ + 4613 + ], + "slot_index": 0 + } + ], + "title": "Get_pipe", + "properties": {}, + "widgets_values": [ + "pipe" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3121, + "type": "GetNode", + "pos": [ + 3683, + 1848 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 103, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "MASK", + "type": "MASK", + "links": [ + 4657 + ], + "slot_index": 0 + } + ], + "title": "Get_mask", + "properties": {}, + "widgets_values": [ + "mask" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3133, + "type": "GetNode", + "pos": [ + 4403.8857421875, + 3561.912841796875 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 104, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 4666 + ], + "slot_index": 0 + } + ], + "title": "Get_batch", + "properties": {}, + "widgets_values": [ + "batch" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3152, + "type": "GetNode", + "pos": [ + 3624.07373046875, + 1729.5802001953125 + ], + "size": [ + 260.3999938964844, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 105, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "CONTROL_NET", + "type": "CONTROL_NET", + "links": [ + 4672 + ], + "slot_index": 0 + } + ], + "title": "Get_controlnet_model_inpainting", + "properties": {}, + "widgets_values": [ + "controlnet_model_inpainting" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3153, + "type": "GetNode", + "pos": [ + 3636.073486328125, + 1922.5799560546875 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 106, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "BASIC_PIPE", + "type": "BASIC_PIPE", + "links": [ + 4674 + ], + "slot_index": 0 + } + ], + "title": "Get_pipe", + "properties": {}, + "widgets_values": [ + "pipe" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 418, + "type": "ImageResizeKJ", + "pos": [ + 4283.8857421875, + 3611.912841796875 + ], + "size": [ + 320, + 240 + ], + "flags": { + "collapsed": true + }, + "order": 271, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 2180 + }, + { + "name": "get_image_size", + "type": "IMAGE", + "link": null, + "shape": 7 + }, + { + "name": "width_input", + "type": "INT", + "link": 1308, + "widget": { + "name": "width_input" + } + }, + { + "name": "height_input", + "type": "INT", + "link": 1310, + "widget": { + "name": "height_input" + } + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 3433, + 4667 + ], + "slot_index": 0, + "shape": 3 + }, + { + "name": "width", + "type": "INT", + "links": [], + "slot_index": 1, + "shape": 3 + }, + { + "name": "height", + "type": "INT", + "links": [], + "slot_index": 2, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "ImageResizeKJ", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 2048, + 2048, + "lanczos", + true, + 2, + 0, + 0, + "disabled" + ] + }, + { + "id": 429, + "type": "DetailerForEachPipe", + "pos": [ + 4868.25927734375, + 4255.47607421875 + ], + "size": [ + 320, + 540 + ], + "flags": {}, + "order": 296, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 2211 + }, + { + "name": "segs", + "type": "SEGS", + "link": 3382, + "slot_index": 1 + }, + { + "name": "basic_pipe", + "type": "BASIC_PIPE", + "link": 3152, + "slot_index": 2 + }, + { + "name": "detailer_hook", + "type": "DETAILER_HOOK", + "link": null, + "slot_index": 3, + "shape": 7 + }, + { + "name": "refiner_basic_pipe_opt", + "type": "BASIC_PIPE", + "link": null, + "shape": 7 + }, + { + "name": "scheduler_func_opt", + "type": "SCHEDULER_FUNC", + "link": null, + "shape": 7 + }, + { + "name": "seed", + "type": "INT", + "link": 2243, + "widget": { + "name": "seed" + } + }, + { + "name": "steps", + "type": "INT", + "link": 2035, + "widget": { + "name": "steps" + } + }, + { + "name": "scheduler", + "type": "COMBO", + "link": 2313, + "widget": { + "name": "scheduler" + } + }, + { + "name": "denoise", + "type": "FLOAT", + "link": 2034, + "widget": { + "name": "denoise" + } + }, + { + "name": "sampler_name", + "type": "COMBO", + "link": 2341, + "widget": { + "name": "sampler_name" + } + } + ], + "outputs": [ + { + "name": "image", + "type": "IMAGE", + "links": [ + 2205 + ], + "slot_index": 0, + "shape": 3 + }, + { + "name": "segs", + "type": "SEGS", + "links": [], + "slot_index": 1, + "shape": 3 + }, + { + "name": "basic_pipe", + "type": "BASIC_PIPE", + "links": null, + "shape": 3 + }, + { + "name": "cnet_images", + "type": "IMAGE", + "links": [], + "slot_index": 3, + "shape": 6 + } + ], + "properties": { + "Node name for S&R": "DetailerForEachPipe", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 1024, + true, + 1024, + 778989722017850, + "randomize", + 20, + 1, + "euler", + "beta", + 0.74, + 5, + true, + true, + "", + 0.2, + 1, + false, + 20 + ] + }, + { + "id": 583, + "type": "DualCLIPLoader", + "pos": [ + 3223.2578125, + 410.776123046875 + ], + "size": [ + 320, + 110 + ], + "flags": {}, + "order": 107, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "CLIP", + "type": "CLIP", + "links": [ + 4423, + 4424 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "DualCLIPLoader", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "t5xxl_fp16.safetensors", + "clip_l.safetensors", + "flux" + ] + }, + { + "id": 586, + "type": "ModelSamplingFlux", + "pos": [ + 4993.2578125, + 360.7760009765625 + ], + "size": [ + 320, + 130 + ], + "flags": { + "collapsed": true + }, + "order": 250, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 1864 + }, + { + "name": "width", + "type": "INT", + "link": 3449, + "widget": { + "name": "width" + } + }, + { + "name": "height", + "type": "INT", + "link": 3450, + "widget": { + "name": "height" + } + }, + { + "name": "max_shift", + "type": "FLOAT", + "link": 2404, + "widget": { + "name": "max_shift" + } + } + ], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "links": [ + 1123, + 1424, + 1489 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "ModelSamplingFlux", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 1.1500000000000001, + 0.5, + 16, + 704 + ] + }, + { + "id": 589, + "type": "BasicGuider", + "pos": [ + 5173.2578125, + 420.7760314941406 + ], + "size": [ + 160, + 50 + ], + "flags": { + "collapsed": true + }, + "order": 279, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 1424 + }, + { + "name": "conditioning", + "type": "CONDITIONING", + "link": 3354 + } + ], + "outputs": [ + { + "name": "GUIDER", + "type": "GUIDER", + "links": [ + 1118 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "BasicGuider", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 590, + "type": "SamplerCustomAdvanced", + "pos": [ + 5703.2578125, + 410.776123046875 + ], + "size": [ + 240, + 110 + ], + "flags": { + "collapsed": true + }, + "order": 301, + "mode": 0, + "inputs": [ + { + "name": "noise", + "type": "NOISE", + "link": 1371 + }, + { + "name": "guider", + "type": "GUIDER", + "link": 1118 + }, + { + "name": "sampler", + "type": "SAMPLER", + "link": 2334 + }, + { + "name": "sigmas", + "type": "SIGMAS", + "link": 1120 + }, + { + "name": "latent_image", + "type": "LATENT", + "link": 4512 + } + ], + "outputs": [ + { + "name": "output", + "type": "LATENT", + "links": [], + "slot_index": 0, + "shape": 3 + }, + { + "name": "denoised_output", + "type": "LATENT", + "links": [ + 1474 + ], + "slot_index": 1, + "shape": 3 + } + ], + "title": "Sampler", + "properties": { + "Node name for S&R": "SamplerCustomAdvanced", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 591, + "type": "RandomNoise", + "pos": [ + 5463.2578125, + 370.7759704589844 + ], + "size": [ + 210, + 30 + ], + "flags": { + "collapsed": true + }, + "order": 153, + "mode": 0, + "inputs": [ + { + "name": "noise_seed", + "type": "INT", + "link": 1360, + "widget": { + "name": "noise_seed" + } + } + ], + "outputs": [ + { + "name": "NOISE", + "type": "NOISE", + "links": [ + 1371 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "RandomNoise", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 1, + "fixed" + ] + }, + { + "id": 593, + "type": "BasicScheduler", + "pos": [ + 5423.2578125, + 480.77618408203125 + ], + "size": [ + 250, + 110 + ], + "flags": { + "collapsed": true + }, + "order": 278, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 1123 + }, + { + "name": "scheduler", + "type": "COMBO", + "link": 2037, + "widget": { + "name": "scheduler" + } + }, + { + "name": "steps", + "type": "INT", + "link": 2038, + "widget": { + "name": "steps" + } + } + ], + "outputs": [ + { + "name": "SIGMAS", + "type": "SIGMAS", + "links": [ + 1120, + 2091 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "BasicScheduler", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "beta", + 20, + 1 + ] + }, + { + "id": 594, + "type": "VAELoader", + "pos": [ + 3223.2578125, + 310.7759704589844 + ], + "size": [ + 320, + 60 + ], + "flags": { + "collapsed": false + }, + "order": 108, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "VAE", + "type": "VAE", + "links": [ + 4425, + 4426 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "VAELoader", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "ae.sft" + ] + }, + { + "id": 609, + "type": "VAEDecode", + "pos": [ + 5803.2578125, + 260.7760009765625 + ], + "size": [ + 170, + 50 + ], + "flags": { + "collapsed": true + }, + "order": 321, + "mode": 0, + "inputs": [ + { + "name": "samples", + "type": "LATENT", + "link": 1474 + }, + { + "name": "vae", + "type": "VAE", + "link": 3499 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 1538 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "VAEDecode", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 624, + "type": "Save Image Grid (mtb)", + "pos": [ + 4993.8857421875, + 6431.90966796875 + ], + "size": [ + 260, + 190 + ], + "flags": { + "collapsed": false + }, + "order": 241, + "mode": 4, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 2380 + }, + { + "name": "filename_prefix", + "type": "STRING", + "link": 2399, + "widget": { + "name": "filename_prefix" + } + } + ], + "outputs": [], + "properties": { + "Node name for S&R": "Save Image Grid (mtb)", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "stickFigures", + false + ] + }, + { + "id": 641, + "type": "ToBasicPipe", + "pos": [ + 4303.2578125, + 270.7759704589844 + ], + "size": [ + 240, + 110 + ], + "flags": { + "collapsed": true + }, + "order": 290, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 3293 + }, + { + "name": "clip", + "type": "CLIP", + "link": 1644 + }, + { + "name": "vae", + "type": "VAE", + "link": 3512 + }, + { + "name": "positive", + "type": "CONDITIONING", + "link": 1546 + }, + { + "name": "negative", + "type": "CONDITIONING", + "link": 3212 + } + ], + "outputs": [ + { + "name": "basic_pipe", + "type": "BASIC_PIPE", + "links": [ + 1187 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "ToBasicPipe", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 697, + "type": "ModelSamplingFlux", + "pos": [ + 4873.8857421875, + 3631.912841796875 + ], + "size": [ + 210, + 130 + ], + "flags": { + "collapsed": true + }, + "order": 231, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 1608 + }, + { + "name": "max_shift", + "type": "FLOAT", + "link": 2406, + "widget": { + "name": "max_shift" + } + } + ], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "links": [ + 2169 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "ModelSamplingFlux", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 1.1500000000000001, + 0.5, + 1024, + 1024 + ] + }, + { + "id": 703, + "type": "GetImageSize+", + "pos": [ + 3878.25732421875, + 3805.4775390625 + ], + "size": [ + 200, + 70 + ], + "flags": { + "collapsed": true + }, + "order": 174, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 2166 + } + ], + "outputs": [ + { + "name": "width", + "type": "INT", + "links": [ + 2063 + ], + "slot_index": 0, + "shape": 3 + }, + { + "name": "height", + "type": "INT", + "links": [ + 1309 + ], + "slot_index": 1, + "shape": 3 + }, + { + "name": "count", + "type": "INT", + "links": null, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "GetImageSize+", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 705, + "type": "JWIntegerMul", + "pos": [ + 4098.25927734375, + 3745.4775390625 + ], + "size": [ + 210, + 80 + ], + "flags": { + "collapsed": true + }, + "order": 237, + "mode": 0, + "inputs": [ + { + "name": "a", + "type": "INT", + "link": 2063, + "widget": { + "name": "a" + } + }, + { + "name": "b", + "type": "INT", + "link": 2064, + "widget": { + "name": "b" + } + } + ], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 1308 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "JWIntegerMul", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 0, + 4 + ] + }, + { + "id": 706, + "type": "JWIntegerMul", + "pos": [ + 4088.258544921875, + 3885.475830078125 + ], + "size": [ + 210, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 238, + "mode": 0, + "inputs": [ + { + "name": "a", + "type": "INT", + "link": 1309, + "widget": { + "name": "a" + } + }, + { + "name": "b", + "type": "INT", + "link": 2065, + "widget": { + "name": "b" + } + } + ], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 1310 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "JWIntegerMul", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 0, + 4 + ] + }, + { + "id": 711, + "type": "PlaySound|pysssss", + "pos": [ + 1290, + 150 + ], + "size": [ + 320, + 110 + ], + "flags": { + "collapsed": true + }, + "order": 155, + "mode": 0, + "inputs": [ + { + "name": "any", + "type": "*", + "link": 1372 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null, + "shape": 6 + } + ], + "properties": { + "Node name for S&R": "PlaySound|pysssss", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "always", + 0.5, + "notify.mp3" + ] + }, + { + "id": 777, + "type": "CLIPTextEncodeFlux", + "pos": [ + 4103.2578125, + 510.7762145996094 + ], + "size": [ + 210, + 90 + ], + "flags": { + "collapsed": true + }, + "order": 265, + "mode": 0, + "inputs": [ + { + "name": "clip", + "type": "CLIP", + "link": 3508 + }, + { + "name": "clip_l", + "type": "STRING", + "link": 1443, + "widget": { + "name": "clip_l" + } + }, + { + "name": "t5xxl", + "type": "STRING", + "link": 1442, + "widget": { + "name": "t5xxl" + } + }, + { + "name": "guidance", + "type": "FLOAT", + "link": 2039, + "widget": { + "name": "guidance" + } + } + ], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [ + 1546, + 1584 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "CLIPTextEncodeFlux", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "close up, marketing material, professional lighting, advertising", + "A photograph featuring a 34-year-old rbw1990 with blonde hair and beard wearing a red polo shirt and green apron, working at Bunnings as a cashier", + 2.5 + ] + }, + { + "id": 834, + "type": "Reroute", + "pos": [ + 6103.2578125, + 270.7759704589844 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 302, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 1490 + } + ], + "outputs": [ + { + "name": "", + "type": "MODEL", + "links": [ + 2087 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 836, + "type": "Reroute", + "pos": [ + 4323.2578125, + 300.7759704589844 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 289, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 1584 + } + ], + "outputs": [ + { + "name": "", + "type": "CONDITIONING", + "links": [ + 1585 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 837, + "type": "Reroute", + "pos": [ + 5393.2578125, + 260.7760009765625 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 280, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 1489 + } + ], + "outputs": [ + { + "name": "", + "type": "MODEL", + "links": [ + 1490 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 921, + "type": "Reroute", + "pos": [ + 6103.2578125, + 300.7759704589844 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 311, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 1585 + } + ], + "outputs": [ + { + "name": "", + "type": "CONDITIONING", + "links": [ + 2088 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 922, + "type": "Seed (rgthree)", + "pos": [ + 480, + 1160 + ], + "size": [ + 310, + 130 + ], + "flags": { + "collapsed": false, + "pinned": true + }, + "order": 109, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "SEED", + "type": "INT", + "links": [ + 1589 + ], + "slot_index": 0, + "shape": 3, + "dir": 4 + } + ], + "title": "Seed", + "properties": {}, + "widgets_values": [ + -1, + null, + null, + null + ] + }, + { + "id": 932, + "type": "FromBasicPipe_v2", + "pos": [ + 4673.8857421875, + 3701.912841796875 + ], + "size": [ + 270, + 130 + ], + "flags": { + "collapsed": true + }, + "order": 157, + "mode": 0, + "inputs": [ + { + "name": "basic_pipe", + "type": "BASIC_PIPE", + "link": 1599 + } + ], + "outputs": [ + { + "name": "basic_pipe", + "type": "BASIC_PIPE", + "links": [], + "slot_index": 0, + "shape": 3 + }, + { + "name": "model", + "type": "MODEL", + "links": [ + 1608 + ], + "slot_index": 1, + "shape": 3 + }, + { + "name": "clip", + "type": "CLIP", + "links": null, + "shape": 3 + }, + { + "name": "vae", + "type": "VAE", + "links": [ + 2172 + ], + "slot_index": 3, + "shape": 3 + }, + { + "name": "positive", + "type": "CONDITIONING", + "links": [], + "slot_index": 4, + "shape": 3 + }, + { + "name": "negative", + "type": "CONDITIONING", + "links": [ + 2171 + ], + "slot_index": 5, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "FromBasicPipe_v2", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 945, + "type": "Reroute", + "pos": [ + 3993.2578125, + 270.7759704589844 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 267, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 3510 + } + ], + "outputs": [ + { + "name": "", + "type": "CLIP", + "links": [ + 1644 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 963, + "type": "VAEEncode", + "pos": [ + 3855.26611328125, + 1089.53662109375 + ], + "size": [ + 210, + 50 + ], + "flags": { + "collapsed": true + }, + "order": 168, + "mode": 0, + "inputs": [ + { + "name": "pixels", + "type": "IMAGE", + "link": 2071 + }, + { + "name": "vae", + "type": "VAE", + "link": 1680 + } + ], + "outputs": [ + { + "name": "LATENT", + "type": "LATENT", + "links": [ + 1798 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "VAEEncode", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 1051, + "type": "SamplerCustomAdvanced", + "pos": [ + 6573.2578125, + 274.9195251464844 + ], + "size": [ + 240, + 110 + ], + "flags": { + "collapsed": false + }, + "order": 341, + "mode": 0, + "inputs": [ + { + "name": "noise", + "type": "NOISE", + "link": 1776, + "slot_index": 0 + }, + { + "name": "guider", + "type": "GUIDER", + "link": 2089, + "slot_index": 1 + }, + { + "name": "sampler", + "type": "SAMPLER", + "link": 2337, + "slot_index": 2 + }, + { + "name": "sigmas", + "type": "SIGMAS", + "link": 1769, + "slot_index": 3 + }, + { + "name": "latent_image", + "type": "LATENT", + "link": 2105, + "slot_index": 4 + } + ], + "outputs": [ + { + "name": "output", + "type": "LATENT", + "links": [ + 1773 + ], + "slot_index": 0, + "shape": 3 + }, + { + "name": "denoised_output", + "type": "LATENT", + "links": [ + 3722 + ], + "slot_index": 1, + "shape": 3 + } + ], + "title": "Sampler", + "properties": { + "Node name for S&R": "SamplerCustomAdvanced", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 1052, + "type": "SplitSigmasDenoise", + "pos": [ + 6313.2578125, + 454.919677734375 + ], + "size": [ + 210, + 80 + ], + "flags": { + "collapsed": false + }, + "order": 320, + "mode": 0, + "inputs": [ + { + "name": "sigmas", + "type": "SIGMAS", + "link": 2092 + } + ], + "outputs": [ + { + "name": "high_sigmas", + "type": "SIGMAS", + "links": [ + 1769 + ], + "slot_index": 0, + "shape": 3 + }, + { + "name": "low_sigmas", + "type": "SIGMAS", + "links": [ + 3717 + ], + "slot_index": 1, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "SplitSigmasDenoise", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 0.45 + ] + }, + { + "id": 1053, + "type": "SamplerCustomAdvanced", + "pos": [ + 7213.2578125, + 284.9195251464844 + ], + "size": [ + 240, + 110 + ], + "flags": { + "collapsed": false + }, + "order": 360, + "mode": 0, + "inputs": [ + { + "name": "noise", + "type": "NOISE", + "link": 1770, + "slot_index": 0 + }, + { + "name": "guider", + "type": "GUIDER", + "link": 2090, + "slot_index": 1 + }, + { + "name": "sampler", + "type": "SAMPLER", + "link": 2338, + "slot_index": 2 + }, + { + "name": "sigmas", + "type": "SIGMAS", + "link": 3718, + "slot_index": 3 + }, + { + "name": "latent_image", + "type": "LATENT", + "link": 1772, + "slot_index": 4 + } + ], + "outputs": [ + { + "name": "output", + "type": "LATENT", + "links": [], + "slot_index": 0, + "shape": 3 + }, + { + "name": "denoised_output", + "type": "LATENT", + "links": [ + 1787 + ], + "slot_index": 1, + "shape": 3 + } + ], + "title": "Sampler", + "properties": { + "Node name for S&R": "SamplerCustomAdvanced", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1054, + "type": "DisableNoise", + "pos": [ + 7073.2578125, + 214.91949462890625 + ], + "size": [ + 210, + 30 + ], + "flags": { + "collapsed": true + }, + "order": 110, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "NOISE", + "type": "NOISE", + "links": [ + 1770 + ], + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "DisableNoise", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1055, + "type": "InjectLatentNoise+", + "pos": [ + 6923.2578125, + 274.9195251464844 + ], + "size": [ + 260, + 150 + ], + "flags": {}, + "order": 359, + "mode": 0, + "inputs": [ + { + "name": "latent", + "type": "LATENT", + "link": 1773 + }, + { + "name": "mask", + "type": "MASK", + "link": 2412, + "shape": 7 + } + ], + "outputs": [ + { + "name": "LATENT", + "type": "LATENT", + "links": [ + 1772 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "InjectLatentNoise+", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 2165518722564, + "randomize", + 2.5, + "false" + ] + }, + { + "id": 1056, + "type": "RandomNoise", + "pos": [ + 6393.2578125, + 274.9195251464844 + ], + "size": [ + 210, + 30 + ], + "flags": { + "collapsed": true + }, + "order": 159, + "mode": 0, + "inputs": [ + { + "name": "noise_seed", + "type": "INT", + "link": 1775, + "widget": { + "name": "noise_seed" + } + } + ], + "outputs": [ + { + "name": "NOISE", + "type": "NOISE", + "links": [ + 1776 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "RandomNoise", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 1, + "fixed" + ] + }, + { + "id": 1060, + "type": "VAEDecode", + "pos": [ + 7503.2578125, + 254.91954040527344 + ], + "size": [ + 170, + 50 + ], + "flags": { + "collapsed": true + }, + "order": 361, + "mode": 0, + "inputs": [ + { + "name": "samples", + "type": "LATENT", + "link": 1787 + }, + { + "name": "vae", + "type": "VAE", + "link": 1786 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 1783 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "VAEDecode", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 1072, + "type": "FluxSamplerParams+", + "pos": [ + 4275.26611328125, + 1059.53662109375 + ], + "size": [ + 230, + 260 + ], + "flags": {}, + "order": 269, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 3363 + }, + { + "name": "conditioning", + "type": "CONDITIONING", + "link": 3362 + }, + { + "name": "latent_image", + "type": "LATENT", + "link": 1800 + }, + { + "name": "loras", + "type": "LORA_PARAMS", + "link": null, + "shape": 7 + }, + { + "name": "denoise", + "type": "STRING", + "link": 1811, + "widget": { + "name": "denoise" + } + }, + { + "name": "seed", + "type": "STRING", + "link": 1814, + "widget": { + "name": "seed" + } + }, + { + "name": "scheduler", + "type": "STRING", + "link": 2005, + "widget": { + "name": "scheduler" + } + }, + { + "name": "steps", + "type": "STRING", + "link": 2004, + "widget": { + "name": "steps" + } + }, + { + "name": "guidance", + "type": "STRING", + "link": 2007, + "widget": { + "name": "guidance" + } + }, + { + "name": "sampler", + "type": "STRING", + "link": 2344, + "widget": { + "name": "sampler" + } + }, + { + "name": "max_shift", + "type": "STRING", + "link": 2410, + "widget": { + "name": "max_shift" + } + } + ], + "outputs": [ + { + "name": "latent", + "type": "LATENT", + "links": [ + 1803 + ], + "slot_index": 0, + "shape": 3 + }, + { + "name": "params", + "type": "SAMPLER_PARAMS", + "links": null, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "FluxSamplerParams+", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "?", + "euler", + "beta", + "20", + "2.5", + "1.15", + "0.5", + "1.0" + ] + }, + { + "id": 1073, + "type": "RepeatLatentBatch", + "pos": [ + 4025.26611328125, + 1129.53662109375 + ], + "size": [ + 230, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 234, + "mode": 0, + "inputs": [ + { + "name": "samples", + "type": "LATENT", + "link": 1798 + }, + { + "name": "amount", + "type": "INT", + "link": 1920, + "widget": { + "name": "amount" + } + } + ], + "outputs": [ + { + "name": "LATENT", + "type": "LATENT", + "links": [ + 1800 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "RepeatLatentBatch", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 1 + ] + }, + { + "id": 1074, + "type": "VAEDecode", + "pos": [ + 4535.26611328125, + 999.5366821289062 + ], + "size": [ + 170, + 50 + ], + "flags": { + "collapsed": true + }, + "order": 292, + "mode": 0, + "inputs": [ + { + "name": "samples", + "type": "LATENT", + "link": 1803 + }, + { + "name": "vae", + "type": "VAE", + "link": 1804 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 1802 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "VAEDecode", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 1085, + "type": "CR Float To String", + "pos": [ + 4105.26611328125, + 1179.53662109375 + ], + "size": [ + 320, + 80 + ], + "flags": { + "collapsed": true + }, + "order": 162, + "mode": 0, + "inputs": [ + { + "name": "float_", + "type": "FLOAT", + "link": 1952, + "widget": { + "name": "float_" + } + } + ], + "outputs": [ + { + "name": "STRING", + "type": "STRING", + "links": [ + 1811 + ], + "slot_index": 0, + "shape": 3 + }, + { + "name": "show_help", + "type": "STRING", + "links": null, + "shape": 3 + } + ], + "title": "To String", + "properties": { + "Node name for S&R": "CR Float To String", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 0 + ] + }, + { + "id": 1088, + "type": "CR Integer To String", + "pos": [ + 4105.26611328125, + 1219.53662109375 + ], + "size": [ + 320, + 80 + ], + "flags": { + "collapsed": true + }, + "order": 160, + "mode": 0, + "inputs": [ + { + "name": "int_", + "type": "INT", + "link": 1813, + "widget": { + "name": "int_" + } + } + ], + "outputs": [ + { + "name": "STRING", + "type": "STRING", + "links": [ + 1814 + ], + "slot_index": 0, + "shape": 3 + }, + { + "name": "show_help", + "type": "STRING", + "links": null, + "shape": 3 + } + ], + "title": "To String", + "properties": { + "Node name for S&R": "CR Integer To String", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 0 + ] + }, + { + "id": 1090, + "type": "SDXLEmptyLatentSizePicker+", + "pos": [ + 4373.2578125, + 400.7760925292969 + ], + "size": [ + 230, + 120 + ], + "flags": { + "collapsed": false + }, + "order": 188, + "mode": 0, + "inputs": [ + { + "name": "batch_size", + "type": "INT", + "link": 3214, + "widget": { + "name": "batch_size" + } + }, + { + "name": "resolution", + "type": "COMBO", + "link": 3448, + "widget": { + "name": "resolution" + } + } + ], + "outputs": [ + { + "name": "LATENT", + "type": "LATENT", + "links": [ + 4512, + 4514 + ], + "slot_index": 0, + "shape": 3 + }, + { + "name": "width", + "type": "INT", + "links": [ + 3449, + 3543 + ], + "slot_index": 1, + "shape": 3 + }, + { + "name": "height", + "type": "INT", + "links": [ + 3450, + 3544 + ], + "slot_index": 2, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "SDXLEmptyLatentSizePicker+", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "1024x1024 (1.0)", + 2, + 0, + 0 + ] + }, + { + "id": 1103, + "type": "Power Lora Loader (rgthree)", + "pos": [ + 480, + 320 + ], + "size": [ + 310, + 240 + ], + "flags": { + "collapsed": false, + "pinned": true + }, + "order": 161, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 3092, + "dir": 3 + }, + { + "name": "clip", + "type": "CLIP", + "link": 3432, + "dir": 3 + } + ], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "links": [ + 1863 + ], + "slot_index": 0, + "shape": 3, + "dir": 4 + }, + { + "name": "CLIP", + "type": "CLIP", + "links": [], + "slot_index": 1, + "shape": 3, + "dir": 4 + } + ], + "title": "Lora Loader", + "properties": { + "Show Strengths": "Single Strength" + }, + "widgets_values": [ + null, + { + "type": "PowerLoraLoaderHeaderWidget" + }, + { + "on": false, + "lora": "FLUX\\Kodak_MC3_Style_F1D-000019.safetensors", + "strength": 0.8, + "strengthTwo": null + }, + { + "on": false, + "lora": "FLUX\\In Super Panavision 70 Technicolor Film style v2b.safetensors", + "strength": 0.75, + "strengthTwo": null + }, + { + "on": false, + "lora": "FLUX\\FLUX-dev-lora-add_details.safetensors", + "strength": 1, + "strengthTwo": null + }, + { + "on": false, + "lora": "FLUX\\CinematicStyleFlux_v1.safetensors", + "strength": 1, + "strengthTwo": null + }, + { + "on": false, + "lora": "FLUX\\olympusd450_lora.safetensors", + "strength": 1, + "strengthTwo": null + }, + null, + "" + ] + }, + { + "id": 1128, + "type": "DepthAnythingV2Preprocessor", + "pos": [ + 6593.2578125, + -149.22354125976562 + ], + "size": [ + 310, + 80 + ], + "flags": {}, + "order": 354, + "mode": 4, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 1923 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 1867 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "DepthAnythingV2Preprocessor", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "depth_anything_v2_vitl.pth", + 512 + ] + }, + { + "id": 1129, + "type": "RemapImageRange", + "pos": [ + 6933.2578125, + -149.22354125976562 + ], + "size": [ + 220, + 110 + ], + "flags": {}, + "order": 355, + "mode": 4, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 1867 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 1868, + 1871 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "RemapImageRange", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + -1, + 5, + true + ] + }, + { + "id": 1130, + "type": "ImageToMask", + "pos": [ + 6943.2578125, + 0.7762279510498047 + ], + "size": [ + 230, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 356, + "mode": 4, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 1868 + } + ], + "outputs": [ + { + "name": "MASK", + "type": "MASK", + "links": [ + 3723 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "ImageToMask", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "red" + ] + }, + { + "id": 1131, + "type": "PreviewImage", + "pos": [ + 7163.2578125, + -159.22354125976562 + ], + "size": [ + 220, + 210 + ], + "flags": {}, + "order": 357, + "mode": 4, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 1871 + } + ], + "outputs": [], + "properties": { + "Node name for S&R": "PreviewImage", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 1134, + "type": "VAEDecode", + "pos": [ + 6763.2578125, + -9.223752975463867 + ], + "size": [ + 140, + 50 + ], + "flags": { + "collapsed": true + }, + "order": 351, + "mode": 4, + "inputs": [ + { + "name": "samples", + "type": "LATENT", + "link": 2278 + }, + { + "name": "vae", + "type": "VAE", + "link": 1879 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 1923 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "VAEDecode", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 1262, + "type": "ImpactSchedulerAdapter", + "pos": [ + 4718.25927734375, + 4505.47509765625 + ], + "size": [ + 260, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 171, + "mode": 0, + "inputs": [ + { + "name": "scheduler", + "type": "COMBO", + "link": 2055, + "widget": { + "name": "scheduler" + } + } + ], + "outputs": [ + { + "name": "scheduler", + "type": "COMBO", + "links": [ + 2313 + ], + "slot_index": 0, + "shape": 3 + } + ], + "title": "Adapter", + "properties": { + "Node name for S&R": "ImpactSchedulerAdapter", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "simple", + "None" + ] + }, + { + "id": 1274, + "type": "DenoiseSlider", + "pos": [ + 1760, + 650 + ], + "size": [ + 310, + 60 + ], + "flags": { + "collapsed": false, + "pinned": true + }, + "order": 111, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "links": [ + 2000 + ], + "slot_index": 0, + "shape": 3 + } + ], + "title": "Denoise", + "properties": { + "Node name for S&R": "DenoiseSlider", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 0 + ] + }, + { + "id": 1278, + "type": "StepSlider", + "pos": [ + 480, + 740 + ], + "size": [ + 310, + 60 + ], + "flags": { + "collapsed": false, + "pinned": true + }, + "order": 112, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 2002 + ], + "slot_index": 0, + "shape": 3 + } + ], + "title": "Steps", + "properties": { + "Node name for S&R": "StepSlider", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 20 + ] + }, + { + "id": 1279, + "type": "GuidanceSlider", + "pos": [ + 480, + 840 + ], + "size": [ + 310, + 60 + ], + "flags": { + "pinned": true + }, + "order": 113, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "links": [ + 2001 + ], + "slot_index": 0, + "shape": 3 + } + ], + "title": "Guidance", + "properties": { + "Node name for S&R": "GuidanceSlider", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 3.5 + ] + }, + { + "id": 1285, + "type": "SomethingToString", + "pos": [ + 4105.26611328125, + 1309.5374755859375 + ], + "size": [ + 210, + 80 + ], + "flags": { + "collapsed": true + }, + "order": 163, + "mode": 0, + "inputs": [ + { + "name": "input", + "type": "*", + "link": 2003 + } + ], + "outputs": [ + { + "name": "STRING", + "type": "STRING", + "links": [ + 2004 + ], + "slot_index": 0, + "shape": 3 + } + ], + "title": "To String", + "properties": { + "Node name for S&R": "SomethingToString", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "", + "" + ] + }, + { + "id": 1288, + "type": "SomethingToString", + "pos": [ + 4115.26611328125, + 1349.5380859375 + ], + "size": [ + 210, + 80 + ], + "flags": { + "collapsed": true + }, + "order": 164, + "mode": 0, + "inputs": [ + { + "name": "input", + "type": "*", + "link": 2006 + } + ], + "outputs": [ + { + "name": "STRING", + "type": "STRING", + "links": [ + 2007 + ], + "slot_index": 0, + "shape": 3 + } + ], + "title": "To String", + "properties": { + "Node name for S&R": "SomethingToString", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "", + "" + ] + }, + { + "id": 1292, + "type": "FluxSamplerParams+", + "pos": [ + 5119.6025390625, + 1736.9554443359375 + ], + "size": [ + 250, + 260 + ], + "flags": {}, + "order": 327, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 3364 + }, + { + "name": "conditioning", + "type": "CONDITIONING", + "link": 4676 + }, + { + "name": "latent_image", + "type": "LATENT", + "link": 4645 + }, + { + "name": "loras", + "type": "LORA_PARAMS", + "link": null, + "shape": 7 + }, + { + "name": "denoise", + "type": "STRING", + "link": 2012, + "widget": { + "name": "denoise" + } + }, + { + "name": "seed", + "type": "STRING", + "link": 2013, + "widget": { + "name": "seed" + } + }, + { + "name": "scheduler", + "type": "STRING", + "link": 2014, + "widget": { + "name": "scheduler" + } + }, + { + "name": "steps", + "type": "STRING", + "link": 2015, + "widget": { + "name": "steps" + } + }, + { + "name": "guidance", + "type": "STRING", + "link": 2016, + "widget": { + "name": "guidance" + } + }, + { + "name": "sampler", + "type": "STRING", + "link": 2343, + "widget": { + "name": "sampler" + } + }, + { + "name": "max_shift", + "type": "STRING", + "link": 2408, + "widget": { + "name": "max_shift" + } + } + ], + "outputs": [ + { + "name": "latent", + "type": "LATENT", + "links": [ + 2019 + ], + "slot_index": 0, + "shape": 3 + }, + { + "name": "params", + "type": "SAMPLER_PARAMS", + "links": [], + "slot_index": 1, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "FluxSamplerParams+", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "?", + "euler", + "beta", + "20", + "2.5", + "1.15", + "0.5", + "1.0" + ] + }, + { + "id": 1293, + "type": "RepeatLatentBatch", + "pos": [ + 4789.455078125, + 1832.50830078125 + ], + "size": [ + 210, + 50 + ], + "flags": { + "collapsed": true + }, + "order": 309, + "mode": 0, + "inputs": [ + { + "name": "samples", + "type": "LATENT", + "link": 4541 + }, + { + "name": "amount", + "type": "INT", + "link": 2018, + "widget": { + "name": "amount" + } + } + ], + "outputs": [ + { + "name": "LATENT", + "type": "LATENT", + "links": [ + 4645 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "RepeatLatentBatch", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 1 + ] + }, + { + "id": 1294, + "type": "VAEDecode", + "pos": [ + 5409.60400390625, + 1606.9547119140625 + ], + "size": [ + 170, + 50 + ], + "flags": { + "collapsed": true + }, + "order": 340, + "mode": 0, + "inputs": [ + { + "name": "samples", + "type": "LATENT", + "link": 2019 + }, + { + "name": "vae", + "type": "VAE", + "link": 2020 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 2030 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "VAEDecode", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 1297, + "type": "CR Float To String", + "pos": [ + 4879.6025390625, + 1916.954345703125 + ], + "size": [ + 320, + 80 + ], + "flags": { + "collapsed": true + }, + "order": 166, + "mode": 0, + "inputs": [ + { + "name": "float_", + "type": "FLOAT", + "link": 2022, + "widget": { + "name": "float_" + } + } + ], + "outputs": [ + { + "name": "STRING", + "type": "STRING", + "links": [ + 2012 + ], + "slot_index": 0, + "shape": 3 + }, + { + "name": "show_help", + "type": "STRING", + "links": null, + "shape": 3 + } + ], + "title": "To String", + "properties": { + "Node name for S&R": "CR Float To String", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 0 + ] + }, + { + "id": 1299, + "type": "CR Integer To String", + "pos": [ + 4869.6025390625, + 1956.954345703125 + ], + "size": [ + 320, + 80 + ], + "flags": { + "collapsed": true + }, + "order": 165, + "mode": 0, + "inputs": [ + { + "name": "int_", + "type": "INT", + "link": 2023, + "widget": { + "name": "int_" + } + } + ], + "outputs": [ + { + "name": "STRING", + "type": "STRING", + "links": [ + 2013 + ], + "slot_index": 0, + "shape": 3 + }, + { + "name": "show_help", + "type": "STRING", + "links": null, + "shape": 3 + } + ], + "title": "To String", + "properties": { + "Node name for S&R": "CR Integer To String", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 0 + ] + }, + { + "id": 1303, + "type": "SomethingToString", + "pos": [ + 4869.6025390625, + 2036.9542236328125 + ], + "size": [ + 210, + 80 + ], + "flags": { + "collapsed": true + }, + "order": 167, + "mode": 0, + "inputs": [ + { + "name": "input", + "type": "*", + "link": 2024 + } + ], + "outputs": [ + { + "name": "STRING", + "type": "STRING", + "links": [ + 2015 + ], + "slot_index": 0, + "shape": 3 + } + ], + "title": "To String", + "properties": { + "Node name for S&R": "SomethingToString", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "", + "" + ] + }, + { + "id": 1306, + "type": "SomethingToString", + "pos": [ + 4846.455078125, + 2101.508544921875 + ], + "size": [ + 210, + 80 + ], + "flags": { + "collapsed": true + }, + "order": 291, + "mode": 0, + "inputs": [ + { + "name": "input", + "type": "*", + "link": 4661 + } + ], + "outputs": [ + { + "name": "STRING", + "type": "STRING", + "links": [ + 2016 + ], + "slot_index": 0, + "shape": 3 + } + ], + "title": "To String", + "properties": { + "Node name for S&R": "SomethingToString", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "", + "" + ] + }, + { + "id": 1342, + "type": "ImageResize+", + "pos": [ + 1760, + 970 + ], + "size": [ + 310, + 250 + ], + "flags": { + "collapsed": false, + "pinned": true + }, + "order": 172, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 2792 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 2793 + ], + "slot_index": 0, + "shape": 3 + }, + { + "name": "width", + "type": "INT", + "links": null, + "shape": 3 + }, + { + "name": "height", + "type": "INT", + "links": null, + "shape": 3 + } + ], + "title": "Resize", + "properties": { + "Node name for S&R": "ImageResize+", + "enableTabs": true, + "tabWidth": 50, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 1024, + 1024, + "lanczos", + "keep proportion", + "always", + 8 + ] + }, + { + "id": 1343, + "type": "ImageCrop+", + "pos": [ + 1760, + 970 + ], + "size": [ + 310, + 250 + ], + "flags": { + "collapsed": false, + "pinned": true + }, + "order": 236, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 2793 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 3481 + ], + "slot_index": 0, + "shape": 3 + }, + { + "name": "x", + "type": "INT", + "links": null, + "shape": 3 + }, + { + "name": "y", + "type": "INT", + "links": null, + "shape": 3 + } + ], + "title": "Crop", + "properties": { + "Node name for S&R": "ImageCrop+", + "enableTabs": true, + "tabWidth": 50, + "tabXOffset": 65, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 2560, + 2560, + "center", + 0, + 0 + ] + }, + { + "id": 1358, + "type": "BasicGuider", + "pos": [ + 6293.2578125, + 334.9195556640625 + ], + "size": [ + 240, + 50 + ], + "flags": { + "collapsed": true + }, + "order": 328, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 2087 + }, + { + "name": "conditioning", + "type": "CONDITIONING", + "link": 2088 + } + ], + "outputs": [ + { + "name": "GUIDER", + "type": "GUIDER", + "links": [ + 2089, + 2090 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "BasicGuider", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 1359, + "type": "Reroute", + "pos": [ + 6103.2578125, + 460.7761535644531 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 300, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 2091 + } + ], + "outputs": [ + { + "name": "", + "type": "SIGMAS", + "links": [ + 2092 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 1387, + "type": "ImageUpscaleWithModel", + "pos": [ + 3938.25732421875, + 3615.4765625 + ], + "size": [ + 200, + 70 + ], + "flags": { + "collapsed": true + }, + "order": 173, + "mode": 0, + "inputs": [ + { + "name": "upscale_model", + "type": "UPSCALE_MODEL", + "link": 2163 + }, + { + "name": "image", + "type": "IMAGE", + "link": 2165 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 2180 + ], + "slot_index": 0, + "shape": 3 + } + ], + "title": "Upscale", + "properties": { + "Node name for S&R": "ImageUpscaleWithModel", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 1389, + "type": "UltimateSDUpscaleNoUpscale", + "pos": [ + 5098.25927734375, + 3575.476318359375 + ], + "size": [ + 310, + 530 + ], + "flags": {}, + "order": 315, + "mode": 0, + "inputs": [ + { + "name": "upscaled_image", + "type": "IMAGE", + "link": 4668 + }, + { + "name": "model", + "type": "MODEL", + "link": 2169 + }, + { + "name": "positive", + "type": "CONDITIONING", + "link": 3366 + }, + { + "name": "negative", + "type": "CONDITIONING", + "link": 2171 + }, + { + "name": "vae", + "type": "VAE", + "link": 2172 + }, + { + "name": "seed", + "type": "INT", + "link": 2173, + "widget": { + "name": "seed" + } + }, + { + "name": "steps", + "type": "INT", + "link": 2175, + "widget": { + "name": "steps" + } + }, + { + "name": "scheduler", + "type": "COMBO", + "link": 2176, + "widget": { + "name": "scheduler" + } + }, + { + "name": "denoise", + "type": "FLOAT", + "link": 2174, + "widget": { + "name": "denoise" + } + }, + { + "name": "sampler_name", + "type": "COMBO", + "link": 2342, + "widget": { + "name": "sampler_name" + } + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 2177 + ], + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "UltimateSDUpscaleNoUpscale", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 689897817833959, + "randomize", + 20, + 1, + "euler", + "normal", + 0.2, + "Linear", + 1024, + 1024, + 20, + 20, + "None", + 1, + 20, + 20, + 20, + true, + false + ] + }, + { + "id": 1404, + "type": "RepeatImageBatch", + "pos": [ + 3893.8837890625, + 4271.91015625 + ], + "size": [ + 210, + 60 + ], + "flags": { + "collapsed": false + }, + "order": 175, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 2202 + }, + { + "name": "amount", + "type": "INT", + "link": 2212, + "widget": { + "name": "amount" + } + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 2209 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "RepeatImageBatch", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 2 + ] + }, + { + "id": 1405, + "type": "ListCounter //Inspire", + "pos": [ + 4663.8857421875, + 4411.90966796875 + ], + "size": [ + 210, + 50 + ], + "flags": { + "collapsed": true + }, + "order": 272, + "mode": 0, + "inputs": [ + { + "name": "signal", + "type": "*", + "link": 2210 + }, + { + "name": "base_value", + "type": "INT", + "link": 2231, + "widget": { + "name": "base_value" + } + } + ], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 2243 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "ListCounter //Inspire", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 0 + ] + }, + { + "id": 1408, + "type": "ImageListToBatch+", + "pos": [ + 5228.25927734375, + 4285.47607421875 + ], + "size": [ + 180, + 30 + ], + "flags": { + "collapsed": true + }, + "order": 316, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 2205 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 2206 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "ImageListToBatch+", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 1411, + "type": "RebatchImages", + "pos": [ + 4168.25927734375, + 4275.47607421875 + ], + "size": [ + 270, + 60 + ], + "flags": { + "collapsed": false + }, + "order": 239, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 2209 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 2210, + 2211 + ], + "slot_index": 0, + "shape": 6 + } + ], + "properties": { + "Node name for S&R": "RebatchImages", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 1 + ] + }, + { + "id": 1470, + "type": "Reroute (rgthree)", + "pos": [ + 6843.2578125, + 30.77626609802246 + ], + "size": [ + 40, + 30 + ], + "flags": {}, + "order": 347, + "mode": 4, + "inputs": [ + { + "name": "", + "type": "*", + "link": 3722, + "dir": 2, + "has_old_label": true, + "label": " " + } + ], + "outputs": [ + { + "name": "denoised_output", + "type": "LATENT", + "links": [ + 2278 + ], + "slot_index": 0, + "dir": 1, + "has_old_label": true, + "label": " " + } + ], + "properties": { + "resizable": true, + "size": [ + 40, + 30 + ], + "connections_layout": [ + "Bottom", + "Top" + ] + } + }, + { + "id": 1488, + "type": "BatchSlider", + "pos": [ + 480, + 1060 + ], + "size": [ + 310, + 60 + ], + "flags": { + "pinned": true + }, + "order": 114, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 2305 + ], + "slot_index": 0, + "shape": 3 + } + ], + "title": "Batch", + "properties": { + "Node name for S&R": "BatchSlider", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 1 + ] + }, + { + "id": 1500, + "type": "KSamplerSelect", + "pos": [ + 5403.2578125, + 600.77587890625 + ], + "size": [ + 210, + 30 + ], + "flags": { + "collapsed": true + }, + "order": 176, + "mode": 0, + "inputs": [ + { + "name": "sampler_name", + "type": "COMBO", + "link": 2333, + "widget": { + "name": "sampler_name" + } + } + ], + "outputs": [ + { + "name": "SAMPLER", + "type": "SAMPLER", + "links": [ + 2334, + 2335 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "KSamplerSelect", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "euler" + ] + }, + { + "id": 1534, + "type": "UpscaleModelLoader", + "pos": [ + 1760, + 1390 + ], + "size": [ + 310, + 60 + ], + "flags": { + "pinned": true + }, + "order": 115, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "UPSCALE_MODEL", + "type": "UPSCALE_MODEL", + "links": [ + 2361 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "UpscaleModelLoader", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "4xNomos8kDAT.pth" + ] + }, + { + "id": 1573, + "type": "Fast Groups Bypasser (rgthree)", + "pos": [ + 480, + 1430 + ], + "size": [ + 310, + 60 + ], + "flags": { + "pinned": true + }, + "order": 116, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "OPT_CONNECTION", + "type": "*", + "links": null + } + ], + "title": "Save", + "properties": { + "matchColors": "", + "matchTitle": "Save", + "showNav": true, + "sort": "position", + "customSortAlphabet": "", + "toggleRestriction": "default" + } + }, + { + "id": 1600, + "type": "Text String Truncate", + "pos": [ + 4559.330078125, + 6449.18310546875 + ], + "size": [ + 240, + 170 + ], + "flags": { + "collapsed": false + }, + "order": 177, + "mode": 4, + "inputs": [ + { + "name": "text", + "type": "STRING", + "link": 2400, + "widget": { + "name": "text" + } + }, + { + "name": "text_b", + "type": "STRING", + "link": null, + "widget": { + "name": "text_b" + } + }, + { + "name": "text_c", + "type": "STRING", + "link": null, + "widget": { + "name": "text_c" + } + }, + { + "name": "text_d", + "type": "STRING", + "link": null, + "widget": { + "name": "text_d" + } + } + ], + "outputs": [ + { + "name": "TEXT", + "type": "STRING", + "links": [ + 2399 + ], + "slot_index": 0, + "shape": 3 + }, + { + "name": "TEXT_B", + "type": "STRING", + "links": null, + "shape": 3 + }, + { + "name": "TEXT_C", + "type": "STRING", + "links": null, + "shape": 3 + }, + { + "name": "TEXT_D", + "type": "STRING", + "links": null, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "Text String Truncate", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "", + "words", + "beginning", + 12, + "", + "", + "" + ] + }, + { + "id": 1622, + "type": "SomethingToString", + "pos": [ + 4828.0712890625, + 2504.113037109375 + ], + "size": [ + 210, + 80 + ], + "flags": { + "collapsed": true + }, + "order": 178, + "mode": 0, + "inputs": [ + { + "name": "input", + "type": "*", + "link": 2407 + } + ], + "outputs": [ + { + "name": "STRING", + "type": "STRING", + "links": [ + 2408 + ], + "slot_index": 0, + "shape": 3 + } + ], + "title": "To String", + "properties": { + "Node name for S&R": "SomethingToString", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "", + "" + ] + }, + { + "id": 1624, + "type": "SomethingToString", + "pos": [ + 4115.26611328125, + 1429.538818359375 + ], + "size": [ + 210, + 80 + ], + "flags": { + "collapsed": true + }, + "order": 179, + "mode": 0, + "inputs": [ + { + "name": "input", + "type": "*", + "link": 2409 + } + ], + "outputs": [ + { + "name": "STRING", + "type": "STRING", + "links": [ + 2410 + ], + "slot_index": 0, + "shape": 3 + } + ], + "title": "To String", + "properties": { + "Node name for S&R": "SomethingToString", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "", + "" + ] + }, + { + "id": 1627, + "type": "Reroute (rgthree)", + "pos": [ + 6893.2578125, + 30.77626609802246 + ], + "size": [ + 40, + 30 + ], + "flags": {}, + "order": 358, + "mode": 4, + "inputs": [ + { + "name": "", + "type": "*", + "link": 3723, + "dir": 1, + "has_old_label": true, + "label": " " + } + ], + "outputs": [ + { + "name": "MASK", + "type": "MASK", + "links": [ + 2412 + ], + "slot_index": 0, + "dir": 2, + "has_old_label": true, + "label": " " + } + ], + "properties": { + "resizable": true, + "size": [ + 40, + 30 + ], + "connections_layout": [ + "Top", + "Bottom" + ] + } + }, + { + "id": 1629, + "type": "MaxShiftSlider", + "pos": [ + 480, + 940 + ], + "size": [ + 310, + 60 + ], + "flags": { + "collapsed": false, + "pinned": true + }, + "order": 117, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "links": [ + 2418 + ], + "slot_index": 0, + "shape": 3 + } + ], + "title": "Max Shift", + "properties": { + "Node name for S&R": "MaxShiftSlider", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 1.1500000000000001 + ] + }, + { + "id": 1630, + "type": "Label (rgthree)", + "pos": [ + 770, + 100 + ], + "size": [ + 25, + 36 + ], + "flags": { + "allow_interaction": true + }, + "order": 118, + "mode": 0, + "inputs": [], + "outputs": [], + "title": "v 1.3", + "properties": { + "fontSize": 36, + "fontFamily": "\n", + "fontColor": "#ffffff", + "textAlign": "left", + "backgroundColor": "transparent", + "padding": 0, + "borderRadius": 0 + }, + "color": "#fff0", + "bgcolor": "#fff0" + }, + { + "id": 1679, + "type": "SimpleComparison+", + "pos": [ + 4213.45458984375, + 2234.508544921875 + ], + "size": [ + 220, + 80 + ], + "flags": { + "collapsed": true + }, + "order": 214, + "mode": 0, + "inputs": [ + { + "name": "a", + "type": "*", + "link": 2471 + }, + { + "name": "b", + "type": "*", + "link": 2473 + } + ], + "outputs": [ + { + "name": "BOOLEAN", + "type": "BOOLEAN", + "links": [ + 4648, + 4659, + 4677 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "SimpleComparison+", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "==" + ] + }, + { + "id": 1683, + "type": "JWFloat", + "pos": [ + 4069.699951171875, + 2283.154541015625 + ], + "size": [ + 210, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 119, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "links": [ + 2473 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "JWFloat", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 1 + ] + }, + { + "id": 1688, + "type": "Switch any [Crystools]", + "pos": [ + 4482.45556640625, + 2031.50830078125 + ], + "size": [ + 210, + 70 + ], + "flags": { + "collapsed": true + }, + "order": 287, + "mode": 0, + "inputs": [ + { + "name": "on_true", + "type": "*", + "link": 4649 + }, + { + "name": "on_false", + "type": "*", + "link": 4652 + }, + { + "name": "boolean", + "type": "BOOLEAN", + "link": 4648, + "widget": { + "name": "boolean" + } + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": [ + 4541 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "Switch any [Crystools]", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + false + ] + }, + { + "id": 2205, + "type": "Label (rgthree)", + "pos": [ + 1950, + 110 + ], + "size": [ + 96.79166412353516, + 16 + ], + "flags": { + "allow_interaction": true + }, + "order": 120, + "mode": 0, + "inputs": [], + "outputs": [], + "title": "by WorldObserver", + "properties": { + "fontSize": 16, + "fontFamily": "\n", + "fontColor": "#ffffff", + "textAlign": "left", + "backgroundColor": "transparent", + "padding": 0, + "borderRadius": 0 + }, + "color": "#fff0", + "bgcolor": "#fff0" + }, + { + "id": 2211, + "type": "CLIPTextEncode", + "pos": [ + 3993.2578125, + 360.7760009765625 + ], + "size": [ + 210, + 80 + ], + "flags": { + "collapsed": true + }, + "order": 266, + "mode": 0, + "inputs": [ + { + "name": "clip", + "type": "CLIP", + "link": 3509 + } + ], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [ + 3212 + ], + "slot_index": 0 + } + ], + "title": "Negative", + "properties": { + "Node name for S&R": "CLIPTextEncode", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "" + ] + }, + { + "id": 2218, + "type": "BatchSlider", + "pos": [ + 1760, + 1290 + ], + "size": [ + 310, + 60 + ], + "flags": { + "pinned": true + }, + "order": 121, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 3215 + ], + "slot_index": 0, + "shape": 3 + } + ], + "title": "Resolution Multipy", + "properties": { + "Node name for S&R": "BatchSlider", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 2 + ] + }, + { + "id": 2257, + "type": "ControlNetApplyAdvanced", + "pos": [ + 4843.396484375, + 5119.3701171875 + ], + "size": [ + 300, + 170 + ], + "flags": { + "collapsed": true + }, + "order": 298, + "mode": 4, + "inputs": [ + { + "name": "positive", + "type": "CONDITIONING", + "link": 3517 + }, + { + "name": "negative", + "type": "CONDITIONING", + "link": 3518 + }, + { + "name": "control_net", + "type": "CONTROL_NET", + "link": 3419 + }, + { + "name": "image", + "type": "IMAGE", + "link": 3678 + }, + { + "name": "vae", + "type": "VAE", + "link": 3406, + "shape": 7 + }, + { + "name": "strength", + "type": "FLOAT", + "link": 3681, + "widget": { + "name": "strength" + } + }, + { + "name": "start_percent", + "type": "FLOAT", + "link": 3263, + "widget": { + "name": "start_percent" + } + }, + { + "name": "end_percent", + "type": "FLOAT", + "link": 3264, + "widget": { + "name": "end_percent" + } + } + ], + "outputs": [ + { + "name": "positive", + "type": "CONDITIONING", + "links": [ + 3302 + ], + "slot_index": 0 + }, + { + "name": "negative", + "type": "CONDITIONING", + "links": [ + 3303 + ], + "slot_index": 1 + } + ], + "properties": { + "Node name for S&R": "ControlNetApplyAdvanced", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 1, + 0, + 1 + ] + }, + { + "id": 2258, + "type": "ControlNetSlider", + "pos": [ + 1760, + 780 + ], + "size": [ + 310, + 110 + ], + "flags": { + "collapsed": false, + "pinned": true + }, + "order": 122, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "VEC3", + "type": "VEC3", + "links": [ + 3299 + ], + "slot_index": 0 + } + ], + "title": "Depth", + "properties": { + "Node name for S&R": "ControlNetSlider", + "enableTabs": true, + "tabWidth": 65, + "tabXOffset": 80, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 0, + 0, + 0.2 + ], + "color": "#223", + "bgcolor": "#335" + }, + { + "id": 2260, + "type": "CM_BreakoutVec3", + "pos": [ + 4403.396484375, + 5259.3701171875 + ], + "size": [ + 210, + 70 + ], + "flags": { + "collapsed": true + }, + "order": 181, + "mode": 0, + "inputs": [ + { + "name": "a", + "type": "VEC3", + "link": 3300 + } + ], + "outputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "links": [ + 3680, + 3684 + ], + "slot_index": 0 + }, + { + "name": "FLOAT", + "type": "FLOAT", + "links": [ + 3263, + 3390 + ], + "slot_index": 1 + }, + { + "name": "FLOAT", + "type": "FLOAT", + "links": [ + 3264, + 3391 + ], + "slot_index": 2 + } + ], + "properties": { + "Node name for S&R": "CM_BreakoutVec3", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 2262, + "type": "ControlNetLoader", + "pos": [ + 3220, + 560 + ], + "size": [ + 320, + 60 + ], + "flags": {}, + "order": 123, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "CONTROL_NET", + "type": "CONTROL_NET", + "links": [ + 3505 + ], + "slot_index": 0 + } + ], + "title": "Load ControlNet Union Pro Model", + "properties": { + "Node name for S&R": "ControlNetLoader", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "FLUX\\FLUX.1-dev-ControlNet-Union-Pro\\diffusion_pytorch_model.safetensors" + ] + }, + { + "id": 2265, + "type": "FromBasicPipe", + "pos": [ + 3928.2578125, + 5120.18798828125 + ], + "size": [ + 240, + 110 + ], + "flags": { + "collapsed": true + }, + "order": 180, + "mode": 0, + "inputs": [ + { + "name": "basic_pipe", + "type": "BASIC_PIPE", + "link": 3269 + } + ], + "outputs": [ + { + "name": "model", + "type": "MODEL", + "links": null + }, + { + "name": "clip", + "type": "CLIP", + "links": null + }, + { + "name": "vae", + "type": "VAE", + "links": [ + 3527 + ], + "slot_index": 2 + }, + { + "name": "positive", + "type": "CONDITIONING", + "links": [ + 3517 + ], + "slot_index": 3 + }, + { + "name": "negative", + "type": "CONDITIONING", + "links": [ + 3518 + ], + "slot_index": 4 + } + ], + "properties": { + "Node name for S&R": "FromBasicPipe", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 2269, + "type": "Note", + "pos": [ + 3783.39453125, + 5189.3701171875 + ], + "size": [ + 250, + 100 + ], + "flags": {}, + "order": 124, + "mode": 0, + "inputs": [], + "outputs": [], + "properties": {}, + "widgets_values": [ + "good values for union controlnet:\nstrength: 0.6\nend: 0.2" + ], + "color": "#432", + "bgcolor": "#653" + }, + { + "id": 2276, + "type": "AnyLineArtPreprocessor_aux", + "pos": [ + 4903.65283203125, + 6035.1103515625 + ], + "size": [ + 320, + 180 + ], + "flags": {}, + "order": 305, + "mode": 4, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 3661 + } + ], + "outputs": [ + { + "name": "image", + "type": "IMAGE", + "links": [ + 4026 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "AnyLineArtPreprocessor_aux", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "lineart_standard", + 1280, + 0, + 1, + 36, + 1 + ] + }, + { + "id": 2278, + "type": "DepthAnythingV2Preprocessor", + "pos": [ + 4923.65283203125, + 5885.1103515625 + ], + "size": [ + 320, + 80 + ], + "flags": {}, + "order": 306, + "mode": 4, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 3662 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 3297 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "DepthAnythingV2Preprocessor", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "depth_anything_v2_vitl.pth", + 1024 + ] + }, + { + "id": 2279, + "type": "DWPreprocessor", + "pos": [ + 4923.65283203125, + 5605.1103515625 + ], + "size": [ + 330, + 220 + ], + "flags": {}, + "order": 307, + "mode": 4, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 3663 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 3296 + ], + "slot_index": 0 + }, + { + "name": "POSE_KEYPOINT", + "type": "POSE_KEYPOINT", + "links": null + } + ], + "properties": { + "Node name for S&R": "DWPreprocessor", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "enable", + "enable", + "enable", + 1024, + "yolox_l.onnx", + "dw-ll_ucoco_384_bs5.torchscript.pt", + "disable" + ] + }, + { + "id": 2280, + "type": "ImageBatch", + "pos": [ + 5473.65185546875, + 5795.1103515625 + ], + "size": [ + 210, + 50 + ], + "flags": { + "collapsed": true + }, + "order": 338, + "mode": 0, + "inputs": [ + { + "name": "image1", + "type": "IMAGE", + "link": 4032 + }, + { + "name": "image2", + "type": "IMAGE", + "link": 4031 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 4029 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "ImageBatch", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 2281, + "type": "ImageBatch", + "pos": [ + 5593.65234375, + 6065.1103515625 + ], + "size": [ + 210, + 50 + ], + "flags": { + "collapsed": true + }, + "order": 345, + "mode": 0, + "inputs": [ + { + "name": "image1", + "type": "IMAGE", + "link": 4029 + }, + { + "name": "image2", + "type": "IMAGE", + "link": 4030 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 3295 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "ImageBatch", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 2284, + "type": "SetShakkerLabsUnionControlNetType", + "pos": [ + 4373.396484375, + 5159.3701171875 + ], + "size": [ + 210, + 60 + ], + "flags": { + "collapsed": false + }, + "order": 256, + "mode": 0, + "inputs": [ + { + "name": "control_net", + "type": "CONTROL_NET", + "link": 3501 + } + ], + "outputs": [ + { + "name": "CONTROL_NET", + "type": "CONTROL_NET", + "links": [ + 3418, + 3419 + ], + "slot_index": 0 + } + ], + "title": "ControlNet Type", + "properties": { + "Node name for S&R": "SetShakkerLabsUnionControlNetType", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "auto" + ] + }, + { + "id": 2292, + "type": "ControlNetApplyAdvanced", + "pos": [ + 5543.396484375, + 5109.3701171875 + ], + "size": [ + 300, + 170 + ], + "flags": { + "collapsed": true + }, + "order": 318, + "mode": 4, + "inputs": [ + { + "name": "positive", + "type": "CONDITIONING", + "link": 3302 + }, + { + "name": "negative", + "type": "CONDITIONING", + "link": 3303 + }, + { + "name": "control_net", + "type": "CONTROL_NET", + "link": 3345 + }, + { + "name": "image", + "type": "IMAGE", + "link": 3310 + }, + { + "name": "vae", + "type": "VAE", + "link": 3410, + "shape": 7 + }, + { + "name": "strength", + "type": "FLOAT", + "link": 3701, + "widget": { + "name": "strength" + } + }, + { + "name": "start_percent", + "type": "FLOAT", + "link": 3316, + "widget": { + "name": "start_percent" + } + }, + { + "name": "end_percent", + "type": "FLOAT", + "link": 3317, + "widget": { + "name": "end_percent" + } + } + ], + "outputs": [ + { + "name": "positive", + "type": "CONDITIONING", + "links": [ + 3308 + ], + "slot_index": 0 + }, + { + "name": "negative", + "type": "CONDITIONING", + "links": [ + 3309 + ], + "slot_index": 1 + } + ], + "properties": { + "Node name for S&R": "ControlNetApplyAdvanced", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 1, + 0, + 1 + ] + }, + { + "id": 2293, + "type": "ControlNetApplyAdvanced", + "pos": [ + 6273.396484375, + 5109.3701171875 + ], + "size": [ + 300, + 170 + ], + "flags": { + "collapsed": true + }, + "order": 334, + "mode": 4, + "inputs": [ + { + "name": "positive", + "type": "CONDITIONING", + "link": 3308 + }, + { + "name": "negative", + "type": "CONDITIONING", + "link": 3309 + }, + { + "name": "control_net", + "type": "CONTROL_NET", + "link": 3344 + }, + { + "name": "image", + "type": "IMAGE", + "link": 3311 + }, + { + "name": "vae", + "type": "VAE", + "link": 3413, + "shape": 7 + }, + { + "name": "strength", + "type": "FLOAT", + "link": 3697, + "widget": { + "name": "strength" + } + }, + { + "name": "start_percent", + "type": "FLOAT", + "link": 3320, + "widget": { + "name": "start_percent" + } + }, + { + "name": "end_percent", + "type": "FLOAT", + "link": 3321, + "widget": { + "name": "end_percent" + } + } + ], + "outputs": [ + { + "name": "positive", + "type": "CONDITIONING", + "links": [ + 3329 + ], + "slot_index": 0 + }, + { + "name": "negative", + "type": "CONDITIONING", + "links": [ + 3330 + ], + "slot_index": 1 + } + ], + "properties": { + "Node name for S&R": "ControlNetApplyAdvanced", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 1, + 0, + 1 + ] + }, + { + "id": 2296, + "type": "CM_BreakoutVec3", + "pos": [ + 5183.396484375, + 5279.3701171875 + ], + "size": [ + 210, + 70 + ], + "flags": { + "collapsed": true + }, + "order": 182, + "mode": 0, + "inputs": [ + { + "name": "a", + "type": "VEC3", + "link": 3312 + } + ], + "outputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "links": [ + 3699, + 3703 + ], + "slot_index": 0 + }, + { + "name": "FLOAT", + "type": "FLOAT", + "links": [ + 3316, + 3394 + ], + "slot_index": 1 + }, + { + "name": "FLOAT", + "type": "FLOAT", + "links": [ + 3317, + 3395 + ], + "slot_index": 2 + } + ], + "properties": { + "Node name for S&R": "CM_BreakoutVec3", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 2298, + "type": "CM_BreakoutVec3", + "pos": [ + 5943.396484375, + 5279.3701171875 + ], + "size": [ + 210, + 70 + ], + "flags": { + "collapsed": true + }, + "order": 183, + "mode": 0, + "inputs": [ + { + "name": "a", + "type": "VEC3", + "link": 3318 + } + ], + "outputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "links": [ + 3696, + 3702 + ], + "slot_index": 0 + }, + { + "name": "FLOAT", + "type": "FLOAT", + "links": [ + 3320, + 3398 + ], + "slot_index": 1 + }, + { + "name": "FLOAT", + "type": "FLOAT", + "links": [ + 3321, + 3399 + ], + "slot_index": 2 + } + ], + "properties": { + "Node name for S&R": "CM_BreakoutVec3", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 2302, + "type": "ControlNetApplyAdvanced", + "pos": [ + 7018.259765625, + 5110.18798828125 + ], + "size": [ + 300, + 170 + ], + "flags": { + "collapsed": true + }, + "order": 343, + "mode": 4, + "inputs": [ + { + "name": "positive", + "type": "CONDITIONING", + "link": 3329 + }, + { + "name": "negative", + "type": "CONDITIONING", + "link": 3330 + }, + { + "name": "control_net", + "type": "CONTROL_NET", + "link": 3343 + }, + { + "name": "image", + "type": "IMAGE", + "link": 4074 + }, + { + "name": "vae", + "type": "VAE", + "link": 3415, + "shape": 7 + }, + { + "name": "strength", + "type": "FLOAT", + "link": 3694, + "widget": { + "name": "strength" + } + }, + { + "name": "start_percent", + "type": "FLOAT", + "link": 3333, + "widget": { + "name": "start_percent" + } + }, + { + "name": "end_percent", + "type": "FLOAT", + "link": 3334, + "widget": { + "name": "end_percent" + } + } + ], + "outputs": [ + { + "name": "positive", + "type": "CONDITIONING", + "links": [ + 4682 + ], + "slot_index": 0 + }, + { + "name": "negative", + "type": "CONDITIONING", + "links": [ + 4684 + ], + "slot_index": 1 + } + ], + "properties": { + "Node name for S&R": "ControlNetApplyAdvanced", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 1, + 0, + 1 + ] + }, + { + "id": 2303, + "type": "CM_BreakoutVec3", + "pos": [ + 6633.396484375, + 5279.3701171875 + ], + "size": [ + 210, + 70 + ], + "flags": { + "collapsed": true + }, + "order": 184, + "mode": 0, + "inputs": [ + { + "name": "a", + "type": "VEC3", + "link": 3331 + } + ], + "outputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "links": [ + 3693, + 3704 + ], + "slot_index": 0 + }, + { + "name": "FLOAT", + "type": "FLOAT", + "links": [ + 3333, + 3371 + ], + "slot_index": 1 + }, + { + "name": "FLOAT", + "type": "FLOAT", + "links": [ + 3334, + 3372 + ], + "slot_index": 2 + } + ], + "properties": { + "Node name for S&R": "CM_BreakoutVec3", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 2306, + "type": "SetShakkerLabsUnionControlNetType", + "pos": [ + 5053.396484375, + 5169.3701171875 + ], + "size": [ + 210, + 60 + ], + "flags": {}, + "order": 281, + "mode": 0, + "inputs": [ + { + "name": "control_net", + "type": "CONTROL_NET", + "link": 3520 + } + ], + "outputs": [ + { + "name": "CONTROL_NET", + "type": "CONTROL_NET", + "links": [ + 3345, + 3384 + ], + "slot_index": 0 + } + ], + "title": "ControlNet Type", + "properties": { + "Node name for S&R": "SetShakkerLabsUnionControlNetType", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "depth" + ] + }, + { + "id": 2307, + "type": "SetShakkerLabsUnionControlNetType", + "pos": [ + 5793.396484375, + 5169.3701171875 + ], + "size": [ + 230, + 60 + ], + "flags": {}, + "order": 303, + "mode": 0, + "inputs": [ + { + "name": "control_net", + "type": "CONTROL_NET", + "link": 3523 + } + ], + "outputs": [ + { + "name": "CONTROL_NET", + "type": "CONTROL_NET", + "links": [ + 3344, + 3385 + ], + "slot_index": 0 + } + ], + "title": "ControlNet Type", + "properties": { + "Node name for S&R": "SetShakkerLabsUnionControlNetType", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "pose" + ] + }, + { + "id": 2308, + "type": "SetShakkerLabsUnionControlNetType", + "pos": [ + 6563.396484375, + 5179.3701171875 + ], + "size": [ + 210, + 60 + ], + "flags": {}, + "order": 322, + "mode": 0, + "inputs": [ + { + "name": "control_net", + "type": "CONTROL_NET", + "link": 3525 + } + ], + "outputs": [ + { + "name": "CONTROL_NET", + "type": "CONTROL_NET", + "links": [ + 3343, + 3368 + ], + "slot_index": 0 + } + ], + "title": "ControlNet Type", + "properties": { + "Node name for S&R": "SetShakkerLabsUnionControlNetType", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "tile" + ] + }, + { + "id": 2310, + "type": "ControlNetSlider", + "pos": [ + 1760, + 780 + ], + "size": [ + 310, + 110 + ], + "flags": { + "collapsed": false, + "pinned": true + }, + "order": 125, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "VEC3", + "type": "VEC3", + "links": [ + 3347 + ], + "slot_index": 0 + } + ], + "title": "Lineart", + "properties": { + "Node name for S&R": "ControlNetSlider", + "enableTabs": true, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 0, + 0, + 0.19 + ] + }, + { + "id": 2312, + "type": "ControlNetSlider", + "pos": [ + 1760, + 780 + ], + "size": [ + 310, + 110 + ], + "flags": { + "collapsed": false, + "pinned": true + }, + "order": 126, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "VEC3", + "type": "VEC3", + "links": [ + 3348 + ], + "slot_index": 0 + } + ], + "title": "OpenPose", + "properties": { + "Node name for S&R": "ControlNetSlider", + "enableTabs": true, + "tabWidth": 65, + "tabXOffset": 150, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 0, + 0, + 0.2 + ], + "color": "#233", + "bgcolor": "#355" + }, + { + "id": 2314, + "type": "ControlNetSlider", + "pos": [ + 1760, + 780 + ], + "size": [ + 310, + 110 + ], + "flags": { + "collapsed": false, + "pinned": true + }, + "order": 127, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "VEC3", + "type": "VEC3", + "links": [ + 3349 + ], + "slot_index": 0 + } + ], + "title": "Tile", + "properties": { + "Node name for S&R": "ControlNetSlider", + "enableTabs": true, + "tabWidth": 65, + "tabXOffset": 220, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 0, + 0, + 0.2 + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 2317, + "type": "CondPassThrough", + "pos": [ + 7253, + 5115 + ], + "size": [ + 220, + 50 + ], + "flags": { + "collapsed": true + }, + "order": 348, + "mode": 0, + "inputs": [ + { + "name": "positive", + "type": "CONDITIONING", + "link": 4682, + "shape": 7 + }, + { + "name": "negative", + "type": "CONDITIONING", + "link": 4684, + "shape": 7 + } + ], + "outputs": [ + { + "name": "positive", + "type": "CONDITIONING", + "links": [ + 3356 + ], + "slot_index": 0 + }, + { + "name": "negative", + "type": "CONDITIONING", + "links": null + } + ], + "properties": { + "Node name for S&R": "CondPassThrough", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 2333, + "type": "ImpactControlNetApplyAdvancedSEGS", + "pos": [ + 7058.259765625, + 5370.18798828125 + ], + "size": [ + 270, + 170 + ], + "flags": { + "collapsed": true + }, + "order": 344, + "mode": 4, + "inputs": [ + { + "name": "segs", + "type": "SEGS", + "link": 3380 + }, + { + "name": "control_net", + "type": "CONTROL_NET", + "link": 3368 + }, + { + "name": "segs_preprocessor", + "type": "SEGS_PREPROCESSOR", + "link": null, + "shape": 7 + }, + { + "name": "control_image", + "type": "IMAGE", + "link": 4075, + "shape": 7 + }, + { + "name": "vae", + "type": "VAE", + "link": 3414, + "shape": 7 + }, + { + "name": "strength", + "type": "FLOAT", + "link": 3695, + "widget": { + "name": "strength" + } + }, + { + "name": "start_percent", + "type": "FLOAT", + "link": 3371, + "widget": { + "name": "start_percent" + } + }, + { + "name": "end_percent", + "type": "FLOAT", + "link": 3372, + "widget": { + "name": "end_percent" + } + } + ], + "outputs": [ + { + "name": "SEGS", + "type": "SEGS", + "links": [ + 3402 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "ImpactControlNetApplyAdvancedSEGS", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 1, + 0, + 1 + ] + }, + { + "id": 2334, + "type": "Image Comparer (rgthree)", + "pos": [ + 840, + 150 + ], + "size": [ + 870, + 920 + ], + "flags": { + "collapsed": false, + "pinned": true + }, + "order": 187, + "mode": 0, + "inputs": [ + { + "name": "image_a", + "type": "IMAGE", + "link": 3426, + "dir": 3 + }, + { + "name": "image_b", + "type": "IMAGE", + "link": 3425, + "dir": 3 + } + ], + "outputs": [], + "title": "Img Compare", + "properties": { + "comparer_mode": "Slide" + }, + "widgets_values": [ + [ + { + "name": "A", + "selected": true, + "url": "/api/view?filename=rgthree.compare._temp_zzyzt_00155_.png&type=temp&subfolder=&rand=0.005677911609381803" + }, + { + "name": "B", + "selected": true, + "url": "/api/view?filename=rgthree.compare._temp_zzyzt_00156_.png&type=temp&subfolder=&rand=0.29450598259729865" + } + ] + ], + "color": "#222", + "bgcolor": "#000" + }, + { + "id": 2335, + "type": "MaskToSEGS", + "pos": [ + 3983.39453125, + 5359.3701171875 + ], + "size": [ + 260, + 150 + ], + "flags": { + "collapsed": true + }, + "order": 247, + "mode": 0, + "inputs": [ + { + "name": "mask", + "type": "MASK", + "link": 3376 + } + ], + "outputs": [ + { + "name": "SEGS", + "type": "SEGS", + "links": [ + 3673 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "MaskToSEGS", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + false, + 1, + false, + 10, + false + ] + }, + { + "id": 2336, + "type": "ImpactGaussianBlurMask", + "pos": [ + 3793.39453125, + 5359.3701171875 + ], + "size": [ + 210, + 80 + ], + "flags": { + "collapsed": true + }, + "order": 186, + "mode": 0, + "inputs": [ + { + "name": "mask", + "type": "MASK", + "link": 3377 + } + ], + "outputs": [ + { + "name": "MASK", + "type": "MASK", + "links": [ + 3376 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "ImpactGaussianBlurMask", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 10, + 10 + ] + }, + { + "id": 2339, + "type": "ImpactControlNetApplyAdvancedSEGS", + "pos": [ + 6273.396484375, + 5359.3701171875 + ], + "size": [ + 270, + 170 + ], + "flags": { + "collapsed": true + }, + "order": 335, + "mode": 4, + "inputs": [ + { + "name": "segs", + "type": "SEGS", + "link": 3379 + }, + { + "name": "control_net", + "type": "CONTROL_NET", + "link": 3385 + }, + { + "name": "segs_preprocessor", + "type": "SEGS_PREPROCESSOR", + "link": null, + "shape": 7 + }, + { + "name": "control_image", + "type": "IMAGE", + "link": 3400, + "shape": 7 + }, + { + "name": "vae", + "type": "VAE", + "link": 3412, + "shape": 7 + }, + { + "name": "strength", + "type": "FLOAT", + "link": 3698, + "widget": { + "name": "strength" + } + }, + { + "name": "start_percent", + "type": "FLOAT", + "link": 3398, + "widget": { + "name": "start_percent" + } + }, + { + "name": "end_percent", + "type": "FLOAT", + "link": 3399, + "widget": { + "name": "end_percent" + } + } + ], + "outputs": [ + { + "name": "SEGS", + "type": "SEGS", + "links": [ + 3380 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "ImpactControlNetApplyAdvancedSEGS", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 1, + 0, + 1 + ] + }, + { + "id": 2340, + "type": "ImpactControlNetApplyAdvancedSEGS", + "pos": [ + 5513.396484375, + 5359.3701171875 + ], + "size": [ + 270, + 170 + ], + "flags": { + "collapsed": true + }, + "order": 319, + "mode": 4, + "inputs": [ + { + "name": "segs", + "type": "SEGS", + "link": 3378 + }, + { + "name": "control_net", + "type": "CONTROL_NET", + "link": 3384 + }, + { + "name": "segs_preprocessor", + "type": "SEGS_PREPROCESSOR", + "link": null, + "shape": 7 + }, + { + "name": "control_image", + "type": "IMAGE", + "link": 3396, + "shape": 7 + }, + { + "name": "vae", + "type": "VAE", + "link": 3411, + "shape": 7 + }, + { + "name": "strength", + "type": "FLOAT", + "link": 3700, + "widget": { + "name": "strength" + } + }, + { + "name": "start_percent", + "type": "FLOAT", + "link": 3394, + "widget": { + "name": "start_percent" + } + }, + { + "name": "end_percent", + "type": "FLOAT", + "link": 3395, + "widget": { + "name": "end_percent" + } + } + ], + "outputs": [ + { + "name": "SEGS", + "type": "SEGS", + "links": [ + 3379 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "ImpactControlNetApplyAdvancedSEGS", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 1, + 0, + 1 + ] + }, + { + "id": 2341, + "type": "ImpactControlNetApplyAdvancedSEGS", + "pos": [ + 4813.396484375, + 5349.3701171875 + ], + "size": [ + 270, + 170 + ], + "flags": { + "collapsed": true + }, + "order": 299, + "mode": 4, + "inputs": [ + { + "name": "segs", + "type": "SEGS", + "link": 3673 + }, + { + "name": "control_net", + "type": "CONTROL_NET", + "link": 3418 + }, + { + "name": "segs_preprocessor", + "type": "SEGS_PREPROCESSOR", + "link": null, + "shape": 7 + }, + { + "name": "control_image", + "type": "IMAGE", + "link": 3392, + "shape": 7 + }, + { + "name": "vae", + "type": "VAE", + "link": 3405, + "shape": 7 + }, + { + "name": "strength", + "type": "FLOAT", + "link": 3686, + "widget": { + "name": "strength" + } + }, + { + "name": "start_percent", + "type": "FLOAT", + "link": 3390, + "widget": { + "name": "start_percent" + } + }, + { + "name": "end_percent", + "type": "FLOAT", + "link": 3391, + "widget": { + "name": "end_percent" + } + } + ], + "outputs": [ + { + "name": "SEGS", + "type": "SEGS", + "links": [ + 3378 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "ImpactControlNetApplyAdvancedSEGS", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 1, + 0, + 1 + ] + }, + { + "id": 2344, + "type": "SEGSPass", + "pos": [ + 7296, + 5374 + ], + "size": [ + 210, + 30 + ], + "flags": { + "collapsed": true + }, + "order": 349, + "mode": 0, + "inputs": [ + { + "name": "SEGS", + "type": "SEGS", + "link": 3402 + } + ], + "outputs": [ + { + "name": "SEGS", + "type": "SEGS", + "links": [ + 3403 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "SEGSPass", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 2345, + "type": "Reroute", + "pos": [ + 4653.396484375, + 5029.3701171875 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 273, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 3526 + } + ], + "outputs": [ + { + "name": "", + "type": "VAE", + "links": [ + 3405, + 3406, + 3521 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 2346, + "type": "Reroute", + "pos": [ + 5383.396484375, + 5029.3701171875 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 297, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 3521 + } + ], + "outputs": [ + { + "name": "", + "type": "VAE", + "links": [ + 3408, + 3410, + 3411 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 2347, + "type": "Reroute", + "pos": [ + 6113.396484375, + 5029.3701171875 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 317, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 3408 + } + ], + "outputs": [ + { + "name": "", + "type": "VAE", + "links": [ + 3409, + 3412, + 3413 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 2348, + "type": "Reroute", + "pos": [ + 6943.396484375, + 5029.3701171875 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 333, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 3409 + } + ], + "outputs": [ + { + "name": "", + "type": "VAE", + "links": [ + 3414, + 3415 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 2397, + "type": "ImageDisplay", + "pos": [ + 2050, + 90 + ], + "size": [ + 26.399999618530273, + 30 + ], + "flags": { + "collapsed": false + }, + "order": 128, + "mode": 0, + "inputs": [], + "outputs": [], + "title": "Unnamed", + "properties": { + "originalWidth": 44, + "originalHeight": 50, + "maintainAspectRatio": true, + "imageBase64": "iVBORw0KGgoAAAANSUhEUgAAACwAAAAyCAYAAAAnWDnqAAAACXBIWXMAAAsTAAALEwEAmpwYAAAGGmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgOS4xLWMwMDIgNzkuYjdjNjRjYywgMjAyNC8wNy8xNi0wNzo1OTo0MCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDI2LjEgKDIwMjQxMDE5Lm0uMjgxNSBhMjQ5ZDA0KSAgKFdpbmRvd3MpIiB4bXA6Q3JlYXRlRGF0ZT0iMjAyNC0wNC0xOVQxMToyMDo1NSsxMDowMCIgeG1wOk1vZGlmeURhdGU9IjIwMjQtMTAtMjNUMTk6MzM6MDArMTE6MDAiIHhtcDpNZXRhZGF0YURhdGU9IjIwMjQtMTAtMjNUMTk6MzM6MDArMTE6MDAiIGRjOmZvcm1hdD0iaW1hZ2UvcG5nIiBwaG90b3Nob3A6Q29sb3JNb2RlPSIzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjQyYjIxNGY1LTFkN2UtNzY0NC1hMzYyLWM2ZjE0YzA1NzE3YiIgeG1wTU06RG9jdW1lbnRJRD0iYWRvYmU6ZG9jaWQ6cGhvdG9zaG9wOjhiYTk0MTFkLTI2YjYtZDM0Ni1hZjFkLTVmZjdkZmNmMzhhMyIgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjUwMTM1MDM0LWQ2NWYtMjk0YS04YjMyLWY4ZDZiNjI0OGMzMiI+IDx4bXBNTTpIaXN0b3J5PiA8cmRmOlNlcT4gPHJkZjpsaSBzdEV2dDphY3Rpb249ImNyZWF0ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6NTAxMzUwMzQtZDY1Zi0yOTRhLThiMzItZjhkNmI2MjQ4YzMyIiBzdEV2dDp3aGVuPSIyMDI0LTA0LTE5VDExOjIwOjU1KzEwOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgMjYuMSAoMjAyNDEwMTkubS4yODE1IGEyNDlkMDQpICAoV2luZG93cykiLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjQyYjIxNGY1LTFkN2UtNzY0NC1hMzYyLWM2ZjE0YzA1NzE3YiIgc3RFdnQ6d2hlbj0iMjAyNC0xMC0yM1QxOTozMzowMCsxMTowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIDI2LjEgKDIwMjQxMDE5Lm0uMjgxNSBhMjQ5ZDA0KSAgKFdpbmRvd3MpIiBzdEV2dDpjaGFuZ2VkPSIvIi8+IDwvcmRmOlNlcT4gPC94bXBNTTpIaXN0b3J5PiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pg8rrwEAABT4SURBVGjendlpjCXXddjx/721v1dv37v7dfdMz/Tswxnui0RSC9eIogxFlhyQUSDFSSBZMBBESmDICWzFieNYCQgYChzHhuXYUOQYpijJokTRJDXkiOTs+/Ss3T3dPb2+fatXaz6MYYTmNmIBv4+FOlV16p5zT4nxSoUPeihSMru0xD/99NPf+OUnnvq6FJ36aCWBpqsgBI3WkJXVgeU4ofqNZ/79/TOX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", + "lastWidth": 26.399999618530273, + "lastHeight": 30 + }, + "color": "#00000000", + "bgcolor": "#00000000", + "shape": 1, + "lastWidth": 26.399999618530273, + "lastHeight": 30, + "imageBase64": "iVBORw0KGgoAAAANSUhEUgAAACwAAAAyCAYAAAAnWDnqAAAACXBIWXMAAAsTAAALEwEAmpwYAAAGGmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgOS4xLWMwMDIgNzkuYjdjNjRjYywgMjAyNC8wNy8xNi0wNzo1OTo0MCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDI2LjEgKDIwMjQxMDE5Lm0uMjgxNSBhMjQ5ZDA0KSAgKFdpbmRvd3MpIiB4bXA6Q3JlYXRlRGF0ZT0iMjAyNC0wNC0xOVQxMToyMDo1NSsxMDowMCIgeG1wOk1vZGlmeURhdGU9IjIwMjQtMTAtMjNUMTk6MzM6MDArMTE6MDAiIHhtcDpNZXRhZGF0YURhdGU9IjIwMjQtMTAtMjNUMTk6MzM6MDArMTE6MDAiIGRjOmZvcm1hdD0iaW1hZ2UvcG5nIiBwaG90b3Nob3A6Q29sb3JNb2RlPSIzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjQyYjIxNGY1LTFkN2UtNzY0NC1hMzYyLWM2ZjE0YzA1NzE3YiIgeG1wTU06RG9jdW1lbnRJRD0iYWRvYmU6ZG9jaWQ6cGhvdG9zaG9wOjhiYTk0MTFkLTI2YjYtZDM0Ni1hZjFkLTVmZjdkZmNmMzhhMyIgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjUwMTM1MDM0LWQ2NWYtMjk0YS04YjMyLWY4ZDZiNjI0OGMzMiI+IDx4bXBNTTpIaXN0b3J5PiA8cmRmOlNlcT4gPHJkZjpsaSBzdEV2dDphY3Rpb249ImNyZWF0ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6NTAxMzUwMzQtZDY1Zi0yOTRhLThiMzItZjhkNmI2MjQ4YzMyIiBzdEV2dDp3aGVuPSIyMDI0LTA0LTE5VDExOjIwOjU1KzEwOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgMjYuMSAoMjAyNDEwMTkubS4yODE1IGEyNDlkMDQpICAoV2luZG93cykiLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjQyYjIxNGY1LTFkN2UtNzY0NC1hMzYyLWM2ZjE0YzA1NzE3YiIgc3RFdnQ6d2hlbj0iMjAyNC0xMC0yM1QxOTozMzowMCsxMTowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIDI2LjEgKDIwMjQxMDE5Lm0uMjgxNSBhMjQ5ZDA0KSAgKFdpbmRvd3MpIiBzdEV2dDpjaGFuZ2VkPSIvIi8+IDwvcmRmOlNlcT4gPC94bXBNTTpIaXN0b3J5PiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pg8rrwEAABT4SURBVGjendlpjCXXddjx/721v1dv37v7dfdMz/Tswxnui0RSC9eIogxFlhyQUSDFSSBZMBBESmDICWzFieNYCQgYChzHhuXYUOQYpijJokTRJDXkiOTs+/Ss3T3dPb2+fatXaz6MYYTmNmIBv4+FOlV16p5zT4nxSoUPeihSMru0xD/99NPf+OUnnvq6FJ36aCWBpqsgBI3WkJXVgeU4ofqNZ/79/TOX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" + }, + { + "id": 2413, + "type": "ImageDisplay", + "pos": [ + 470, + 90 + ], + "size": [ + 320, + 63.26359939575195 + ], + "flags": { + "pinned": true + }, + "order": 129, + "mode": 0, + "inputs": [], + "outputs": [], + "title": "Unnamed", + "properties": { + "originalWidth": 956, + "originalHeight": 189, + "maintainAspectRatio": true, + "imageBase64": "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Y0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALEwAACxMBAJqcGAAABoJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDkuMS1jMDAyIDc5LmI3YzY0Y2MsIDIwMjQvMDcvMTYtMDc6NTk6NDAgICAgICAgICI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiB4bWxuczpwaG90b3Nob3A9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGhvdG9zaG9wLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCAyNi4xICgyMDI0MTAxOS5tLjI4MTUgYTI0OWQwNCkgIChXaW5kb3dzKSIgeG1wOkNyZWF0ZURhdGU9IjIwMjQtMTAtMjNUMTg6NTQ6NDQrMTE6MDAiIHhtcDpNb2RpZnlEYXRlPSIyMDI0LTEwLTIzVDE5OjIzOjMzKzExOjAwIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDI0LTEwLTIzVDE5OjIzOjMzKzExOjAwIiBkYzpmb3JtYXQ9ImltYWdlL3BuZyIgcGhvdG9zaG9wOkNvbG9yTW9kZT0iMyIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDoyYzZmNjdjNy02NTI1LTdjNDctYmU3MC01NmFmYWQ0Y2YzMmQiIHhtcE1NOkRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmNmNTZlYi03NTZhLWY3NGMtYmYwYS1lM2JlZmY1YWMxMWYiIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo5MmE5MDI5Ni1jOTE2LWUwNDgtYTM0My1jNjgwYmVjYWNkNTEiPiA8eG1wTU06SGlzdG9yeT4gPHJkZjpTZXE+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJjcmVhdGVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjkyYTkwMjk2LWM5MTYtZTA0OC1hMzQzLWM2ODBiZWNhY2Q1MSIgc3RFdnQ6d2hlbj0iMjAyNC0xMC0yM1QxODo1NDo0NCsxMTowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIDI2LjEgKDIwMjQxMDE5Lm0uMjgxNSBhMjQ5ZDA0KSAgKFdpbmRvd3MpIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJjb252ZXJ0ZWQiIHN0RXZ0OnBhcmFtZXRlcnM9ImZyb20gYXBwbGljYXRpb24vdm5kLmFkb2JlLnBob3Rvc2hvcCB0byBpbWFnZS9wbmciLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjJjNmY2N2M3LTY1MjUtN2M0Ny1iZTcwLTU2YWZhZDRjZjMyZCIgc3RFdnQ6d2hlbj0iMjAyNC0xMC0yM1QxOToyMzozMysxMTowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIDI2LjEgKDIwMjQxMDE5Lm0uMjgxNSBhMjQ5ZDA0KSAgKFdpbmRvd3MpIiBzdEV2dDpjaGFuZ2VkPSIvIi8+IDwvcmRmOlNlcT4gPC94bXBNTTpIaXN0b3J5PiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PpGGSOYAA3j5SURBVHja7P13uK5nWSYOn9ddnvLWtfZau+8kO72TBJJACiUUg4iAUgVEBAfEBiM4Kli+0XEcHXUc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", + "lastWidth": 320, + "lastHeight": 63.26359939575195 + }, + "color": "#00000000", + "bgcolor": "#00000000", + "shape": 1, + "lastWidth": 320, + "lastHeight": 63.26359939575195, + "imageBase64": "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Y0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALEwAACxMBAJqcGAAABoJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDkuMS1jMDAyIDc5LmI3YzY0Y2MsIDIwMjQvMDcvMTYtMDc6NTk6NDAgICAgICAgICI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiB4bWxuczpwaG90b3Nob3A9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGhvdG9zaG9wLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCAyNi4xICgyMDI0MTAxOS5tLjI4MTUgYTI0OWQwNCkgIChXaW5kb3dzKSIgeG1wOkNyZWF0ZURhdGU9IjIwMjQtMTAtMjNUMTg6NTQ6NDQrMTE6MDAiIHhtcDpNb2RpZnlEYXRlPSIyMDI0LTEwLTIzVDE5OjIzOjMzKzExOjAwIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDI0LTEwLTIzVDE5OjIzOjMzKzExOjAwIiBkYzpmb3JtYXQ9ImltYWdlL3BuZyIgcGhvdG9zaG9wOkNvbG9yTW9kZT0iMyIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDoyYzZmNjdjNy02NTI1LTdjNDctYmU3MC01NmFmYWQ0Y2YzMmQiIHhtcE1NOkRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmNmNTZlYi03NTZhLWY3NGMtYmYwYS1lM2JlZmY1YWMxMWYiIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo5MmE5MDI5Ni1jOTE2LWUwNDgtYTM0My1jNjgwYmVjYWNkNTEiPiA8eG1wTU06SGlzdG9yeT4gPHJkZjpTZXE+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJjcmVhdGVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjkyYTkwMjk2LWM5MTYtZTA0OC1hMzQzLWM2ODBiZWNhY2Q1MSIgc3RFdnQ6d2hlbj0iMjAyNC0xMC0yM1QxODo1NDo0NCsxMTowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIDI2LjEgKDIwMjQxMDE5Lm0uMjgxNSBhMjQ5ZDA0KSAgKFdpbmRvd3MpIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJjb252ZXJ0ZWQiIHN0RXZ0OnBhcmFtZXRlcnM9ImZyb20gYXBwbGljYXRpb24vdm5kLmFkb2JlLnBob3Rvc2hvcCB0byBpbWFnZS9wbmciLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjJjNmY2N2M3LTY1MjUtN2M0Ny1iZTcwLTU2YWZhZDRjZjMyZCIgc3RFdnQ6d2hlbj0iMjAyNC0xMC0yM1QxOToyMzozMysxMTowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIDI2LjEgKDIwMjQxMDE5Lm0uMjgxNSBhMjQ5ZDA0KSAgKFdpbmRvd3MpIiBzdEV2dDpjaGFuZ2VkPSIvIi8+IDwvcmRmOlNlcT4gPC94bXBNTTpIaXN0b3J5PiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PpGGSOYAA3j5SURBVHja7P13uK5nWSYOn9ddnvLWtfZau+8kO72TBJJACiUUg4iAUgVEBAfEBiM4Kli+0XEcHXUcHQuOo+PMqIwzDqMCCkiHQEgggVTSy05233ut9Zan3O33x3U/z/uunZ2gv+87ji9/vFeOJKu+5X7Kus/rPK/zJCIBhAClFISUsMYghAApJZz3CCGAAEgp4OEATwie4OGhEgEQIXggUQmstQACBABjHCAIeacDZw3qqoLSCUIISHSCopqCIAAAQggAAcYYaJ2ABAEAnOXnz/McRART1/DewwfHr4sEhJJACHDWI0kSBO8RKCCEAIDgnYeUEkISrLfwziNYfs6l4RDWWdR1BessnPVQSkFpCWsdfPBw3kFKieAcfAjQ8X2mWYIQAGNMfM8S3nmQBCAIzlgIKaGkhHMOUmpYayGkgCCCNQaAgBQCIMBYw88TAoL3UDqBkgpVXSEgoNvNUJU1vA2AIEhB8C4ABKhEwzsPZx0CACIBUICzBgSCkhrOO/jgoBMNJRRqY4AQEBDg4YFAkEKABCG4AK0TWGdhTIUkSeHjuSCFgjUWgIfOUhAAUxsEeBAEiIgfAwHBOwihIEjAOgcfLCQpgAjOWWilgQB4eD7uklAWBQQIgiQCAJVIGGvgrYeSCsZYyEQg0QlMZWCt4XNXSHh4fp3OQwoJ5wKIAjx5AACB4L2HEALx9ACBAAQEAMHzzwMEBMyKACL+3eZxNleI/yUQ4u+3X6f2/2HuZ/knZz/bfDZ7RbOfxdxX6AmPfeLrOPFr/O6ICETE10UAaO7Hwtyvhfg9ImqfN4TAP4MApRW8j98Jnr8eAFCAEBJAiOcKIOK5ABC8dyAiCCHgvW9fS/CzhSZB7fM0bz0gzI5TCCdZqaeuZo2pXcb2wG96w/Pr05wjzeMHzN5/8zA+8D1ECIKzNl538VgSnz/8fkJ8v/G6DPE1hfgSRHxJ8T5IIDjn4zEDBEk4bzcdDyUlPBDvbQLOOpCMx9bH+2lo3hMgtISzDkpqeMf3AQcLpVK4eC0vLS+hLCtMJ9P2tfBxD/F18bsPYfP527z2Zu34dcYrIQQIQQAFPmdCcywEr4Hg8wYOEEIiUHz8eL4pJUFE/P6lgLcO3gcI4q/74EAQkEohBA9BfG4poVGZAv3+AMPhEMeOHkWW56jqEiEQut0eqqKA8wYueNRlBSk0pCRIrfneTASlEkwmY3Q6uSCh/HQ6RqIUSMh4fgPGWT6nnUNdV1jUoha1qEUtalFPv5K8WWk2MgHe8SYlIPCWhhjsaqV4syFV3NBEXOA9yIW4ieGNbYibex88QvDtBi54/j0PD+8cJEn4+Lwkqd3INJtg7xkIBe9R1TVICCgpIJUEIEBCwMfHFSSAuBFnwMevm0AQRHDBAwHodrsgIqRJCh88yqqEIIJQkgG/NVjdugoiGQEQb0iV1Oh1+8jzHKauYUwNAFBKgwJBKYVAvOFTWkNKCe9cBAz8mnzcHSaJQgB4nYmBA29SASkkhJCobQXnHBBcBFq8AeX1B6zzkEJAawaBQhA3KaxtN6xK8bFygTfcfLwCgvNIEg2lNDw8nLMtGJRCQCcJjLHwzkFIASlVbEoA1tVQiebdXiB4Z+G8BSD58YKH9wwiAh9ECCVBgkAk2nVhTBAiEI7nU/Dw1oHiGkjJx8AaAyElXLAIFJCnWcQqAVIq+HACxBQzwCiFAoEgSfA5GgJkBGaIIKZp6lCLiuL/TsBTBAYRT/zeE4EXPQkApvjPZiDbfG0ewoX2a/Po+4m/O//8JwGAEbxSaLAdAWIOZkfAJ0i094DN74Ffn9aqbVYFBHjnW8DIYIfP483Ah+JxFHzehdACpk0vURAozDUETsDtgkS8Sc0dh38C2MXcym5ekBNbBNQeW0FirhEQZoC5+bU5gEeg2FzD3LHC7ByZOy4NEAzNmoEQmq5D/H/wAT54SEEtyPTBt8CZ4s867xhsN9d7BNNK6hYok+SmpA+ANRYEIE9zWGfhKYCEACARrIcAN5qscSAhGHwGD0ESMt5vAvymRhAJghQyrlnz94J/pAHuIYR4f4t/X5p7EMVmgI/gNr5PUHMfiI2NuC4+eATHwFtJHY9N/NsQuMmVpClEfH3GGaR5BqUU1tfXoBL+2yWl5r8VQiLAo6yreE8VSPMOlle28N8q6+GMhfehf/2Lv/Oay5/1rBfef9+9R73364F4Xa210KmGd7ZtCvzcz/3cYkexqEUtalGLWtTTsFSzeUEAnPPtHs25GSPjnIdzBkpLpEmCyXTCrCnFTj0RvAd8sHDeAXBIkhTOWTjjoJUGY9D5TStvLDudLopiiuCBNE1RVzUAQpIkkEqhKEo4UyNJNIgEnHNQCTOhJCSG/S6qaQGtMmitMS0mcN5ieXkLjDGoygogQjmZQicKeZbDO88sa23bjb6SEiqyCMeOrjGrrRSsNcjSNAJWD+ssZKKRyAzOWxTTKbRKeRNHzJIaw8yqFIoZYiHjRtoCwaOsfAsUQARIAQoewc025GmagwjwISBRKeq6io8VN7TwcCEg0ykDf89sdCCPAAclEmaTVYK6rqCk5I1pYIbFOQ8fauSdvGVipNRxY8pMp9aKmXEbWXIhQIGZFUkSzhgEBAgpIYWElASQQF1XoMBA2XkLpRQz6xFQWxBvrKWAEB5aatSmhvEOQjJArW0NyTt55FkHzjvUxkFIQlXV8N5BCmbjnTVAZNKBgE4nR1nV/HlkFhvmloRoGcIGnMyzWSGEGUSiTTgLT42xaI573AxmN9PFc78xB4oaIBhOANGbH/PksPqkX55DdMyyzoHNOQAS4usgQRCxIdAguwa4EhFUVB8wm9+AZCB4fgACM3kgioApxMfwcI6fR0pu+jTvqGGbT2RsW7ZUAOTj4wb6f3eHa1ndObAbTuDaY/MluNAqFHyksUkQ4APmewHUgmaP4BvwG8FcwGYWnbix1eC4poHWcNW+bbbM2GQRGUQPD2oZ4IbpZmUL/06AUPwkkuL5HxiIgjwcBSgpgKBBPmBaTvn+TICUEgoBTvLxMtbFBgU3N2pTt++BSMC75vjO/kZwc0kgROVDcx2hhfZ83NqvNZcDBVAgAAJC8nNa5+J9SCIIIASH4CzD7E3XbLxO4/OJJOF7n7NwxsCFgG6/DyUFxuMRtOB72qQYIc1ypDrFtJwgOIdO3kGaZlhbXwOCh4ssrXEmOWXvqWd08+5L3viWN77lW3fftWKsqQjyf9u6KldWtmBjNEYxKdDpdeCdR1FMF7uJRS1qUYta1KKepiVF7OhTs1ETMyAgpeTNlJTMwPgAa03LkvnADEIAgywfPCAIQkokSQL4gDRNAMGy1wY8B88S6jAnXVRSQwqB2tQQSqKu68j2RtYIzCILqWCN4U1fBH4NAGqYqLIqUJZ1ZAAFrHXodftRSmxRVzWqqoJQvDHPsgxwAS5u+khIlhXH9wgiGGthbA0feJNqjQNIING6ZUZBEciRgDOGF7hhSCJ4SJIU1lgkadKymCJKoLVSzAJT4I+db+WQgTWBCMGjk+XI0gwIgHWO5dBKgkDQaRKZjgBrLbPdkb2lECWV8Vg775gBFxHMkoCpa1jnGQALyWDaOQR4CCmgpIJ3AUqqCA4EpJYI3rF0WytorRm8e0AlySYm1XsPlWh+PgEIyQB8MBjCGgMf+HkIIcpgRSsfbOTa3rF8eqYgcOh0u5BKoK5rKJ0ycACDDR9ZoAAH0bBGcV2llPwcfjPQ3fT/CMpokxT2iRfTTPBKcxB49tkTQB1wwvfn/w2bWEM8Kav5TwOCLZCnGdpuwH6zHi0Ajs+OGfadwY2IY0TD4Mf1VEqwLH0OBAkilqK6zYCWwPcSkjST/9IM2of4TyN9DSdKsOdlyk8FdDd9Qps/p5nkl+YkzT74zQ8TaCbbjUxto+SguHYNYG6PUSNnxgzotWAXYQZu4z1BRKY0ksDted2+riifbmUIUV4f+IfRNC2991DE9xTH3TN+PZ6VFIECpIpSbe/j+EdslGEmJ4bz8Zpx3NFoxRChfc8No8/nDl9XzTFsAD+i6oRAoDCTiAuS7VFhJYqMCoBmnVvNPEQE99w0ZGDcXLfG1KziEQRTcWOTFCtbQhxlUVrBWocsy6GTFMbw+IXSClIoFJMCaZ6h2+2hmE4xnkzxgue98DnHjq29+YorLn/boSNHLvjiF760vHPH9gNK4yYPPzYmQAhe86qsEBwfr1/8xV9c7CgWtahFLWpRi3oalog7HcTtE28worSPAaqDtRYuWPjA8lOlVLt/9N6CECCUgE5TSCERXEBd1CwjljyT1kh6lZIAIcpgA6q6gncOtjYoypKBVNz4MJBlAGSMgXEGgQJ0qpEmGsF71LWBUDznORqPUFYVlGRAVZUVAAZy1vLMajGdQGsFnaQtaCsj+PVgUKmlgFKCX6Nn5ruRz0blHZy1oBCQpCmD/kDo93osMQxgWW6UVLtmo+iBqqx51jFIZrO9QCISECRklOvBE6x1zJ75AGMsb9CUYqDngdow+JYkEZyHqQ28D8iTDEpodDo9CCiIIJGnnShPZABb1SWklOj1+m1DwxrLAFzxZpSbG9w08JHZM8bA+sBrCm5shOChSEGT4lnhOAOe5im01vDWwtQVfAh8nIyFtQbG1TC1A3kJ4wwz51E6ba1tN6tCAc4ZeM/ycUECQrGcXUoJoTSk1phMxzCVgZSK2XDjWBIpJAM0wcBfyNhkkBJErGRwjs/F2Bt4IoqlE7jU8GRY8+QgLDzJZw0LFk6AusDJBMvhJCg7nPDxU3DBRDOAecKvtgAFm4FlI0v3sXnivG+ZzIY1bl6bc47PD2fjWEOA9wHe+giCadPjMrKjuXc3e7etXLiZEabwhFX+tmD3pEsxt0ZhrpnhQzuj3jQBRNTF++BPAOIzyXLwswYA5llY8USJebvGEU+391nJjTvv4uhCbEY1zSHvPVzzGqJ0tpE7sySdkOqUwanwcHCojEXwkfW1LjbaEug4IgCwggQkQEIhzXOAApTm69/4ZoZYgITkblNk6xFOfg4K0VxTEfRGDT0JAmT8N8qwA3xsJALOWVRVzRJqAMGz94OSkhsoTSNE8HwtCeJ7SQTYxlo4yxJvqSSU0CinFXsrhDgzHoButw9nDKSQGHSHsJVBUUxAgnDaqacBAaiqCt1ub7tK5Cvf9aPvfONLXvjCvetHj+Ov/vp/4vf/4Pcu6OTdfgAhyTSMM6iqihuygpBm2WI3sahFLWpRi1rU0xbwErE5lZ9tOENgxscYCynZWImIoBMNrTS8ZxDcmM8QCcBTyzw202rOuQg6I9BtjKYiq6NVwv/qBEmqICJzIaSCJAktNaTSUDpBmqfIux2enVKapZFxLitJEmRZjixPIWTDnvCGyloHKQUEgCzLkSRpu1Gv6xpZniPRCWycHe10uyApUNWGTaoyjU7eQSfrRvki0Ol0kOUp0ixFXRnkWQqAwTcBMLZmJkUQdKqRJArG1lBpgjRL0el2YQzPwgbymBYllNZsJKMVb5Q9s586TSMb7qNsWMPUlsEb0wxI04zlgESYTqaoLbO0vDl0MM6ABMF6j0DgBoLlRoNSGlIwkDd1zcBYCGRZhk6vh6Iq4b2DTnWcJWS21zhuQHgfUNc1Agkgmg4FDyB4WFdHwxmemRVC8nxzM/MJC2MMlNKYTico6xIEQqI0SPBcXQCvQ5JoEAjGGG42SAFSUY4uJPIkh4xstIiQyDnPBjTBI00T6EQzwG2AG6hlu/mMEA06aTEZ5hlAnBwMY/Mo5gl8YtgEY0PL+s5+mU6C1+YnaE8+o3uiQRXhqdheZtmonaNv2FyWo4YIvGiOaQ0tUJ7J2UNUdcxmKkmKJ3QCnJ9J4NsphuBbdcRspt2169u+yjDHBNMM/Lbs9KZ/w0nJ23mZ9MlWdvMyhRPRP7xzrH6Izy2FhFTccOImn48g2UXqllntdm61AYskWrOt5mg2HgUNAPYuzGaFo5x60xx3XH8lFRBNmWJHDQieRw6cZaJX8DVBghtlzvHcbSfvIM86ICFbYG+tgwshKjEISipkScL3T2ITOwHRzum2jLMQLbifN3LzgRtHrZIgNgG943lv7yyfax487iAkIHjGlzBrHlD8WzNvtEZgk7+6rhnYSlZ3aK0RACRpgrzTRaPw6XQ6CB5Q0WDQOYeqYk+ENM1gnEG320Gn00W/38ejjzyI9Y01XPLMS7YuLy+//jWvec2bfup9792xZfsK3v3eH8Mpu3fh9tvv7EHIJE9zVFWJqqygtULWyfg8XtSiFrWoRS1qUU/bUgEhzu/JaEziYwddQERmrAHDwXsETwAkEi1gnZnJjK3FdDyF95aBD1j2miYpjKmjA7IGSQIcxY0VWiMWdjuWkIpA0cSpkbT6QMxUhBqJ1CimJYSIhlFgtjXJUggIlEUJ62zcwKUQSqKqCuRZB94xc2idg1YKVVmy6ZHzccNFmE5LeG8jmyEQXEBZFWywZA1konjmOAA+VAyyvIMxNUxtoJMEUoBZSqUQPDtIa51AKQlTGRRmAiHZhdR7D6GJGXTrIUlGV2wJBwdWlfN8nrEG3W63nTUjCSgp0cm6wIRBvrEG3V6PmxhglhYuIEkzKKlBISDt9lCWJcqCwSwJgSSy8/AeteP3kyQDZsJJIO922NimtpCRDddJimAtptMpnxfkT5jXI4g4B621QvCWpZRSIM9ylEUJlaiWae10utBKo65qOG8gSEBKjcpUMNYjOIc0TaE0zzia2razy1D8fCTZoCzRCTSIzz3nUNWGZfseIPJwnhsEcUQTDVJveMuAGdidudUSTpyq3eTee8KcaSNyPTkhfCKHu9ncavbZvKlVeGpw+8SHia+xYZKpnTNtmkINY8kOvwGhnUedve7mPHU2glxC69zcvirP4EUQO4i3cm6aza02wJZNmfieoaSEJx/l93FUt3l9tNkdOeAEBjrQyZfxCatzguV2uwCEBoo20urm24Jozrk6IMS5daUk2Iw+tK+R4uyr96E9BwQCIAk+8P2u1YfPmV7xsgX4MGcaJlji7NsZaAbPs+YEz/Y2LRpusBmohJtE3troF8CmTwEOVVXDBcNNMikgiK9JEZsOVVlAaY26NlF5g1b6b0zF92xgUyOkWfsGkDbr1DjNe++jEZ6bgVfE8Ze2iSRYvoyZyZ1onLKdhyd+PMRGY/AeQTQKFMBGlZCzLNd2sbkHWJAgTIspklxj+/ZtGI8nSNMUAQ5aC1Bg5YfSAkr1ceYZ23cN+8M3XfAd5//wW3/gB3bdftvt+MynPoN/9f6fxt/937/F4/sf7ZZV0Tl27FicuyYMhkMYY1DXBk+lrljUoha1qEUtalH/fwa8vFHljVbw0X2zcdOMLG0bP+GbmTECT32x5M05BwJgrWHWLcqQAwBjeI5USPCcKRGgAWcdyqJkp03DzqGAQ7BAkAJSadTlFDJG91jDhixpoqEEs8yEgDTPUJQF6rJGp5NDKolMSXTyDpIkARFw4ECBjdEGspRnDPuDPqaTKfr9fnSABfr9HuqaTbfKyiNJFNJEozYGUgvkaY5JMYHWCRssmZrfo5RxXYA0S6F1AkhgOpoA3sOECgEs0TOmRmUqCAikWcKzjVH+2Mk7KKZTwAV0Oh0Ml5dx7NhR1HUNqViGm6YpsxveYdu27RhNNjAejSGEQJJnsN4hRIOXECNLQBrGmna+2NQ1ksiwSq0Ay0wIb/4knAPSkMI6h7IqkSiNRCdwxqHX7WHdrUcWnuCtBQXi90wCJHiDWpsadVUjURpSSVTRrcbUBiE4JLrD0uk4i8dOqQwminIaAYSIc4YBWrH7LBQhSTWMtajKGqnm5oKLjFnjaOuMgwkxLkqxbN1Z185t+gg+lFKMc93MxXoOxW4CJvyxaBmsmbkTngBnT4K/nrRoE7wNc27N4QTLq7AJDtMT0O1JQG9LaEbGVAgGppHRbY2Zmh9uDJ0aB92IAdn5m2dXhZjFOxHQzq9nWYZpUcRGl4S3IboJzwA0RUTrfUDwzAZaY6NRk5iB8/ZnPTaLnWfvJyA8kdndtAZPsj4n/PAmF21CBIF+tsINY+sJXvjooh7ZaQ8INNLnEOfl+eed9wx+BbGqPpp7+fie+HjMeUA1mDg0PnY8q87jthY+Rve0zHaIs7+CG5PBRdVCYOmvJw8ijxCiL0A0bKOo3qEYqSTCLH6uiU2TUkBGA7NAClmawnkbxybisWzOybl5ZMbDFGOF4t8VzLtqN67WHt6L9o374KGUiOcaG9cpoWCdhW1kNbGR4J0H+SihVtymDT5EFQufq22sm1atA7WpDdJBF3t27QYBuO+++3Hm6afTcHlp6/Fj6+ddeNEF36Wkft1bf+AH9yot8IXPfQbXPf95kJDYvWs7XviS6/pfuuEr6u677kK3N4BSEuPxJP5NIdTVguVd1KIWtahFLeppC3h58+Zn8UAkWulcY0oykx3y5kPGTSEQWTIpIhhQvPGIETA+eBhrYz4noSzK1vAl0RpScr6r1ArwjplDzyyntRZpkkAIjaoqkegkMh0eIcYKFcUU4/GYpW3eYzIpoNMEtrJwzsJadvRNU4XhcBXHjq3BmBIDKSCVQJokMRJIojYGRVW2s2CJZqCoUgVJPEO8tLQEZ2MuL3jezlsLEKHb60JKibKqkCddZnwA9Lu9Vk4HIiQ6ZfCapZCCMyRN7aCkQH97H/W0hHFskAUiaK3RHw4wnUyiYQ5B6xRlZRA8IISC0hr9QR9FMcV6UYI0f00qiSRJ2aV0OmUTsSRFmiRIkgzWGtSRRU0TjaKqIISA1il6gwxVWcJE8CoUoSwreBeQZSnLg42DgECn10VVVZgWU+TdbnSC5rm2qq4A79m8iwgqTSGl5nPBB5RFibzXRaY4S9gag+XlJZAUGK3ze9apag2FWKQpIAio6xJSaRApSCVQVBUz1dLBVoYRRXSubaJQEHyMJhHRn2fmqOtPAnxDBIjYNKs5h5EacBaHOv1T4LB51jacAI7nQ4zQsnezOdkAPMEA66Rg7okPPAPIzUylx2bDquDn4oVibBOF1rW9iV1RQrWz0M56nveMRmMQaJUiggQccT5yohOUZRFZZo/GdtiF0I5KuDga4SJom40lgJtqcbaewVSLqWZA8ckW/Mm/sQkY0yyTas7Mi9lfiqCNDfw44kcpxWC/yXqad71u1CkRKCsS8Hbm+EyBWonwbCwhSpvjYfOuAaR8D21dr9vsWXZUb1jl5hg1ShwhJZw3HP8lWD6cZh1UpoYpLYNp7m7yvdttVi4QGvaUGdnazEvy46ztvMN380+TO9zGjAHzMVAhmlFpwfFALvjYwIvN0+YcdA4hSqk9OKaJI9D4nstzwKHNSCcCRBBQCY+MlGUBqTRsbeFdgIFBliUI1uHQkUM4fvQ4BMn0uhe/8FW7du5+ad7pXqC0OLsYT5evvvpqwAMXXPQMbN+xHSurK1hdXcEtt3xj7dav33o8SXKe+Q8MspumKrxf7CYWtahFLWpRi3q6Al4SAhTzZtkcaiZpk1Ky8UzjFBxYQiuVhDfRxCZmjvhgkeU5PEV5sPcs0xO8oVZSwzWSPOdgpUCSZqinRSvJU0qhrmqUdQmtNNIkQ1nXSNMEzjLT6oOHrT1Is9unsTWsqZGmGbYsb0FtDBLJ86ZlWUMKgYsuuhAk9Pbrr7/woqNHDhz66k033qZ1AuccdJqiimZHw8EAQhDWRxvcta8r6JAg6/ZR+xqHjxyG1hq9bhcUeH1Wt2/HoaOHILVCMSpgvYN3YyRpgjTNWuksKYVuZ4AkkRgXE97sSgVnPbq9LopiwjO0SsLVFdbX1qCTBCRVnMdzPI8sBJTWKIoC3V7exkmtH99Aonn+FoGhUpakUDqBIKCaFgzA+31UBedP5p08Ni/YVGv37l0YjzdgjeF5PGIzs26eoSgKSBmNubxjZi4A1lawziCAnbaDC2zmpRN45+Esz80hAM7XUEGhmE5BxFLZQITgHaZlCS0VlFJYW9tAt9tBnrOx2GQyhmsY3CDYsEzFhkRkaa3hTWijQmgM2DhXOkBL1RoQCUEs63TRWIfiVj+y7RRC4y00y3XGCTmy88xWwzmGyBhuyjKax1dhE7QNT4BjM2r2iQLnJ5sLxklnWOc/pzAHRnxgGbeLIDXO9voo525YwqbJ1WZFg+W6dVVDQHDMleBmlw8e49GYM48FtZExUvAcO4Ron7NxcRbtHGojIBdzjtHMAgopIEBwjmYxP2GedQ+blyPMmUoBTw52afMyzmT4c4xlfLyZpD1CtmaOOd7LmuYJf8yPp7WGta4dlUA8h9jwbs4p2yOyoNE1OjLLTU5yM+/Mj8dmYCSZfedrKyCAM7WdZV+FLMuZEfY+zssLOBdQFCWz0k3UFBhACiEQKKpziNiRvRlp0RLOIhraNbPBTcMhAmyaGVGF+F8+bxSrgBppcwS75IEgqf3pZjE4Uim0l45vzKt00rLXHJ3GzbyqqkGeRxOaBmJzT+r22HHZO4vBYAuqumJ1DEmM1yeYTifDH/+Jd//Y85/3oneuLC2fIpTC333kI3j+dS8Axb9Xz3/B8wEAo9EESqf4wz/64NcfeviBfcsrK1hfX0MnzyEkoZhOOYJP2MVuYlGLWtSiFrWopyvg9d61JjLN7FpMVQQgEIKFEhw144NnIyBr2UQpytEamWfzWN56hOCg0wTeATICaJHyxk2lGefVVlX7fMF6TO0UUkokKbOStTFtt18oBWNqhCA415cEhAzopF04zxuyBlD3ej0cOXIEQhEoSHQ7/cuvf9l3/NBLr3/py50xD77hDW/6+Xvu/dZnt23bhtHGGN579HodON+wE2zqIkgjT/Jo/sJ5uERgkympUNsKh48dATw4UocaF1Vi52YB1GWFTt5BbS3ybg5T1W3UifcB06JAURRIswTTacGmWtFV1Fo2aBpvGOhEt1FEIXiILGXmCJy1WdU1dKLQ6TDbmucZamtQ1DVvTAVHkUwn45i7WaEoC1hjYQy7NgdvUdUVptMJvPdI0xRLS8tYX99AWfLGrqrAub6KzcKctTDOIs1zNs0aTyC1gqsNjCmhdAIfiCXWxIwgu7AyW1jVFabjKXq9HpQQmJYFspyPv5Ya4+kESZbCVDVsaeB8lCqLKJm3M8aqYYesMa3ZFQTi+48RM67BtTGCimjOlKfBsXGivZ0f3ezOyxdIaMcyGfBEABDoSXXMm0HsDJnSJontE3+aTkCx9GTM7pN6VoVN5rotSR1diAWxoy+vYRNDxaAneP4ZkszACWJ2zQYHMnyOa53AVRYhOBjnoEhBkIB1HrUp2mPVsOohAhvvXAsGvfeQKs6exrGJVk48tzBNPE6YNxZrv0FPcHTGky/JCZ/P8nB94Ll7QoCQKh5r3/Y5nHObZpIb8z5BBCFY+cCeeQIhOAjFzRYXY8La3FoS7TEXUVnTtkQEwVteH1Ozi3FjjNVEGEnBZnZEYNm/C62xXi/vwTgLa2NDEoHVHjqgLitozaMhZV3G+W3OSQ7CAUFHRYZnIz2pWEJNQJAN4A9RuRPgnGlncCleBy7GNwkSPNMdqI04Y4k8v1Pr/MyVO15pQgk46zgCzTqEmGUOEKsKXB1dpblpqZSCkAKu8qyEifLtPOtgMp3EJmvAxmQNRTld/tCH/vcvX3/9S37o45/4VHrNtVfhE5/4NK699lpc/x3XxetBwNQGf/xHf4Ibv3oz3vWud+Dhhx7+hhTpyNQGWkk455GlKeCr+HdvwfAualGLWtSiFvW0BbxEFHMQ0eYxiplbC5RUMb5HMJAIgWN9ZAJnHUvOJLMItamB0Mj/2D3YWwvv4zxfYMmjFswkO8tGMGnSQYBHWU2ZrfAuOgczIwXHLs8k2MAkSTSqsoKQxAZGhmWYVV0h0SmcZVfijfUNnHnmGWe+5rWv/5nnPvea733owQfplNNO2f2vfvpf/fpf/dVff/DOO2//mFlf35/lGcqKgdTGxghpmkAoQi/rw9QGtqpgTI0sy6C1RFFWSNMMWZ7F2WB2Uq7jnGtdlhguL7G8ug5IswxdrVAVFaQU0EkC52Kmbp5yZrAHsk4GEQhBJm0cFMCzz0tLS1E+GjCdTCGVhNYKCVJkWYqqrlHWNbIkgTEGo2KCcjyJm2S0jBRa4BEgoWmwNBj2l3b3QEEEgIZC6l7e65517lmDLE2S2lTj++57sNy+bdUdPnzYHjx4ZCoEHX30kYcnSknkeQYdQszHJJAApCRolUBKARMjf3SqIUCo6hJZnoMATKZTCBBsYOfr8XgDScZA2FUOYzOG9R6uDOhmGbRKOL+YBNbHI3TzHqqaI0h0omN2bEAvzVA7C2MNyHvEtBckiYIgwHoHgoCWzG4772YA0POcKqPfsMnjiK+JGahqMGbjnBvmWMiTMq3xl2ayZnpKX+UZLguYDwGipwJxhCeYVzXJPkIIbgC40EbsNFLZmbyX2gaWlDwz6i2QSB3n+Zlpc8GxesEThBfcPhCELEsBsPwdDsg7HThnOV973giqUZVEOtN6h+CiZLcxbjJ2k0vVvIHVk4F82hwm/MQlPVmqTpSvNGAacyx+sx4+hM0u1mEOmPoQ2UfJ0mQfmWLyUXQQI4UosrckI34O8XeYMRbU5A7PwLWSKo5DyFZe3bwXDwsigjUeJAJ0msLVFpAs1ffeI+vmqMsKiJnkzTy7IAFIVo4IIaGTBEoSSuOZp7UGQhASlcSorxrOhZk5V5MLHF2m2axMtDPyvjWAC/Dxbws1ubrk4eaEEo2MvpF5EzGwDb6R13N+OwmCdR7eOWiVtAffOoNyXECrhFlv75B3cu60WrBBYV2iKIvkv/7Zn/1/Xv/6V//o2toaLjz/bJhgccrpu3H+eedi/+MHMJ6McfbZZ+FTn/oUbrnt63jt616LXbtOOUSge5yvIJAiUSlqY1GWPFZSmxLdbnexm1jUoha1qEUt6ukKeEMIrelUCNElWBBc3JH44FFbgyTNkOY56rKE8Q6aCJCA8IC1HDvB0SGiBVVVVXI0j9IIFkiSBEmisba+BmdsnC1L4EKArR3PQwkBeAcQm6hkeQqSAtZ6SKVg6xreW+hUx+gihSzj+dmN8QaDQsPmUzrJ+t91/Xe/8xUv/+5XpnlGS8vLWFnZgmdcfPEVb3vbD17y6c/84823fvOWj37ik5/5Xx//6N/fu3PPHnSMgZTMRNauxGg0QqebQ0gB6z1EEOj2utAyidEWPRw/egydfh86zZElKdDrwnuP6WgKJQUmozE63S4bwiQSVVVBxaaAUgK9fh91ZVAbw8ZR3mPL0jJqY1BVZWw6aBpPpqHX68Fbh7KuUNc1rHU4sP8AToxXISUxWBoCLqTbt20949lXXXPm2trGoN/rJ3mW5Dt2bt922WXPOmfPaaeef8re3TtCgHbOBVdbvbplpT8Y9GUIAeNyHI4fOVYPhkM7mYxDptPJo48+9tWffO97/8ftt9/+D4cPH9oACP3eEKAA7wWssdCJ4rikso75mh42bowFJMqygFYaSaKRWoe142s4de+ewRte99r8D37vg4dVIrxMFFwIUEJBSoHRaIrVwRCJ1lifjqGyBNYb+MDNFSJgNBoj0SngCcFFQOH9zImbGIBIybEr3roI8ELjixPlmr6VRfN4bngCwmrA7WZ2h04epgvE2ea5yJ+T4rbNllSzh2mDlJ74PCfG8Z4ACJsGR/vzYvZaWNLKcUAixmG1jx/nW0WMb2LndAZOCAQSPmZSewiloBLOTi6mJUtZowa2nQcNYLfuAFgyCC6w1DXOFJMgwGGu+RYiGz8D4c2i03wH4anA/z8R9M4f+5lEObSqlXnQzfE5M3dndpyPcmCwsiB4P3NT9mjzYCkQpFYIznHD0Mdc2eYYNc2NGJVlrG3zwq0xIMlz/SEEzq4Wkt2xhUSSpah9gKcAE9dckUBQCggS5bRAmuZIkgzeW3arjyxpcA6OBNKsAyEIdVFzpBDATG9gltXHa4NnuiVso+4JAcG6dr62kR8771qFSfA+mhOCc89jo0kQ571LJaCkio79aP0VqJHVh4Y1F7DWQScSUrLbvpCITLNAt99t45e0UlhZXcX9992PH/7Rd/34W9785ncAwNLSEu6752688U1vwC/8wi8BAEaTCZyxOH5sDY8++jh+6Rf/NZZWVvH+9//CJ7729a9/I8lSFFUZGxYe3nOsm5DiJPnEi1rUoha1qEUt6ulS1OTiBsE7CimijNE5kOKZUOsi0yiYwXDe8IbFMSshWmfgEGcFo8soeHPMEj52dtVaw1iHLEnbSBzvPKSWrVGWVJIBi/WAAmpTcyyRALYsraCsKhhToZP3QQKoqxpKJTDGYs/unVjfWMeBA48PX//6N/zI97/5LT+xffvOHWeedTqWl4fsIFxyvI/3DjffctPGffc99H9+6Zd/+eeOHz3+mNa8mVo/vsYztt5CSIn+oM84nAjBW2YcAktBy2qKbr+PTqeL42tHGeBHeXhtDEuRKcBYy7OmiA6tgp2gpVJYO34M08mUQSI8lJQIgVBVBZukzJVOEmZkSCbLy1tOO+3U0y447dQzzt97+hl7dp2yM+/2cr17zw61PFzOnPHbO93OGeeff+6OJ842PrG8cxhPJuj2OgCAqqr49Ue0JISAKSp84hOffOwvPvS/P7rv4EP/0Mmzr376k595TAgVXWUdrPMY9AcgARRFyTJBYyJzA1hbI0kSWGvQzXNMp4X8gz/8gx+55qqrnvGa7/3e/3r3ffd82Trve70+xuMRn39SYsvWrZiMJpBacv6oYeAgo4NtXXPDQkSToMYFmCKo83DMuEWjmxCa+JywKUc3xDleMRdLxN+jzba6EYwJQZvNrU680ATNgWOaC9pB+7ihjSCan9ulJ0dzJwJe2gzM5nNcG1l+MwProyS4MdxqPOnQvl/fKoSZzZMQosleDbN516jCUFrBx+iuVCfM3ArOiHWenXdDvIZBAhTjZJrZ4nmgKQRfg82ba9a8nZaOs9htDNTJ4piebG1OnhEVo235i1prAGBXccwMzqhxqiZ2XbexkRJV8PCOGynMCAMQcRaWZIxV4wUNsYEyz9dLFaXi1vIwieL5cx+lxkIQR51JBa0UnOcIskYeLaOTeXAOSZbxMXMBSgjUtsbycAuEVJgWY5RlwU0KKQHMMtiNNUjSHFknxXQ8QXBsG92abJGIow/R5ND7yPZKHsd2ob3+hSBuUBp2+CZBrYRdSI5BM3XNzDYknHccf9XM4cc1cVEJkKYpvOMxF3afjmqhVLPUOoTWg0JKgrUOWZZCkgKJgD2nnvad/+3P/vvvro+OnnnantNw2ml78Vu/9u9gncR7fvI9SDJ2f9eKGzZ5nuGmG7+G3/jN3/7c337sb3/OGPNFJXkWvWmGJYmG0grjyZgj8cpisaNY1KIWtahFLeppWEpQ0z33CN5DRraimbdC8KDAMRu8uROcKas1ynIaNzAyZiTyxjd4jtKAZxMW1wBb73lDohSEIBjD85ZKKpALqOs6gg6KbtGArS3yPEfwHnXNxiqkBDRlnLOYSrjgAEtYHi5hfX2E6XQi3/+zP/8v3vx9b/ypO+6+c/kLn/88zjr7jIjwBYSQGI0Y1J155rmDSy955uvuv+/eG371V3/jP29d2YJJWaA/HGA4XEJZVrDOot/roq7YzGkyrSElNwNccEgpxcZoAwHE8j3n0O/1sbJ1FYcOHUQZZ+ayLEOJAoIEjh45iiCA4Cy0zsSZZ565YzgcdEfjsSEKXkoh+v1hPhwMVk7Zs/v0paXlM/ecumf30vLSlh07ty/3eoN+lmS9QX+wvG3L1pVuv6uavEwAqIsaKuHZtvl9vvcNWPKw3kFCxnVpjIMIx9aOwgfHJmSRKSHi42ONwx233YFde/bs/rVf/9W3H984cv4NX7zhP974pa/+9dr6BjPvWiNJBerIQgcQ8k4GFRjcZ3mCjY11VKZGN+9i67atSLJk166du97wtZu/fuWBQ4cGr3rVa174ile8vP6Lv/gf5pnPuizVSu8497zzdz/7qqurH/uxn/iTv//o332q1+sjBGKWC43xjodzDo4IMsToI6UgJcGUFQiERLNZWIiu5EKgdd1mZe8sY7YBsE9sFkTwKGZOzcGHOROrzSCrjW15Ul4XmOd/n0rsvHmgFU9qQNyAVxfnJBtQFxAg4/txwUMKBYQADwdBEkrx/G3zkpMsgXWes1sbU7QIpEmx/NQai2DZnI5IwHnHsVtgWS7PsnLTg4iZu0a2CgoIgdljIrSNLwbA84ZhM1D6hAzepwK3OMnnJ8qh5xheF0cJmFAW7bFsjiEJmguJovZcCMGj+dUkS0BEMJUBKY588/CRsWZGMAgAkS0NwcfGAEdHUbwHxgTeVjIevGd/Ac5HVxdffNkZhCDvuOvOxyiEjSTNUFclsqzbmv2JCHoHnRzrGwYkBbp5DucCK2bIIklTCMtmW9ONafxbIFo1gI9NUHbk50aIbSTIjbO3EPEaZMwarON7SjypW8k22AjL2zgzTgFCNm7hHBfWjHRIpRGCRzEpkOd5NIdj13fnPJwxEGkCQRJSKKhcw9gaWksgEHQiMZpOd/zMT//suy55xkVnfvhv/w9sXWPb1q14zeveiFNPPzUy+dEDIPBs9I03fgXfuOObxx/d9/BHlJA3e+GwvGUIW3HubpKlHHdkLBKVwtRmsZtY1KIWtahFLerpCngbx00O/2gMd3zLVjXzflKoNo7HegdbWgQfkKQaSgrU3sb5No4NIpLtJs57QAkg73ZRlRxTY60DNYYmIJaYSoKpLRs3IcAFiyTTUFrDVjWU1BhPChABq1tXUEwLWGehEwElE2TdDI8+8jDOPv/cS9/xzne8a3VpdfnGm76G8y+4AEtLA5S1gdYcOeQRMKmm2LK8BB9cZ+34xlnLS0s9EMadTo4sz6CURDmdYjAYIHhg/4H92LZ1KwaDASbTKQN3SPSW+uhZg+l0itXVrQy6rMWRI4cxmRYwVY3JeIy6ruCcxWl7z9x6zjnnnXHBBeecsrpl5cxdu3df/JyrnnvFzt27Tq3qMkynE5tnKQa9oer1ukmep/LbHciAgGkxRSfv4Btfuw1fveFG/5o3vk70hh3YYCCI5YK18ZACkIpZNqKAclrjyNFDsLbCtq3bceDxx0E24KA5hPsfug9n7D0T/d4A+w88jtXlLbjgoguhkxxZpuR9n7t3x2//h99ZIwj0hz0Y20hAOf9yuLSMLM9x9OgRaJnAO4O64mzd/mAIbwMefvhRnH/R+Xt3n3LKOR/7yMfVlqWVl/3BH/yn71ndulXv2r0zvOAF11ETCwMAv/kbv37RLbfc/BMHHt//uU6338aEaK3ZbKjJLo0KA3hma0OYSQ8bBjVJeENtogGYD7PJ2iatpjGsasDsE9HTCazn/LfDDEjNM3onsribBdNPgWRPhmzn53Vbk+jQmiKF4FuGEkSbMnwpypbZZTuFltGIyAfIyMqZqgYRx3h5FyA1uzEbZ+Etx4m5wNnMSirUVckMupKtA7QkBjFplsFbD+cM58UGD0EKAbadfXWO7w3tXG1sSsw3GuZnq5/Up+pE5vdk0bwnZBbLaH7XMM4sw43HLMqpG8f0hv10ziPLMqxuWcHBw4fwjMsuWdq9e4f7+498fCQlN/eSNInAnRuL0CqqaMQsEg4MaBHBcaNE8C5AkWLWNghIydm67/nJn3z11i3bXnX06EF/zfOvvvP++x64L1HJg5//3Oe+tTFaX8+WtiAASNMM02mB4dISVle34tChwzxrbH2MYdPMpAKA8xwnlecICCiKacxrFlBawJtolKcUnAdIxjgu6xDAc/wqSeEsezQ02cGcywsgCATHcuxowdU2N1xUDDUKCBmzorm5otrYKghmmrUSqGuLqiyQZTmkBGpjkSU5tFaQQuKxx/fhe17z6pe/4Q2veykAfM8rvhcPP/IwKuNw6umnticQRxvxtfBX//N/YbgyxPaVnQ8V4/GNnTwtdSJRFuyR4L2HqQzqykTFxkydsKhFLWpRi1rUop6OgNf7dkZQkIA1DkJy3IgDz2shRsj4wLJcgGejhFTR3bUBFB6mNNBJAqkklNCcuek8ut0ey0M1y+wqU0MpzRssKdkgJ9TI86w1RsnSHM45TMZjJEmCfn+IsiyRdThrdzKaIskSLA2HMMbFDZLFFc+67LW7d+8+48EHH8Rzn3cNtm/fBh/AeY6eDVWyLMXGZAMbo3UcPXwUd99xz85tqzu3PH7gofHS0hLqymB9ugGhCMeOH0WS5uj3BiimBbZsWcHUT1AVBUCEY1WNPbv2RPdYh+l0ivFohMl4jICAQX95ePFll5xz6p5TL3nuc6+9+roXveiK00477ZxOJ0sIhKqocGxtHYOlARK9BeujDSRaYdDtPYGkcoGl1I1TrSCBsq5wfGMDWZaikwOn7T0Fe/eeIoYrA7jgkFHa/n6eslyzAYMChCTR6PcH7EBd1jj/gosxGPRRlTX6wwHquoDSEuedcyE6XT4+TYmgy8NHj9wzriYYDPrQCaGuDMqqRNbJo+Ot5fzfLIUzFhujEVZXV5DmOY4fPYbalDj1tFOec/HFF67+i3f9EF73plf3VrduRVkU+NY999GeU07DueecjfGkgNYJzj/vvGf89m/+x1/7hZ//ufffc989n9Y6hXEWWkgIIVn+GCymxRTWeAihIAIzvZz161uzIu9dS+U2xl6zeJyGkcOMYaRwUt8kNt+hGQg7EROfAGCfyrBqPpG3AefzYDnMmxG3z0etdFtENUWbJdaAtRBiXI3i2dQ2j5jnm4UEmxN5B6WTNuyWTZk8giUAHIsVvIetLc+712xwpKSCNfy7LEPNYI1FWU2BdpYaUImCLQyM4SaZjLndAb7NcObZ6/gaiQFXiEB0FgA7l/c6B/hxMvOweWK4WZcwZxzWgGjM2PwZ6OVRjTRJUZkSIc4ne88yWqXZsbysbf/Nb33ry6655ppXbt2yYsbHJ3/1pS9/6ePWwCqtoSRHabEpH0WgH3hG1vI8LmIMEQht7JZ3jaszS3y9s8g6Hbljx7YL9z2279p+1t9unTl05OCh4489tv++F1z3/BvuueeeT95999235nkO7RWkEFhfP86NwSyNsmOgrAwbPHkf2WW+j1dVGfN/gSTh7PC65pxy61wLPpvrIaqQ5+6xAYIUJM3MECmI9tA1SoFoIQ2CQKI1XJw91lojgBlcBAblgOe/Q+A5b6EVAIdOtwdrDNbX1qE0531nWYr1tTWoTG9/93ve/QME6I11lh5LmaDT6cRrPHA0VAiQpOB9wFnnn4Nzzj4T7/nx93zzzrvuvqfTSwEhUJY1g32SGE3W4QlQiuLrk4vdxKIWtahFLWpRT9OSFCWDUikkScIGKJBoRJVCCHbEDBQ3Iwyy0iQHQCirIs748s9JwfOrLrAJVZ53OKfVg41UfGg3c1nGTr5VVaM2FZIsaTd4zEyksDXPaBIBSksgeJTTEj7w571eD0IoLA0GePDBB3DJM5/xvA9+8IMfmE6nywcOHsSgO8DS0hAgz5toGxiMS4H9+w9gOilw5pln4JJLLzcf/9Qnv3z02KFHdXwNJNmZ2lpmrVdXtyDJUgZU8Oj0OhgMhnDGYn20gWNHj2A0niAE6p919hnPuP76l73s7W9/+zv+5U+8+1+9773ve9+bvv9Nr7nyyisv27p1dVuitWxgjbEWSsuQ5xkpKZFlKazj18vz0SwdtMbi5q9/HQLAcGnIgEwRnLVI0gzDXg8heOSdHGmetWmuTQaoCKJlxprZzRCY7c3zHFmeo9vt8rpbNmQZ9vtYGi6j1+1Ba42qMrC1xcMPP4Qbvvwl3HrLNx767Gc++6dCiLKuHNKMgVLwPpqfeVR1Hc1mWDlw7jkXoq4tJpMximKKvJdt+8MP/v4vrh0/fup4NMI111wDADi+dgyPPPQArrj8Sug0BTxvMAVnK+957etec/EtX7/lqw8+8NCBlZUVWMsu4sbUMLWBlAJZljFjFuWiSkkYZ1nuLTj+xAcfgZVoI1JmWHI+umhmGjwX/Trn2ruZTGw/oBkofSL0fcKPbUrhDZvsqqLUdf4X5lOQNj0X2tlYiu+reQVtnm3LMzfzuNGci2I8WQjI0g4rLIJlwyOdoigmzMxKZhvTJIkyWwnvLHSikSiN2hpoxSACAkjThBmx0FgzUYw6c21uL5s7ReFrwz5zNlK7/k08FEWE24LUzRHJT5pP3B5jCpHxRlQFzM1qx+fRSRrBr0dj8CcEg7M0z5CkCcqigNK6++rXvfZfvvz6l7333rvufc73veFNz3zlK155fZan6Re+8PlbjXWViJJkkOScXjgE8m1zgyTLp6WOmdExIgfN+HXMHEqyBMH7sH//gSMrqyuD0cbooo9+9GMrSultV13z3PPKsnrmj/7wj1x97jnnbLvt9tsfGY8n62meYWN9AiEVtmxZgvceRVmwGV/M1CUAzlo+toJgo4OzUgpAjKMLDP7bBorjdVFKgiRFKbvnvN3YYIBoriFusBExMxziDEFjhtZIyI0x8V4R4/JiNrBz/LrYwGs2UqCiUVa304NKFKq6QlkWmE6nePOb3/TO9/z4e95e1pbKqkKep1haGkBFgNqoCmRklo8dH2Hbrq04eGR/ddtt3/jrybj80sOPPFK7YEEywNVs8GUD+0AIpVpDtQ984P2LHcWiFrWoRS1qUU/DUoIIUicAEB1v2VXUBw+hJFQEXc567mRHkylmHASIBJRiuV1oZ8/4901dM8PrPawtoaWCEOxS3Di9NtmlSZIBzsEYlrAlWQZr2bkzUxm63Q6sZ5AkVYJEEqxx8M4h6SpMiwIgseeHfvBf/PjuHXtOv/e++3HG3r1YGizB2AqZ5gxbmbCRSggBK0srmE7ZaGQ83Vjp9DvqnPPOx61f/xp6nW50QvXI8xyDfh/WWIzGY6z7EYqigFYC/d5wsGP7rjPOvfDcC0/Zs+eis84+69yLL3rGWXtPP/XUratbh0o+udSt2SzmeYaAQJzvSajqCo888gh27dqJpcEQTYyukAJnnHoGuv0OGypJnl1lcEttnnJDcYXIm7HbcIzwiGyLhuTsUcExIq2sPVI1FABvHTyiaY4UIAHkeYJ9j+zHsUNrGHSH4boXveibf/SfPzjat+9RaJ1itDECxxXlKKsSQgmkOmMDnYSgEg0fDEQc7KurAt/3lrd99zXPvvY5d999J4rpBGVRIsszfOwfPobnPe8FGAwHGE8L5GkCEhLOBkhF2LFj5zNPO+W0S7vdzq39fg+j0RhKS3ZtFQ145QlI522MUOE8WWYLZ3ODTXZnc77yJphiTExzxEJkIOfA6TyQwgmAa06nTJtg8rerzWm9M/CNGQgO1BrENQesZSZ94LECzIFaH3UcIjLXkQ13wYIoZhB7liHbYBFEgISAh4d1NkY2uTjfHECSHa4ROI+VCCimY3R6XWRpiqNHjyJNU0Al7P4cc75DZNQEEbwAEqGjPBhw0bCoMUmSkhlBb5sVj4ZfYSZr5mOGNi6ImgU5kd0NJ6wuMauI0DQRCFKiBbxNmaoCCQFJkoGdZHMuFwLyJIGpagDA93z397z9T//4P//Mxz/2ic6555yFD/2PP8eOU3au/Mqv/MrPkMDGr/ybf/sfpFTwzsR7X4CQEkLEeVawKaD1DlVVAfDQmhsJWvD91QULCG5EKCFx5NCR2z7+kU/+ztZtq6Xz/gd27Ni15X0/+VP40P/885XSVCs//4u/cEXt/LP+5E/+9K9OP/P0W/c9uu+xw4cPjdMsgZYKnbwHpRSMtZxnKwWcYf8BHwLW19ehKMDUVatwEFIgy3MAQDGdtsym9dzgFEQxw5xYGg5CkqSwVQ2Qh9IJrOP7NhvFCXjPozDWGmjF/hBNvnuapAhKozZ1C5S9C+j1uijrElpJlEUZzQsN8m4XZ515Fu6+806cdfY5V//Gr//mj0bIjZXlIRoj8sa0TcjIWAcHZwO89Xj43ofwtW9+/cGbb/r614rJeLJleRnGlgjBwQaHNO/ChaYJaVCWJbRSi93Eoha1qEUtalFPV8BLgmNwnLUQQkBICQeHJqujrm2MJFFtB15KgnOWNwya58l8HTeGUjJxEjNNy6Js81mFEqjLGnk3B0LAxsY6pFQMdilAQEFpgbIsAc9S2EDswuwsg/EszzEY9rAxmkJKiTRJQV7g8NEDeOe73vma17z2dS+fTAvs3rUbVVlBKkIQKm50mZVQQsIHj27e5Vk2AAcP7z/yhS987v5Bt4ctyyuQUkBqhelkisl4jLKcYmNjHWna6TzjkovPPOPMMy8447S9z7rm2msuv+SSSy7asWvnVjU3x+UDUNcOZVkgzzJIwTzOaDyGkgLra+s4evgIBktL2LVnJ5x1KKsanU4OpRLs2b0HaZ7EWcxmzg3Ytn2FN5jBoa7ZQdl7AiHOBgYClICgAIrsI9EswoXA3/PRYVWConMu4Lxl5sk5EElopTnnGMDhI8f8xsb6BjwOf/GLN9z/pRtuuGfHjpV7P/GJT3xmNN6wy0vLmEwLSMHmMUVVIs86cN5jNBphy5YlEAhp2kFdW1jjMCkK5N3Olre99a2vAyDPO+8CnHfeBfz+rMXOHTuxtLSEaVEg0RrNHG9QM9CY5Wl/NN6IMSceZOO8uRKo6xqFsZzdG1kkQTHj1cfIHcFS/iZOhV1l45xvmAmLW8Mdtnr+p2BVPEFv+xT17VJ5m/O3VeM29DIa5+I56TJhkyS6AcRCsGGbtQbBB57tVnxtBx8glGSn9Tj767xHcB7BAVKqCHqY+U+1Ruk8AxLPYKU3HMi6qhQSUpdcfAk9uu/h6bHja7559b1+H6lgR94szTAtimhyxOBoXirfAFs23JpJxts1DptXb97JeVMX4gTwS3PmUy1FL5oGFAP5EKOXQuBrgtgtC0IodjqIvgbGWIwnE7zoRS988bve+a4fDw6dsihx2ml7cdfkDmwZDgEge/e73/MDH/7wh//vnXfc9aDSKecLwyN4Qm09Eq1BIcDEaDdmglnJAIrxRt7FEQYJUxlAC4xGG7DW3p0k+r9561d+6J0/8HolbLo8HOCWr30Tznvx1rd+//e+5fvf8orTzjh1sraxcdcH3v+BP/zzP/uz/751dZtfWV3BkSPHkGUJQgBGowlUkqAoKzjnkKQJKBDqqoRQEjLe/+u64mYmOGrOWIvgPYyp0aS4U/Rm8PAwVcUmWErBB4fgXbyefIzEi+7cxH+LtNZQxOdJIEJVldBK8zVKPFteVSUCBVjLp1e/1+dcaCEw2RiDSCz91Pt+6ke3bt16hndAEoG5jwZyRLN597quYySfxtatS/jqTV8u9u/b94U77rzzq+TJd7td+KmDECmcmaAsS+RZDk8BMiikadJmpi9qUYta1KIWtainIeDlubnA+bsk2LG52SQ2ssfoYkvgeSytFOq6Bojnu4iAaMjK87tCYjIaQygBkWgGbNHlVwiBbreH6XiKLO2AJNDrdVAUU1jr0E1zaJ3A2AqBeCPbyVJ4AHmWAZ7gHX8tTZm1LesSaZovv+z6l71yeWmYra+v47H9j+HWW2/Bc658Ds4440xYa+GJXaYhgGA9SBK6gwwE4PDRg3cpgX0rq6sYjyc4vrGO8WgE4ZGcc97Z515z7bWXnXXOOVc859lXPvOSCy+8cLi0NNy85QbgWZ4shEBZ15AgaKnQqBJFZL4PHTqO/Qf2Y8vyEpaWlkEkoRKJQZpG6SIw6PeYSXKOmw1gVsKYGlmiIQJHmEDPjJWMZ2aFvMfaxjq6nS7SNGeWzPsWMLGU2sMFA++ZvWrMYVKdgFLegI7GBfbft2/8+S9/8db//X/++h/uv/f+zx89eOhhCBwUSlZ7du/GvXffw1JFpaC1BLmANE3hSgcCQQmBPE8wHo2QpjmybsC+x/ah28mRdzSe85yrvuOa51zz3AZwAAQhgaIo8LznXocsS9m9tjVgmmNQAdS1qQAgTXjTXhUVnDMxa1fBE0e7NLOoQQA60XFzTgAx0G2yRYUgNrfCnLw3AkXvXewDhSeC3DBjXhEjkYiI1RBPIq0Nm7yZadNXNv/w7HtNHi5FQ6UZrp7FHlHMdG3Ab5hjPZuPpSQEF3/PR5BCAsbXCPCQYOdmuIBO1kFAQF2XsM6h3+8hzVLUJbvVHjl6BK9+7fe+6Kd/6qffcOddt/f/5L/8SfkLP//z7o//6E/u/vRnP3PX61772uLOu+585NOf+vR9/d4ggAhBAInWcX44NIlIiHIEJFrBRFd2rRUAlu43rz8Ibjz4EB2oieW1M1b/JE2IqF2mQCwlJmolzYiNn2ZOOFoXtMfdkwcRZ69KqZDnGTZGYyillt7/gfe/69IrLjvroYcfwZ49u7HnlD3Ye+ap6GR9AMDW1a3nXX3NtWfcecddD0ohI85miX+aZlBaohhP544n/+Msqy5ICnhn2rlsEQ29dJpgWk6hU/H4Fc++6k5bV8WNX/1K6q3D29/2FpCQ2LZ1B5aWhgoUhsNdu5/zP/7rfz19/77H1z/9qU/9316/gzRR6HY5+st7C7YsZ3bdOgstNfJeD1XJs8vGViw/lxrOWQaoSqHyLH9mWXQzIsCztj6wDNxFs0IAkMSyFaV0e0yV4gzeuq5ZkSICZNAQJNvjaqqaY4zgMBz04TyhKktACmRZgsGgh2/dfTfe+P1vfvU73vFDr+LrmA3VfDy3xNy4AAB0ohu9EAKHDx7Bwf2HH7jnrvs+Hkiu1bbE+MAIICDrdrCydRuOHz8GkgKmLEBCQqsE3rjFbmJRi1rUoha1qKcz4OU50bg59h6J0gxiHc+uBm+hJJtUsdMw556SEGye49kQCOAZsLSTYHl1BXVZoixLOCJ0up2Y60lYX1uDJAmlJVSiEOAxHo0hhIKtN7C8MoRwEpWp0ev2kOYax4+vgyoTASBvV6aTAnkngw/AsNu76Iy9Z1xW1xZ/9t/+LFx66aX07Cueg6Xl5bjBlzDOQQme+2qyRolYRvilL96wPNkorhyNJrRjx65dL3zxi0/de9qe0y+64PxLrrrqqov27Nq1euLiBY+WmSIBBEHQCa9DR6WRUWaU4ok5vKXBAJ2sg127diBJdMs6OOfgRYCIzKO1DiQ1CARTV7DWQCmN8WQC2R8gUEAn6cYNMEtbUx2bD/BQKkXwvEn0UfIpiGcIOQfXwXuPPM/a9QGA2755J778lS9jPBl9647b7vjCPffc/02V6dvHG6NbqkmxZqzDjp07ABnw2GP7kXc7kIJQW4vxaIJ+vwetJTrUQV3VKIopsiTF6uoqrPPIkgSrKyuYjscYj8aDH3rbW18jhcgjlgTFSKB+v48QjaRiYhLDkjkM6LzDkaPHRwDHv3hjkSQaWZagrmsoncA5g6Io2jlbRUk7z+ocx2UBfK576Tdl7qLJiPXsGN40BWYoczO0orm4oHAiw3hilNDcz4cTIO7JrIXn2d8QM1BDM+saxctNU6oxWWKjoDmH6fheRJS9Bwo8201guaY3PItJGghs6EVwMLaADzzPKr2Hcx6TYorh0hDH19dw6t69V7zn3e/7t1c86/IrL7rgQlhjceGFz8C//43/YA8c3G8vf9Zl8t777r3jZ372/b/7d3/3kb8wVVmSICilEOqYQyv4NZESkdnl18bmVTEPVsxyf5s1FnE2dNPaAO1c5YmOzCFeuPy7vLJhLpO4iWOTQnBDiViZghCgJMGDxzK6XZbQX3XVVc961rOe/cJEZ9i+fRWnn3Eq1o6v4/Y7bscVV14OADh0+Ij5ypduLJrD6TxnjQcXEKyDDYFNwhDY8dhFWXcEagzMBbvChzhrTR6TyQRaa0ym5cbDDz16x9333Pf4j/3ITyytLm/BZDLCtGR1zmQyhVIatXXo5fn23/jNX//Z177+dQ/URfnNPM9QTAuURYX+gI3rjq8dBzw7qSOa2xHx8Zq5KnNjqMkF5jEXAcTZ/aZBp1Ucl7EOShDf45SEd0DwDjrT8N6jqiqQizPcnufqRRAwNUeJOWchKEGedvjvkg+ojYV1AZ1eD3VtIYTC4SNH0N8yPPu9P/W+dwLoTKsKiggIEiKy9s1pwa7YjRyJmf4bbvhK9dlPf/6Wf/jEP9ysBMEB2LptFWVRoSgrjNbHEMSz/84F1OUEAoENGBe1qEUtalGLWtTTE/ACgU2hhOC5QDD4UkrFDQLP/zUxIfAElSStk6dMs1aWJuKcXlFUGC6ngMtgaovas/wtTTi70HneqAsh4CqP2rBxUpakMX+XIyzyrAOlFKz12L5tGyRJjMcTeLD8d9gfQEuF0WSM61/0kqvPPPu04YFDB3HhhRdTojWWlpexZXlLCxx0lGVOxwWMMTh08DDOOe8s/M2HP4JEdF/4+7/7B8/csrrkr33BtVu2b9vWVXMSS9dAD+tjTjHiJlDMGPFWbhqixRDXtCohBKEua/R6PSSJYqMua9lEydScRdzEdCDAOgcJNlPROoFWGgHgiKRA2Pf4Y9ixdSs6uoM4ThazkHlD3O/0YrYuotMws40HHjuA4fIQ3X4XBw+u4cD+Q6inBmefdwZKU+E973l3+PRn/vFjO3bs+N3gcaMxrkqz1MDDKiXQHw5grIMWEkcOH0aaJtCJAkmFTq8DUxuM1kfodDsQWkIKiaXlJSRpCqoMjh49huHSAJPDY1x68TOe++IXfceL5xGJj1J2rTSMZ6flpf4gfpdBTFXWbIDkgq2qagMIMLVh869EIUs7qKoKxXTCctDAUStSKhjrUFWuncdsJN8+2HZ+WfAwZ5wvn8e1NPsknDC4O18NtvXhJPLbTSh4M1D+NpLmVvbcMLWEGfONOfdizBsBzZybAcBbzt31znBWmAtItASERlGVSBRLVG08NxOdwFiDPM/Q7XVx5PAxIEjoRGP9+HEMh0tn/tZv/dbPXXTxxVfefufdeHzfPrzuta9Hv9cHALVnzw4VAnD2WWdf+tf/63/92vXXv3T7Jz7x8T+syuq47Cs2D4oXl6k551pIwQ2g4CHBHzfviRUAEcD7+cYVzYy5nhA/1Lp0QTTxOBzKtYklpznLbe9ZIRAoxGsrwFm0rtbrGxvwweP0M864YjjoLU0ndcteHjp0CLd841Zc+9znAgAOHzp05KGHHn5Aa80mS1F+LwXnEAfLcT4usLGa9QaSZFQX8PHw3kPHe0Wv04dONIQWWFoa4MjhY+VXb/raza974xu+vmPH9gsOHDiEbp5haZAh63LerhAEYy2KusZll1x65b/517/8S29+81vfvbI8fLjb6cB3cpAgVGWFpeESRusbrS/AZDwFN0Zlq5DhzGCJumaDOB2zcxtzr2a9pRawxvK9KB4fzlnmWeSqKNscdwuDJEkAaxlkyxjDRAIBDqauYIRAmmTopF3UdQ2tFBKlkPR6KIsJjh0+kv3Sr/7bn3jmRZdcUdaG83+1jI2tRuGCE+KoBIQC1jc2IBO1TtLdUJXFI1oL9i8QAiRkm00sSaMoSngELC0voy4r1HW12E0salGLWtSiFvX0BbwEpSSUTGBMFaNZ2ClTSQnveDda2xpSKGR5zpsdAeR5jjzvoCoL1FUNoXUEPRXWjq9BSQ2tJVxNmEwLpIkGQSLVAra2vHmKQC3NWFbmvIUbMTMwXBoC3mFaFFjb2AACoZt3kOZdyMmUDbWUhAtuy5vf/KbrAWDHtu14sPMgPvmpT+P88y/iTX4jdWxkpp5nWbdt3YbggSuf/Wxc+7zndVdWBt0WXESnae+YbZJCQCnehLX5qc1IYTiBkwuAJ5bOWetRmQqdlA1dGpyTJklkfQOU1pBEcAiwACQRpErgagNI4NjoGJTU2LK0BIAZqO1bt4KEgnGcgUkxOgpx/hBgE5c777oTO3fvgPASxbTAQw89jOUty5hWBT7xD5/A4489htHGBq597tXY2NjAaLR27IILzrtxbW39a1LrtTwjlGWFoijQGyxBConjR45Ba43VLVthfYmN8QgBAqtbViB1Bus9uyoTQSUO4/EUaZZjuDTEdDrF2rF1FHWp3/Yv3vHq4WA4DH4uAgYBQSpAAhKRVaI5kCeIo0cEUE0re/jgwREAQArAMWhaq9aZnRQESQpaa9RVxa6/8DHjU7YSfSkkv1YpmamKNFCAnzkhR+Owdk40zBjUk4Hdk+Dab/ODT1X0xE8jppidi9Se4yHGD3GkjIa1NrKKIkaMKTgf4ODY7MfW0RiNYCxHzmipeZY7lUhzztnd2Fjn2fA4Vx8gBv/+3//6z776la94BQAkp5+KvXtPgSKFsjKQSkBLGZl0CSmw+oe//3sf+OxnPtd790++91e89VOtNUKUsEOwAkQJCeM9JMV4tOAAH02v5nKSQTP2msdsT7DQbj8Omw9H8x8ikJBz2czRCzt4BDB7SRKR0dRQQrEPgTEwpkI3z/rPu/baawHA2Bo+MOCdTKd49Wte176IQ0eOHh4X4wN5plHXJkawsTN+EGil2sxiKqQ6abNvQQLecQycEhJBaZAUGE8mCALodntQMgFEOHDb7bfeCODN/WEPcAE6UTCVieZYAoePHIEUAvmO7XjD61//yvvuuf++n/+FD7z/jNPOqnftXMXRY0dx9OgRDJeGyLIOJpMxr51gcJ7oFF45lFXFADDOsbDU2bC/g9JsbobAMUzGwlkDioZciLL/4H1rpBc8IEUCEhxn1DioC7AxoQvsZg3iNSLBozc+BORpypJ453D40CG8+ntf90M//zM/+0MAoIWETDg1gJq59xMuKSJittY6rB3bsLfe+s2PfukrX/polqbBxfGM0cYY3gekWQoInvmt6wpaJxypRAI6SRa7iUUtalGLWtSinraAN8pyvavgA5vQKJWgKKbwjjctpCXPRfoAaytYY9Ht9FBbzlslQXAiwJsSoiBUFc8BQgdUVQ0hiHNdqwrOWagkRXfQ5dlPKWBrg063C2MqlHUJZz2SVGFSjLCxvoFevw8tFJx3KOsCoIClpSFMZXH0yFGcd8H5z7/kssue3b4rIfFdL3s5hsP+bPMb3U0RAvqDTotcvAd27NzK780Edgv1FlIoJFrCgzMzmxiL+flR3hbPR6Sglbr66IYslMSWwRKAgCylTRsuTjUV8AioXSNf5HnqI0cOw9mAHbu2ctRHYMdeCX4vWZrBec/OqghttqUtLe6+627c8rVbsb5+HOddcD4OP34IX/rylwEi3HTTTSjKKeADtu3YDuc8tmxZwm233Y777n3g+Eu/86UPnnPeOfSnf/zf6JZbb0GaaKRZDusC1o6vQUoJ5yyqukC/30e/twSQwmQ8Ql2UEEoBCKjrCtZaJEkGIRWquoYUDFoOHz6MCy6+4IyXvfQ7XwQAdZynFdH9l+XVBKkE+pHZLssCggQbUElex7o2E5Go9U53AKU0z3wKNl1KiGcMbbBQKmtnf73jxdc6QR3dZzlTlOWNTURRc4yUUHPSYe6ENCCLIsPafj+cBODSU4Hef/rPhfld+twM8PxssyCwyVSUnSI2XEI8d1iJQdGwjM9fZrk9m8qBmwDcAOC1UEpDSMJ0MkGn08Wgn2E6meL42lG88U1vesUPvPUtbwVYsppmOQ4cPohO1sGwP2DpcDQSIgooSoPTzzyzu7Jt24/+/h998Os33/TVv+72Byz5h4MAD7tXlv0BlFYxxohaBpbde5mFbzynqJ1vjpA1vt+5gOTZGkdQ3f5ca2TlY3wTv38JbvaFOCecdxI461BXBp1OB+sba3jWFVee+4pXfs+zATY/G29M8LnPfR433vBl/Oqv/Som4wopgIceePAovEOSDKCVR1lWSJIMZTmdzWSDc2rJS0it4FwJDw9vSmjJjtoeHkmawHuHNMvgfcB0UgIigILApz/xuRsf2//Ywd07d283lnPJJQDrWcK9urIMW5tWKfBzP//+H374/odu+eM/+89/flZyLqbjAvCE8XgMJRTyTs7XpmMnc+uZeXXWcf4sESRJCMHsdICDb43FCLauIKSEUgmC9/Bz57gQrBQSINTGQGkFgkBZFVCJ4hGDKMd3zqM36INIoKoqCJIoqwJCAbUzyJMUh48cxCWXXnz5f/mTD74HQObtTFo9u98y6g1zkVYgwmQ8wdduvhX/92//7jO/9/u//R+1lo9olcL7gG7SRZ51UNYlSAKTyZgbEEkKArCxvh7VSrTYTSxqUYta1KIW9XQFvKJhOIggwEYlLgRmyEgyCAE7bEofEGxAmii44OGcgbUGQqrWmMp6C5UIKJUCISBJUmitmHFyAVoncUaV58uYAeIZrk4nR5rn2Fhb4/xb79Hp9iBA6HW7qEyFsqwwHk3Y4KrXwcrWFf2uH3nnK5aXh52Dhw7jvnvux7btW7F71x4Yw87GECFmWvLOx8VZOQGO2uH5M4rMqEAgGWcKG1fq2b45hM2oN8zhFRdYqiej8y+7qoYZI0hs/oUmG3UOwCgSMRE5oKqYDU/7Gayz2Lm6A0Qej+/fhzztYDhYAkmCVArG1VhfX8fxw8ehtcLGaIS//IsP4fM3fBG7d+4I+x57zFeVEVIRjScFXvSSl+BrN98MKTUuvOhCHDp8yA56vcMi4IFHHn7stsf2HXi8P1i6ZzwaleW0RF0bHDlyFEIIZGmOAAeREoQhjMcjTKYlsiRFJ8lRFhVk4tDr9eCdh60tjDE4de9pWDt2DAAwGHaxPkow7A+euW3bjlObyCShFIypUYxG6HZ6SDLNDYq4tjI6iFOcvZVK4u67v7X/vvvvP9jtdQDnIbo5jDUoywp1MFE9AFRVBaU4L3Y6mbTnXgDa+KLgA8fvELvkMuMpotzZY+bcHA/YnHx9Jic+CWg9kW18Mtfm8FRf2DTB20pD2yxl79mIjVjGTBQNygRnZxPAMmAX0Mk7qKNLs5QKSipeDzAN1kQ+kRJIVIKqKuEiQyyURLfbAULA8TV0X/3q73kLAFmXNVSiYKxBN8vR73XbWeymVRAApImGcx6Dfn/4S//uX7/ve7/7e+6ejDbuYBdtjsGi2ACSkuWkZVlH+bZor7vGbZ0i4g1BzGKZ5lOJ5tld2uxmPVtNz7njxKMJwQVIzUZmFK9jJRWctajLCjpJoaRu1u+ZvUF/FQCyPIOzPezctQNblpfxmX/8DK557vMAAAf2HzwMAHmng9HGCCQEsjQByGM6LdoZ1SYibFpOAWLlhzMOQhKsDfDkoQMhOI+s24GAwMb6OoTkN3j4yNE7vva1r39198t3fzeAODrC54FxHlmaoQ6srlFagkh0f/+P/9Ovfuvhe4584XNf+Phpp52KosogJDcCdJIgTVJMplM4Z2FMDUKKJNEw1iKNEUMqUVCej3/LwgfimKnA6hiPEB3AeXzFx2QAF5sNtq4BSFYFRXm0dQ6KFNI8Q1mVUFoh72QwxkFrzZFO1mF9tI66rJI3vfn7f3A4XDqTWW02dUMbiRVa4yt4lrVb66C1wtEjR3HPvfeOv3zjl754+hl7Hx2PxphMCrhgUZoS8AKdbgckPANyoZGlGSbTMXxw6HZ6KMtisZtY1KIWtahFLerpCniBAKkFnONNu3MBiRBIkxweDsYYiIogpYoMFiHNUljL81ZVWbEEV2sABKEkymnJj5OnkCRhrUdZFMg7HXR7HWxsbKCuDUhGpkYKFGUJYww76/L+HcJTm+na5MQO+gMsLy9jNB5jbW0N3V73wjPPPOvZANDr9nH2OWeh3+8hSZK46Y8ze4FjTYgo7oFZsioiwEGYsXZK8IbM+lnW6SweaIZrxKaNc4APDYPGjYNUJ+2sJW/OHaqqRFnX6GQ9pImGD5x1q4RE8A7WeZBUGC5lIAKMMQiBmw8ry1vhvMW0HGM02sDBg0dw5MhRPPzwQ3j4oUewc8dOZLnGY48dxAXnXuxP27v7yJ133L32nKuuEueddbb88o03jR95eN/0Gc+4RAyXlvRkOq1P2XvqfV/67Oe+cu89995ivX30tjvuWP/Qh/7npKynptftwdQ1pJLNqBuCjSxoNCKrCoO6rng2MU2QpinKkjMz806OaVmgKCaoyhLWW1jD4OmVr3rVi/JMoygrJIqdvAVJJGkKmfA5QDEc1vtofhNNi5q82X2P7btntL5xKE0SOGOh06SFVz7OZuokgXOOnz8CPRLMwHPuaYCIrLLFLLZGxI248zMTq5OStz5s9lY+eXDuP0/BDJz8F2jz11uDK5o5+wpBMduUn7TJEobnDO3KGACIPxdnxj1AspFBewQvoINE1ulAkkIxncCZCoIIGxsjHD56BFdfe9U1L/vOl7KqggR88NBKIxkkcfY5RGMjatc0RNMv5wO+84Uvfc5v/tZvvu+9//J9P10W5aFEszIg7+SwxqKsC9iY+StIQGlWeJAnEMnWoTmEGCHk52amMfO1btYldq/Y9CoaVs1ijGbNCCGjVLcxT/IGicyghEKWcub4dDoGAHnttdc+N08TVCWPf/QHQ1z6jMuwdmQda+sjTCYjJOkSnLcPpHmHm3jxvllWJWfvagUpJFxwUFpBkIB1dSu11prd6MeTDSipmOG1DlVZwXug18vR6XThQ8D+x/dN//xDf/k3r3j5d1+vlUxslIWHADZuAmcdyxDPkeChVXLKr/zyL//yj737x9cfuO/Br+w99TSMJ2MQCayvjTCZ8vMGxyZWIbDLuXMeJBTI83nDZoIsQQ4R1CoojrYS3Pg0dR2bL5KN+ryf2dtL2UbamcrwOeMcvJZ8HcboI2tcPOaKZ3mHOR7f9xie+awrrv+RH/6RVwOAQ0DwDqPJBJ1OjizJ2PFaUXsO+hBa1Y41FkLgsb1n7r13dMu6G21MkGYZjLUoY9TayBl0ez1okSHLUnZsJ5alG2ugk4Vp1aIWtahFLWpRT1vAKwSx5C12wAUoGrM0e8QAIVQr7RRSsKTUAiQVtu9awXQ0wmQyRbffjaYlno1/nIMJvgUfxhg4a5FnOXTCxlhVVUFrNgHJ84ylbATs3r0Lp+zeg6PHjkFGV+VjR49hWkzx6KMjEAR63e6Fz7zsWT9+3jnnnQ0AeZ6i281aSWNrtguBOVFqtKuJpjVgLWjwLrq9EggCo40xhBAYLnXi79KcJ1BoQS61QJmgZXRd9h5SzJxzms13iDFOWqVsWINmjo1n4OApMu38upzzMFUNTxLrow3U1mDn9u246867ceNXbsSho4dxfG0N/W4fz7v2eVjduh2f/uxnDj7/ec/f98hDjzx077fuv3dpy/Cxv//Yx47/37I8cv+DDx5XUpl+v4v19Q2HEGqVyPWDBw4eLKvK97pdFGUBIQRSnWJaFOj3uhj2l7C+vo7asNFWp5Oz4Zi1CMSRI6Y2QHSW7fd6KGsD6wK2rq6AELC8sgXGWDx88GGcdc5ZZ77pzW+6joEXHxuPgCRR0FpxZEwDWzxaGa6ILFxT3/jGrbf54L3zHh6BZc+KZfK9bh91VaE0FZw1bdasSiSsYUto513LGvrW+Gg28x3mpbDzcuXN5Osmpv5kmLWZO/2nZO1uRtPYxEzOyOW5j9soJd7kh3j9EsUsbSFmzZwoGU5SjbIqEWwASWJVhuLoFykTZjmFgiTB0VxCoNPptk7eztS47roXfWeWdQcNkGjQY9NQaGacGyl+gG+vHefYOOtH3vkjrz/42OEv/dIv//IfC8F5z9YZBBGBZ+CYLZ6llTEuR7dya2rfP8fUBDeTJTfy5lbL3rDBmJvXDdRGEzVuxEDM4w2xuSV47tnYaCQFYFpM8YzLnrHrXT/8w88GeB781lu+iaPHj+LCC87Hi1/yQlgbQCLgHz72D7d/9CMf+XRVFAjeQZJAXRs4x07HIs6zpppBpBceSqewtoILAiT5fiqVRgDP6/uYj6y0xGQyAYgwHA6xfecO/M2H/+ZjH/uHj37xZS/9rhcGF0AK8f7L512ep7jjzjtxyqmnYNDrY1KUeO61z73id377d/7NK77rFT9WFpO7lVJY3xhBKL4edGxGSClhrUNV1eh0u9y8ChbBS77+wcaEzsVGKYlodshrL1p39Ng8jCoFIgnSAsHxLC2RQJZ2kHcF+0oEjzRNISUbGKYZ+yFIpVCMC3jvd/+7f/dr7+52u9ud9UgSbs4OBn3o2KgV8X7MKpvQKng+97nP41t33VNMp8XNX/jMF26cTsbrWZ5DCMLqyhYEBIzWRqiNwXRSYDgYYmO8xoZZWrNCwrjZH5tFLWpRi1rUohb19AO81rG5T57n8M4jWA9nDRx4pjTLOzz3SDyHV9satakRPLGbqJCoqxLOGdS1Qd7pYGW1g+lkChEI/UEfo/EIkiS0kjh69BhWVlYRrEUxLbl77zyGgwF27twBnaR4/LHHsL6+hkF/gDRJcOTwERxbOw4CyVP27t67dXnL5a961au+4/rrv/OFKysrpw6XBsJZZnd8CHNZlowcPDADNk0cCZu88maIQswanm10+71Om93YML+hcYBtYXNLGkFSzHmMLrAyAiyWy85gtiABihGn3rHUFIHZJCUlpCQcOXIYWilMpwVWVlfx4P334fOfvwH79z8eLjjvQkrTDGedfQ5O2bsXx48dO3Ls2PoD997z0IN//eH/881bvvG1bxaT8qH9+x9//PjG2jEbN6IAoHSKbifDww9P2A01AGVVotPpoNfvsgurYOZHEINeYxxG4xGqum7nW4uiiKYyACTBC4csT1kyaQ0qU8eZYs4xzbIOAEBLjeGwh6uuuPLaPTt3nDEejyGlauOZWjY8UHSYpnbNheKD5n2AVBJVVdcf++jHbvbOIOl2kaQ9TMZjntu1Hsg4Tkb56LgcWSEpFIIkWGPaZof3rkWnTfNiPlaomemdl8zOvvntLzLO8RV8fbXZON+mGrA7F4NEczPibdyQbxQMM+fz2SyrR3COWz4iMq3Os6OsABKRtI0spRVAAs7Ydk1sbaGEAimOxHHeYWN9HbtOO+3c73vTm18Ivi1AChnn4/kKQxAzt3JB8bxhsEdEUCB4FyAk5alOtwMOMslBTkRGvRk/QMxvdTCFZRWBJMD5OHLBxkauiQ8iGa/wmRIjZg/NHcPZaELj5uwisCYAxtioGCfkWQaSEs4bUJxFbZzP62m1t5tke9eOjqAyiZtuvRmHD+xHUYzwnKuuwdJgC2xp8W9+5d/9/VduvOHLUkp2yNbRoTk2V0xwbAblPUvqvUCWZCAeYIX3HnVdQicJbF3De8cjJFH50s062NgYYTqdQAqJajrd/2d//F/+4mUv/c7rtJZUxzggEhTn1xkAHzpwGIOz+kgThQDg+c993ot++7d/671ve/vb393vD6ZJkoBI8qxwnDO2xsH6aLDlHeq6hnceXrC5k1IJvLPs8i94FtkaB2sNbDQ9lFq20UvB85y2cxbCA1Jp1PHrIcYg1VXZAmVTGzjv0VU5x7ClGR49+BC+7/VvevNLXnzdi4BmZISNqFRs0PjmPCDPxy/mbB87cgz33nOPUzp59JOf/NuPHDp44IHlLcsoywL9Qb9ds/6wD2/Zw2A02UBZlTzTbG1skLCR16IWtahFLWpRi3qaAt7GBRSRmQ2CAZrWGs46NvKxHjZY7ooH3oykeQplJAgBSZpx5946mNrCOwdjOLvXODZcss4iwEOnCazj+dksUdi6dSs2RhsgIow2Ruh0WGp64MDj2P/YPmSdDnr54Lzv+u6XXffa17/uxVde8awrl5eWdmmpxQyQzLJ1EWaxJCGaSrXN9/gevZjNzzKT5+PuV8AHggCgkrhp5+0Sb6jRPC7Fz6mVRPpZEkcLnqgBH3FzKznPg/GLFJDRfCkQITiLo+trePyxRzGdTDGeTLB//z7X6/WFlJLOPedsXHDBhXT06DFjnDs0qabfuv3222/9zD9+9uZ7Hrjnlsf3PfZgWU6rNNOwxiPPO0h0ikFvABcNjOqyhnUOvWEP9bSGEBKrqyuoygob66MICDlGhIFogmI6xmQyRZ5nkCJmLXuPLMvhjIFOE3b79Txj6W0jGeRZ3jRLMRz0cfjgERRlAakkrr326qsQgLvuvtufe+65Ikc2m6ltmxOERx55GKsrW5F38lkSUOw4PPTQQw8cOX78m1KmkEpGAAt4H5AkEpPpGMZaaK2QJimMNbDOwVkf5z25KaI0O8kG51v5Ok5wPt4EbOmfAXbj93kW+Z8BducfIiCen5i9lvg6AsIJTLBoHZqFEFBSw3kLUIjseICjGCEWCNa5aCymYWrL4wVR7eCcx9Q55HmOTtZDURWADyimU7zmhS98wYXnnntxM2Edjd0jAOfHlUrEcePAx1RICJIRaEa218N//otf+BbicbNNw80xuJVawjk2c5IywHuLEDgiRhHHxITg4eO4A1GA842Z2Fx0UcPqUpgLgGK5NQS/PgGCdyyrF0pG9bwHjOf86CyDEEBZ1VCpxsUXXXLJcMsWvb6+DhmAl17/Evyvv/qf+Mv/8Ze46MJLsG3rVhTBwsPfDMAMhksIPsBYiwSANXVkuhkAG1O3CgMigBTfWxQ4OqsueZZad3sM2ilgPNlgQBgUNo4dR5530O8O8cl//Ow/3nrrN+649NLLLpKCeEwisEeBCx4XXXQhNjY2MC0n6GRdGOegpcQPvu1tb7njtjtv+Z3/9B9/P0k0rLNIkhTFtGBgC56ddYZgCoMsy2BsxU1EIfhj79u56CbmLtFJy5Y7a5ntVRKQvlVRUIiNi+AglEZVFCjGE0glkKZZm80LEbC+vo5O3sWjhx/C9p07z/3AL3zgbQB4TIZYFdLkHQcSMasZMJ6PtRSc290fDPGSl36n+Mu/+Muvf/bzn/1SlqUIISDJE6ytrSFNUz5HgoOUEjpRKIopeoMeRusbQJBQpFD4GjpdSJr/f1FCqvSsc845fffOXReecfre884484wdzju5dnTdkYRzwt/7tVtv+cqtN91y5+j42mJwelGLWtSiFvVPA7ySBFSWoCpLji7ROs5SRQZTCEhF0IIAQZAihXEGtamQJgmSLENVlujmXTgXMJ6OobXEtm3bMZlMQFIgzTKoxHGsUZaDZ0O5S+5jNMpkPMZ0UkBIQq8/6O0984zTzj/v3Cu+6+Xf9bwXPPcF15577tlnzcMN59l1NjiLJE3nwGuUmNJsjg+B2LyKd+UMyFyTuRpNrOKDS5oHGqHdyM9jGDpBlTqLG4q0kQsgNQPU3ntUJbPhOlXwLmB0fAwpgaIscejQEdx7770w3vj7vnVPtXfvabrTHWCyUU7JJ+Wg35/effe9j+3ff/C+42vH7/nqTV/9xj333nvraLz2WF3VMQ9YotcboNfvwRqLqqpBnmf9dKpRlTWcs4h2RvDBwzlmmY01bJxjLUizQ3KiU3bmDhYiZlAaZ6C1RpZlKKsKztSo6goqTUCBj2GWZQyohMR0UmDPKbuxsTFCVVfI8hTDrf2dl11x2TNG4xF6vYHo9npxXWMebvyMQBBStkZSo/EIUijkWQ4A+PKXb7x7PB3vH24ZQoJQmaqdz6trA6kklFIwxkI0vZGAmC3N0l/vuaFDaHhBmuHHCLpbuXCYzfL+82dyZwZOs4bIUz9IA455sy42Mc7zqJcImxykm3nxZpPfGAh58lEqHA2DAiFLU9QVR6wIqSGkAAXAeQuVMBArqxLBCywtDdmYhzRe8pKXXg2AvGdpamMuJmLzRkg5e13R/Itn3ONa+wCpBB5//MD9t9122zcgWE4tAhCEgPfsxi2VgLMVS60VIRjBWbfko+O3j+cK2vVtwJOQIjLLs+tSxrlYZsJj5Fp0cA9etMoCKZlVtk0+NlHMAub1scbj+dc9/wqEAKWZad172ml44xu+H8++8moMh0MAwMMPPlLse/jRRwBg+/btOHb0GMqyhFKKo6EcM6UiHjsSLAGujYlzvAJCaQQX4J2HkgreekDw+zO1RTmtkOoMSZZisDxElnZw3333PvzxT/7jDZdeetlFUcPL6+Xj/Sz+88CDD+Gi8y+EkgJlWSHL0uRnP/Az//JjH/v7rz708IM3dzpdlNMSACHNMlR1hV6/h6qoUJQFiAi9Xh9FUUawyiMbVVmitgbkHDrdDme2lzUosvfwfA5A+Bhxp0BCwhsLpTRIcuPBVBbeAWVZQWkR33MNgoSJubevec2rX3PhBeefU9Ul4CXn9wqOtmK1DytvKHiomDUPALfdfjtKW2PfI/se+txnPv+xvXtPf/yhhx5EmiYtcPfewRtuhpZFhbyTxQbeENMxx+INlgaojlQ8j7yo/1dFRL1tO3dc+oNv/8HrPvyRv7n60mdccvG21W3b8zRRT/Irhz/y8Y984opnPuvPb77l618NIRxdrOKiFrWoRS3qKQGvtRZSK5bJycDGPoI3rN4HWOGRZQm8cajqGlmeQSuNuqxQk4MPBVxl0VsZQGtmBfJOjuB5M9dNUvQ6fXT6HRQTbsjWpoSpK6hE4dChg1g7voZONx9edvlll1/3/Ouue+7zn3fNOeefc/7ePadsF/Ngs3UA5S49SQER5YDNLB6bW82DlpmM0Uc6VhA2x0iEmYGPx8ztlQS1Dstz/5vTQ2LmxBzAUtqACGp9NJbxqOsa49EEK6sr8CA8su8R3HvXPSDFrHY5Lcxd3/rWdDweHd6xfcexB+55cAOgI0ePHXt43+OP3Xv3XXfed/DQgXsOHzm4X6o0shgBw6U+TGJQ1RZKMRg4cuQIpGRWJHjA1gbescOubQ1+KQJcg/XRRpSuJ7DWMDsoAakIrvIQQkGn7Bbb5Lo2jqRCSI4qiVnNSknoVKMua6ysrMAbwvGjx1HZGoP+AI888jDOOf+8y1aXV88dbYywY9t2blpIwez3JnYVWFlZ5TUFkGgNqRRiCg9uuumrXz1++LBZ2boVo/VxdByWUHmKyWgCYyx63S7HvQhEaS8/vvcMeNjl1cYM4HbSmgFmZFW9m80/Yvby/llMbasmOFkQ6LeHyk987ubcprnHFxRlu6Ft+FhrGfxFV1yWQYtoZBQNoaScnd8xd9Q7D2+Bbdu2oa4t6tqBiLC+vo5du3dsf+F1z7s8vqFZwwdAUVZQUvLMZ2gAML/CVlIsCFVRIstyfPjDf3PzwcMH78uzjGfaKcAFzgt2jgFncMyueRtagB/TheDjPYqak4JEO9/bAL1mbhMUmOElEZ3n+fPgmB0WMfPW2hLecf62gOD50jh77IOHThL0B/0tz3zm5c9cX99AmmkET4AE+kt9XPnsKyAFu79XVVFaY8p+t48jhw5jY30EkgKTyYQbR2kG64mN4aSK8XAGWifQgg2inHfwjlUvSmsE52Gsg1DsjN8fLMN7j6IsUFUV0iTFyuoqvnrjjZ/zPrwVRAk1ecXegzxLVQaDAfRBjX379mHPnj0AgPF4ipXV1bN+9md/9ife/ZM/8SNaq7HUCh7M0vrgUZc1qqoCBaCcljC1hdQSKtGoypKjwUggzzSMdagrbrQBgFI6qoS4AWNtNDLTYCAPAikJeA/r2YldgGfMnQ9IpMSWLSsgCKytHcfK6tbz3vGOd74GACbTEr28O7uvR8l/43zvQgA5VivpVEMnCT7xmX889IXPfvG/f/GLn/9Yr9tzdWXhEWBqj2F/CO8dimoKnabYsmUZ3nlMiikOHTzMIwo+YGNtA1oqjmla1D+rtq2sXvT93//G7/qjP/y9a65+7vMvvfCCC09pvmetQ1XWSLNk/s8tAGBjbWPry1/80jfdeuPNlz//Rdd97b/96Z9+/ec+8HP/55HHH3twsaqLWtSiFrWokwJepZjdTdMUWZajKAv4ANi6Zolz3BCbCBjKaYk0zdHp9KIRVYVOt4fJdAKShMFwiBAcinKKXq+HsijgUwuzXsP7AFNVWFtbw+q2AfrLg1Oec81zrnzWpZdfc/HFF1571dVXXzDo9bvzL5Dl1gRq0pPAH0/LAloqCKE3QQhrLIz3yPIUtWFX4EAs0dZKok2YmVeHkmgdb5s4lfYPbJhtsts4GpyQQBNmDrnWe4zHY5i6ZjdSD1gH3PfgA/jUZz+DRx/dh/F4EgSFtU63Ww4Hw8Ias6/bze944IH777j3nnsfPHL40KMPPfLQQ0ePHhk1T5FlXfS6fZAQqMsSUsvWsVQnGs5YeO+QZBnK6RTWjqEVg0TnDDM8tYFzzJIkSiNNNbzn91dXJspZA5IswbSawluPXn+AqioQgkei0wgGgTzLYWwNUxn0en2EQNGEbAKtJabTAkJIKCfR7w4wHPYhE4nvefUrrx4Mh1vW1jawa8sQk6JAKhIGsrEh0ay99x6dTgYASJMsStaBw4ePjb75zW/eoJIkuj8b2OAA+Oh2m0J4E9nJwBJbIaC1RF3X8TgKKMHzgw4BSZoieI+6NlHWTG18yWwg9J+Ebk8OiP85UuY4x9xq8+fA76aAorgercEWRXOswECQI2l4HQkUM5R928xhGa1s2TDrLMoqQJICZEBtDKrKIE1zyEQCCNiza9eF3rrTAUA2MUgigtA4q9w0poTgV+u8g7cBKmHzozTLIITAP/7jJ250tg5JrwdTG5ZjBx8dcPl98SxpI8sNsSUV4mw9tYZUzVrM5p4jKx9BbmP4xBqCOOcv47x44CaY9Y7X2DNDCEFwroa1FlmeQQqN2lg86/LLTz33/HPO/MoNX8azr7wSvX4PR48cw/HRBk4/5TQYY6ABDIYDvWV1y9A6g7KukHXYDEkQYJ2HcRbOctwPm7exq7ggCWcdfLDAnKmWMXV73G1dQ2mB2lSwniXXVVnjSHkQBIkvfO4LX/zyl7/y9Wuuueo5LuYXk5Rto4OIsPfUvThwcD/uu+9e7N17OhACrPX4/re++fU3ff2mb/zu7/7Ob55++pmYFiXqskI372I8mbDbt3XRFZ2N9yaTCUIAskxDCDb/k41Zlea8XRccrDe85vFcUTrhmVvHa19NawhJ0BHcQzPoVVKjk+dw3iNPE1R1ibe//h3f+4yLLrrUWo9erw8tBatrpGjHS0K8PhSxsZbSzA5/9KMf83d9684v3XXH7f97PFk/Oi3GWFragul40ioWvA9QOuV5ZWMw2ZhwU08nKMsJN2GIVQE2gvpFfZtbGxFt37Xz4h/8wbe+6YYbv/zas846+3RfO4hEzhll8nU5Go9Qmxz9fme2H/Ae/+n3fj9cfdWz6aff/4FzhZDn3nPXXa/+0R//0St27Nz5gQP799+/WOVFLWpRi1rUEwAviciYSglrbJzpS6E7XQ7u8Q7T6YSlzVIxCCaOmbDWcEddBBTFlJlfpZBlGt4LmJIBx/59B+BDwOq27YOVLauXvPJ7X3n5a1//ysvPOefcy7cubz8rT3NxIjho//jFuUrfON3GTb2ZMyUhEjHiwrdyxaKsoJREkuq4+RZtqovfBGpn7FsTXySI4NGwRLPM1fgnF9Y5CIrusM4B0SlXCsKxIxsYj0Z4bN+j2H/wcdx//0M4evg4pFZ2MOgdPXjg4NqO7Tv2P/LII7fddONN37LOPnzw0IGHvLePPLrvsY2imAIAOp0uVldXsbGxAfaZRjTnISilYY2B8yyPtK5q82kzEuh1OijKgo1jlMTUVtFoSiHRCkVVwFoLB4pyb95sSNJIMominCDLc5AmVFWBOs4XOm8xGtVQSqKoSiB4ZGmOqq6AQKjrCs5ZaKWQKI3hli0YjccAHMpiCqmketWrXnnVsD+ElgkAIM9SPDFqh7FLt9NpP26bDgTcf999j95+2zfvTpSGdxyHQ4pgKzbREcQSTorRU42JE0UjHO8dvHWAjPOxPnBjpJknpNDGDT3BVfmfMsP7/61ha9tRCSduFueujzkH6TkX6dDE1foAIWmO/QwxJzpKt3kQFEqpOGPJBl51XUFqAescpkXJ11icja/qEs+6/LJL9+zZnTdzws1ranJ2A2bS7Wb96rrG8WPHsXV1K3Si2bgIwMb62jcAwDoL7z2yLs9qTkYTQDCA9jEz28dHZizLc/ftrP58o6Sd9W5yeqPpWZDxsHj2LApscuURAO/hvI33tNCCZ60U6sogzTI2MSKBQ4eO4oy9p5+rhMiXlpbR6Xbb+1S3k0W5PKsS6rrSo42NFecddKJR1wZ1ZTFcGmI6nWAyLiAIGA6XIaRAWZYcoVVxswiBIIWCyARMVTPwSxSk1CwNDx5aSZiCFRfOWB4/yRMcPLD/kQ/91Yc+dc01Vz1nppJp7mVsepamCXbu3InHH38cPnhkeYbKWCiI5Kfe969++MMf/vCnHnnkkVv3nLIHE+dnOWxEyPIUOkswHY9hnYUUCkqrNkqNSEAKQl1Zfp2agbC33AgR8a7mnANIQKYKMjDjnndzBBewUa6jk3bQ6/VRT2s4HzCZTlCXNYSUq2948+teCnCzTmuJsiqQ5BoCs5GENhIrNgaNqfAHH/xDGFsdL0fll8fro28tDYcwNsA5HgUZDpY4Ik8BzjpIkthY3+AVNIDONFSSgBSPhghJILtwaf52tby69ZJ3v+dfvuGH3/nON5533rmnAkAxmcIYh77qRYO7OFqkBZaXl9jcLP4j4kjS933f99HK1hVopTGdTvHN229P3/NT7339YHlwF4B/vVjpRS1qUYta1BMAb/CNYyY7PyU6ZdmcM1jesgQC4dix41gaDiGIUJQViqqEjsCB4gTk0lIfqcqwMR5jOh2hmEwBQJ1z9jmnXXHFFZc9/wXPu/r5173g2aecsvfi3Tu39098Id6HNj4inLj7F4BoslADUNUGWZIi0RpN+oiMbqxSJjxG62aZpA0rMsvcDK0ME2EGdilu5lplbTR7Ys+hGJUCAe/ZyZUkRTflCR649wEEBNxz7wP285/7oh30u0mSJiLv5MeH/e6ja/8Pe+8dp9lZl41fdzvlKdN2draXbHqFFFJJIPReg5QAglIFlaYC0rFQFAQVAVEECSrwCkaQhABBSSCQnmyy2U2yvU6fp51yt98f3/ucmU1B3ven7+dF5vYju9mdnec85znnzH19r7bQu2f3rl0333H77Xce2L///snpqX0Ay4zW8N5BRdTHOTQyDKMN4Bi0NojjGFobFEWGKI4AMBTaIFIq+HANpCTfauXD9c6BeY6yKIEyyEo9fbZGF4BjARiF9NYAConJpaqNfq8HwQUxq46AoUpU8POSxLXdHka/14cBhRvlWY7CaAwPDUEqiTzPsWLFGHrdHnbevxvjE2PHjrZHTwEAJSupGq+B3VJ/9EOJfytmav/+AzvmF+aPrBgfh7MOeZYj61MgVqQEHaMl2Wpe6lCVRZ+jEJykvow84NU5sMYGkLRI4XPOIZiAdXYRYD4Q/PqHAcPsvwD4LkG/1XEe5SWuK5FYUPNWx+7hOKXd8tCB6kHS+ip4zhoHLkkCnBUDJEkKJQXKwqM/6BEo4Qm4VHTOyhJxFOOJj3/CmSQT50Eavgh4idCzi2Ff4TwmcYIVK8aDt4D+7J67tx/Zed+ug7FqQAiJPCvANQVmgXk46yG5gHaGZMeVXSEAcGtdfV7qh4B/4DkPsDtI2IXgMF4vJnE7R8BLUDdw1evrQ3yagCIAGSkAwT/sDIbGWqcODQ3hwgvPR9X5PDY2il279uCuw9tx6qknAQCGh4fiiy684JhvfONKREkEyQWSVox+rwtrLeI4grWUziwZ3f9Fngewi+DpBbgP16h1cKUGYxTGplSEZrOFLMtgysAwcoFerw8wjjtvv/V7+/bsftWGTZtXVYFu9Hz1IYyJpMobN2wEQOnrMkirN2xcd9wff/TDb3vZ5S9/7SDP+2WRoSzpXEgRA96h0+0CnpKWQdZiFJrSmKWQGGS9wLb60FUbk+c3z6j6SkhoXcJzC2bpWIzXMFqDgaPZaBEIzQroUoNzjlXj4+jrPi598tMeffIJJ51z7/07se3uuzAxNo4TTz4BcTN+0Mxoabr6fffuxP337nXnnHXmjq/90/+6fm6+UzaaCT074hiwgDMGxmlIxlHkAyQpdR0vzC8gThmcN5QkziVcacGZPNr2sLyOWlEcr3/5S1/2iu9f893LzzzzEScB1OduS4MkSZA26Rnm6p8D9Kyme3bpk5Cm1Mds2UR7Bu+Qpikue94LICTHcHPkUsbYn3vvZ5fP+vJaXstreS2vowBvlMRIRQNFlkMpBiUE8oL4lDwvAU99kYPBAGmaQgiBViMNfboJGs0GFhYWMDU5VW1+4lMfeepJl176uEsuOPv8J1386EsetWbt6lUPxWAVJclolZTBd+fBvECdOIUlIUHgNSBRQsLB1hvXGjBx2ly50Bdcg1W2KEIOUUT1HhnsgaCKGGBe1b8E2SYXHL1+H1YTQ+O9x51b7wRnwh7af9Dt3btHz83PT+7fe+DwyaecXBRlkc9Mzx0+tGv3bbfccuNNe3bvuefwkUPTMlIQTCBOY+hSI1VRkK9yOE8bfWcdJd9qwFpNFUIApREbC+c0HBgiRcE+zltkeU4b5iKHsx5RksCUJYzTgd1mMKUO0mPySxpDXchKygCyffB+knydcyAvM/J1egsH8oFqa9FsJCiLAp4DSRRh0B8gbSSAZpAqglQR0jhGo5EgGxTQ2uD0M04/c2JiYvWDmMmlXms8vHqYhe7Mn9740+sAYl+MMWEQ4KFNCWsctLckKeccUkkYYyFAwWWV9JCkuLx+UfJruyCFrRPPAtP/kBh0yeW5GHpWh6Y9TCfvEh38g9/pQ7HHrAIoHswefbGyejhDQUAs9Mhat6RT2FvkeQYloxBeRey35BwyIh+oLjW8cyhKjWarjTIrwAUjwOEZ4jgFnMfI0MjI6MjYaQDV9yglj6q5BSjQiQvaqFoHlGWGOEkQxxGpCix5M0tTzjvuu8Mjw5BKoMhyFFlRhytJKRHHKXSvCxZ6oa22MN7UclUG1NVf1TmrVBos0JEOLozkbPD+UpgV44xAtPXwjAPMUSASC2DeIwA2hkG/gPcORmtMrFmTPubxTzj78MwRrF6xCt6QxQIARodHsGpiApwz9HoZ1qxdg2c/55kbv/lv/8bSRuLBKAyu1+tRJY9kwatoUaA4SsZNvdYEIKGBWMVgwkBwBeeorzYveugOekiiGJJzZFkGzxRUHGFkeBh33nbnrf/xg+tuu/xXNz+5et5ZR+FNdYVbqBw6eOQwDuzZi3POORs2iFte+qIXv+A711xz/d//7ef/asuWY5HlOZ1T42CcQ6PRgjPEXvfKLiXzS0XBZ9aAMQGqbHeh15lS3H3oYSafrgS8gxQCztP9bI0BEwJK0vCtKHK028OIpESnswAWifZb3vQ7Lx0fW5F2ul2cdOKJ8M5hZGwMFBjOjgpwq+5vALh76zacdvopU9f/5IZ/3X/wwK3toRYGeR+pamDQ79Gz10dYtXoV5ubmyNOr6bxHKgK8w2DQB+cC2pQAY4jiGEwvA94HLiFl44UvevFz/vXKf33deec+6tEjo6PMa6oqy7IBVBTBc1//jK66mQHUtWTWOZRFgThOgjIlCK9cUKtwYoMBYM3aDceeesppmwEsA97ltbyW1/JaXkcD3qHhITjj0Ov2iG1jBh5Ao9Gog6eSNEVZFMiLHFwIREKCS6Db7WBqahLDw6NDlz7ucY+88IILH/OEJz7u0jPPOuvM4dbwSPUi8/MdeA+Mjg7B2ZATzBmk4DVgFUzA80p+6sOGtQJCQYIcwnWYZIub/woULAEIzAPwrE7+9VVVEao/C/JoPLhtxoVdc9Wt66kvFP1BhoP7D6KRNmCdxZ59ewfbtt1zeHpyeu/czPzeffv33L9/7/7t+/YfOHDPvXf35+Y7/e3bth+xzi4ggIyRkVHq09QangEGOkjJHWxpwCQx3K1WG/1BH94S0DeW3keeF4F5JCDc15p8jYKBMREShSkpVwgBHwtKGQVtMmAdVSUBocPUw5Ya3jhEiYIFSXshGJ1/xhDFlFILQ2m/1lJnqTEaWlOljXEaTDCqMwJDp7OARtpANsgx3+1iy7Fb0O3P47zzLriEgWH33j3YtGHTg1W77GdYZcOG/eCBw91/u/rbP262hpA2UvR6A0RxhCROML+wACUldGmQpim00cTuhevDGFNLeIsir6W6LOBea7GoAkDVcbvoeXxInMoWQ6nwgHCVo0Dvg9he9vDv8wH/XYVQVVZixpYyvazugq52ihyCpNoekEoBxsGYEh4egpGkmIOh1JQczhiHLiktveRAs91CWWpYD0qmVTGmp6exYfO6LavXrNmQZzkcQOFUDxhSCCnrc0VWznAeBQuduPR33U6n351fKBa6HSSNFIJzWDA0Gi2UZY5Ca+jSwDsLDkkBeo4qzuqAunB/V+nsHlS5dNR9XQN/R6x/GAp45+E5sUrC+Xoz7byHNVS/E6X0DPQeUDyCdQaxUhvPOP3001etoBmer4djQLPVoj5v7yEFR7/Xw2233TakdeGdb6Lf7YHzPuIoRq/fB2OgrtlwHzsX7BShr9lbh0hK8t7WShySWFtrIBkLadwMxhq0WkOhbxaIpMTk5JH52++47duX46VP5oz8j2BLmTTUFUIjw8NYaDWwe9dubNi0GdoYCCmjD77vfb99/7333nHvPTuuHxsdw/TsDGA9+lmGVatXAdZhcnKSuoyVgLcu+HGBOIpJni3Ir1sUBT2Lg3dX2xJSCHCmUBZl/XVgITzRe0RRhGZzqGaw5zsLePJTnnrpxRdd/AwA2LJpc32r2CWKg7p3PXSKA8C3/u076PR7uPP2rTd+5tN/9b+Gh0eyVtoAhIdSEi7Ilx08up0u+v0BWs02yqLAYNAjcA5gqDUEB6C30KGgQ0dBa8urvufE6MqV53/iL/7ytW983Wuf3+v2G3mWQxcaKlI4ePAIjC2xceOG4Ndf+vO+6hCn/AQaTvFakVXZJFx4/jnPQzo/cOnjH7P+vHPOOw/ALcufwvJaXstreS2vowDvwtwcypJ8md57yEiAGQ8pBEpDiaHDw0PodnuAIy/W9NQUvPc4ZssxJ77gVy571nOe+7ynnHPW2Y9SUtVSZWdpgyYEh9ZFzc45uJCUSqAsKwpYa5HGaWDZAkhdWuHij3ZSsgDq/AP1pEtSiAMUqP/M1TLmUH3jHawhSTaXEtYQ6yPChrFmHTnDwQOHMd/p2Jnp6cOHDx6656Zbbt66deud91lj7jt46ODOfn8weeTQkW6SJtY5g7vvuRMTK9dgqD2E+flZjIyMkvyP9nLgnKMsS7SH2xj0+uBgELFEaSgwqdvpUvBNFFEwWFmGWiUf6lhC5YZ3IXCLgwUZKKq+TWNgnUUcxRCcY9DP4JmDYPTaUimqRjGWjicvQzWPgKjSbq1HnEQoizJ0HTMoJWljyQTSOIKMJKQSGPT6sNZiYtUEms0Gsn6O4eFheMYwOz2D+dmFlRddcOF59EmJRWDIjvr4Hh7whr+4f+fOnbv37N7GwFDkBaTgKPIyyNRRJ9tKHiOKFs+DtzZIVuk8sqVhR0EJUPlb6+Ajthi+5B+qh/dnkToPTDZ7kMT5gclpSwB0dW27B24kcbR/NzAjlWyTiF6LKIrAGQFaH6pvmCD1htEapbGIkjhUZlkIwcMgCsizDBx0bbRazTrcanruMB79mPOPO+nkk1ZUzMtD4fla4hzuuzRJ6r+XQWoe/n1PO1M4b6G1hpQCTHhoUwSJuUZhDFioUSrK4igvvguePiECwLVVuVglSabBmhISTHCUugxOeE5dr7wK+qL3whmHlALG0WukaQyAY1DkaLWbGB0ZwcF9XWzYtGHzirEVEwyADR+QcyTFds6AeQ5IDsY9Yhnj7HPOg3WOGWv80FAb/d4AxpjQD+7Jf844tC4hA3i1ISAwiiJi0gVt/K0jtY3WBdXtWAMX5M4eHkmSYNDPSLYdvsfffO6vv/XCl/zKr5999rmnW+/AmAggsEqmp27eRpJiw8bN2LF9ByZW52g2mxgUJTZt2Hji+97z3vc99clPf6PVZnvSSBBHDQipMD83CyUiNFtNDAL7K2IFZy2844B3aDSbaDRSdBZ60M4hjhswVoNLjlhGyPO8/lnQbrcwGGSQUiAvczBOvutGmmJ2dgad7gIAxK97w+tfwRliG9h9zoCyLGGdrWvLFq9Buh6nDk3hx/9xA57yjCcP7rp769WA22GtxfTcHKQCBhmxto2kgX5/gOnZPhppA4JzaKthnUcSEcuYFUUYpHCAA8aUNExYXmg3h059y1vf9rLXvP41LxxuNjf/y9e/jrMe9ShMjK/EkcnD6HUHSJspVq9dFZ4Xom5ZqIZL1c9wshtIKEGp737JM5AzgVJTcJsUPCh3OJ713Gde2Eqan+3lfbv8aSyv5bW8ltfyqgGvNRbD7SEUmkJqYpZAKoaiLJBlOdqyhaLIobXGSHsIc91ZnP6IM058wa+88PJXvuJXn79uzdpTFkGuh/WWejarxFYA42PjQRpmYb2h8Ct4cMeRRNESJraqOHkwujgKLzCqHqr9tljMU6l+YFasXNUHyquOVU8hOMZaZFkGpWKkUtZdrc57dOa7GPT6mJ2Ztdrqvf/6r9/66S0333rjIOvdfujQkfsGWfdIr9/LB73MT6xZiUHWh/MaIyPjABMocg1jNTp9jX6eQ/Z7NSvXzwaUSuo0Yq2gVATtS6qGMgbeUTqukhzOajBBPcje+cDGBYlr2JhXabRVDY0QEmD0/sA81buUms5BzbzRcMNoA+cpodgYFtg0wNsqCddRMJkAmkND6Pd6sIENy7MM7aEhxLFCvz8Agkx20O/T5nWoRYFHnGPy8CFsXLvulNNPPfW4LCuwZmLVUQDSe3/U5vRnrZ3377yr31mYi6K05uilkCi1CUwOyZLzLAOT1JvqLW2olIzAwFAUZQ0sGXztf3Vs8do5qn6IPYwhdylm9UtSlB9YXfSQ/5wd/S3qC3cR3LoHYmr/4NeuritWawA9jLZgjFKUOedUycI5HFxITuawltQUUkryqDqgLAtIESFNYvT6PfT7AmvXrsXBg4cAAGc98sxHAUBZashI1ffV0kOqnQIPGGDUI6hQdL13374DDGygVIwojoldCyFwxpgw2KEKKRo8Acy5+joh1t7Buuq6offCOCkNqrNrjAMLYKRKD/YQ4bqztXy9kvh7xsG8Rz7IwaUADwMVLgSYFFi9es0W7xEXxiKSHOBkQSjKElEUEWjWGnGc4K6td+PbV109Za2T3lqdGUvJ9UVeDxmMMYiTmO7H0DltranvD+89jDEAGIUjLQHKpfNQSgV1gsPCwgKssUhSskCMjq7A7NzMff/yrSv/+eyzzz1dCVX71qtBCWeLwWOtVgtnnX0WOr0uet0+ojiBthZPfMITnvDBD77vbR/56Id+p9FI5jvdPuI4gS41etkAjTRFI23AGI1+dwAmUNdgeUOgxQOIkhhJGqHbzZEN+jRkCTLWOEmgjUZRFmA8QRwlAGMo8hKTU1NI0wR5WeIJT3rCs5/59Kc/vrqDeHi+SyUQMfVwczJ4Djz5qU/Cv//wP378xS996crh4VFEcQxelAAsjLOIVIw8L8L5lRBSQGuLWFH3fJYN4Gw1FGOh05sSw51bDq26+HGPe+q11/7gnavXTTx6cnISul/gvHPPx1y3gx337sDpp5+OTSvGyQcuZf3U8J4G5JX0nC2S5fktt9x+6Iffu1Y+/klPHD/tEaemlQ9da41BkaOtWvDehxBLiemZae0FlqcPy2t5La/ltbyOBrxRnCBttuGzDB4eeV6AAzDeYu36tTC6xPzcHJrtNg4c2o/nv+CyE7/2la9+AsCT5xcWsPWuu7Fx3QZK9eWAVJT4S9PaRfkhD/23iovA8AQmplKgeb8kdOfBzJdnde3nInjz7OgvP0oS62vXrg+vXRYlykIjihWEFBgeGq6/uiwLv+P++2b27dl7ZGZydv+e3TvvuufeHXfs27vvngMHDt134OCBmSzrY+XKVRgfH4cPKaeDXg+9Xh9pM0Z/kKHRbCJpROh1u5AqQpIm6PS6gLdQKiGJFgBjNaZnZ6CkIp9onsFbi7TZJpaZg9giT87DygtpgnzLewcODu8pnIsLkhM6S7JPISWYQ133IaSAs+TTVZLAinEGXHAIyVFqF0Cbo/qY4LMjKSVJ3jkXaA01UAwG0KYEkwwLnQV475GmTeiihLdAv5eh1+2h3R5Gd24B0zOT+O3ffONjxidWDhlnwdzR4JCxn7/1566777pTCoWhoTYGgwEajRRGaxSGkqSdtQR+ogjOuRAuQ8FTXAi6JowLgIpwJg9wrAKQddVO5e+tan8egph90ETGP8SXPHB+4x+8Ia8obo9FsM2WaqSDP7WytjPGICQxYMSoVZ24HN4R2+kZD8MkCkFynmG4NYxc58izHFKQjNNyAc45BaRZg9mFOTSbTaxeuxa93gBHjkxixYrRxrOf+6xz88EAs7Pzfs26tWxRSfHA9/Lg//aVSiOcp6u++c3dg8HAj69cCW0N+roful6pMzVJE5iSEn5d8CiDcVh4QIRBhjHwcIuefM/gbRVC54PVgYAXOAv+zCDkDf29kVIAByV3Ww8Whh3Uc8shuEBZahw+fASRinHJoy8+K5YKsRQh6IxBcIFGkgIc1DXOqHN2z56d9qc33tCbmFit8kFfe+/R6S6EqjC6V7UxyOZzxEkEwYmJJiabpOZSUVgWZ6AO3aBQccE76i15HMEZPBNIkiiA6ARxFGNiYi3++Z+vvPJFL3jJS045+ZTjETrMKxe0x+I16xkNMPK8RLPRII+xsygKi3e88x2/euttt2796le/+olN6zdiUPTRHGpA5gLaWHQ6C0ijiOrSjEaapDBGo7QavX6PBqAgJtU5ApEyjsA4R5ZnsI5SktMAnIuC/NRp2oBQCo1GApWq4d/+rd98mWB8yFgHwUlO7EHDwMVrbXHYCTAszM2jMDkuvPi8/p/+2Ue+MHX40N6JiVUo8wKCcWjnMdIagRACc/kChBSwLlTaOYdSl2g2GzBaIzckvXaeNAYA9Vc7+8uLsRhj4oWXv/gVX/j8372jzIpj77/vPpx8womwFpicnQNnDI+5+JIAcumJYa1BqUukSQrOPNiSz+/g4SM7rv/RDVf+6CfXf/PK//WNHTvvv/f8L6//8kdOe8SpxzlG6o0okpCqBcY4ytAfDwD/8e//MdXv95enD8treS2v5bW8jga8jHHMzc5BSIEkjpHlOWIVI5EKpizQ7XZRBAkXABw5NH3eF//uSxecdtop6A8GfmhoiAlBlRQ+7MoZaY7qPj2/ZBNiDXlKyatVl68SPOWoTZ1LyK4lia9B6Oz5EgzhjyLHWNhcV76tJblU6HcGsMZAMKDX60OXVh86cGj/rTfddPf2Hdt/tGf/7lvv2b5979T0zOGFzuzMirEV6Mx2MbF6AuvWrsMgG0BwqqgY9AeQSqLb6YSwFQ6tgG6XNnRCSiRxDG00mo0meShD7YaxtpaSEuPCAzAj+TcXHEZrCBGHkChdSy5daSCFgLe0ERZCwFgLZgm9CanAg2TR10Ffnmp4SGUI66vAL0BwgX6vX7NGzlE9D2cSzWYTeZahtBreWMRxjKzfBxjQbLVhCoPh9gj6/R6sNtBaY9PmYyC4RJ5n1Ofb62DlxHjr0ic+7jEAkGc50jR9iG7bh4e8FK4lUJaluemmn97RbDXRbDaQFwWsdiFkK/SuguSpgnFwwVAYA6kUOPMoy4Ik4IyDQcB7eq9au/o680s2zdWvVUURr2TOSxldv+gtWwxGYw8LiCs1w8MlOLOlU5ujbgIa+BADQhv9ihWpwlsIqwXmiZGSgfbhNHCSXGKQ0XXbbDQBRuFT5NV3GOgCYyvGYDUNTcq8wMz0NACDkZHRdRs2bjw5aTQwJiQD+88+tYdCv76eSp148ql7rfsHCjICJ6BuCfR4Y6E9KOhIyLpf2zoHBkvv29G5ItBPqco2DDuqIVuVss7Cs8h6CxEkkqXRdfUPBwOXApAeuqRgLQiqMmpGKclYswHOfdS5K5/ylKeclsYxef0FdfiCA3Oz8xj0BojTCEkjxuzcHJ7wpKeId8x3Rj/5yT8XWdbH/n0H4AwghYQuSLrNOUOj0QDnDEVRQHCBVtqEsQaF1uFeDNJ6waGUhDYGVpewDIhUjEQ0oE0BwEGHAY/gAt1eB63mEO66/c5br/zGN75+ysmn/C7j4qggNlYpX+qMA2Dl2FidXG5LW9mu1R+87w/eun3rtq2HJg98T6UpjDdI0hixAwaDPgbZAEpFdb+u9WG4Zcl6IaQA4wKmpFAq5yysNogVBV1B8PBsdGgPtenZ1O+i0Wpi+sgUzrvgvMc84ylPuxgABBjyosTcwjyG2+3FCrMlfvtudwFHDhzBd77/XRy75Rhc+bV/+c5V377qWxMrV8MZCl0rSw1jqLO7zDX1t5eaBiqhD1qFui3GBQX4OQtnsERZQQOaX8Y1OrLi5I985KNveNaznvHi/ft2jbWaYzjzjEfin7/+NTRaQ3j8E5+EFaMjNGxd8tBzqKrGGBgX0F53b7z5xhu/+Pkrvv69a675l3t37Nj3guc9Gx//8EfwxCc//sDjHnfpWPX55oVGJEWw5DjEUkGFOOdLH3epXt7WLa/ltbyW1/J6MMOrIlhB9TZFXiCJg7fPO3Q7PeQ5dTzmeY44SbYcOnjwSXPzC0PHbNmCRrPBoiha3JcvJcGWMLPV3j3XBboLXcRRjKF2+6geXM+q2gHqBfZLTJ0PUHseVS9USZYdyHNKYIZBPGAnPj15BIpJHJ48ov/yr752/fTszPemJ2fuAtje22+/Zc/c3Nz0QqeDFSvGQ32LQp7nkLFAt9cjgOE9tLMYZH0YZ5EgRtpoAAzkkbXUW0xSNyDLcuTlAGnaADx5IRmjyg7LyIeo4giMMZR5DhEqQUQkIRCSTn0I2eKC2DjjKOk0bLYqeTNC4Jf3xHiRDLL6LHwtv6tkkVVCs/eOjplxWEeAwBoLxqgiRaoI0lqSe8KBMYkkTeA9MOgPkM/maLfasNoEuXAOFUnEjRjdhQ5GxkYx2h4+Lk1aJwGUNivqwKF6ZAH/APq0DhGzDt1Oz7fbLabLcr/3brvgEjPTMxBSoiwLOHikcQrnHf23JamnsSZ4kUnGKYSovbrEHC6C1MVOWV/7OyuP9CJYxZJEZwK7tZS40h979mDWt7oBQj/uf7p+Bou8lGl2SwBd5U0m2S4xTiJch8zT/cyYhbWuBs0cHErRdR7FMbigMCvHqB/zyOFJjIwNY3ZuCq2h1ilRHK0EABXqwNj/RjAtQ3jvnKHb7WZ33HH7vYpH0FqDK4lYKRRFEbx4gTHzhnzJztWf4aJyIwQwObJRVGKReqBQwTnGjhpAMBJM1MdurA6fCYNUMtgwqPYojhKsGF+BQwcOYWh4CFkxGNt5386JE084AdYYkjyHALd7tm3DuvXrMTa+AmVZgPMIkZI4dOBQunv3bjM80g73JK+tB9oY+jyEQ5nrcKxAUZahAtzRgMo6gAFpktbJ1FKS/NuFyixrba36oBoqQJcaLtVYNTHhv/JPX7viaU95xhPOOPOMs4ylKiZgSRDaks+qKDVVvqECeyTZPuGUEzZ86tOf+r3nPe+y+6xxe8A4Ot1+qEiiAR/ngurQPHmsSU1BrxBHDYADeZ7Rs0VKJEmCIi8hhQSHh3cWSsVQlb9XSMRxDM9d8tLLL38eGBv2np6dc7PzSJsJ4jReVEaEDzbL+lhYWMDM7AxGV4xgzep1ez72sT+7wlkza61BZ6EDpRSEkmg0mxj0+6QACZJyLgSUiiCVQpYNkA0GsJaGkpwF5c2SmjD7S8bwxlEcPfoxlz79O9+95vfOPuvM87bdtQ1jo6swPDKMrdvuQpYP8NSnPSOAXfp54owjdQY8lIighMK2e7bd+Y9f+cq/fueaa67Zvn3HjbOTk/0Hvtapp558/KpVq8eqekApSLOc5wWkVHXaOBiwa9fuzvK2bnktr+W1vJbXgwDvIM/ABdVFxAHsWmswGAygdYmxiYnWxRdfdOZIc+TSxzz24qdf9sIXnt2upukIMuOwB+dLwqJqhWf4HwcPJRRWjq8I/5YKJGoW9qgqTU69t3WnxJJwoTrMqtKPEptbAUC+ZOdWbcoHgz527dkNb/z+G37843/41lXfumLfvr13WON9qzWETncBSRxj5cQESeScR7PVCAEzGtIYRFGEotQEEhmBh0HeQ5okUEKh2WhAMIHeoA+jST5rHW2mi5zSrZ3zEBL0+9KBC2IVdVECzkMoYlgFC7VLNoBMziE4oI2hDRcE1Q0JFpJXKXWZCVn3lTpvA5tJ50IIAofWWnAu4eHgHFvsTOXUUQtP/a1RIpHlBYQw4Jz6N72nY88zCqhJGymyPCegrCSk8yiKEsYYtNvUK3pg/xE87TVPe8Spp568VmtXS95DMskiq/kwfCEXHEmSMKkErvzXq27fef/Og8ZoeMaQpAkW8pw2nYIjjRMAHkVO79NZS32/zkFrTWmfnNWyVh5kdN5TuJpzfjHp1fmj7LusBua+ltb/bHR3NHDlIY3cBQDmflZzJ/vZINjX7Dira5QocMtDcAbrQZVDngMhEKYC3FJKOOah8wJKKqgoQhRHUEqBc4b+oF8PkoQSWLliJXr9Hl79mtec30xbMFoDjNfy8J9rEequue9bb79t+933bLtj9dpVOHJkGo12g76EcyRRA2WRASF52AWA7vmiXnzRCkGS5ZBCR+c5VE3VdUXVPwtBN8455HlOCeSB+XfBK+ycgxTkLdRWw1mgN+iDRXTNKyZWnXf+uROLH9OiCmB4ZBitdhOm1IAFooi+z+T0tOj1e3wwGKAockRxAucpYIwCqxiMLmGNBhcKKpKhkog+W60NDSjA6vtOcEHmVUvPbS4EpCT/sJIKvf4AwjMIIdEfEOt66+233vHhj/7J56748hc/LjiLq/NTPR9cNTz0HiqSQT5Pzw9jHYw2UErhoksufuKb3/ym177/D/7gXe3WsIuEgDEGw6MjKLMCYAzWG8zPz0NFCmmDwgjzQYn5hXkwDjQbDXjmkWc58jyD0RZSKTjnEMcJoojk3YJzNFpD2LtnDy549IWPufylL30GQAMAD49GI8XI8NCiPYKB/OoAGBNopk3kRYGRoWH9D//4pX/5/rXXXjPSHobWJSIVoTQaMlYo8hK61FARQ7ffg3cOkimUWodAPAclYgju4BmlfSsloYNFxHsP48pfmk1DI24OP+f5L3jdpz71qd+MIrlu/4GDGB5bgb0H9uDAof244NxzceGFF9G9YR2pvEK/tQgX3O7d++79+Cc+8aXvfe/qr22948673/+e9z7s642Njp1cDRV1aajizGrMzs9hbHQFJKPGh8Egw1e/8rUd73//+5Z3dstreS2v5bW8jga8Qgh4OBhnoKDgrUe304MQvH3xYy55/Ove+PqXPe85z31iIuN2ta1cTDwm3xeWBPVUysX664CaZWGB1aSv40cnMVfsGVsqC/U1c1VJFavgKfLgoQ67YqFeppK0dXodeAsMDw9hdmYeN994692f+fRn/sAZ/VWZRmZ2roPR0VG0WuQ163S7dSKx0RpMNDA8PArnLPqDPrJ8QPtqY2nKLBVcWQAO6PS6YODgXtRpkxbEVEml0EgbtNEuNXVMYpEttNqQ75R55Dqj0ClnA+ByoYaIBQ8iSTZrSbLlR4VYVW2jnvl64w8AkkkooeCEg3UGjNPm32pD/rhmE8aQJDlRCZQKqbacKh9c+LxkpAi0OY8kjZEN+kGOTX7CkZERWOso2EoI6LLEYNDDpo2bzrHGwRoNKRSOmkosQXQPJQZeyiRed92Pbtq7b2/WaDRhjUHe53XFlS418iyvGb4sH9R+3GoYwkDn0jmSkNOl5wOjF1hC72u2ljZqdBBVFXTVzeyDd3BJ8evR4LS6rANAc/XXH/13Dw0QHwY8Pwj8+kXfehh6WE9QmntBYBfkHHAhGCZJ4zDUcZBKBsBMkuFmswEbBihtqTA2OoZ+r4dikKvjjz/xNCAkE3sPwfjDibcfAsCzow5/x/btt+3auWsqSWKoWCAvMsASAK3SxpWSoUM32BM4Fn2SAZzRexfgzNVDCyFpiFFq6hYmMEfHQAMxHoZPFtqWwReLwNYRmDLGII5ixFGEPCuwYnwcWW8BJ51w8sljY2Ot8OCsPwwuJDZs3IgoUnDeIY4j9Lp9TM1OY3ZuZm3WH0ysXLV619j4OHRRoNfvQ8QCSil0Ox2owK57T2qE6vdRnIR0akCKKNgf6FotbQkG0HCMeSRJDGscBr0McRTTcENxCmjzDKNDK/Gtb1355R9d/x/PuvCiS55inQP3DJ6TuoeBfNw+SIsDEQ7jqLYoSWQdUPbW333b63560013XXXVd644+ZQTsLDQRZ5nKEsNLgSpLZoepSlgHYMUCkkjhnMkky9DLZsUCnFCTG6R5xBSQEUR8rKEtQ4qikNQlGm+6bd/+9VpkqygIRj1KadJgsmpaYyOjFBFVjhmxqij/HvXfxetVgvjK1bu+sEP/uPrrUazYz0DmEQU021edZsnUYI4TZAXBYzRMKYEA6vD3Rhj1GDg6edarJIQDEiKh0pR8z99tRqtNS97+eVv+/O//PPXHzx0JNU5hQXeveNOrNuwBo+48MJaXl4NDT1IYcSZRLfbm/r4R//s7z7z15/9mwOH9m4H/uQ/eXQw9bE/+9ipAMjrXd3nIsGa1WtgQsidFBGst9NRmty7vK1bXstreS2v5fUgAi1NYigRQUqJIi9Q5AUe//jHPuJ/fe1rf/mdq676+5dc9qLnVWDXhh/21OUY9ttLwmj80k16SD51OLprtRYY+rA5WUytWgS9gU0DW2QgGeN11RHCJt6D1wJHzxe/PzE9EkmaAh5oRCmu++F1X52ZmfmHw0cmzeHDU9i4eRPKssS+fQfgvYOQErqk/s0kTlBkBRY6C+j3u8jyAYSUcNbCGl+/d8UiFLkhloVzGGdgvSHm1dqQgErS5kGWkbSYA9ZpYtAg4UIdEhcSnhMzmxcZGCfZIg8yXGNsCJEC9Q4GtlFIQT5G78IGn4J3IhUTE+RoCFDqMrBefElYFIMzhqp7DAFvbXXdUesdbTrjOCEWo9RwIRmWGEUOJSWiSCKOI+jSgDFAlwXm5+axdv06bFi/rjU6PHLG1NQ0pBJY6CzQxv0hIo4eEgaHhGEAOHjo0K3t4WG0Wg1Y56m6KVZQSlWIjwBvJfGthieMfGIOgNa2BrusGhR4X4eeVJLWKg14KffMQzczFzz4QpdqnY++9pcCWraEya58wqxiKo8q0/EPD36XhGI98ET5IGXmQpBE1gFOWzhL9wlXIU3YOThHUtMkSuGthS5LeGdhtIV31OGb5RlKZ2Et9RA3mo01XvtNAKCkpHohPLx/1z8kll9Mkr7lp7dsz7J+SBa3sDrcK/AoihwcVH8lI0WDGWPJ9+k8lJCIZFz73p0jBYII9UXWWrq+liQQM87AJQ/p48RyC76EoQ4MkWAcHAztdgtJEgFwyAcZnNaAdzjmmE2nAajTza2hgcfU5DQGWYY4jhFH5Nufmp7Gbbfchl//1VeeesnFjzl2MOjBWYveoE8qEUsebALYrr4vKaCKwRhDgCqw+CRdtqjst5xXI0ELD4tsMIAuCmhThgGmhS41mmkDQnEMjw0hGwwWPv4XH/8sgFwG7781hq6JIOnngkOAgtBmZ+dhCkPnhlP1T1mWUEqNfuRPPvymibWrNx+anISUlCcwMjoMzhglG8cRlFSw1iPrZ9BaBwY3pS5w50ICtUMUxWg0GxgaGUZeFCjLAsZZ5HmG+dlZXP6yy1982XOf96xqAJZlOYoQPthoNuoBGg0M6D4u8gJDw8M46ZSTcd1113/vphtvusEYg36fvMYeDEpK9Lo9Ur4EZYgQHFJICKlgvIdQAnEagUuqhzPOhk70nM6+syjKAlKK//GbhbGh0RPe94EPfPQzf/3Z387yPFVcoNVq4Dvf+x4mVo7jrEc8YtFL7ej/GaOhAmPMXXf9dd999jOfedl7PvCu3yWw+5+vLcefePzjnvCkMwCQVSaOsNDp4J577kZnvgPBRd2B/M0rv7n1nm3b9ixv65bX8lpey2t5PXBJIUjm53OHsshx2umnr/yTP/3Ttz7ijDNeBlCnqdaWuvCC948d5ZM7mogCFu2MIgC+2p9ZM7gMD9BoBnC75D/DJobqkTJoY2G0RqvZovAlDwy1WsQkh7wr5xc7fFvVlBlA2k7dQOc3DPIc4A55v0cTeU+b37woIARDLx8g9jGcddBOQ3KBfFCCCYE4SmDK8FPc0+ZIqRhCKUgmiBFgPhB+FGbjHdFvxhliBpyFD5tyBgPGgt/XEfjinpM30zloA8RJAs45ssEA3lqoKITsMAnBGQFs40KoEpCkCXWWFiVQJdgKkhg6vbipBgssbRyT9895CsUScjHlmUswHiSNIY1WKkWdts7DFhYqUuBcIu9lEExQ52azAS4FGmkTHhyNVqtx5tnnbFo5MQ4hOFrNdh0ohqOuGQ/2UDCYM8Sxwsz09NStN928I88yKEUJukzQ+bLWQWuqjhGCwxlLPq867ZYkdYITKGIhsbcCivC+HuRUf+bC8GCpUdWRcbb2AT/owv/PunqX/JPqmPxSuP9A1vfnoU+DosB5h5BQBSkUrNFwIeApURKcCTpf2sMJHyqKOJSgvysLg16vh9EVIxAFhwBHFCkcmZzCBRee/4iTTz5xQ5iRHdVh+5CH9KChxaK90hqLmdnZ/e2hEWzavAn79x3AYJDBlCVM8OBzztEfDMCFQByn1JEqXBiEIQwpaPhgwufJQF2czpBVoqo38cbVzx1K8XYofQnvKNiNS/LU2jAM8t4jFU3k+aD2vu/fvw8MSDes33gMANpge8BzBus8mq0m4iSmflvOcejwYdy/6z7cv2snNm3ctHF4aGRzlg1Az1MgjiQG/QG0NnDOQTCSc1tPbDFAtUu6LOm+k4IsHoGBJS86RxQLWEfgloEjiilwaZAPgj2FoygNpOKYnDqMuNHE1/7xG9f8r5d849+e/8znPK+6hqMoqu88bTQ4ODhjaLWaIYyQsqF7/YXQbx3huGOPO+fVr/6117zrHe98J1atpqFaUVKAHiflincekguAU+qxZx4y4kDhIZkAFxLGWDDOECkJo4m1ljJCGsWYnp7Euk0bjn3/+z/4WwCUDdPTNE2DrJmh1WjUPlrnXA1+O50e1q1dj9179tz3+S9+8e+Ns3nSTKGMRb8/QL/I0EhisIIjSWIIwZFlGbytZN0KDSkB55DlGXW0C0GVekFamyRJ7ff+nx4LfNIpJ53+/f+49k8f+chHPnH3/ffhyKEZpM0mvv/v38Vxxx+PM844lZ6R2oLJkBchaaR9cP+hXR/9049+8u+v+OKXpyenJ/93Xvfi8y844fRTTtkAEJOe9QeABcZGxxCnZFeB84AArr7q6n/Ns35veVu3vJbX8lpey+uBizfTNsZXrECeZ3DOsYXp6TPe8XvvOPvaa39Yb1aVkuCCQXBGks8lO9mlvBR5mcxiCEpgz6wzIXhlySb/KEaY/tyWJAsrshL//oMfFl//xtc7//gP/9j/9Gc+W04emcTYijEkjQQ1yl0KFkIIUtVpShJSWnv37ju0876de9pDTYyNjmFsZJQCpLiH0SW0sbDOwRqSIQvFyavlLZIkhuQS83PzKIsCSkWoYrKycgDryuAhppAZU2qUpoSlGC0IKeu6G2tM3YNJfbmoQair2fPQrQmPsshRZFktzSythmcWjFcpXgywqL14WmsCfix8TqGWByAPL+ckSvSkjIap2JCyIP+ilAQ4GIeMREhGLqC1AecCcRJDSQVtSsRxhHyQw1oK2YpS8n9PT8/AM0AohdtuuxllmbXWb1g7Qv5gktFWQWNLARFtkO0DkOMieLpr27Y7J6cm97kQ2tUepmGHMcRSihBuE8s4bM9p+JGmKaQQsNYEGfyivL5id+naIUbbBeZp6bEtetQXJeQPZHEfdMD+IWjPJSCeC76YGL00NYg9DFXqSTGxmIlFfyEYh4okgUFHib7G6SC1lBCCw5QOzhh4b1GYAtYTSJRCQYgIQ0PD2LhxE+I0xtzCPFqtNtKkgV5/AG0LPPaxj7lg46aNI6XW6A16FCbE2FHKjeqYjvpcseiDrg67s9DZv2ffnnuHR4aQZSWKrEAax2Agj7rWBuAB3BlHad+xRLvdgmce2pQwVtN1HT4PG5hSqhHiwYPt4IPkdKmnVwhBTC5j4X5gkFIhjlIIzmGNQbfTQVlqDA0NY+269fDO49hjj11zwUWP3oIAuBkjUI3gSRXgNbsYxwlWrV6DtWvXoz00zI474biVFFQlkCbkM48i8kyTFJdSpuOYvKvGGOqtjWIaNAIhdIy+nofLxBiqUnLWUXK7B5JGgjRJ4Y0NydYEhpn1GB4dgozi3h+9/4Of7fa6h+NYIVIEdvOyRJEXMCU9ubiggQf13Fpo79AaGkGz1UQZntNvffObfu0xlz7mKdMz02imDWhtMbFyJeLwPRmntPAojgjIe2KOraPEbSkpTdo7FwZ7BdI0QbvdgGMO1lk85/nPe8mxxxxzundkN+CChgFScooq9MSye4cwqOOAAxpJgjRt4M8/8akv3nn7bT9uNNtwHoijBMNDwxCMod8bwHsalpWlpmeIiuAsMeZlUUAbTWoeEYExAV0a+jNQbzIc1TyVRfE/dpNw8eMuecZ3r/3+3z7ykY98YjHIsG71Gnz+C3+LD/3Jh3D+BefjGU9/OtI0JQVJeDZyQUPN6667/tsveenlv/7xj3/sz/53wS4ApCo6jjMqWM4GGbr9HpI0wcSq1XUwoVIK2++59/4bb77pW8tbuuW1vJbX8lpeD7XkxOpxRFEcv/jyF5149TevHs3LwQXHnrB5XZKqGkxSUO1iIFUFboGjhagOHsY66tWr/oYx2JKYDBYRKOIBNDhnkA8KTM/M4Cc/+SmOHJ7Cueedh/HxMfz4xz/ub1i7rnvaKaePTEysTo47ZguUlNBao9Vo0mZzSYdrJUHVWmPnrvuxZtVqDA2PAAB27du16/DhI4e9s1i9ZgiMl1BFBCUEeqZPclyjwZmAKTWBVcaRlwaKezgL6nKFRl4Q86RkBBmqW7xxiJIIxmh4mBDWRd/DGgfOBLy3EEyAycUqIg7AGB3CdeicUW8og5QSxoTzBgYmQoKwEPDOw1i9KI/lFDRlrAX3dKycEUvpLW2muZIUguUdpKTP1jsHzwEVRcRa6xIigGIXvGvOOjBGfsMyL2C0QdJIkKQxikJDxQJRpDAY9BHJBPAevW4PVjsIJrBly5YNcaxSAHDWw8OSHJMd1UAbinOqOLJF2Xv1BT/5yU/vnF9YyFvNJvn7AvvCOEOcJLWv2bnF7+i8Q1EU9fCDc1ZLKau0ZVd7eRflyYuVRJRwXTG/3vuHpzQfqPFlDw10j2Kjfk5P70PJq6tUUuc9VVKBPnfJGElhObF/8JQyzZmAZx5KcQKHXoDHHGVRotPtAYwhVgr9XhdZlCOKEgp18hArx1Y+EiCFQjW8wUPg+Qcy9LU1AaR2YAL41yv/9c6bbrzxns1bNmNhbg7OOJQokTRTSBehLDR5SEMXcmlKSB/BVN5wFq7PcLKUiknG64hZ9BWru6SHtQa81ZQtpAa74HuvLAHOesRRSsM3Z5FnJZQk6eoJx5986roN6zZUczxWBxU4qkvilNxrjcHE+EqkcQP33LUdq9dO+LXr1goAiJQEFwJFVsJYByk5WkkbvV6XEuGFqL3ZdP9aCC6gtabhjrWwhsLX6FqknmDGOLSx8N5AgmTZ4AxxpChleJCTUqMssGJsFLfcfMvVV/zdl/7+dW98/e90FnqIUwUeGOYo9AHXOQ2eauAYOKSsppTUTZvE6aoPfvAP3vKc5zxnm4XfM7ZiCBwcw+1hWGuR5wWEkBQIZg2iKKYk/cDCDnp9NIeGwESMNErhLKBkhEhF6A/mcOJppzz6db/+qhcBoSN4iXS5vh/Y4vCq8hjPzM7gnm07sHPP7pu+873vfIWFOqfefA9ccqSNBEkUI7MOcaJgDT0nVAhtjJSiSqWQbi6VgtEanEtESqDUBZgAtC6opsjStfo/bTHG5DOf+exX/OB7P3i/YHytd8DBQ4dw9x1b8cIX/QrWbdqIE447HtUQyDuEMDuGbr93+EMf+uNPfuyjH/vzLM96/4evz/7gfX9wJgDoggZdd22/C8duOh4bN66H0QZxHAMAPvHJT15519Y7ty9v6ZbX8lpey2t5PSTgXTOxCo1WY+zMR5z56LmpufEzzj7zsS/+lV8ZTlLagHDB4byFY/4B9R7sqA29C7QtAZFQ98EYBBOQUtWBMZ1OFzMz01izbo3fvn0727VzJw7sOVTMzs/Mbti8gTtnWp1u9/Alj3309c76mz/96b82hc4ve9Sjzr50PB1HVUnBsSiBXpRKA956rByfQLPZQpZl6HUGuPOOrbf3Bv25RpLAWYe9e/ZifOUKDAYZwDh0WWCQD+j9hr5bxgV6eQEfERvrvIMQ5K2DIybBOwKnxlj4gvpzpZB1iBI8iE1jCNJFSb25RsNYktt672q/Kee+lidTBQNJHTlbusFXsNrCeBNCkAycZaGKSQT2nMF6V8uEPQAXKo4IuFDljocDLL2WjBREtXHkoq7lcd5CKgELh0bagFUGRZlhLs/RbLRR5AVVLrkS1ho0Gm2MtNsAGIbHh3HsSSecLIgWh7EGZanRaDWPxoWMZKKL3mI8SB48OT15J721qjqEwLvRHoxbWFsFgnEwIeoBAgLQFaA+V+sdbZyXgMhaJssYgsK5fu0lLdEPjUfZg1Dfz97EhXvHBeDLwB4EjPGQcHJJPdeSe4/Stv3iIIlxxHEMYw2MKSGEoA5MxiAU3cvWeQyNDCNNEsyXc3DO4MjhSchIoD0yhFjFMEaj1Axbthy3+ayzzz4JAKRSVBGDxeA6j0Wy2zoPbSxiJWrVBq+HBQ6AwM49O+/mgi3MzsxAlxZCcmijwTxHnEQwRQlvLKwhtp8LCW0tTEbeXu9Imi+FgPUexpBdwLPQw2ypbokxBiYq37+FCOncDIA3JgRfERiumFkfUqy995BOII4jZHkOoRS2HL/5kYNBtzUyOkQSY0/5BAhMsbGhHzuAa5VESFtNfOazfz37g+9fOwlwFKUGYBGpKATNEdDiLPRlCx6GXuTZdZWCxvtwXEG17lmonOJw3kEJAefoGWG1ga3evy2hnYa1VDc2eWQGmzZvQDNt4z3v/cAXn/P85z1t9ZpVp+alRqwUoIhJtqHuikKmNEqr0UgTepqECaMIfb4XX/ToJ77z997+m+95z3vfsX79Oj0zN42JlasQRxF6vR4El+ACGBkZAcCw0OnBOo9WsxW84B69Xh99DBCHVGd4hiwvRj7yxx95w2mnnHYKQgI5Qqd73Zdd37/h+ucMzlkMD41gZGTY//BLP/zB1OSh7cMjw/DOQioOzgUGvQGSOIaUHHlB3dyeeRhdoCxo2EDscXifhj4LZzUECwnZgQWnZHdbg/H/QWA3esKTnvKqv/v8F94lGF+z454d3ljNvn/t97CwMIe3v/33SaUUngXUiU3n4IfXX//vv/mG3/jQbbfdftUffvAP/4+P4axHPuK0l1z+kosAwDEGEUU4ZvMxaLYadN8EFrkoiukd997z7eXt3PJaXstreS2vhwW8hyenMJQ1sxuu+0k/iaPjBPcn3n/vLpx88slgcpF55Et27NWEnSTNrGZZKx+iIzqN2MKwAZyenIEHcMftt4MpgXUb1rHNG7YglnF3YaZz0/277r9jYX5+bmZyprtr5+47Duzbf+PhqcMLt9+5Fb/+a7928vj4+KX9QQ9laZFEMW0GGWU9Y0kQkC5JUm2tw979+5DIBDf88Me39rsLSJTE9PQsWkNt6NKg11mAlBGcJ9aPJHwMSiiUugxyOwbL7GL9iSfmxRuS+fIgyyNvK6EQbynpl0sBDvLFVeyt0SRzNlrDg0FGEs66UJHja3bYWkNnNJzjqlrFGlt7GBlnVAfp6ex7hnDOOaw3NXJTUsAa2sRSKinJK1mQYTJQyJZH5Qf2iGQEDwYnqeLGW4ter0sJ1bEC9wSyy7LEyMgIRhvDYExAcvJVRVGMLCswOrLieBHoD6WIcXqo/lZ2FIhDGBLQ3lIb07ntlltvp+OXBNQWFoL/OIAvziGiGMbSxtZp8uhqrevQM4TzU3cYV2nfWCR5l/ZJV1/zn+LRpQztz+rQDeeWYek99J8zvPXdVUeg+zowixh+Xn9vYwyFTXlbezNzm1NIFTx0YMfzbIDuwgLASDqbJBGiJEEjbRCqYkBpS6zfvOGUVavXrAcooK5C3q76XkzUoWLeeVIRKLH4vAjHW6Un79t/4D4PDudIgp80EjSiJga9Afplt/7whRAUNBXYcFfVmwDgkkNFClpb2NJASKrjMo4sA1wweLA6vIoxBhVHNJhyoT+ZCXjuoKQiSbCUwTtfwDuPOE7RbDUxN7cApWJ28WMuOkYphbnZOYyOjcJ6CpsCGMnKhYLxZIOw2qCRNmBKjfnZuWLQ7S0kcYSipB5uAlLExFvv4JgjptYjAOfQpRw6dulesPAhid45A6USeAeUxtKQJoRbSSlBIQfUnd5oNBAlETwTEJK6hcdWrsC+vbu3fvITf/bFP/rQH3+YeVDCMmPU0131e3tGIFFFNMQzFkoKkuMj9EAz4I2/+Zsv/+a3vnXNddddd/Xw0DAOHjoYuoIlWu02smyAwSAjFlVF9P2YR7fXARcSK8dXwhpDlgkVY//ePbjowgue+pQnPfE5NKBzNbhhDzEKopovB2sspFToZ30kjdaugwcPXgsAjbSBubk5Ujp48uxmWYFISaon0mWoXzJBAeAJ6HpHPxtAPmdtNLQpQ1CSgnMeRhuyv7j/ORQvY0w8+7LLfv1Lf3/Fe1pxtGp+agFXXfVN9s///A381pveiNe9/jUEdkPwHl/0LBQf/ujHP/ehD/3hn87NTO/6/3scp5/+iCdv3nzMpoX5Lvbu3429+w/g4oseDSE47t62DaeeQr7hv/u7L377xhtvunF5O7e8ltfyWl7L62EB7/07d+G5z3v64Jprv3t486ZNl73sV3917SmnnVIzSn5JL0wl8WQg4FXJiiu5qNaa2DQpAdAGd3pqCjffeiukF0ibLZO206lWszn7z1+78sjuPXvu2H9g93ULCwu3duY7h+7eui0/5vgt/uCBA0hkjCiJcOxxW0Yve8FzTwWAe+7d4SfGV7PRkeEaH9jwOxHA9tzcLJx3GGoPY82qCXS6/SN79+25o91ownmHhe48lIqghEQcJdRVmQ8IHDBKiR0MMiglsGLFGObm5lAWJaI4or5ZIcFcYOgYhf+AeWIOHWCtCR3DDDAhfMuR39B5SlBOVEqdvFyAcwZbJQcHUOS8gxQKTHBKRvbk9QUcrLb1ro/haPOndw6WeTBeBTKR3JE29QVJLz15Rq2zgX2PwARQFAUYSN5MKbQOEEDEFKX5FhqCK6RJDEgCj91eB+32EMA4PASKosDYSCvIuUkivXb12pNqwLgkmAwPUWpDX7ME8YZ1y8233n3Lzbfd02q2IDhDt9cNHtgIcRyhP+hRiJES8AwwmtJnq8AqIQX1xwJUJxUScsnTebRP96GCp2oJJWMPL2v+WaD3ganKD3ytn4WoWW1DXYKcAyONyv25WM8lJfl5qzTm0pR0bQfPdqPZgrcaxjgIJRfZzcDC6kJj5cRKlIXGjh3b8YLLXnDK6GhbGQsw5+A9A5cCDA6l0cFTyUN1DoeU8VHnzNeJVUC3081/8uOfbhVcotGksKEiL6C5ATiDZFTh1el0AQFwwVAWJOvnoJAyGYBiURTg4HVfLxN0XqqUbZKML/odrLM0RPKgFF4uUepyMdk5J0l0HCk4xmGdRWe+C2c08kE33b97z8qVz51AUZIvljPAWxoqVI00nANgHCpJAAAHD+7HEx7/xNG777xrdV7kaDSakFLSwKHICTRr8iNXVclRFAPOwjILMBF82ZUigNLNuRShN9hCCBrmkEfdQToRwLKjpHYZocwzJLHC6OgI9u/bjyiOAAB/+vGPff6pT3/apRdffPFTSl0Sw8yXVMxxD8ZFfQGLiGN2bh7tdgvOOBhdIm40EMfxyne+611vf/Yzn7Wt1x3sbbZSyDTGyqFx6MIg6w+o6ilJwMFQGoMs68E7oDnUQJKk4JzCubLBAFk+GH/1q1/ziiiKEqstHEK43xLFSm2hDz+fOOPQpcHhA/ux9a47sn/4yte+/N3vf/d74xMrYaxHszmEQg+gQr+usRrWajRaDfJ0c6oy8o4yDYQSEF6G5GYRapIiMM1hjQY85T5wBkRxFBK1f/GXYEI+6xnP/o2//cynf7+VRBOz8wNs274Ve3btwytf+Wt44hOfAimS8BxcfNDt2bNn+4c+/OE/++xnPneFtWX3/+9xtMbHRj//6c881QuHue4MpGQ4/fST0Wq1YKzB8ccfjyhSuH/nztn3vOe9/7QwPze/vJ1bXstreS2v5fWwgHfN+Ep855tX+xNPO3ndn//lnz9q1apVVYkunKfOQ2IYaMPFQ52HeIgahiOTkzh44BBWrx0/9J3vfn/vVVd/r2gmUeviSy6M1q/bMP0vX/2HGw4fPPjTTre3p9Pt7c5LPbtq1QS0LjE3PYNBvwNnLNauWQfBPfbv3Y9Iqc3HH3v8qRbAcVuOZc1GE6EqlLyrHrQhhIPTFhOrJhAltKE7dP8kvnftD+68b+fOHWvWbwATwKGDhyiEJFIwISQpjRNIpaAN1e4ISR64hc4CrDEQwXfLuQibZgZ4B+ttqGgKSbCcQ3EFzzwBX0+gg0KKaCOqyxJFkQGOJHjeklTPBZBYox/G6hAQCkta3OwhsHqLXkIGMFcDI6ooqgCHRVkSOAcjL52QnAJtEECiC92qMqpDxay38AWx0VRFFAHgIVmVwGOz0YRSCgvz82iYJvq9DvrdHiYmVqHX72Hzxk3HPP7SS2l64kI/bDU8eRi8iNAjTNJq+pNtd23bJoToCSExyHKUZYmhoTa0LkG1oVS/VBYlBJeQXAHh2gBf7OKVQhJ77gihcMaDx5ACch4IditQKYSovbcPArNL//uhfv8AeXbNkj4QBf+sAKzab7oIIit2mIcKJgJNFDhmnYXzDtqZkCILWOiQuM6pCxkUAOSMJym4oJofSrl2mJ+bQ3u0jQsuPO8YOgYTUqod8kGBJEnRiBuL8ns8oEk5KEGW2g0OHTm0ozT5DikEirzAyvEVmJvroNPtQAYQV+oSxhlwJojBdbb+zpxxqg8LFVqec3BBnmRnXWC+KdKpei+ccxjjoEtN6gfBYZ2HlAB3LNzXxM4Zp2EcJxApSLkx0+3grLPPGT373HPXdTtdKBWDyQjOW6g4Ql6UVFXFBXzoZKbBk8NrXv3r6HZ76aq1K59ywnHHfXPHfffd32hwRFGENE1IfQDAmDL4ri0iJlCE4QxnDExxOGshBUcUpTDawITPlVXam3COpSBpNeMCUSTBOUOZD2CsQV4MEBcqyJs5JlavxuThw1O/87u/88HvXnPNI1qt9hpStahwrhfF/H5JgroQAv3uAEISABXhOfTExz/+sX/whx949e+/413vXrV6NfI8R54VdXCZjBQlHhclDTucRWt8CHmW4cCB/RgeGcbEypXYvXsnXnL55S95yYte9HgAmJqdwsrxibrPlYGhqn6vq9WCdD7L+7hr21a0R4fv/NEN1/+TtWUh5DBmZ+cwMjSEwXyBVkOGQQHJkfvdHjwDkjihwDBPCe9aawgmA7NMYWlcpJBShgDGUA3FAOscfNUR/Qu8okbSftvv/+6b3v17734LY2zkrru2w8FjdnYOv/Xbb8KmLZvq69t5DxG6qL/+9Su/8frXvebth48c3v5Xn/rUf8mxXHjuOY99wWUvOBcANm/YjN17d2P/gcPYuG4T+r1eUDIA2+7aerMx+Y+Wt3LLa3ktr+W1vH4m4GWcIS/1yBMf/6RLVq1atQoASl1gZnoWY+PjiLgK7AULXBKtA7v3ozvoYd/+A5idnp2PknjHVVddvXX33p0HnDUHmJIdMB5NHR6knPHMuOvvObj/wG0HD+wrhIrQarZhyxL79u7G5KFDKIzFBeefQ5K03gCOAVPTh/GMZz7rEatXrZ7oLCwgUjGkkCGMB6HLl1I56ReqzqlWMSj9tru2/Xh+fnZhbGwFXKGRxHHdd0n9ttTj2ektoJE00Gq2MRgMUOog8WOcwLT3EKg2WA4yUmBQEEKhKDJ4byElbZQAT6Ai0G/OeHinISPy8DLGAO6hraadGxFVwaMI6ox1FOoluCCfZgD2CHUwQhBQNdYtgcGLKdVVawxjjJhdxkKYWOCGhagTSr0FYpXQBtmUiCIV/LsBNHoGazziRFJYy4BSgKMm9fF655HGCcbHVsCUFkmSYNfu+3HOOeecefzxWzbRIZE/9kHA8CGWD5v9at2/c9f9U1NTaDUbYIxqiiiR2qDfH6DRaMAzB1MYeMED0CF/oAt9wlIqAn/BG1ptlF2pjzqWxQ5o1IyhELIeYDx0WfDDoHf/c3zdQ/3dA5nium5raUgcqw3QnLMw/GDEXHkbWEEbKpgMpBJgnPz1IpKwxkEXJZSipN7hkWHMLyyEHmOPodFh5NMFskG2qgKzXFTS8GrIE8KNwGtWEQhpukEFAAA+BE199R+/dvvu3XsmkyhBWWj0+wOUuoDgDN5Rx7XmFlJRT64xJqQpy1rabCv/LQB4CxdAZiUMQNWxHKqlvPP1sKkKLHPWw4buWyEJrDrn4Eug1RqC5BJlqZGEarNNx2xa94gzHrGp1+lhdEUUZMWA5BxKCXDBYIyDt5SM7TkNR1QcYYi38enPfOYpn/vrv37iq1/zmvuTNIEJzLIOwNYGsOScQ1mU4fgRBhg0zPN1VgJZJrj0td+WewokI7+2AxOA9Qa2RMgeEGAcGGQZmo0WyrJEkgisWrMOP7nhJz/604997LPvfc9736uUqn3OlcpisUGa/mx4qI2syMAYQxIlsNbDOItYSbz+9b/x0n/6ylf/5Z5t229K0wYW5jtoNBPqE5cCUkhwXqDZbKHTmUM2yGGtxcjIEDjjmJ+fw7p160581zvf9SoAYmZ2DlGcQgQ5cyWhrYc+qFRIqGUQp55yavmP//SVf9l1386to6OjpATwHr1el55vms5vo9GA1gZFWYS+YIssG0AIRZLnPIPzlLyslILiVDvlQyhjxSx77+G0w5L49F/I1UiaQ699/Rve+ba3/N5vttqNxvTkNL785S/hoksuwmMf91i0Wy16nhrqhg4Db/fXn/3cF17/+te93Vgz+V91LEPtdvSpT//V8wG05hc68MagLEqMDI0AAAaDAYaH2wCA71/7g2tnZmbnlrdyy2t5La/ltbx+JuDtDvpDq9atOntkfOz8QwcOY2RFG1obJGmKOFoEj928i/t33O+bacNm/cJ/81++pX90w4/z2dmZOxnDNy38ddkgn1m7fnWTMWXiKO52Op3ezvvvXbj//p1m9ZpVUCpFVmhEDjg0fxBr1q/C/FwfzVYLJ2/ciDhqYGp6mtgXITE2NoqzH3X22VwKJHGCOI5hK/9lCHeqeGYW5JxgHsZa6FzjyOHDh++8844fKZWgLHP0+xmSmGSwWhsURYGyLGuPYX8wgOSSJMneQaqk7pJkYLDWwBhNCcrWkIzOZLDhz6yxMIZqErynfkbmgtzUWXjjKVgqVH3UuMo7cKHAvIdlDjxsXDknlkmH1NkKA5HM0dUdnb4OTqE0VQ9LEtiqN9ksoifnqFKJodrok/9VKaobIoBLdUYi+AGFFHDewDmDzkIGKSWajSYajQZyXaLVbsF5i36/D6VilHmOMi+wZfPGSypoa7mvsP0S2HY0pVpXVoVBwfzcPDy4nZ6ZuktKHhgrDSEFioKqkZx3yIuCWLBI0XXhHUnNa+BMcmSjTQC7BIrhKVW8Dq8K58YH9peSsclrWjGoi7vsnxPk/jx/91BAt/qlCoQRJBumxGlfJ9R678C4JH+rr3pIw2dmQpVNTDVX9H0IvBd5hqSRot1sIstydOY7EIIjTVP0swGssSiybGhsxeh6AGQZCMF0LCR7McYoTTmwgZwJFEWOLM8wNDRELJp3VTUqbr35lp/ossDKlSuRZzm6nR7AyR+ZZRmEkiRPBaO09KDAMN7UMN9qWzOPdEIWe5M5QtpysARU4Nbb4DNEqC2SCKm7gmTdAJigdN6834d1wNDwMNJGFD4Xd6y2emRkfAWkJJk4B0dpS0roZRLz3T5aSYKYR0tCnyw6WQ9jahSjo2OPB/BpzgUyXYDBIYoUjDYhFdgtXiLBZ+ychQ2pxtZaDLJB8DH7uk/aG0qmFuAQXEJJRoM0CxjjICOBZrOJwSDDIBugKDRaQw04Z9FqNjCxajU+9KGPfvbiiy86+3GXPuEZWmtEkQKWqkkeMKcSQqA36IMzgUgqeM/g4ZAm6eZXvebVr3zjb7zhllUTEy5SEkVOCdzGGhRZAecd5mZmICXHyOgQet0BrHGIEokDBw7gPe99zytOPuWk0+dnZzF1ZArHH3dc6OoNSo7qWMLPAQrrA3rdPu67fxdu+NGPv/eu3//9LydpCqUi2LKAVCJUsNFzUko672VZkBWCC2hrKYMgNAHQ85eTIiPcWy4MvarhkxQUEuiMwy8y3GVMRu9/93ve/p4PvOstcws9tW/vIdxww09w7qMehYvOv4DArvfQpYGUHFwI5GU5/ZEPf/jTf/SBP/yL/0qwCwAnn3zi+U9/8lMf11/IcOjQIUxNT2Hz5s3YuH49PICVEysRSYVdu3bv+fq//Ot3Pvaxjy3v5JbX8lpey2t5/WzA22o21uzbfWDN7j27iiMzB8pvXX2rv+Sxl8oTthxbbr3r7oP33LN9109/+tN79+zftfeWG28ZbNy4obnl2ONGBt1B1B5pL6xet+q2fXv2XJ8X+XSStP32HfcgGwzgncfw6CjWrV+LPCtxcP9BmrZzjoXSYdWaCczPd9DvZ1izZhUEl5hbWMDGTRsxM30Ec1PTgGcbTzr+hHNpM43a41olclaJzTTxZyAigGGQZWCco1N0b7hr2903Dw0Po9vvU6iVMZifWwAEAdIojsn/Zh0EU5CRhLUMvlwMGTKlIel07RMkWbcUHNYALiTAghM4hiNPr3cOXAlwL2Cch7YmSOHIR8tCqig8yfRsCFFyrgxBYDwEw1A1EJYkU/vAanHOye9HVFrAJDxInT2M8RVKDv5qkoB6xiFCIiyYR38woE2l5GGDScx2ksSwxoIzAsdSKKQppQDPz88jbTQQNSI4S5LhNI6w0F3AyIrhsWdf9txHh/07JUB7VgP3So5Y9QQHbEfEZUBIUijcve3u3Vd/5+o7GmmzZmwV41BhwOAMJUkLRf5iUxpkeV6nggMItTM+hPLwurfYWgKONTvIFocn3vklEvPFA2RVzQ0IlNRfcxQj+3OywD8D+C4mOFMY2dJ+4NpnWQVquSpBnH7PWfiMPQUqOWMQRzHJ9rUJfdIS1mj0+oNQw+OhIFDkWfBYZjj19FOPv/jRFx9Hbz2MKtjiRt97DyboXFSlUkLKGiAAJLFmAJyxHePsTQBgSo0oilAWJZSkfmetDZz1KMqM5MJKQYqI2GtryX5gfei2VnVnMgGuihJFYNps7eHlAhRuBk4+YSXBPEeW5zXLyqUKNocIHBzGlRj0B3Wn8MknnXpauz3EJaMqLCUVvAWKUpMaIzCfSgpYRxeBFGRJyAeZx9AoGx9fubnRbI847+aVFACCp5+RvUJ4hzwraiBbBaxZS4nV1X1oQ8gcsezV+fZgnCPPMwgpKBTPGaQpWTW88zBGQwgGbXI0myvhLVlGWo0WFOMH/+xPP/4XF198yVlRFK011oa6oyXsafjFeQq0a6UsWDokBXBpB6k4fv2Vv/biq6666kfX//C6K4ZabUwdmaG+4JA4HScRolYL3W4H4AzNZhN5nmN2fhrnXvSox7/5zW9+CQDce++9/tjjjmdCCZRlWYfN1RVdnK7xMs8RxRFUFMM6fehvv/C5vyl0sbs9OopskMNYCyEiOKvBOSjx2xoIJmDMoncaAcgLEYaZ4RqXQsG6MOgUKqh9LKoeIm8D2GX+F3MDoFL+5je/+bfe84H3vAmAGh0ewt/+zd/AOYffedtbASB0eDPq+2YMc7Nz977mta9921e/+pUr3/Pud/8Xg2/Wetfv//5LR8dXrBn0cxyzeQs2bNwILiQGRYE8z9ButQAAf//FL1256/57b17exi2vh1pRFKknPfkpEwf27+3deuttC8tnZHktr19ywNvvZ5lS8c6pw9Of+OmPb177kY/+ycKVV35rhjE/vWfXnkPG2ak9O3cvDA8P20arKffv2x8dPHhEGq2F906njbS7d89+7bzDmjWrUOQlikxTKby22LVzL8q8hIoUmo0G8rzA0HALzUaC3bv2IY5jDLVHkKQJ7rv/fkxPTmFi5QoUpcUjzzzrvEc+4swztC5JggssSbZloY+T+jOVoMojY0mKPDc/r7/1b//2b9NTh6fOOvtc9HtdHNh/IIT0MHAmAEFMqGASYAaOAXmWEeMZRXXnJBOy9hJyUbGirJZ2ssAAV8yoB1sE5oxAKwHY4PVjPni+yNtLPkSSWLPak0kAuiKyAHeUf9N7B+dYHZbCGK+rTipkQsylA5cC3tLrS6ngXBn8wSRFFQIAI9kjPIOS1AdqjEVZlHV6aRI3EDcoBTWOYjTbTQq18RSYpST1GO/dfwCPecJjHnnxhRefjMCcijCxWAosq80reZAXveIIG+vWUBPd3sKt01OTewFiONM0QRRF6Pf6MEaHgYUFYwxFVoILYqtdkHFb6wC36D8Eo65Uv6gIPgqNEkMenIdL/KfVufe1hJdY6AelLP+c+96HVHUfBS4WUUbFPlcduKzq3636rL2FcArM83DNkK8zThSsszCFRYkSeV4AoXqHMYYkScEY0O10IFUEcImiKBBFMVorx3H++RecMtymMmvGWeh3rSrIUL8+Ed50XEIwNNtN8kZbX8tRv3TFl7fu2LFj+8TKVcgHOaRScM4iyw2KsgwBQByNZoosy8K97uvOasEFJRgrBXhP6eiOk9/c2vrkCc5gXAhZEqxmBT2jkKc8K4JygpKgrXfQpqSBgBBhcKagpEKns4ANxx7DLrjgwuNnJ2exZvUE+qWGdPT5NBopjLHkhRckixZVYnWwAgy3RxkArF23urViZLi578D++WZrqK7Tcd7B68A4M44oVuRRZq72+NYZCqAKJM/IbgCP8HyxFELGBSIVwzpSOBSmRKk11SQpAmvCcsxMzSBSMZqtJsqiQBKnuOmm267+8pe/9JlfffmvvUdW5kwsgkHng1SdMTgAkVIwZsnzhzOUpUYcqdHffsNvveqqK6+6NpbxwfFVK6g72QPaWAghkKYJOr0OpqZmsGpiAiPJEA4dPoAX/8pLnt9utTZqq3HMcceydnuIBmlSEovvQ9+tC1YFHzrKGRDHUl//4x99dXZu7poNmzaj1+khK3JEkUIaN2ANBd1xIZGXOTzzaLVb8M4jzwcQUlGYWJ4FKTcLYWcanHNEKqYKLF51FpBygPmQZ/ELSvGecc6ZL3zdG1/7JgDp3MwCPvD+9+Os88/Cy17y0nqYZjUNbhljmJ6a2fr85z7/jf9+3Q/+/b/6WFpD7RW/9ea3/s6b3/LmlwNA0qAAvAQKYDRgWpjvYGx4BEcOH9n7pSu+9OX3vPddy7u45XXU2rRlU3Lk4OETXvrSlzz3b//2755y3fXXXicZ/6DxrrN8dpbX8volBrxam8l169cNvvPtq2/5wt99oZRSlt+96mqfFRlWrVoLzgVWjK8ICbBROTV1ZDA9NYlG2qBO1bQJGSnEaYTJySnqSQXgrEOeZ3DOI202wDmIeWMMURRhemoWcRphdGwUzjvMdxawcuU4Wq0WikGOqckZnHT8yeeMjo8n3X4GyQNo5BymDGnJLCSjCto8DrI+hlrDsMag2+vs23r31huTtIkD+/ZCSIkoViiKEmPjo8izHGVZUDpxSOl0WpO8mQnyArLQuwsgTVJkRU5MWmlgYOGLAASkIPbJejhYMHAIRSDYOywJV6HuW+p9JIQTRTGF7uiS/jwAGy44eJBgOiEqepuSnVkVTkMdUIsWNh4Y70WwxpgI3rcg6zUEGowOmzfGQ7WNB+X+OCgmCaQyTt5X56nz1JaIoOB9YIFBx9vr9KEigV6vizSOodIYF1zw6Es4WAMPJD0dCJRVw4sa0QXcy2iTxThH1s/x3e9//4aTTjnZ3HLjrUjSBIJT4BHR2xQuFoewLWMtnDWwRte1Id6TLHTxfLBaNuqXVuDWybRLaNYlSHYp8K2qtvzDSZt/PhL3wX+wlCV+UDAWq7uRq+PgjBGj6AHjbH0/MMHgLX0Da0z9noUSsKEuC9YFb7dHHEUYHhmlPmWrIaVC1s9w1hlnnAjQ4IMzTm03FQsffvOgzmJGKgKqilp8E3lW3D89OzMfRwplXhLwVgpZnqHINYSQkEogjhMY62CshrcO1jpwTkoGzhkE58TKhhc1uqyvI2J9QV3g4NDGwMLXjDnnAswzcO/hOQ3LOKNqMB5C4oy1IRyLg5UMLtdjqUpWt1ttGOPJXyzIK73QG6AoSoyMDEMyBjAB64mFjaQCE3R8QIrOQrfodXqF4FFIaKfxT3VPMsFCXRJ1wHL4UDMmKMCrLAFGLJs1AJwLIXr0/qWUEELBhGGOEAK61KFTnHzXcRTDaUqGVlKimbaRM45+v4dcS7z7Xe/5C87kJS972csfr0saUjoXpMMVFRrmcGDA5JFppM0UoyPDsNbUvvtHX/joxz76woue9eObbvj0xo0bMDMzizLXGF85Dm00ZuemkSYNOOtw/HHH447bb8cxx2w54WlPe+aTSAFg0J1bQLvZhookvCeQXQ0NPfOwJYHnpJngEx//5ODAkQM3fumLX/6nuemZzpr1a9BstJBnOZyzWOjMUegUI8uHlFQjZ6wOAVj0HKMwK0E+f059zlT1pcHDzxvyrnti+YMlwgZf6y/aetRFFz3tG1/7p3dsXLdh3fSRafzZn30Mm4/bjBde9ivh2aEp+TulerMd27f99PLLX/7mG2+68b88JIox1vjwxz/6jt9909veBEA468NAcVFaHymFTZs2wgP4ow9/6Iv33rv9J8tbuOVVLcXkpt97x9tfdP311z95757dp27ZtGklALZyZM0jnvrUp/Y3blj36b37DhxePlPLa3n9kgLeLM/yffv251YXaDTT0EuaYHTFKLS28J5jkOXodLpQM/MwTmPjhk3o9Dq0u+YMTADOekQqQWHI4ymFQJ4VaDYbKIsiMCINqrxxDp1uF0wwxHGEXrcLbS0mVq2EsQ6HJw9jZLTdOuW0k88J3Ca0tZCePHpSiTqpkwU2yxoD7hgmj0yi0Wpgz559OxY6nV3Dw23MTS9gfNU44oQ206Up0B900Wg0aWMuWABRDElCHb/W2BAWFTyenOKM4iiBC2CBQq0E+egCi0uhUwheQkaSt4r1ATFWjTiGbDTR7XZRFhrekUSOcdr0isD6lkVJabSMzoIPzJYLx8WDzBSB8eOofICs9gZTCrEl72KQSCIcH4cM/Z48BPtQ3YpzHsZqjI6OwnkLrRnSRowsy9Dr90lO7C3m5mfRag0hjmPqIjYluGAYHhpuXnzxoy8EAGNpc4/FvC3yQxuLQhdIkoTAVI17GbIiR5qm2Ll715ErvvQP/9HvD5A2UgAeRVGAApJIQm10idzY8C9R1zEtrc0QXAQGfbHD9iiwyo4Gbf4otjXIhpd8vYf/T4O3HgRkfw7K96iXfFDhqA8DkojC1nQZ7tUg/+YCDh7GWMBoCClRllQ9BUnXM+f01UWRk1dda1hj0Gw0wAVHr9dHkqQYardw8HCXDQ0Pn1C/Ng8e8sX5RPAFY7ET2DPoELzUTJLFbmUAnfnO9NTUEQwPjQZZOXmjlVSIowhaa+RFjtKUxF7CBVlySF0OJ1OXhsAHGJwzxHgGaT+Fdpnw7y04CHRbRzaEKn0eIZHamQDmHGC8g1AkbTbWAPBotVrYuH7TydMzM5u7/S64kIgbEYyzEEKBMTp3SkiqsylKCMWC5Js+G7pugZnp6clu1p2L0wZarSZ0USDPS/KM+1CTBdSBY/S+w3MBDJILmKoKJ3Rte+fBEM6lMZQW7OhcIMj3EZLIWWAtvSfbQmlL9Ac9rFm9CkeO0GBhdnpu9qc33vDV57/g+Y8f9DI0mg1IpSCYJEtCCM9j4f9WjI1S6rV30GYx3VgphQ+8932vefkrf/XarN/fXgwy8CiCNgZlXmBhvgPOJVavWQWjC8zMzOB5lz3vmZs2bDh2bnYe/awHxkUdQMgeMPRhjJ4fURiY7Nm/e+HI4amfWmu2SikwMzsLKRMkSYJudwEOFlLKxWezRegwLsNzm8F4A2187SGnfm8XhjY0DFmqujB2sUqurkf6BVpnnnve8/7xii+9b+O6DafPz3bwF3/5SWzYvAmvfc1riU0tCiglwgCb4Xvf+c73f+ONb3j79h33/rf03b7i11/1oje+4Y2vNloLoRQNoMN0pfKtW+MhFce2e7bd/4XPf+Er/hftpC+v/7Z11plnX/rTm3/67jPPOutSAFi/Zj3tC7XFps3HpJ/97Gfeee9996497rgTfv+++3ZMLZ+x5bW8fvkWn+/OI9d9DPIMDBy61CiNRqkN8ixDtzuP+dk5DLVaiGKJNFbQxpLssdkIm2iOufl5GG8wPDyMJI0x31tAqYlBzfMc3jPkWQ7rLOYX5tFsNjE2tgJwlABtjcGeXXuhSw0uBLYcf8KpjzznUWdo6xBHEu1mM0jbAvgU9Guv10Ov28EgyzDXWcCdW29HI4px+62337jj7u2dvCgQJRH6vS6KPAO8RW+hCwaObq+LsihgShM2z5TimRcZmKgkyRKMCxS6hLWWGCDBwTiHVBGUiuqNkJAScZzUNTnce0gparAqeQQhFMpSo8jzAL6ItRYheAdL/GkIvrfFdhr6nTGG/GZK1MEt1D9KS3CS7jnnYYypK22spZoXXZZgPvg8LbEVPARaMUEDjDiJ0e100VnokkTSOsSRgnUaKqZKCBVSs6UQiGOSSB48dBjc+ZNPOf7E0wHAMQcTUq7ZUubSAzo3yPs5Bn0KSbKG3q8QApwBc/Ozu6Ymj9zT7S7QeWRAnEbgoVvXhwRmJQUkFwH4iJqVcd4GRpbXrGklS15krZaAXY8HVw/5o5lXko0/dPzy/9nuy9evX58fdvTrMsFqE7vgPJyLJRLrEIrmLHmtOaOUY+9RVxVV3lruASUiNJtNShQOTtWFhQUwALosMTMzg3VrV61at3bNsUAAi+FYeThkzlhdVcOw+PtYSLTTlKS9S87T9MzkPMDQaDaQlRlyXcBqUw/C6Pp1sFZTYBwTkFIRQGEugNCgYvAO1msaboSBFzG4PMjYLawzlG7MXFA8EPj1jCTYkktwMHDPoSLq/GbCI0liMACDQQZtHd7w2791yQtfeNmGRpqgKAeeg4ZSnHEIJiAYx6F9B/GNf/4Gdu/eDSVVAGQOxtgatF1//Q3bjbE2jmN6ZnAJWVd+KSglAuBm0NrAA4iTlFhnb+B5GK5ZQGsDYw08c2GI5RAnCeIkJktFLb1nSOIEUkpkWY5+L4OKiHlmwRc+OTmFsiiRFRmsc7jxJzd/f3524Ybx8XF4BkRSwegS3c4CKVi8oxRqBkRpDCbJWBIpBRFAZZ4VOO+S88989Wte9ea52W5rzfr1aLfb6PV64JLjhBNPxtnnnIVGkuCaa65BHMfHvPZVr7tcSo69B/dhYtUqbNq8qX4vrvKuh+FKWZQodQFwoNPt4rWvft2gETfvmJmZ6aiYQqeKoo+i7CNJE7TbQxBcUCo7XP385pwqugR5OWrptQihbELQvcZqX4kPsu6QA+BRqxh+kZDXk57x9Mu/e/XVHzvx+ONPn5mewQf+4AP+tEecgVe96tXw8NBlgShS4FxCCol/vOKKr//KC174hv8usHvWWWePf+RDf/SaqampIeP8UQO1alTMgnIEAL79b/925fz87J3L27flBQBbthx/+rU/uPZPzzzrrEstHA3/LDVYeHioVGLN+vXqksde+vJnP/eZT14+Y8tref2SAt522oApQiCHI12pYgJlVoArAcE94jhGpBJkgwwMAmVRoshLeNDmUmuDJElQFjkmDx5BmRsMNYbBQRu/9vAIkiTG8PAwOBdQMoJnHkaXmJ2ZRpomGB4ZxorxMXTm57Bn516sWbXmsRs3bhiXgsMFxiUvCwp4WkKbcSYxP9+DMRZRpLBp42b0utngmmu+d93KFSsxMjyMFSvGEKkEgkl4AGXwYvmwAbKeaiV4YHI5E0s2rBKScZiiRJqkIZEzdJk6D12nyfogWwacJZZFKurkZaEOSEgRUnItiiIPrBTqug0hOLyjqiDnHKQUtT/MA4tMTeWHrSpEsCgRdjWgQ82kUWK0hfOWJODMg0cMPKRhI/gbRQCA1pgQgOsDg+agy4LSmZstSCEhpETSSOi9M448yxBFMUpT4gUveO7pmzduWK0Dq1gdm7bUDwuQvNZ5j14/g/fktTXGwBpb57/svH/XNmNdt9lqQijy5lrjarksYwj+XAHBFSkLuAyy8OAN9tSJTCFjgpjswPTWPbFB7s0YfjZz+0CPrscDKOKHx7MP/mMfvh178Pf29NmR5zgw42EjmOcFirwAQ9UDGoK4QhiXCBeUMRYIAw8bzgfxnj74Zz2yLEeaUB0V+RsFwCz6vS4aSXPFujXr11fHypivc7IILAF5oWswslSJzRirvdjVmu/M7+aCwcPCaUvgOFXw1lFac5CJShlB8CBjtfSanDMIQdemjBTgq95dgAsBpVS49onJU0LVjC5nHHESE8MXPnPnKbjIegfBJYy1KEsDXRiUWqPZbEJKhaQRYeXE6FkAkKQNGKdZnmeIhIBzwEKnDyEl7t15H6659ntot6kqhbp9aQhVyXx379l9Bw2JyH9eFDnJdV1QiwgR0t4FmmkbRmuURUaqTk/3J0A1bEpGBH5d8HKDwWoK3mMc4JJSva3zKMsSRZEjViqANw8dnt86L7Aw34UJw6x169fi5pvvuPedv/vODwPYzxzH4YOHveICUZLWbDHqKijKTyBRgYU3FkrJOjr/8pf/6gtPPuW05w/6PbQbDbTbQ4iTBuJYIY4UktCX/opX/NqLL3nMRWdaeIyNjWHQ6cMZRwCH+VoxA0/s7MJCB4lKMTszj3/48j+ZK674hzuuvPLKH0qpwIVCpBQU55BcQckIaZzCWgfBOExBtXGNNA3p3jbkHXAIHu4pzuuBGjHobFGsQUmJkIzCwagHmf3CZFadcdppZ3/i43/y1hWjI5s6c11893tX45nPfga77PmXQYgK8MvQZw186q8+8w8v/7VXv2VmYe6e/65j2rh5w6pWq7Vp9fgEkpgUFI4CLeqfQ7rQMKXBvffdd8dnPvc3X17eui2vsK9I3vTW3/6N4eGhM7Uu4U0YXDFGieJcAMYjPD7j8ZHxs5bP2vJaXr+kgNcBSOIUggt0FhaAMAEvTUE1PM7COYvZ+WlIJeEZR38wQL8/wEJnAaUpoa1Gq9Wkqh0GLMwtwBpiHwZZhpHhESzM99DtdiEjCc8YlFIAY1gxNoZmsw0P4ODBg9i3dy/aw62hZz/nWU+KlMT9O3di8vAU8iLHzNxsCKih7YcxFvMLXURxAiUlvGFYtWoN9u7fu2vr1q13O2eQZQWKskS/30OpNZI4rTfoSso6vZY8rhyRipCmaajkAcoyR5YP4JxFGTpbtSGpseQCIvS+SqnggrS6qr+wNvhcw8acg1GPYUiErS2sPFQqYTG12Icf+pV0d6ksN00bBGqsBcDrB3wVcAMGOGfBwBBFMURIheaChwoRQtC0YbYoipKk25KHzSxV+EglICSxzyqKIaMInHP0+gMUeYFIEaM9yDLISGCQ9ZEmMQRnI9pSAm8FOgBAVLLKAPaGRtpYsXIEjVYKFSvEiVqUGwP4wQ9+eIfRBTjjKAuNoigpXTdIO40xtX9b65JY3SA9FEKiMrVWHs+KNceDcOsi+K3lyv8bAVT/Kbp92K/zD4+rfR2dBTgsBrZVPsKaFga0MzDeEkCoBgEVUKg8iIxRZyvncNYjy7N6Q8CDBzRtphgeHkWkIqwcHx8fWzG6oobzYTBQvXaVTEuu9KNZ8mrAUf1+253b7tl65x13OeswP9+BiuLAQDMY7+CcDWysD5Vb5AGuaoloPkG+aWcNBJck1Q7PAOMsJa0HibfnnpTLQlFCsKWwORbk7ZwRQy4Eee2dtYiiCK1WC5xRGnA+yFD0stF2q3UsAVWBdqtd9Y8C3mNoqAXvgampSaxevRLr1q8Jf8VqzzEA7Nh+//wtt916FxcKQpDX2DsatEmlKKHdOGJfGVCWBdKkiWazBVdViDHqEibVAo5KOWecPP1l8PnaIG8WnIV7gmwMIqJ0aCZ4AJMUvBXFCs56zM7NgQuGL1zxhW+8/Xfe/heNRmLaw23W6XYRKUVDwuqadXRPxUohlhKDLMfUzFyQHHPM93pYs2Zi5NN/9cnfHG62z+10OhgbG4azLihHOsjyAitXrT7u8stffBnCdT4xMYG0kYJLFgLkQthfuPZLU4JzjrgZQcUS46tWljfffttNkzOH9kSRomorAJ1eF8bRs216ZgZlWQQ/uIA2hirKgnSescpGosAYecSrZ4k2ZvGaZ7wOByyNpiFi1T39C2DhbaTNVY94xFm/ds/WHY/cvWsPvvj3X8C2u7fjwvMvDNdtyEEIH/FnPvPXX3nLm3/n98tisPu/87hGhoaKrbffuT2KYoTSAHBO97YPvdMqVjDeZK//jTd+avvdd9+0vHVbXgBwwfkXPOk1r3rV8+j6JVuYIIEdZVSEjBXnSCF06qmnDS+fteW1vH5JAW9v0Ee310GWDRBFxPZ1+z0oGUMwCnkxRkOXBazV8I76Z+MoQjNtgnMOo0sMBgNQIb0MnjxKYm0NNbGwMAdI8kFFUUSTZEb1QYXR2LV7F+CAdevWoV8UOOXEUy+9+KLHPOrQwWncdcddfuXKFZBxhDUTa6iGJBy80QalLjCxagytoRbWrF8NYwyu+cH3fwrOjkhJTEKR57X0ryiKkMgqoaIYzjlYrUP/okE2yCggJvQzSs4RxxH1dXoHz8PG31pkRYYoISDoA0j1jkAV+WA9IpmAMQEhVA2uKjmtQ6jJMCZ0AUvwkEgKxpekvjJibwJbaQNorlhKv0RSK5WiZNwQqkRpxQS6qaaVEYB25INUURQYQgajNax1SNIUkVLEXhtHLLeSgGPodbskE5IS2SAD4BHFClxyZFmOJIqx0FsYy/Kc9rCWVAMu9BHX/VLwARSIuo+4AkpxFME776ZnJm/jMqJKFc4RRRFURJUw8K6WizvmYRECveRiVy4PvSqVn9c5YpjZohvvQezs0r85KjyK4T/17LKfO7iG1V/N8IDXCIymD9dQ1b7sH3ioAdRWXaHe0mbVBnCDAEWl5IijFNZaCA5IIQFPQTsUbFRSz7MHOvMLJKVtJjj2+OO3tIeGhHeVrDQcW8XeMiCJIkhGmdWs8sdWrDkjpnNuag5//slPXnXP9h3b0jTF0HAbzjtkWY4iL0g9YGiYQX7y8BkxUpZUHbRVBZfRBOC4FPU96ayt2fDSlHCGvOi8VmtY5FkWanFiYrNDgJH3FowzaFOiNEXwenqUtsAZZ5xxznBraHOeF+h2BmCeQ0iFwhhwyRFHCr2FeWSDPlatXE3srl8MOJuZnQMA3HzzTfft2LHjzpGRYeRZGaR2QHehCxFSxb0DTGFQ5AW0LRE3FaQK6b9Btk3ntVJvBMkn/ab29FYSYM6CoiT42bXWIZeAIYkSxCqmvICaRRUwpUW71UCzOYyPffKTn//mt751bbPZhHF0jhkQ0t7DUK1WlAAjI20MjbSQlyViqdBuJACA0884/ewLz7v4dyYPzm6en1tAnEhESQRjSU79spde/iuPetTZZ2aDAs7R9RnFMYxzWOh24R0Nqqyj3ALjNIaGqJZm+/3348wzHulXDI/sJvYbsNpgMBgEabun4CrrSAGiJGSkIDmHtiWM1bBLwudcALDV++NVWHUYSnJBKeWeecqtCJ3Pi0/g/3fXeedfOPZHf/yRd/79FV98xYqxFex9734HVqwcxXve9z5EkUI2GCDPCnjGIJXAD6697rtvf+d735fnnV3/3ce29Y57pv7u7/7+dgYKtuz2ejDa0MAULHQoA1dd9e1vf//aa/9pedu2vMJeYeQDf/iBVyZxMlEUJVmdQv4Bq/JdQJkkRChA/+C67y/XWC2v5fXLCnhNWcI7CymJpYzjhNhHzmoWJklTRFGMOEkBzmBtDg+DUpd1mq8uC3DPUBYFojiCdRa9QQ/eWCzMzyNJUmR5jumpGQwGfSzMzyFNI7RH2nBw0LbE+PhKWFvi9DNOPX9kqN1OGgnOOecc5hiBUjh3FDiKkwibN62vmbI4irB/397i3h333ZANMm2sQTYoUOQ58qKAcxbWO1hrKBDKeWJOAnskJW22nLWwVsM6AxErpM02pIqRJA244J+NoiQETQHeWmhdUIiMYIAA0kYCxkGsGgSco5AmMBe6cC3gHCTjtMlmi6yYcy54o4mhZcHfiMBEEnMcWJ+QW2WD7NtZT/JCUNqx0fTnJFnlQSLNaubIGVeDLC454B1MqVEWBYQQi5UwWqM/6CFtNIgtkxzWe6hEIUkUFIsghQBTqvnKV77qjKHmELQ1EJzR5puHPtnKl+f8okyxBqUVlchw38777tpx7z33qOBz9ACM0bClJvZKSKRpCs4EBGOIIgWlosXvU39fYhAr3y3nPDBVi0zoQwLcpXQrexjM+qAv/fm3vWzpN3lQ3a+vWelKUsmOAsqLDL13FOpSDafoqziqsCfGyMtLlTUUDuWZD8nrlFDMRABE1mHVygnAMaxZu+ZkgMHUIUksbCJYLZMvtQ6fJ2A19f4yzmrGV4Te28Ggd/P8/Nyg0WwhjlIw70k1EPzvSimkaUJ1T54YaMbJp+3CfWKtCVJ9Yii9p2FQHKm6qowHpg6M7kljDVD1t4ZTbYwJvbwh3Cn4351zyAYZOGOIY6pDefzjn/DYE086eQQADZFCxZKSEvDA9nvuwd69e5EkCueeczYO7D2CI4enIMPXHdi3vwrjOlgWWTdNUzAeasBA50CXGoUu4bwJlgcFLjgW5hYwNztHScHVdezJ0e/pQq5j2iqWkXMByRV1xxoX5P/03IiiJNwTxFxSRRWHKR1cCbQabUhJDOnGTeshOJv81F/+5acBDMZXrABYqIUTYZTiySJRCfOd90jjBEkcoT/o1df05NQk3v3Bd1/2rg/8/ssmp4+gPxggHxSYnZ/D8PjYaW9521teWJYaW+/cirLMIRiDccHaAAbGifUvC40sK8AhoKIIn/jEX+CbV14Jo01+xx2376vZfl1i/YZ1iKMY2hSIUgmpFJqtJpI0oXMSrCjee0jJ4WyQZhsLJQWSNA0J+8Gq4ln9PKm8u/CU4qxUVIeE/b+8jj3uhNe96U1v+E0AjZNOOh5DIyNYv2Ejtt1zD/bu3gfjPLgSUFLg9ju2/uQ5z3vWW+dmDm77v3FsN93y04Wx8fHrAMyVukSUxCi0hjEORlvEicKevXt3vvnNb/kTp4v55W3b8gKApz/l6Y+99DGPezpACd5SCdoleQ/BaN+BqsqMAdd+/7vXf/GLX/rW8plbXsvrlxTwCiERJw04BnT7ffT6A/J/aYN+L4P1Do1mA845DAY51dqEpNg6tCaEtHCIEMTiEMcRrNFY6MzBeYd8QMm7kZJot1toNBsYGxnDoJfDlA5xnGBqcgppEovjTzp2i3YWjUaMdevXgHNJMkbOFytsnIdni+DGOY+8LOE49t977/ZbrKV6kPmFBbRbLQyPtGmDFiSvnnlkgwHJphhVIBhrQ7qpXJRWGqDb6UIXJUToAjbe1OEnLtSDRCqmxFYpoaKI5G7WwFtd+2CXAqqqW5VemlMgjHWIwmbaG2IObEgRlVICnEMoRXJP74K3zYeqo7Bx9ybIoisURcfHOKcqDmNgrYaxJawzJG/kEjAA88R6aWMAxoPsnBJgWfAkG2MgGEOapGg2mpiZmkGZl4hVhO58BxMrJ07cvOmYswiEk6SIpIFUJSMQlMaMWEnUVTu0sa2SVP/m81+4cvu2ew5XYWV5nmPQ69MmVXFkeYFBVtCAwDh461DqEkYTMKoCquqTXtUJBQ/nUfD0IX25OFp57H/G1/1vM7w/e1EYl6/F3/WR+sUDqQK2KOiMrsWqdsdZV6fyElA0sMbQJt+ZuvopzzLo4Df13iNNGmg0m9BG842bjjmhelfWUeBYqUt0u/26mqiKEnLewzIHJhbTaj2o/khJUe66f+feKtV8fnYOcZySD50BIlJ13Y2QikCuNyg1DaWqWhJqj1msKHGO1BrWUsiZ85Q0TIw0SFXBOTj3YJLCm8AYJSkLUfuftbEwRocu10YtlT/5xNOHN6zffOb+vQfABSCURCxJfswAOGPRbrYwOjIMgGPlyglEsUQjJbDsrcOGDRuhlML8zGxn8ZJhKAsdatJiCCGgJHnijbVwzNUAXoZnAcK9ThJpku9brQMr6Rf95yHZms6Bq3MBqF5Nk4LDEPNP2QUG2moUZYlOZwFalyjLEgsL81gxvgLf/va3r7riiiu+Scw1qQJ40K37KkiILR3IAHk+QLfTqdmVVruNNWtX4ZWvfOkr1q5Z88i5+TmkrRj79+/Fr7zwec9dt3rtGcwzTKxcDSVkrSKIVIShNjG5LKhsojAYKbIBJo8cwkteeDm8xJ6puek97fYwHPModUnKAQBKKBqAwJHyYUnKehSRD9paStdXKiR/e8B7W3veGQOkDPJ7beAqIB46qblYUlT8/+Bau2aNeMlLX3r5O97xe29AiDs/fGQSL3rp5TjvvHMxeWQSSSNBu9VErBQmp4/seMmLX/C2+bnZO/5vHuf3//271/zRh/74j+64/Y6bJVgxNzsFJoEoloDHwh988AN/unvXrh8vb9mWV7We9ZznPFcIrrz1oVbMHRX4aB2FHQZrSeevP/e3fz09ObVn+cwtr+X1Swp4eehulYISR21IQ3XewrgSQnJ0O12AU6dpf9CDUhGSJEUcR8ET6BDFMUZGx6CkQn/QR14UxCpFCYRSkBEDF5SCzDhDlmusXDmBoaE2Nmxch3YzxR13bcXoxMSKc847e0s36yLLS1jnkMQReRFL8uPZkLJrjEG31wMYgzYGBw8ewF13b7399ttu2zY8PATOBdrNBuI0hRQSuiypIkkE766U1LcZOjgB8s9R+I2CVAplUdTlo1k2QBRH1H/pLBg8sn4G5wEuJQpN3b4+bKKqyh0K3RGIogiMSSiVQHCFikEzztSbVx+YTx/CharNPf37mDZaztfp2BwkaSUfMoEiFSkopUJQzxJPaOhslUKSnxc+sPiOakBkVF8YUkkgpLQqoajuxVpYY6GNRZ4VkII2omVJbA+8xQXnnXfKxg0b11cMHwOQFxmyPIPWFkWpwQAYQyyTD+DNWQetNaQS2LHjvvnP/83ffjttNFFojTzPoaREe3gIcRKTRFFQ3zNHFWwSNvt1mBkLDN6i97ViYfzPEzb18Lj25/ra/7Ptb2BwGQPjWEySxuJGvQIA1ZdzxuHBYawNAVbBnyoFVKQgJIe2GsZZRHGM1hAFK/X7fcRphDLPoUuNNE2RpDFuu+M2lGWRbNmyuTKkhuMA8qJAt9cNklmGSKkwzPHk3w9VPJyhVg54wQa5NgdWrFhBPdhljkJT4J02BYwpQF578mYzXnWdEkPJGIOMKAG4UkXQtSXDZ+9CwJsEFyFoqE7kpnvHaQPmGWKZ0FAghG4JoTDUbCFNGrDWkL8WHrNzC+BcDZ991qM2bjpmA5x3KMr8qE+Jc46x0XH0+wP0un3EaQzHHCUVe+r4HRkeAgCMjY9OMggM+n16zghiMel5SMFfQsg6gMq7wPBXxdQ8pCOz8GuoI6pk7fB0rYAD1pkQJEc1QlxQbzcLm0BeJ3w7yEhCxhRUpo2GNpQOXZRF6DJmg4989COfW+gsHFSSoROSmhkLXuhKaWBRT0CSJMWq1WthtMH07AyiKEJnoYc1q9ZuedrTnvGrutTMaIMtmzcf/4ZXv/4FALDQ7WFs5QqoiBLsjbFggkHbECYoFruzAeDa/7gOz7vsBTjhhC3427/5++/MznT2qzghtYCUmJudJ/WCkihzGgyUeYGy1BCSwxgHKRWiOCJgHtQtVGFliP32oHqiwKCzJV5fJng9yCvLkBvA/99keE899bQL3va2t/726aeevLbX6/rvfv/7aDSbuPD8ixCpGJc+9jFYtWoC/cEABw7uufvNb33Tu++6a9t1/7eP8/r/+OH8O9/+jj959Wte85yLL7z41778hX/6pgB38Fh4w+t/86Of+9zffGl5u7a8qrVuw4YTL3nsxRdXPxe5CAGOYARwGYKKSKEz3/Xvfte7Pn311d/55+Uzt7yW1y/vksaVgPVgXoX9P6UEe88QxSpM6hk4FzC6hBIKWX9AslhPrI1SEt47TE9PwVpKSo3jmEIDGEezlaLMNUbHRiGVQpblxAA7i/7g/2PvvOM0K8vzfz3ltLdNL7uzs71QloWlN1GkIyCKDRR7EmNvMYmJ0SSa8ktUsCtEghQFFKyAIFV6B2EX2F229+nzllOe8vvjfs6ZWYoVJclnjp+V3SlvOe197vu67u/VQLPRRORiQfZbvmLFIQcevizLDIZ3DyEMJILAh2UC3HPKrnELkUwjjlNUysDY6Ch27tylHnr44Qc4Yw0YsjzrjKPeqBORtlxGkrSgTAYufFKmXedfK+UiRYi+aVyUUE6ATdMUxhIMybpZWqMs/CCkrNo0c5mOtKAqlcuwWqOZthBFIaBJZRFCEi3UGJTLZVKNnSKVpQkBWXwPiUqK3N4soxzjcrlCc2bWQoLmEL3Qg8oUNEi9FoIsjbCWrI3GQjtgQz6fCJtbMz0qmZ0yqJWCBYOxCtoCvgyRJRpSCvjSnyLLWkaqh6GYDp1lCCKyYkZBOJgv/SgyxiIMQ+RALuYyLjkn2zdnHODGRQfR64qT1nCWZRsEFxCCIU0MuB8WVtJUZC67lKzcbNoMLIMrmJjcIyM2JzFrbfZQe59TmT4rN5fh13//uUWvfQGt9/m90dNt0Pnrtc7GWqjeKMaSC2UydzdYlscSOUq4Jvt2lmTgjI65J6lgpILGzbrGKcrVEsIgQKVScTnUwODgXFirgzTJylP7lCzo1XIFtUr1OfHFUnBI4btCjGZ8Jycnba2txnbtGtq4a/fQkNIaExMT8ISHSqWM+mQdggskcQIhPAR+hCxNCuWXWSrsPU9CeJRJbY2rqwzlwVqWP5+BkIJM3ELAkx4y16ARTAKCRgpyGzMpkgaZSt01KSCED8EZ0cBDiXIl6CuV/F4AaNQb5HZwRzZTGkZZTEyO4cmnVqGrqwNSEJE9cDA6ZQwCT2JseNxeddUPnghDj+zkxiL0A5pHVmQJNtZCwEIKyty1QjollpoNxtGk83OWOTt+/v7z+fw8eze3wRtjkMYpFWqehNIxpDuPPM9H6AdoxQ0a3ZB0XeuMosrGsjFUy1U89uhjN573pfO+/g9//6nPeJ4nsiyDF3jF8wJkc57Sr6mhoK3FZH0ClXIZlbYKjLb4+Ec/+qZNm9c/eMPPr7v0b//6k68emD17v1tuuxXz5y603d3tTGsa3KD5appT1srCkwxKGQSBB601fvLjn6JW7dRbN2/58bU/+cllzBrTmBxz9xjaB1maQSly0GhHfUvSFjlqGEMcx5g+IpLECbTRU9eXMZQ9bSwkl/A8z0WdUdYxWVEYYPJZwf95Cm9/b1/XO971jrcceMDKQwBgw+bNrLe/D/PmDqLVSqBVilIpAhcSN99862P/8OlPvf/hBx/85Uv5mp9avWoLgMt7enrvWbZi2dV33nnX+Ncv+MbN1tqJmeXazJZvb3/3W0/ca9myBXmzz04PiAeRvZXK4Ps+7r3/7hs++7nPfd5aG/8pXttfvPvP3l+vN0s33nTjTbC2OTo2+kymVDJz1Ga2me0lLni1UUAGKKvh+T5BYzTNkErhuxm0BFIKBL5fKBKeJDuYDAKyEioCm5TLZTDO0WjUEQS0oDJGw5cBpOQIfR/1yQa6u9sgPeqyZ2mGRqMFHSeY2zvwClhUBSeCKOfSzVu6GUJhoTODuJVB+h66ukI0my0YbTE4MJCse3rN0624ha7uHmQqQ73Vcjc/jVpbDWEYoNVqQmUpLQxBdmjP98EcpVJwD57wkaZEoJacQ3hEOG7WG454nBc1BllGikAQBDDWIo0zJK0Y0sUIpVkKAUfDFURUJUq0gB/5aLUSWENZlsooBKUItsUQpwmMpqxSKcn6yWlJ6SJmDJh29lxjCjUwc6oDF0SiVcaAmSlrdJamsIyDMYE4iUlNdIVhKYqgDNmim40WJPNguYKyFNMUBCGEFGir1TA6PIpaezv65vUjjZuYaNRRq9W6p9d4FoBwZFMLAe4oqsJllxhtnYBuifwc+KhUqyOzZvVPrHriccyaPYfgQsag0ajDGioqjDGUZeyK16niFg7SkxbqusnhzC7GibkC8QUL2F9X1Npfr88C7AV+hL3AV6cpuEXuTw5+mgJwUeHpYGfWFNFFFm7m2xU42ugCkMYYoI2lhhGAuNmCNT6k5yHwOXRmUaqVAEMFRabqqNZqEFLySntbmD+GoSehIs3qwtpvXNYr/Yx1zmRHD+dgnDPcdPMvVm3eummiFEUw0KjWanS/cJEv0vPBbG4bpVxgLomunJNacxu+c/q6Y5fnZNNseJaSZZ4LKuzhZt5pv5ECDqsJ2gU3825IBVQOzFaulNBsxVA6w74r9lnueaKrPjkJnRl4khf7lAHwfAEuOFY/9RT6+/rR0dVRzNpSJJSLI9qwbufqJ554jDGGzo52qMxgYnISYRQiTRsI/YCysl1zQzs7rYGh2dG8oHJUZsEkwAjiBEdEJpqxJWeJUxo5404R1gTE0hmE4EQrNRQv1Gy0kGYZpC8BA1JWWYZyFCHLUjCPIyqVcd4Xz/v2YYccevDJJ53yapWqfGqXMpHdGf/smfQoDDCrbzac8Ix6EmPW7P7+j33sIx/8/pXfHzjogENeH2cZFi1ahP7ePpZHLAW+KDLCcziXKfLMgd27duPvPvlJ/c0LL7jmzLNe8y+RX3q8HJZguUGz2aR7a5a5sQaCKBqlC9s8XSsCQpBLhwsCE6apcjR5VrgapBTFsSE6s6Pou3OOC06nmTHPk8390m/v/9D73/w3n/ibtwDANdf8EJZznHrqKc79Y9FsKhrfAZo33njTF17qYnf6tnv3rmcAPHPm6WfgP/7t32ZWajNbsXmeF1703xcdT/dxXfBO7LSP2Jy8PzkxMfIf//75r1lrd72Yr2Fw3lw+PjpuJybG7coDV77pL9/znrNvuukXP9+yefPIlVd+/z8H5swJnn76aWWgW7/85e3XzRkc+Kstm7dumjl6M9vM9hIWvL6MkKkMnuDQOi9mPRitkMYUV1OOaOZOeh6UmwNtJQodHR2QQmB4aJhifJhFo1Wn2TNGkUSVSglWW0RhgJHhEZoBFgyBLzE2OgY/9NDb043Nm7dgcHDOgtececbxtHDjaGuvQudFAEwR9zE8MoIszdDX30s2VqYRVSLoiWxkstFcB8ZyWAwylSH0Q2iuMDY6Bs45oiCCtTEyNwcHTgWltRY6bRaqiIVxGY4KhhnoOCWiKqPFYeD7zlbKIKQHMAFfCAif5pjL5QpkypGlqcsVpPlKYyzKlRLSNIO2pD9mWQzOOJI0RaqUW5RxKlSlD+6IuhZAFJUQlgKMT0wgjWMEYQTpbK6+JOImm5ZhKLgobJNSCGip4Xm+K4y1WxzTSjVTCkopeJ6ELwP4foBW3IIxCh3t7UgzjTTJoJQClwJaWwwNDQNGoa+rB/PnLRhImiksNMJSBKMNNHSRSWqnF42ugOGcIUkSTExMoH9WH376s59tXLNm7WRnVw/iVhNZSgqUlB5URjAiKaSz2nJwS00EJpzwwjkV2TZXc1HYnadbhDE9d/dFWa8+W8X9Df9+1ree+9Km5neLLFDGwC0vZj2tdkqvgxpBMFhGRY7gEkYptOIYUngIw5CKYp2R3dyRaXcM7Ua5XKXiQCtwZkOPyRJcM0gIssJaADo1BCdjU7O12lgIcCRpDMkZPOmjWqH5y8ceeWyVFNJW26oYGx9Dvd4gmrQm4rC2RGaGpggp66K34NwXlMHNCoiXEKR+Gzdvr60psndbcQwLwA8CpHFMc+tagTOy8FOhqGlmVghIZ/tPWgnSJMPI8DiCKIQfBTjiqCMPGpg3yEd2DcEPI1SqVWgDMG7BJVmEZ82ahTNOOwP1egPjo3UwDsRZjFYrxuDAHADA+MTEtiRJN6dJBun50DpBmibgDEiSFOVyCZ7nodFsutnivPALXR63BueisDLnlm0hqBgrMFbaOPWb7pWZ1pTHKyW0UjCMyOqcS6g0o1gqJlAKI1jOHMmUEdjPGJSrVfhhgCzLMD4xuu0TH/vY51cecMDyvr5Zi1SmICTdH6c3mopT2TUFJhp1MAt0dwWIggBZprDXsn0O+tY3L1yyYNGicjkqgXdzWCaQaQNPMqJmM+5AUI68rA2E4KhPjOP2O29Pnlmz4fb77r33fM7Fw0TmTtDd243JyXGYTMPzAxfBljeOBKQUFGcGynf2OAMXRIDX2kU9uWxzzhgMI6YDMQJoBj4viO3UnEhxVf9PK3dPPu2MU6//6Y8/DaDcbDZgoXHgygMQeh6SJAGzDOUymTj+9V//9b++/e1vX/Wl8z8/syKa2f7Hb3vtte/BJ59yyqEAitGfvNENxsCsLQjrF/7XhT+98aYbb36xX8PmjZsMAOy99z6n3XDjjd8dnDOAc8899+QkSbL29o7AWoulS5dKANW9lu79hv1WrFixYMH8V69fv+HpmSM4s81sL83GM6VgjUaSEpCKMUCrjGxyzMWYMIZmi3J3rQEVTm4hNTE5Cc/zaJ7PgY44pLP1ZSiVywjDCGPjYxifmACXArVaFVbTwnlyfAKlqIRZfb046OCDD9hv/+X71uuT4DwXtmxh7SOLr0FnVxd6Z/eBSw6lM4wMj2Hn1h246+57nt66ZcvG3t4+1Jt11BsNtLe1Q3g0z8iceEZzYgqeoBlEbTTiOIaFoQWolJCegB+GYJxTQ0D6kNIDE6xYYHMuae5Uegj8AIFHURyd3R2o1qpoa6uhUqkhiiooVyqoVtvQ3tmNIIwQhBS90YoThG6eOFUJXNwmCRIa8DzKCTbGujgYTrEucQvglOdrjSVYkzaQgmaPwzAorIFRGBZE2iRNC5ox50SklZKiOqw1SFUKz5PgXCBJYiQpzVhaYxBEIYTH0d3VDa3oQ4UAQykyreEH4fy58+fuF5SoQEeRycoxnUvMWK6UUTHFOOD5Hnp6SRzetnnLek8K9HR3IYlTJHGMen0SrVYTxhB8SWkNxp3S6M4PAM5mzxEEQfGecyWVFYWT3VOtfdFWq+x5tVz7fE8yDa6xR9E9LeaUChzAOkWailVdFMGUU2lczJd0hYIrRBicU4MX9nPlbLJJEiPNMnR2d8HAoq1Wg+9JDMyeBd/30NXRPdjT3d0GTLMAM2I/+54sChzuFFaPc3BBMWHKqYy5cr123drHkyxGo9EC4xKJyqC1gpR8yrI87fzIbdE0h0XHUnDh4rZEcRwpl5eEXGY5XRtw+dOMLLvlcsWNKAhIwafivBgV5b70EbdaAGfw/AAMHGEQohyWogXzBxdJzjG0awj1yXqRO0y5xtRI0anC8PbdYIajraOCSrWESqWKjo4OcA5AAdu27dg2WW9MRqUIWmk06g3AAipV4GCI48SpzxZaZwAj9ZVzKqgEly6+ixcz6QbWuReEc5GgaOYwRvuVzidG+09KgpTFMZJWCwBchJeAthpplhUZ39ZaN75BrpGhXTuxz1574VdPrP7lxz/8kX8DkEmPMsN1pqCdmmodyThvYmkAvZ1dCPzAgcIoz7u9rZ2/7e1vbW/r7PQyRVnfbozWHb+pqyavKbmjXj/0wKPqpz/62dq777rzlocfefiO9vZ2SF8iVSl2bN8Oay3CUhlRKaJ7tIPu5TnbSpGzgJoFlLGrNc0vo3AOANKX8D3p7pE0yzs9Ni3/L71nd2241/g/YVu2ZNnAmaef/j4AnQDwxKpVmDN3EPPnzkeSUEyTcSz1W2/55S//6dP//OX65GhzZjk0s/1v2E4//fQTuju7+jOlwBiHdg4u7pxe2tj8fpLc8Itbb7PW1v8Yr2PugrkHXPmDK38yOGcgFyL89vaOsjEW2kFIs5TuLYcfcsRef/u3f/O5maM3s81sL2HBK9ydIQh8ROXIkSoJdqIzN8fEDEUwOFJy6AfwpYfGZB1aKQiPQB60QGFOmTCQXGJo9xBaSQvlShmM0cxesxVjbHIczWYdWZpi3bq12LR5M9qrbXs3G61yo9HcozLIbXtwxarwOIyi+B2tFMZGxjDZqOO22+/coJQaq5ZL0EoRcTjVRf5vuVKGcDEUgefDQDswk1/kVTLBYIWBhkGrWUdjchywjCzQktNsnbYFDbVcqoBzUk7C0AMDofG9QGJ4ZBijY6OwnBZTHIwyfmHRaibwPdqf1gKBT3OuME6JYRxWMwRhCdVq1bkzuYNTMbRaCQCGqFwCwBC6KJXxiTGnjFmXlxzAagPBXGatoRntVquZ45IpusiSXVIICS/wkWVUGCtFoBfGOYaHh5GmCZRWUFqhs6sDvheAaWqSnHDq8Uccf+IJewMAlxxJmjl6MC8il/YAO+WxrQZuoU9d2VartbHZbCBJUoSlCFxSdifNXCt40ofnkxqpFOVpFrOzjEErjWajgSzLaKY1zz7OC7Fcgnp2xu7vkLmL59V27POouXmQDHu+KvgFN+H2GWeM1FiWF3pUEOakYSKFT2UuW5M7osnOygVBlLRSxWvigmjqI8PDaDVbEJ4PpQwmJ+pYvepJHHzYwQf09feU8qZIDlLKN5oLt1O0dDfvXilF8AOf1H/BMTExuWvNmjWPC8YhOUdHRzuqtQrlQHMGzmie1fN9mk3XxsVvOTVT0/2HC+4KQnKXFJmwlrKXwYBMp27MwCJtJTBaoz45SUqwtY7WSedXligkaYpGswEhPHi+Dz/0YGEQRgHmDMzq3rltW8/w8G4Mzp2D3p5uaJ3HW1G2MSP11o1ZaDSaTYyOTiDwPDTrtL7KMoW777x73UR9rFmuVGGNpf3NOYHqHOVd6QzCowaRUQpKZYhbcQFby6O1jKVREw7mLM10nnDBHFWYzgH6OUFwPbcaZGBglqLJ8pEMLjm0KwgJAO3I7zBo1hvYvX03OBeYmJjAwMBc/PwXN3z35huvvRoAslhTQS0J/JQX3fm5KABopZE0WkhbBIxK4sRZ1Tkq5ZIjvpOlOKdJO4utU1EdaE/Tebfy4AP4scce5/X09O8c2rkLaZygrbOGaq1KaqyhUYZ6vY5mq4k4iaEMFfJpkhW2fJnn68LNfrvzwrr3kGXkcmGusYBirh6OKD8tnos6LtNi1V7ajTEWnX7Gme98z1/82XHU3Erw8MMPwRcEJPR9D75Pbo8kVtv+9d/+40tx2lwzsxSa2f43bEFQGjzppJNOLNRduNz6Yk3hyPRguOr7Vz+iMn3fH+u1HHzIwb377bO8AOpZl0lOKWUUoccZg8pc0XvY4cvb2tq6Z47izDazvTSbZCDbG+OisN5qo2GSxIGpOExqKL5GSqhU0YwagCCMaIGlgSxJnaqkwTgtwgOfOu1KK6RZRlmIfoCuzk6kKkUYhQiCEFs3bUVHV1vHsr322nfr9m1sr732gVFkH4yTBNIX8LgHwQWiiFQJLg10ZmAMMGv2LBhlUS2V4snJCVstV6CVhvSJnBz6EamQipQGw2gxrY0FBxGppSdoljHVSLKUigKPsmW1okUTFaccYRgBjHJ/4ySFH9B7IgqrBsDh+RLaWGSpRRCUMD4+iiAI3YKWQFBCUtxSvmDyZYAwCiGEQDOOARc7pK2F9D14QkLpDEmWwA8DGGPRbDahtUIQViGERKvVgtYa5ZJXzF9TprLL/mW5RVAgzRL3YWGhNCm2HBTdwjlHFIUYGx+HH5RQKZeQZQlKpRKajSaUyTAxwQpCa5KlOP64E08BwPKsy0LbLJTeZy/Opv7CnLKTJEnrmbVrnwKAkdFRsneGATxPomWbYAzIMoNWvUlUVQBsWsHHSZJxRTafsq07y3axMGXA88qx04tR9puK019nX36+r/2an7d7eprzZgBVlS432LFxchp3AbayREbmzobPGSeXhSvMwDiYpPgtxgXaSx2IE7Letre1k0IcBQhCH7VaBXsv3etgUtvcrCyn124o7Nbl/dri5Ro4oi2j5ok1GtAWN/7ixie279ixxfNDKG2QxAkyR+YGAJ1lqKcJvMCHNdrRcBms4MjjtIwlaymz1mXK0vnCXaFrYGGUcu/VOqWbCO6MC0jPWfsNQxD6sMaQRd4V/cpo6JhcDNWOKnYPDeOAA1cuPPLIYwYiP8STTz2N3r5+zJkzQBxqN7dsjca6DWuwa2IYJx5yArlbAulyfKm48EKJoeHhXwHkyhifGEMQ+vB8aig1mk3kEVOw5JyhGWxRqJLcXa/5sWY8n0Wle3DqxhymFEbtzg1qtZDizajIc3wG45RqKEPOF24RNxNITzqyu4GFchmzwNbN29HT14s0Fo0vnvfVC484+thjozDqJTXfYmKyjkpUApOCCN2WZowZLLp6uqGMQpIkgAakD3iegFIZ0kwVEUSWWRf55FgNnLsxkCn3xq6hIT5n/uCI+aVZrY2CsQYqVmi24gJalqUZZZ87SzOzxBCAR+eRMQaZyyKGm81lnMNoXRDHCYTHXGwRXafUcyFlP7+X5tF81vzP+DDv6OiRp55y+tvefu5b3gMgWP3E4/j5Ddfjda9/IwbnzAVgaSQh8ACg8d73vv/zP//5j78/swya2f63bG94w+tPefnLjz4UTlwx7r7htIIigxcAvnnBBRtuuvH6jQAwe1Z/MG/BvMBa2McfeyI49NBDejw/KFttZE9vL1Y/+cTY4II5o2tWr5lYterJ1vM998DAINu6dXOxGujr7tkPrvFqDZGi4ZrNDAQBZQyFM+fx1U+NaYbhmaM4s81sL1HBm2UKYRQU9q4oDKG5dDOPKGZOuQAyRcqtMQZhGKEUlVCvN6Ad5CqPbaAVu0KrGaPNRXNwIVAqhUiTDJOTk/B8H0krRbVaRittYe/+pQv2Wb7vfv0Ds9HV3UGzn8YiikI0mnVkOgUTAtpkKFdKzt4oEIQB4lYCy4Dl++8zZpnF+OQkuro7oZXG+HgdSZoi8D2oLHUZwxppmsLzPYoryhSk9FzBSn/nQkwt6K2FVhqlUgUsYo5uGiNNU0gp4Qc+6o0mMqUQlHyMjQ1T5AVnqLWVAZCFUvqesxRLGKtgjEAURaR86AxBFKBaq8LAIlEpSlGESrmC4bFRsnVKiVK5DM4nXJFANsUojBA3Y8oG5hyRHyIMQ8RxWiiC1uWc+pwjzVJYaxB6IQwsMpXlgThFtrA1QJJm8P0QaaYAtOB5HuI4AxhDpVKhghwG1bYqwlL/0v323/9wWoRTvJDniaks3OcpLPMPqOlzgM1mc8fuoaG1gR/Bl25eOlVoNikfmo4FFSzCk8hiAy5FAR/LCavWMFLwi8LavhAo+flE2d9Khf39t1yPtntKyns8v3WlZK5Mo1BU92RBuxgmwR0wyQCS4EQcNPvJPQHP82Fc0dhsNSE5RxiFqDcbqHXWUK3UELcSNNMU3X09A3m3vMh4ZVMFO9vj76ywfFpQVBHjVPA98vCjT8StOG5v70DcbMEoytvWikBy3JOwmQW33M3WesUsfZqmZHkWHEo5Bd+BhzgXU0Z1FyXDDMV4UdMun+uiWVYpSVHWWsPzJNJUQQiJMAjRaDYARoA+oyx0pjF3cP6yBQsW9AFAR3snwogKMu4aDzAA4wJttXaUqxVIF5sWBSEYZwh9ev9jIyOjTz715OOcc/ieB600lMsXFlKgVqnRe7M0kqAtFafGxTHl1w4XwtHVbdEUYGDkRjFTSijnDMyplZRLrGg/cQbtfsaAYssYrLPb0Yy/EBxBGJGDI00hPIFAUtNFSok0TTBrzgBuv/OuOy699JKr/uzP/vx9XFAGsx8Q28Fz9Hd6nRR1B8YgmECpXHKRVXnxOozRkXE0G00csP8KhCW/uB5yblsey7VxwyZcdvklqFQqj1955Q++ed999z3oByHSNMXkxCSMIUp+4PvQUsOXIQQXU9BBQYAxDkMuAhetRIA0DsklEqUp7k1w13si9wucks4Zgy7uksLNGk/FhnG89JbmlYetPPGqH1/1yZIMZgPAnXfchd1DwxicM5fmuLWC55MT6F/+5T8v+/ZF3zz/v779jZlV0Mz2v2Lrm93ffeONvzgbAFduJC4HXjJYWOaaWwD++78vMTt2bV186qtPec/f/90nSxdddOGsXz36uL9oySL5zDMbqrP65/QsnL+oo1Ip1RYsWBjVW+MqRRb7Mlz3la+e9/X3v+/Dz2kENZt7gpbnL1zwCrg1MsEkbeGmyRuWQnAwLjA0PNw474vnfaw+Nm5njuTMNrO9RAUvFaoCnNNCIIlpMea5xaO1QBSFNOdkDbhkMIbiXSYmRpGqzGXWBlBaI3NFJVm9DKJSALQsSmGEpJVASAFjDLq7u2BBZGJrEnS0VQ/s7uxaOnfOIC3YmC0W0mmSgimGiWYdEBbVStX5NhmyVgZPSmQqaV526XcfFIxTIZRk8DwBP6BCsdVowfNIofY8mlllnBQV6UuKFAlDpClZCSUX4L5EY7IBX/jo6eqCMhpZqjA5UYcXyCLn02rqMlptoAwV/76k+d5mfRK1tjbUamXU63VEUYhqqVxkFUsuwEohWrGFlBKTkxMQbuay1WqRUqMyiCB0c2i0vxnjyHSKLFNUmHAO4XJJ0ySFaBOYPWs2LICtWzchTWNEYTlHAbvMUpoDjaKSe2yn3jsLrGVAKYrQmKyDBZQVE/gSStECT3oSYZlmhfffb7/DFyxYsDCJU6g0gRQhLQzZ9CKPPYsPRaAlT0hyBgiBe+++f/32nbt2dnZ3goNDZRkSrcjiyty5wEARL9YQkEyrQr1lriKzToGcKs5+8+eMhXXq5QuIufY3P8KeP8heUBlmzwewmuaQttMkcKs18Ozok+KvHBYaShGRWAoJT0okaUK5rEqDWQYGCZOmsNzCjygOimy+9DsMFkHoQxmFalu1SgovNVByYnAOqpr+Guw08Bd3UDbmaEOtVuvJLMvoevA9F1NFhac2CkwwgHFkKcVmUb4poDKK3mKaoneMMQV4jTsgmTIEbOJGgDNJXX03yyWkAJhFlir4zuqfpQmgBKwGAl8iCP2iGOvo7ECSpahWKigHIbi2CwAwYywG58+DlAxKpQA4BPegtIGKM7S39+Cww/rhhyGyjEBvkxOTiOMmonIZ9973wJpnNjyzvq3WRjnDhhgElDmdgkuy3mVpUtiX6f44BUUie7gsKNz5MWCg+43Ns5gNWb4BAlpxxp2KSVFVfiBgOYe03MHxEggHSiASvYS1GlmawPd8lMolNJsJGAd8R+sXUqC7ozP+5tcv+PKBBx60fPny/V4eBD50PmrAJIyBi//SLtZNkl2a5eME9OLnzhmAx3yYLgW/JKGhwC131ms3deB+dtfQbuzeMbHmpsduPv/OO395uZReCk2wg2azCSG5Yz5oeIEHGIskSYl87/tkB9eaLPLWQkgJ3yfrPbmP0qIA1pruw77vo9loEEuesYKiTe/NgjMBxqxb5BJw7aXcGBddP7v+uo+WZDDYqrewa3gE8xcuxvL99nNQLlfAM4ann167+j//89+/ZK3VM0ugme1/y3b4YYe9YsW+y19GPTxW8EDgGvp8mkOqs73KLvzq1w88+LBDDxodHUZbpR0HrjwYo6Njdv8DDmbcEtCwvbMdcRqjr38Wdu3eBWYw78AVB7YPzBpYs3X71kenP//o6K49Pv62bNzyCIDTCPjHC2dKvhXiD4BPfeofvnXfvXff1d3VEwwN756JKJrZZraXYONgdOFnaeYAJwKZSpGkCS0qmUWaxkgTop560ie1yFBxJ6WA9AWUVpTfC4MsUyiVy+ju6YI2pBzXJybRjGN0dnbB9wKkqYI2Bs1WC2FQEqecevoxB6xcGXiedPm9ABMMaRKjUq2grasNg3MHMG/OXJoh1BY7d21DphOMTYzhsV89fNOmzVvvBjwopRBFJQhO8SxpkiBJW8i0QpIlNO8nKZtTaw1f+jRbyxkq1Ro834fKFExm0dvbg66uToRhBJ1qBGGIUrmEKAxhrEWSJqg36vADH7VqDV2dHZg7ZxBpptBWa8f8+fNgodFqtaDSFBMT49iwaSPGJycxPLIbW7dtxu5dO1CJQipOwNCcrGNyfAzz589D6PtIkgSe76Faq6IZx2i0GhStlGpwRgCWqFwidc0BVEZGRwkGJSmCg3ECfNHiJ5+XtUUMVZamLoaZLIR+GEIwWuhLn6zXUViCNmQvbdYbmBidcJEvmbdk8aIDSmEoLICoVILwJMGkXJHLnqd+ZEzAE5LmX9zXn1n/zOpNG9e3JibG0Wo1MTnRQJKmFHfl5hkZtwCjMF/OGTKVFTb76VZfYGrudar+ZHsWjC8anRnPU+z+jg/Onl1NogAJGWMKxTV/d8a9L2qAIM8PglKqKOA555DcA3OWK89lMXu+j3KpDCkkmvUGJut1GGvR1dGF9hpFEhE8ibuXQvvRPus9sdyJ7b5cbzQRJ/R5/vivHl8HWKRJgjTLMFmfcFnT9Np0pgCt6FgyiphI0pTOMQ5YqOK9GBhnrbZIVVbENWmtYUxG9xlL9w2izedwPa+AP3mehPQ5jGVoNppI0wTCo2zXZrOJHTt3orevR7785UcN7t49hEZzAtYm2L59G+r1JuI0g4IC4wT/ktJHfbIJBoYwDJApiuqpldsBAKuffuopLwh2DQwMYHxiHIwB0iNitCc9JHFKyrebu9Wajp141qLJuvlmA1vMkDqvHLizS4NZRGEEz/Op2HRKMOy0QhM0j6q0Iw7nmceOdKyNobxZnZFa70soQ4p0mmR4Zt0zUFmG9c9seuqd7/rzL4+OjYwAgBQ+Qj8qQHgAQ+ATARsO7ATjcnvZVHNp1kAPBgb6wfdoNNlilAMAWs0YaRLvqtaCix7+1a8u7emdlfb29qEU5WAq4azIDEmWwXNws0xR5KbRyl0/1kXn0v1IORo9zaDTFRWEAWQgoVSGLI3d7UKCcV4wAGhenZpIxlpYRn+0yV7SD/JPf/qf/vLUE088FgBkILFx02bss88+OOLII13DJ4PnBQAw8tnPffbfR0Z2PzGz/JnZ/rdsjLGBN73h7L8AILRzszyHPaksNqxbjx3bt+Hlxx7Llu+3gknhoRRU0ZhsoL29G709s9j8ufMwf9E8LFq6CF3dXejq6YQF0NvTi+7eHsxbsOjAz37uXz84a9bctl/3mn70ox/9YNeu7dTMdSNUG9ZvwMjoSPEz1/zgh/d98IMf+bsfXfOjfwKAmWJ3ZpvZXkKFF9ZA5TRXT0DZnPzqQXoSaZIQAIkLJGmGKBAuqoSBiYDUtjQB5wQ84uCwAoiTFEmcIEliRFEJBhphWILKNIQnEKcxTCvDxOQEMm0W7bvigCMAUu5ozcTRTFpY/eRqDA7MRU9fD1oNmtsMoxA6JRtbpVrBJZddvuWiiy++uFIt7ZBSYnJsEnEQwyqDarWCVJO1rVKpoT45Ds8p2NDKvdYY5VKFKLhKA5yhs7sbRhmkcQbONeIsgWYGXBMZMI7JKhdFASkr1qBcqcBojSRJMDk5gVargSRuAYzJtkq1s3/ZkvbFyxb2z5+/YO+VKw9cWZ+sd8bNeOcdt9+2+p577vvV8O4t2z2Pt5/x6tcccNThL1s5MHtW/L0fXHnL+rXrb9+ydfNEksYoRSFSATRbMVF5Zb7o1ZThGwYwhizbQ7uHiOQqfdi4BcvhYmDIapOprFggqyxFEJagkUJymlnTmUWrGdP+1gpxkkBlKdoq7YjjGAMDA2hva8e6Deu9BQsXLABoQZ/n7j5LrizqTfasOtECxSJ/3bo1DwNk3U0zBRkImNRlbGaZiyuxgCAbrE0NRG77dAUZy2FKLrqHPbsIZayI/XnWh+pzi+DpyuuvrWGfbyiY/bbV7dTjTxd9p9GOyafrfsAY2ByaUxTDblbIMiijwDjB5xiocZQlZFO1jhAc2wSZzjB79ixkSYZmvYV6o4kwCtsqZVJ4URwvNq2BMLXXps9k5xywMArg+x42btwwtG7dmm2e9AicBEvKq7MWSymgFYfVgBSkIsNaepv5vuAUMYGcPpznoMKCGQ4mPCo+XIdfZZnrsgswy2CZRbNRRxiFRayXkJLGIwwDVxrGZohKIaQnkKUJtu/c3Sa8cG6iUtz6819AMIaXHf1KtNU6kLlINk9SHvjd99yBzq4uzJs7C9ooQACjE6OolWsIEGDb1m1rhoeG0F5tp9ikVqsAJJGzxr1WPtWkYYwI1dpB54psaRBd2EUyu9PATGtIWCidwWhb5PIWigdnyDJF1yVzJg/GyPGidKEcZ0nilGGg2WyiVq0RiV1Tdm2ctDCcjUJyH8PDQ9c+/NjD159ywinnwBLELC928yZI3gixbi7X5pnOLs5I29wNwNxctC1Oce7mdp9ZvxGf/39ffHDd+qev6ujsiHt7erB58ybU2toQxy1MTIxDcAHPl7CModUkYJnkkhokjDlwHZHgOeMEPlO6KMCZi29LMwXLyZaoMoo+My6bnds8jihPXycYHhdEEVfOpfBSbEuX7XP01Vf98G0A+MjoEIy2OOZlh7vXbmCVhu+yuD/8oY99/TsX//fFM0ufme1/+lauRHJwzuzBUqmy4h/+/lNvP/vsNx1LTVbiVrBpU0BgDJZbVDvaIDlHW1tbkQnvBT7KVYrgag/aiIHg0gTIBENNNqMtJBcYmDOAd7zzrWevXff0IwC+/EKvb9OmzY+cfsZpf3vZd7/3rzu37cIFF37ri9+59JLvHXXEkfv09PT4O3fuSG+84YYb6/X61ssvu0zMHNGZbWZ7iQteYw24ZdTZVwqZSh10ysBkpCAGpQhSCNQnJ5ClKSnBQroYErKDcUlKsXAd9nqj7sjIVXjCg9YpqqUIrWYL/bP74HkC9fEGykEHlu+z8oj+vtnzWs0EgjFoDjBmsHP7TpSjCjw/QNxsIYrCAm5iNNDX1wcoA6vNmi1bNt88e9ZslEshFUaC8hatJUhNlmVQWYrQi+BJD34UotUaQRj4SBXRhJVSqNaqBJVJM2SGQFee9BFEITxJnby4GUN4AmEYoLurE2Njo9i2fTuGhjwYoxAnMXr7Z7cP9HbPK/nhge/70IeOPeqYYw6PStFAV1dHyFi+nKPt3e96l33owYeHr/v5z3dv2bTRO/vNb+5cvGRR9e477rbvfMfbT7fa/OAjH/3ofz6z4ZnhWrUGo+GiXSR8z4dycSd5bI3RGlortNU6EIYhdmzfUUS9MMaQJilsYh3ciSFLM0gXu5SkMVSSQgQcymiEUQmeL5GkLahYIQwi+GEAO8nBmUSpFMIXvLp0ybJFU4WbBWO2WFyz56vvipHMqR8YHhnacMMNv7jHd1FMzQbN7XIQDEkbWvRnWheQGuuSZvKZ8zyXNJ+BLLJ3qTosAFr5Qtey5ylw2QsIty9Y9LI/4iWaFwuWqgWX4MMZZVIbY4g+Cw7GBKmlLr5KMA6rLeK4VeSaWguEQYQso1gc64BoAeMYGhrGy489ZtHgwGD39Cp8SpizLzgGzQAkaYIkzuD7HsbGxsfrjca4sUCaknoopEDamKTHyOjxZECuBKsyWGOcCsnBmHE5r66gy+eamcsXNhrMFUh5Tqsf+oUFmFkGrQDJfTCQC4BzgngxCmt27gZ6R5VqDdu3bUdUKvUuWrJ47pxZs7F42VKkjQQ9vT2uO8ghhQ/OGB58/H5ccdUVeN9734exsUkEgaQcaFgITwIA1j/zzGZrFLIsRltHGyYnG0jTBKHnOYXewJMejW1kUwphljmoks3fMqmLQkrHUMjR5oB2RS8DQ5Y56yrRn+A04cIqzIVwhSaBmXw/AJAii2nf5HPxVgFh6INZIEs1GCxRocEQBhE6uzvBhWj98z/+638vW7LsZQvnLxxkrjCENfAkjYo0my2UyyV3njrYlzVFNBQMwCTN5U8RkXMIjEGrmWKi3swOP/Lop55++umhZr2BbUmKZqNVROfRJWEALmCVhoCA73tIspjukZ4/lVNsLCw3UIYAVZ4nCV6oNVnGlQZjxjl/KRkgb6gwm5+Te/LlrH6u6+FPufHQ7zv//PPfu3zF0sXjI+N46vHH0WoqvPLE4wEwaJNicrJuu7u72IbNzzxy9Y+uvuj8mbzdme1/4NbR0S4BzD308EMPPvtNbz7q5ltuP2jJooWLo3LUEwUlTrA+l7jAnqdXzBm6Ojv3+FQSghfZ7dMb2pzxInYs5zIIQSM5KtMIQi867LDDjv91BS8A/PQnP/uPVx577A0To5PJ02uefOL//fu/AcBzyNBDw7tmxgdmtpntpS5482zLnE4puHAjSaS4Cc4RtxqQwoPgkuyCXCDwSF2hKB8JLhhUZmC0omKEURGdKQ2jGDq62zB7cA7GhscBADu27YDgAus3bpKnnvaqI+YM9HupI5eWy2WAMcyfN4+yDpkj4DmNyRgAArCZQb3RhOf5jzcm66O/GvoVPCkR+D5FeUCj2Whisl5HuVJGGhMwqt5qwjcZ2jvaqNBPyQ4puABjHM3JJuXOBj7KpRLZnY1FFEUoRREmxSQ8T2J8bAxP7NiGNM1QLpfZ7Fn98+ctXHzoya867ZUnn3T8oYvnDc7bunFrx+y5gwij0BV6FpOTDYShD98jy3WjmbDNGzd3H3H4kd1tJ5+CPJbl+ONPRBD4S0ZGR/5m//32f3z1k09c1hAefN9HW1s70jRFkiRIk5TydAOfZm9hEEVlNBpNl9WqIT3PxQzRjHYQhGAMiFstKK3g+yG0UvCkB8AgzVKAcVSrVaRpCt+LkKkMUgq0WnVUqyWEQYSnn3wag4Nz9l00f9HiXOkzsHtkV2IPNXV6Vq2dUuyYxPXX/fzO9RvWr5o7by52De0mWrjR8DwfTApIAGEQgicpVJbCMk5RMdMWnNzNuhr3uNZOPZ91SrM1dkrsdZTqPSo5ixcmNP/ate2voWLtUSg/z89Ne768HpgedcLAAe4AVXyqCMyhZESp1I5zxWAsxbRILoiO63mOMq6htCr2z+jIKMrVMvp7erF161YYZRYGUdhJ5yoprPl86fQ38bw9AWMhHS2YCzYGjslSOYLgAlq5+BZtXENEIMsyJElMCw9BBRnFgzrF0zUpOOMOuGWnKaOOjmvhFjUESCK1OwMcQIlx4g5x5oELRrnifgRjtAM1+Wg1G2CMw5oMAwODcxfOn98DAAfscwDl/VrKVARnBRRFJSmOOvwILF28BGkWo9LWCRigt6sPYegjTjOlobaCc0zUJ5Gm7tqyFlwKJGkMgGjSnKOIl4J1Vw/jRdwTc+8LrpllC9AUjZLQmAEr1GHj9iHjDMwwNwPNoU0Gow1R+RlDY7JBTS/GAeMIxUYX2bzNZkyuHacmt7W3w1qGibEJ9M/qx5Orn7zxokv+++v/+Kl//CxnjMNl3IJRAd9KU5RKJXddkuJOzwVkyrh7unXOal6cVI16E1kaw/d9/PKOWx67676775tojI6NjA45OFXkVFaDIKBGbZqkUEohCH0Y5iBdzBKAS1LklJRkT7aWQH06s8U9mXECajEmivih1GZglvZpAf+DzsO9SFUyhvY/e2k+wD/8Vx8+693ves9rAWB0fAjj45M45LDDoF3jSwqB7u4uBkCd98XzL9q8Yf26mWXPzPY/Zevq7ArnDA6uOOyIw1950603H1OtVfad3Tt7oFyuiGd/tFqQW2l6sv0LXXZmj/51Poowza3EXcMtX4cwVjg9gtADgKHrf/7za8444/Rf+/rdHPxDM0dyZpvZ/hcUvJxzUkgYKQj5/JdWmgpfSzEk1hh4ng8hGCyjeVDGGSQLICTFNEg/ABgQJwmq7W2wmjIrS6USxsbGofQGlIMQraZAf/8sJK0E/QO95VNOP2HvRjNBlsVEtzMGXuhBZaQWjE6MQWuD7s4uV9VY+MLDWGMSgvPkjjtu/2XcaqJUrSJJUpTKFWirMaFGKUqnUkVndzdgNMrVMnbt3A2tMlTLZcSpgvAk5UZqwsgHgY9aew3NRpPyhD2B8fEJjIwMQRkL6UtIxtGqN3qPPf7Yw88663VHH3booQfPmTOwtKure7YQorgPL1y2hFQbpSlblTNUymWsXvUEJibqKJVKaLRi9Myehf1X7ItyuYwkSbFt606gBCRJgtkDs+CHQQsA2turiOMUrVYLYEC5XKJsUM9Hliaw2iAKaYY2SRLESZOo05LozEppKrStRRqnsAYQwisybhljiKIK4lYCbRRGx0YAcEguUGtrQ7VWwvjoOJI4hulV6OzpwNnnvP64nt6uqOXijBjnxRz2dHDDdHPxlGuVQWUa3AOuv+HGGxvNph2fGCfAWf67jENwOgezLAWMJrsnp5lzbXRBpBWCu+xRRgAgB7LKbZt7vBZuC5W0KHpfoAj9gzf7Qorw88Or8iI2nz8UeUyL+4H8/TA3hGmcEgXL4QkPxhoYZmAZKY5pmlIEjB/AwCIs+QikD88PkKYZQr+McrmCqFQayLO5GX/um+DPV8e7wtzzAjSyBgDg/vseeGbH9p0jtWoNxmgEgY9GswWtLcLQd+/FEjCLkz3dya/FXGVuVabMqikngFEOusaJOswYoBU5OUjt5FRccQYpOYH1BJ3zcZJASgkuJLQ26OioIIpCGA20tddQKgUHbN68qTQ0vAtcMCyavwTdvT3g0uUdAzDKYr99l2P/FfsjCCJ4HneLLIYNG55BZ2cb1q1bt/aRhx5d193Vg/a2dmzduhUtrei5lIZOFcqlMrIsJeiaIwMzTg1IAwNmKJ7JOuueNe68sHnergO1FQ4EUsgFp0JYcA7he0gSStlgeZxTDngxDMIV19KT0EYhbcWQMijixsAsKrUqskyhXp+EtcxFvnmo1ir48nlfu/SIQ4865tSTTjrZUiIbNVM4Q2d7mwMY5vbmaT4BjiLuCtYWlngA8KSHNI3x+OO/2jI8NHx7fXLywaHhUcogt8QdaGvrRCtpIo6brklnKT9cKRidQkoPgvswyrjrm7KLde4ksKTiEpTNUcCthbH5rC69rnxu3LWa6OvCvSFtwJ73mv4TfXhHYf/3r7n6LZFkwTMbtuGq738f577lXHT19kJlKVpxDN8PIQLgiu9fefX5X/zSd877wvkzq56Z7SXdGGPe4Jy5y0484cRjv/vd755+5MuOOrRSKhfzssZYtOIUnkcCRHGbYHkWAHuO12gqedAWri3iXRCtnxgBDNNIV0Xc2bTBIUgpMDw6su3jn/jE//vvC//r8q999SszB2xmm9n+rxS8SiuyPeoMnh8giig6iGIKFVKVIghCAAZJ0oIQHnxfIlMZhOeDWYY0SeAFAQV+u+gLWCKgAhxxHCONE7BKFVGphPGxCfT29SGOWwCz8/pm98wXkoGLEKUoIKVBUYQIAMStbA8IJmMMzUYLmzZsxe233f7gTTfddPfe++yDeqOJkdFhNOMW+vv6EAY+olIJjXoTgechSTRUqlAql9CqN6G0QRQFiOMYcRwjDELK6gSpIiMjw5gYHyue148i3tlTGzj0sEMPOffsc4/db+8Vxy5atHDvIPD3qAO0cRm/jDnFi+YXjdYwmYFkNBe3afMGpKnC8SeciFn9ZJtM4hiNZgttnTVYMJSiMi67/MpLrr3uup97fojJ+iSa9SZFswiGOCFVJo1bNNMKEreM1QAzUFkKaEAZ5kAP1PtM0gTGaoJLGUNWWRf5E7eIqgsmkMSOgp1pJHEGLppIVIYwLKG9vYpqZ2XecScRLAVTI4PORqphLdmK9hy4QTGoaS0gmMTDDz+y7fZbb7sHVmN0ZAy+76FcLsFoiyRJoJWixSoc+ZXzAuLDwWgq0FqXWWqmJogL4K2DQPFpCnNO2c6VVM6mQoN/r0L391j0PksayknTdo/nZ9MyeZ0FK1d6wWFzWytjsJYaAZykdlcsO2XNLd05Y2i1muCRAKyieKJ6HUoprNhv314AbpY9t3a61/A8O8W667HRbKJeb6Czgyxljz722CpYst9aq9FSlDkrJc0YK6XIhUGe5CkYk1PnGWPkNuF5v94V/K54IXgZNUHoORj2OLDOYSKkRJopmnd1JN4kjRGEITxfotFskHqsLPY/cEXf+z/w3iP6Zs3C2MQYRsZHMDS6G129PbAuesIaCyEZIBjqraZTMBmSOHVjBFVUq1Xcfd+9j6xfv35Dta2KVtxCrb2K3bt2E5/AWoJluZlgqlUpt5ZLD0brYhaAC+6ih6Z0C85FEU8lhKBC2M1sk81XFQtHrg2kI1wbTYWukJIaJJwU7ziNYdzcr5ACnhCk7ApFzgFlISGhbIZMKUjBMTS0G+1tHZBMbv7if37hq4cffMgBHR2d/VmqIfzccs8KC/AepzpjkIVqSv+e1stB4AdQibEXX3zl3Y899uiPt+/YutFai9D3IRlHs9HCZGOcooK0piWrAdo629BqtVCfnIAGB5NwjTfmoH3KNTVzBR1FFBQrZoiJ0K80xa8xzomPB5pTlkKCMQtl9LRr1e553/gTbSeddOqpxx5z3KGrnliFx371MLp7ulGrlgFY1BstWGtQrfrY9My2p//qY5/8V2vt2MySZ2Z7qbb2WtuCN7717FNuuPnnp+63bMXh/bP7u6aKXE2Ed9A1F/jetHvGdFcYm8JRTltPMGuLZIN8jGlqOoljeqdWa41Mp4Bh6ZatOyasMUPr1q7ZcMvNt22ZM3fO1jvuuf2OKy+/4lZrrZo5ajPbzPZ/qOBFrsIxURRruZUuh/twzikz1dnk0jQm5YxJKGUo45DTIjqfOWw1GiiXyggiH0maoFZtQ6lUhtYWSaqxbcsOjI+N4NQzXnXkwKw5g1ww+NJDs9WEYBxBGLqZMKCvtwecMwwNDyH0A1SqVSRZgkq1jDXr1q5Os2RLksaYnKyjXKqCgaFUKsFqAw6BUlgiGnMYoNFoQCmDnu4eWJBqPTk5CcCi0Wxg2/btYMwibjUBBjZrzsDA3sv23u/oI4849NCjjjhw/wOX79Pf079Awnuu5cZaGABJphB4HjhnSHUG4ZSEOIuhEoVyuYx9lu+LvfbZG8ZoTNZbGBoeRX1yHJ2dHahVK7CcoTmZ4oH7H3rq7z/5d18aGdndKFcqaDWb8KOAMlYNRRBxRytWhoqEzJFuc+UIYBCMIQxCGvHU2ilsnCyOgoMZiyxTRHG1GmkjBhhHuVSG7/uQnkUrbkH6HO21DrRVati5azfCarTPnDmDywHAE6IIYbecwQs8gglpDc9FsEyJplM5rpAM6zdueHL38NBGLjgBaFwR43kS9UYdxmiys4JBCIkkzaBV5op4N6PLppRczghMQc9hpwo3gyLyNj9mJJLmM7/TytbfA7T8+yq/pGhyB99lU9E0bOq7uULGnDpFC20NWLKxMsHAmEWWJaTkOWAXE5Q1ygBwT6IxMQlrDSRPYKRFZ08HBubOwZp1a8C0bQOAVrOJcq1MTQFrkcQJZA57ex5t2vM8VCtVeJ7AyOg4tm7dug0A2jtqiJsJlMrQbDbAOEeWZLBWgblmEBVpDmDEckgVc0WaJqqx70ErA2Uyd/xsoYRzLtwsr6YmDhdg4EQ314Yo7FkG7ezQ7W3tBC4yBipVmEwnoI3G9h1b5ML58+bXqhUsXboXbrnlZlQrNZp7BdmxhaAmXKPRxNDwKPp7eotGVaZSzJrdTwX/Q4+sBYyJoghJlsI6kJJRmiBIksGm5GYBZyBospyWv4up92XNHqlUlk1l1MIyaJO/53xudyqrWClFhT6tJmEZOT0Yp3tCksbQxkDCNTcMPZ/nMVjN0YpjaFWnWf3AR6kUoVypYNfu3Qh8icVLFuHmm2/66aWXXHr7Bz/8wTd4gXBxRHwP5YQaGbmaS04BZvNrdnoxDAzvGsFVV3x/81133HHTk2tW3+EHgSJXCuW8e9Inm7whGj/jDHErxvj4JLk8OFmYjSnsEjCW7OBwirYQ1ChSVk8tihmjzGbnGoE1jpyfN34onzyfPy6Ohf3Tq7u17r6eL3/xi69vKwXiF6t+hQ2bNqBSacePr/kh3nj2OQiiEgK6VtW/f/7/XbBp49pHZpY7M9tLsXleUH3jG88+6+HHHv3zBfPnHwZXflpYWj86KKELjijWmfnnca7q7lHgTnWIp1Lp2ZRim2/10YYdb03seOjRh55a9djqbYNzB8fvvvfuzQ89+MBawcXmkbGxIWhM7N61a2Lnru0xAHzgA+/FFZd9b+bAzWwz2/+5gtdlXebZr2ma0iKTcVISGNFPLWgOUGVUTEnhOVCVhuf7Lrc3g+dJaKsRxzGpvlojDEJ4XEIrhdF6E9VaDRYWtbZ28Wfv+otTq1GNaa0wNDSMerMOzhh6+3rhewEt4ByhdsuWrejr7UelWkVjogE/CDA4d+6WarUDDMDA7NmQnoexsVGMj41Dcg64wo9LiSgIkMYJoshHUA6wdcs2tBpNpIpo0kIIBJ4fLdt72fIjjzz6yFe+8pXHrDxo5YHzB+fNf06dYtxCPS/dcksiA0q+j1SlqLdSSC4ggoAItn4A7flQ2sCTnOAumgO2iYnJcTQbdbS3tWN8YgKdXZ1oNhu7fv6LG85rxskD1gJaZfC9AIJJhFEAYyzGxhIADEqTzZMzV1A4lYuUPwL71BsNp7q4mUnLnUUQ0EbD93wwIQAYWEF2ImuJ/qqNRbkSoj5RB7RFV3s7Nm7YjhNPPnGf9kpHNY/I4cVzUtFmjKMm2ynxbTqp2Ti66xOrH3+g1ajHgR8SbAwEO2pkGZiz4uYRV5kiBSwn3k4b0HXHgO3xQWgdiXHPEVq7hyCb7wdWoGVZYbH9vRTf5y2Wp1Ov2B6VNSsgXnmUDF2XzKnl1oF0cpWXCiNSN/P4GeGsvNqSCqldJi4phqTu6zRFqVyG1gphFKBcrmBiYgJr1j6NOGli9pyBDgB0zJUzhDGDNE0gRXmPdzE1hw34ngfp1EYOBl/6TQBIM4VWq0VFt7NaE/2Wu7lKDypTheWMuwzf/NwDc+8jzQoRjQtWxMxwp7pyIcCFKeKaGAw4F9DawkKTBdop4RwCOkuhtEa5EiEIA4yNjmPV46u8jZs315Yt2we+J3HsK16JUil0cUcc2iowq6FToFapYVZff2G9NpbI2SrJKJqoUtkNAL7vI1MGzWaMcqlUWJGN1Uh04kBUmmz4nEMIihXTShfnZL7gA89zv00R9pU3gaaU1Hz/0fw1NZ8ooik/v6zlVLz7Pgwz8ODyIx0UzRpDjcEsQxCFUCrD5LhC6IewkYeJyTqkJ5HpDE+ufpKo8Dr9JYA3WGuRaQVhBY0hTIOLU+Mg7025e4+D0AAWw8MjaK91YPOmLbjt9lu2lmvh5t7eHjU+Ucf8wbnYsWsnGs0Gap01mMxgvD6JIPIRxzGMBUyWAdaSPVtbKKWJgK2JRSE8H5xzKJddDs7gMUcRNzmdOUWmqKEgJfEdchie5dYVwrTPJZfQLqboT25pFjhu2d5LDgGA4046AdsvGcJBBx+CIw49FFppGJWCBx4uvfyK6y/49oXf++pXz5tZ7fyhu1wINjB3zpw5c+a2N1v1nY888PCumb3ywlvgB3LRwiXHnXf++e9+33vfcyqA0vTPWsqNpzxrbaaKVnJj2T0+p+2zCtmiTczc/d59Tg4PjYw/9fia9Zs3bl27afOG1bffefPqzTu3rF6/fv2a8dHxBgCcc/YbZw7O/7GtXK6ISrksd+3elVpr7cwemdmet+DNLXNGO7KuNWCcww8DGEWKhtKG5tQsZWoycJqBUzTj1Gw1IdOMlEIO2MwiDEP4gsPzOFqtBsK2DpRKVWg1iba2Cur1SQwPjy8qV8oHCwGkqUGqM7R3dODxxx/Dzp07cOghh4GBY3xsAkYDSxYvQxg6qwtn2Ll7aPPukd0PVaoVCEkqRhSFGN6tkGUJyuUytAWY4KjXJ5BlPiYbkzCTwLZtW2khrll5ydIlex9xxOEHnXTK8Qfvtfc+KwfnDi7tbO+oTt9RWtM+IuAOAU60pZlSpUiJltJDFAXItEaqNDxPIPQCWAukipRUAQsuAMEZspQU2M6OdnR2tBdgLgB44onVD3/qU5/+4vU/v/7ywTkDKJcXYOeu3ajVqmjU62jWWy5HkkH6lGWrjUZmFbzAB4yBcjPJzNmJrYt9CUMf2tFJhRSwMEgzDS8I4XkSWeZszIpyLbMsRZop+L6PUilEW0cNE/VJxGkTBx24cvl0hZsJjjhN0ahPwg9CVKJyQQcu1Eo3Q2gtMDY6jkazjoceePgBt6iAthqSCcrX1QqlqAQLA5XQ0lMrIlTTfCsRV62hTNY8C3SPex6bFqvDpgG09uRoFeAaa7HnTC/7PRRf++uqYDZN1c2tnbaw6ho7ZcuCzeOFLMCclTXPIHTRDHlcTW4LZpxDp9opW1RUWu0ssk5lq1TLiJsJOEvgeRKtRgvVSpm319q6AKBUKYMLVhSwYRBCerLouNs93hOmYpEA+IE/EafpTgAYGx2FyRTK1SogPGRZDIDI8MqyAjpGM9k0SkD2Ul3MqNL1p6dFE1lMt3dTayOfaQU4OLxAQisNbUjJ9QIf3BPgYBgfH6M8XM5QqVYpustr4aSTT1p+2CFH9LXiBFpTpJk2poi5kp4HAYZG3MTI5DCkxxF4IbJEIUkyVKpVgAlkWdoYn6hvyM/nifFJpHEC6RoN+fHiXEAr5fLNybGRZZmz5BNEcKq+yenV05wRrsFkGEU7WUZqL42VmGkwsymF2FoDwSgfN05iSE8QqT3RYFxASmpalKII1kZoNhuoVqrIYoVKtQIuBIZHRiADia5yGc3WMABg7dNr7vvJtT/btGjx4rl7L11G52JOF7dTagzL4U/MQltDjVV3TkUR8SA8L4C2uhlE3iT3OOOcWyEFkjRBmqZo1EGjGVajUa8TmM0aB0ukfUv5yzQnnCnKfPcko0I9S6EVNUSEkGCWbPT5vrTOFWKLm5Ypmg7Wod25sztzSw0h/AlJzbPnDu7z2X/8zNuXLlrYtWrVY2hvb8MhB6/EYYceCmuBZpygXC5hx45tu772lS9+O23Vt8wsdX6/bcXyFYuPP+GEQ0cmR/f68le/uvz4E05YsWjhwlm7d+64btk+e7/vqVWrd87spT23WbNndX3wIx98zTcu/OZZb3vz246cGB+r5fGGOaOBcb7HqBFnU/8WHNNUW1p3Gsb2pKO7j3VrCOD32JNP1D/1yU/915Z1z3x33dNrHh9rNRoA8Ff46MwB+T++dXZ3V7769a98cP/99j/uiVVPPXHW69/w3R9cdeXdM3vmpdtmDwyycikScb2pN2/f8kf7cPR9r+cdf/bOow/c/9CDuWV84zPrN95+601PPPjIg482kmTiOQWvFBKpTovxRWudKpEpinlwygAsI6WUMYRRmebPdIowiMAgkSQxMgWURIggDIiaaRRh3lMFKT2EYUBqjeGYGB/HUUccun9/b3dPrtr09faCWWDpoiXwA98pgAblShnccuzYtQOdXZ0IwdFqxrjie1dc++Mf//Cu8YlJTDYayJIE5WoV8+fNRZYkGB0eQ71RR70+QRAX6cPYDG3t7aUDVq446swzX3PCYQcdftTSpYv37entaZtecJLKRZ1DmlsTZDvkpGDGcQJrLcIghPVp/oSUUgIFRWHg6rvcpkoqkXBFX76YZYK7CCWDp59cl8Bjj19/w7XXffmLX7sySeNfuYgXio4JA6Rpgma9DiFp/wiPu7lcRhReZahYcIUDAyn0xlqCVzmglDXGiZgMnAn4rmGQpimklIjjGFmWkXLnefDDEKUwQrPZhNUGk40JdPV115avWL4vACilIXMbY34eSaJ359h/6+jNpL4awHJ0tLdj99DQrnVr1j4NgOip2sArB0CiYI1FphSUpugUyTmRavUUtEk56BpRwVWhfNFsp30uQfXZMUR5wU6vysUX2aJR8OJue4KzckXZCU6Fsjxlk7ROaGZTErkrdrngrjDSRf4wKZgg4rFlYILBcvp9zylfSZJAeoIs4z5dl6UwQpYktSiqtFNBxaE1LfwnJybheXT+GeRAKYBK4efGTt1z933r7r//gTXVSgWe76PZbEBrjVYcIyqFSOIYlllISaCk3H5uDAPj04BcjLmFUG4RoEWQcfOrdC0KIse7+VUYgMupjGIpCcgG7opAy2i2v1xCM47RaFDBlCQNvO6s1xzZ1lYrPfrYY0izBHMH58Joi1mz+qHdSW0B+EGALtntZmnpvZfKJSc/c1xx1Q/u+f73f/BQqVJBkiTwPYnYGjTrjaKI55KOVWYtuKWM2CzLqADOmzSuOGSMOTe7KZwSzNn3lbuOsywrmnF5HpjJ4VCMwSjjFBUJozU834PPyfbNIYvcXMoABpIkc0Wri6izBo24gUq5glqtCqU10iRDKYgguzguvvSSzeW22uaTTjhx7h4cVYuiSCzm6pz7g7sGE11yDKVShZShKAATAo88/OiYMZRvtmnTZsrRbbh5Z8FQq1WQpApxq+UQBIYI2HEKKQUB7JS71xmDLCVKdd6csdY4m7Nzpbh7IKzbXwXrFUXTjrn7rDEGSmWuScbzO8efZHvXu9795g++5y9PuurKq3Dd9T/D+g3r8apTTsVhhx1JsWOhD86AK6+46mf33//Az2eWX7/HXZqx3nPOPufs62/4+Ttnz561Yo/PDgb09fSfFcjwAd+LPp9mrexP8ZoOPeKYY7/xtS+/u1QOe++/997HL/7OxT++8667b201mvZ/0H4LL7jgvz717ne/80P5/qrV2goiOywAFxPk8vX2SC8ogFT555/7OW6f/QlqYA0raPw/vuZHV/34mms+5qjJM9vzbGFQ8vv6+mfPmt3nPfboY5ubrUb8x3quqFzp+8Lnv/DmM199+lG33nTzzh98/5obr73+upubcWP8xX6uU151yrlvf+vb/w5AaeXKla886zWnH3f0kUecc8dddz86c9T/dFtUqbW/7W3nnv62t517xu2/vH2vUhj6gvNdP/zBD2/70Ac+dPXGbRtfNJp5VCpXznrdWa+56eab3/Gyo192NIBi1s6ozzTvuefu6w4/7Ihv3HvfPTdNV/ylMrrI3QUswjAA5wJZk+IcsoyIl1mmIIVEe0cFaaqgMoVyWELmQELlchVgpIaUojJqlTZM1McRtxJUa22I0xjxUIJqpQrhMwRhgBX77XdIvTEpjdXo7OqG0gZJHENpg2oQTakbgiA8s/v7wQXDurXP4Lbbbl/zy9tu/8nRxxw9NH/+fAzvHsPo+BguuexSCMbR2dOHNEsxPjnG9lm+fM7BBx64ZGR8ZPa+K/ZddPJJJx6ydMk+h/d0UV4DAEcANs5iA5f36SJQPDm1hHO7LlUJjLZEXYWAdDd0rUm9Em7h6e7HznaKYmHEhUQOc06aibr4ku/85AvnnXfBxPjoHeOT45OVSjsRRrXBxMQE5WAasp4LIQulyBgFpSyE8IhqaOh3hCdgtCP8ClIipKTFbpY5hTTTSE0KLriz6Wkoo5EmCaJyBHCLVpIAMAjDCJxXC7Lp5EQdy5etmL9k6dKF9PFjYEAFfRAEtB+FI7Yij/ZwFnAX8q6UQhBIrHn66Ue37dixrlKpusInQRK3KDpGcjBYeFzSTLcr441Td4UQBbCCSwGmFfI4IvasApdiPveMNXh2KTpNC8YeSOkXeaMCle2hJOfF+XTrdQHisIBgDFYIAnNBA1YUxTx3hRF1zikTVUgP0pdIkxiS+5SpyhkCP0CrkVDck6XjpaxBqa0a9s3ujQDKus3Pdc/34Ht+8dpp7lvsYVHX2mBkeBzapHj0sYee3rlj++aOrnZwJtBqJQ5ERQ4RKnQNtM6mnRNkuc6jliwYhFMoiVpMkT1SeuCGU+ySO2hS0riE5BzM49DaIk3osZmw8D2fRjUsEXul9BDHCTgY0lQh0SmYZbJULu8LAB1d7bjggm/h5JNPwSEHHUL71+bxxgQ1ktLdnwwgPYHA+kiSFOOtcfzs2p9c24rrW9raOmCUQbPZRKlcojloQQ2nJEmct5fuGXEcF3O5jDNnL6a8cwa6Vp4NMWPuvPCEgBUMOnMgJUYxG3za/rOFu4Iq5izLCieEgQWTZPnOlHJqOhFLBZcwGohKETKjMDIxDG5pfweBBz8IoJXGwgWLuo8/9pXdvuchzagQ9IQorPfMEiWZO2ozZ+6CtFPgMwCIWzH6ZnXiM//4DwvvuvPOrpGxEbTV2jBZb0JYgUqtCmMNtAPTZWlCThUuIfhUk0hrF79lyELPwIrIJe7UJWZNAUiDE42Znh5l4mKt9riPMKLF5gqw4dNcJH/8rbtv9r4//PHVpwFAW1cVURRhyd774r0f/KC7Ngn2uO7ptZu/8B/nXZhlqjmzFPvdtmV77X3MTbfd/levPOZlp2Ia7shai2ajhSiK0Gw18LnPfvZ9l156+S7G2HestUoIjwnJWZokL2r3ww/D3uOPP/mcH/7givfPnj1rEQDstXTZ8eee+9bXfeaz/3RBZ2/nt0d2jbwoKr6Uku2/4sCFrzzhlXsJbsqNybpmPODt7W2Nn/z4J+vXbli3fnJs7AULpdNPP+uMd7/7ne/K742WAVzyQrzIwZk5r8FOH8q11JSEnkp3sG40iU9zqYHlMZoanudhfKye3nj9L66cKXaff1uwZMGCs9949ilXXf39k/bZa+99B+bM1ld9/wf37HvAfpetWvX4rTa16Yvc9JCf+vRn3vOX7/nzvzYG0evf+Eac/uozz/nxz358+ezZ/Z/btm3H1hfruWodbYvvuvOudwAokVtKICqV93nbuW87DsD/iYJ3Vt9cFqcNNjo6/Efpqr7sqKMOfNs73vG6BUsWD65avfrBa3/60x9d99Ofrf+dPpd6+5ZfdfVVnzjtxJNeDyCc9q2lZ5515tHL913+ur/7m7+75Nobrrv44Yce+oPuVaUo2uv8L335I3/+Z+8+B0Bl2jKU1mpSlI48+uizfnHbzYd+8q//9guMsQustQ0AkBwM3KM5MqUU0pgKXOkJGE2LH+6yC5UyaLUoD9NAQ1tauHrCg5AUF9JqtOBHASq1CkZHRxFUI3AhkKUJ4jhDKSphYnICk+P16jHHHnvwnMG5aDboM1mlCpnSqLXVnKWOFvLWoVjymc3u7i5MNia2zFswsOmIww7F4OAgWvUYYxMT2LVzGy+Xo7YDDlg5l3vygCiIjj7mZS97xcoDDlg8faelqUKaKkieK7cczrUNN/JZrGHyAkswTgRkANVytVBrrCEQi1aarJIOEpNbVrWlWJkCjuK2kaGRoWt/9OObf/ijH11z30MP/iLO0iFSuRmarSYajSY8z4OUAibT4JJUCZqzU8gUFb0UmJ4iMY60yjh830Oz2QIYgx+EzpacwBiDKCzDkwJNTbFLFEVlASkRBgE4E2CWipqkFaNUKkNwgaHh3ejs7kRHexfWrluDlQfst6gaVroIksOJ/pvE2LVjF3q7ekgZDjiacRObN23B/HnzEfg+tKb9wSXQqqf4yY9+cvPw7l31ru4eqCxDrVbB5GQDiUrBOZFUOTiMUW5ek8NyVsx2U+FP6nTRXIAle2IeuesyQKdmdfcY/S0umVwZf8GRPIvf8A32a8vc4oxi0zrZjGy4BUCrsOnm8+Hu33Zqzomoy2T9nYp8YTQbaabGE+JmyymENL8KRqAymgEHRkfHUK5GaCUxxseGvV27toeLFi5Cs9FCra1WxGgZQ1m0XHAwK8CMmyl17zhNyarsywAMfLs1VptMI85oNj7JUprNdtnd5BgxTi0jixuDgLXaRefYIpap2HPWgcjohCNVzzioVRAW1lTAQLjZYJ0ptJSB5BKekIAgG7PVFo1GHZZZVGvtkF5HW62rYw5As/IrVx6EwcF58D0fmdI0my44koTmRIPQd+KDm2EO6Trd+cz67c+sX/tLxjjKlQqa9QY86aNULoOBo9lqFKoGEdwZDKdCnINB+IFTq10ckXVjJm7+Nge3kC0QhTWQFdHSNLbApsVv2D2KOsoB5q6rZ40Gh3Dvw0AbQPoeZJ5Xm2XIbAbpS1TLVUw26tQcVTQrG4QBNm5cj1e/5oyTTznllGUAHISGuVlqd/wYqcYAUAqD6TfXqcYJLHzfQxiF2LtWW/DWt5978vnnnXebhbWeL6GUhmEMRmkkSYIEzN3/KG/W9z004xZlLReLZVJipZBE7RYSsJaYDVw49ZpIzVYz+O53tdKU+ckspEsbACeImjHkzuGMT80Q8j9NwfvWt7zx5MMOOWjFHXfdDmY5/umfP4fJ8QmUAvq8lI6l+K0LL7xsw5b1d80s93+nhTo75PDDX3fZ5Zd9+uADD9x3z6YjXR9C8KKJe/oZr5oTt5LP3PHL2w78xF/9Vf3HP75mPhgvX/G9K3fcedud995w43W3PbVuzdrfd6awo6uj8+1vffub777n7nMPOmDlgQAEMTVo7MxqM+czf/8P//iX7/2LY1591hkf/dEPfvzY7/veq22V9sOPOuKYCy+84DVnn33OCUEQDDz7Zz7xiY8P33//vfe+8U1v+sGjjz360ydXrd5jhrlS6apeedXlbwdQ0dpOsZXZdD5Gbpdwi1NGzfLc1gzn9pmYmAQYQ6VannYP41PXtQaN6XjArqEdd6x++sl7/zefe0cddXTvwYceNuvrX/vqujSJ6y+G0v6qM1718tNPP+NVX/jiF496zWlnLgfg52fiuW8+Z+m5bz7njG9c+I2LymHp3xtx80Wz5u+zfL+j/+I9f/FnWWqiOE0wMjKKKPLbznnT2X/ZVi1PAvjrF+u53v32t525fJ99DwGcO8kqcHjYe/nyff7gRpMf9P/H57/wuqVL91pw0bf/657bbrvllzt3bN/xpzonBufO7X3DG84589sXX3B8f09v5bzzv3TreV/+4iUb1q7f/qI0T3t6+cc+/pE//8nPfvKJ9vbOBQBw3Mtf8ZZzX//Gk5fvte+bH3/yieHf5nGOOfbYV1x3/bX/esiBBx1ujSW3q1uoCLeGWbzX4mWf+7fPffbt73zn0YvmL/voug1Prf59XvMxx73itDvvvetTK1esPJQctbZwp1l3rzHOnVkJo8EvnX/e59pqbS0A3wQAaWChkgRSSHAHZtFGgQuBIIxIAdAWViekHIEWRCpL0Wg0EPgBLeSaDbIPcgHf8zA+OoZGsw7hSbTqLYQlH7Nn9yFNKLtwcO7sxYLzvQAQkVkpGK1QikJIXyLTGoIxpCoFYBF4IcCI+NvW3obAl92jw0Pzfnj1j4YWLF5Y8aTs8INo2TnnnH3Q4mVLVwwMzNmro629vxxFzFiNRhxDCAnBKFe4Xm8A1qKzq90V8I4cOq3YKeA8DEWsS55Zbt0cL7OgbGILcI9Nm5cFjFaQHi0e845nsxmrp9Y+9eQ3v/Gt6x975JGrNzyz7r5Ws6m9MEQQlbBjxy406hNQVhO9VTCkKoNSKZ1AXCIIPRhoqEy74sZZo5kA4wxZliJuJjCa1Pskbrl5V+OAOBmyNHH0XgGVppRxaSziuAXfC1wBy9HW1g7BBJQy6OzqQikKi1nRFfuuWAaQnVmIPN9ToFIuw/fpXIC1kMJDminUGw0EgQ/GAKVcvvHE6PabbrnpVik9V1QIKG2glILvedCazkdDnFyC/MDAaAIdWeEaIYoaDDTPa6gCmB40b1kxL7RH3TodHPXs6KQXLHaf/UMWvx20Zg9KVlGgMMsK0HQBKXJFbD6DbZxdHrAQTEAKCW005Ya62V/LSO0DoXTcPDNHEATgYDTTzel4SE8ijVNUahGE5GiNtbBg8YJyV2dXpdVKYDRdj0wzKBiC1LlFvdIG46MTUCpFT28XjLMZd3d3goFhy+Yt24QUsIyh0WwBFvB8Ce4JMDe3arTOsUsIPI+uf2vc8ZuiZudAEiouDLTLYBbTKMSpVuDC/a4ju6ssdZRjRpAiLuD5IaSQaDVjR/um+XXGgVlzZ1fnzR/sa8UxYAUOPvBgrHl6Lfq6exEEPrTRUxTk3C7MpjIcyWHAsXr1qvvWrd3wRLVapfuoJ8DBMTw0jLZaG0QikGUKpVIZDBQPZk3ejEHhtLFsemSWLSzayGndDGBMAIauv+KcQW40RxFBRk0ir5irNZrI0FZTwSylQJZldO9mHIEfII7pHCiXK67ZqRDHibvfAykXiFsJdu/ehTmDc5Z/7KMffUtRKFJHDqnJyErvbOVB4NP7yxtR01yLjJHrwxpQzi2Ac899y5nf+Ma3rknS5N4wDGHBMT427iLLKmTjNhYZqCmrNEHcpGCOQxCg7AdoJU0wzlwkEXPnD3cjDBZCeuCCI0sTKHcO0lyuuy9oC87I9ZDfh/KmTBF3Zv74lmbGWPt5X/jiSc2JOrZs3oojDj8Ka9euQztNIRQwxM2btm68+pofXvHv/+/fZqrY33IrR1H0sY997P0f+/jHPzarv78vB/0xZ7/ljAGMI4xCaEX3oCzL8Po3vnbw+JNf+b4wCBCFU660N77pDe/etP4Tmy695JJLent7L9q1a9e63/FYz//mty/8pz9/x7vOna4w59n1HAxJpqzgnPV19h13zmve/E4AH/49zinvtFNPO+mnP/np+15+zCtOyK++QklVzknlCVQqla5jjz3u1BUrDnrlgw8/dED/rMG/3rF9cyt/rIMPOWjWcccdt39+72FCuNdM6QEWU3O4BZUfU2urZqOFrdu327aOjtbjv3pUbd68ITr7TWd7vhcU2bo524JLgVajiZ27to9944KvX7Jr+7bR/63nXm9v/6ybbr75C/st3+eUQ1YeeMXihYsv275z9/BrX//a3r5ZfcNf//LXnmjUJ35r9fqYlx972DU//OGHjjrqyDN6unvK1gKjoxOIwsA1ug2sZeCctb/n3e/5yPrHN9QZY59+MWBPjDH/W1//1rkD/f0DzUYLURiif1YvsiRxa8b9Dlm6dHHp6afX/sHOk56Bvr5bbrjptYV7gHFyVgIYHR37g1TEOYNzFl115RX//Oozz3yDtlacctJxZvXqNbcefdQx/3zHnbff+sc+J/Zfsf9BP/3pzz67/4r9Ts6/tvKglacsXrhggef7H83StPWHPscRhx962t/+9d9+BkCf1SQAcgZYbV42q79/GYDf2DDd/4CVL7vuuuu+PHtW//K40YInJbgnYYsMbKp7VEaOvCVLF5184YXfGt1nr/0+uOrJXw39Lq/3ta997dt+cf2N/+J73myjNbI0g/A8GENuXHA25Qx0a0fOWelt5771PQvmLLhu/Zb1m+B7ATzpEzSGcXDuQUrKr/R8H0J4iMISylEZUgZo7+hEtVYD5wJhUIIUPqTwUSnX0NbWhY72bixcsBi9Pf3o7O7G7NlzMDAwiJ7ePuyz7z6YPWcApXIJn/vc595orbVxnFhrrd25c5u9+Zab7JatW6zSyiZJYrXRVunMZiq1Siurtbb0O6m98ntXNi785gV3ffn8r/3shz/+6f2r167ZNjw2oZJU2efbjLFWafd3a22rmdpGPXbfM9bYqe/lf/b4fWutdo8z/TG1VrbRmLRGKWuNtVu3bjNDO3fbLEmKR0njzN5378NbP//5869+29ve+eHjjjvxoL6eWT4HRxSUsHD+YvR09iPwKxDCR7lUQRjS/i5XqiiXKy4OhoFzD2EYwQ8C+H4ALiQ4F/D9AGFYQqVcc3AfDil8REE0Vay7ZoVw+cZcSng+Hf9yqUqFrpSQfoAoKqNUqaCt1g7f81CrtmHW7AHMm78Qhx1yKBgD/uuSiy+i96esUsZqa6wyutg3xkzfb8Yqd/y0NjZJU2uttd/97uU/FUKWe3p60dnZhVKpCs8L4HsBQr8ET3oQXEB4EmFUQhSWaRaaC4racTRxltOhHSFauII9/zrcPmCYZv+d9oc7pXiPr2Paf92cH+d7fo0VvNzf5n94zt+nF8PCvfbpz8sZp9eVvzcQjZkKPuayQqfev+8F9LuCgwlBxbHnISqVIIUH3wtRrdZQrbWhUq6hUq5hwbyFaK+144jDjzhkeGik3qjHtj5Rt41m06ZpalOVWu1OfG2tVcbaNEttq9W0RhubtBI7PjpurbV2+5Ydyctf9orXRVEJHe2dCIIIgRehXK7R+colPM+HlD4834cUHjwvdDFKKM5dwQUdV+7aUM5KzxiD9OgaEFzCkx6k8Nz36XzwpE/E9TCEJz0EQYj29k5EpRJq7R3o6uzF7P5BdHZ0o6urB2ASS/fe++CtO7e2Mq3szt277Zp16+ytt99ulVbWaGuV0tZYM3VOG/q3NlP3hImJSftnf/EXH/HDEF3dPajV2lCp1lCq0LXc0daDKCKltxRVEPghuKOhE1GdjmPh8psGqRJcQDgKezE57d6r5B5Zepmk80h48P2A9qF7jKnrhIM5WBPR9X0wMARBhFKpCikCMAiEfgmVUhX9fQPo7xtAuVJFT08fqtU2dHf3oL29C3vvvS/K5bL8zKc/80VrrU2TxKpM28nJhm21WnZsYtzWG013DzDPuac+e9Na2zhObStuWqPpPv6l8877797e3s5ZfbOxcOFitLV3oqOrC51d3W6fdqNcqiIKy5CCPq+4s0NKKVEqleh+ICSkIIXXlwGk9CG4BGMCvhfA9+hYSOlDSG/qGnWgNM6E26ey2I/uIIEzahza3PHzR/pz5JFHHL9l05bRX952h/2rj3/Cju4esz/4/tV2aGjEWmutch99553/lfP+2K/l/9IfAPITH//bv7fWxtZamyWpNcoU6wL6nNdWaW2N+3yz1lqlDf3JjLXa2izRVqXaarXnmX7D9Tfc/trXvv4MEYTeb/N6KrXK3tf94tpr6LM1tc063WeLdYgxz1mc/OL6m37V1d7d+7u877333WevCy+6+CuNZms009o2my0bx6k1mp7DmKn7nXX3Olp/ZfaBB361bc6secdOf7xz3nzuImvtBjoXNT2Gtbb4f23ss1+6yrTdsG5j49GHV23atGn3zZ/9t89/5qCDDzt65coVH7z00ouGi3tDvp4wxhqlbRorazJjv/WNb1zb19fX96c8X4TwvXPf8va9Vuy3f9eL8Xj//Nl/+Wz+2Wqt1ccd98qHjzn2+Jvuf+jxx7590Xe+d/Bhh+7/W57HlVefedZ74jR56pn16+2DDz5i42a2xxqWzmU6CCqhG8aWjVs2L5q/6NAX470ccvAhL5+cmBzJ13nFc2X0XN/61td+Ui6XoxfjuV77urPeku82k69PtLG33377rhNPOvnoP+B+ID5/3vlftNbaLNPFe7DW2k3rN92+eP6i2X/M82vOvPlLN2zefKu11mqV2dGRMZtlysatxLbqyeMnnnTS8hfhntd9wYUXXlMs6rS2WitrMmV3btluDz/o8Hf8psfo6Zu15Oabbr7ZWmvTlO5TcSu2WZYVx0Irba27blut2Ka0L7MPf/CjH/ldXu9bzjn37dbaIWutbbUSmySZ1ZqOjTHGrcemTnSj3U3DbW98/dnvtdZCMk6Kpx+UwMApczOJC6ouA0GbfN8HExxpnCKOmwjDEoGBrIHv+WR5zFIwxjA+MY5KpeIyMSVKpQiNZguVShVj42NoNppI0nRFrgggAOJUYWJykoptLmCl03/YVNytdTbQwPfwuje8vsQYjnheIS5n3DgyaQ7VEUVIORBGHkWY5DRcTJ/snJYXW+wHt/Od8pQXTdt37LS/euwxHLBiBYTw2OjoKJs7OAjp+xifGJ38r29efOeqJ1bfvmto1z2PPPboY0PDO4d1ptHZ2YWoVAEDw9DuEXgOShVYjyJgpEQpKiHLFOKkCc4FoigAs6B4FC4ReBTJkakUmVKwJqFFLjg0NLTJAA1SboRX2NOhLeAUH6Oocai1pripwIPHPBilkakUmmuEUQmcCUxO1jFrVhk7du5ApVYpz+rvWwyASM/OZpSDv0bGRrBt6w7Mnzcf1WoJOSE5TmJSW40FPA8PPPDQI1qrhlLazYMbikxiAlmauTWlgMoUPGFJpQQVdkpn4LkayIh6qzTNqVpH1C46zJjKd52u9E6dW6TSFLCqYq7IHX+Wg4Kerev+lk3RwnYMTDEoURStsFOUZip0yMaVA4nzv9B4Ab0wyt11oB2HpE2zhGzH7rrhkrksVioABedIswwAQ+D7BF3jgBf4YGCVqBSWoyhAkjCK66o3UalUCT5mbZFxzKUHT+YFFke1SlDz3buHJtNMbdXakMIPOHK5IuiYYNCaBiV5Dv/JEgghwWGLmCXr3P9Mk++NOWcGQLbSVBunFgpX0OTWXvqvcJRxwSUil8mtVAalFES5inqjDq0VOro64TfqWLHfvgtn984Oh4eH8fDDD2PRooU49JBDCAbs1IkckF1ApaYp8QAwPj7WvOeuu+7njMMPAjQaTUSlEHGsoFSGRnOSrOWCO3q0LRwleTyPBQezeirLZ1qTBECRXczyPOncxp37mgEHF/SK+WjuQG+cCfhBWMTyCE4ztMopLzn4SkoOpRJ4QQlj46PgXBKrwJCyKaWHSq2EzZu2YK+9lh333vf+5RsAQAgPFhbSI5dPEIR0prv4qNzJWChme3gk6HUKaTE6Wkfmh6jWqvjAhz50zv33PXTPJZd/5xvtbZ0IwwiNeh2pSgBYxGmrmGXO70OMcUDQuakynSsPxbljQGRXIQWs1lBKg4NmlqX0kaUZLBNuTt4WjQetyYUgpOfAgHDcHQ5m+R9dCXr1Ga99zcDAQPu5b3k7Km0VXHfz9dh37+WoVmrYuH4TypUynnpqzdBll15+/Yc++L4Z2fa32CqlsvzoRz72sc/9yz//NYAgjclRJv0per7SBnGSIAxDgDGkSQYuuKOtWyRZBt+TEIK7cSMLozSMOydPOOmEl51w0gmLP/DhD/xjbq17oa1/Vv/Lv/Sl8z958nGnnDi8czeCKESlVkWSUBpEuRwV5zvyzx/GsGLlAQvmLph7IIDrfwsVTpz5utee9cs77vx4V3v7ITt3jkBn4+ib3UvRXEbBk9JFvxkIyaczAxEEEgcdtHzWX/31R17HGLvTWpoBvezS76z75je+fvlfvOcv/5bnYDox7T427RJJknT0nvvvve3an137i+3btj/0zNoNw3vvu2/c29+784H770kGBwaaxx93IgcAZU0Bu4NxSRCTkxCexNYd2x/csWPHH5WUvXDh4trJJ57U/V/fviBOtRr84nlffuOHP/C+d+7cteOBfffZ69NPrHryzt/3sectXLzfXXfc/iYASBOFMJD8gP1XHnDAykNx9113m56eWs+HP/TBG3/TPKrne93/8fnPf/LjH/3ouzes31B95KGHcOJJpyCIZOEiyw9gfu8VPn0+DwwMzPnzd/35mwHc94fuq9ee9drXVqqVDuOgovlaS0h6rl27d7e44H/wzHBnd2/txz+65hwAHNPs8gRd1Gvvv/feJ37fxz7okIOPfOtb3nZOo5kQAJATxJBLjsH5g0fut3y/lwP47h9rrOLf/vM/3zVvzpyXA8C2bdvBHPCx2WjhgYceag3tHvuD1fH3fuD9r3r3u951Gn32mmJxy6REe2cHTj/zjMOXLd3rO089/eTzOgs458FXvvqV9x37ymOPzZIM2hoEpQBWk3uAXGtkOc7Xe77vIckyeIEvP/ih952zcuWBP3z44Yd+46zwm85+8xsv+c7FnwXQpZQlgZbn3BdMpcBMI3oyB4LNYbAf+Mh7z9x7370ug8d9CCapw1+uIgiccuIFaGvrRBiVITwfnhegXCqjFJQQBSX09PTSosYPUS5XwbhArdaG7q5eVCpt6OruQ2/PbCxbujeWLFmGwTnzceRRR+DwIw5FVC15l1/x3euttTZJSOlrtlp2ZGTEdQGNU3e11dOqdm2nunzWPFu9NdRZNdYqa6zKlcVp3a1nK7jKaqvttM7As7VdY11/0hRtg7yTpDJlx8fH7K6du+3w0LBN49ROjjeszozdumX7zosuuvjK4447/jVRVK11tPdg4cKl6O2dja7OXswbXIjZswfR3taJzo5OVMo1tLd3or2tA7VKOwT3EMgAPV19KJfawJmE5B7CsIRSVCmaAFL6kDKEkNIVc6QCCiGLiA4GAS4EQafc14SQCKIIvh/A80jNDfwQnu+jvbMdfhDAEz48P0AYldDd24PenlmYP38hli9fgVqtHQuXLFq4bdf27XkXLMsUdVusta04truGdtoNGzfYifG66/bQgYrjlm21YpvEqc0SY9909jlvBhh6e3tRrbahWq2hXK6irdYBTwYO7iVpkV2qohSUCoVXcAnfCxF4kVNCuVNhRaEShiHNkJOyO01BBZ6j8OZqzrPV3+lRMHv83m+l5L7Q96cK3qnH58V/OZ8iIHM29ZicuzgUp/jlFk3uKjHGGZjkdG4Ium7z1xqGEbq7exFFETwvQBiUsffey7HffisQhRFOf/XpZ+ZKW73ZsLtHhuyOXTvsZH3iWdeELVQ7bZRVijp6q59YrZ94ZNWGN77+zfsAQHutC54MEAYRPM9HFJZRiqrgXGJ6DjGpst6U8ij9oshgTvnkjM4D7pRtUvFFoQRLz4Pv+xCc5i3pGvAAISA9UpKjUhmVag21SjtKYRXtbV1YtnRvCO7hve95399Za+3wyJi946477Jp1a+zY6JjV2lil6OaTqxNak9rhNN/ijrFu7doNixYtmt/e1o6Fi5YgKpVRq7WjVK7A90NEYQlCUMHo++4aE6R007VK56Dn+fCddZgxgowxN7NNvy/dfvKcNVvSSAqfiobyPB9+EDn3h+esg2Tr9jxS2oUgtZ0xAV+GhQIalkJwySCkQKVSRRSVEUX0Xjrae9DR3oP29k4ArOuKy6+8plBrlLZK6eI+mmVZ0e3Nd5I2xmZGWzV1V7XT77L5vTVpJkWD9uYbbn5o1qzZc2UQYO68BQj8ErlAfA+1ao3U8rCMarUNDILcKaUKAr+EIIhQLlchuHO1cA++H8J39nYuJDiT4OBFTBFAoxVk4WfFfkHuuhAchWmE5SZy+UdVlRYvXnbI6lXrNjQmm/bLX/myvfeeu+2WHdustdaOjY7bdWuesju2brN33XHPLxcu3KtvRrn9zX/6Z/eF//Jvn/uUtXbSWmuTVmJVkliVZjZNnavMKGud2mmttUZrm8ap1VpZpbXNYmVVZmyaZlZlyhptbJYpqzJllVI2S5XVGf3u6PjItjNfd/opz68ayspHPv7Rj+8e3bnRWmuTZsuO7B4hhcRae/U1PzS33f5LY621KneXPEsx/fKXvnL+b3rPBx1yyP6XXn7ptzOdTlqdq3DT1lXW2l3DQ3bd+mdskqZTa6tcYZ1mc5uoTw6ddtoZr5r++LVabfDqH3z/J8/n4JiYrGfPbNy4/me/uP7rJ5966iF+UPJf6HV+/KOf+PdGs+nuK+TuM+59p0lqn1z9lN22Zas96ZRTX/vHPEc6Orq7f3jNTy/MUrXqFce+8ravfONrT1prVZrQcXn04Yfueuvb33rg7/v4n/j7v/m4tdbqTNutm3fbJMlss9Gi63p8wq5Zs2Hkve/94Lm/7jEWLlm84uprrrnaWmuzNLNPr3ratuotq52rrlDapt2IjdnTrZjG6dajjzrmmD9kX82dP7fnqbWrHyL3g36WG5L+ce89d1/0YhyXV73qzBOttcmz1yXWWvuDH/zwu3+IunvZFd+92FprR0fH6XPeObystXZibML+17e+fVF/32z+xzjf9lu+4pidu3ZuttZalWZ2aGi3zbK0eH/X/vyGy6JyNfgD1d3ajTfddEu+1stVf6Wm1nLNRuuulQcc2P5Cj3H00S9/x87tO4fJ2ZVZraiOSpPMZpkpjvn46IRtTDZs5hT+LFM2c07PD77/A6/+Ta/1wJUHnzEyMrY2d4PozORl2dRa9AWsY+Qwye9pw7tPOPGkfaTwBAIvRBInyLIYwiNroe/5RBKFRRgEIAVOO8qexfj4OIzlCHwPfuBBG5qxyrR2C1GG9s4ajDLIUoVyJQIsw+5dwzjiqGOWn/2GNx08MjqKSrlcWMPCqESzHRbOwjmV8TklkuUwH1vADxhjNHjC6KviWbqbIbHoOZOWeQIke54ZyxxUMb17pLVFPNnE+CRlx/b396OntxvrN27cde3Pr3/0mbXPPD050Vi9dfvWR2675ZZHVabqs2fPgtIaYxMT8CTN79WbTacQaAA0U5tmMc2t+iGEx5GmGYZHdtPiXXqA1cjSlN4jp8Wr1hqcmQJuJAQvAA+58gomoHSGNMsozoNzmkdUVFAolUAIIsPmx8r3A2Q8KyJM0iSFtSkss5g3fwE2bd6Mvr5Zg7N6+vtz8IQFoHQGCYoDaWvrRE+XnLZn6VXmCpPnSYxPTO5+YvXqXwEWzTguwD1ZmiFDBuEJcJfVKrhAHMek5ApGs4KckVqdQ56MU3fcz+Sz1AQQmzqehdpq91R4C+XVTmXkYhq47NnAjd9qVvc5Ku8LfT9XDNkeMK28m8+KM9jtTfe+cjgR5wxScEgZoNVogUuaQ6RzjCGMIgAWjXoDXArolGa8jdLQDKjWqpg/ONgJAKnK4Ps+oiCENaSqazuVRcoMc8Rrcl3AXafaaLtt585Na9evHRXCQ6ZJMdQk8SHJUlhjICWHlA5C5N5jnqFs8+vekpporJtTxxT4JGc4Y1omrzUG1oGWPCGgrSHFTkgkLXI+VCtVKK3QrLfgez6CIESapeAc/uJFi/ZpxQm8wMO++y7Hjm07ivudUgYmh4lZIM0okq1cKhWUbcaADZs3rR2fmBgy1qJer8MPyIGhM4UgCui1pjQ6YrSG0U7VZAKaafeeLLQhWjwYJ9iST7nZyu0jmsECrGCF+8BYCv2iuWRybHCn/E9XkimGxzp1yjkKOKnCzEWuaUX71/dDeL4Hm2aFmuVHPgZm9eHxxx7Dn//5n73lDWe//szh0SEYY213Vw8zRiPL6P5jjIHv+3tcLnza+b2nyEtfb8YtTDaa6G3vxM5dO9DW1oFjTzh25emnv/rcb33r65+bnJiEgUYQeNBKE3nbWuISWKLTZ1k65RKwU2RqxgVxKIwip4zRECz/nCHIltaaCPa5I8Q5DbglCznnRCQHo5EJwwwYuLPe//G201512qsXLFww797778Xg4DxYbnH7Tbfi7HPOhsoyVKo19Pb120svv+KWdetmsmF/CyWFv/YNZ733b/76k58AUImTlPLplYJWBIaEoVn6zCp40kMrySAFhxd40JmDBXKaTyW3C20ij1IDI76HsdCZRnutY9bn//PL/7BgyV4PrV/zZHGM5swf7HrvB9//sS/8x+c/CKCsMgVlLNq72sEYM9+94oqnv/zlr8Tfv+qqZQCivJ1qKbGr+Dw96ZQT9x2cNzfavHHT8873LV6y5GW33/HLz8/u6z9EpQpxmiIo+8XHkTEWgjFUS2XiN7CpCPtpDDwYSzO41XKl668++okPlIPKPY2kPkwul/HNBx160N+tWHlAumjBoqOfenLNrssuv/y2Hbt2PrRly6b1O3bs2i4FX3/fvfckL3Rs3vnOd+19/vlfPK0URbCaXlPu7uMgV+GyvZZi147dOzZt2LTqj3mevPf97/vAq8981TsBsP++6Nt7P/jIIxgdG0FHeycsgBUHrDzsiEOOPAjA7xy5wnxeu+WWm18NAK0kRVQKIKSA75O6niUW69ZsaF3zwx+t/upXz3/ex1iy15LDrr/+2s8vWbjkKO0+r5bsvSQ/oI5mz4u14RT/YWou3FgDL/Bmv/Xct7wOwO2/777iXB5aqlYX59eAcTd55pxhSil89atfXXPoYYf/wcfluGOPPROAn9/j2bQPk1Wrn9r82t/zcQ84YP9XvvpVp5zWqDdQqVYKS2j+GVltq+J1r3/dEV/5+ld7Aex4ke9J/uXfu+wdvT29c1qtBJ4UqJYr2LRpM2ptbeju6sLPfvKTO5v1ieQPeZ6TTznlsONf+crD87qLuUV8HusIAI889mi8ceOG51Xijz7q5adde/3PPlWrVjrTOCtGJHWmiQskGJ5YtRq33nIr3vq2t8ILPFqzawPGaXQPAEaHR2f/ute5bN+lB954ww3/3NHRtih3pxYuEYZpfAByXq5atcp2d3Wx/ll9tH506zUwoLPW3h0EQVXmC6hc/2UMKFcIVMINg1YGSZxASAFjDaIgQqvZcoAZmpmjyCJS0YQUaK/V0Go20ajXkWW0IAA3aMUt7B4ewhFHHvUKAF2Ut8mhtEaz1US1XC5kavuskzgvQ3PQTbGIYQX6B7CAtgQtwR6U5ecvQxheuHax1rjoDIYsTrF50xa7Yf1GpGnCSuUIcwfnYse23ZNf/9oFP7ns8ssu2TWy8wEYOxKEJdPe3g5jQQveVhOZ0gh9H0YRfKkVN2C1RuAHgAX8MECr1aBFpTZuRiwDGCMCtieRJsq9JgFmGRXrHNCG4qIY4zC5/dUwKnasLni/vi+hNQFvOOcQYPA8n8BgMQGshJBIlULgUzGQxRmkJyCFgLWcPm44EEQ+Dlp50NI9LN+cgAEMnGJzjAakJMu4o5iSRWrKznjbLTc/vWndM5vbam3gUmKiMUE2Q1ioTKHkhbBMQGd66uYJimDijDJcCzvnNNJYDuexBkiS2KmEOdV5qmjCNEryHuwp+6z5WjsNrvM73Vqmk3nw/DlI7i8UEWOmns5OFe95AZ5XCrnam3tN8lxQrRWMdvm83I0LWEuUb+NuNkLA90gdpIxjjagcgQuO/tkDtVyvEm5BP9lqIPA9CMZgALKsGOZmQy2U0qjXG2ivtGFW/2xx1fevfubRRx4ZLZfLroETQENRFrfggCASM4MgQjCfKuSZo6TngINSVEKcxmSJcYUxZ7wAcuUxPjktPfA8KpKNLmxAzJLS73kSI8PD8AIfpQoRqo1R2LxpE5YuWzz3rNe/boW1Ftu3b8PPr/s5dGrwzne/E4V7OS+0GUMYSFhL9ztjbBGHc8V3v/dAq9Wsd3Z0IM0yyo7UBBnzmESiM0e5BrShGC1rDb1fS/dJgi9lBZXeWIs0JTI0Z1N3LeFgOlO0byq8jbGFzV257xtjnDrOIT2BuBVDaUvOB05RIQX13FiarfZCKG3QmGxCSI4g9DAxPon+vl5MjI2hv2/WwR//2Mf+EgD8IIQvfUbgmSbNVXsepJR7FLU5QdpYAgTmOeDTL7PQp7xvYyhypF6vY2ysjte+7nVvefChB+985KFHbi2VqVHh+z6MtkSpt1RkeJ6HuNWC5/tgsNTACyIEvo9Wq+WihJyF2s1O51m6RhEh3JM+lFZQjgpvckq2BSz4tCYHc1wwjT9mDO+sWbOXfO+73z/eGI1HHnsEJ55wAlatfhxPrH0KALBj1w4smL8Av7z9zvv/6Z8+892PffzDmNl+/faK44896+KLv/PXDKg04gRhIPDU2lXwZYT5g/OLhk2aKoRhgGazSQWsDNy4DBV90pMwFuYXt9+6+olfPbHpxONPWLH30qUD1MQzLpaQPmOU0lg4b97hr3rVSS8D8H0A6J010PHWd731E//x2X99P4BSlmZoTDZQbauCMWa/c8nlV7/rHW//fK292r9u3bqvz57VHwnGisUeLTSp4N09NLTj1xS7h1933fX/b3Zf/yHNRovcP6FXJCAU2d6wCIIQfeFUsoiYJjxQf3PKUn3M0Ued8B//8W9vBfDF/OcfvO/BxxYuWvTW/ZYfMFirVuNLL7t44+8CRNJaH1it1vam4jofG6Hc7vHRUVjLsX79ZmzfteP+VOmtf6xzZOk++xz22KOPvSX/pK5Uq6i1EfcijjOEoYfxkfHkkosv2fGe9/7F7/z4L3vZy5a/4qhX7E/3UI8o8vm+NgbSAw44eJ9hKdmG5/v97u7OI6+48op/XbJwyVE6Uy6Gj8j7WZYVIEVPyOcuehmKNVB+B371a047/Iijj+y4+467fmcAWFQqRd+44Juvn9M7UJ1a79A5mqQp1q9fj3KpVB8eHX34Dz0u+yxfvte999xz3FShSOsSAswBY+Mjm37vBscH3/eGcrmts16nUZkspUawlFTnCCGxceNm3mi1XvQO5wGHHHjwKae86gwAJDxaWutGUQWlUgWrn35qzdXXXHPtV778pT/oeQbnLzoKLjrIWgttLLgkiGW+Nr/lplseHh4Zfo51uqOrc8Ett9z2t7VqZUGaZICYcizCEtwUAL5xwdfvuuSii0cPPvTAVx12yGHQmaJxrGnrgY7ujtqvKf6DS7976UfnDsxfoTJFjXKOItmEFbUfsvsffHDNRRf9N0vTbOAD73tfrX9WHzJjCO7nRsOE5KiUo0gabaBUq4DmwFKhlCYZGMhqKCzNhRoYpJlCGJWoMDFAW1sbxsfHXP6fh+6eXlij0IqbUIa0VWsMhoZa2LR1K0yWrjzhxOPOAoCgFBWE41q1BslJ4YBTeIqid1qXMVfzCGc/bfLW5XIwg18Lzf31PF07TTUCzUoai527dmHVqifY3MFBDM6ZBy/wcfMttzz8N3/9t+dv3bbpaul5k5VaOyTj2DW0E9u2b0WpVILv0aK43mxQjikTKEVEm54YH0eSxABnEJLgKdZQ/JJ0kBVDbTOkcQylKTuXWRCsKa8TrMjXutAmV8cZOIQjG7rFpaU9lyuGBgatpAVPeOBuYSo4/U6z0UDkmg9CUKPDlwFmzRmAL30EfoD58+ftl99s8kI777YIxqCsgcocOVnQ1y1znT9D+3fT5s1rUqPGfenDkzTrLYREliak0imDLNNuoawAw9zfqaPOuIS2ipROa904h1v4WwsuJGX05rOwjsJs8qKR82J+Mq8sn81ehn3hhsnUDO/zE5vtnjXt856A1lLMEgMr5kXzopPmpuzU+c+mOlaioFEzF61iqAlijGuEpG5uwoeUkppWVsBAIY4N2jvbYQ1Rj40xGNo1hO6Orgo5Azx6TChwSaRw4zrB+TmROx50prFzx3aYHoP2tjYkcXOrlDIGgFqtgrHRcaRZAs8PABcplcT/n73/DLOjONPH4buq48mTZzQa5RwRCoBEjsY2GNvYBht7k9c5YuPwc14be9c54LiAsck5iZyDyEignHOYHM7MCZ2q6v3wVPcZEbxIwIf3+vvspcvaYXTO6e7q6ud57hRCaJTRMDlptxVFE0GqRF/q+57OWNXTYqndrHVjWHtgqyTTlY2K25FKwTIYstkMvKoHxjmy2RxEGMKrVmEXLAgp0N7e0dHc2jwh5boY39EByzEgwgBm/CAFq+03iVEyq+VDAvCqPnZs27Ej8H2MDI/ArwZgzIBpWHAcB0KEgN6EFRQYV0k2cWzKpaSO6ABDJBU1UgyQodTHSA8VcgXWml9FcVFJ86s17LFpE+cGIj+E5ApSRDpaxdQ0cQY/9PRAzCU0Xbs4C0mOxulMGkEQoDRcQhSGyKRTCCNR97Nf/vLCadOnzxBQyKYzUEICUsKwzYSOndxAmgkQ7w88iUtSiaw91gf6oYAUIdLpFBQYyiPDaGtvxztOP2UmxA+/eNZZZ683DKO3kKqDFBLlsKw9D2xIJeBaFqIgRBTQcME0LQgRQgiVNLYMXGdHCx3HR/pmSGp+Pd8n3ZlB6G8kRW1fgZYNcAbOlGY+AG9nBOgJJ59w/FFHL16wetVK5HMZTJk0EXffcx8aGpoJIRzbDr/i43vf/f7VxeGhjfjn6x++2lrax999791fybrpFs8LkHEdlCrD+OtfL8OyY07EpImTEIaEltmODUBhuDiEuoYGcIMj8AMYFpkmDhWHD/zg4ot/dfkVl1430jd4YMK4ycf/5jc///77zj33VMOIn3UKhskh9HOvrbnpnQBuZow1ffVr/++7P7/4J59kgFsdqQKcoa6hDmAI/vS/l1765c9/5WdhFOw57oTj5rrZtAfQ/UnDPjoeN+2i4nm45JLfr1x2zKttTbKp3BG33nrrT6ZNnXJMpTwCEQqVSqUYGOAFIRzbAhRPGCxS0RAp7nJp0MeTZ52I8+KlALMMfsoZZ3x0ypRZV2/fvrE3/swd27eXAWwCgKuu/tshXZ/FRy0+kigXoAB0DnAYGB4uoqu7B23NY1Gp+qU//f6PN2/bsmHk7VonH//kx97pWubk8tAIDMdGY0MDTjvpZIpMkgqua2FgcGjD/s7uVYfz/q2tbacByFWrHvyqh3whj8D3URqpYOv27airz2Pz5s0v7dm981VutjNnzjrl6aee/tn0GTMXhX4Apfd7KQUM0wBjho5s4yj7/v7L/vznFwKvWv7ShV95v23bqaQo0bWFkBK9ff0NftVzDws1fPc7T/rXCz72rnh9CklrnnLQLUyaMgnr1m3YtH3Hjje9P513/gfPzWWz00MhYSbPU6rtKuVyccO6dYf1GVNnTT1i1fMrTwdAKRZhCMswtSeKgm06hEwWB/f5flB8q9fbccce9566fKEBCrC0iadSDG2tLWAc2LhhS1/n/v1Db+YzUoV6+w+X/P5IEUmEUQDbtIjpJWjwrSVRleeeX/nQqwYsza3GZz7xmc8smD9v2WjgijFARLXYsPsefODB666/6eJsPtcgZHgUgGbOiZEarwnOOSZNmtD2et/zIxdc8OkLzr/g/VLQwN9JOVRJCCC2ddqxd/fmyy7/69XXXXXt3nef/e6zvnbhlyePG9uOUrkMgCW+UzFw2tjc6JimbUKBzKiYdgH1Kl4ScSMkFVD5fAFKSfQPDCCdTsE0LUAxmKaBVCoNzkxUvBGUhgfR19sHpSSCMEQml0djQ0OuvqF+Qi6fW3rmO8/8lw998PxjpQLSjpsY9PAkkiXOmjzYwzahoY5CBeLJghxlNKV9WF43NIa9JsgmNR3WGEUrjTM+GFpb21DX1NB1oLdr1449e3o2rNuwZvnyO2/bsWv7qsamRtiGjcHBQbhpFw319SiOFGFbFqIggOd7CEWAIAjAweAZBmXHcm2QIiKEYQTODQRBANOwEEZhQj9UWo/K40Y8RtbCEErryUQUQmlqnlIysWg3TUNTdGkhRzICY0ojsNTchTLQOZIcSgZwHAeZdBaBTwY/9Y3NhLr5ArZlolgahohEbuHCIxcAFIVhaEqgYrphtw1YtgklNDE4NvpSDEKbYADAvv3714tISMkJJWScIfQqNPPgJhQTMKxaXIthW0lsSxSFFFHDiSIao1wxEsoVIWlqVMMYV9Z8VCZpbWGoUaAsG5WB+3qjkVE5g68F27LRyLA6mLiparE71OjKpHWuGVvV1n8c4aBipHcUehcfn8HIkVkqTWNmIMaAVGTco5spxRmkDNDT042Uk0F2TB5ccUyYMA6Tp0x0AGBwoA+248JJOXBdp4ZOjwKs+3r7oZREc0szmlua4VUrGGYMFa+63zA4qpUqwihEJELKsY4ov9TkDkzLTChOURTp96XrJbXLgNLUagaGUESJvrV24+v8a9DaNbmBqufRwMWwdLNH1OFQKdi2DaEkKtUKUqkUHEU64bq6AqrVan1XZ7fd2NKI4cEhHHvMMYhCReuNSb2+2EG0voR2rn/Q1dmr5s5f4D33wvOoVqsU46QHV+VKGUHkw7XtJFpNJRm1mq2iXWGkQG3goWn6Sbac0uZc8XnSiC7XDZgUteEJTdcpt1uCBkKckamb4zgQUiCKCOWMBw3gDGk3hTDwIZRC2nWTGKZcvoCxY9qxdctW/rF//+h/vO+9732/73kIoxCpdFpTiBnSToq+W0wqVqPYFJq6HoZEmeejacDJeZUoV6uwXRuN9fVwLIq927VrLxrqmt912smnv+vRJx75e119PYqDIzTsIksxWNxC4Ic0jNWNNeMmQp+MiDhneg9kSSoBGWjR9JCM7+j5o4QAYEL3xvqY6FlBWdfQNPea9v7teDU21Gd+/avfnMF83/nJj3+Ec84/D5Zp4Ix3noa2lhZ4foBCXT1WrXx5/bad2+//Zzv7f7+OPenY8xctOvIYKQHHIUTCtlP4xte/jXw2h1BFhFzoGkREEVpbx2jmkYBpU4Tjls07HrngY//ykxeeX/Hwb37+MwDA7r07npw8efLF8xcsnDVlyqR2xukekJK4AQBwzLJj3332e8++4YGHH5h0+imnHwkFMwwFYBlIuTa8arX7S1+68H9uvPXWP/rBSAAALS1jRMZ1/YOqFn3vKyEhwtBvaWrZPPo4Gxpb+SlnnHrWg48+9K2lxxx9dBD6sFMueNpI5rSuQ4h1HM1omgY4oNZv2LL1zrvvWPHcs0/vXbrk6KVf/8bXz2CMJ7nrTGkDR6XQMW7c7HHjO2YA6H2z18Zy0vYdd966KH7GJnWhvje7DnRj2/ZdaGxq2XrPfXc9+PZR3rnx9LNPLgMAJ5OGaRmJzMm0TKTcFKIo8n/zu99csWvP1kNGmceNm5B/5NFH3wUA/X39SoiQ1TXUYaRYxkhpBOlMBiLCgVvuuOOm95x99sGNckvroqeeffqnUydPWaQExarRMJpr1hFg2Rb6+4aGbl9+9xVXX/P3Pz760APbJk6anP7kpz9zum3bqZjxxTRF3DAMlCuV4e6u3sOKuzl26bGnAmj2gwiWaYAbtXmnYXIYcLB8+V2PbFy/YdebuS4trW3TH3nskfcBFAcKKXUtIWBaJlavW/fyC88///LhvPe7z3zXOflcYYKSgGUZEEoAXIEximaNZSvPr3xx5a4dW8tv6RCuvW3sY48/8W4ACKNQy2oOlv1MmjDhiB//6MfXX/KH39xwyR//eNuW9VsOufkdP6G99R1nnDrPMDkYc8AMqjXiaEMO4JHHHn/qoUcfevaV//aYY455z0/+58f/qoQiZojBwQyG0AvJG8g28NJLq5/7f9/8zlf7OjvXzpg9fc7ECRMYAAgNlozO4z75lNMbX+s7nv2e93z4mmuuuQhASogIdsqihSSZNu0Efve7P9zxs1/+8rv7du9Y+/C9D7X86Pv/dU59fcEZKZVgWhYc20n2DiEoP50bJjdjdMi0Lc1X4cjn8giDiOIZOMPwCGXqAgwpN0XuwVGEcqWaTMOzuRyaGpuQSrkwTRvtY8emTz75pA8edfSSd02eNGVOY0PT2Lr6fCGdStEJkK/Ax1RNLzK6h4j/m2IH00tHtxo8djpNppEMNdXoqMZZaWUNIxdflkwxmUZMJHXM+uVVfTzy0OPbVq5aec+NN9+wfM/unS8ZhlEaHBr0c+kCGhqbkM1Tw2CWRhAGESoVoiZXSlVEIkQq5cKSJiG1QYgoDGGYJoRSQBRRxq0IIBi5hFJxBdLwaboSZ5zoj1qT8UpKp9JusTG5GxrVDEM6XlPTRpUEuEN0VSgG27KTrFND6wG9ig/HJt2Mk0oRW08JpDMZQCiUqyNobGzumD595syE7ol4EEGfIyETgygpNUKmfyfm7/d0d5cee/TxVTISyDcVUCwW4XteYqkdhJ6mkpBWM6Y0QCko3TCMHmYwKEjFaBrM6HrGzbF+gB1MRdTfdLRO91XNrXqNKYl6RTv6D3jxyWBmVL7vQb8+WtOrzx9lmI7iP2tahtIIOhlwMX1sSLSuUJRJS0wH0rvGmgrGFemhOddorQEmgVQqBdu20NLejP0r96Bzf6cTeAGqFV/YtmtwzmqNplIUvcJoWJJKkVvo0OAQAj/E2DFj0dnVJfr7BjqjMCKnYMHg2C78IIBhmAkiGYkoQYkp0zaeN9Tcq+NzxTkn2joOZoZLldAKtH5c6CGPqfU2EkwxRJLcmRsaMhBSYXh4RDusA1EQoVyuYOy4jqZStWQMbB6AZdjIZHIYVhWYjkWN4ut5cbMarXCgr7+ye8+eYdt2kMtmIaVEpVSG51cRiQi2aUEqkMu4IsSCLjXdq3EurICg6ByLaLUiEgBIPlJziZfJXoY4R5ZzhCrUNG7aTGVEwyXbdvRUlUGGQmeeE+0/lU6TbMP3icKpqXCWQ6ZWfrWshyccgOKLlyz5wIVf/OJnAemWShXYLk1eacLODnLFH72+kwc3Y9pbgL3i9qLd2rTIIGp4uIxCPove/j4IEaE4UERLS5Pz2S989mOPrHj4Lq9S6VciQjqVQbnKwE06XtM04QUBrSRuURa6RtqEpL1UKgUhQ9i2C664HjpIQJGzbpxBCkbIR9wUM4Na6zjrWcUpAnoPfTte7e1jFh179LIT+vsHMXXmFDV33mzWP1TEqmdX4l//5SMIwghSRrjrnrvuGRkZ2Y5/vv7ha+kJJyz+8x//cEFMlzUZsOLxJ9Dc1oYZM6bTXiJDYpVEEXbt3o2WphbkC3nSkxoMjPHwwQcf+/NXv3Lhd9esfelVSM+OHTse+8XPf3nbRV/76ueY4lCaOSQlPSGPO+741uOPO/ZDjuVARgJ+GMHgDCnXxoHOru2f/cynv3f77bdf+5f//XPynstvvzP82AUXyNkzZ+k7hSfafW5wDBdHDqxfv/YgPevpZ5xyzlVX/e03tmmPp/ufmB3xvss0o0FqWZtlm4iU7P3+93505Z/+9y+XD3Qf2AgAmVy+8dR3nrli8RELZsbPT6Yz3oVSyGZS7rKlS+YCWPFmr8/cI+fNXLxwyRz6jjKxeVQMSKcz8CMPTc1NeODee54oDQ93vl3rZPK06XPaxk6aS2ifURucQyKdSkGICL+95LeP/u53v7n1t7/99SG//9iO9lnTpk5epCTgOC7b39WHCQCGBgfR0NCEiRMn4Bc//81Td9+1/NHR/66jY+z066+79sdTJ09ZTH4Mmm2i6ElkMJK67d3Xufezn/7sD5ffddtlH//3CwAAJ558yrJCoVBX4wFTDRQJAcMwMNg3NFwcHvYO9Via6pvGXnXV1ScAgGWbACRobFKr26uV6tCzTz/16Ju9Lme/7+wT5s6avYiQZAEzAQz0fXLnHWt7+3r6DxndnTFjwaOPPHx+vC9wg8PQw+gYzWQc8PwwuPWWWx656MIvvbUsnmNPfvfMadPnhhFR00UkSUYqKdVBKYUFR8xPH3nk/HcAeEf7mLEtAH56yA1v+9hpY9vaJkmpmY+SBtOmQfKeasXHf1/8P/eWhwcPorVn8/X5m2664V8BtES6rg6jEDbT4ILJ4YViy3e+/f3vv7Ty+bUAkE6ns66dyiBmRbHYe4b20fUbN5lHHDH/4PNwykkn3XLDjd/K53IdYRgmUlopyAfGAMOTT664+ze/+e2F+3bv2AkAnZ2d/Vu2bXOOXrIIgR8kfjXqFXr1wb5BwePmiBEcBhkJlCtlVP0qGANchxxDlVQo5AuoK9RBKcBxXGTSGTAATS11mDB+DAq5PBizEERy6nvP/cAPfnzxjy455+z3fGje3Dlz2ttb6+JmVwqV3HPQddLrQbAKo2SW7HX4yEwBSkIpSQXKqzAyVQtSV3G8ykHjPHDTADiHFMCzz6zc/ac/XXbzRV/7xkWf/NQnL/jeD7590dYtWx8KheoPAuHn0gU4aQfMYBgsDmJf5x5EMoRj2vCqVURRpBEXAa/qQUQKJjOpyI8pxTJCtVpCpTJMVGZtwsQ4ACnAGYNtWZAqShozqSgVnimK5bF1frLJLbLrHxWhQdM7bdalFMKQENEwFLR49MmUWqNGlEQGy3ap6APQ0tqCMIjgeQHctINCXR6DA4MYM6ZtViabbk6aOVZrOgFACUAIIOISitcaUzCaXgFAV1f39q6u7vWRCFEql2BYhAoTKik1uM5gcpMoN5FEFAakg9ZTPdMwdTMoRyFEurmHouYMsTxd8xG1UY/StvkH6cRZDb3Fa1GR1euw4PHaIG/cYL9W06ygqamjfsaTZlfrHSEAg/KSucGhQN9bytofME73k6J2iTEGU+evUi6vNjyKKGpCRRwWs5FKpWFaJiA5env6MFIqw7bTE2zHRjaXN2zHgcWtZExbA7FoY0xn0khnUohEiFw2AxD9L6r4lUGhBBqbG1HIFYg6yzkh/lJp0yToDQwAM3QGLxVdhtaCK11QJWhcTDlXpJnljCUDIp1ITKMWIQiFMSwagogQpmmhXKEBSjaTQeiHiCJCe4PAx5y5cyfa3DQD38OMWdMxaeoUzJ41WzeYKhkwjV4CSsoEjQWAocGBvVs2b97uuC4c20XgR/D8AIwDmXRaDw0oWsm0TMAgEwzSM0O7i3N9TxLdKBIRDY+0Y7BSCiqSyd7J9fqNIqLw0j5XK2AUo+suRETIsoy0FpjDdR0azFUq8D0PluvAsR1YnNZaFEWo+j7R44XA0GAR8+YvmHvNtdd8bfqMOVPKZQ+ZfAaZtFvTEcfnKln/bJQZtz5/khBSkZj2IYmHA+japiwXoRegt68XA/09cCwT02dMU3v278aRixaceP6/nPefXd1d8ESEIArADa4pTA4sy4JlkhOz69gQMqJ4NUlsAcd16VwCCEUEKQWUErBMogBKobU/ejBnMMrc5ZqBEE9mOTf04KSmA347XlOnTD0qU5cd8/cbrkU18Nj8ubNw791347prryZk0jKxZv3aXZf84fe3DQ32Cfzz9Q9QO+acdea7PnLE3HnzCR2lG8m0GYR+LilBkiFSExnI5uoQRRGGBgfJG4Bz/P3aa/70gfM+dNFrNbvx68Ybb7o/ioSvdGEeD+OlFLB0FnTgBShXKnBcG7Zj46XnVz513vs/8IXbb7/92le+3/HHn5heuHBxQZPOEkOpeNVt375t72OPPpEgjbPnzp/01Qu/8g3btMcLQfecyQ1AUrnEtdmWFBQDaNkmdu/d89J5H/zQZ35y8Q++FTe7AFAeGe6vDFf2xHdxLKUBA0ojIwoAxo2fMP4tKfyPP+7IlubG5oPmzXo42dnZjaXLlmHmtBmVO++666W3c6289+xzl2bSuTF+GMRzZWK66dp11Uur+g907r9PKXVYTfe0aVOXADAVU8gWMhjbPhYADa0pNhDYtm3bqr6u7gRJnDVr9ti///3vPzv51FPfEfnEyGQsTm8gVhU4sK9z375PfPKT311+122Xjf7MCePHLgJgJwwiRR4c8TN5cKB/0OCHHhl0+plnLD7x5JPn14YUPGGjxfXV8y88/+za1WtffrPX5ciFC04AABFEJF/Udvlc77+Oax/W9fj4x//1rHFjO2bFTbrSZoiInwX6OHbt2rFz+/Zt69/KtdbQ0FT3pS9/4X1UF5HE0TDpmeoFPvnhJPE7tP5amtoWHc5nzZw2fXF8bxEb7FXMxXK5PPzCqxvyY888/ZRTTyNmidA9BhCFIbjJsWP3rjWf++xnv7Kvc1/Cujjp5JPGNzQ0peL1xl5RB5ujM2cBZLL5cRf/8OKvNze3zA3DkJhXcXyiloU88thDT338Pz/+7R07tiRxRr293fbKF19w6XloQ4TUP0m958az6Lr6QmhqVgplt0oJEUVwU+QW54UeBATq6urBGUN9fQO6u7rRP9CHVDaDsR3j0MQbkc276O3vRXnEG3vUUUeffdFFX/7wO975jqWlUsUSUsC27MTAJO70eYLAvpaqtvYzdhCJ9JWN7KgGQunICJ6Q6Q52X459XZRExfNhgGO4OOyteHLFgSAM+wuNhaFt27Zvf+GF559a8cSK5/r7+nZEIhJuKoW2tjEIwwClchkSDKZhoFqtQMgII6WSdsi1MFwehuO4AGeQUaRpcgT/VyqVxGTJNDgMy4QU2liKk35TCtLZQSlUq9UECREyGoV0G2AGEkMVxjUlXDcNlE5jaI44S3SahhFf31ifI+F5HhyXdAnVqod0NgfIEEpRFMrw8DC8wEehrg6ukwLnDEEQYMas6Yttx0EYSXBIMMPQucexswtdAY5RHPOa+BFQwB13LH9s9+4d3el0liY4kYDveRRDZFJWMFEOqQhRUoEZhna9JFaC5rOPMjFTyblUumCJBzpITK9oDMAM3bRoavdBA5dRZs44JODmNdbyK1gLKslv1RQpVWumGGTiCpt8CaUw2pcrPmzSaesmiLyGoEaTrfXxen4VQpLuXkDqLGYFKRnKpQoKhToYhoGpU6d2LFq8ZG6l4kHKCP0DfWhuaIZp6SknWJJxykYNkJqamiGEQHFoCAN9feG2LduGOOfIZrLo7e1FtVKF7ZCZVCqdQbVSoabLMIiKD7quHByK0xAjishRXDGutZGslt+qmybFCDFJYqI418Mbapxsx04MGVzXRtXzUSlXYHITpklonWWnEcgIy5YunTZ5/GTs3LUTGzZsQEOhHvVNjcjnMomRGEON5i6lhB8EcCy6d8rlKjZt27KmODy4KwpCGAAkIjCDgXOT9LFSoVKpaPOj0W56TN/jkoYgnD6HmmH6NSFEwt6I6bOcmxBSJIwVEdPepaoZx+n7TgqJtOsiCkMITvdOGEnS3msWhl/1CRmHADcYpJBI2SYAE/mcjcD3sHnDhuOYwRYpRdTOdCql0XSlKWyEeMuE4MxGmQ8yXWhT816uVuB5PgoFigyiGlqBKyCVtpHKNBHVq6UV1UoVPT3djHEO13LMy/5y2VcGhko99955zxWzZsxGd1c3evv6AYMhjADHTUFJhcD3qRF2tEO2Ygh8H1IKmLZD7JrIp4GMZdL50m6QUghEWtcUP2+UhN6vyZ1ZQcIArWUF9XY0aObvL/n1kW1j2pBKOzjyiAUwuYUjFy9Bx/iJSfrAfQ88+EBfd/eL/2xp/wGFtH0cW7p02bvPec97PkBFG7FMhAywYOEiuFrWKGSI7v1daGxuRirloq2lCVJEWPXSSkyZMh23L7/rqc985vM/9crFf9gYrHp51WMrnntm50nHHjczfj5RRqgEQ2zCqJDL51AuVYpXXXnllb/6xc9/s2XH9h2v9X6ZXLYhX5dvJbSE1542uhB30nbx/ee+XwHA1OnT2+68a/kvZ0+fcbQIdXPKa6ZTjJFDOY/TDMCw4umn7v/YRz/6/3bu2PmqRnL8xBljHn/8kSnxlhU3F1IqDBaLsCwHg4ND7ltxnWZNnXFCjLIxPZCI/97S3ILHn1iBcrW6a8aMmW+bWVXOrWd/u+qKU1sacvo4ZaL7j1/XX3/j5muvve6ZX/7sV4fXUL/vnMW03iQcy0GqycXAQD/q6xpRKBTg+SGqlZF9o/YC67LLLv3mqaeeds7QwBCy2Qw9FTnJKxgDBoeLWLV29c4//fEPFz/x+GNXv/IzJ0yYSE1pJBEK0qhbFpllAUDf4OCBYnHwkO33lhy15MR0xnFiAKTmrRhnzEv85c//e//+zv1vytV4/lFLZt5/713H0zORENAgCGBaRrJHb9+265Ap0/X1DS0PPHD/e4h6q2toxg+2XdH/z8svrX5xsK//wFu53o46+ugzjz122QlRRH43Bo8dyYFMKqXrP03vl3QTD/QVD4tSfdY5tO5iZmZ8XJFOJ9iwaXPf3n37Dzq+6dOnz37g/ge/alpGpur5MDnXLENC9Hfs3ln51Cc//esH77//7oOeX5JPeFXnFi9WAPPnzUsnCHK2YPz85z//8gnHHfdOPwiI9WZpWW1EEr1I+YM//dkvfrNl8+aDMqlnz51bf8pJJ7cCwGBxEHX19XBh69oHCYjU2dk9YlqGBS8UyOQLEGEEz/fQ2taGnv5uhEEEzm1ksykMD5fQ09+LxqYG1NXlUKqUEQUVhBLo6ukeu2jJkad95ctf/uhJx51yiu2aXCoJJYkKN9o6PKEnjqID4lUgGHuNVoIlvUNs7HNQI6unnVIKch0zTGr2AmoobZdu6n079/Xf88B9K194/oVn161Z9/zOnds3WZY12D/QPxwEfsS4gcaGBoofsCkmSUiJwA+Rclz9kBSaegqYII0tUwwSgoxQQnJRNW2TKIzMQBSRhtc0DEipEFR8cEM3unoSJjQyIyVgcQ6pKXjQlugG55qyyxGKkIpxPZ3jnIMsISmGBJKDK2q2FRRl9UpJulpF6CaBp1REm44Dr1pJ3G0BB66bAjjDyPAIGuobUSlXUa6UW45asmRp2tE0SY34ERIWI6/03clB1appUxVRJcvlsnfffffcD5A7oVfxKAYnnYGIIkglIGQEMBN+4EHp+BZAEm2ZaQqoQqKxlHoDh0b44+xd+RpobVyEM229Gt/8alSny9QrHJbxOkiuek1ot6Y1jyed6hXd9KjpJ+LYIUbHg5hqrZt9MJFQqjjnesRP15JpAbySCrZFrrUxW4BQDAPZXA6RELqpMRHIEFEg0N7ajpGRIoLIw8knHNfa0FQ/PjYUyGayMEyiWEuNdMYDA6VhBiElTL0hVcselGJKhpFQUmJgYAChH1LEVRhCCE+j1IrM0fTGl7QTjJADovSQoRW0dpsipqirJ2q/SlB907II1YxkQl9hYCiNlGDaFiyt++ZMEU3IZrAcG5bpQAgB4QfgBm+z0haOOOJIPP/CcxBtIdra25I9S+nOIjFW8n0MjwyjtaUVAOBHHnbs2bm6v39gpJArYLhUQihCGAaH7/kIvAi2ZSKVTsH3PIRBSFTzWMXLNfWfaUYGYwdRfZGYz2nNtgKkUaPnx2srzqAWUUSOxbZNPIEwomgxALbrIvA9CBnBMh2kXHLTrngl7WitwGHSuTUNFAp1KJWKKJfKrR/91387q72tnXmeR02xIpPAOAIMB7l+0pohM67477FnvKKhKlcJA4WzmrO+0u5QMWpqOxYeeORBzJ+7APmGPCxYLVf8+S9fO3nzqZs79x142rYtitACSVJKlTIc00bKTUNIHbMWhbBMC0EQwICJSEgI7YSvFIPnBxDaOV8IASHJLd9xLERhqKfFsZvCKCM3SbSwt6PhdRyrae7sI+YCDOd+4FwMDw3BYAYyroux8xYgEhJd3Z3y6quvf1gpFf6zrf0HVL4ZkyZ891vf+sTc2bPH9XT2or6hAM+v4rmVz2HSpMmYoJ2Zd+7ZhY3r1+Oc97w3GR9yw8Ts2XNg2w4eefDBp7xy8f8seE3TXGQyM58wyDjVQZbJtZxAwrYcbNy09fmLL/7BL6+75to7pFKvGzdSjYIx9YW8QaRaOeo5DYRhiL279jvpVCo/pqVD/eKXv/zV7Okz3hdFNOhlRm0YGpsjMsXixtn782V/+dvXv/K1/x4eHn5Nd9uJUyZMHTN2zFg6FE0VVPRMmzRhPAOAzn37zTd7jdLZwtjHH3/0OOoy42d07FfAYNkGuro7vYefWPH83n37t71tw5EJY+YtXLjg2LipVzGLTSmYnENEAlOmTDnQ39e/5bDW4vjxTXfdfddCOk4GZtJ13LNnD8JQYknrIuzatcvbum1rMkT44AfO/fDHP/6f/+r7HjLZLEzbpMQEhcS9PwzFhh9890f/9dBD99z0SlfscRMmND5w3/0LAICZHEwJzewD9ncdgJASa1evO+SIp6am1tZbbr31xFrZw0ZFztFP9u7du2Xfvn1PvtnrMn/67NPHNLZOBAArZUOGkZanAJZpYMf2XX0vPf/SIR/DqWe849QlS5Ys1ONhzRJE4pkWN/DdnT3i1ltufzII/eitWmt2Jj3m8ksv/yiANDeT0SpYTHulNDxK5YjIkAwAtuza9uyhflYmV6h7/rnn5yaUhaTzVYmRbHfXgZHuvp6EuZJOp/mll1722YmTJhwlFWA5FlREQJFpGDC4geGh0ss7tu88yD9i6VFL3bPPene7RnmS53oscwQM2LELGIB3vefd7//sZz71H1Racl3TSkDpqEnLxrXXXnftqpWrb3/lcXEm6tOZVEssW3Js6vUMzknbbRrYvm1H6aknnxoxoyiEYQCe5yGbSiOVdlGulKGURGtrE6qVEHv27IPjOGhtbYXBDTS2NaIQBti5fZd7xjvO+MBHPnr+f5x43HHH5LK5VOwgCqYz6FQtxC2JEnrdtvYfTLtf1XfUmgnFYmMImsj7kYAKfChFOZ9DfUVs2rhhy5MrnnrgkYcfue/A/r0v7N67u0cqCddNobGpGa6bQmtrK0I/QqVahqWbh0gKpFNpRGZATriGAaEUFTlSIJfLIxIRqn6Zcmsj0sgyTbNwDA4/DGAYBjgziTYeO7+CaKpRSKLvmGonlUiKW845DFMbQGnKuYQEMyhy5SDjJSi4TgqezrRlhkE6HcZgWw6qVY0wiXi6w1CtlGEYlnZai1DX0ADLNDEyVIQfOEilU8gX6tDYUI99+/dhwuSJC4499tiFCZ35tUSsOvMSbJSmWru/QgJbtm3dvnvv7o2pVBqxBqXqe2CKwbYtcBjgpoXQD8G5CYMDXuQTYqsjtJjFk8Le4AxS0s4gtebOMMkoaXSWEBtlIsX1hqK4pjwkG0BstFNrcPAKJ9nkUaL+AcKbFO9UXIw+TTE9OKFiK1DnYDDKq1GA0sU+07bvUsg4PCJp+Limr0O7bsebF+Pxz2nY4vsUa5NJZRBGEQzbRjrtwvd9uI4LUIPaUhwqZguFAgaKg2hsaNRNp0rWJQNZFcfHFbM4hZAIPB/5QiE3dtzYxvUb10PKFAzLAmeAYaUgogiB72umB0MQaHSSa/MVTROVmi7HNMpWy5HVUSBSQukm2DAMhGEIppupGEExTBM6NhhhFCaOxIopGAYhda7joq+/B4Vcxmyqq8tVPB8N9Y044fgT4flVxJp3mufovUZPr23bQj5H0W1hEGHn1p19G9asfS6fzyEKQ8rNrQoEwgcMGvyFEjAUIbFkWqdNtZSoZRCP8lcjozntVh/nS8fsFR0fRHpU4ijGBmaGQbIMISJ9Xjk4TIgo0kaDtD4MmIiCEMoGDMOEZTiwLEK/FYC07cAPAgwO9qNUGsYHzzvvI5/65CdOI9qQBdux4UcRbG5ARgoVr4K0myKzDSn07G0UAh9nLTNiN4S+h9AXMAwgkgG4BLFNVBxRVXs6SAmceNIpmDC+A329vRgeGsHMWTNnffd73/rCeeeev9l2nP5cNq+HeAbK5RFEIJaKwU0IQbplQw8RpawNR03D0mi4gqW10FEUECLGlJbJiMTYRWl2mdQmH7THHurT7A0WePPnzTxy8ZGTAWDblq0YHili6tQZePyJJ7BgwSLMmjkdvucP+p63Hv98/cNXtVI9Ytkxy04ABzKZNDjj6OsfgMkdNDe1JUheuVzGEUcsoH1ND4YBhXSaMjknT5/yupEnra1tY9937vtOPeG448988skn3rVkMVGQk+hEoVDxfFiWCcu2cNVV19z1jW/9vy8d2LtnxzVXX/MPv//Jxx+3MEFLXuFm09XTg3wuPzb01Xd/9OMfz7rgY+e9Q2rPhwgSTLvDG5yG7VzR4LC3t3/3hV/5yn9fc/WVVymlKq+LeGbTWdfkbq14rQ3qQj+E5Vg45bRTjDd7jT76bx87fcmihdOTZ6RiWn5FdUS5EmLpsqXFK6++8oHHH3tg19u1Vs5533veN2nKxPbe7v3I1zXActyEaSWhYJgG2tvbBoIgGDqc958+c/rsSRMnTk7ooaD6ZeKkKSiXS9T87t5tLjzq6OOnTJ2x2uRi7JMrVnwTQC4KJRyHIRKCPAu4CZgMj614ctWXPveli1avXvWaOtnZM2YcMXPmjKlxr2NZJgCGgf5B7NyxA7Nmzurft2/PIVOO58yZderxxy2dH78vGz3I1/97y023rtm0cePmN3NNmpvHZq+86qqz4vpN6cQH13IRaglcpVzuC6PokCjNpunwq6+87r0AjFK5DNd1dLoJkmQRBjJn3bFn9+a9nXtfeGup8+9718c+8uEzidgnk+DV0Y8TMqOseV489tijL/7sp/9z/9e+8uVD+qy29jFTWtuaOqhmU7A0e08qJJ4qEydP8sZ1tCeV7dhx4087Yv7cc4luL2CYBLBQcgUHgODBBx66Zvu2LQedd8llQ31L/bi4GJa6vuGMkTeJElBgVQDoGD9h6vXXX/tlAHW+H8G0WI1VJyUsy8LGTZtXfOc7P/hpb3fnq4YNzU2NLa7rFjhnGNcxnkBJoQEEXUc0NDaEEyZMCM1UKg0GYExbGwzTxNDwEDn1ZtPI5/LoDfrRUF+PKCS0tOyVYDk2Oru6MHXG9A9f+r9/+VEm7Y4NwhBCF6YxCqE4P9i09jVyFw+vTGCvoG9qnQxIf5NKEcrR3TMwtHrNmhcfePDBB2695dYH9u3dt84yTNHS1oKW5jZEKkIYhBgYGIBjW/DDAEJKlMoVNDamYHKO6nAVJTmsdWDU6AZRAMd0UK6MILBsTR314dg0ybC0I6zveUSV01mcCqSpU7p4Iq2dBUBoTWbtqCKh0V0FKkw1lY4maHEWqs6ZYlzr5iRpZBMHX5lMSiplYkAYhgFmMZ2PS1m8QgjYjgvTsbUBUATHdeCmHJSKJXSMb4BhGejp68GnPvupIydPnJRPHuSqRjKPKYye58Fx3JoJmV4AIhLYtWs3brju+h2DA0P76urrEQQBmWkxcpv2fQFumnAcB17Fg2VxOOk0vCFP5x9xGDyOFiF0K9Z5jvI2gopUYgBVC6jmSUwT5RaLWjPBVA1p5eQIdxBlHrFLH9O6S/YaZlav1ANrVoJmM8TMBBXzIxUblQmcKCvoJtV6yNg9N0GmY1qt0gY6DOSQBwYRylq0sG4yDNNAEPrgjMOPiIUXeSEymTQiKeC4KQyXBmG5TltDYyOkEGisr4fUGkvGOYQStH6ljumJZQmco1KuJOhhuTISWZYlaEMN4XshOGNwMykoRU2d7djwgwASgqb3Qu8CuhGG1I7SSmjEtkapjhUfCuRILGWU0Nq1tbfW28TduEqCzjnnqM/lMFIugzGGcmkEUkpMnTF7Wl1DoW1kZAjpVBb19QUUhziUZKOydw/OYDYMExwRSiMllEolrF+/4aW9e/eu5UphaGRYN9wKruuSFjcIwbUWlukmNQpjJ0ZtrsaUdhWP0Zc447XmcszUKKOnxABBm34xQEWCMrU5BzcMyIhM7izLhmk6iSGTUoL075YBz/fIRdPkCCIfjDkwTRsiVDC4iRmzp6PrwIFp3/jG1z9qOaY1XCwhmyUmkmtZCIIQBjeQS2f0ME9A8VHuCYmBXghuWUkunmOnIaWHcrUMx3KglPnqyab+X8s0MX3yFADA4OAAbr7+Fiw9fimmTp52ztLjjnv2mRUrfoesVKbpIhICtukgzkHNZQvw/Qq8ahWBCsC4AdPUWudAQWgXasYZwihAEKrava1Nq0ZHrtFeKxNnccIEFN4GgBdLFi9Zls/VZcNqFW7aQXvHbEgpsWDhAsycMR1KCIRe1Kki0fPPlvYfUsPZDy/+4Vn5XD4tI4VMPoPhoUG4roNlS5eNYsNwzJs3j54lSsJgHKN2bIyUSsEdt9257b+++30qDidNrq+ra2zNZdMTTzr5uKOW37X8tKOWLDkKgBNDREojrL4fIQwCinq0Laxbv27gir//7VcH9u7Z8X99/9lz5jb+/Yq/H+P5IYojg2isb4Q5qr0sjRSxZfvmSXPnz/n3D33o/XkAiELSp3Mdy6EUkkE7Mw2MjJT3f+HzX/jq9Tdce8vVV/39H35+T1cnL1UqyKbTiSaO3IE5du3eje07dlV37dqz981ep0/8x7+fHO8ZiI0nIwXTMRFFAS655PdVCbl1aGhk3du1VqbOnNl403XXvFNFEcJI1EwilSQKOOfwPQ/XXnv91vee877D+owZM2YuyOXymbiJiASxUOoKeezbuxdDfYO47robzNtuvf34JUcv7vjxxRdPbmlpm1guV5NnRlw7cIshEtHAz3/60/95vWYXAI5ctPAIxpidDNr1MySTyWDhgoV4+eWXN6xbu3bDId5X5lXXXX0O5yR656OYcqPr/NJwaXNPX0/pzVyXjonjpi456sgjksZaS/mEVIjJx0HgdQd+9ZA+Z/z4sTNOOGHZMZUqDaJMnVms1OgkBjpnTzz+5BPPPfPs5rdqraWy+bYH77//PwAYsXsxe42OiJrdJF1EPvnU0zf1dncd8sBn6XHHzKyvr88pkHN2TAKIPUSGh0Zw9/K7Bqt+YABAob5p/N+uvOILM2bObgtDEXu2wdSRocwAbrrx1uUXX/yTv3/taxce9Flj29udU04+dQwxUCgnPGZEmdyAYZp44fkXw3nz5heuuubKLx637NhlQkiYFq+ZrkYCtm1jeLDY9bnPfP4XO3Zsfs095oQTTp7U0tJiF4sjAANy2YwGaUZV1kIOlsrlqmnZNjVEnodCIQfbtmEwA7blIPKp+89ms/DKPjL5NAp1WfR09eXymdwHP/7Rj30rk3bHVipVVCse8rkc8a5HGSqog4jK/7i9feWN8krsbLTrmxLUCMQ3mWHRQt13YP/QbbfevqpYHHjknrvueWLz5i0vM2Aklc6irbUF1YqHgcEhOJabuKO6touq51MxAzLwGh4ehsG5zhA1YTs2wogmMFJK+H4VUkp4vgfTtGAbFLMhwhCVykhichTGdGVFZjqxRlMphdg4g+moIUDpxo1CtG3LRBTFDmU6v0qfXMY4oTmSjHqoZ7A0wkkW9ZEU+ncZPfyYkbj1VrwqDMNErlCAjGga4gVVBFWiKzY1NmFkuATLsNDW3AIOA0MDA2x8+9hl8SI2TWOUqRMJTIMoRP/AANrb2l9VwAopMHnyJEybPqOvUqlG3LB12B4Z+wRhAM8jt9jS8AhsHRlRrZSTJoJcfUnza3ADEhKRkIk7NaBzYrU5mULNII0Qm4O1hYSUj2osRsUg1NJUYrdlXlvHr+Uazg6mNsa03YSJgFhjrBJjMTIX0tRIQXTfBA0HRRIZzIBpmuSuqyk3DDVKm1SUgQrGYRgmIhEmzSoYYJkW6V6VADcNiDCC7wWwHIeierwKCoW6dsu04AUBZU9yYH9XF9rb22HA0KZaDDCp6fJ8P/aLQF1DHQqFAm65/ZaRdRs2lHK5PFzbQcoh3WrgeWQupLPYmESS6x1TlCElxbzEbABNmUtIPozoV4wxWKZBzZuUGo2XME0LpmWSC7r+YkoqWAbZ+0sRoVrxEYYSrW2NUFGEgaF+dIwdO725tbl1YGAYYST0gzMA4xxuytZ0XJY0vXFuMzMYcqkcisUi7r7nrif2HzjQY3IG16Gmy7It0ihHCiJSkCyk+5wzGMqA0shu3NSDacpybJgxmgavHwBSyw+4HvIJFcGyLHDTgF+t0tReMCjGaV/kNEQTmpnCAQR+kKCnNNQIEQoGxhUcO0WDFEYax/EdHTiw7wCbPm3GBydNmLww8AOk0jU9rFICBuO1zM5R7AWeNI0M+/Z2olwpY9KkyVBCohwOI5Oph5tykYaLSrUKISkGSB6EEIzKutaj9vaxY3HK6adg1649qMs1pO66/a6vnffB83Y89Oj9y3O5AhhjKBTyAGMoDo8gEAECr0rDRgm4pgXD5MR24XT/m4zQ9iCQMC3teB2FpAnXcopICAghtb6XfqZogqDN1d7ajteyjJb/+uEPjwUD7r77Xtxx3z245He/xX0PPAhuGZg3ew78ShUP3HvfjsHBwRL++Xp9pPzI+e/49Kc+ebYMQc/haohKpYK6xoaac7wSeOqZp4fmzJyZaalvsdRBJvx6DxKCveMdp77ve//1raMWL1wy65bbbp3W2t42qTFf15hy3YTtIkMJyzUBRlp8zg3YtgnTMpLifMumLVv37dm75o18/1mzZ7UsOWrR7GKpnDBZ4iEgZ8Dadatx+213OH/96xVOvpBjYUjDRNM0YZqGdignagK3OcqVyu7zz7/gwrvvvv22N4SuNTa2p133oOdajAi1trbixRdfHP7zn/748oUXfvGwr9Gc+fPSV/7tb5OSz5C015u2oen9NhYvWhSu27hu164d2/a9bWtl9rypE8aMO3KwWET72PF6bkFDTykVDAAiVL093T3PHe5nLF167DEASCaXspNcYwAoVyp46cVVuPW229DT29VxzlnnjJt/xHxzZLgMEQawshmYpokwimDbJgCUf/u73/7yqaeevvUffebM6bMWxxTtWBwYPxcyro2169Y+u3vv7sFDOY6FS5Z0nP+h847TDPSExlzzbQDKI+XBPfvfPCo6Y+qUpU0N9a3QbDfDNBBGIXmZaJO5Z5599qWde3cckrb1pJNPPK2tvWW80k1f/NyNv78QEWAY2LVz98DyO+64T4rwLYkjstws/8Uvf/61445duiymD45W0b3qJclk6s7ld63+4x/+eM93v/3tQ/7MpkLDTEP74sQdvdLGtYIpuOkUbNspWIY9tr6hkZ9z9nu+8L6zz343kSol5dsrCcYMuCkbIyMjPb//4x/+Uiz2vuqcPPLoY1F3X3/djBlIGk+K/KvZJvf197RMnTrlS8csOeYDrzpWAAZpy71vf/+7v1nx9JN3vu7gIFOYBwApx4UfeuS+zzm8ahXcsGDYHM888+yGvfv29vJ0Kg03lYKbTqGuoQ62SYifk7JRrpRhcA7fD5AtpGAyE70HivWnn3bml5946rH/+fh//vuU3t5eOK6DxqZ6MAMIo2hU7At7lbHy62mdRqO9SVc+Op0FNVopB2Vw6SQdDA0NRw898Nimn//sl1d87aKvf+b66687/ze//M2PN2zY/KRhWCOZXBaRiFAuVQFGlCbfryLwSDtq2zay6TSYoEbKdRw4pgXbcpBKp5FOp8E4RxB58LwSlCAufT5XB9N04LouTJNDhBGiiIyBpJKwbJuaMkEZmNyggtc0TDJgMk2izIlIj4N1XWcwSBEh8AUhYBKjXNo0rYhrp1BuJIY+MhKk69D0UNO0YBoGTO1AGsf6BH4Ig5tgiqFaKkEpysaUQiGKIpiWjSAIkcnmkCsU4AU+du7egSmTp8444dgT5iTNnRztQqw1lYaFltYWSCa02QM1KzGn3jANbN60aQchRCaZh5hEc4i1m4Y+V5Zl6xzZEI7tIpPJwnFsyhJWtGFLTXE2uUkNnqF0FjFpgbn+TGboyRGTFP4iIygABkzS6ej3SaQv6tWsAino2tZWJHtdgDd29mPQWintmsxjPZAuWqR2XSYNJon0VTLZ0+YkGvnnvJa1HG8jdPyyFo7I6VzEnyfCEBCk4TYNA0wB6UwaUkoIESKXT8Ov+ki56XrbsZImWUDAMjm5gscxX8khS5gmNQWGYelpH8OkyVN9y7J8QjJIK8t0TrJl2TAtE55XRSQC7cZswDQsmJatDcaYNnTSk06d4coNTlpxjdLHjD7G2UEO70oo2LaDIKQ4H6L7aoMFoRBGEVKOjaH+AWIWQCGdz3ak7Cwb09KOlGsjEgJ19XmkMjQMUEzFGF7tFHNyBH7q6afE/j37R0rF8otDQ0Vk83mks2kyqhMCUSjBmaEHCJSZDalgWjR4UixuluJ7mieDGaZk7TgZT84JQ82ilZyoSVPG9M8iFZIRms7W5CYxJ4IwADcMmIZJ1F3GYXAThmXCdm0UcvWwLRvM5OAWRyadgV/2kM8UFv78Zz+/IJNNY6Q0guLQIKQSMBgpnUQUolr19BCJ/nBwYkhoDXYqnUE6lYJjW7j/kYfXn3DCKX9Zu3r1Xg7ADwQYN2A7NACJ0dTYFTV5ZuhBg2OlcdTRS3DyySeifUw7GhoLY3/yk4u/X59rmBZEATKZDDiz4Hm+ZkMopDMZpNw05Q0KgcCPYHATru3qPFGppRVGMiQjp0yeINIx0pxyUzANEyY3E+NFKvje2oa3rW3c2ObmtokAsHv/PlSqZWTTGezbtwdNjS3gDAiCCH0D/fv7+3qq+OfrNV+267IvX/iV80tD5dYDB/bDMk0MDRZxoPMApG4MOWf49SV/WHXKshP/7Quf++IvBocGBmKTOmJc0B6Qy+etn/73zz71w+//5IfvOft9H160YMHijpa2RseyEYYCYUgRIpZrYqh/EAP9A4nmTqgaMgoAHeM6ttfVFYpv5Bg2rd9k7dt/wC1kM2iub6KhuEbUfN/Hpg2bceGFXzLGj+8woojYJIZpaKNK2r24wWHYBgaHittPPfW0L7zRZhcAzv/IRxZwPXCnaEEDxeIQVq18EYYJvP/c90s3ndn9Zq5T9/6urFfxm2NqeUwn9T0ffqWCnTt2Ytz4jkhGYm1Pd9fg27Ve/CBY3NDWYjc0NtSQUEUMtLjJv/zKKx599vlnXz6c9x/bMaH92ONOWAyAdLig2EhTJ4Rk3BQOdO5DJASuuvpK6z8/9XFTCKWjX7TkR9FeBKD6y1/89hc/+O7FvxwaGHhdh/aW5tbWxYsWHzGafRZFEjJSsCwD1YqPZ5577pBN7yZMmDDD5GZ7vEfHYAIflUt+1VVXbbjsr5e9qTiiiZMnp049/dRlhIiH2lRKankT9QNDQ0V19913H9IQolBXxz9ywQUnkfcF02ARRmnjI5TLZZiMobPnwIade3c9/5bR5s9+93lf+txn/iMZ7ryqnlSI4sQOpVCqlJUQAt1dXS8NDgxtPPQGO1N34kmnLK0xFmkhcA1jG4xh3fr1uPWOO5f09fZ+uW1M+7d/8IPvfQoAi4SAkhKOa4EbBjzfx8DAIJbfc8/1EyZOfPq1Pm/ajFmqpbk1EyczcC11je/tUrmEBx96eOLnP/+5j7eOaRvj+4G+nkLn5xKgc8NNN1zzl0sv/V3ge6/5gJ0154jUjFkzZsf1ciaboQFmGIGBw6GhEJ597tmVxaGByDRNC/lMHgwSg31DGCmVwcBQrXrgBlCXycMPfARBACiOE0896Yxvfutb32hrackMDgzCthxtIKR0k8UwNFyEZdrIpFP/sLlNzHxY7QIkRi2jdY+xCZBeD1JK7Ovc1//UU8+u275l+8Zt27a99Owzzz5bHBnaahpmta6uDoZpI1NIIwwC9Pb2wzItbYBA2YmMMwgpUKlUyanONhFEEq5LCE2lVELKIM3jSKlEmjgh4ZjkOGtYJjVcQqBa9QBF7qcSEswkKnIQ+rqIB6Qi+24lCapXmh5TozLonUjKWhElQxjcoqJVRAnCKHVzGxuQkQU3koIxPlGxRbyU0AggQxCEkFIim89CCgXfD6C4D0jSJhqGCa/igymGupQD23Hg+x4cx0J9oW5CxfdagiiAbdo0LdTQl9IIKDcAAxyRCClvi2tDLymgFMOB/Qe8latWrrYSQy8O0zQS0ximiPrJTUNHioRgDAhCD8rTphkgUyqqVmsOumSExrV5DQiZZEobT6ikaVBxs6QneAyAYZr6hnuFyZV65ZAmNm96RaNb475Qk21QfjChubWNK3lPVUPzFRQ4N+kcad1lYv6QhMnL5EahZcASuig1yhT1EgYBrW+DBPucMXCLHtRRGCGMImRyOZqQ+tSYuq4DznhahHQ9UqkUKmEVmXQ6kQ/ElBopBMqVCrKZDJjt6ggpOj6/4nml4VLAOEc18OCXApqKcwOWZSMMAm10Bh1fwxGFoTZR4/o0yqRZV/qccmZAgFxV4wxiivDiYPohRSZRBuob6nGgsxNCSDiODSEi+IEPx3S062eMoNk09WxsaAKAUmkEEgp9vb3I1+eRzWSpUHyNzUtqXfP8efPUU48/tX3thrU7srkMMT88H5EfJnpj27SIiqwUSRj0FyAfAKnzyDV1W0pNY4fWyYw2PENi4qKk0i6OPBkUxehSHLEWhiEN5gyDzKsUIMJQ5y7S93ccQhfCUKAUliGlgJPJwDIttDY3Yc2adfjvn/zk/PkL5s72gwCu7cAwOUzLQhREmmVgwNZaICElDIPRNRUcYRhg7cYNmDt7NpSQONDVVb3yb9f8bvWql//317/77YV/v/zy/3FswwYoa09JWSuWWG3cG1PpiyNF9A8MoFDIwvd8KCGxbvUGLDlm8aL//MS/nf/zX//qR67rojRShRAClmXSsWpmSxSJxBjQtkm+IcMgMalinNzvmUpE9rR/Ma7PtYTyfM3AqXFKpRJ4q2N4Tcays2bPbAaAD1/wYbz3Q+/F8PAQOjrGYPq0KSiNVGE6JoSKev/Z1r7+q6Gufsrpp55xAnEuOQaLI2hpb8O9Dz+AJ558Gl/+8pcQSoH777/nKqXUHYyxOy1u9/z971d83zCMOhl7Byg1aujOkoiQ0I8SOlsUBQAz0d3TjZHhYUyaMFHLaADOlB7S0XvcfPMtzz///HNvyPymuaU5HTvpKM18iZebFAId48dh/LhxqJbLcNMuDWcTR32SSxjMgB96ez78kfMuevaZp5e/0fNnWI59+623TtMFCeVOM5I9vbjqRWW7FqurayqXS6WhN3OdJk+ePG7Z0qUT4iqQWDSA41gIQx/33HcPVr+0duPKVSuf+cqFX35b1kquvi7917/+9cRkyMxfzTrcsmmTuvaqqx72KtWRw/mMxYuOOnJ8x9hJNURHD9P1542bMAFPPfUczj7rLHz0go8lA3EnZdH9HsWsIES//8OffnXR1y/6oZLhP3RWPu0dZ8yeO3/ObHpGCEoJ4bqGAjBULI688OKLhzywmDRh/JE11LhWUzHtjssNBgH5slJy+M1cl0JD46Sjlxx1JD1+iRVWqVYBZcBJU0MjorCvWikfkomY47pjx7aPnR+jioZOFIkRas4Y0i71MKteXLVi/57db0nu8/wFCxbds/yuiwDUCSF1xv1BVjyaJYWEcRZ6PoOdwp49e172vPIhx8+d+c4zj3jPWe86OjmHMfNQUs40ADzz9DN4/pkVzPe8D1/wsY/yyZMnmUoCRsJwo2FGIZ/DI48+/MR3/t93/rxjx9bXRLyjUNUV6uob4jpX6gl2DcSB+vSnP9OxeOFCFhv5CiXgGMRSNUwTO3bu2PjNb37rd0G1+roD3XKlnOvoaB8PAJVKCeVqFa2trSTbYmaif97fvX8DAJj19QUMF4twHCoI3ZSNyCfqbcf4DrQ0tSCoBlizdjVgK6RcJxJhMFKtBplsLg/LMqgApEqMFr8CXF1QHITuqlqzEOd0xdoZVuvTEsroK3ObhFLBM08/s+aG62+4+/kXnn1oaLC4sVrxhsCZcF0bdYU6CCHQ090LbhgY6BuA69gwTQOZjIuRUhlSRmCcPtN0HIABQ8NDABQMw8RIqQTTsiBEiHC4CMOwEGkKhWVaUIpDMRoISCm0W6EJFTvGSkCIoEaFVdTYCkn0P2mAYoYUIDUazsBrBhm6yDcNU6NUQjdubNSNyJMMNYaaKUZ80mLkUCFWmNFUxbVcCCEQKkJzWdz8g/SsUSBguibqGuoAqdDT1YNCfYjp06dg7Zr1aGxonjNv3rxc3OwqxUZNxGrRMYT0GhTdQSGblANr2yiWRjZUypU1pqZcK8XgewFpnw2KWjG4AdKE02ZAlFdo51R9o3KlDXhY8uCP9VJco4OcsxoKDGi0hkJjGAxCw2MapsFrWtD4j8IrzKZYcl3jiCuGmo457nmlVFBRpA3FElJ1TOygZi0xtaLGLTYjiRF7QADgZISmjZpYrDPmNf2FZdKQwg88aqINA0xRQLdhWJCSUHupJGzLRiptIwh82KaFxoZGDAwUEQmBMe0t2cHBQWSyWQgZobe7G2NaxxzU1cfZbelMhnSiuoiMT1DFKxe9wCtBDySkplGDgfKfpaR1AQXTtBCGGtU3Kf9UaZp3vM5jR2fTMIg5oin9Simdo8wTGYBlk6SgODREml1GiLxlGchmMrBNG4EnUPE9GDbD0BCBK4sWLW4GANdNQ0iBnQM7wQ2FbCZH/us6FqP2RKK9rupXsWbdavPOe5fv7+3tHsykMyiXyxrtpL0AINOsSGd8xui8CJVGlnhi9EHMA1bT1cT31Cgb/3iNJKMbzdigB0o8ODPIBI8DUnJEYQQ3lYISUmtpyAVeKIlACEBJREGAdDoLbqTgplzU5QsYHh5CU2vjcSefdvJHYmqXZVnwvABbtqyGZVqYM3sOwCUMk/YPw2QYGRlBqVRGY30j0rk06hsa8dLatZg/ex4evu/RJx64//7bFi0+BhvXr/vLJX+4ZMa//+snPpXNpjRbhIEZ+uGImk6WgyEUPsIowKRJExGFAmEgUCqXkM1nEIYRPvTBD5/3979de+9g/+CL6VwGCg7CUEDAQ+QHkL6EMsjxOQgClL1QU9go5zreezkzkiGSZApBFNXy4jW1i3ODXPJRe4Bz9daZVtXlCyztpNtTtlsAgNuX34nFSxZi1XMvYfny+3Hyyach5ToYGOjH3n379+Gfr9d9HXvsCUc3NjRPCrwyZBTBcahAXnb0CahUqFZ7+YU1nZ27Ox/TNYpy3dwfsuk0fv/HS75tmlYTNbnEEIr8CExHqnV19aC1fQwcmwZxvu+j2NOLYnEA4ydMgptK032JUQ7rnKE0MuItv+vuF372s5++oWM46uglYzva291yuQrHdhBEIVyHBnaWbWPurLloam5EKpPWGbmjBraSEFkA1W9+4xu/uu+e+24/lPOXz+eybWNbGqHvE6WfRY2NTfiXC/6NVb0qbr99eVdX5/43Ras/4dQT5jGDpaQuioUkJ2oRRRCRwowZMyo7tu3c3dXZ0/l2rZWjlxy96NilJyz1vRCOa5HBoEbSmVCAwTBx8uSehvqGNYf7Ge8+84wlBoepFJLaN14XHEChkMOxxy/FkkVL0NXVie3btmPJkqN0EgiS637l1Vdf+oXPf+5ipeT/GSM0fmz7nPjpVS6X4fk+6usKeOHppzFz1kw4jtUHhe5DYk7YtrH8zuVHxcMBbozyGWEMXM8DO7u6Nr3pe/j4pSfMnzd3plRUhwsRApzBtROTX+zZu3NNtTpySFFVy44/dtbUaVM6AJ2MoGopD3ENUxwuonN715Yrr7r67i9/6Utveo0xzlvvvf/+73SM61gogeR5F3tExMCNUjUJneM4sA0Lvb29BwYHiysP53MnjZs0x+A8O/oaje6yd+7Yg8v/ehV8z8Oy44+xP/upT1BdzZQG5+J6yoSSKF1++d8v3bFj6+siza2tzZNamhvzChKGRd45NAih2iebzbJ3nvmOxKzTMjliO3mD2AvRNddd//ud27f/w3stk3bGpl23hUpRC7mMCc4Aoc16ucExNFQsrXt5zW4A4OVymZqgSJD1O7fQ1NwE3w+wf/d+PP/s89iwaRPGjmtHx9gO3H3H3becf/5533jooQf2xs1uzVmTmpN8Pk9oplI1c6nkJGvaaOwgGl9wxuBVPQwPlxAE4UGU0v7+AXzne997+JyzzvnXL3z28++++aabf7Bj684VMpL9KTclWpuaEfoB9u/dh84DnbBsDse2kctk4Ng2TI1yhELogk8iDAJtVgJYNlH8TGbCtWwoQXEV6Uwa6XQq+S5SCQRRgEhGOnaH4l9Mk4rPwPfBADg2xRdJJWPiKUzL1PRkBdPgMXZD6LJpJfEsRNlkGukjswTK4RydOVrTbyqoxEE01vZQFqZMLM1NyyRjrdCHVEo3SAH8KIBABCEop9VNpSClRC6XgWUZcJwUOto7wBnDgc59hc9+8fOnp1wXoXZAowGhOmg6xWP0U0E301RchyGdqxuvu2HFiy+8uLu9vQOWSY2aH/iAboJio66YDg4Z6zo5iHKrj19KQEht307TEmbEVEquQ+Ij3QTyGvUbAgpEeVaQScEahQEUE2BcI7KxVlodPLCp0exHhRoy1OJ1EGum4+EO1++RWEQnGkwyHiNab/zfDW5ql29DD0WEprzHyTzEKmCM9L88Xku6ESaxvoSAQCRCMC6RSqdhGTbCQIAxA6lUCtwgZL1SGoGIwNNOOm0aDKURyl6mGp8nn0v5zpoep+k/QlNU4lzZrv1dvcMDQ8VqtQq/UgHniqK8uIU4etwwTBjMBMDh2I6mG8uELWDoTFMhBCAVIiHhh5rGxGvu0EkWZfyw0HSnqueR9suydH6jAcd2NNuAps7plIv6+gIy2SzGdYxr0s06wtDHEfPno7W5HZ7nacrqKOaJ9hAjbVIJnudj2vTpQwbnwrZtMINDyAjcMhBFxBxQUpIJYCarXYKhHQvlKM0GuV+TCZ2hUSGWAADyIOMkvd4S11XNFjDi80jrW4yqgwI/IDYFJ/TXtK3k/Dq2g1whj9YxLchk08hm0ujt7kN9U+uRt995+8+OWrK4PVIRPL8KN0Xn0TRtNLe1gBkKQoYIg1DLNjhs20JLcwuCwMfmLVvR0tiE9pZWRFIOPfjQI38dHurvFZGP+lyhctlfrri0u7d7o354gJjQtHqlNi9jirKaDNdGc0sLDMOA49poH9sO23KSvXDeEfPnfPe/vv+JoeGBVBj6xG7gjHwQwgCWY8O1UjrexEI6nSbjLlCMGgPdV0pKjfjS3+PrzqBp+aaVyAzIG83ULJq3DuINVWh8/VtfPXLm9On2isefwIoVKzBp3GTs2LYVrusgn8lBCIFyxavs3L5jG/75et3XWWeffULKNRMfDse2cc/d96B/sB9HLJhD9cXQ4Nre/r7EPMrzRsKrr736j+d9+MP/9uSKp27eu3d/P+c0aLYcC6ZJdctQsQjXNtHb3zfwyBOPPv3Cc6uu/NEPfnzJxf918U3lkVI1HhMmA3w9nN2wYUN/d1fnnjfcXDj2zLg6pWg3SU6nkkyVjjr6aIwZ0xGHz2t5DO0H8fPtV7/73d9+8+vfXXbIw5dCPtPS0tyYABaj5sE9vX0oV8rI12WHpJJvKhZr3py5R8VIm9KaVpJqEBvnySee8UzL6psxc1r57Vor06bOOlZKdPT19QCQ0JVY0pACwLXX3PjYMy88t/VwP2Pm7JkLaU8XYFqTx7U85MCBLqx+eTWKA0NYvHgxWlvbcMSCBYiEQLlUhVchoGvbrp1P/dfFP/6lUtJ7I585ZmzHbKpfQRI+iwbhgYxgmjZuuuGm5zduWHtIzWJ9XfPcRUuOOiZmHILVHJrjnbC3f6C8du26jW/qmsycMfH957znQwAMEQpEPrnsu7aT1MD9fX245De/e+bZ51e9oaZ9wsRJDADaWprnWIbt4iDflVHNKQO27dgR/erXv7i9VB5+S3LOf3TxxZ858/TT3xszMDGKQVALC6FBeyRDRJJqP2Zy3HXPvc/ecP11Lx3O53aMbT8iRuPjA2WjBMPF8gh27dsFAPjyl76ChvoG+EGQmLxCS7nAgLvuvefG51e++A8lETPnTJ1ssBjU4xCCTEXj5BbFFGIneWg2ShSEKgZzL7/8r1ded+21V/1fx7X02ONmjhs3rh4gpNpNuTRIMngCoO7fv2/fnj379gCAWalWkMlk0d/fr5sLBS8I4XmVxDXMcYGxY8eh80An9h3Yh227Nl/34CMPnXr22Wf9C2e0pYtIO41ydhDFdHTjGiNtUAzcYBgqDsJ1XLhuCus3bkRfTx8ampqQTqXQWF+Pl196CdOmTMZTzz678fJLL/2cya3NTY3NaGtrhxARMtksquUKKqUqXNtFOku0wkhEGC6OED05EBBKoThSIhqblPD9AICEEAZ8X0AxCTeVRlANIJXQRb1JzUUUaHMsHRkkIyhB+kyKWCGUQOo4GeiQaJVQbakhYKBiOL64cZMfCgGmRM0YKW4ztDuvwWJ0N6a+yFqDFRt2cSpiozBE7EwrlY7aMEwdtSFgGERfVQpkWqWpo2TQ4yLwfVSrFZRHyrAdGxMmjUNrczPuWn435syb/Y53vuvM4wCiONTovaqGOI3mAo9CpKWUqFQq6OsfwJYdO1bm6+swVCySAZFlQlmmbtgJCRdCgNSj0G6NRE+0HAuVskcPc03pZKxG60xUjpwykRO0TMXoqs4f1vThpIllDBBKRxSNSnxOEiBYwk4wNKIpxah8VO2EKYRIEHqu/w86aYglmaP0nRWTyfkxGIMER6QLfdIvcMTqUcu0tct1lGhYTZMo4b7vw+A07LBsRxtYkRM41T8mgiDUUzQDMhKoBj5CM0QmlUFzUxNKIyWuAF6oK2B4aBjpdBpOx3iNSsQDq9FRA/E0NDaOo6Jq+5btBzg3qh3t7eju6iKjJMbh6zgipTc+BToWcMpxk0oQdVWRNvug5k4pfa8ofW8R7dXkeqCkDCgFVL0qoH8eU1ZNraP2gwAG4zBtohe7jov+/n6YnFlhqJppjQjsP9CFqVOnY6RcIgMoVlMIUFyYRBRGsG0b9Y2NmDh+Im677bZhcC4yuQzCQKCIIURJsx4RTVkI+FFE93pMVNbmITSkgh7CyNpdpKniimlDPlljbcS07kgPPqSSMBRp9blBcU4MBukHlULgBzBsUzfaCpxLcCXRUN8ABoWRSgWeX4VSERhzYbnWzI/9y7/8aNlRxywdHimjVB6BZTEEgY9cPo15TbPp+yIEg4TByTm0Uq7AcVMwDIZdnd3YsmkzJk+YgAP7q6V/+/i//Xzj+g23T5o0FXv27cWuXXswNNS/8g+/u+Sqn/7qFz/xA0+jFzUkmjEDYSRhcY7BYhFp20Uq5cbqDHR0jEUk9DDEsfAf//mvH7t9+a1PP/zAg39PZ3KwbQsQ2vSP+lT4vg9mavq3IvTLMkyEChCQ5K8ADqEUuDYCJMd8BiZ1vAJUYoxHUV3s/zRkPCSqne3wydOmjPPCKtZv2oDTTz0Z9YUCFi8+BnPmHwEeu2oHXl9XV9ce/POF19Z3zcnfc8+9Rw+PlFEZGUFbexteeulFrFuzDp/49HHJ7z38yAP39HUfOIh2WSqVAgB3NzQ0P9RQ13D093/4g+O379zhlIrlcNz4cU2trS32yy+t7Pz5L/dsWL9p08YDnd07u/furZxy2vFYtmzppzKZzPuQMNmELvqI4eKk3P5CIfeGdddTp0ydDwC264BzQvmEfv7E5C6poGsvJHKKmCp5z7333fKrX/7qv5VSh94sMuShWH1cLMeN//atO3Db7bfh6GVHI4iiwXxdfXC416lt4rjmR+9/8OjRbCJiwBjghonh4UFks6murVu3bVr5wsqBt4XOnM1mrvjb1cd2tDdBRAENLBWvxSqaBtasXV/5y2WX3iMjHNZ36BgzftwDDz40O24SjVHGk8QyMrH87jtwyiknYkx7m47PS8GreoiiEHUNdfCDsO+b3/zWJds3bdz+hij9Tc2pm2+9eQYAiDBCKuUinXahFHDKiacAAO69957HDjXH+0Mf/PAZDfX1YwhZo0SBmC0XH9GLL76wY/PmLYcdmZbP59nnPvu5fzntpNNOjpF2ITkYNzQTh2qyxqYmgPE3vA/u3rVTAcCcGTPnjG5uD1JQ6veeNGFSeaBv6LktGzd7b3aNffazXzjvkt/97kvEmNLRorHEbhRgFL/MOKZRv1a99NJDvYfh15DJ5bP333vffOgaJpagIoldAzKZLCzTwoIlR+PMM8+k55BlQyqp0zQkDMvEy6vXrP7yl77y39u3b/qHe0l9vtBMa8NIgAwylK0ZkiqloHjMlDQQhYKlM2m8+NLK537x61/9duO6df+nbKC9Y9xkgxvM9wJUqhVks1mYzCImXSTAbY4Nmzat7+ru7KSm2LIw2D+AMAjIjMOyIFSEMAzgBQHa2loQ+T4eeuBhCCVQ31KHzn1lBL7v79vfiXw6A9d1E70DGTMhMbKhJJhaIzL6JbU7ooTCmJY2TBg3Hv2Dg+jt6kNjQxMmjB+PTDqFbVs2PWia1ub2tnYMFcsYHBzAmPY2mNzE4OAgyuURNDTWQylCLPL5HMrlfQiCEL7v0TGFAhyA6zqwLBulUglSUG5tEPraqVijqJKKGNK7Cl1/auqa1h2apqXNpSjjEYyMThQIzZSaihg3t0rbp8t4UqrdhJUi92LOYgSR6N2CSfoeiFGtUXTH+OFmGFA6IzIMQyipkV6ttYzzW4XWcgIMlWoVhmnCMnUjrHNL44ejbdmwTBucGaiMVDCcGoSbslNf/MLnz0k7Tra3tx+5TAZu2oUfBZRLatqvWogE/LP4iY/mlibs3r1P7d+/78DQ4BAaGxvBmaX7Q4Xh4ghsRyUIH2cMURCAGSbADARhgCAKtVOzjn9yLO18TQY+Uobk4KynUYwZScbp6MljjNgo3XgkSK2mNCs9da0NGmL3ZqYjSLSJVIwAqvja1Ej8hCSjFm+kGN3cWl/FdRRGJEOIOJNWR0kpjYQqRaglrS8yIiEEkNEDmTFww0jWRcxuiumwnDNEUaizzBxYtqXRYQOO4yLluOT2bVm8u7tPVkZ85AoFmNxEGPooVyqor68fRTdliXETOIPJyL1W6UGXYrIvm8tp3bSEZTpgzEgKGMW1aYseghijwshHxz/EQmWmXf1oKBHPV4jRoHQmrWERDUb4lLNKlvlk9haGAlEUwHJMSMZhOymEfoSR4TKgJCzDaYRCC0Bma4V8HQCFbDZFBkZQNS01UzAYh4BCtVqB66aQzeawZ8/esueFYbE4Ass0UV/XgFK5Am4wBL6nr6WNKArBmNQsGDIaI70uS/YVbQVai1aKu22p7yUNN8YyCHJ3l4giCdN0yKVaN9lKCjDJtIM7o9XKJKIohMlNmKaNMArhV30IJeFVPIRBgEqxOvXzX/n8Dz70ofe/S0lg8+bNmDRpApoaG7F71w5Yjo32Me00nZYMlukAnGNfVye6DnThiDnz0NPTh/0H9iIIAmzcvMn7818u/fPy2+64pLGpOWhuakLQR7LTuroGXHf9tde/673vPu2UE08+pVrxYJomAj8CB4dp0zkQkURDPgcpFaoeuYgrpsBMTqit1qa5bir10//+yRdOff75J/1qsKPQ2IBicQT5XIHuIY3wm9xAEAXkNmm7yaCBMglZMsgyTQuWYeoBIiD1UFdBQSgqiLnkifv6W/aSiNauWe8tO/Z47NmzF7ZNDrmr166HkAJnnnE6AGDvnr2dxcFi3z9b29d+ZfOF6Y3NTRNLlQrKvqfqfJ9t374T//6Jf0ddfR4AcN/996+96qqr7v/5T//nNd9jYKDXB/CE/nPQ6/zzzn3Nf3P6me8al8vmzbiAVdpYLgxCVKIQW7Zt2SaVekMa0DEdYxtvu/mWOTGLKtK+GCZHwhJTtRStBIWN6ZA33Xjjg1/+ykXf3r/v8GKDFi5a2DZh3IR8wmrSU8B8Lo8li5agvW0crr/htm1dB/bLw71OC+YunD1p0pSZABl2Ku1jwA2Gvp4+3HzrzXLb9i27unv2byyODPpvx1ppbmqateSoIxcTmkYDRigGg9cwm56u3mIUim3jJ3QcHmX6mKPnzZ47fQqApN6iRwDVhtlMDuee+0FMGD8hIb2IIIJhcdhaS/rLX//62rvvXP6GaempVDo3fty4STE3W0iSAvnVKlKpNPr7Byqdvd2HFEc0b/6R9ddcc+07OEfiw5J4m4zSMXLDfGnThnVdh3tNlixafPy3vvWtT8fAhGGYlAOrB9BqlJdKNpc7pCHE1Gkzs7fddtM8ANq/QTsIk+osOQjOeMWrBG86cmvBwsUnP/H4oz8yTFYnNBtKC4YPGnok8YcM+hmv2XMHDnQ9ueKJZw8LJZ88ZcKM6TMmJwAS4v1CJZLEh+9/CF7Vx89+8lPkMjliE+qhmVQiScG57vrr/7p9+6b/k1XEuZVNmJcauKFnLK/VzVwiUjIBL1KZFACUrrjib3/ZuG7dG5IN2Iy3cD2My2SysCyTrieIuQsATz7x1PoPnkt7NZ8yZQoVpJzD831EIgBTgGnY6Bg7FqVSGQe6OhGEHjgDhgZGcOrp7zx+6pQZc194caVas34tunv6YDs2oTiS6JSKqYSaRwV6iH37DmD37j2IohCDg4NwLAfZVBoijNDQUI+uzm7cvfxubNu2Fes3roblcuzat2dgxTPPPNzY0IAgijBSGkJzSz0Cv4p9+/YhjCT8IERPbz9GRkbQ39+L7u5uSCHIiVVJBKEP0yA9W7lSJv0Vo4gCz69CCAnP8yAh4LguHMclXZqmEnLOtDEJWXIrIMlkFVFEBSpAekXIJDoJo3KuENNhmb6h9BRWiZoFM4shfy5H0SpqU1swHRkCpS+q0jmlcQ6xNmKSUr+XpswYRi1OhTEyPgBHpJv8KAgxXByGZZjI5woYGhqE51dh2hb27N+H933g3OlLl51w/LZt2+FHgfKjAJEIUalUtXvuawyGGTEYYsMj0iJY5WqlNCBFiCD0URwpwg8DDZ9JiIhykZVUsEyLnBmiAIbB4bqk80tcbUHa3yiKwDmDaXLYjgPbsg/K3zo4WoglN3KcU5sMOaApZwavXU/d6NLBMDCmHZEVyQ2gBzo1UxNqMrlpJO8hoZKHWzxVIxS3RmG2DEsjfVL/0ZE1SsQjEv1dadgShgGEDPVQo/bepG0MtKkR0aYMQyN9DLAs66B8w/7+fkgl4bgud1IOmG0g8IlCU6mUUCwO6yIrghg1AI6p1V4QIJ7wAsDg0GCxXB6BV/FRKDSAGwaCiOKRolAj90bsMq2ReEnUPDaKuotRMoiY3sYY13peC6ZhQTEGIRREqO8hTfFVkYRtOoDOV85ks2AAPK+Kvr5+2JaLdDqNSCk0tDSPzWRTLQCQSmfQPmYMDf1MByY3NW1bkOFMnP2rAD8M0d/Xh9bWVsybO9cXkS+GBgdRLBbheb528haItFu7EBLQiL/JqCnnnFgN8YCK0oc0+i2FRhLpugoR6WksNKKrknxgqQuYMAxQKZcR+hE4J/1/4AdkAGYaWntD+b+e5yEIfQwVh2C5DuoKBVQrIWbOnH3En/78599/5cKvnufaKbZnTyfmz5+HlOOgUqqipa0drW3tyeNSCBo+BWEIyzIxf/4cWI6Jl1atw/XX3qImT56M22++4+Er/3b1/3aMGzcilcDIyDAcyyHX4VwOUrCdX/vyRf917wP3beW2Adu2kEmnYNsWiiMjYEyCm4waUW7AcixwBhhgCKMI23Ztx65dO7Hm5TXYs3MvFi1cvOjS//3f7wEqG4kI+XwehVwdDNMENwE35dDAz3bJdEhG8AOP6J9aYuOmUnAdF2EYouJ5iCLS7SqDXJ5ty6Kcce1cqxBBQbxlxffA4KDctm17uam+CWknh56eXj2FdzGmrTn5vfXr1nf1DXQX8c/Xa76mT5++LJ9OF3J5am7XrF+P+UcsQhAorN9IcZpbt297rn9g4C3L1swUCsYpp5y6qLZPquQ5k0qlkM9ncc1V1z67e9fuN4SILjzyyLmzZ8+ZGCNcnLFRXkc0FRuNAtWea0BfX2/n7//wh9/u37fnsI/vxJNOaIuHqQbnGkoG6usLqPo+hkvlUl9P15o3c87Gjx8/zbWtdNLCsxo4MlIawYGuzqi3q3uoODz8trkzn3f+hxZMGD+hTei8eIoM1ENF3fwsOWrhQBhUe9esfvmw9AszZs84CoD2LlGJ/IuDIQojrF6/EfUNjUin04lLvePYBCrYDtasXr36Fz/7+R+qldIbbvqnz5jWNnnS5DFVP0AYBmRqCWB4ZERFYYj+/v7+4vDQIfkAhIE3pa6QWxAP8g1tmhrXqZ1dXejt7QseefCRBw/3enBu8H/993/7j1w+N0bKWqMGSUPzuIwGgL7u/h2rV2/ccSjvnyvkx+cLdRMSgEARUzVmT8ad9KqX12zvHex/Uw7kDQ318y/5/a+/n8/lpo2y5ABTByP8LGGTaalYLXsXN910y9bO/Z07D+fz5x15REdzS2MLMMqCVKmDxIgLFy7Azy7+EU46/rj4slLdqhMfAODlVWtW3XH78rveyGeOHd+RBwAZCijtI0AgVI26rRSASEGEAqFP9eV99z3w8C033n7HG2KGjG0z5s2fPR4MMC1yOldCJXVS/BKIEvSf9/f1IZ1JIZ/LwbINlEol9A/0ww98KCUTTZ/v+/CqAULPx9FHLc6988x3Ye7MeayhvgkNjYXkktm2Q0W8aYEzBt/zsXfXHlx11VXYtWcXcrk8hoaK2L//AKQgenEY+JChwLp165DLZnDa6afANBx09/ThqaefXrNu/cYXGpubUCoPw7Et2JaFgcF+9PR3wbA4HCeVuGxKIREEAUxd5JmWDdtykpiSSAhEkYCEQCRD+IGHIKiCM2oahZQ6IJnopQbniQuuYZpkD88NovQJCaZDlA1O5k9x7m1CL1IgWnJsKsOoYWOa/sx10atGtWlktc50Pmft5iPoH0nTR5SO2uJl0HmmUlJ5ndjD10TxpmVoGh650jEdH6KERLlURRAFqKvLwzBMFAeL6O8bhAzFrHHjxo4bP348OsaMYblslvKZ0ykacozWuaJWqBN1U8LSboD7DuzfuHvX7gOGzoWNghD5bBamaemsU5ZoUv3A18izCSEiCCFr51ixxMjJ0Bth1ffgBwHRSXVOaM2squb4y5K7TU/Emar9kTKW6iTmHOSaLXWzGut56L2kknEVkqCQSv+ctIjUpFi2QwgmIzOlOGYmOXFcazJNE6ZtaWMu7S6dMMR54tColKJYKaazmXWeL+NkYmVZ9JA0DTOhWkdRiJGREUSRQspNwXVs2CkHYAZMy0Rzc73K5zPI5NMY6O9DT3cvWppa6a42KN4mmeEwBUNrJ71qFX7Vg/AkDuzrqoZRCDftEgPA8xHoQZJQkd7IhW5wFelTkmuur7/WIcfrnWaDquYGrQcXMoop6QxRnI+qJAQkHJ0lbnAO26HoLjeVRiqbQhAFaGisgzI4GtqaFrSOaW0sV/wk95gl9wsQhiGiIMDowDTbslAoFNDY2IAnn3wSDz34cNUwYy01ma1ARgi9AJaps2+DKoLQI++AKCLWgab7GJr2XXOir52H2CmSG1zHL/FEC8gYg4yIyu+mUjomjK5P6PskubBMmJapDe7I5TqTzSGTzSV7ViGfQyqVRjaXbfnVr3/1kwv+5SPvCCohtmzcggkTx2Dnjh1YufJl2K4Lx3VrJl6Kabov7ZEN+SaISOHRRx8FN6He+d53swmTJnaueXnN39Kp9NZ0KgWugL6+XigAzY1N6O7phASwds2GJ66/5vpLK+VSxHQhH0YBOFc1ExG9mZqMQYgISiiYMNDS1IzHHnsc115zLaIwwoa1G/GBc8790Omnnn7e/v37USwOYqRSovMSRKBWmescbwZHyynAkbjhB2GgJRaGnsATkhFTwCLNniEDNpm851v1SqXS7Kyzz3YA4MKLvoIf/vhH8ITE2Wefg9POOKM23U7ZPf9sa1+nYDat+o9e8NH3A0DasjBuTBtjzMBwaRhr1qyFofeYZ5967oXQq75lAuxZM2bOX3TkEYuS527sWxI/cMB7MunUY2+4GZw4cUk+n8scNEhm8bOmJhM7KL9T//3WW2+/5qWX19z3Zo5n9erVYxEP+KWCVAJ93V0oV0qYOW0KIt/fsmHDpjdlTNQ+sa01QTsFPWullIiiCG1j2rBkyULW0toecGaGb9d6mX3kEeMBINLmihyxLIz25K6uLtx0w40v79+378Bh3dP5nL1g4fyFAMijI45x09cqiAKM6xiLtpaW5BrS0pFwUykACP/nJz/93UB/7yE5Ebc2tczlgKukhAhor1YMqG+oZ5Zjobene/WeHXsPSRZx3MlLZ40f39GoyeeQEtoHgQ6mp6cX//uny9dd9r9/WXG41+OUM057/7nvP/dsqt+UBncUYABChShVRlDxqPa44cYbntm4ZfMhrcF0Jj2urj5fV2P81SSCo/0Y7r7rzudefP6Zw95n2zvGtF/+18u+d/yy40+MDV2ZbgDkqDoUo31eIIllG4Sj32d/T2/X0OF8B9dJTcDBGBzdzzHAphSWHL0In/rsf8JyDN2M13oRQ+cc3778tjs2bVz7hgYLpuE2AIBpGsSMHJUyAij6aI0fiUjAcR0AGLr0iiv+2tW19w2h9fUNzW2LFi+aCZBUiSLZ2CgTX6BYHPE3b9qcDHT49m3bwRgw0N+PwA9RKNTDthxUylXs2rkHjusglU4hlc6goakB6bTL/nrp5Y9845sXfe5b3/r6f1z0lYv+eOMtN768ffvOMAwjREJguFTB+k2b8OiTT+CFlS9g187tYJzj6CVHoaGhDoNDgxjbMRa5fA6SAYZlghnA0qVHYfa8uXj4kUcxoWMcspk8+vr714Sh37lr524MDQ7Ctm1UvDLK5TKhfL4HMAXTJIMjqWNhLNMiL17D1FRVHdsTF9KCEEXDNMBNM3liBD4NXqMwpBPHObncyppRBDiIMsgUlBKIwgBSKQihyHlWoy5M62PBWW1yCUCJWnPIY6MeXUTG1NZ4eqvkKKo1Gy1uJ5RXCEJ68QonWWrY9e9IASftwnYdTd2mpiUSEXKFPLLZHMIwQsp14ZgOUm4WmVQajc0NSGVSmDRlynHplAvbthCGFGBvGRZpS1GL3Yk/Pm5SwjDCcGkY3DSwacNmXH7ZZU9UPK/LcRwya7JMFItFlEolpFIpWBZZkpM+g5xuLcdKGhzGFKQME7TSMMxaZm1MB9Y0UCWl1h8wHFSLal26irWhiRGHvlGkzoFlNDBgSSyJHntpJJgzMqNianSTpMkbQoLF9GhISBFpxLb2vjHqLqVAGAUaxSNtsEqwYdJrU/NTM36Lp4A8zg2VtM5jZFkKQdFXUhuXcJ2Ja3BIFZIhD4Bq1UM+n4Fl8ai3p9+j6a2PYmkYuXweYApVrwqbO+DKSJyl46bTsWxYlg3bcWC4HE7K9gCgNFLG0NAQuMmRSjmwDAOGaWldqYWUmyIEPDbDlirJTKVryGr0nkQ/TfreUISIVJg0jEQPo2m80iKi4ZEiStUypJQYGS5BKkXrhRsIgwCD/YNwLavwmU/8x7umTZpiQJ8vLwjomggFKQHHduBoOin0oIkygWlQNaZtDFJuWpiGxVzH1fnX+jppNJoZBizHgWPZmh4UD9QiRFGEKNLXQ59chZpObvSUUsNFNAyLkR1IcIMhEiGiSBDLxuCwTBspN6NR6YjuJ42Ics7hOE5Cm/c9D3v27sIJpyw967jjjn1HGETYtn0rJEJU/BIGBgcxbfp0MubDKI8Bna1t2SaqVQ/lyghKlWH89L//ByseeZwde/RR8tvf+fZVtyy/5bZ0Lo1yhfZr13GgVIjGhibkUgV4lQoy2RTuv+e+m667/tpHewf7YXLKCM6ksuRiqu+t2DtABALVchkiDJDP5nH2e96Dpccdi2qlhLq6AgIRpb79ve/+x/hJk2aAmcngJwpDbeRjkvmU1j9zw4BigOO6sG2botHCSJvHsaQgoiafhpee5yGMAiSudm+hS3M2m7Y2rFvLh8tFbNq0GU8/uQKGAl584UV07uuEksDw4DDWvLz6bXOs/f/nF2Msd+zxR3/y9FNPXAYQFV1IhRVPPIkXnn0Bxx1/LGbNmI7h4VL3vr17Vr2Vn/2OM854XzaTadZglI4Ro+Hj7l175H/94OIbt+/Y/YYopNlCnXH00qUnALHmXI5Kfk4qVxh6YDY6Uu+xx598+L9/+rNfDRcH3xT14JijjiHtn5RJ9GAmW0Cl6iOdSQePPvLwQ1u3bj4sHfmRRyxhABD51bq4eEgSO7QRXxRG2L+nO9q1e88+z6sMvV1r5rnnXmwEoIelOiaG1Yxv1q1dU7zpppue7+3rPizTrHnz5k4+/tgT5yeXTstWWG3IhbaW5oNnFgqaSgZceeXV11x34/U3Hurnnno6Za8ajCGbS9OzQCqYpMMOr7n22nsr1VJ0KO85Y8YsbbxFtHPGa1CHkBJHzJ+HmbOnbu4f7Nt1OOdq6tTp8y+79NKvZ7KZBhHJJN9dqlqlpRTVzdWKh80bN+/q6dp3SNrWuXNmTihkCw6daz6KCXjw8Ki788Cb2h/Ofu85//m+9xKfVsnRtEOtfT6IrBHXOhymYVG9oAdagYgOmxp+5BHzZgJav6tZCzXwYnSDqC12R0VsQtfPzz317Oo7b7vzDaG74yZMsjvG0BCLGRoE5LWamz6DtiXLsmA75LZ9xd+uuv2O2++4540eV2NTw6SGQn0HAFiOTYk6kvqw+Bj7+vu7d2zfkSDjphd4KFfKSGcp2zDSMQyGwZDL5eCkHWSzOWTSGQR+gFQqpYojQyOPPvroS7NnzXrJ87y7rrjiyiMff/Spufn6fLo8XAwOHOjy1qxdm5sze9Z7v/a1ry5mgtzhLMtEb28f9u/vQmNjM4Iwgoyo4BgqFjE0UIQIJEzTghf42Lt3X2njxm1blQIq5TKyuTxax4xBGPo4sL8bDIDrWiiVKnAsCylNQ/P9EJ4fkGspg9YFAplMBl61CgiAwUgot9RIRYnmNAxDAIy0rIaO+dDNL9PmJWSwQ02KZVlJ/E1MnYWkKawUIinaJGqGPPHdFUkBrpstAxxSN4uJgQ0jcyZd80PqaVfsPBxr9Bigi3EGyYyahlg3w0FMtdT6X8e2IcMYHaRIl2wuC5ObKA4VkcmkUCoNo7GpYe673/3uU+MbhPOYS6KNuWJR56j8Xwgd68E58rlCQt3t6+nb7vsBVKQ1eqaBatUjlJYb0EJmGKYBgxEFXYgQBjcQRRKGRbRVKGoahYx0MRzrnEnfKoDkBqPt0QCYbiBHpQ0xjRCy2JQs1kwnlCNDO+3WaFYybjyUSPQ3BlPkfquvh9RxOnFjGYZhghTFEy4hI0IFY5DXoGzoIAhq00YF2I4DzhhCvQY542Aa9ZYqgmHyBMEjtNfQbsgWrQEC/WEY9J0UDPi+j5TrwjBMVKtVDA8ORSNDwwEABGGA8RPGQ0kg8ELYOq+WJRpaomRFYQDLssi4jTMEno+e3h5Pw9Va6yjgByFYrK3VjuPc1AZuum2j3MVapNZoA7d40yWEl+jRtm0hioQ2LCKttlIg1Ebb2humSbmqvkAulYFiQF0+i5TrYt+evVh49MJTP/C+D55E+0IaoYhQ9kowTQ4RKTBbJbraZJY0CpRnDJg6bSrGjR+nnn/hBR3xNASvWiVTNJ3/azsuDM6JSqbjkqDdmOPscpr2yoTSLQWIRaALIsrqs2icoojpIKDzjJWCDAOYWgMdiZDMy7SpFVc6fJ0xYt3AQBRGSKfcOJUare0thQ9+8IPvBGAMF4so+xUYIcO9d96PRYsXYcyYFqLhSTLDYlyzU0yGzVu3on9gAKXBIcydNw8nnXQS5s9ZgEcffuLZyy//6187xnYIGYYYHh6BUhGymQyq5Qp2794D13XR0twIPwrQ1dWz67abb7ty4rjJM8849YxxpmlAMUluy4amKhkm7acGYNoWoBj6enpRV1+P445dBgBoaW1BX98gJkyceMySJYs/eMuNN/24Pt+ggmoVUIr2E9OMW2iIiPZHk1tkvihDrTunDcK0TO24rZLjJn0fTckNboDr7PC36mXZNsvnc1UDDNdc+3dUAw8nn3oyZOQhk7LJbdV10NPbU8I/X3GTyxYvOXrZl77wxXOuueGaozrGjl1oGpYlpIBlGvBChZkzp+LIIxdh06YNqnPffmYYxtbde3ftequ+Q1vH2MY7brv9DACIlILByMwzzhhftWpV70urVj777DNPvaGmqZDPTz/umKUL4yKZmC9s1GB5tIEktFEm0Ns3OPSd737ntzu3b31TA5GOCePb1q1ds2T0QBlgSGVS2LZ5Cy776+Wbdu3bc59XLVUO5/1fWv2CAoCOsRPGjZ7rxZ4Ovh9g+7Yd6Ow8cGDXrp0b+wYG+t+mtVN/9TVXLxg9FJdKZw6DfAyKwyOdtuMcNpI9ZeKkxWPaWieIiNhkxmuZ3BHmQYY7QsJiJmAA69avX/ONr3/zd0rJQ7rfFy1anFu+/M6jAcDzPSiuEAYCqZQLJRVeeunl/TfdctNTf/rzH984Pbe1JX3zLTcsORhAqL0C30cq5eKF55/bcu4Hzj30vc+0Mnctv+vCiePGL/FFBCtmEGrfk+HBIQilUNdQDygFp7EOs2bNOOT1N759/KTaMaiDWETxq1Ku9haLw4ftyL3slGXvvPPmOz4NQJvG6ghX1CJLR2e3Js2vpCaTgeR1gYjwzDPP7vrwh84/DDp1o33jjTfMiBt7NmqiwsCI7arjhsB11jgZL8XzNABQDz/22O0HOjtffiOf2dzckJ0xbWorDUVGUYy1PlpICc+rwjJMGIYF0zTQ19e3/xe/+PmlkV95w8OXhsaGiXbKyQJIam+uDISRgBQctm1i06aN27o6uxINtum6NqqVKgr5OuRbcujr6UUgAqIOCIXiUBmKKdTXNaA8UoJiEql0BmEQoampBbZp9q5a+dIDu7bveqBcHoEQArbtsN6+bnfBnPktzU1Ni5966llk8zkUR0q497570dLchkrZQy6bgWlSbMjmzVtRLVdgWynMnTUHLU2t6O7u2VkqDW9izAA3Oaqej/0HDiBl23BTLvzQQ+CHiIIQXqUC0zCRSqcApuB7Hm3STNIUlDOEgU/Nq2VqoyNdFAeRLraFdtYhd04JBaHpbSY3EakoMeSJEUHDNMEMDuWLWkSNbv64vtBcx5EoHUfCDnpo0VRMKQUBkaCFpkm0cEKMlW6ESWcW57lyZkAoytLkhqHD0qmRVCCdppSk84wLMopD4YT2SoZyuYx0Og3XTWGoSKhca3MLGuoK2L5zJ45ccOSy8ePHTfMDQXmDsYZW1cZhcRMgQl2cKmoUIp/QWCPlYuq0ybBttz/wKjBME4WGAkQkUClXIZjODI7IKEYphSDwdLYz1w7gEpaZQhSFlNHLKK9XKKLIGoYJFlMn9PlgiBFQpY09asZfSeFgaDqyTGby2l1ZaY0enV8FDtMyYXAkBmFxIRBrUIWKp3isZjGvIWCuI7uEFIleU2oNIFHPOVQYjcrdoUZbColIiqSZlZBQQkAJCduhIj3wA4risS2dVxzpzY0BTCKdSWt9NNHEXdchRD/rwrJscG7xfL5gayogDJiQXMF1qQkXSurGkiXH7FV9KIHYaAAjIxUwxRTnBiIRUESNYUNyBcYVRETRNYBCEPgJdRdKG2lwVTNfiRvcxLRJwbYJ/afLy3RkjDoIBTZMDtcmjWa5XAEk3ccMHCKK4FV9hH6IUqXcfN4HP/ThdDrXICKAGRKmxVEwc1RomOSMLuPLN8q+MZESgKG7uxsbNqyvgCllmhYcy0a5VIHtkFkCVwq2aUJGpJ1lhnbf1oMQ8Br1wOBcZxFrMFevk/glZZTkNEuFWlSVRiJsx6F/KxhCEZJkwaCHgB/4sG0bhUIdyiNlYsRYJmxTDyF8eWJjfcMyiQiPPPKImjdvLnPTaXjVAO3tY8il2GDkl1D14aQcODYNQu5afjemTJ2O3Tu2wzBNNLeMwZ6uvX233H775RJss2FaKA0PIww9pFIOBgeHwGEglUkjkgFGKhRDl0mn8ehDj982adzUybMmz/hGQ1NTuq6xAG5pYzQhwUyid4uI60EpBzdMhFGIltYWDBeLuPuOOzFt1kyk02l+1pnv/uhTTzz1VH9/z6OZbA7MMJKaRkQRDMughprR8DDwQoShB8YMLRHQAza9AGi50oTaTaWSnG3TsFCtVt6yArxS8qJN6zdUSqVhnHH6yXjokUfxwrPPYrB/kJgZXhWBFyBfqMv/s9UFMnWFpou+/c3P/fC73/vPlJOiXE2NdnJGRoMbNm5CueyhuakRfT29mD1zJu695/7+/t6Bt+zCTZ446YTFixctCPUzCIap42xov5g7d35PfV3jGzbAOf74ZSdOnTx5LO0lvMYwekWvFJvqxVmo11599fIXV6585M0ez7TJ0+fU5eumxHWDjIP9IoFcLoe5c+f33nzrrW9qYFDf0tL03NNPzdKkphoIoZH5VMpFQ3NTz8QJUwY3bdrwthhWferTn/7kBR+5YEmMgiW1jd4rxrS24fHHn9z63PMvrDvczzj66KXLAC2N4ExHU75i+D7KKTjwQ5iuAQYW/fxnP7+ys2vfIcfRmCZvy2SyE4nCm0KlXAHnBqrliuLMYFOnTh4e3zH+kJDDRUuOmnLiccfPSTiKMil4IaWE6zrwPA8rnnlmw+Gcp49c8NGzTzz55A8B2hRUSULc9fWo+gFK5RHUN9QngtcXX1x5yAyDuXPnTgDIx4fm8ySripmWYMALL764Y93GDTsO5zjaO8ZOv/WWW77R1NA8JvTpWRNLGWOZGqg1weDQIAzTRD6bS74DUwmXCtVyVa5es7b7cL6H5TiF1jFjJ+Pg3jr5W6XiQ0iBgpPTAAMSajcY0N/bh9VrVz90w403XtnVfeANGdM1NDSm6uvrM9Cl7OjEFmgwKGW7ZHim96xL/vC7y9evW/P0oe23k2fbhpXsiWEk4bombNtMaOkvr3p5Z6U8kqD/ZiQlLNNGd083UukUGOeojHhwHBteUEVTcxOKxSK6u7tRrlRgGAZS6QwcR+L5556BH0Robm5GXV0e1UoVzWPa0NjUrIJIZJeedOyktvFjMac0H/PnzIZX9TB7zlzMnT0LjHFUvCpc26GolEoZSikc6NoDpRT+etUV1c1btqx84cXnNzU1NcNNpbB75y50d44gnUqRniQQqEoPUkSQSqLsVVDxK7AthwpGzhOqo1KA73vgjCMUfpJzq/Q8wdE3qkGutYiCUNN4hHaVJXdbJXRQsjVKH+mHOs5G0y1Y3JgSGEDOuNopWOs2Eje2OCpER9hIjVhKqRBGYc304iCVEQekRKQC7QJpJJQjISRsmyU6ZEJEdYPOKYNSKIWRcgkmsyBDhWrVRy6XRegRvdK0LJR0PvMHzj33GHBulEZKsOsLpD+UgiiyqCFy5UoFYRCirq6QGBNL7X4HANt2bt394ovPb9IIBqJIwKtU4FgmFI/pqBKOS3RLXw8apJQIRQTTsBAEsUkV10hjBNOkOJYwJNdiKkjJRIFMxgg1j/kkTOf1KhETJVlCPVZ6NyKNDR/VHNPfwzBMYrdMh3TIUtaQyDi2gejmQpsySa3xrcUQsZgYqjTqKhWiIAIDNepSSnDDAmek+YyRRSGItsoAhCrSgwCmddSSjJp0oyulgJtyEIaKUONYOsDo/LtOGlASfX19cFzbaB/b6nZ3dUMIBVnIYmBwAOPHjdcXkhyavYCMjrjiyOfy4JyyKDPpDOoa8hgzdoyQMoQQElFIebCplIsg8CB0JqQCDTHC0AfjDLZtw5CSEGuh0RA9JFCMJVQfxnUusSR6OOMcTNUGJEJJyEBARpTpm6/PIwwoI9Y0OSzLhRQSXb378aEPvv9dZ5/5rlO2bdmIqdNnoeoFcBydxW0aGF2JxFq5+Ek1ep49MNiPoaHBiggiFfg+GT2YnJyQHRNZw8FwsQjTIMQ5jAKYJmUQSynJZIFB62tN7bouY6JD7W43WEKHIoqkJHM2pRAJAUtLDYSk/HBL/7eYfS507Fml4qHqe0inXRjMQKXiYdz48dMWLV74kWlTp7V3HjiA6bOmsWwuD6kEZs6ahkgQ9bqvtx+umUI+m9WRPEDF8/CBcz+IltZW9Pd1Y/ee/Thy0ZLoiksvu/Oh++69o72jA+VKGV4QIJVyYJo2OI+QyWQApWDbLizLQWXER6EuC9MwytdcdeVvmxvrpn/7O9+7gL67AoSCYZt4/oVnMaa9A+1j2rF39140NjehobE+kar09vbi5ptvxulnnoHJEyfhox/58Iy6Qt13PvChD+yTkFvrsgUM9A9QNiDntDYMSw8dIyglYNu0/wgRQoYSClYiJ4izhnnMPpEkXwmNkNzC36LXUHFAfPf73xatrR1YvCSDaiWAZVoo1NfDchxkMilkMylMmza15f/TjW6h0XzHmaedveKJx7965PwFxwJAf28/As/DLbfcqk48/RTMmzOHDQ4NIghCDPQNYe/+TtiWzabOmIpJW7cFrpuK3orvwrhRuOW2W843GHfAJJjS+7ge7G3auGVk5YsvLH9pzctvqGnqmDTJ/sMffn8GsW7omRfrjtlBJWuNDgkG7Ni2a/MTK576m1cuvem82pNPP20uAEPJeGjLdCMKTJwyGXUvvpzq6JiUeTOfMWl8+4SW5ubx1Hxot1woCCGRyriwHAurVq7sam1rGX471tBZ7373eXfcfscXAVjEomO1jHdt/pmvK2DlylUv9/R0HpZ+d9z4KZMfuP/e4wHCU/T2mVxDISX8ICDPGYP8AFzHBTMYHnvkscdXrVx14+F87px588YbBncBwDAs5AoFMDCISDBi0KCnWvEPiQrMIzHRgFmXsA5GcYCZHj6Xq5Wi47iHjIyeeNLJs674+xVfdV07LYTSz0d2UKPW2taCFjQjEhFMw8SO7dsHVzzz7CE112PHjbfvu/fu8fSdNRuN1aKIYvfnYnFw/Z7dOw+ZVcAYq/vb3y7/2jFHH3Ni6GuHYyaTdI5IKLBIJcamL695GW2trcjPmE1MQB1VGEvxMuk02lvbDmufamhubu4YP25s0ny+4kWJFDW/oeRc69/t7u4tf+Mb37569epVb7jxHxkeZkHgs3QmpWnvqKWk6IQVbpqwOD1L12/esPHSy/52/X99/4dv+LhOOPWU3Bc//8VZANXF5XJZgzc8YYVpJKEXAI5cuIi9tGql4lIAQRAglUoh8ANwzpBOk56Sc47hkWFEoUBppETUvDBEcbAflUoJI8MjJEVgCtu37kRxZBjF4SHs3rUTDY31uRNOOG5Cz4EuHNi/D/V19eBgmDBuAnbt3o3+gT44tg3HcbBrxy5s2bYF+/bvR0tLK45adjRmz5kZNdQVdpaK5W7f82HAQDadhQGK2rAtCxanpsNJuUhnUknYumFw4obbNomihYAIhW5iiIrHTL2o9EAvbh4UA2lytSOwaZmUbakRPdLd8iROSIhIN1a0UZKpFTU6MV890ZZSyjgtZB2rwlSsFWXJiozNKEREeZ40CqoZ9hhaG5xE6uh/xHUzFUXkiCuViO2HKYYmlQI3GAyLDChyuSwymTQhZUyh0JhDY1MDwjDEnj37MDQ4XMhm8zP7Bwa04ZckCq0O/qMpCm3druMgl81S8xHROUln07AsG/19/bjq6qvv3rV79ybHdan4D31Uqh7Fz2i3a9tx4Pkexb6kXHKrhYTjuvowFUzdFMRoOfR5jx19aXPn2ghMKz6SqTEhQtwg+jTjpLllPNZNGzAMK4kiShp6XjMtYkr77TIyN5BCai0vdSlK0ucZJqeQd9uFbTmkGYQ2I9I5wkqRtouMy4gyLxOHbdI58FGoJ+dcZ2Vz7d4rEh0G9LBDQSVU4zAkynckaCDjuCkocFSqVcps5SaampvR0trIFZPMdizKrpVAPp9PDMhi5MC2bLiOC26ZMB1Lx1uRVKE4NIwtW7YUAY5MJkuNrMHhex7CINR5zPp+gTbP0HFacZ4ssQNoXTEY2rWfduHADzS1lyalsfETdMMISdpMadBmGkXkvuvqfY04/xKcG00XXvTVjz32xIqGJ55YoQBoUzWWDMbUwaPQmpshY6P9v9Ha1oLm1iaAQxWLwygOjySIf+D7CDyfqPcqgoQAN8zaezLaP6DzeJWUZJg3WnseOzJrNomE1OeQ0GLbdpJ/C0VDNsuy4Ae0f0GRzIH2QxMiCmFbBoSgIYrn+WhrbV22dMnRJ/Z196LzQBcCL8TjK57BSIViB6MwQk9vHzhM1NXXkeeBHs69uHIlFARSrokojFAcHMS+vTufeOjhx37f1NLW39zUQMiQdhP3PA8MgO95KJVHEIQhql4VitXMAb3IL966/I5Ln1yxYjdAw6dYKjJcLqO/v4/ub9vE36+8Es+/8AI4OEIRoWPCBPz+L3/CzFlzMVwsYaRSwnvff84pP7n4p18YHi7xkeKI1jNrDT0YgihIhnOO6yCbz8JNaydng1g2TG/YsfM9N8nkyjAMmBZRjEUk3tJC3LTJoMe2bBxzzFIsW3Ysjj/+WKQzGVSqVKNOnDCu+f+zzW46X/eB97/v09dddfUf4mZXhhEKdXUoewEKdY1s0oTxDACy+TwM08CkqZPRdaAHe3buwWD/YNTf17e2t687eCu+z3kf/sh5Z7/nvWfFEiUOojPHcqrbb7t9/cf+5d+uefnlF9+QIQsTov3/R95/x+lVlev/+LXW2u3pz/SZZDKZ9EYKISSQhN4RFcUuFlSKXSmW41GaitIVFZUiSFF67x2kpkN6z2QmmT7z1N3X+v6x1t4znOM5Eoiv3+fz+Y2vvABhnrLL2uu+7+t6XzOmzThQCkFGPTPwz5Sw6lkI4LfX/fav99379+f3x3fK19dMifrrshmsFDWg6OnqQRgGoq6+1vwg79HU1NyYSmfSkXxSrmeqMgTw6j9eHdq+ddum5599tnN/Xj+EseRpp33q65f/+opfMF0bw0O5x4rUQtF5i/gvoOGq9/texxx91OwZM6ZOi541OlEwvFHPF8IUL0QV2kwjcByn9JOf/vTGd9a+vc+xOKd85OR0c0Pj+IH+QRbJ3SNBa9TUvfvue7Z07u3cJ5l0e1vbVDmpFjFrY5TUSBZJ3T2d/f19+zQ51g2Tnvrx074xcXz7AskKlY1rOupRHIoQvf29CINQ7pcAcPBKNpvap/dqrK9pra+paR3RkcvnO1fqLaoUIs8998Jb+7wuZRKZ6//0+0u+9KWvfE02q6liNSkStJzEgGkyvvW3v7/O/9tdf+NSFSZGaNTvUlcT6nnB+6IiLl2yeGJNJp0ZkRz+lwYGjWyPo5tnI9d/U0PLBt/z9mnymrCSSULkZoeM2KNHGvZRrKfSS7/4wkvP7tndseG9vv6CgxfRfC7XKAjqovWRGRo01XSOBmIA0Le3exAAVq1cIaLvC9MwYr+abdtxB5+HHHbFQaBiZKrVCkQQIgx8hH6IVCqDmlwtCkMlBDwAoQKeY2NPVxd0ptVPnjhlTHd3Hzo7d8N1HaxesxIB9zB16jTUN9THU5NCsYgVy1Zh2fIVqFbLqBSLOGzRknJSs7Z6vuNTSlEuF2E7NvK1srlUKBThhj78wEO5VIHjyPgaSgh8L1BRIHICy0Me+ymhsqAEVxmYEn+qPJJU+m4UhVNK3xSRlMnimgih5IdKZsrYiK5IjJi+IyktJWJEsgqARJO4CJgUXWyRN0zNHanKzgQhMTk62tzyUBVeMfhHdkZ1U2Zxypx0BkM3JCRJNQJc10Xgh2CEQWMaeMhhWQZMy0C1UsXwYAGUEhiMYbgwiHkHzlmUMBOThweHUFOTha7TeOwlo5GgokkkWrxcrsD3JV01CAJ4ng+NMWzetLX/iSeefqilucWrq6tH4IcIPLkx4IGQdDVGUamUpYTX88B96akOVUHAuZRSxX56Kr2aYRDAdwNoVAMjmhxmBzyGQMXgLyj5OUiMtWdULmwiUPLZUOb/CRX3FPuxIy+DGNGQBUpqPlomLWTXIW5GhEGoijc52ZSdu1GyNFXNhoEfTwMiGjTV1CZHeTsN04CmM/i+H4PVTCuhOu6BaubI7k0YcPiBBx6G0DUD6UwGggt4tivvdUHguT4Mw0RxqATXcQllBJaZAAFFqVyEYehxEyHyn1NCkM9mUV9To+RGIZJJCXVyPccZHB4s6LqmYqIYTNOEpsjaktYnYro2KIGmm5Cuc6pIfiN9bzGKW07YyMgzWrcZZXHGtG4a0A0ZNyQ4h+c5qJTLMcnasExojKFcqWDxkqVfQsiWdu7twhFHHEmiBTIGVqjaVmk7Iub4KOnZu/OwXdu1crmclsvloDPpIU8YJphgcD0fumkARMrySRRNRmXTKipuR1t5JIGZxvYDWfeKGI5EqQQuhT6HH/iyy66aO4TIJgulgAgDSbIW0i/meS5CESJXk0MmnUGlUgbRSPJTn/70SfPmHtzsc4GhwQJWvLUKRx15GGZNnwrPczE8XEA6kUJTQ72U0zPEMiTGJACra28XXM+FZZnbzj7rzKu37tq4ioBgqFBEyANouvx8jusi4LIZpquMW9uuIvA9VKsOwjBAPluLzZs2v/7Y44/ev3e3tCAyTQPnwDFHHYNZM6ajp6cbfb39qNo2GpoaECqxpa7rSCVTmHXADBx1/DGoqalF1XHxgx+d+8XPfvpTZw4NDyCTy4KHAo5jwzR1JCwrjoxhjKJcLkt7DGVynfNDCRkU6v4gFH4oY6N83wfTmFTNhPu34N20cWMZAFavWoFHHnkUAQSWL3sLuzt2IZlIgIeAriXrDdNK//9ToTumeVzmhGNOOvoXP7/04pnTpl7Q19PbAqiEBYTYsHkD7rz3HkyfMwvpdAYAUCmUsXtXF6ZNnYaamhyOPfFoPPjQw2vPPvuse/fHZzJMq+1LX/zyl3jAk4wy1awCdF2S4gFg4aGH7Jw4efJ7LlzaJ7bPmDhpwvhIlk1HS19HFbpRU4pQih3btm1/6IH7H9pfx7o2XztWdYPkvRCqZqRGsXv3br5p0/rhrVs3fyBfLTOTGcbk5piCgCigKNMINqxbj42bNg5NmjxpsFq191skESHE/PnPf/HD++67+9djxrROGujtB4n9i7J55btSXQcK7O3eu/ON117f8H7fT4BPBqDHm/xR9iAOOVhJ6AY0ld4QpRQ888LzT61Z+/bj7+c9V6582yNEyze3NFmy8Hq3KgAAdnft6S4Vh/cpP/m4k447QD77xChOyshzEgDeefvtrZs3bdmn6+JLX/ri577/nW+dDjXxlnCld48kC8UiHnjkQRTLJfBQxvUxplcc13X25b3qapuacvnaJtl4JnFU42gL796ebvv+++/bpyaHZSbYzy+67EfnnPWNbwGydqBq78Kicz5Knr1hwwbnl7/81fKklRuY1D5lpOnORwY1SmAnOH9/z5eGhoapPf0DUikV+WhHfc+4JopVbFzxayiqlSouv/rXT4Jh5z7Kucdlc5nESFkkRjFz3h21Wi6XO1979bVH9+X1ly97kw8O9Fk6o0koNawEU8qUDEoJXFfGcxZL744y0/zAV2Z5GWMhSZYhXEduqpOpJLgIYVelH5Mwhlw6Dd8PEXBJGRUQMCwLqUQSOqOwfRcTp0ycYRjJ2o7dnThw3ly88dYb2LB5AxYvWYyevm4IHmJM81i4tgvd0PHRUz8Ox62idexYvPTC83jk0ad2rFu/bl19fR0KhQLSqYws4gwdIpWCbdvRaVLQqBCGaUFjHI5tg/MQrhBq4io9rIHvq82t3LwbhoEg4AhD+R1kE1MGUHOVfxrBi6KLAYRIiSAlsU+IqNfkgkuJtJJiklF+AKaKpzD28AqEo5jkVOWAEUIV8EoutqNzSBH7FUNwlTtKKEUYSsiB73pKaq1yYLmkHHJwMCZJ1mHAYdsV6IaJsl2Vfk/BYNs29GwGuWwOCEIAhHz1zK+ems4kGnZ27BCB75A9Xf1oaGpCwpLTV40RhIFAT3cfEqYF1/dUHrMOgRDDwwUIIbB85YrNG9avXyW4kLE7hMCuVmHoBkwrAdu14XuOnN5CelG5ENANAzQM4XoSyiOo9NgQpijcIUfAOQi4WrhUD1N5Q5ki3QW+L6djEVhM/Y9Hjukor1gRp4mg8ENfwaNGIo2iH67gHaahIwgChKNC6JiSZ3POARLIq8iT55MqeTkP5cNCi55CqsERqQQY09S5pjB0TVEKJfggqsFlYSMl3BEIQdd1gMvrk2kMoS+juAgi+BWFXbGRSiVgWAyGQdHePhFr17+jFYsVlkgmZEFOuFR4kBGcvOoDyok2k02U4eFhEKKhpiYP3w9cz/EdWdz5qJRLAAN0KhUShEhqMaUCQchhmZakQPtVdQRGFkFKpW8zmugTQsGjXguXagnDNNR9zUG5NMQQCFiGBa5xeJ6PZCqtoE8BSsUiauryi+65955z1q5ZY06eMBETJ02R0U9qPYijgTDirycg7262jtpoEsIwZuzYzK5du4mEcAlYVgK6qWNwcBAhD+D5AqZhQjBDytOpbPAwTVPHhsD3o4msUMAkEUPnNAXKC0K5qRWKbEIIlJpFg65pUqEiJGhMhPIBQCmDH/hgjCGdkKRkShmyuSxc1wHTtCMOnDv/qIMPXoDlq1fikceexkc+9BEkLAt79+xFqVhBLp8FFxx9Q0PIZLNIMQPDxX7Ytoslhx6K4aECCsUhhL4I/3rr7beVKpUna2syGBwaApCHJOm7CLj8rJlUGiGX3IXCcAGccOTyeWiaBcetwvdc1Nc3es88/fxf28ZNmPvt73zz6ETShOsG0BhFd3cPbr75JixadChOOenDqK9tBHwOBhmfBRAM9A/CsV1MnNQuY6KA3He++Z3znnnquR3dvXuebmhoUo05Da5The86skHnO5LYL5Ruk0Cu0UyidoMwWj8kB4ExOdnWdQ2Gru/Xwq4u3zAMAI3NTfDCAIbGIDQNtl2RU3Lfw6x5M1vGto+tAfD/PLzKSiRSXz7jq0ee9dWzj0+lrEOnTZ8xM5VPpmpqa6S9YHgQuqFjT/deTJsxEQfPnxvfv+Wqjdq6LAYHB2NZ344dO190XHvD/vhsP/6PH3/ppBOOWRyKUbvIUVmQN998cwdl+rNz5sx+z+fpmOOOOUQDIUEYKrDdu6XMYlTzLQxC6LqOF55/8dEdHTvX7a9jPnv6rJZYqkopoJHYR1zfWBcsXrK4569/+1vfB7rOG2uzdNRESyrwIvq+jnLZ0VOZDBs7foyzP74TIcT49je/+8Of/PhHPwBg5WuzkOabEAO9PejvHURbayvSo+zxt9566xuEal3v9z3nHThvTvwVR+8l4hM56v/jsiG6cePGnT/9yU9/Wy4U3peUe09np3f2mefkTdOkALC7owM7d+7CATNmYt269aJp7BgyZ86sfYrjapswMfvQQ/dNi6b+EKEiC+Ndma7LV6xYZduV96ycGNsybt6qt5efByDve0KpCHnc+I6ewalECscedQySySR8Xw6ydu/u6Ojq6tonH342U1OTVJ166Zelal89IiN2PK/c1Dym972vT0n9u9/93vnfP+9731P9AFBtlCJMKG4Llxaz/sIw7x8YeGbC+AnrDpp7YB5AQ1zoRs0QzhX7JeSECv5+roNJkyfPSSQs/FcHb/yZyEiNwUfbKwFs3Lx+057uPU+vXrlyn+TUpqG3EQIr2iuR0RrpUdwVALjk4kufevCBB1/Y1+9VLlWyM2ZMbwSk+k9QeZw1SGCvL2MYfTfw32VDoAil31BORlyEQaA2UgTJVAKMUgSenAYZhgEv8BCoFxSCo1wpwUqYmDJpEhoaGmAl03BtBwvnLzykt6ebvvLqy6HOdAgCHHvMCTD1pJQkKgmf4zlYs+ZtiMDFQfPmor6+GVOmTMXSw5b29PUP9AeBDDyvVCoQnGBwqIBSuQxN0+Nph5WwYtmjH/igGpOeOEX7C6NoHyr9tTJjVcD1PITcj3NWgyCQ0R2aJgEplIzk7sbxrgScxGmzaoKn5KZq00wVUEpEMsiYwqq6NJQAjKppjnpwRZMcJa8gJBoAysLWNCwJ4KEjcrxQcHi+px4OmqL7CUmwDUIlY7Wg6zqEkDLnkAfQNAOGYULXqJS9EoGG+jowUIR+gM69Xairr2s69vjjDkmlkjh44UIEIcfmrZvQ1yvXANv2JHlOo8jl0khlE2hsqodddVAolDAwOIjuvXtQLhdBdbpHAH1MY6oA49A1Tfm4qzJghY+Y2kEAPwzicZ4IVa6wRgEmlz9f+XmZxkA0quSe/ogfQxlfeRiCUCabFspDy3RFxuWyMNQMSRqOEOxS2qTIySROLZIDd5XzJRT+nDIGplFEWaw8kjVDQY8oICAzPBE3SMiI/zsMZWQPlb9rGAZAAc9xAS4bNhACvudCYwy6IUEofijPr67pccSRAOAFLgAOQzdhmJbyN1Rlga1TFf0kZCYpoeju3YNCoUQFmMG5gKYzJJNJMKKN0qLEabiAkusHYYBUKg3TlPAi3/UDymhYV18LAgpdN0GoBp+HIIzC83xwQqApq0QYcLi2o0jFVMnLoY6DUizoI5YESgig5N6MaXHDyjAM6IzBMizYtovA50imskikkvBD6Un3Ax+Vainx5TPOOD2ouJN79u7BEUceFm8iS5UKCsVSDI/jqqiOZeqjNDlhTGIH8vk8WlvHpkrFEgehSGXT8PwQg4PDoBRIJhPgYSBfi47I4KO1JlC+5WjKPJKrOQLcEQBCHq0zEYROqQyCACHnqNpVKX9n8v5JJlLwpbkcuWwOQjX+6mrqYFdsDPT3Q7eM+gsvueiMSZOnNHZ27EFheBhLj1iCWbNnoXvvHhAdyNfl0dTciLr6WuRyaSQVqOq1V9/EmWd8HS+/8gYKhSrGj2vHylWr1t562003Q4iQ+0AqkQDTGGy7Cs/zwAhFwpJ5weVSBa7nIoSczieSSQhwaExT8kyBLds2rr7hpj/9+uWXXto40DcA05TXYzaTw+c+fzqOOe5YzJw1HcmEhVKxjOGhYbmuQ6CmpgapVAL9A4MA56hWHcyaPWfKDbf9+buE8qbBgX7JqqhUYDsumK7LSa1mgXACBgZdN+SaAg5dyfcjcJVUDsjnSRiG8D3/3fK+/fCzYvmyvl17todjx47B5MkT5eZl0gTU1tRi985OuJ6DpoamMUnNGvv/cqFLCNGnzphy6Le+fdaFxx513M+bW8ecMX32jIPnzZ+XOnzxUjieixVrViMUAkwzccIxx+HTp56GkEva/Ttr1+PNZSuQtDIIXA8tjU3o3tOH3bt2vrM/Pt/CQxYf861zvnW257ly0vrfpnvAY0889vL3vvvtZ+6/7+73VGDUNdRbsw+Ys1C1QmNrzbvUo6M2j1bCwqZNmzuv/c1vb9yfxz6ZSObkhEkg4F5sIVr39hqsW7ex+NxzL76zbeumD+QVHj++JfahCyKlvZGNZerkKbjg/B+Q1rFtg2+vXu3th2up9txzL7jwmmuvugCANTRUxFurVgAQYNCwfv0G7O7cDSNhxZJOz/OwcdOmTatXrSy9r4JjyrRJH//YxxZDreNRrGDUVKVq2iWTD8K44Lr6qqvvWL1yxSsf5PseecyRLbEKQTdhmAaEAFrb2khDXQN6u3r2qYmgMZpPJDLjRqr1EQWctM8QlIbLeOHZF9/zZHTi5Im1t915ywWNDU3zXNdHnFmtUhcCpZIDl0rUSe2ToDGZL2+YBl559eV1g4P9+/Q96sfWZ6OPHclq45JM7dFEIBzLeG9NTN00yDe+dc7Xf335ZT8AkBQR7RIizrOVA0IOqlEkk5Z45LHHHvz8F8/4yeq3V18GEr75rmY6EbHfFQCqxQrnUY7PPvyMa2vXFxx44LRsKiX3HkIoxo3cY3AiFDOIjMQAC/kZPNfFjTf+5dVdO3fsM5k8X1NTHys4CJWWI9+D7wcyqrRYljY0AK++9tqTlXJpn/O1a2pqJzQ3NY91bMlwsiwzVk8EnCOTSWHXrt19b73x5tZ3FbxCTayCMEDgeQCoLCYZhW07sB0bhFKk01kIQRD4LmynCss04Lk+mCIJV8pl9HTvwZ49nUinUmMWzJ03/5677sb8g+aT+qZGvL12LWZMnQxNJ0gnMsgkUmCUYteuXahUynhj2VtYuXIFnnriCSxfscYngu4ydaMAQuLpVMB9aJrMjnRdB17gIeQhHMdGGPoIAl8BYBiEyr4NfB++7yEMJRacCBJ7/zikDErEk2Cpo5fRFAS6bkrJq9poCzUBjILDDd2CxpgKO0Z8swpFZKaEIJlJQ9N1eS1RdcEp2Q6izW1EMlNTnhiTHqWPKx8bD4MRWYCI8ESyMxVJQEIF8JLUMhde4Cv/oJyGpZJp5NJZ+J58gOk6hW5oEKFANpeFYeoYGh5AyrImaoy1vfXGMrz4zCtYu34DCoUy2sa1KRqfoTDrQMJKAoJg79698AMZAO1UHKTTGeRzefieP+j7AXI1eRDBwYiMfJKFly+l34wh4HKDKeOTRBw7ozMdYRgg9D3olEFnenyMeRjGcnKqpNqUELn5V1nDgoQq80xIIFA0XRdcSpiVLFvT5HGQsVwy6oYSCkPX5e8pMBhlTHozVSTUqAeqLHC49N5SQmRhHzcp1FSOUgXkEvHGJQzD2PstlFdVCAkuCxSRlwsp36BKPeB5LlxXEZF1Q8KRlBIgDCRdmjEmJ79Cwk8kTEsqAKrlMjp3d6C5pYE01NUY1UpZRf4E2L5jKzq7dsvPLSg815XeGVWs7ti+E44jvf9y0WeBH/ie74VIZzNIJBIwVCEhc2WlBFnTddVNDGT2siZl99E9IBsTUcwWg66KLEqknJcqyVcQhPADOYVjuoZAyGvcDz1Uq2UwRhH6PhKWBT8IcMCC+Ud89GOnfuiKa65B/+CgMC09bmakkykkk4n4/ow93eLdMURQ108kX7XtCirlSmBYRhg9oGQzTZJ/5ZSWqqg0R2bXkpFcbaGK8Qh2Fv0Z2U9IeAtRjQJN16Ebeuxbl9nCNJYNBYF8oHieJ+VxajJsGDpsx4Hre6CMYGBoEFOnTvvwV758xol1dTmAAmOa2/CJUz+K2ro0xrSOgWEmkMym4HOZpW3phswa9zkOO+RInHX2N8AJ0DymGaDAmrVvP0moubsmX4tMJgOhmnGMagqqBjh2FZVyBdlMDg11TUhaCTiOi57eHgwN9sLzbOiUIfR9NDY2Y+vWzU8//PiDN1CNuK7rIxQh0pkMpkyZGnehA9+HYemwuYeNm9djeHAIhFDU1dVhcGAAWzZthFO1US6VcOrJHz3pEx//1Nc91yGFgUGEfoCmxgZkUikAstlkGpZUH0DGOPEggKHrMCKQofLJRwRsnWqgiga/P382bNrctWnzllI6lcHQwDAqVQf1dQ1oHz8RjuNg185dyNfkk/MPPGj6/6vFbkND88zLr736wptvuvkPBtO/etc9d8760KknZD784Q+hq7MLN990C155+RVMHD8ejfWNSCcS2LR5Cx545CEwasD3HVSdMurr8qiryWP8xDakMikYhuYPDQ/3fNDPd8ABB9TeeMPvz85k02Ntx5V096g9qBpZ3Xu7y0ccfuRKTTPfs8+wtqmx7bjjjp0TWWn+azboaCli9LNs2bJX3l675p39deytTF63nYoOpZCRAwq5I06k0njxhWf3/OEP1639oO/TUtdcH002I7ANVVafFWuWi5tv+NO2G/90/dsf9H2ymVzjgw/ff8VVV13+Y0pJulquwEoaKBYKYUfH7gAA5hwwBwfOmwvDNBCqDblhGJg9e3bp/b7vrFkzDx3fNm6yfIaIOL8coyPuVGEQWUVs2x5eu279Mx9Ykl5b0yyL9gANjY04ZNEhqGusx4SJ7cjnc9i2Y/s+3QP1dQ2Z1nFtdfF3kdJF1RBW34tyP5G2+t9jA4J+5zvf/8HRRx3zOd8PJZtBTUUZoygUhtHZ0Sn3RFTu24IghOt60CiDU7HxzFPP7drX41J1Slb8GdR0M4KKRjdauVJyLCvxr6eZ6SQ58sgjT7/opxf+EEDec1z1ekoNQaRpCwJwXRcAqn/7+z03XPfbP/yoY/uWd+xyufjaG6+9wBVLJppcEDk5k++RNELTMPaZUE6YlmSa3hhPczFiy1ISMWmxVFnhImLMACgMFyqeG7z+8ksv77OCI5PJstFdBM/3oj6CHE6oSEzPD3b5RLyvnOMjDl88N5fJUsMwYCYs9PT0oLe3H4SRGO7X29/bWxguvusap4RIiAgRAoZpIuQBiqVh2LaNMAzg+z78IEClUpbxL7oGRgk0jcJKJBAEHLbjYHdnpwQ5CY5cTe2cVCY79YQPnYjPfvoztKGpASefdIKkHHMO09SRyWaUh40gEMAhi5agfXw7hgqDKBXLPbf89a/LqrZdZkxHpSI/i8YkAVVmxzI1+fJUJIkGRmWxwwiFqRnS4xeGcjERBKZpQdNlRmZEHaSQxQsPIwiS2uxyIPDCkWkPkb5BIiTUR3qD5cY3FEpaq6KIZBVFwIn0pQYK2hOP4STLWV54XP6JMOSUyPiBqPaFgJLbeQhVh5UqWXVU2HLO4fuBksIqGSijMsiIB2CUKo07UaAVmWfJVWGVy2aRq8mC6RSe58FxPBx3/LHzDKbnzFQKLjzS1FCLE48+Rt47oeqMRTINIj2nhmmipiaPmnwN8vkaNDQ0wg85Vq9Zs813XZSLZQAEnh/CUPCqaOqqUU1u3hXIJwqAF4CcwKqpNgSBUtmOdK14JPOkaiisJmKEwrISYEST0sYIBKQibQhlUj4ehgrCxVWoOeJFnKvpP6VaTFYOw0AVRtFEX8qHiRAwdAOMyimsJC6rLRAP46gjQmURqjEKjWrQCFPRKCoSi+nQdTP2WWuaBsYYwkBlOgs50Ze+ZDkddVwHnuuqqbS8nik1wAMOpjHpSVWQq0qlCgEgk8ugZUwLgtAToCLgUNmtlMLzfQwPD8UTadOwFPFcQGMUbW2t0DQNxaJs8JeLZd+p2p4feKjaVYRckvN814PvylgbTdNGAayk7JirWCmumg5BGMSbAd/zpYxbwebk51dEZxHC913p1/YCVMsluK4DHnD4ng/OgUQiCappqJSKmXO/9e0veo43YdacmfwrXz2TZLN1iMBkjGmyeCQUXiBVIrbjSvJ3VIAqKRpR9+fGTRuxcuUqbN+2q6Trhq9rDIIDiYQeU0Z9z4sVCgIyXkqC8PR4qh1dQ5EqYLS5RghZAPPIBiEIAlfyCSQRWkmWKUMikYShS0AaJRSmYYIHXAGsAO6HSgXjQoTh4nPP/fbXLdPKdHXuxeo1K1FXV4uQC2iGBlO3kDRTSJkJeH6AZCIl74lAHn/d0PGRj56IWTOngwuO1W+v77jn/vueyOXS8HwPju2AEQ2VYgnJRBKpVEplL4dwvCpct4pSuSQhcYpgTkBRrTrgEKitr4ttHH/+05/+et3vf3ufpGgzEMrguC7KlbKUcho6EqkUGhoaQamJYrGMiu3A5wGmTJ2MydMmSyBfLgsA5A/X/+FbS5YuPsMPZMPPtiVBnAgJigt5INdNwaHrBkzTQuCG8BwPgIBpmSAqS1BwqfqIyOr786cmn99zwPRZewFgfNt42HYVXAhYCQNeGMINQlAAk6dM+X+u4KXUyH/29C985uqrrrhibGPr+ds2d8ybM29R7R//cL0+rqUFDz/8CK659lr0DffiiKOOQiZbAwJgx7btxe+fe94/rr782h4A6NyzB9OmTgUhHH29vVj7ztt47NFHUSqWC7t3d/Z+0M85c/qMg7Zt2TnP9X3kslIC63qu3C8wCWl77rmX7nvskWee6N8HONakSVPmZpKZMcBoZgCJEu7eVfVGDbJlK5a/sj/PwZyZ01Jt7eM0ANA0E7puSmk1CCZOmoSafK0xc+aMzAd9H9NMxtArrmwsAGCXK1i1clVlb3d3hxf6HwhYVVfX0PjAQw9e/dEPf+wrggtSKpWRTKewY+u27v84/0f3PXz/g8sAwLQseAo+F1NeAXR1dL0vOXVNQz351Gc+ebL8bhiVRyNGNVEjRR+JM5XXvbN23Z49nR+4mdDY0pgD5HOCYEReK0KB5198wVu/Yf0+FTOpdC5t6FpCjPoqEcE7ithzbJenspn3BFg64fiTP3vOmWefExf9lGJ0l7lSsiWoUjWSAj9Q6jVpeUvn0jhw/rx9ltbU1+ffVZCROD505L/x/cD1o0nD/1ywk3O//Z3vPPPE01dks7kxrmvDCT3BYxmvHFCEoYBuMuzYvt0968yzLj7jjDO+//bbK2KK9csvv7Zh5+5OG/EgTrwrC9d1fX94cHifmy6pVCrZ3NSUkuqCcBR+WVnAFIQzSg+hRMb1EULRvbdvc6lUWvF+rrvh4RFfuOt4cGxPgVTl3jT0pTXvrrvvuX/dO+t27OvrNzU3JmfMmjk1UmBwIVBbU4f6xjpl/5LHra+3t+g49rsm49Tzg/jBHpFfo2gLXdfhBxJ+4roOQj8AAoJ0IgdDl9megkgZRr62Bk0tYxCEPvvQKScd1jJ2TL69rRWNdfXIp2rQ3jZRXlyUxJM92ylj65Yt6NnbDceuorG+BQsWLMLUKVO2+L73DqGyABNcRsY4ngNNEVgJJaitrYVmGHBcT+bxBh64kJu8IAxi0qkgQCAClEolaLqGXC6HMOAQgVBTO0VGpULRqVWnVijzPFPYnlFFKAFVxFSVESmih1MkzQQoESqcVS0MalMrCzP5h6gMyMifS5TUOYpAiSA2lEqZNOcClFFoqgCkhIJRBk2TZF5NFf4QAropaaNcCDieD8oYiqUShgtFeb5DAd8NwTQNjuNieKCIgYEhWFaCzZgxY+7LL/2DJpIJfPmLp6O5cSxAJeEVFDGBmsSB9AK1NbUIPYHO3V1IZCwQAB07OrpWLlu5UtN0VEtliFBmoxZLBXi+DaYRhH6AwJf+Y0Y12ViAnIz5vgfHtRVZVhZiYeCDqo1mJCWnTMqlo0kL57IhIYtEJpsAQtGco4pZSdMjNaKUz4wUWBEl1/MlAMo09VEdONkACYIgBmTxUMlPCY8n/Dzg6n0Bw7JgWiYC34dddZRcNUQoApUHLPOaw1CC4QAJS4tgRLohiyqujPnRpDkqiKOpYBD6YBpVHlc58eMqKkjXDBBIdHsQhmhubgE4uF22e7OZHLiQjqaWlhY0NDTFMhu5sZLHg1DpCU5aCVhK0jw8NMwAoelMRrb4vo+ElYCpm0gkLNkUCny4nq2AchgpEhSQjaliPVqUOQ9j4neo1BBMkw0b2eSgMFMJhDwAI9Lfn63NwDB0JKwEKBh279qJefPnfXLRgoUf3rh6HSZNmEypym6LvguUm5uAgBGmZGccnIwUMer2jdeFUqmIcW3jkclleOgHsKtVOJ6Dqu3EygCdSECYYWjxRFBOSUZihjSqSSlvVNArWXVEqOZq0fF92dgzTAOEyqzoSCrNGJP/Hhy6IeVejudCMKlaME0TyXQSdsVGTV192+VXXn7+8UefcLDv2ejo3AnTsFDfkIemUVBBYBomdE02xVKmGcuSwiCEGwQghgYBSWYfGOgP//SnP93dtXv3co0xFItFDA0Pg1CZtRvBtkQoafrM0FGullCqlGS0BNXBwGBZKWQzGYAAxeIwdEbROrYVlpnqv+666375+uuvvEmI2lcp8jMkb1k2hSjD9KlT0TquFQlTg8ak+iWZSiOVSmGgtwcb1q1HTTZfd9utt/9g9ozZR7ueDbtiI/Alw8HzfBlvBUm4l88eAc9xwVWzxbQsaJqMfdJ1Q1lLQqWV2n8/O3bs3Hv77bevA4BEMoVMJo10Oo0gCNHWNg51tXVyM19bPzuZSOX+Xyh0s7ls9rgTTvjUn2/4/R/mz5t98QvPv3DM2jWrTSIYPvPpT6KuvhY3/+VGbN2xFVdeczm+/MUvIZVIQaPA2vXr1n3xjK98+4nHHrlw4aKDtgPA2OaxyGfzKJfLKFWKaGkaA8YYhoYKXXu7u/s/yGe96pqrls49cO53x4+fMCGXTSMIuYzDEDSOG7nq2quv/+EPLvjOU08/vE+ywKWLFh46GqAT757J6DibkVSCrq6ubU8//cxr+/NcOLY7DgHPYLScWv3Fd0J85nOnt/zq8suXTJo8iX6Q9ym7VRFr40aRixPpFA4/7HBjwYKDMWXytPftFzjkkCVHPPboo3cec/RRny8MF9Db1wczmQSAoR/++AdXLVux7OKGhrpdAJBIJTFmTAt8ZUMBALtaxaZNm/z3895t49umnHzySUujY0j+C+V/9LReKEgsADz40KOrdu7c+YFgYHMXzDPGNLcko2uFspiSgReefx6rVq4M8/ncPnkzG+pqsgajo+BOkTw7Ji3BtKyqV/X/5TTywHkLjrvpxht+aiWMnOcFiB77XEj1DABUbBc1NTWI8F6axkDV4CY6VvmavLGvx8atjBCgQmXXIkQOSWRRDVTLFWzbsu1/bFJZViJ73nnn/+yiiy+5FBRNQgC6aSGVSo2waNVzyld1c0ND4/IXX3zpBscuv8tzPHfebFpXW0fjiTNIzIkBgMHeQb56xep97qi2jW2py2bSEh6lLGPgYsRzTQhCIVSaC0cY+PA8yWp6/KknHnv11X+8L8WIiOQtalhiGFIhSRQUua+/B888/fzKn/30Z7dUCkP7/OBsbGpKjZ8wcWy0Egaq8a1TBiIEdEVrrq3J25Mmtb/r+tAkukeD7bqSrGpZsrjl8gHPKIOZSEDTddiVCsIwQNWuSKkzk3eqoTMAHJ27O1Gbrm09esmxh9XUpPH2O6vEymWEeL6DRUsWwXEcJCwTdTUN0BMmuvbsRl9fN/I1OXTs3oXenh7s6e7p37Jp00ulUqnDMM14quN7AQI/QOBJQBPnPgqFIgglyOWy8F1XShwBSXBTG2RKqYqOkRE0lFA5WYyIaSJEFBcjoVOyY8AIi7MXATWBESNgG01jsiAKQzWdlRdTRGjkkD5h0Ig+qPJgyUihCMIVkEhNDAUB4UpeAaE22JHegMbvFwbK+M1InEEKHsL1QpiGrgpDedw0pgLrhQDVGCx5U8IPPAhDen6rFQcCUoYbBBztEyfWTZ0+Y0bH9g7U1uVxx513oLWlDYcfvhSMyelhlA0LKvd6lbINUzdhO67Mz2MMDzx0r9i6Y8dKP/A2JpOScEoJgWWZKJaKSCYTsKsuHNsGCGBXXVCNgqqFD1R6G3kQQjclkMl1XXkoVMdSU3ClUIRqki4vdk03AMHh+x4MZoJqDKHng5HovAUglMFImHA8R4bej6InIiJwE4JAFcVCFdLRJE7TNFBNFo8RJj/gQezB0HQDjArYbhWCSMkp1IRMhBIi5qmcUwDQNSpfR0GJgtCHrpsIAw++L73HgRBIJlPwPEc1fiiELydkumHCMHUYYQjPc+A5ZVhWUk2DBRKmBc/3kEhayKQzyGQyGN/eDiEE3nrrrT2nfvxjGOgfwrSpU5HOpBGaiTjuKvJYy2ta3lOCA6alw7Vd1NfXp9rb22tWrl6D2rpahIIjYZlwbUdOrBmHq6jRknAu5cOaJunnfhAgCnCOoqAomJK7E1DK5D3GJFGdCw7DTMBzXIScI5uvRSplQTc0DPQMwXFdFIb6MW78+GNuuOHGH+7t6Uo3tDWJJUuXkKGhfgwELsa0tKqiccSHpDMdIQ8xXC4gl83H+80orkI2mRhmz5oLxigsQ08xyixKmaNpGjQqC8xSuYBcNgPHk35xDRqopkl1AI/kS5EKQ3Y8NV0HD0K5PjAy0j0nRF3X0tgfMQcEl8T4IOAKZMfBhYxssyw57bXdKkzLQGNdA97ufRvj2xce//3vnfvhkAN//9vtmDf/QBx66KFKqRKqCCQRW0M45D3ouz5++h8/xcKlh+C4Y4/Gxo4OtLdPDP9601/uuedvd93U3NhQ4SFHJp3B0NAQSiUVWQcBEAbCCLjrS79NIgGNaooDIY+7H3qgmgnP9+G5PnyLI5fPYlzbeOze3bHuvO/94MpHH3vsr7X1tQkIiijezHVceF6AVCYpPUOMoLenC0kzBdNKIlebx6YdG7F2zRrs2d2JtrY2TJg4YdqV1111/kknfmgziOikGoHBDBhEKm2iXGRXxSgxXUPAfRBOUSrKZw73Q6TSSYSQhbFhWPu1+BNCiHPOPmej3FwZ0lqjMsZldKbcU5x9zpkHv/jiC4sBPPF/c7E7ceKEQ267447vHnv4UacyjVk/v/iS8MgjjsBnPvc5yMgOYPmKt1BX14CvnHEWHNtBpVSGoVNs3rRh2de+cub5b7zx2svpbLZx8SFLCnKzpYFzgcWLFsP3fDQ21WP69Cn4xaW/6vY8R7z/zzqx9fHHnr5w+ozJxwoBeJ5c/4lSXbiej+3bt3b/8frrb+zas3ufoEPZmtqmN9947ciophgdXfOufx61bt3+19se27Bu7Zr9eT4++5nPH5CvyddEki4iWJxP++qrL6Ozs6NctauFbVu3fUBpA483xowwiFDKfgllqKutM1atWlHf39PbBGCfonkIIWTp0iM+//gTj19cW5Ob2N/bBy44mpqaAIHgP37y4+seefixKwHg0ssuFQDgOR52d+5GNpNFTW0eMhlP4PAjDn9fk+z21vELa7M10vNKVAEjaMQxHT1klPYlP4CpMfT093xg8JjnBI0QpBZq/e7v70d3Z6dsRJsGPv6RU81nn35G25fXnHHAzFQ0TIj3SZH1R32jHTu39/T39/6vUukPffiUo+/82+2/GjtuzLSIGzIaEknUZNTnDjhTEHoxkvXrez7CMERaT2Fvx959b7IUiqVR66zKx9VUtB9R0/FmzUpZ/J8fhzlTn33u+Z8uXXLoZ10vZLbrwzLlno6pGCI5EJLWOk3XEISi+PKrr/9185ZN/402Pu+AA7K5VMoUiiIVKRcje3FjS4Nx+pc/37yv33PS5ImTDF1PcQHoaqgWcUtsLwQlQk7Lo6EdoUimknj1jVfX/u2eO+/q7Ox4X9m/CTMTX96G8kGHQQCmaRgeHoYAH3rokQdu3bF9y/uyKhBimHU1DTXyec+ga8p+GIGE1Tns6+kfJoK86xqnGjMk6ZRIP5REfTP191xRTqVunjENTGfSS5VNIl+XAxeAaZkAIShXypg6ffrE5pYxE8MQ6O7tIUQXWHjwwajL16MmV4N0Iq1kmQLVahWu6yGXzuHwpUdh4cGL0LFz5+rnXnzhDUpJwbUduE4VTrWKVCIBy7Tg+y5M04BpGPA8F44jN/7RVEVwIYs51VFDnHslp6ClUhlDg4OqQ8rjCWUcPxJNV9QYT0BICS9GCMByMifln1L3HyULibhTGUXEELwb2y5G5WERlXUjIBRxmfwXIvCoV43I0roek51jmEWUycpDhKGQRaHK5oyGaDI7WE6zi+USKtUqDNPCmLFj5CLi+rAsC6VSCalketKYsW1TAyJoXb4eUydPR1t7uyTBqilf9JCSx5kinUqB6RSZXAp1NXVglKF9wgRn48ZNq3fs2NmdyWXBdClHHC4UAAF57nxfRvkwGuewBmEIqtHYiE6ZlAzL91LZtyoLmYchPF/5IJV0N5KA6ropZfSh9LtGObmcczBdBwiFpyapyWRS+X/V9FwBtASXnm0Gpgpb6SvVDRN+4MN1XenbBR8hc3MBCgLXcRTNWhZCQRBIuW0YgjFNxsoIDkOTmbXR9WeYhgRrqcdAOpOFEIDr+BA8jMnJumbEYKMglN1Ju2rLiWEo4WwRLC3wQxm1pFFU7BIKxUEMDgxg1fJl2LplM3ccz67arrzihIDOdOllUjLoyFelHCBSmqtROLYN3/eQzWQz9XWNNRKQJuIi2Qt8VG0bnusi8ipzPmIdCBVgLbo+QQSYziRYQVkV1KWMIJQNDBFyUMrAeQjfdaVUN/AwNDyM7r09CISPQqEfoGi58pqrzk1a6anPPv0yDpx7INE1inQqg1w6F0+ShSAIuIAfBAi8AJ7jo1KuxPcpFyNrBQ+4kkET6IaOdDJd64ehrhk6XM8BVXFgYRgg4AEoIShXKqja1RhSEoT+SFc/COKCWmOaCqlXyg3GpKw/RBy5FniSukwYgWVZig+gvNGUIAwlTdi0TPihi4SVhGv70KiOmdMOmDVpwtRPAtAct4LNW3YCoXyqSjCYjGWLHthSYi/XIsexceCB8zCxfQJefe1VXH3l1e4XvvDFB677/e8uc317I+chisUyfD9AMpkEeDgC7CKAHwRwHUdNZtUaGoay2UOk97lSKUuQl1xwYVcdDA8Oo7VlHF5/640XH3nkoZcBgOk6KtUqdu3aCdezkclKKEfge1ixYjmWL1+Brs7d4EIGFjU3taC9fSKamppx7713i9deeR3HH3PcSd87/ztfrFbL8DwOwhhMwwRlBJVqFZrGkMvlZaOFKgAJkZnGMnqGwg989R38/Z7DCwC5fH7X5s3bPC4EyraN3Z17EfIQ27ZvRfceudHTda3hsCVLT/m/tdBtqKuffOlFl154/wMP3nbE0sM+s2nrZmtoqID//OmF7ItnfIkZpo6hoQHccfttcGwbH/3Ix8ADyUmoa6zHE48/8eJnPv3Zb7/xxmsvy9WJ9qWSyXLUpKaUYNPmLXjtzdflhnzrdjAirANmzWx+P59X03T2sVNP/XpNbfpYAPC9ALohm54AheP4MA0d/f1DT+zetXuf/Wnz582d1z6+fda7qiG8O5KIcxErRIIg8O+9/8Gn9vd5IRRGNHDlQrJQ4mg4yvHIYw9tv+XW217+oO/T0tQ4GoKh9lcqL9bQsHTp4gknnnjipH0v2L94zuOPP3plbU1uol31YOgGGpsaAUBc9/vr/nDlFddeCQAfOuWEmiWLFzcCwObNG0VdbS1q8rk4jzSZTKFl7Jj8+/luhx95xKEA4AVBLAGmECD/vMEFM2Gif6C/Y3fHrtUf9LiOa2luq6+ra/JUYk8ymULVcbFl63aMHdeG5pYWWqnY+1Twhtw3Rg1346gsAcS+yVf+8crg9u3bC//jZNRItF580SU/njFj+vxoj02ihApBpG1K7a3z+Zy87jDqv6EEViLaHwH1jU373IwY6Ou1q9UKPM8DFbLREsnYCaXgADL59HC2NvPfJrxLDjvqo48++vBfly459HSlFoemycZ1jIBXHBCogWGhWBz+5Gmf+sXPL7n4zn/2ebr3du/YtnXLagICPwhULOpICowfBqRp9H3yL36+etbZBADqmhpmyBGBePciQuT+RUZGEhAwEMIUmBF4+NFHnly9fOX7ltT7ns9HX9eRbQgAenu7ccuNt7z57NPPPvl+X79YKLLQD6V6gcjoV845QiWtjU7DmtVrwv7B/taGhvpYwk7l5lJ29HnIYRkJJNVUiAsSS+I4l55R6ZNloESHU3EVYElDNp1GTT6LgaHBhlK1ZDz13LOYO28BTjrxJIwZNxZdXXvw9NPPwg8kGdd1Hbz22pvYs7cHg6UCdJPhlX+8HL76+qsb0ulkt+d7yKRTMaV4qDAMx3ORr80jFCEoY8jmciCEoFQsoWpXpZQ5CBREamSzKjeFIpZQapoupaIgsUdXqCKJEk1BdIjKQpUbHClTIvHNxyMJTjTdHdWpi3KsNCbpwFGUUHSCRGx7YHExGsuYY05VNG2koJoGAZnHG6WCRrIOAgrTlNMOxnT1YJLfkYApqSRXU02ubigPtm1juDAMP/DheS5830c6k0E2m0JLc9PCwPObGKUIBbB52zak0yloupQNUya7lFAIc8d20dffjyDk0HUN/QMDGBwaRuBzt2Nnx3rfdQO7asOxbVmU+z4CLunBXig3jRrTkUwm40Ip9GVxGPgBwAEeyKrHsixZ7EQ5cJLkFGPl5dRLg++7cF0bmqbJz0zlOSMakVAaDjDCwMBAhfwO8bUST9YoKJHXOwCYugVGZRRJGKjrBUz+DomiZCTkydCM+PwyTQcFg8EMWGYCjGkwLENSndU1qesmrGQKhmkgCH1Uqw4Mw1RUu4J8qDBN+Xol2ZkSBgIGy0oikbCkRzYIYNtVWFYK6VROgc6kNL9iV8ARwrIknM3ULFRLVWiGzidNnmSlk2lMnzpVArqE3CwyjUnZiyo6mZJG8UA2hnwvgOM46O3rJY5dTfqeBwoCRjWkUzL/Nwj82EOiaRoMQ/qco3gmUCDksmkQPUGFggMJHsZPWJ0xJIyk/HvdQCqZhGkZKgfVRxj6sO0qbNsGONjnv/SFMxcesuj4J59+GqeccjJax46B78kJYzKZReDJ4lU2B+QU3w99UBC0No+DxnRJpOahpB6r6DEv8OA4ciNxyGGL61PpJMtm0uBeCKdaQdUuwzAMVKuuKuYV9ZePAMiIgm/JIkpBnRxHrrGaFkO9ddNEIpVQ65Ra2P0AvufBdm14niubd0GIdDKNZCoBXdPk9zQthDxAMpWA4zlNRx111OcvveSiJQAw2NOL8887D9OmT5OZvIQo9bFkICRMU+12edx6O/bEYzFzzgFoqG/AxHGTOt96/c07enr3vE2EgFOxkbAMeIELJ3RgJnSkkhnVpAigEYZEUjYt3aoD13VhJhRBnggQRmN6vKZpcGwpEecI4PsuANL/9LNP39Pb2zMc+Yx2d3Rhx/adKBRlA813Pbz11nI88+IL8AVHTV0dBIC62locdOACLFl8JNrbJpBXX/2HWLdxI84885wzm1paDq1WihBcwLFduK4L3dDg+3LSHgoZiya5EbIpYeoGDEOD4zrw1YbMD7z9XgzedtvtK3d17toVcoGqXUbAPfiej/b2dkydPlWlDwMnf/jkk2YeMOvA/5sK3Xy+pv7Yo4760uOPPPrHw5Yc/UMRYPLw0DBax7ahrr4eVtqC7/nwHReD/YM44oijsHDhoapLryGRSuH1l9948vTPf+l7K1evjimnpeKwWLb8zZ0AoJsaHNdDa+tYtLQ0ortnL5atWMbHt4+ZcPIJJx2875MFQn99+RXnXfrzX3x7eKgAx3ag6/JelSBLiiAMcO99968482tnXft+jsucuXMWJyzLGC0lHol9UZNdNTkCgI5du9d1dHQs39/n59Zbbwl2796tVBO6tJGoTPujjjoGP/vpxRVNM7o+6PsMDhTseNarnrtUeUOzmTxmTJ3Nevv6vX04R9oPf/ST8+/8262/zGTSTX09vdixbZskIIOEd9x++w2XX/brX3ieXQKA/p4BM5/KJTkXqG9sJvmaGhiWKfccquDo2LE7ta/fq6llbPaoI4+eL0VJVCntgHeFvUbfO5TcCQD429/uemvZsuUf2L8bBH6Kc24ZpgWAI5lM4OBFC3HaJ09D24TxsN2qUyqU9inDO5vOxKOW0dckHUVUmznjgHDu3Ln0fzg31ne+9c1zFxw0/9hobx5LfJRiIQxDdHTsBgEJ77vnvr2PPfxY37u034jiGqX1e8asGY37emyYYQZMlwkPIORdhH3fC0ABbNq4sa9jx8742qzNtNDfXP37rz/55FO/b2ppWRSGCuJGoyJdgAooFgmJrYsAnPvuuedPzzz73PVr1qz8p7FkV1977dZnnnvuHwDg+4EI1HAnuv+3bt0WXn31tcPv9fuVFFelvrZhYlyvjD5hAAwmrYPgapih3qunp7fUsbPrhQ9y7bl+1Rl1zrFjx04plQYwa8ZspNKZtX29A1vf7+ubVDfy2ZzyJgupDBUEmpLYR0O+KdMmHnHcCcd96rRPfDJumFHP90EZiX2BQshs3UQyiYRlIhRcbu6E9DKFfgjLTEhoiC/gVzwgFHAqDnp69mLmjGnjtm/dbjiujSnTpsBWG4IAvgRWWQkIDgwNDKOnpw81uRosPmQRNJ0hW5PrTqaS69KpdJ/nunAcW2H3E7AsC5wHsG0HvhegXCnDc31oVIOudP2ECGi6Jv2pXCjpM1eeSOmPiza4EhKkIE6qsxHnp6rqNVRS/2haTOiIyRsxYZcrT6iI/beEKI8dJzFNGKO6WLFnRfnQhBCyoFNTZyFGvL4qDUedyFBurARivyqJoS8RUEWZ3dUkU2MUqVRSRvn4PtLpNOpq6qBpGvL5HBwFeAGVk41isZg/7vjjDqvJZdHa0oJx48dh2pQpyOazauLDYw8zIQSu58LxPFCNQlNdt2QigcLAEAqFIbfq2ru5CORUi0vQUCikN1PTGHQmGyoAEPoBBJcdM/ndNOi6IaXDjMhsXELBNDkNpWrSqEeAKy6VCropo3oMwwTToPy/DOl0BqZpymziUNJ0A19OzJhGAUoQhJLcHUlYQy59vT734StapTRsi5guHE0joyI8lUjGjQld1xEEPnzugzCBRDKJIAxgOzYMw0RTYwsSZkrK1DmUJziEpkl/MGUUhmEhYVowTB0aMyRR3ffh+Z70tVDpd+U8gJUwQChFEAgIITuFmqlDNyTBWqcGUokManJ5+IGHxpYWBK4b9O7dq9XW5JV8H2oCF8XjQDUNgKpTRalSlqTkMEQylUJdfR1mz52N5pbmdBB48H0Prm9jaGgQhin5AIzp8kFA6SjiubwTDM2EoVtgirItRNSYkrAy2QSS9zKonGzGObSaAdOUdGoRCEyYOJEkU0ksPOzQY79/wflfvPPOv2uLDl0oliw9VDYpKFRuc6hyW1V+NufQNSbp0gkDA4ODKAwV4txujVKEoYKFCcQUT00zrL7eXr5581YQAOmUahaG8nx6fhDvWMNQKAo4VfYKxHm50j5CgRAQgZquciAMOHigCnIurydN1+NOuIxlS0IQAddz4bseNJ1BEB9ChMhk0zB1TRMhn3/ggQee1DKmMXXrLTfj0SceQyaTkFL3VBLlalk21NQ58VwXvqfI126A9e9sEOvWbsCLz70AAWDOnLlv6dBfkWAwBsdzIAhHXb4GSdOSNgEivwdjBLomfcCabsG0khCCS7gVY/L6CiSFXlNAt2hyalds9A8OoKGuHn//211/v/32v99vWQbq6mqx9LAlaGhuQnF4GJyHSKTT+MpXv4ZLL/k55i+Q9QxV6y3TGcZPbMPhRx+FQ5csJdu37MD0iZPbr/3ttRfrhj7Fdx2ZFsc06IYWq0QoCAzdQDqZAQGV9wQdPXkjMHQT5n6WNAPA3r1dq5etfPM1nVHkczWYML4dhmGirrYeQRBicFCq46ZMmTzhuGOP/6KmW+z/9EK3saml7dSPn3r2Zb/6+V8u+8Uvr7KSiWOGiwNG67hW0T6hHY2N9TBMef9QRsF0hklTpqBlzBgJGQSwceOGrot+dtEvP/GpT5w9MNT736S8GzZvXBvJH8ulMpqbG3HQgQehtqYBRxx1FHWcoD6dSi+tr2msf6+fu66xIffVr57942MOP/KCNaveybSOb4OVkA2lMAhANQm8S2VS9p23//2ajRvX7rNcjxBiLl18+OKRKRqJFRJRM13CFoFySaoy77n3vhd7evb07u/z9OP//Mm81tZxI4WGkq4SStHX0xO88dprQ8XCUOWDvs/qFat7R2+OFehF7qMY8Ld779p91z13vycvYfOYMQ33PfTAr3/9q19c3NO9J18plOHYLsa2tiCdS+KyX/36juv+8Luf7e4aAZatXbuhtGX71gKlBE2NDSCURBmeUYY35s+fZ+7r92obP37yvLmzZ0bPTyFGRmwjuj/ESjkzYUJAiKeeevLJgf6+D5yrPVQY2lYqF7oAIHBDOFVbxTBqGOgdwPXX/d6ZNXv65Pr6xvccID44NECjApeqGE3ZmB0ppnZ3dLL1GzeIf3JtZy+44IKfXn71ld+QBbmCvFKK0TGttusiV1OLl15+9bkf/OhHl3V2dm7+r2oHAOjp7hGu66JcLGX39djY1Ypj6noo1wiikjuUgkNn8D0PTrmUn3fAAXkAGDdhovGt73zrh98995uXGQbGFovDMT09IpdrlKoYVBLvX7r3dndc8IMf/8d1f/jDr8rlwdK/UPNsVhJgQnVpH4gmvLNmzkwee/yxB7zX73f3328XADC5fdIYqd7i8TGO9abqlAn1LPMD+Zm379rx+upVq1d+kGuvf6Cv4EgiNXggUJPPxbYUzdLcrTt2rB4Y6n3fVohJ0yZazS2NicDzwAiBlbBUTTB6HQFc3x170IEHLS4MFurigjeiwxIqJ4i+78sbXchCwfc8SQgOA5iGiVQmDd3Ukc1kwMExtnUs0ikLw8MDAJBYtHDhIZ7r5Pbs7kRvz17s7tqJ7bu3I5VK4rClhyGZsEAoUKxUsXHdJgSeBBANDw/h6SeeeW5osPBKsVTek8vm41xU13Xg+56UWnsBGNFhaDoc14YgQDqTVrm7MqjH92VxrTGmLkI6MqGNYTAjskoRn/1IuqY8oqEAUZMdQkYtyGo6S4mETgn1RBIisqTIjkooIjkyYnCVQCShUBNbJZ/misAcEftkB0z6cEcIoGTUtDl6IEpYBoSEP3EexO9LWTSJloVhIiEnlIIT6ExDEISo2FXougad6ejr7UW+Pt968iknzacGQdv4drQ0N2DhgoPAqIR0CeUljhSumsaQyaZRV1sXQxGYRtHT24N8bU2xVCr2RVp7EAJNM5BIJJHN5gDVEdc0+ZlCIeWsEtZFldzVV94omcMpqbOqySBEnFOqEF/yQSnHz/ADD74nC2tZPIRwHVfRTk3VwOAAOBLJhIq28iSxVb0GY3ISZ+iG3MCrqT/nHH7gQWNMTQKFnFBpusKuSzJ2EEjPpkYZuC9Qtasqf1XAc33YjgNBZWEdBrKBwxiDzpiKjTJi91bgBdB0Bl0zZBGmMSVXDiIxPTSmq/f1EYQcyVQChqajWrFl7FgIKWGhOrgA+vr64DhO0DZuHJcLVBhDvKJ7gxIiO9QAdF2HYZlqoYwga/JPOpXOR34NyzThhzJGLPA9pJJJJBMpeK6HwA+VD1xGO3mBOyLlj0OPpZeSC9l88P0AAQQcV54/Ago/kBmogRci5Byu7yKdyohMKotjjz7mhPVr1rU7ZRsHz18Qh4aFIlRRPzI3MJLu6kyDKoURgkMzGaykWqSVGoQy2fAydAPptGyO9+zdyykI8rkcDMtA1XEAQpBKpZFKJWGasgHh+z6IkKAzqtQWlMpmhe/LRo6VtEAZQchH7CS+J2XzmqbJIplKyXRkZRDgcD2ZZ+y5npwmGyYo0VEuV+E6Lgtcf/KB8+adcuIJx80EgNaxrTj++OPUeEFGexnmSLMsDEMEbhjHrPT39aKhro5YpuE/+eQzHauWrXngJz/9yTUluziQyWRBNWkvKBXL6B/oB6UMSSuFkIcyVooQuL4H1/NguyozmEqlgoyg0OB7HlzHQRDIzHeNaZIsDYJUSjU8haj8+te/vn7jhg2bCIAgBHK5LHbs3I7uHpn6Yho6GusaMDgwgIGBfni+pyCCBJ2dXXjmqafQ39eNJYccgiDk+MwnPnXc97///e/ohpYJQynbtPQELN2Q1G9FK6OUKetAgGrVhufLDHAoRUoQ+Pu9OBRC8Oeefu6R7v6ekqnrIEJeN47rghCCzo5dqFQk/+TSSy4548OnfvTT/6cWurlc7eQf/fgnP7zn/nvvu/KKK37TUNt4CjXMuuaxrTjlox9iDY11JAh4nIUtp/4MfgC4tg/GKHSN4eV/vPKP008//cyLLrnoJ13dnR3/dMM1OLjeDYKqzKHOypQCTcOevXshoKOnb9hsHNOy8LOf+9RH38tnP+GkDx116y1/vfXqq6+8OFuXq09nkyKVSMAPuRKoymdEMmHi73+794Ynnnzq/vdzjMaPGz9x0cKDZ0VybEJGbFVcSKYHIQSO48L1AlSr1d477rzjgf19rtonTEwsXrp4lgTEjUyZIw/vM08/U3n2+Wd3Vu3yBy54fdfZMVrRHClZAMB2XBxz/FGpBQct+F+9hIaVSJ70oZM/cfutt9318Y+ceq5driY3bdwi+ocHMXbcOORq8li/cf2yu++9+6o3XnvjXf7Sil2pgGNHNGnlfISPEn33gf7CPnezli4+dAElJBtPREdl1sbydPHuOm7z5s07316z5uX9cQ5XrXx7+9p1G7tkQS2jRiO+yZZtWzFUKFinfexjC1qaG5ve62tOnDxZ1k18xFMeNf0im9u48WMzNfm6dzUIJs2Y3vrnm/58xa8v+/X5AEwZQTQS+yc4UXsCjnQyiY2btj7//e9/5wd2uXzd5BlTt8XrIR+Zeuq6pOpPnDQhO76tfZ/AacVice/g4OBeJd2PJ8yATDEYGBzECcefOLetdfxxc+bOT95y8y0XX/KLn1wCIGdoOsY0NI0065mMUeQhh+v7KBRKoJRi+7Yda7/2lbO/dsXll12zesWKfzmdfeGFVzbHvSWluFUTYqSSCXLqKaeedsSRR84BgAXz57+n79tQV5cfkYiMDjIjMeA0ygk2TA3Fcln88fo/PbZh3TvdH+TaKxULXZTAlmocgvqaelTLcli+evXqlx959KEPFLlVqRZZ/+Ag1QwF8KQq1SbmIwED/QPIpnNhe9sE+4H7H9w9UvDK8U1MoQy4zOr0XBnLoekaqJAZhYl0AoHvoWqXUa6WkUolUFNXA88LMTg8jJqauvlTp05fMm36LBy29EiR0pMwNB333X8vHn70MbS0tsBXXqeurk7oFsFHTz0Fe7u68Kc//nHwkcceXdG1p2sP5yEEJUgmM0iYFhzbhms7Mrg4CECZlDXpugYv9FCqlOQ0i0axKRpAVe4tpMxAY1oMgAGkjy7ykEXSlTj6Nu6uyG6jgFA+Ua6Cwmm8KY9ueJnBKdTEQmW+jkrLI6PGAvGUmCgJtRiJLCKgsc+UqBlDVBRLCayIPY8aY2ojLovgKD9WYxo0g8Um7jAMZb6dYLArFRRKBdTU10qPWxgglUhCNzSUKmU01jeMaWpoaBkeHkZn5x70DQxhqFSQ70VZHJweLeRMZb/yUSt3b28vQIGhocHtHbt27IlkKFEhCA64qoFBKYPv+9BNTU2BpW9TyjfldMx1HUkeVrIqEjUulBxDiFDm7ULm+bqep0jPJC7wGdPAVXYr0yRACCAwLBNeID2blBKZ86veX6N6vNFV4bEgHLBMSy1GVMl7CBjV4btSkjpUGJIxUZSBMSqJwZRBM01FAqYxpr1YlLJy0zJkTqrOYBgWKNMk2TiUBXsQSpBOGATQDB1WMglN16BpBgghKoJHRxjK4plSASshpWiuF8BMWMjmM7JoJwRB4KOmpgZBGGJgaAhbtu0o+l50L5A4titq3kS+daYUFSBcFmd+AN+TsvNMJlMHAOlsBoYpv4PMOAZs10EYeKBEdtC5asowBRwIQh9CbXhAAM3QIQiFRqLvqABWGJmuJhKWvAo1hnQqgUw6g42b1sO09IPaWsccvXXLBkYFBFMbtciDTihFoOKbKVUNPwUL4wLQCENtTQ2IrsF1JcU38nRTEFCdYeuObejc04GG5gZhJhIwLE16pkMOz/VU5BqPo84olfaQqJlmmQkZAeY66n4icB2ZJS4jMXgc5USUJI5Aep4d142bdQwUpm6A8xC6ZUiuQCip9g0N9VY+na3L19bM/tHPfnxcbWOt8de/3AwKgeaWFiXvkuwAXdPV2ibp58lsEoNDw9ixowPpfAapbML/801/fqRvsPvnf7j+9z/YsHntsoAHqFbL4B4HI5qS8UviOw8FfFeqf4igUrKnVCqh7yHwXUl7V03WgPsqfkKgUCjANE1k8lm1QSmjWCqibVw7env3Lj/3B+ddIwBPY0AqkcTcAw5Ex84OFAsj1jEiKF566WU89PCj6O+TwNP+/l4QInDEkUthuw5ee+01VCpVfO1LX/vUpLbJHyqVSyoTWTbibNsGYRQBl7L9aI2NeAxhIJUYGAU33N8/K99a+Y/777n3iR07tsVNGkKB+vo6cC6wft06hFwgm83kLv7ZT38ydtz4I/5PKnSbW8ZO+Pq3v3Xe4088fvsPf/CDX9TWZBcMDhbMo489AXMPnIuGhjrpgeNhPL2UcD9pazEMDWZCBwD+h99ff8c3v/6N7y5fvuJ/BXS9s/LtbZs2bNogN1w0trukrSS6du/E3u5O8swzzzYee/zxZ0w/YNaR/9PrzJ9zcPtXvnzmNy++6KKrTjn5pI8alskmTpiA2bMPIGEopJ+eEiWBD/xf//rKP5555hm/tO0Rme6+/Mw/6MCDxre3tUR7hHdvUIl61slGZ11dDW6/484n33l79av7+5zt2rlDPPnkE2ZUhUYx6fGUvrGJdu3eU+nZ2/OBdfzPPv3s5meffy4mD42WxyYsE1MmTZpmGux/lOsffMiigx957KEbHnnkob8ce9wxR/V1dyMIORYdupg01NeBMqC7u3v3RRf94upVy1f806n7Y48+vh4AdEMDAQdV6q3IklQqDzfW1jbuU1F19NFHLURsP8N/mbCNFPijS95XXvrHuo6Oji376zwODxd2ArJ413SplAo8H4sOXYgvnH66VSpXp9bk68a819fbuH5dRQiu8oJJDC0dfb3OnjM729LSFCsnamvqmn90/gW/PPMrZ55FGDH8gKsoOiGTUsBlxKba3z71xDPPnnPOWRe88/bqNQDQ17WnO5K7h4r/wLlAQ2MjMQ0LYejVer6d35fj8vbba3e8/sZr/4ingWSEmWOYBpqamsA0PTtl+rSzjj7mqCuXLj30OwC0IJCRdTISVO4Fon2663jQGEUul8HwUHHdlVddc/7jTz38ngu7F55/fk1X157VhkpV0SiL02OqZQeHLFy44PAlh59/2KGHf/3Cn134H4GHH1515bXj/rfXrG+pN6TsV9Y5gwP9qJTLkjcTE6xIrGTYtXPHrg3rN638oNfd8jeXr+zas+cuANWuzu7NN//15vs+89nP/nb1qncu//nPf/XLPV0fLBIuCIWgqhlPKY2tEMCIvdQyEzh04VJnd9fetxy/GseaaVIOCaSTaQRhAMd1pTSVkFjqGxKBZDKBXC4Hp+LA9lxFa/awedMQNAXC+sIXTz/u2GOOaUkkDQiAuH6IBqMRE8dNBCGaBGDxEDoY1r39DqigYMzAsjdXY/WqteUTTzoutXnzltS2LTuG/cCTnc0whK6bcvJGKXRGEXoBHK+q8kF1lcVLQBAAAjCYJSN8QikTJETCXN6lD1IHR5KDqQSlqH/PlWlcduF4XAhrTFP+iGDEXxPnWEmsFVFZspRIvYDgIu6MqiQcFa4up8Och3FBRTUNFEQFvYdxtiwg6atESHCNbphq6s7llDKUNwZjliyQweF5HsKAQy4KgZwqBgF0Q2blppIpGJoOz/Xgeg6CkAMiRNu4cWNTVtrKpfMYe/B4GLqORMqSk2YhoFFNxUSRePGJMnGjFd3zfKSsNK6+9ZrXXc8tp1IyKsZ1ZKyHoRkoVspyk24YcB0bnu+qZoUsMimAEKrwESKGFIkwhIgksVSDaVmolIvQNR2cyKJF0xTtUR13wuRGW9cNJFSB5VRtWcAQJn9XAAkzidDzFahenTfBEQQBTKZDN2W2cxCEqv4JpLc65Mjla1CplOB7CvwE2TyKJp66oQMIY/Iy1eRnZboOQiUl0DAMFYckKeP5XK2cdADQdElxDIIgjnGKfOEAUKmUoJsWDEuTuW+WnODbjgsQDQ11eWRzOQz0DaC2tkZOCJwqLDMBzoHN27bu8XwfCcscATTx6BAqSrOQ8iUvcGHquorhAnzfg25oyNRkm6EKY85lYe16HlLpDHxfTvcYZTCYDqYix/zAlwR1qRIHY0wde4YwlFNBECCVSinFiS/zmpWygWpU3q+GgXK5jLb2sc2/ve435yM0Zk+fNgftE9oJBwdCAl1JheJ4GyXflvYFrjKQKTq7ujAw0I9p06bADwJojEBwXT4c1e9phi40zSCDvYOEhyF8LwDRKBKmBkIY7GpVrQ0EjOkAl8VvGIQwDQuJZEq9P5dqBi79yozpYAYDQqjMcQpCJPyLaTpEGMLULQgiycw6k77tZDKD2ro8ioUihBColGzMmj7HKpWGWyZNm7R49gGzp2zasBnDw0U0tYzB5m3bkcvmMXF8O6IlLhSSDl0plbFnbw8ef+xRrF+3jv/HT35E773n3kf/8pdb/qO+rmGT7TpoaR6LUkl6X93ABdPl9RuGkloccNkkZDpg6AY0rsnJLqEQRCokpI9ISrNTybSarsi1k6vzIYneITRTgsCmTpmOJx594m8X/uynSy655NIveK6PXG0e7eMnYPWaVTCtBCaMn4jGpgbMnjMHfX39MSly3vwDsXHdJjz15HOoq89j0uSpSKWSmDJjSuM3vv2Nb3znu997m2l0PQRAmQZd0fxNPQld11EsF8FUg06Aw7IS0A0drvCRNK1/S8E4NDzYs3TJ4rvr6moWTpgwqZ0xDQaThvoZU2diz94uFArDyOVymDP7gJl33X3nz1Op9PmVSvnN/18Wuk1NTZM++vGPfexvd915aiqROEgIWOs3bMDMA6YjnUyrpqL0Lmq6kgNqRNk4SCyFB4COXbu3//a6319/441/vnl4eHDwX0rBu/cO3nLrbSvmzJ51UOB5EJq0uNQ31cHxbJx8yofo9m07zDdffW3+/ffc9aslhy655NXXX30cAJqbxyQSSXPKIYsOPube++4++aknn5i59p21jWNax4JzLtrHtRKuFCKWacSV4C9/ftnfL7nk0otC4fW832N20sknHwOlIiBEZriT0bQqNXTUNA3DQ4XCH/9w/Z1i9ENgv8nOm815c+YnR0/W4lgGQnDQgvnpxYuXNG/bsV0H4HyQ99q1u2vLwNDwTgAtkbx3tI2soaExf9JJJ3zk/HPP+8eVV18V+znTqYz57e9968uv/uOV8w3NmOy7DtzAQyKRFJrBiKYxMGqhe29X79fP+eZl3d299/zPE6PSei5CjxJmcM5lYzmC0YUUJ5x0bNs999w1DsCu9/q96msbZ40cO8Sxd6Np21HcXhSFt2v3zuf253lcs3L1po+ccoqyx6hnsi4b/fMWzIfjBY1dHZ0t7/X1Nq3f1iNCOESDRdTAgyjFpBImo7Nzt9mxY+uC1nFju1vHtC/80x///O1Pfvq0k6LcchrDW6X3NfADgErV1PPPPf/8N75+znnbdm6LGxPdvd3dSooKwVXDkYvY8qBr1gSdJRZhHyj1jlMNTvnQSfeeeMJJH2WMJSKGj1A2qggV++Mf//gIEBwh93DhyN5E2Q252htSSpFIyfX/tTeX/ePiCy/9z6eefPilfTlXWzZv6L7w4ouvvfjCC2+glOhluyJ0qhPGBUxLx9i2cdYF511w+mkfP+0zM+dM1yjjz61du/bv/9trdu3p8Sa2T4SuGwh8D8OFAlLpEKl0Wu3x5N7Ot124gmP9+g0bmMb6P+h11zfQX1h40MLv19U1X/7Gm69XfO4OQAhn3oGzw3vv/fsHvq4pI8SypH0nUsMKSE81VWtlKpPEG2++1XH1Ndc8c/Y5X41/V+MqZkS3TIQOV3QwDiMpwT6Rr7VcqiKXzaOuoR57unskzRkUxGJwqlUQgsyUCVMWdXbshtAImpoakcumYVccHH/MCUilU9KPaxooF4twfRuLD1uKutp6fPv73wYnIR8c7K9mUknH8xx4foBkMgFBGZKpJKrVCmzbRohQFbFyMmPoJsKAy7gPNU3y4SojtiT88lBOoAil0A0dvuereBUZ9h15cIUgI1MOQlVGF1cZZvKiH5FbxU2hUWIVEWc6xpJQSOAPgVBFojymTJObYC5CEMriDORorkuIpjo8kvTKmBYR/KHrmpoeyXPDuZREBoH0mEYm9IgqygPp/wsBJA250SgMF5DJZpA1EigUhqXnDoBGtWmEE0UypvD8ANQNkDC1WF4VNQ2iB2G0CIW+JAI3NzdBAD0dezpekpO4JBzbBTiHpmkoVUrQmI6KY4MLIWWfhKjOvox90UwdVPfldFs9fEzThEZHvDWgcvExDFP6qBiLpeMBD+KoISNCxtOomyVl4xrV4IVSagrVcdTNBDzPga7paoGjSGpphcIn8APp+aWMQtNl1JLnOvA8B5rGEIZMgd3URFTTkLSSCAIfnHAwKkPTLV1DtepCN0wwkJheXCmVwZiGIAzVe8oFlem6Rik106lU49hxY9rqcvWNTY0NqaHBIat1zNiUH4a9b61c9lwQ+HuKhQIc14fGEMf5lAtlVMtVaExHsViBpumwbQeN45oxZdJEtDQ3d1tmAmHgg+iS3AcSLe9C0nup/HuNaNJnBXlsh4YGMTQ8iEw62wZCMq7rlZjK+jUtC67nAEJCv0YDrBjTFG2Ux8VnEMpcOI0ClAtQg0kabhBICJyu6KuaBj8MQBShOZJ1f/y0T56ZSKQ/2rFrL/3wR04csQeEIwoQgECozlMUMUWpiGORiCAYHhwGOEMiYSKaEAuMgGQmT5DyLss0NCE45aH0B1dtG3U19TANA739fSBUypgd15WqA0XnDkoFxQWQ95jM+5bvY2omHN9RkUyQ+dcijMnxAZfqAc5ljmDIBWpyOVSrct3UdAO1NTkMFwaLru+0nnLyh4+1qy6eeOxpTJw8GccdfyJ6evpANR53SUXA4doBbN9FqVTAk48/hQNmzcGYlkayZsWawl9uufkv+Vx+kwT9yXXANA3YjhM3+TzXk9J8P5SZ2ppUJHiQVgXucdnkYQS6kUQQ+nAdW2WF85jQruk6qnYV6UwGsKQNwLQMlEslEEZRm28s3nbrbTcfesjCw5YsPbIdjKF5bDNCJrBl00ZUqyUADZgyeTKmTJ6Mgf5+FAvDyObyYKaGdRvWY+qUSTjkkMV48YVXsGDhQfjq175y2KtvvP7Vv9x044/HjhvvaaGOarkE3ZT3a9Wx4+xtYsj1Owh8+Zkoja/hf8fPug2b/6EZxnIA7YEfQmMyYk03NLRPnIhysQTHdmAYBpYeumTpgw89/Iejjjn2sheff+6Bf0dB9M8L3LEWY2z8/AXzZxw0f8HSx5947OSD5i+Y+vjjj7ONa9eHJ33ow2JcayuhDHAdD+AedI1BNzSEgQJialRuhFVzvHPvnv5rrv7tXY8/8chNG9auW3Xllb96z5/nxVdfev7LX/rCWYahj3BxOdA6rhWt41oBgP3llpvMXbs6F/7muuv++OtfX/FK85j6vv+86Efjjjhs6QF1+fpJLc2tbOHBC9A0dixax45BEASKWszjJh3TKXp6etc++sQTv/0gxe649vF1zz/73IFQe484354I1cSWOaHRWvTYE489tmHLplf+Hecyn81lsrl8LirMiFK5cWVv0TVGPvHpTzS+vuwtE0Dpg8n2w+rTzz23CsCh/8XzKeWcqSQ+9enPfOSb3/rGcgC/B4CxLc3TTv7wiWdc9ovLvt63pyebqcnK57lpQE8y4jsuGCXgjA7+6aa/XPb6G2/c0N3T/T/eB+s2btj0zttrd8ydO3eajGUj2NPdhUw6i3wuj107O5o7du044L0WvK3t462XX3ixcWSsIuLvE0uZVf/ArjrIZNJYt37dtjtuv/OZSy+5dL+dx+Wr3lzruk5omhYTikEDLtdY3dBQV1tbe/KHP3RCNpV5rVgp9f2r1+vs6Ni5bdv2jVOmTZ4XQ4mFlAXLSSdDPpurufjCS//zoIULfjzzgJljdU1PB5wj8HxoGpPPOJU5HIbSBmIZFlasWvbo187+2n9s37n9XX7tjp271hWKw+VcNp8mRDb9bdvG26vXiJkHzCLHHHt001VXX3vOuHET1+3evb3jvR6bJ5965vkHH3rwkdM+ftqn5EAltpHEbBw5rVDS3wjXpaIZI86OrkugbP/QwMBdd9/78n333H/5888+9cb7OV+/++3v7501e8aBn/r4p74lQjDTMhFyCU0MAyFS2SSZd9BcvVSp2l/5+lf/evtfb/9fr8dKsSSi6bim65g4cTTsnCglqbQzcRGIt958a0Mum90vUqW3Vrw1DGD437E+lYrlKoQoAcgGyrrKOYftVGFqllRdAdjduXPV3p5dy0b/rkZA4HsehrwBMKYhkUwgCAJ4rquASJA5Ur6PQqEgZXhOFblMDoamww89DA0OobG+flzbuHHTytUStu3cIhqax5BSqYRsIon28eORyWUACFQrRWzdvBVDAyUcd8I8JHNJ7Ni8Db4XdN59z/1rIcSAZuqyox9If2WlXIbruvA9H4ZlyAgbLsFF5WJRkqR1E57vxv5WOYUjEEROVSIKsgyWJiNxLipXlRAWy2MjLbhQ1amQ+3Nw8U/araNyn7jqgkrUiYRYRfJkEetZ5KY1DAL1QJMe4zCKOBJiZAOlpsqESD+xUFCrSrUqwTVqGs2U1NgwDYScw7GrsWfWdh1k0llAE2q6lEDgywK4Uq5IeBNkHldtXT65cOGiOStXrsCDj9wr5s5bQFxf4OCFCzB18gSE4Ag5ZJMAEt4iuJSZBH4Ywy269/bgkSceX7Fl89Z1GtNlZqyCRDm2DQ451bISCRBQuK4Nw7RACIOmMTiuDxYSaAaD4zjSz8dDuRlmmoRVMQrX9eC6DigYOGTGp850+EEAy0zANA14nh/DrqBR2OWKioBiYIYJzZf+1DCQIK2Qc5imIUFTviRY19VJf7KvunmmYcBxPaSSKSnH1g04ti3lsYTJnF0uO05yAurDdmwEo0iu/rAL00ppoR/oIaDV19eZAE2l0+lc4Ac1pqnXT5s5raG+tqFBcJotVYqZgw6cN6Z1/LjJudraMTSkVm9PF6GEkGwmTxzP797b133e2rffudu2PZSrFSQsHblsTkamEOkBjoBYXARwqg7cwAEIsKeru1oqV5DLpRByX+Wn0lH2FuVtIgQ6lfRiQgkGBgbg+z4s08JBCw4e1zJ2bMPQ4FCpsaFRMQE85UHVYRgGuBDwPQeB60vYnCCgTI87dBAibkAwTQPRCKDiX0AEdE2D5wfggQ/KNJgJCV7yHA/z5h901Le+/p0zzjnzHOOTn/lMQAjRwkD5dQnFKG6I6hJHCpBRtzQE8nU1qC83YLAwjPqaGlT9KgCCTDoNLqQsbLg0jMaGRmTzuUwimTTS2TR6u3vBCJPUYwW14AGX0nwikEik4Loe/EBSBaWvPJCNmECC4wglqFarCIMAhmkAhCJpWSBUoFypyMaY74ElLIQBRyJhIG1mYDANxWoBlpWE5/vQmI4d23fQT3/2U0d+5YwvH9CxswPtE8chmU1j27YOpJMpNDU0wHOlT9owNFhpA6Yw8NyLz8LhVRx3/FHo7u4mL774j5c7du1+LZ/LoWo7AFdQtZAhDELouprYByrWTmMIBAdHCMKUfYTLxqKggGUkJCsi5DCNhIqX8sGU/JRz6R8eGhxQlgSgVLKh6xqcqg3LtLCro+PNjdu2PHDSyR/+XsA58YXA2OYW1KvoUKguPVW2i7Vr38HCRYdiyuRJ+OmFF+Kl51/AhRddjLbxbZg5eyaYZuCXl/3iC6+99o/nN23Y9FhDUxNMy5KKJyYzt4UAAs6lL1mpaKQSiv1bPLzxlHewv+fEk096ZOmhS49vamrO+r4PEGlzICJEJpvB4MAgtm/bjukzpuO4Y4+ef+SRh990zbXXHjlnzuxbd+7atapYKAb7+3MZlkUt05pwyOLFS6+//vpjioXhWS0tTU3DQ4ONra2t+tbtuzC2pR2HLlrCbM/G8FAfCNWQTCbBBeD5vvSOK6WD78oG2Z13/h2Dff17H3jwoV8uX7XiT4XhwX0+uA/de9/rq7/xrbXz5s07QELgBMQoGikhBB/98MfpYLEoUklr3MwDZnx2zgGzwieffJJoLMHGjG2D7/k46JCFI5slTUPoBSo6Taq9Vi5fvfKSn1960bK3XvtApGRDM+oMw2yLpkmaRtTmWq4fkQUHAIqlYu81v/nN7Xa5XP13XG/9/f2Jzl07tTkzp8X3ERnlNXV8F4899nB5145t+wVNftUVl79w2OLFX0gkEplRC7GU/IBgXNu42muv/c2vn3z6qa9PGj8B6zesrXn++Rdrbr75L4njjzsW9YYpc8sFl43xRAKdu/f0XXTRJRfdeNMf/3Dhf/7nv5Dqbux69tnntwKYFvFScpkshCBwqjbmHzS/8YIf//jkurrG5wcGev+lXL0mW9uUTqVS0XAj8onKYnrkOFJKkclIFsQ9d939wvbt29btz/O4evU7ywYHh1a2tLQcHIShjKFh0k/seT6mTJ+Mn134sy8YKTNcuOTgWw1q7hzo63c2bNz4T6FZa95Z3X35r6948wc/vGCeGB25GXl6BUd7+0TzK2dNnDzS0JA2JF3XYkm+kPMlWJaFYqnSf81vrvjd1Vdf8+e+nj3/LVT36aefXbFz1841c2fPW0IZQ19/N9KpDNrHTyC+F6Czcw8++alTP/La66+sI4T8TAjxnta5IAiGli49/IZjjjlmUT6XH++6DkzTUhwY2VySgkGu8nRls5yrxJMohsnxguIrr7606ta/3L5s8qSJ/+jZs+d9S4IHBnorRx171K+6u/aI73z7e+cAsEQo64lEUiOSIQF0du55uFR0/uVEe9asGTowOj5KpsrEkFWuBiKUYNeO7rXZmtp3WtvGefg//KdUKOzd07n7ncmTpixhVE7aAcA0zNheCsB7863XnykOl951v2p+4COEpBZDRdgIQRCGHgzLgghChH4AQgg8zwMXEuTj+jZsu4qElQDAsWjRojnHHn/s+GeefhblcomI3r147fXl+NqXv4w3ly1DfWMTwiBAV+de6IaJxsZGPPzAg5g+czpWLV/lW2lj84RJ7TvWrHobY8Y2w3U8+I6HZCqBUqmEIPAl6IjKjK4oHxgKaMQog3BVaHk0SeUCIQ9gmJaaPMjpElWmFEpJbJpnlMkpcdSNEyIe+Y+AqkYye0UYrcuyvJVp4uEoP4Dy3yIc9c+RT0VK+oiacnFFjyaMSgAwIUAoVFSKMmQrb5k8TdI7GSrpq6Yx8FDGmmiaBl3X49wyzjkc14ZpGPITEMDzXCQsE77vIZ3KwnNcDA4NoH3S+LYPn/LhKfc/cD9WrXobJ5x4CtonTkNjXa0Cco3c6HLWx5UXQ3oEdMOA7/nYuGl9ccumTZuGhwp9iZSpJs0EXugh5Fzi4FWkk+tJyE8YyIdVoCa1QRgAPqBRAzwIwHR5nKpeVZK51QIq/3sOpmvwXR8BCcF0CX5yHE/GtjB5LFzXA6UyY5oyDkdIAm4yl4PQBGwFlPL8CN4koOsGqtUqfM8Dh4BpWtANE1wAjmvLzQ/VIMRIcwWOB8etIpFIIPBd2H4IIcJ0a1tby0EHzR/TPzBU29c/kE2n0jUHzZ+f2rVjp+6HQe6II44YP6G9vWVwcCC/t3tPVtfMDCN6wkoawVCl4Lyx7C2tra87vXNbB+YfdBB2b+8AYwSBz+H4TtDd3av39Q9qhqEHmXQKpqEjYSVRLBXhug50ZsB3XQjC0TSmGXalgsDxsHdPL1pbxzF578j7QRCo/FESXzfxA0yFo0f+oJraOji2jXQm3ZTP5Gr2dnahv68/liaapgnP81CuuNANQ8mTuVxrAgmrABVgmtz46lQHKAUPAnAPSCXy0HUmC0H1noZuwnE8UDCIMESlWspffPGFXykUihNczw0WzJ+nAUAgfFBQAOqBq4p3RimgGhJU5WHL4ljANAzMnD5TRs5wWexE2ZdCyM1uNpOFgEBjc1NdfUNjwrZtgBDopg7P95QXlsL1HJi6CcopKnYZOjNgmIaU9GqGWlMDiMgzrSTOmiEni4wAti3l0XLyA0RYSUap/Hc8VJFlAgQc6XQaTtVGS2vT8V/72lc+AQDbduwURx5zFKEGg6np0vcrpCwMQh4HprrvG9duxIKFBwEAfnTBT17eum3bb3K53EA2l8HQ0DAIJSiVS+ChQCaTgV214foBOLiKFtLhBQEIJTJnWHEIKNMBweF7AQIumRGMSQ+8YeiSiB6EMC0DqUQaruuhWC4hn62RAD8AumGAEIGWtnH2b377u+uFj5nf/NY3TmCUIRDyfbo6ujB2fCuYxlC1XeRr8gh9jpdfeBFHH3csDI1h/kEHwQ9DTJgwHna5DEopmhsaG75yxte++cMfnL+mNFzotBImLGKNgAEhGQ2Cc/ihB6J82UxtJP+dP88+88xj9z5w91HfPOc7X9Y1XTZOfD+OiquprcHujp14/fU30DpuLCZOmJD9wfnnf3PRggVHvbHsraeOOfaYZ1avfnv5QH9f3/v9DOlMLrV40cJWn4ftbRPaZ/z5lj/Pzprp2blMforrevmqrqFUrKB/cAhDhSLKxQrschW7OwWaWhrkc1rTYBi6itST6QQhF3A9D7oqIg9dcsjwjb//45+ef/HZm4UQ76uTMDQ41PGTC39287x5866iGiE8VHNe1VDxvRA1tXnU1tWQEMBRRx+LynCRLTz4UDQ1tshIJB5Chx6DLiU8kcbGxRdeePHRr5/zzYs2blq34oOe31lzZ+Ubm5trpGRPA6GA60pYF1OASY3JycXNt9zywIoVy5//d11rM2fO4pMnTbVHe01lw1/+lekMazesF8Vyab80UV5+8aUXn3risRdO/fgnPsI5QcwXjQYEACZOnJiaOHHirMCXDcJjjz4OoRDI1eSAgMO1JcjNsCxwzgsXX3zRpbfc8pfrb7zpj+/pM/T07FkB4ENM1+B5HhKJFHRdR2dnF9auX4f58xecMK617W4A/1KqOnPGrGnZTD4fqdBG0Z3i9AYKgpCHKAwNQTd09PT2rNnf53HXjp27zj3vvDuvvuqqAxjVEtIHKyGahqlLdQ4j6asuv+Ksv95x++xnnnzyne9+6zv8P370H3t3du189M7b7vxv8Ug7d21/BsDZsc2Jjlj0IvGfGKl24/uGKh89DxUk0tAxXCjuOPfc8y+++aY/3/rjH17wz4vAwaGBn13406fnzp63xHFc5HJ56LqG1vFj4XkBHLsC3/fw+c9//iwzadVf/8c/PL9m5dsv//HPf9zzLz3J69Y/f/WVV/75kkt//lPTTFhcxAg6UBoltsi9o+PKYZpMVaAYLhXLf/vbXcsLheHVw4XBjkULF3ZtWLd+1br173yggvGFZ1/otjTzsvraZvK5z3/mbN3QLN2Q6+Kbry0rPvPss08sW7Hs2oceuv9fSo+DINwb7dFksSvbV1yxRnSmA5Tg4YceX/bQw4/cvWPHtrf27unc+396wbtt27bS18762vU3/vnGuYSQtBDSKktAFGiT4Pbb77j3gQcfeuT6P/zpXb+raRqDQQ24rqtsGrL9YlkJ6TEIORJJC45jwzRltijxOUQIOK4Xta9wwJx5s5LpJN3V1YkZ02diwcL5OOqIo5HL5NDVtQcQBK5bRX19HSA0gIZ4/Y3X0DJmLNomthduuunmdYXBSl9TfQMCz0epXFTFtPQIaqaBUPgoF8rQNB2MEmhMByiD5znS/6czCEHA+UjhKqduiIOPmZK9xhe3AIQIwUO8S9ceTYEEwYjBW9GdR8hukQRa0l2hMnnV/BM8lMWuxjTpC+HKFyJkNieo1J7zUBXhYYhQdQRlcU1i2TIh0hcKLnHwHAKmZoCSAEEos3F5KKcOpmnG2cJMbdYpZSBCyp+TKQumbiBlpNHc2IydO3aC6RQ12fzE+tr6MdOmT8X8g+eTeQcdhGQiIdfsSMKi/Lsyk5XGXlVCpbxjzeo1WLF8ld3Q0DgEAAkrDT/04FZtEApV7AKVahWGaUA3dZiGiVKpBCG4yhTWUSq6gCAwdB0UGsAIeODHCw4IpPdWFWGBAqxByGaBHVRBmfQVuq4DSjlEqKjdmqZuDhN+aKNcKkMzNWg6kzcOAZiuxZmpvu8jk81IsnIQKHqwgGs7I3m1jMHzXOTzNbnmhqYxjY2N9YKSZLlUyR12xNKJTY2Nsxhl49rGjavZsnVbrev62edefA6mbrFDFy8RmzZvDLkXauvefoccuOBA69lnnqPbt27H7DkHiI998uPaKTNnWY8/9jgECKa2T8PwwDDaxrRhw8Z1KBSHQAgbTqcyQTKdYExjgaHJpkdPfy+okssbmoa6hjpwIaf75UIRg94Qxo0bi7bxbWEQhKGsBSPquIiBL5GmlxKCatWG4ALJVBKZZA66wdDTvZcHvptMJWWX3jB0gFBUKiVomtw06lRDwjSh6zpsx5PXLVVdbypBWJxIaXfgeCBE/n8iFPB5AFO3YLsOUpkETN2UcnBCUCxXMWvW7FOLxdKR9yy7Fx/77Ce11knjEYDHhUjU3CJE3qfSVsDguT76BwZQW1erYmfkFN93fTlN5gFMQ657QRDKopAABpHdxMkTJjcFrmcNDQ0im8vCd2R2dDKZgEY0+L4HgMAwNIhAQazCaCNJYZgGhJDEeR5I9YmZkBJ9CdTj6gEsJUiEKe9ToHgFugEQpgBgMrIonUjDLduTvnHmN85ecuiS9t//4fe45ZZbyWW/+oXcKILLbOVQTlL9gCIUBG+99jqqJQdfP+ccNDTV4aUXXt367HNPX9a1t/O5sa2tGBouwOcC4DIWSz4jpMXDtAyVfywQBkLRp6X9hAqmpNYUBBqkZQKxV04WlFJeRSlF4IfwdanKMAwTYBwG1VGpVlEIfKSTSWStHLZu3bLlqquuuuawwxdPnzZp2nhKDaRzKXg8wM4duzB9xlS4cMFDjgkTp+Dt1avkhDiZQF1dDU466QSsWr0GTzz6GJYcsQT5/CH4wQXnHbdz19ZvXP/7P15qJRO2blKZDGBo4ODwXQeUMWhUQzKVhBACju0ooMq/7yfwg4FEMnFFWstM/NLXzjjcNAxVfMnrwnE95OvrMLxrF5587HEcffRRYvr0mWTK1Gkza+rqZp72sdNO797bve3ee+7ZtGnT5vVr1q7bPdDbN1guFUulcrE8PDxUpYx5rusJwzRY4AdaTU1NwjDM/PTpM9rmz5s/5+EHHjigvql+/PDA0Ni6hpZ830AvVq9azrOpQXLggoMwY9YM1OZqkavJYKhYQn1tCFPTUCgVwYVAJiulpzzg0HQNnhcg8OS+I5lIwA8CvPHWm6uffe6ZP994y81/F0J8oAnmNVf85oZZM2dM/dynP3sOqGQtUBr5g0VsUfC8AJZuEKQzmDtvTrzYMWgjCi4F7iOSwLr3nvvv/uMfrv/dDbu2794vG8SK7VkJQ5frklp7mcbAlFyPqI+xu3N34ZqrrrlHBKH777rWNm/d1v/www9vPPfc78yJ1x2V0sDDEDW5evzuut/N/vpZ3xwDYOsHfT/bcfoPW7L4xlM/ftoiSkmTiAoppf8VChZJGEN3T7dIJpOora2VYxzbA2UEuq6Dahr6hwZ2XnDeBb965NFHbw5C/z3LMx9/4olnDl646JNTp0yZ4VMqwZe6hnxNHuPa2jB1ypRJX/ry5z/6XgreebNnzbQShhn7YAiJZfVkRBCIocFBVCsVeL6zY+uWLWv+Hefymquvvql1zJgJ55533rcDDkIFBdGoArky5LIZ2NWqcfpnPnfEFz9/+hEA8MlPfwoAjjzs8MM//crLLxdGv96df7vr+S9+6csPHbJo0UeFmu4SpcqKcsGl3J/HkFhBZCM79ORQBJQEz73w4pO/u+53Vy9b9taL/+o73HLrbfd+93vf/URdTf3sIAzguT546AEUCPwQnR17xbSp0+p+9YtfnAngzBv+eMNZAG74l0qGoX5uJRO/9Th3L/j++d+rq69ttW0HpXIZdbUyySZUPB9LMRoCHvhPP/30K8+++OIDb69+Z/WYpuZyz97eyu663f133HH70P44Z07g9s6aOfPnby1/46V8rnbRwQcfNLO1rbVt87ZN61Yuf/O6rVu2vPVeXueO2/5233/+7MeHVyrVWtMwVWyo3G9puuSgXHHFtY888MCDf54zY+aaDRve2bt3794A/xf83HTDTXcbujZ80Oz5Xzntk589Jl+XyY2oAp5+8Iwvn3GRH3gD//X3ND8IoDO5YeeCww/kRi/wA4TK/kMElVmhoUAQyE4HFxzJZBK27QIAyeXqmssVG9NmTBZLDl1IkqmknBZs3Ix5B85FMmViuBDCrlbx7LPPgYcC3/j6N9HS3Iw3X18+7FadDbZfKdU21qJUKCKbyYJzgcGhAblKcA7PCVXmLgMFVVEugdpAhTLuR0gQkSBcTVJlYU5BYrkcEaPUyEJOTkAJCCdx1AeBpC2HIlASBtldlXmkso3F4wgFjJoGj3S4oixHIeSNEyqIESERSpurTreKR2EjEACuXogxOrJRVzExMjN5JLObECI3lup1fM+LN9SUURAhIEKOTDYDSgDTspBJpVEoFbFx80a0No+B6zk4/Mil85mhJ59/5gVv2oxpxoxps5BuGws/COREnEk/aEx/5spDq+lxUZRMJnH0UUeK3/zud3s45EQ9DEcKhTCUbeJ8TR6O44D7IQL4anqiNnAhh65piqAHhOBgQgMVkuJKQOINv2Va0lermTK6wtDhOi6CELAsU3a1KIVGNVimKaeEoQ+mGSoOyZfwI6ojn8uir78PNfk6DA8NI5PKwHN9VKpFlEpVOaX2PLgylhqZTCZXW9/YPmP69NnTpk2ZObZ1TNPObbvSRIhExa4a/f2D6W9+/esNVbc6hvs8vXrVatHb1x9SjZFDDj6EPf7ow7jjtlvx81/9HGNajsCqZavw4KMPYvLUKVi0cBEOP+IITJ0yhXR2duKtwlvo7+tDT183KCF47tmn0D9URn1tAyyLoTRcpqZlmTqjyYH+PmKaiSCdzYX19fUi9D2MaR6L3V2dCLlAwjTR1bEbmqEjnZQ++9def2vnxs0b31566CEHShmSvHcE5SrjWMS2gFKpDCthKXUFUZ0zRizLxITJE1Jbtso9ENXUrkWdC93Q4bk+qratKOhCTjK5nPpRTeacahpAdQoCCkaAkAfwfR+maajpEBAggO+5KFWKmL9w4ZJvnP2Ns2679a6m0z79UXzp9C/ANHQlnVI5ryGXvuPIc66MVJ17usRby5aLk088kWazabhulC3IYfsOwAGNmRBEUSKFJOVGLXvfC/PpTMYqlosI/RCO68E0LXAly9ZUUW2YJlKGhmKhJGOFOIfruWqaQRXhXYt96FGclmVZ8D1fFrpEZjNHBXwykZb3vs4UqI0jYSbQ1bUHHz715I+dd8G5J+zcuQOrVy7HBed+H8WBYazfuBYzpx8AP/RjmbeuMQyVi7jsil9jbHMrQHWk0pZ/4cU/u2lweOjpmnwtPMeB63jQNQ1hIOEyBBps25HnigF+6AEwZC43JeAikA08IfNUPV+yExKJBAwmvZuu64HzAOPHt6GluQVvv7MWINILDQGkUmm4ng2hBbASJjzXh2cH6Kn0YEzTGKQTmRd+9Ysrb7/plht+ks2l4HsBpk2fip7uHlSrVSRSCXi+h9a2McjX5vD08y9gzuzZaB8/Dl4QYHzrOBx2xJFgBsX2rTtQ31CnXX31tV97863l61YuW3FHLl8Dp2ojkUwAgoNQBh6oZonnqfMh5P3wb/6xq/b6pYcs+u3HP/3xaZlMrgmCSGuAqcMwGca1tqKleQza28bhlVdeID29fVh06KF4+eVXgkwmXZ/L1jS0t008JG2m+OJDDh0ihPh19bUAJ9zjvm8kE2G17Ih0OkEAYhimaaQSSYMRmureu1cvFIdw79/v8saMaRMz52h844b19KMfP422No+DRoHh0jB27tqJSdoEVEsVZDIZpFJJWEkTTEUE8kD6uJ2qGzduUqkktm/dsfua6357633333djz949u/7zx//5gY9XtVoo19Y3XlFf3zTm+GOO/oggFK7nyueLAgTSONYiRDqTQBjKphNjDL7rA5oGShH76zs6Ol/79Kc/+aNly5e/8sMLfrj/zm25PADABpDwA8kBMQxTQr2YDsE4/CDAjl07V5WKhbf+nddZT3dn4bSPf+oVcu53PxXtY6Di2zw3gKYDfZ29c5e9uey4/VHwAsArr772yHnnnfe7q6666qeEEoOLaLpGZV66Gg60tLQQAcD3Jb9B0zX5nAHw+BOPv3TJzy+96I1XX39xX9//jtvv+MfZ55x1zW9/d91lpmbWcQB+GCCRSmLW9OkAgCOPOPKTY5pbX6utr3lg7dp3/scOV9UuxlE/lIxY2WSig5x4er4HM5FAfX0D/nT9H9569rnn/y0FrxCiRAi9uKWlNfPZz336DICBQzXrIdWQrgKgen4A23Ywdmwznn78yZlbN21pAPCugnd4aHBofHvbBb/61eXDn/nMZ06jFGkgii+kSkFJ4v1wpLYEZaAWQ7Vc2fWrKy6/7uprfnNDuThcfC/foWPnzvVf+PIXr7jtlr9eoTGtiVoKYCo4GE0imU4R0zLVcCLY89Bjj+4485wz31txWbXLAK46eNHCN35z1TVfKg6XZlaqduPJp5w8LpE0Labu+57+/v7X3nj9tfvuv/fuZx9/+tmDFizoffrxx8S/6x5ct359P4AHADwwZ868zJKlSw90Ha90/8MPrnqvr/HzSy/6ezqdzB144MHnTpsxeWJzcyM6d+9BLp9BJpPh99zz9/uvvubqi7v3dK0FgD/hT/i/5Ucpfx5jlD79yiuvLTnxIx86tbGlZc6qZStfvvraq2/yA2/3P/s9jVKmIkJ4TMINuZzg6oacTBIKpDNZUEpRLhSQyqTheA40qqNcrAKA3tTSUOs4FQz1D6k4E1nshkKgsb4OruejpbkJL7/8ItavewdnnHEmGhqbsG3LRiRTeoEj3AUIDBcKKBWLIAoeoGs6wjCE7wdIJBMQXGZTBop4K4SUIHIup42chzANE4JIbzKUZJExgiAQEJyDMgZGiCKvyaiQKLqHaQpzrbJ55e8ycGXwJrEMWowoVQiJzez/7IfzkbWRKjlUqDIo5bRSFnkjNTOJ31/mdUbFrYgnuSOvIRfTkHMl0ZQTF53pMHRDRtsIAdf3oPkyBkjYDqpVB7l8Fr4CCxGK9OIliw/u7e/F2g3r6PTZ01HfUDfyJdSmgEUxPZSACoBQBkBuxF3bw/TpM1BfW8eGBge2AJCxK9IzASuZhOvaEKFUEPCQwwt8VG0Hus5AGYPjOnKqzKgCPMgC2TA1eAoKRoTM1RVEZlImEwlQSuF6PqpVW0ppGYXtOEglU0jo0stLGAPTKXQzJWU1OkMqbWFwcAiVShnVahkiDNA/0CcLu6IPw9BSjc0tNe3jx+fr62vNwaEhUa26NbV1NRPa29pmzJw564CJkyZNT6WStV27u8PGRU2kprY23dvXS3t7+8SsmQeQdevXoqG1EYxqRHCidfd1o7NzL2bOnIU58+agffw4BG6I0798OmbMnoFyuYq3316DxuZG/OPll/HiSy+gWq3AMA24jhPnMhuaAadaQhDoMAxzUrVSPcUwrdYzTv+aoDrVVq9d09mzt3dTLlfbU99Y65RKBaejs8eZMHG8U19XH1ZdG7ZdRiqVxsYN6ztuvuHGN5YeesiBlCrvtK5DEyzOf4SQEvuGhlrZ8Vdwh5Bz1NbXk9a2cRBAvlAYRr6mBnbVRjKZAAGB4zpwy56arjDopoFyuQTueTKGikr7gRCARnUQTU7ThSAwTA2ERNIoAc+xIQw9ctkbxx9z4hfXr1s3t7WliX3uU5+DaegIfKGgW3KzGnlyuPLJU04ACn7DjTduGR4ask/72Mdmc4Dpmo5CoQDbqaJSrWBc67h4TWBMNVwUxAUAautqEplcJuns9NDSVA/TcOC6LgqFYRBCkM6koOscjmPL6B8mC1QeUgS+CyrkBIdpuoxZc10pqlJxSdVqFZRSJM0kKpUKqM6QMBOwq1UYlsx9rlQq8FwJAaqUK6hUi7M/+clPfx6Aedutf8XYMeNw3LHHYtXKtdjT0YMpU6Yj5IDDPRjckF51N8AVV16J1cvXQCMUO3duf2PTpo1/J6Bc1wwEfgDfD1RUkiGVEAxImhZsx0WpWoZhGmBERnH5vg+dmTExnjKZ9e17niz01TQ9ksoP9A+gUqlIErymwa9WASFQrRLZkGQSgsaohOd5ro8wCJFIpLxNm7fesXrNuhOOWLp0QbFURk1dHoEfYsumLZh74Fy4/x97/x0gV3Vme8Nr731i5c5ROWcQCCEQOWPAgA3OAbDxjMc5e64Ttsf22OOccM4mY3LOICEJ5RxbLbVanSvXyXvv9499qiTfe+d7vxvG13Pffuw2Mi21qqtOnd7P86z1WxKIpEQqlYQf+sgXC5g+bQqEUL7ohQvno1KtwjYSKFVKAMm0ffhDH3/fu97xtnWMsEOWZSOKOHSdgugUgYzinEQFcjN0JU3/W9RrW7Y/+vGPfmLJj3/8k09rhm5xol4Xpqlc+GI5j6nTpsHeksNPb/8Z5syZi+vf8EatUCxg04bXxGCxLAVCkRKpzN59B8i5F5yjHenrh2Vb6OjqhBAEvT1dONo/gIefeAIzZ81EtVoTURTw5lyOLlq8xDj33AuhmQyZdAomNXBk4Ah6ujtx+HA/pvT0wLRNtNsqgo4CoFTRrgM/AmMMXEQYGhnGjBnTAEb4K6+8+uynPv3p723c/NrTPAz/t24Y8uOjfa1tnV+896677fMvPPcS2zQRBGFd8geqUQWB5BxBnIddj57STUX39t0A/UeO7Lrn3vv+cvvtP/ndsWNHD/7vfl337dx9eO3atY+dddZZb2CaYqZEYajOFgyoVBz4oY+nnnj2lXw+X/mPvs4mxifWFcvFQ0253KzYtKWsFroCbE6bMdP82r985aNvfcubcy+99Mr9xwaP7ftf/Tv/8Ic/fa+9pTn1sU984iO6YZqcSyUJJidlsBIAUhH3T67D/X1PfupTn/7nnTt2/E97KDds2HDHd7/z7Y5/+ocPfjKdSWe4lIiCCNAZGAhOXX5q75q1L/9w7fr1r3/DG27YNWfOTK2jq6vYd/DQPT/84Q8bwDISS1DRMPGSE489HpTWqg5KpTLSyRReWfvqBill+T+uORB5O2F/lurw3nTDm95JQZKabsTyZq7SWKRaJXi+B9f1cOqKFdXLrrzyvy+V7j96wE4l33/7j37yxFe+9OV/PPfi81eTODS2vhj662tpLCyXyvteemXNMz/7xc/vWvvKK+u+fNtt/0Pfw1133P2n8dGx2jf/9Vv/0NvTfZau68lUOg1dvUUxOjwUDY4MbX/mhRdu37Bl44v/w/fV9RvWdLS1r+/tmdqWzTVNX7N+7eLu7p5pxULBmjV3RvGuu+/ZuH3LtlePDx4r/a2bu+3bt1YA/A/nM3uhHwH48S3vvfXoG6+9/h2rzjz7nEQilXMc/+hfHnzggY9+6CM/n8hPHMJ/4uJChABeAPBCMp3RnGqFSyn/3UGERqmK9eBcQGMEpmEiiCKYtgnTNODU1I2WmRpSyRRCwVGpVmFZFqIgRCJhQTNkx6w5s6Ye2rcfuYyJcimPRx9fh+7ubqw6cxUcT20yCNVx+PBRMM1AS0uzmuxPn45Nm7fsONzXd6SntweO4wCSwPVUbIxumOBSQkYR/MCDrhtK+hj7/gghMbWUxlIKFYdBKFGEZUpBpEAY1sm+sd8AEqK+6q1DrOKNIiFq+ypJPQb6BJ2YSOVdUNEpdbkkA5UUEid+VhMQ9fWBE94GSeJJ5V+lsaGeySJjqg6pk2TjXMJ6gw0CWLqJiEYKssQj5RTWaSMHUovvADzi4Lpo5IVpjMHzfOSampDLZjA8Oqqo12GEA30H0NScXbR44cJT/NDBP3/uM9r0aTPVaxzLOCWAIOTQTNaAedV9nJ7vKzk4VZl9Va/qV2qVwwCFoesIggBWIqGGFvHXLBYKceOjQQNrbM4NU4cfBCCSgEOASAnDMhR5OYpUM2/q0Kitmo94AFFzajE1T2/k8UIE8DwPlmVBgENIDjthw/NVHE6xUIIaFEkASLQ0tXTPnb9wSmdXZ1d3V1dTJpXpsFJmr5Ww20ymJ8vlUpCfyLvtnZ25dC7T09Xe2ZLN5rLFiRI70ncU+/YfQkdXK6oVH3PnzkJ3Vwd58KGHoZkUju/Ai1Qzs33nNhw8dAhz58zDTTffgr79B1FzS9i8ZQtaW9vx4EMP4rkXnsf7/uEWrFq9CqevOgNJ08bunbvQ1t6K5mwOYRhi8dIlGB0dQSqXw+KFi5P/8N5br+vumfK6a669VhwbGRDXXH9NsW9/385X16/ZVpgo9C8//XTxzluWHv/Zj3/xgsaIQwF4IVfPkWmhWq1sU6qKIg4c3I/ZM2eirbXtJFPOietdXdexTYBSuJ4nHadGNKrNBhTFVnoBXM9DKpFELteEiYlxFb1DFeQLBEglU7F8jCEIg9hWoPy74BLM1Bs+YAGuVCUVB2HE4Xo1nL36vLdP6eq+4pe/+rn1yU99kqRSlsos1lT+MmFAKFS2IiBAJQWhBEEY4Ve/+PVrP/z+D75+ytJlqWKp8LO21tYklxKu54ALgSAIG1YIEsPlENsj6kM9Uzc0nbHOhJ0AKOB5PgzDQDqdVlFfMYmZUqr85HFmnyIwU+j1IUYkwEHirGu11YZQ0pGIRyiXy4p8TBTUyrZsiEjA4z6iSCCZslQcUc1r+f4Pf/DJ6699/Snf+86/YSI/IW++6SayY9c2nHPRudCZAccPlEeJcwgqUCkWoekJCE7Q33dQdja3unf8+c/3FQvF/ta2NriOgyjOQCSEIGknUXOqiMIQtZqvAGMxAVvlKQKRF8b3XwYQIIz5AnWioiSiIX8DoQhDDs8v1VO2FXDOV89TBA7uqXt50k7GHjQDoQixd/9eNDU37/nBt7/7W69cmbNwyZKslbAwZWoPJiZGsWf3bsxfuFDFslGGN153Hfbu24ctW7ZgwcKFSCVTyiMZChyfOI6ZM2bi6OAA3vn2N5+zccP6j/zyV7/67LSp06qjoyOIRAjPcSG4RDaTgRBAsVyEbdlI2vrf5Ae877sepewni5Yu7P3whz56i26bCqQkJIhO0N7eCs4lrrr6alx0/vlqUBF56Ghrge+5dKxQwJlnrmCtLW3INbdiau80ZDNNMHQNnu/Btm0ILtHV3YXLL79UBmFE2lpbqa4bIELCSiaQSiXxl788hEq5jJmzamjvaodtmZg3bw5EpCSAmqapNAQCjOcncHRgQM6ZO59kUmmYmo4ZM6Zh1849e370k5/+4a677v5zfmL4yH/UczY+Nrx16dLFH3//P37g/ddc8/o3dvd0tQJ1IrxEFHIQCBj6CTBUo5E6fGTXD3/0o9//7je/v28iP3Loc5/7zH9Mg5kfdxYtXvjNH//gp7nzLzzvIsM04bmeisYCkE6noHn64eGh44/+La6ztevWbvv+d797/5duu+2TNPb2R5wDVCKMIqRyabzj5pvmvP2d7/paEHoffPjR+7539eve8M3/lb9zdHS42tbS+q81L6x88P0f+EBbZ2tn45P/jke+Ui4Pf/s73/7DY489/rOdO3b8Lx3et2zeWu3o6Pz2xFihdNttt/1zIpHoZIYOLiQCxeHAjJkzOltb2t9+wxuuV/YsYPjLX/naywAaDW8YRMPxpkPZ4Op3NSkbUT4AYFoaAHhHB4+99jdQh4wwXf/sn++8e+0nPv6xm85csfIcyzT/6qaVAtDSnMXBQ0eHHnnkwV/u2LF94N9XJNQcAHf2dnVveefN7750+pTpK2fMnLng1NOW9CbshDU4OFTt6+/vK1Wq639++89eXPfKmnVVpzr2rne983/q8Qe+JwDcv3DRgpd7OrrPPOuscy688urXzd64YaNjmNrBRx99eNNDjz22ToTR8U9++GP/c8qGsdEIwFD88erJn7vpne/+T9sU/uoXP3/YspLPXHTxRYt6p/Q2r3t1/ZEDB/YecGo1gf+Lqlb5fwczalEYgVICy7LgBz54oCBIEBKe48HQdAgi4dZcBF4AIoAoCBBpDMygcCbK6G7rWJWixpyNmzdKUEla2o5ByAhDQ0M4fPgwfC9AS1sL9h/bj8eeeBztHR0YHB5FrVzFob4Dw3fdfc/ThJCa7/kI/EBR3TRdUSghYeo6okAdfhilkIw1DmCUqBzHMAxBqAI8IAYpUUZjurFAMpmEpmsoV8pqMypU1qeAUNvVWHrCeR0hL+P/yvjQq8BUkohG4ytlfBPjHDwGODUy1v5K3HwC+NCQtzQgQKLRINc/R+IuVzaAQSLeqAm4vgsphPKyMtbw1dSb5frWmGlK9k2IhNSU2d7xXFSqVXDO4Xs+IIFcNod82cP5F563or2rfer6desxb/Zi5HJNJ7bYFGCSwtKN+HuQDQRXGEXwAx8Jy1aSZwL0HT40unvXnnHTULAwGU9oKSFqm+yHCPxKTD1W3t8w4jB0HRozQMGVjJYoWRHnqinTiAYrkUAkOSKh5O2e58cRQQaiIFBwLqbBqVXjfLSk8ilWI+TH80hlklTTWFtzU/usJQs7Zy9euHjO6WetmJvNZDrGhkZSvdN7Eps3bopGhodlqUa6jZTV7LuhX3JK1a6uDjF95kxrIl9MUU7Yzu27sH3bdixcMAubtm1DIp0FECJq8/HIYzthGyk4nouOjhYkE2ksWbQU+XwJSxcvhR/42LDhNdScGqBJzJk3H/axYYQBx4c+8kF84hMfw/SZ07Fgwdw4n7Qu+Ubjeg0jgXKlAsM0kU7Z+N0ffqNFgmjHh4dwSs8pYETLPPvs8+2DI0Opo33H8qaVqNSqZY1p1KtbFjRdQxCp53NkZKxvdGhcJHMp2ju1F1YiGdtNlY9Kiw8+igLMFPgpvo5TtkVGR8dx/vnnnfH4o48ki/lCjVINhFH4YYBUJg3LsuA6roqQYOpzEhJB4EPXDOXviUEXEVeTZ0NXECgeCeSac7BtCzzkKE/kyaw5C1//5hvf/MGJyviUd930buzfux933nU33vymG08QmSHBYs4AjbfEruOikM8X77rnrh9kctkHR8dH5+7bty9oa21NOp6LVDIDO2khkbAb3t8GrjqW9tWlWtnWHM5YeUbb5i3bYPsBPN9FwENlO5AAJEUUN86WZYJCUwAMgwGCw6k5cZ6yhCQxAAlo3IMIJWBEh5UwG/cKLc4Oj6IIhmGgp7cbgMTIyBAuu+zit37oAx94S36iiL17D+EDH/xHMnvWPNx3/z1Y7gaglg4eCFhJA8xUWeXj4xMw9BryxQmsPHsVcaveK3v37XtEYxogBFzXAxcKmqMxNVAKo1B5WXUTPAwQcQ4qAc4jaIYex2ERFXMFQBIKQhk0SsEJRxRHlOlMgxf4MdhMZZCapqmy1UkIDmVBMTU14BKCI4zCGKyohrTFfB5PPPH4A6eedso551564ZucWgDP8dDc2opHH3kUHZ0daG5uQRAJGBoBozp27t6DmdNnIJlIwLRMGIaFMMpDMmDK1KmoVn184XNffOfmHdvW7N65+04KIPACWJaJiAsEnCvvvk7hxnnWf6sSgo9aZuKLzc3t5jve/ra3U0NDJAVCP1TEfyFAqURzcwsK+TzKxSIgBObMnokNGzbhnmMD+MSnPoxND70G13dxtL8PoeehuaUdy5Yvh2UlQClBtVojvb3NOHZsAPmJAqZPnQ5KKQ6PjcHQDFxyycXo7u5s2Fkq5SIO9x/BihVnxLRuCkoZKk4F5WqZZNMpEAL+5FPPbL7r7rvue+KJxx44fmxw309/8oO/wZZk5w5CyId/8MPv/eFd77jp2jPPPPuS01acujCVShpgABBbloTE6OjYsUceeOTVxx5/7IlNW157qVwtHyrkC/I/+jHu2rl7Qzqdfu9nPvWZ9737He96e8/03h4AkBHcxx557KWf/PT2n7z62qvrf/nLn/+HP19B4IZtbc0/f/0brjnt1KWnXRjFqiJ1LxXK184YqEZgaomuhYuWnTFl+hQ20D/wv2RmH5sYLxBC/vX+u+59+TOf+8zbV5119uqknehoamlOCc51zdCDsdGxoz/+wU82Shlt2L1316sPP/zINi6497/j+x4ZGXYvOP+C2z/5iY/vO2PFqndecOFFF0+d1tPBTA2ABt8PYdoGKKFiz96DO19dt/bn3/n2d/Z/4fP/3Pgazz/z7JbaZ6tDyVSqSyn0aGPZKzlX3Bk/hG1Y2LRp4zO7d+7Y+jfZhoVhCcAfNV17/PVXX7NiyaKlp3R2dc3pndbb293ZlT186OjQyNjwa3/+859fXLfh1U1RGP6/+sSPDR3fB2AfgB9adiK1cNGC6c3ZXGrw2ND4/kMHjvAoDG+8/vr/bd/D7l17xgA83JRueuKXv/ylMTo+4oRRKN9763sxWf8/tr1ezQWw8f/rz4NW394puRhDJCIomlsIxjSYlq2gPwxozjXDqbrgkiuJbxBCS+jmJz/3qctkJLLTpk3B7AXz0dnVgRUrVmLz5m149PEnce0114BpFMdHhrBpw2YsXroIQeihvaMdr2167fD2XTvWd7S1olqtKWgMo0gYNsrlKqIogm3Z0HUDkiiao6jHDEHFepA4nV0dCGmcnxoTZRkB56oxI5RAIxo4eB0rpTakhCpUd9xgmoapNqTgjUOujA+6UipElSKlktjLFvt5SbydJSfy1ggIZNwXEElOkjb/9aZXURDrodYxTZbIhk+YsBiOJYTyKEM9Jk1TMCwab4aiKFIkRU3JgyljjYgi27RgmgZ4vKFQIAqBKIywYsUZSwr5Mjw3kLnmLOFcRYpQAQgO9ZxxCUPXTvgy4q4imUzUU5QAAMNDo/2e57q5plYwncCIoRNhGKBYLMI0rLi3j0CZqWTpuoLe6IYBTVMHZsFDcKEylhOmrfJ8fReB7yORSCjlQRxlojFdZfRKCUSRiltBiEgKmk6mm1vb26bMmDFt8bnnnH/6smWnrBgdGZ+9ZMlCmwHm88+9oA/2H8WUqb145NEno2PHBpz21lb0TpuTzGUydOj4MTufz9tgEhPlAnZs2wOdAqetWI7ead1obW3DRz/yEbS0dcLSdeSLeezYvRshlzjvvPPAXQ++62HmjFmYPk29fgISy5cvh+M4MK0zkMs2NwjY/3VRQsCFRLWqtti2bcH1XEhJ0NKSUwcUzjFl+jSYuoH582bj6MAwHnzwIZQrVevc88479/jM49X9ew4+e8cf7x5auHC+8Dwf27fvUHRUQ4PkHHv37D566PD+gSXLlk7TmYah0RG0t7Uhm0o1lA5KWnyCVFrPo7MTSbS3M9x44w2nPfCXv8xeu27Dtjr1nRKC4eERta03TRimqQYVsZHeMhPK/yPDWKGhItGoTlW+qGVg1uzpOHZsEK7jolKpYvbceVd87KMf/dTY8NgpIed4yy3vwMaN62AmTFSqNaRTSYDKBgRGCA4eARpjGBsfx0MPPvj0yMjIEzWniqlTpoQd7R1KH63roBZTQCemqUi0wINtJ2HqBriQSqYvgURCyfLHRse557lwXReZOAbKcWsAU5aEhG3HEDkCZmhgPEQY+tB1A7qmQQiVwZtMJOF5HsIwVN5+SsA0HTzg6r1MKCzbhFOtYcqUqajVyiiVyljSvRhBEKBQKK5457vffQsAbd+ePfKd7343aWrqxGh+AnPmzINX82EnEkilLOXLB2CaOrp7uvHC8y/KqTOmknze7fvExz/+g6GR4UOpZArlUhmMKf++8uMTVKo+GKXQTAO1agWIoXiUqQEbAW3I+BRZnkDGfIS6jxcAmKHAfRQEfuiD8xCCS7g1D5RRJO0EQh5AcAJN1yCFUDYWIhTHgVGY1AQhBK7vD95zz30/v+rqa05tbW6dW3WqmDNnNi67+FKMj4/BNEwYVgJRJDF3zkzs2LkD99//AK677hpYCROWxaDpRPEreISBwWNYMG9W5u1vefP7/vF979uSSWX3NeVy8DwfAmEcowWYlonAC1CpVP62BxjfGUznsh/ft3/30Gc+819uSSUSzY6QIIJD09UAEFLRWG3bAmUapk2fiU9+4hPwIw9tzW14x7vfCR4I9Pb0Igx8dPf0IJFMN2jYTS3NGB4axtDxETS3tyCdzYBRoCvViRnTp0FKCdcLYFsqpimdzuDUZadAYxqCMIyJmcDsGXMwe8ac2kMPP/jKPffee9dTzzz32Mjg4Mjf+rAjpQwArAWwtqmlpePCCy5atGDRouWdHa3dfQf6CqVK9djQ4ODA8ZHjR44c7u8vFPLh3/oxViqVwzpl/3zXnXc9/KGPfuyKilPj99x1xws7d2zbWC7/bS+ysbH8wfkL5t329NPP5Kb0TlleHwgAyu5Wpy9t27Hz+Q9+5IPf/V9tdk96nSIALyWTqVeack2ttm23tHd22jW3ara3twuNakPPPvX8oB/W/kNIcc+/8HwI4KnWlpbnli9fseLSyy6/5vyLzj0zdML27p4u2Xekb+9tt9324IZX1z/puM7oze/+663l0PDo7vvuu/exN1x7wy3JbBLDQ8PQDB2tLS1g8XsimbLxwrMvPfft7333m2Oj43/T1zUKowkAT8QfmDZ1upbOppOHD/ZVa26Nv/+f/uF/7p7kOlUAO/8W30OhUggB/M3fn5P1n7zh5ULlczU2g3G+n6Eb4GEIPwxAdQoZb0VdL4CZ0JFK2hg4OoDZi+Z2nXfxRWcc238Ujucjk00hYSVRq3qYPnM6BOGwEmpi39nRjtXnnIX58xaCEQ0jo8fR09vuLly8oDgxNgY/8JC0U3AcJ47r4DCoiroRQsXN1Am5MXFK+TVBGxApUu80pVQ9qVC+gigIEPjqoEbjwxIXceNKAAgaU5ZV7FE9kEXTGHjIY3mz2hLVm2nGqMrSFPUtraxDq2MZdIz0l/VoqPrONm53ZT23F3GTTOoTfPX1yIkIII0xSC5BNQamUURh1ABYSS5ULi9TFDZKKSRX8T6UUkRBAC2RQiqVhqYrnx9lGrK5DFzXRcRl6+IFS5Yd6z+GJx55Uvb29JBpM2dCCAHOVfavphEQncQZxYhdPQp4ky8UYJom8uN5lColbN60ReXJUYnAj2AaFhIpC6Ojo9CoDk1jYJTBNC2EEYeuGeCcwzQtaJqSrHMeQgoBU9ORSGdRqVTguA6EFNCYDgLAMEwwqiHwXBiWAY97KBXzSKcz9uw5M+addsbypXNnz1vW2ztlDhFyTmdPVy/TTO2nP7mdHTl8WD/9jBWYPnWKJCLir6x9mVyeeR09/5xzNcM0Ms1tLdi9cw+OHDmC9vYm2EkTPT3tIExDc64VQ4PHwXQTU6ZNw+IlyzB/wULU3BoMZqCzqweLTzkFXAqkLBs0phYyTQc5KdCQAMhlM//tD3wRDz+IIo5zrlQXBBRUV+HtKstSYmxiAqahg0Ni/br1WLLoFBzq68Pw8Aha29owbepUlMsFLFm4cJlGtB3pbDJDGZtZrVaOtDa38DDyUSjmYRgmHL86UKoW+izDnLZz1y6MToyh7Zxz/mo0Q0DgugE0RpBIWieFbQGFUgGe47Zms82Le3q7t42OjoJXfQgiFWyOqqzocrEC3dBVXA2X0OMBQBhEMAwdmsUUxRwSEeHwfR9H+g9DMxjKpSJWn7v6+s//l6983nWCU6qVMq6/4jpkm3O48nWXI/JDdX+o3waEWt4EQahgSzaDYRjlBx54+P7A8/MpO4lquRIVikWuGkADY2PjyGazGJsYR1/fIZxxxkpEkaI1gwDHh45DowzJRApRFOLY8SFkMjkkEmoLyaMITZkc3MBBKplW2dh+oJQVvh8D7ADKBbg8sQHwfK9BgtUNveHhJ5qC/RCq7h/NzU0olYqwLBPtHa04eOAgOJetN998y61XXXnlskcfeRJ3/+mP5O3veCeGzOPo6GrH6StWoFqtqm0yJTB0ta2YGC/i6JEBVMsVkrCS/InH/vi7/ft2PdqUa4aAAon5QXgiL1wI2EkLURjBd10ARNGKhYDre8q+IZRElDAGPc5eDhyvjiVAHQrEBUcQKglsGHu5Aa4k6ZLCMCyAGHAjX8GxoJQrmqapLXNMZhdRhEQygT27dz73Xz7z2d986pMf+/Ipy5frTGNo7+rAnXf9EYlUAje88S2AVAfOC88/H/v274EXOACaIQXDww8+hsoFVaxceQZMw0C5VsP7br31nD17dr/nB9/7/hdzLU1OFKnXTFlQJBgzYGsJhNHfPr6wUiyNEkK+OHB8cMdXvvSVz03tnTK3/jnH8QEiQDUGXbcghQJruX4RHR3tkJBoyTYjCjlaW1vBIwWGk5IjYSdUzJymoVKtYNkpy9Da0qxo/3HUHQHgBTzueSQ4Bywr2ZD6G7qOMAwR8qi4cf3G57/9ne/e/cIrzz9ZmigU/h4OPoWJiZFYhvrc39uhLFSQjjXxBz76oX/6P/ZY9u7Z99LCJYs+8G/f+s4/rFx+1pUt7elWSpXM+vixoSO3fem2Pz70yEO/Gxo+fuB/u0SxVhUARuOPv3mNT0xEUNLWV3t7pySigCe7e7vkyNhIaXDg2L/bbLU2t1W//pWvPZGwM5dcesXlU3/8k58fr7m1I+esXuUWisVo2syZtfxYYduH3v+Be4ZGBnb/n77ejhztj/Bfwakma7L+r2x4JRSIhlFFZVXocA11j73gAowyZLNZMEpAmGxQT5PpFHggOgv5YtdEYRy1qoODBw/h5aMvYur0GZg9dw6m9HQhlUxAcoL71zwAz3Pwtre9HdlsDtmmJO574AFnaGjID+PDkh/4MA0TQuhwfQ9BGEBjGkzThh964JHK1SSUKPIblFxWN3UILuMoDxUfxMBAoZo0StTvVfCZGBMfw7nqh5f6cUwI3pAz05Nkm/WtaqOhrUOiYtpdnfxaFzWTBpWPxjlkAlzyhnxZxrB6te08QbRTECwaf231QvBIxA19HI8kVNq3jLcrUsp4E0+haSbCOD9UCuXBdV0XhmGiXFYbJKYxEEj4oYfVq1ctnz1zzoKnnnoKgoFMlIpYYNuqqaXKgygBFUcUB1eT+DFDSgR+gOamJgyHw/BcLxoeGdqhaRoMTUehUoubcCAIAmTSWRiGrqStVAOjErrG4n0hhZGwwaMINb8SS9FTMEwTwcQ4bD2JTDqnuhgKlAol+J4LQoBKrWzNmT13yQ03vumSKy+/dHVTU3Z2wKNeIYi9efOG2ob1r8qO9q5EW1cHfW3jevHmN90ISST6jxwlGgW7+JJLMHfebKQzGQweH0ZhooRatYpFpyyAbSUwNHgcA0eOo62rHT09vVh1xko0NbWguS2nmjbDQkd3ZxwpgThG6qQUZ8kaWncRE495/PpHXEAKtX2sD00IVx5L1fwwSAHYSQXPUVJOiny+iIGBIXR1t6GlpQ3z58zHz39xO44PHwcEAzU0XHvtdWAEYei4+Xyx7EREMBlw88De/RgYHEQqnYKQgG0bKFeKztq169ZfeflVF0zpno6ElUBTJqdyr5migEsAhs5iGe6JxpwAGBsdQ6lU5slk6tRDB/rvSKdSwjQNVJ0aCCg0EAS+D8KAwHdhmjrCSCAIIpiWDV3TwQgFZQS+76ucUYMh8EJ0dXWhe0o32GLtdTff9J7PvfLymlNGxodxzjmrkE6msG/PLuSaMmjJNte9VbHvVr0ePFKhCYwBzzzz3EP79u1/wjQ0UEIRhlFVCDEYcdFWLVdRLJVAKIVtmZg1fSayMTFeSLWt7mrvgJASnEtUKhUkkslpNddBMqV86iASVbcGXdMwMjKKbC6HplwTBo4dgabr0JkOolPI+F5gmhY8t4aIi7jpU3FDYRQpaTdhsAwLgEBLSwsMw8Dh/iOwTBO5TBau42HOwrlXf/ozn7h+fGICv/ndb+RVV15Glp12Cu66927s39+Hf/3GV5HM2KhVa8ikMgj8AGNjE2CUoaW1GedfcB5+//s/rPnZ7T/+U1NTE6JI2QgoJSoCyjTguDUQqcBxnudDShXXIIXa3EKo7GHO1T2JUQbBZRzNFOcYx2RuIonyKcfTQEYZGNMU2ItSBTSrKXm0FW9RJThkxGFaKYRRoGT9QYhUOgnbNhG4Sbzy8st/fs8tN527bu36K8rlEq645mpcc831KJVLGJ8YQ1d7F6o1B9lMGmeuPBMPPvgQHn34q/jq17+Ky6+8DGteeQld3V2YNmUKKk4FlVqNfej9H3nHU48+9cqhwwcfbGpqRjKZQBiECIIAnuPG2dX/Z+xQUkoXwB/mL1hw8Ne//d0H5syYc1VbW1MmYZuo1GpAJEERqgxJXUMioWwmDBqE5MpnDQpCqbKb1N/TGkVCt3Ha8uWIOEcQ8bjZVT9PIsFhGMrWoDgPDJ7nwHVdNDe3YN++/Yd/dvsvHnzx5Rf+smvnzo2e5zqTx63/nLV7x65XCSWb5s9btOwDH/ynS6f2TFs4np84/MMf/vCJLVtee01K6f/f/hwcOzbgAPj/6xoWEDLb1LLV86Jf3vKe92UO7N+zbnR4ZO/PfvzToebOptLA4SMcAG54w+snL67Jmqy/acMrJcIoQCQVjEYCSj4sBMxUAlyoiBgzYSH0QugsBj5B+eymTumZIYMo6QUepk2fgaZsG2rZMjzfAaMSuXQGGlN+seODgxgeHsH+/XvQNa0bXtSG7Vt2HaqWan4yYSHiDvwwUmCmKAIjGihl8EMfduwfNA1LAWDCQDWRQiISERDFTaRUTSGNSapSijieBI1MUc4FhKxDWNBodBHHBaGRKUbiQ1oMf6I0zvBUOZNcqEl/3ddax+jXjbyEEAgeA67ilg4kDoKOZb51eTKAWDItG55B9eu6f5c3IlUirmTcTFPZoIRItQmK14dqUq+aLt8PkM5kYRimkgybGjLZNHTNhBd4GBkewbLFS89JJhOZeYvm4u3vehuhYArmwYXyYYE0YlbU80X/Kky9rbUVYRiio7UdpmaO9B/u32MnEiCEIJ3OoLenB3t27UBTUxNACHzPRyqTjv23BrgEHM9FJp2D51QAojaYnKttT8WpgOlKXhoKAR764GFkt3Z0Lbzp5ptXnX32Wadu27J1zjvf8bZ5mWxT+8aNm1CsVOXm7Vu4TnUhIpGcMXsOuts7cc111+O617+BmoaFRNLE1s1b8eLzL2HO9Klozibx2uatePa5F+E7ITItaZyTOwflagXNrU0447TTcOppy5GIEfj/7iE0HgmQk4Ty9KShSf06pESpA0isFiCQsc9HyZg1XdHBeSig6wwH+o+gs60D6ZSFUqkKwjQsW7oYjCr41CNPPA47kQlnTrFL6XSycvTY4PgvfvTzvVwGWwYHj21nOj3Sd6h/fHx0qAIQnsu0oFoqQ9MZkokkCmEJTzz+xMsf/McPfay3t9PQdV3FrhAGUr+mAZiGDtAYDtYgUBJEEce61zYYK04/87y77rx7FhfigK4ZSCcZglBllVLKQHV17QohEEkOwzZUXrLngkiKmuOAEtVMMZ3BMCwU80WMDI/P/fo3vnFTV0fPqU889AQCHmLV2atQKZXw6po16OrtxuuufB0YU7nYCogEVKsVMJ0haSXw5JPPrPvSF2/7ajKVKOoag4TAyPBQYdOmTfuXLV16iuu4mDZtGsbGx5FKZsGIjsHB4+jo7mxETKSSqUaj35TL4OorrzjlpRdfyLmOX9RNDRAUvh8gk0oroFqtBo/56OrqRqlcQhhEIIxAAI2mA4Q2uAUaUyobLjh0XcVxmYYJEIlSqQwCglQiCUgFyWrpbl74j//43pvSqXTzho3P4z233ETOPfdiJBIM733Pe7B7314lBw65grkBGJsYg8Z0NDW3oFAoIvA98eqGtY9wEfSFoQ1AeXZBCNKpNPzQRxRGgFDwGiVtpDH0J0QYBtB1HYQwAKHitQiuQH7xPZmcJH/hIoIQccQZUePBMAhgGHpMy1dZ676r5OS6YSCKZc+WZUE4AoEXgGoMnueCSEDXTZT90tFvfutbP/jYRz85v729e8bWTVsxc9o0FIaLuPvue/CZT38KjDCEQsBkahDpuh5sy8SypUvAGMW+A/uRTKaRshIYL0xg1pzpHV/96r+8781vffOaMOLjUcQBSRCFHKlECl7ggFrG/9Ef5Hv37HlV07SNpyxdftYbrrv+bbe+/9Zrm3LZNiGU+ieSAgISyWQKUgoVmUfUJlYI9V6hLP7Zp1JgVFpDDF1jUmVI89h7TVRgNxzHQcQFMukUNKYH23ds3HjffX959NVX1z1+4MCB3aXiuD95zPrPX1LIAMBr8QcA4Kab3jH5xPx36tChQ8GsWXMG7r7vzl88/NCDnpS8OPmsTNZk/R00vBQETKPgQh22LdNG6CsgB+KtpG0lEPlcQYY0As9z1UTXcbB61TkrE3bC2rdrH1acvgrz5s3GvHmz1fTbcwCmmie/4iKTy+Kt73gnZs9diGw2gS2bt1QefvihjYyxkFKGZDKBSqWCaq0CSqgKE2cMoVAQKiIYJKGNXDgSQ5oAKIR/LOdV21J1shJSEZjr3wulamspI3VIpzGMCvVsTkkaXx+gKiqljqASdW1yLBuWvBHRI2O9Xr1JhVTSRBWeLhoyS8oUQCqSSiZdjzMiVH1NIYSK/JAntsT1LbAkqhGqN8kEJN5mKdqkGgAAjBAFxQGgmQZovJ2zTBPZpgxGRkcxpWeqkq+l06nzzjt/9eG+Pvzg374v3nDjtTSfr2LVqrOwaNECcCnVVjpupk8i6zdk26BApVBBc0szHn3s0W0bX9t42LRsFAslmKaO4eNDaG5pByBRq9UUdZvSeHNvolKrIplKQzMYNM0GjwlfpXIJPApgJCzYCTs1d+6cWVOmTV88b868Ja2tLUtOO33FqXPnzOuaOqUT2XQSrutjYGC73LZjk1x15rl04dzF2u7dO5Cwkzh78WpcecWVkEIiOSeBF599CTuHh6BbDKefsRxOrYajR4cwtWc6vvLF89DS0gJqMFjpJJoyGWj/zQEgHvvEr0k9hw5xI0TjV4/+V3+uvsWXQg0UKCOIZIRyqYyEnQQjGjSdwQ8DODUX6WwahFIUS2UQESGVNOG5PhhjyKYUKGdwaAylUhmcY/fLL73yQjE/uocAlZrjDI0MDe+p1MrHIi7k9BkzUKtWkUgmYNtJRD6HrusQkiPkHF3dXdi/Z//Wl1585cANb75+UWdXizr01oc5cdPLIeK0CDVUqv/79tY2NGUzeN3rrj5t/bpXrvjt739zINfUBsEj1d0LpmLGohAi3g4mNQbP99WGM4ig2xqkkEik05AQ0HQNvuuj5DrNV7zuyrcfOnDwnN3bd+Hjn/oouJTIpVvQ2dqB3uk9MHRTNbsxGVOLG9RisYIpU7oxOHj86Mc+9tGvH+o7sO+ss86CW3Og6wYq1TLGxyeO2rYFrV3J6ylhYIzAcR04joemXDMSKRux5qIh3QSAc849Z8m0qVOm7t69t5jJZFUkTwwSIozA910EYQAr0YPmXAu4iFCpVFBzHUACtUq5QbZVdyQKSoGkaSMSIWRMe6ZEXVWmlWjkHQ4OHsXcZfMvve66a8/+3vd/gFfXv4Y7//R7bNu8A/niKGbNmIXlS5c1HquhGahUXXi+j1kzenDwYD/K+SKeff75Z31fPHvq0tPl3oN7kW3KoFoqQ0oBN3BRKdeQTKUQhB48T11/BAQ8VHAxBc6TkIigLHhqSMY0DRQMURTG5Ow4zzgellBCYweKaiLDkIP7PighCEMJQlR+L2MMdtJCzXGQL+ZBoMjdtm2jWqvA9TykUykIpLF+42vPv7j2xbtfd8VVH+vMdeiGpaO9swlvuPZ6bH5tM6ZOn4KOjk5ISFz+uitx1sqV8OL3xeJFi5BrbkLNrUEnGlpaWsGFxNXXX3XJ6vNXv+WFZ5/7YS7brHLqBUcgQggQcD/4P/7DPIqiEMCLuabmVwaHB//c3NJ01erVq1fPmDlzwZzZszMn7kFKoSGEgFtzYRkWNF0D52q4Wh+21nOwS1X18zidTEJjgB8F4ILDkDbfsn3n8J7dOw9Jju133nHPC4f6DrzQ339wYvJoNVn/X61yuSgB+ACGJ5+NyZqsv6OGFyAQde1lI75IqAk9kWCUoZQvQlAJ07ZgmBYkCFzPh23bXacvP+3MMAhx2WWXIdekfqYGgYd8Pg+DGUgldRwfGsSRw8fw5JPP4NTTTsXy0yYgZYCDBw/uq7nVLUzTlFyXMli2jYRN4TqO8gl5jiK5hj4IYSARbcCcgAiEUBia3jiYE0riibWMPbkqP1NICR4pYBDBCWRyY9NbpxzXN8GIMT1102W9YaXqcw2YVHyoVod/9TVPeG8BSYmKjDipQ+SRgIz/vIB6nuuZs3UJtBLE1vN3hcrfjZthjSqwSiQi6ExXcm2i8olpvEXhgiOKOCzLhlOroSoqsCwboQiRTCRQLBUwPDSCOXNnzZ09Y9bidC6Dy696HXG8CAuXLkBXZweEhIqHklTlFTKmpNaN70/J210vaDTCDz700KtCylpTczMKxTwYYSiXy9BMJVfUdQMWY3B9F6ZpwbQs1DwHqXQavuehWCghCFzops5yTU29CxbMnztv/pwVZ5+1etXZq89etG3rtq5ZM2ZZre1tKFcqqFVLGDwuoWmaHDg6QAxLIz29PeTo0X6ctepM9PZ0QNN1eL6P5559BocOHkY+n4fjOSgWizj/4gtw9rnnYWpPDyABzdD+u28UBXKTCiylzoQQiD3jYPH2LyZ41ze58bNSl8JHodqancgY5pBQGXiVWhmmaakhiWDYd3A/ho8P47TTTodlWuBcoqu7GzU3iJswB8NjHPv37h3es3vvjr17965Z/9q6NQcOHNgahcF4FIakqalFOk4FQRCCMg0jw0PIZtOoVMrQCYMbuRAaBaMafN+HrumoOd7xPfv3rAewiEsJISLVhJETNgc/DFEoFNHV3qqo6HFRwjBt6gx4fo1ccP6Fb7333vse9XznUDqVQblWhkENUDAQyaAzBoDCqdYQRiqnNZXNghDApkkwqkPTNNTcKlzPbXrTW9/6gVUrz7rltfXr2n3Xx4zp02HaNkqlMlqaO8FDE4RRBcliBCx+7l0/wJQp3XjumRcPf+d73/6XQnHi8flz52F8bALJZAKWYQKSID+ePwoAYRiCc64yW30HxwYH0NbSraBL8VVPIFXuKiEIA4Fyudrd1t6+yDjYt920DIAQeK6LqqwgkUiguakVjuvArdUQMA2WbUBKxFAfgoioJlDTDYQI4PsekokUpJBwai6SiQRYHOlDGUUU+UgkksgX8iCaNut9t956g6nb9Lnnn8ZlF12Jnbv24bXNG9Da1I49/iFMmzEdXqgI0rl0Dlu3bsJTTzyNT332U2hqyuHAnr37v/Xtf/uR6zpbbdNAIpEAESeAdjxSJHDDMBQojjEwojy4QnCQiDbsG4pKymLAHhRXIKbX17Nrtfg+wqMohvBRteHWdaXW4XUlDIVG9XgbHMF3BTRqxGoWiYiHKJUDWJYFz/NQc9wYZqX7zz334l8uu/Tyi3s7u04jlODFl1/G9W94A7Zun8CRY8eRbWrGxNgoenp6sXXbdvzsJz/Cl/7lS1i46BR0tXfiwL6D0ImGTFMKpWIV2VxK++a3vvlPl15y8a7iRP655uYWWFQlGwR+oIYSfydVLOQ54mzCGdNn9jY3NZ96+RVXrL78istXJBLJOT1d3e2d3e0GYwx68kQySZ0C78eZwqZpwvM8DA+PorerB1EkQTVZuOOOuzbededda5tyTf3VijP4wgvP7S2XCwPvfe/NkyeqyZqsyZqsyfr7bHh1XY+bTYKIhxAyQiKVgOd68FwPmWQSmq0jkhw9vd0YHhqD6/lwXQc9XV1zdY3O4WGAObNnYGJiDC1tzShOFLBx40acvfpsUMZgGCZ279yHUrmEXCYHU2eIIoF9+/evGzhytD+dTaNQLMUgIh1gqulU3iAdCdtAEAWI/ACEx3vPGGojpYSM/a6UkthPKGN7qTpM8ViCx2I5nxRCSftiCbRG1cGTR1H89QBN0+NMwXrLEq8zmepF1YFVjyXSil9A69m5jMV5vVzRi2l9R1uXSPMGjbkuE+VCycUIFPlZQlGdJZEN0jKXvOHpJZQqcmokEPAQtm3HMm71V0VhpHy6RMK2rcZGxPU95HJZREEESYFZ82Yva+tsay2Vy7jhxjeRcqmIcqmCpqYmJWdnKiqFshPbGKX6lvA8D5AExUIJuaY0JKQ8cGj/q5RpkASqkQoCMIOBEvV4LcsEEVDbLUKQn8jD9Wqolkqws9nU3AXzlk7vnXr6slOWnXHmqpVzDIP2uLWgkxkmO7D/gBCCyyjyZeB6ZOb06QiDAJs2bgYEIS2tzejp7cHVV1+DsdFhPPTQo1iwdAEGBgewa/duuNUqujo7sezUpTj3vHPR3NTcAAadWFejQZEl9c296mPBYoMuIRRgElSqPyuk2qrXQWf1QUipUkKxVETKsqGbCvDEbBuCk5OkgQQRB3jAMTo6gtGRMZkwUzh48CA5/fRTEXoeJkbHnXXr1h549LEn+2bOmDlOdVbYvn1nvlIuH+vr27/z2MCxfYQQjwIwkhbS6TSSdlLWHEdlbBo6ytUqmptbUalWYNtJUF0DYxSe66KltRW2aSKMIlhJCxs2bXiuUKq8uSmbThBCG37y+pgjYZrwLQvVWhXJRFqRsgH0TO1COpvBhvXrkc1mTvv4pz/1ge9+9/v/HAnhJpNJQACe64IZKqpIBiGIkDBNG4TSOKPWheAcpqkj4gS1aiX15re87dZVZ6x87xMPP9Ld1tKG7//gO2hta8FEoYie7k5EkKC6UjHU35sgBDwSsC0Do2Oj41/88pe+8srLL/529qxZsqu7C0NDQ8hPTMAwNKSzGezfv79v4OgAcs3N8L0A2aY00qkE9u7vA5lvoL29FZrP4sclsHv3bqTSacyeNRtdnZ2GzvRzTNt4iIDUCIBkKgXDMFCr1tDV3QVSAsqlEtyag2IhgmUn0NbWjrGxMZiGDSEjBKGPIAhAiZIN8yiAqTMkEjY8xwMhgG5pYITBq7koFvKJCy666F1vfeObzjjc348bbngjbrj2Rvzp7jsxb+kC9HZMwczpUxFxwPMDuEGIpAhwuG8fsjkbpdIENGYHv/vTn+8az4881tnWLqpVD7quoebV1D1TY2BMB2MUo2NjMAwdCSsB3/OhGRokRHyv0RtvIMaYGhpGEQTn6r1P1O+VUsZQNg4QAkZYwxsdhKGi9BMGSjVoRtwYeyEgCALOYdsGeJwokE6nUSgVEEYROjo7USzmUXNraGppwYGDBzb+8Ac/uMu/5ea5CxYsSBcKVTzx6JO46JKL8MLLz4NBorW1A9VyBStWrMQLi1/Cs889hxnT5kASHQIE1WoZQAcIFARqxamnzfvVr3//6X+49dajlWLpoGGaICBIJ1PwXO/v8gf84f6+YwCOabrx6F133dVcKBTbZ8+cPf89t9587tw5885qaW9ry7ak0HfwsG9bqSiTTPDdO3d7VCNBKtPkrlu/bmJo5PgQI+T4nt17RzLZzOj2LdsPHD7UdziSgZw8Qk3WZE3WZE3Wf5INr4rsMeI4GBAFIWJEU15TEGSbsvC9AMPHRlAql2AlTHgBMGfe3NmJdKp50SmLkUwk0SLaEUUciXQG55x/Hgyq4djRAYAAy1csx3vYzbjqmqshI4mBIwO1p595ek17W3uNEgKRVNAlx3FO5NvEvCjJJXTKEHABAgldMwGhDkpSCgjBlc9WUEDyGOREQRhpyJvr1lopY04KV7+oN8Ei9hcCde+SrK/xGgRlSUScTRv/RygPm8QJ4JSUBETEHZSsE6RjSXOcA9oQB8eN44lWoi53jeXLLM77FUpGKmKiax1YRUFUTipRmylFNxbgkYqUklI2ZMM84so36SgYTaVYQei7WLh46ektLa147vnnIAEkTBtHDx1FZ3sHUpkkKNEb8s0G16v+fAi1tc6kMrDtBLbt3L7t2LHjuw3TQLlQBEBg2SZ4qDY7OmNgYBjLj8HzfISBTzPZdMv06fMWnnXW2StXnXX2+T09U1bOnDa1ee/+3TBMA45Tk9NmzIJGDIAJOnXqFDBCUa1UUCpMgFCCZCqJuQvmw9Q1PPP00zg+MIDjQ8fR1NKEpqZmtLa3Y9VZq9Gcbfpv/LdCiPg1lMqzCBnL+uoLPQLC6v9Hyfxk7GUWjW08QcTVIdxxauo9YCURBiEs04ZpJmEnLEQRx8RYHrquIZFOIz+aR61axcR4HprGMHR8tLz/4P4hQzcnDh3sK+7csbM0nh87unPHro179u7ZPjY6OmAapispEPhqyGLbNqZM6UGxVEY6mYIQQLFcRHNTM8qVMizTgm5YYNTD+OgYODiacjkU8nlAEjQ1tSIKI4RUQ75YRDKZxvq16597/tlnXrz++uuukJLGkVgnrk9CCJqbcgiDEHXZPRcSFEAmm0RzSzOGR4e1s89ZdeMvf/HzlwePHb2/tb0DEY/gRz5IpAZI6WwGka+iiITkUHw4is7uTpSrFRQnRpKvu+rqG89YsfKtr23Y1HPTe2/GFZdehlQmCT8M0NyUVQMgoQYMnus04Ds8kmAaRc2p4ku33fbnwWMDf5zSO1WOjIyhUCghYdnQDR1tbR1wvQhHjhw5Nj6eH4dkrdmmdOMeNG3GFPhRGfnCEFw/g56eHjDC0NrWDsuyAAC9U3rx3e9/9w0f/+jHtj7+xOM/b25ug52wEQQhJAjGRoYRxsM7K2PDDzyQGDQHETu9KUUUhjBNE4auoogkJZg6fTpkEMFzJ2CaBiIuFLiMarjqqquv+/znP3/T2Ni49utf/wbvePc7cXxkCJdddDGSuQzueeABvGf6uwAAaTuBXDqNv9z/IPbtPYxPfOpjePrRp/Haxs27tmze9JTBtCiSHIZpIPB8gACapiESAqZlgRICXdNBBODUHHDJkbASCIRUw5v41mCa1knEX1nXC4GQ+jSJgHNlE6FMi4GBXEH3KYVGNUCof+cHSjli6FZM7Vb3OUoIoijE2NgYLMuGpmkoFUswDAPVWhW6zgCAb9y86aE33vjGS19bv/His1etwPr16/Ch938Q8+bPw7krV6O1qx27du7Alq3bcPN7bsEPv/M9fPdb38FV11+H9q4O5NIZuI6LWs2FJQWkBlx79VWX/GnV2Tff/8B9/5JIJGte4DWGon/PFYWBADAef+wmhPwlkUrnurs6c8zS6OCxQd+AEZmGJitVJ9B0nXMRhTyK/JiWO1mTNVmTNVmT9Z+34SWMgFGCKAqgMR22lYDvBTAsE0xT/tJaVU37DdOAZScQxETl008/fa5l2Xj6yaewbMkSNLe3wEwk4dVcZNNZUFCM5ceRSWfQf/QgqtUiojCA53jYf3B/vlSs9Huug0q1AiMGZek6A6EEYcQhhZJWuzUXhqk1tpxCRIiiGBgVb0HJSdm0JG5UQGSDdIuYLI2GnFltY7kQqvmFhMEYuBSqeebKY0YYAyRXkA9Klbc29upGMmrk+Io6mAVqa1yXf9YPeScOfKrBVTLmvyY6N5pgEpNDZNxkCgFxUqNNZHz4JBShCAEJMENTj5OrKAqNKT9gwkzEHlwFQDJNA+VSBQRAJtfctHzpKQtdP8REoQjX8zFrxky0trYgjCIEUQiNaRCRUGGmUvlV60AgNSShKBUq2LN3D77z7e+uLRXLw7PmzsTE6AQo1RBGHsIggO95qFTKEEKirbNr2nvfduO5Ten0qlkzZy+ZOrVnaq4p17Rv76GU79YIJQwtLW0ykUyS9rYO4no+2tuaoWkaHNeDnjDQ2tmKUqEAjSmP5+4du9DZ3QnP99DS3o5ps+dg2pReBQ4DGl7aur+TxNFVUgBUo+o1qfe4J71BSGO/LxufUcMNicD3MTQ0DEZ1WJaFjo42JT3VdeV9N2zohoEwDFEYzaNQLKKrpwuSSBw+2I/D/UfgONWa7wfHS4X8+vvuv/+5waFj2zzPHXUdz/MD36861SoBlVEUoaW5WckMAw+GocMyEwgjH47nQdd1lKsVmLqFTDKD0dFxRCFHlVcR8CCGT0k0NWXBwwi6riGKJPzAQxSEEJGKB5JCYKKQH/r5z3521zmrzz63rb09CQBR7Nul5MSzwxiDjBt/2rBEEMyePROvvPKSWHLqku4//ul3n3jzDW8aGBkdeS2dycE2LRBCwCWH77jQmYFkJgEecUQ8RCKZxLFjx2DopP3Gt7zp7dOnz7ph/4H9c8895xxyyUUXI5VJKogZMxrudkbVe8d1fBimAdMCmKYe5+7du9c/+fhTv3ZcNzRNA7quwbItSEnQ2tIOL/BQrVUgRDRw7NjA/pbW1lYIoFwqo6W5Gfv37sZf7rsf3/j6v6CrqxeCC0gQ9Pb0YHR0HMViEblcDrl0tv0TH/v4J049dfnwn++88yHDMFEtVyFFhCACMpkMak5N3XQ1A0HgY2J8AprGEEYBAs8HZbGqxDAhEcIwDYxP5IFIQNMZmKYhcH10drXhcF9fy8WXXPaGM85Y0fsv//JllIslNDflQJmCc0URx2UXXwLP86HrGo4eOYbWtha0d7QjX8jjycefRO+Unmj48ZG1ZkLfl85mEPihoifXh4hSIJXMwKnVEPEAjJ4UCweJ0A8b74ooiuJ7s4jBRzEgi6uhpEoCiAeKUV3dIhskfCEBwSNolKrhnqjDBzVEoYpc1HQNQig/OKO6ikJy3ThCRweXFFYiAUggm84gnx/b9/jDjz9y7bVXn/qeW97XMnfeXMyZOxu7dm3HW97yVixasgSf/9IXMNf1wP0Avb1T8etf/RrMNHHxJZdiWBuCZduYP38OHMcFBUEYCvKhD3/ozYcOHXp51949jycTNgI/gK5r/6l+8Es1jSjEH5M1WZM1WZM1Wf93N7wiUvJdSqn6J6HKp0jU9ioIfZSGKzBNQ8XrUKZkgxGali0+ZQGlFBWnIr3AJ4MDx9HW2QERSpCUhGFrqJRriDyBzRs345xzVqEl2wTHCjFv/vxKR0db+cCBg0il0uBhiCBUm4XAU5mMEoCuaZBUHbR1nUCGAUIexXRkBaA6KTdIgTYYVfJfLk5Ih4G4MeUnfLlCQhIBQpScMhJR7ANGQwpN6lFAiKWuRH09RmhD8kcZU1nBUsaNbZ08KkHqYKsY7nOys1NI2YBTSUJO7HqlPGnjKyEIYvmf8hiLON6IQVGlmaYDsceU0Dj7UnBoRANA1UHSMEApRcLWwEUFVDJkmrPtS5YunGKbOpafuhxbNm2GqWuYM3sOwogjDEMYmo4IEiLiKoIijiHSDR1MU1RvK5lEJptDOpUe6Gxtkb7jARQYGR5GxH0k0gnr9OWnzZ4xbeYSXaMLZs2ZfeppK1cua2puao/CQDd1ne7cuRvz5i1ET3cvPNfFnDlzCQhgmRZAANMyoMVb6+HjxxFGantarZSRzmSwcMpUZJuyWLpk8UmnOoBLofzZlEKK+gCExA2bBhFv8imJZcZU0YOlkHB9D5TG+ZKEoFKuolQqKCKpZiKRsFHOF5FraoZpGqg5NURhCMM04TouSsUSUukUTNPA8aFBzJg1E6VS1d+xc9fRta+s7eMQB/bs2bV9957dm472H9llWoavBghl2LYNy7bQkexCyEOEfoBsNgNCKDRDRz6fRzKZgFMTyJeKmNo7DROFcSRTNnRNgzNeg51IxG18A7uGUqmE0A/AKEPCTqNSqYBSlaXqOB50nYFSYO2r6x7bvmP7M8uXrXh9JCJkm9MIwhCarsNxHCTsJAxdbxDFSXz9SgAhFzj99BU08iOcf+75q+65/97vX/f66z46MTGxvinTgs7ebniui3KpDAgO3/cQeBHK1QIAkJmz5p1/5sqz3rloyaKLqUk7rrj8Cn3lacsBwRThO5EApAJmCSnBoN6L6UwWmkFRLdfAKcerG9bt+/D7P/r1fD6/rb2zQ71HrDBuloBkMoGBgXFIEaFUzOdffWXt1pmzZp5lGyZMWykBqhUHzz33Al5esxannnI6pCTgMgJjKme0Ui4hl8thzcuvRlWv2jl3wcKLKSWPgkguhUAiYaPmuIgEBwjghz6EVJFhnuupQaJhQdN1cM7BiAbf88FFBI0AjCoFQTaZUbR2SIRBiO7uqRdectHF5z107yPgIRdf+NxnKZMEE4UCHl/zOLq6OnHeBeeDBxxUEpg6w8DRI3jq6eeQTWex9pVXvQsvvWjdls2b7t61Z+dYc2tr/P4QMAwNJH6OLMsC5xHCqg8wiXRWbT3DMITrOtA0HaZtKhI+R9woy4acpnFdCAlJSXw9ChBJ1esRqyTqg8qIc2i6Bg0aokhZbUic/RqGoYJeSQlKJZiuQ0QRwFS8WuQJtLQ2w9A0MJ0ilcjgmWcef/SKKy699Kprrrl8/eb19MWXnsfo8RG4VQ8H9x/G3Hnz8aa3vBGFkQraO6dg1vzZuPe+e7F46SI05XI4ePAAkraJKdOm4MCBfrS3t2LB/EUzujp6X7dtx7aXiLRq6h6sTZ4mJmuyJmuyJmuy/k6LSSFjIqkGLjhq1Vp8gBGoVmrIZnNIZ9KwTBNMowjDEEQChmYuuubq625JZxJtHCH6+48R26BwqzXMnD23sUnUdQ2apePpZ57GfXc/gFPPOAWz5szA3XffveXPf/zz71LptGtZJkqVKlpaWlTjGXtnwzBQfSk4opCjzgWq+yjrfWv9UIUYWoWYmktQ92HWF60xeIrUNwz1HSuNf4844cOMaceMaY1tA6EnAaxkfWOomiNCAEo1BXgitLElrB/Y1EY59hjHER1//c+TV8Lx4zopWokSAsYYLMsGY0yBiDQKy7YVzCqMGptnwUXDpywIYJkJ8ChCoViAaRkIwwBO1cHMWdNXfuhDH7z1T7//A+3u6iIzZkwHJEc226Ro0roeb7BJg/Rcl4vXBxKCR6hWK+hoa8PTTz3z6jNPPfFyoVgQZsqefuaZZ5x91TXXXnfGihU3v/eWWz505ZWvu6mnp/fCpcuWzSuWK9nZs2drU3unkWNHBpFKZzFtxgy0NDUjl8vBTJpI2DZMQwczGPqP9mN4ZATj4xOqORAcHV2d6O7qRldXJxJJW10rsbxdijh39SR5spQSVKPxawJwHsWxTgQT+Qkk7URj6y5BMDE+ETd3ytOeL+Th+x6qVQfJdAqmZcKybNRqLkZGj6NWqyGVyoJKAqfmQTKJgwf3y9179pcefvDRvgOHDjz6mU996hvf/e53vjVRmPjlmjVrHt648dXNiURyyLQsTggD09XhXzdNCCFgGSZKxZJ6b9YcDI+MoFatQQIoF4vwgwCmacL3AgjO4bouCqWiihkhQBSFcFwftmXBskylFBCKVi648mFnshm4rgtKVYyUgAAlcF59dV1lydIl50+fPj1NibI+RAFHza3BthMNOwBi/zJI7GOXElEUYmK8KJ0wIKefeuqUK6+88py9e/aGe/bt7g/8wHUqNQSBjyDwUa6U4Qde4qyVq887+7xzP/mmt779o60tXeff8Kbrs1dcfgmbOW0afC+E7/uwknZMxo59+/FrBRDlsSZAEHHcffd9u7/+tW98cf+e/ffnMmkUS3kUC1XYlo3mliYYpoGx8TG4ngPLspHPF3Dq6ad1ve3t77hm+7atqLkqP7qjvQugBFu3bodpmFiydDEIA1w3QEtzE1zXgRDA8tNPobt37qHPPvv0yOjI2FP58QlXSMCybUAAtmXB8z2kkknomoZyQWX9Eqoo+bphgIeBGsxwgeaWZliGysKmjMA0TEghVYQQD5f97re/+4rw+dx77rkb2XSWLFu2CKVSCfv378Om1zZh9tw56J3aDUhA1zVkshkcPtyHhx9+BI898thowrBffOLRJ360Y8+Op9s6O9CYsxECO2kilUqCRxyVcgUa1aAbBoIghBAcnu/A0HVoTEXxCCEASuLtrqLNE0pAhLq3UUqVJLmeVUuootzX35P1KDgpGoMoQmLps1QAvrqigBKq8sXrFGGqVAk8DGPVC0OlrBRDVKNwPC9/6GAf+8q/fPnM9a+uTfcf7IdhmGhua0FXbxv+cu8DOHjwIPL5Iq694WoUCmN4+sknsWHNOsyeNRfnX3gB8sUCxscn0DN1Kqo1F80tLUjYJnn5pTXPFkvlCUA1vJ/5zKcnTxSTNVmTNVmTNVl/jxteAnU4lRLQdR2WaalNjsaQTiYRhCHSto2EbaJYKkASwPc9nHba6fM6OzqnrX1pHVadv5J0dRjQNSCbTse0WqBcK4IyDbV8GStWrsSqs1aj/9BR2FYKu3ft2haEXt5zXbg1B6ZhoFpzUC2V4jxcCsMwQSiFyqwnIEJrgKgIUxs5tXSNychUndq4UFJcAOCcx00jGrJiBRlSmykpFZ0yElEsPa53nQKgShaMmJSs0ovUxkWAx7RdAhmTSWUctyHj30MpjRsrccLnJclJG9/6djeWWtedkvFhXnlLRSO6iEuBEH7cXCjIGAli6nPs10W8wUwkEzA0E47jg5sGAIFsNgXf99Ha0oqqWcGppy47c+/O3YZpanxkZJiJYeDiCy9WERWRkmVHQiiabJy1qul1WaIiR3s8wvDQEDwnwI4du8+69Oorbnvv+94ztam1bUk5X+leNG9B9snHH9OGh0dpe0cnps+aCc3Q0TNjCg4fOgw2Q8PsBXPQ2twC0zIUzTXkIFKi6lRRq6mGMwo4TNNCri2DttbWxgUsYh+kkBKCKB8oI2pLWx8g1HNv6/7piKuDfLlYREtbGygxUS4VkU1nFB1Yp2CSIGEnMD4+ijAIMDI6DI3p6Orqxf6DB1AqlmHqBlK5NIJIIOQBvDCQA8eO17Zt3TK0bfv2fLFYdPft2XW4u7Pn4Pj42K4f/3jtM17k1hjT0Xf4EJimIZFIY2JiQm2IRH3bTOE4NXAuUSyV4+tLDVwMzQDVmMrCNeIGnwsUyxOgGgMlDNlMFnbChlOtwY+38ZyHoCFBFEVIptOwDRsT4+MgjEA3NfAwRBiEkJBIJzMIPA87dmx/fPuObXecvfqsj/MYLgUhkMl2n3juY8I5iedAAkAyYWPu3LmYOW0mOTp4FFu3b8es2TPnPfrEY9/71W9/88a/3Hvf89lE6tDWbdtLs+bO0sqlavcpS5adecOb3nT5vCULu3TNgKVR5HJZ5W+VHLZlIJmyIQhA4/cxIQSI6cnKHz0BTSPYtWfP4R9874efP3Bg//3JtI2aU4Pn+khn0pBUouY6oBIIA9XsDw+NoKO1A1s2bdz00ksvHJ09c/bUluYWHDx0AM8/9zTecsObMXB8CC++sgbTpk3DyjNXQtMFwjCCbSRw6OAhLFm6GBedf4He2dm5bPeuPafuHtv5TC6Xg+PUQMHgOg40jaJYLMI0DBiWCapRRDxCrVYfIOgI/ACZbAaWZWN0aBiWacOwdTi+G2fGVlM33njLP5595plnffvb38Ut73sPWppbMTg0it279+CyK67A2Weeg2xTFmHIoesM997/AJpb2rBjyyY89sijR085ZekLpmk+0dfX93IynUKxXIKpGaBQ9hbP8VAulqBpGiAlqtUqdFtTPxs8T1kpouikGDaASfVa1JXthJyId2OMgVKKiPN4OEgbNgFSj4MjBHoMu4siFYunZPfqeyCEgEd1or6GMAxgmRosy0CxWGr87OIhRxhx1LwawtBHS0sL+voPPXL7j39y2vXXvfE91VItmWvO4ujAIMoVB5QD/Yf6EQYRtD9RXHrZVTiw5yD+cu99+OOf/4A58+fDtiw89eKz+PBHPozB0iC6O1sxf8H8VsM0u1vamvYFQYBqpTJ5mpisyZqsyZqsyfp7bXiT6QxCHqoelapmwNANME1tBUI/BJECTq0Kx3UQRiFCHrKOts55s2bPSHb2tqCjtwtJPa0aMEZANYqaVwEHUK3WcGzwOMZGC7jqqiswdHwQXAi4vr8PgAJjxcrkSqUSg0yEym2E2gqQeLup5HJogJtk7Ber+3ElVbFBREU6qm0wOUHOVc0kQASJsx/Vk6C2lyzO2a33nQRccCUdjuMaBOcAPeERlvW4oXjDLOIoIQoJIQEax9RIKUAYAyMqNiVutWMJc339fKI5o4QgBgCDi5jITBk4V4c5QG1FKGWIQhXtofyUyp9KQWK4jYcgDCBhw/MVAEZIiSgSsK1E+6qVq5bkmpqQyWbplClTkUykoRk6wqhOkVYNLxPxNj0eFlACEKoOq1EYIZPIwNANfP0bX72oZ0rvRaah4YWXXsDcmfMhAoG21g65cNFilCoVLJw/E6ACyUQKKTONVMZukJKlkCiVyzg+OoyOtnYYmo50KgXbsrFw/gIEgscePx77iRmkrMvvJXSi0DlKmmuA6QRcSjCivhdJgEN9fchls8jlmpHOpHHo0EEErmoKX3rxRbS0tSKZSMKpeGAGAxcRhoeGUSjmkcvlsGPHDsyaMwulYhV7Dh3Iv/LyK3tee23jzv6+/sOmZVYyyVRlw4bXCvPmzzJmz55Ny+XyQdd1hziPCulcKrCjBFzPB2VAFPowdRNcCvAwgIg4dN0EMwwwEcE0dIShIt0yxsDBoTMdpmnBCxxQUAhBkMtmYVkJeJ4L0zLBOUfgB0qm7PpIJRNwag4830c2l0UYhCjk89ANHUSj4BwA02BoGkYnxqFrDLl0Bp2dPeLfvvlvv1t15plXnLHqzIWu4yBh2XFep4yp4DK2EsTSU9WigosIuqWjpb0Vx7YMY8PaTXLGjKnW+25578XnrFp9cVdbtyhXSlGuqYnqpk4PHzxEh4ZH0N6UhWkqGFQUckRRCM1gYIYeZ2/HlgEp1HaXKDl6pVZGwH0EofS+etvX/m3Hju33L19+CgaPDcCXAZihK7CV46FULGHO3LnqeecqT5Uw4PDhI/u2btv2zAXnn38zACxeshgjQyPQLRNvf9ubcPRIP/58zx1YeeZKGJoOp1YDpRq6u7owNjaGnt5ujJcmZnR2tH/44gsvcnfu3LmGC4lkKolatQrf8xVojgsEUQiECqxlaAYs04LnuUgkkyCUolKqQNctQFOvsUYIJibymLdg/hXf+9633vCn3/8J69e9imuvvxaz587A/fduQv+RfnR0tmN0bAIjw6Po6GzHjp3bccef/4gli5YGf7n3vjXt7W27fS/Y8NrWjc+GMiqJUMDSNERRCD+KYBmGojITTVkkGIWdtAAqISLFEiCxWqbOKWBUawCqKFMgPzVwUkwFLjhEfahHiAIIShlveWXcyAKM6fGmOYKUFELQWGliIPBcCA7ougEeRUDcdEfVQG2XiRpkEKIsLZrGIKUOx3ERBlHh17/77e3LV57RPXf+witffPm5hGklSKlURUd3J0AF5s6cjXK+gK1btmD/oQPonNKJLVu24TOf+RRWrjoTgR/hti99GavOOgNHBvpx/333613d3TP7+g69UCnXpBSTXKfJmqzJmqzJmqy/12JUU81GEASKdsqUJFcKxD5NDTwKUa1UYVomJOcwdKv5ff/wD+9dvXr1/GTSgmFZGB4ehu/7SNgJcETY33cAs6bPwtEjR/DNb34T99/3IK57w3VYvXoV+g4eLf/pT3/66fDQYL+VtOODLQejyjNGGBCGPJYWSxim2aDiMsoUZpnLWGYcx5HQuo9XNmjMUqqcVHmim1TNpFSNKj0JZqWa2pPyc+MNBI3jUuoQLOXjBVjs+0XdR8virSJwgvBch1LFTTqNZX8NnmccL1Rv2Ov/TvmI6/43EkN51CaaMDQykzWmNzbOuqmyPYXggBTQqIIaMUbVICMMYOgGEqkk/DAgoyMj86+9+vW3ZLKZ9kOHD5PVZ5+N9s4O1TzHsnDP92AwLfY4x/FKRD1S1QAL6JqBTC6DRMJCT2830qkUxkYnMDIyJs9dvZoYlompU6eSltZW9PZ2IZmyYZgGCCWwbAMhD1GsFNUggRBEYYREwkQ2k4NhWjB1XUllCYHn+eq5plR1r0Ash1Svk+N6WL9uPYrFIrq7uxrDhno2seM6KJfLiuIrOGzbxsj4OEQUQnCBzrYO6JqO8YkJcBFh1649AAVmz56F3p6pME0bYyNjhb/c99ALv/7tb373m1/98pfPP//iHw4fOnx/MV98xalVdx3qO7h//rz5h4YHj+/auXPn3tHRsaH+/v7a2MQEz2WysEwbYRQoD6qAatY1giDwYRomGDNQrpYhIcEIRTqdUVm3REHTNKar7FNoME0Luq6jWC2BMZVzbFk2giiA57oIQr+xiYdU13gYBvA8P75eJXRdh+PUIIWi/woeIQwCeK6Hnt5euK43WimV7BWnnXJuW2ubRimFgEDEFTyIxo1ufYOuLmGCiEeQksMwTbS3d6C3vYvcd/+9KBSLmDNzHhJJm2g6Y77n06ZchrS0NcN1XDz20GNoampCc0sTIAmYrvJ6SQymqvs56++pKOAolcsYn5hAKpXC7bf/4vbf//53387lcmEYhXBqDnp7ukAAVKsODN0AAUUyncS0qb2o1VyAELUJN7Xo+PGhciaTXT5nzuyONWvWoau7B+l0Gvv3HcIZZ67EU08+Bs/zsWTxYnChBkClUgGHDvehta0DPb3deOtb3zL3+jdcf9a99927/8ixo32JVBJuzQGPVHwPFwK5XBaAAJcSpmXC95UnVjcMWFYCQRggm8uo69px4HoefBHO/Ma3/vXzZ61ctbRcLiKRTGBsbAwLl8xDtVJDyjbRM3UaKKOQkYCdtPDos0+gs73Hu/vOO361bce2Z88+5/xaKpHatnPnjn2mZcC2baSSadiWgdD3UXN9tLe2Ke+u4DANA0IKCC4QhGFj+If6PSC+zwqhCPKMshO2AgkwyhoKlTqVvj4gadyH4/t43fvLKAWEAptRxpRFgwvFDJASRrzNVfd3CsM04PseuBBxFJuS30uhlDW2nYDjOuPPP/388SuuvGK2bpuzUqk05syehXx+Ap0dHTjU3w+n6qC1pQ1CSGzatAmaroFpFIcOHMHChYsxa+4s7Nu3D7/6+S+hUyouv+SyQ888/cxW33ddRhk+/4XPT54oJmuyJmuyJmuy/h43vFEUglINuq6BUQ0a1eH7rsrDhUCpVAUFhWnYIJBI2hZ0LTF9wfzFi3VNw7PPvYJEJou5s+fCtBiSCQs1t4KZU6dDZxp27tqFvv5+XPX6S8EjgQcfeAScY//eAwf3t7R3IJPOYHRkBEHggzICGfjwAw+MagChqhmJBJimgRDeICArnyFr0D7jgNs4roc2gFZSqm0kpIxJxyetU086QPMoJjGDqsNXPYuVUUVxlurwRGMfmYiBLICMD3hxA17P4lVrELWFpIpUGoai0RAg3pDUPcGUMeiMIeIROK/vaYnaFscgGEpZ3OepRs4PAhiGAUM3FGCLSCVHDiPougEhBFpaW+CHHoIgRLYpB9dxkbRNbc6K0xedd/6500fHx9Hb24MXXnoRy089HV2dnUomDiUXV367Ez7oxrY8XpmSWEYuZV3JTjC1dwoy6QwpVcrI5jIAkn8F4zoZh1yqlOFHAVKpNBihyGYzjXFDffwghYBAhFTCbkC7ZDzYoAC4kGCQiMIAEgJtbW0KXFYfWwjl7bZ0C3Nmz8HxoUHVWFsJzOydCTthYuPGTaiUR+Qpy04hHR09SGZszJ+3CPmJifEXX3hx1+bN23Zt3LTpteGhge3btu/aD4qqaRqku7uHEkCUimVZc8r+xMQEyuUKKpUSWtvbQZkOy06AahT5YhF6DIbzw0DFy4AgYZhgGkMkOTTJwQiDZZrQNIZqpQo7YcHULLiOAxAJw7QQeH7sceRgTEMoQoR+iCAMQAiUt1RKmIap5MpRiCAMQQhgGiYEJILQR8gDhFEAnRqABBLpJHgUwnN9DI8MQdc0PPDQQ3eff+F5Z99w45uvq1RraGrOKoCYEAiFgKHpDdVCPQbM1E3U3BoYA1IJCz4N0NTejJGxcbihi45MC5LShuv60HQdOtFRrVbQ1N6EclBDvlRGczbTsADU1QlKdquGS2Nj4xChgCBAS0uL/NLnb7vzpz/5yXebmnK1VCqJSqUMyzZRKJbhOg50g4FpDOlMGrVKBXsKJbS1tcEzXARhgCCIsHnTlnUPP/zIt4ePj725XCmTF198YWB4ZPio6zkLbnnPrVcPDY6nP/uZf651tnckLrjwAuI7PpqyzQjCEOVSAbpGUSpVUS7n57/tXW99z69+/duN/X1HCobGoJs6NM2E4BFqbg2GZiIMIkiptqGtHe1qEBGq3PBCPg/TMpBIWBgZGcXyladfftXlV69+8eU1cDwHH/nYRxF6AZ564jFEETBl+iy4joOWlmawTAYbNm/Cvj19ONZ/bGzL1m2bp/ROH7N0K7V5x8Y+0zJBCEPNqaHm1CA4V8RsW0cylVb+dh6CQUOhUEAkFcHZ0E0QSsCDmFBPmYL8gQICiMIQHPG9ktCYDi9O3BdB6jDvxjCqrtghjYGlaoAZKKIgBKPKC8zDEAKAJAJB5AOSxER0Ao3pkESq933IYzk1kEml1VaYCxQr+TV33PmHn194wRXtXvX40kULFsCp1JDKpDB1Rhp+EOFg/yHMnjMDs2fPxaFDfQjCCLqm4a4774CgKnN42ZJlOHzgkPXU4081E0Y6TMuYiMLJDe9kTdZkTdZkTdbfbcPLmPJn8khAkhCpXBqazhBFytOnUw2O6yMSHJQJOI6LlSsXT+vpndrbf+gQsukseqZPR09PB4rlEgqlEpihI5lMoFIpY9bsmXjfP74PixfOx/HjRzB8bNipes6rbq0ymLRa4fsBGBhM3Wh4vCwjqbycPABhBEHkw9AM1eTEEl8CoXy1kjTIynGP2YgIajTAkijpaz22KIbsyHqTHPdglLE4AihSW9wYiKLOYRJUI9ANHaEfQfDYW4u4+eJq+8w0BbkSMfFZxRmRhvS6IetTnSIYpSoKSQhEMcWZMhY3eTz+3lRjzgVXX5+rEyNjKg6JBxFE7P80DAPJWOJaq1ZRLlWgmQymacNxXFiGCUjQSy++dFlHW0+y4jhYNmU5qrUa9HibGj8bSCcSJ7blcYPeAH79FWOLQDIA4sRz39ScVcqBKFT5tiQmVMs6SEy9FrlUFpqmNYYH9WaaAAiDQD0SSiEEEIYearUqMuk0dFMBcxR0TW2G0+kUzj33XAwNj+BQXz9mzpgORli8xZdw/QC60KBrBg4e6MMdd9yDRQvng1IGO5mAYVhix+5dlf6jRw8cGxrYuum1zev7+/o2rVu/7qAUogoAumairb0NIBKVSkn2HdzP1YZKg2EaSCZsWKYBKdIIvRCGYUKjDK7jgWk6akENhDJojMG2TQguEAUClGqwTBuEAHbCipf4iuwtOFcwNMpiqbtA1SmDaZqSJYNChgIaJXCcGkzDgmla8AMv9tz7CMMImqGBUJVlSuKttiRQXnlCEIYhHKcWD5uA8dERLDtlOcbHJga+8tVv/GjBwiVLTztt+axKqYJMNgUIirHCOFLJFOykHUPZTpKPEA2mYWJiooDR8TG85cY3QwJw3Bq8IICuGUjYVkO9cfZ554ABsZVAxMAiAcaIer9R9VrWYUpOrYqeKVNw4MBh9/nnn7njlTUvfrutvanPskyUK1WEXMAQEsVSQSlXGIFbKqlhExeIhITjOgiCCL7nI5mwkUzY3iMPP/DnNS+9+OIFF1+U2rZ9c35kZKxAGZ21ZfOGw7Nmz5jx9NOPD3zxS1+6eOasmaf19EyBU3UwdcpUTIxNID8+gfHCBIim4frr3rh4/76D3ceOHivUvelceDA0A5HPERFX5WZ7Pizbhq4xeK4PHnFoTIOmqSFEJp1FFAbT//mTH319KmElf/yd7+Oiiy7B8aER9HR3IfCB01aciukzZiCMggZM7JWXX0FhbAwbN6xJ2wmrY9HCxdWh40P9w6Mjo9lsBp4XxBt/DwBBb88UdHV3oVAsgVCBZEpdw7qmgwooO0vkgzIGQzPjYRJX5HOmtvCC8xgoRuJ/CgiphnH1AR+JFSqExH+mbk+pkw6IBK3bTYhqqAkBGNVB40Ekiwe0rucAvoRumGBUXcPKa64ikhzXg4yz3bu7u7B9+46HfdfPzZsz76ObN21bcPllr8Mf7/oDKtUqrrnyGqx5dS02rt+AK668En/68x04euQIdEqQy+Vg6BYq1TJqThmz5s229h48tCLXlF5aq5IBYcpJE+9kTdZkTdZkTdbfa8MbBBEMXQdlDJZpwwsc8IjDtEyEYYR0MoNICFAmQTSKqBQhncu1T5nea+3fuRWUSbS3NoNIQKcadMvAeL4AHgmIKEL/wFEwJrFnzwH4vgdDasGzzzy/x9A0cB6hWnYbcUKQypslIRWFmCq5m6BqcyCFACVa7P1ijbiLOLy2rjoGjxtFEKJyemXsqY2lrSoDN4arKF0xCCWgDOCQAAdoLM0DTvw5wSUCP1RxR3GDRqhq4oRQvjXCeQybAsCgaMFqLQEGCrA6CxoN6Avi5k/l5ZJG9BEhFDKGUKmcYR77jMUJqbVUXkpNp+Dxptmp1sAjJQf0/QACDCIUqAZVJJMJVKvVxJRpUxYRJkEFQSKdQktbGzRK4pgQ0sgArnv2wID/SrcKyMZMoeFHZoRCUiDkirRdh4edpIOOn1P1a53pUCiaeAtEJPKlImolF5amIZlLIBFna5pUg6FloBk6BOLHJgEtztEVACQHhkeH0dvdDUKAUrmCSr4oi+Uy+voPy2TCpgwaZs2eg6VLfZx62jLs3rlndNP619bv2LH9hUcff/yVfGliN4/CKiEsltWrw3gqnYFt2dAYQxAEIFKHaSYgpYRt2TAsE061Ai4EuJBwnDJ0XUd7a5vyFIJCCB1e4MM0DFiWhZBHaGlqQaVSBtUYwiCAzhhqVVeB1CAhpRpuGIalfNyh8hzrugHLMlGYKMY+aBl7UkMwTQPTGbgIAQH1fo4UYZ1RpiJueCzP1yiCmPLMOUfC0kApkEqncbjvEBjTMDh45Lmvff1r3/jD7//4vePHh5IEXUgmEzA0HX7gwUwYjUanrnawTBXtk8tlkMmkGpdN6AeohTW0t7UrP3AMe6ax/J8RFqsKBISMQKGpBkqqvFfPV5C9trYOjE+MT9zynpu+MTw4/Ntlpywe7zvYhzDg8HxXQaUsC3YyCdd1Y/+8VCA7SWCZFlzXhe97YJTC831ILhB4blSQ5MixY4PonToVlaoLXWO7duzY+cupU6bmOjp6qmteXjfy1a99I/uLn/10diaXQqXsIJvLwkoY0HQdxUqZf+Nr33ri5z/72dF0ukn5WiMOHoVwaw4SyTQoJCqBD9u2QSQwOjQK07JBAAShj1Qqg47WdoxPTGDRoiUXnnXaeWff/pOfY9qsKbjoovNw7NhRHBk4Aj9UgxUA8J0AxAQO9h3B/r0HMDE2jtamjqgp3WIePz50fKIwsSUUoXRcF2EQQGMabDMBK2kDlKBWdWBoDAGPUC5XMTE23gDVKXtLpKLpQBCFPohUwDgm0YhWUv5d0hiW1YnzJ5QbJ1Qw6v6MOO4uvps0It1i+FWs0GCMQoJDCECTBFJwEKGsKZILhJGSVktNbZ+jkCMMI5imCYCAhwIJ0/b279/38MxZs2e1dbf3LFm6JDNr/WysXfsy+vbvxebXNmHRovk43NcHwUN0dLTBcxx4oQtoGubPnY1qpYQdoxPo7OleOnfezDP37t27efj40GTDO1mTNVmTNVmT9XdarK2tDbWaA8qYiqIII1CmiJlRFMEwNBimioGxLRuVcgXXXf+G161efc75fX0HwHQdLS3N0DUdvu/BMk0MHRuFbZooV8tYv24DDGqhVvERRRGWLF00tmHDuj8ePLDvYMQj8Ejl74aIYFrK2+m6NSUhlkTl3NIY9iTjqB7BG55XQmjceMWTf8oaPjNCaNysxh5YTR3UFCk09gSCAjTeVEihSKOEqWxPGYNWKG10eOrwRmJP4YkNJ2lEa9S9w/VtV53GrOBcDR+wwIl835hkqukKrCO4anxVkxTn9RKqmsk4AokwdRCUUqjNHVGyQFEnnwoF5GEaBeeqoTYtA0yjSKYSU//x1vf904xZM1s0TR1SXd+DbdsxifpEQ1r//uhJMU71/rVBQY4PtZRScCEaQBoVR6IOngBtRC+ReDhRlzbWAduAyr6dyE8AnKj4j6StvHxxE0SZeg5kFEeYaETJeAHomsqQFRB4/NEnxaHDfZJQRnbs2ElS6SSZO3seMTVT1Jza8YOHD269/4F7H/vTnX++/be/+92//ulPv/vJlq1bXok4H8xkc4Fh2gjCCJRSpBIJEDDkcll4rotqtQopBJhGoDEFO+NCIBQqizkII2TSSVimBd/z0NHVDitpQUiJZNJGEAZIJZMwLCX7DcMQjDFEQYAoigAQhJwjCANwESnPLqUIggCu5yCKIggiEQYRXMcFjyLohoZIciXJJxJ+4DcGQTTOL67nooZhBEZpI7opCkJ1HWkGNKohkiE0nSLwIxiajkwqjda2Nqxdu2YLoSy6+MKLzzFNU6MMMEwdZtKGF/oNub+SH5+4PiilqDlVVKoxjVjTkElnlKSV0vj6IYgCjmq1Bss2G9c5j1T2qhYDjYaGx+B5NXR0tmP7rp2H33Pze/95zdo1Pwt8v7Zr507YyQTcQDX2OtPgel7D95nOpBAEQZzvqmSyge8hk82ChxEkoDyrUd2vrrbjvueCEopysVIcz+eHJUS+ubmt2tHeXnr66Wc8wzBbWjtbE8ODQyiVCnjqmWcq9933lz88+ujD362UyyNarJzQdBX9Vo/Vqt+XTNOE53rQNR2ZXAa6ocE0DIRhhIn8BIrF8emf/vQ//5fmjtZ5d9x9v/z8Fz5LKAEGB46hWCzgxjfdgFQqgSgMwQjD0PFR3HHn3agUyzh+dNh5903vOpRM2M8/+eRTz+umViWAAlLFW9fW9g6k0ilQQuBUq/BDH9VKBeVyGYzFlgaQhpe3oY7hHExTmd+UkrixpKCNHHMBCQmNMRiGcfKdI6Y4n/T/Y/WIRL0JPvH31EnQygsMtZ2PrwvKTuIfAEjaSURRCM/3oFsGNF1THAhDAwWBburwg6AaRKKwZPGC6Uf6j8ybv3A+GCN4+NGH4AUuIh5i/4G9uOiC87D/wAG4vqeuQVNHJpVC/5F++BGH63nRrt27jvKQb2eMHZuMJZqsyZqsyZqsyfo7bXibmppRLBagaQxRxKFpGhJWEmGgJKIa01GtVQEAgRcQQmlyyaIlry8VCmcEoYdLL7wUYRhgx45t6Omdgn179oPzCDNmTsNLL76Mz376s8hk0njjm67Dlo1b/AP7D2zYtHnL3bqmj+m6DsEFNKbBtGwEYahgOFIqKWo9ESg+qCtgVSyBqx+CoGTFhCpZJKEEMpbJkbj5rH9eivou8gQg6uRDF+oeMygpMq2DVGLfbP0xSCEbHl4hT2yZSbxlU5vl+omfKohVne4MlSdZ3+7WSaWUsEZL3dgox38PAGiaojwLIRuHUELVNyC5iA+X9dxZglQyhUQyBUIZwihoxDyFUYCe7p65H/rgh29OpVMJRgkMQ1d5t4w1Dp71frZ+8OeCNyBdjUY+frbqwwMhYooPlHwUABzPBYGKGKkTs+tq87iHxsDgEVRqFWTTORAQNOea0dyUhabTBrxJinhwUCfDamqwcfjoYfzlnr+gvb0F27bvwP69++SevftIEIZk4fyFZMasmejpnoJyuXJ07bq1z/z0Zz/70Tf+9WvfvPueu36yefPm+/ft2b2lVqmNJJJpnrCTIBJwPAeCc9imiUwmDdO0ILjaFoVRAF3XEUYRLMtEGKisaMs0kTBtJVemDGEQglIGXdfU5jBed42PjcRkaQKqMQR+gEK+AN/3EfO94fkevMCL3xsUggt4nq/kopRCxNL/KFQxQkzXIITyfZqGrt4XUtFqCVTTyAVvbIGVGkH54RFv4UzTVEAsHiHiArZtIZVMgWmaemyEwDBMbN2yZV3EubzksotXujXXGBg4BithImElQCQ9IXmPmxoOJTn3eIBdu7bDYCYy2QzK5QpMw4LrOciXikglUxgcHgQhEslkspGtXc9epZQijEIUCkX4foAXX3pl6z+8732f2bpl6909Pd2SEQLDPLEBJ5QiaVvQNA1NTU2oOQ4Yo9CZoitzGcE0tMbGPuIh/CCE63hIppMwDQtDx4+jWFRqlUQqAU2n0A0dlXIVfuAVLdPue/SRhx47OnCkb+nipb2WYXds27pz7+c/97nvbNny2g/HRscHTDuBMAwRhWozqgZFFDwMofgJDLqmQUogk8mAEArXcwEhkclkUCqVyCWXXHTrbZ//4i23ffnL9BMf/igJHB81z8cZq1ajtbUFqVQSUaSgg4Zt4YEHH8HaDRvK02fN2ucF3tp8fvThZ1947tEg8kaUakZJjSlTueqpVEqxBoRQcnIh0dreiomxsZgZQMFiny1o/GseQWOGiryKGQNRFMVKj3joEStk6kO9iPPG0PIkdN+JHPX6PTzOD5NxRBeJgX8ne/8Z1eIcYzRgV3WrShiq96hhmKCEwnVdaExDoVJSoDfNwPDw4NDA0aPHR0fHrFnz5nR0dXUlq24VR48cRbFQQk9XN7KZFPr7j8BxXTCqobO9A5pm4MjRAZRLBTS35Nitt76v4Dj+uiNHjvR/4fOfk5NHismarMmarMmarL+/0irlMlKpDIIggMYoNF0H1RiYFst8KUXoR3A9DzNnzkxpmpw6Onqsw+MLkDM7QTV1IOnp7IWh6WjpaELSVvLFfCGPW997MwLOsWvXDrhOxT3cd+SQH3hjueYcqpUqkon49xbziMKwsToU+GsfroQEF7LRgNbBVJKcICWDqEYVUSzJJQL17koQtX6lcc7tiQVmvcmNm1p2ov8l8WZDNXpKmsyFjCXRanumx345LrlqlePYHgl6ImMybpZBVSSSoZsIhQ8OKNKtiBsTrppzRqnyItdjj2JJt0DsR5USMuIAIWBMi6OMFME0EiEs04amG6CEQS27JYIohC50aNRArepmIi6MKOAYGxsFNIrmbDMMkL+SKtf/rigKQeMG7YR8OX5NuFBybU3lbGoslqPG2xkWx1TJOn26PjyIn30hOBilSCUy6oKkdb+viLf3PG6k6gdnJdXetm0rSqWCtOwEEVTKA4cPkyDw0dvZS84480wEvieqFW/wjj/c+doDD9z/wmuvbXi+WJzYn85kAh5GkAKwrKSKVIm/K41REGhg0OJNK+DUPICq+JgwjJBMpkAYRVCO4LkBbNtSwKmAQ0BlhkIycK7IyplUBpVKFfmJCaSTKSTsDPzAh+e5Kj9aKlIyjzh84gFEwPeC2NesXgvGNLU5FwJC1J9HCl0zAaK2XL4bKJgaV8RzRe9W/nBQClPTwaWApukQ0oOUUERnX0UjUabB83zwMICVSKJW8yBMwE4kUPN9eEGApG2jUq7wb33nmz8Ofc+89b3v+8jU6VNTI2MjKBTKmNLTozayUBJVdV1SSADZRAannXJ6o2GnVPmJdUNHmiQAAG1trTAMQ32vXDaktGBAsVBCKV+CW3Xw9PPPPfnt7/zbN44NHH6hta0NjuMg9ENICBi6AY1p0HUdhGlwqmV4vo90JoNavJlPZtQ2U9M1lCtlBEGEdCYJ2zRgaDrcmgNNM5S3204AVMJxFNiKQvk5s7lMsHXb5kHKNOzZtfs3H3j/B7fe+KYbr3z5pVd2DwweecwwDL+7uxeARKGQB4mbbe5FkERJxxV1mKNWrQEA7KSNfL4Az/OQsBMYHRuFZrL5X//W169/5PHHmGGaOPX0JXjg3gcwdcZUjIwMQddUwym4hGnZONJ/JHzxxWd3FMZGN60ZHes3LDawbdvGx/fvPzhu6DoII8ilc4AAipUy2jva0NzUhEKxiGw2h2KxCBF4qBQrIITFg9AInKt7kG0nVGMMFUHlh37DqkBi2QaXvBE1RjUGKVTcXUPRUic1x9c34qFjPebNMAwIojz8tH4/4VDD0Pogjqk/I3i9KVb3Px5f+4QS1JxarPjREEQclmVDCAmnWoXGdAweH365VvMLP/nRjzYm06lrE7Z95qrVq7Ujhw+jUqli3bqNmDZ9GsrlKgr5AgYGjoBQhmQyAd3Q8YUvfBG6xoI7/3RnWSN0klo1WZM1WZM1WZP199rwAhSGzpBIJMF5BJ3pirhJKPwgQtmrgvMImXQKxVKBT5vZ033Te981b9rU6WhONmPr1s3INuWgEQPjxQlMFCeQyaRxdOAo7rv7Prz5LTeiVKqgf+9RvO3Nb7WefemF0ppX19Ucoxav6ggsU+Us2oYNKQT80IeQAozo8ZZVQIQ8jj8RACiIRkGlihQSUkAIpoiuUqoYH0oVxZbEW99486gktFIRoDmv97wnNg1SSY9JDMzRYjmo5PxEzi1Vq2e1RZaqaYolmPWtcKOli8OANabovEHkIfQCCKjMSqK0wIh5wyq6qA67IjRuHICIh+CI4sdDIAVR0sFYmiliHzAFQRiE8F0PhmGAMhVtU66UEYUCkBynnrasOZVKWIVCAfmxIsqeg8ziTOOpUN+/jPfTSp5YB+GQk/4XsYdWxlt3pmlxFBDinFwCUzfVxjzertN4AMFjj2/EI7Q0tZ0UM4L4byUYHRtBKpGC5wXwAw+pZAp9Bw/Bsizs3btXFiYK8m1vexs5Y8XKOCQJ2Lhp69C999/75E9/8uOH9uw7sEln2mClUuG6riGRzIBCg2EZiHiEMOKwTC3eAOkqs1fXYRsahodGoOs6mlqawAjD2MQ4tDjKhwchRCgAJqDrKYRBGA9AKHw/gBQSuVwOnuegWCpBiAimYcJzXUhCoJkMnhuiVCrHm1MN0DQEfgiqEdh2AmGoYECS1ocyaERvSbUMA4sHCyImxGqaIpsDKrtWRLwR+QKqXq8G/1oKNWACIAiHX/NAQGAmLAViExKu68H3AyQSNihjCHmE7p4elEulwte/+Y2v1xyv/I1/+8YX2po7Uj73MTQ8gt/96te4+vVXYdGiJfD9AKZhwHM9ECqRSCQb11g6rcURWBp0S4OQHJZpxzJr1ex6no9tW7dh1uyZGDk+gZ27dw5u3rLljp/efvvtlUrpUE+vaiiDIESt4iCRtAACJCwLYchRKdeUNUA3Ysm22lZn0gqo5lZdGJoJShiiSCD0fSRTCXi+gJBqKw6qrlFNYzC0BFzPwUR+DNVqJfY5q+tz564dW3Z9YfsWpmtobWuH53kolvKwTBuWbSMMQ3i+C11TDAKmMYArSwInAqlkBp7rQwjE8VQMrluzXn/Djdd71Wj+l7/6r/5dd/3ZBIArr70KYyOjcJ0qembPguf5sAwTUkr84Pvf2/DKy2vuTSSS6zKZHDnzzPPLE+MTRR75gKFD1804Do0gk8lAowx9h/tgJxLQqlUll48EJiZGwTTaULsY8f2LRxGkBHTDAKVUkb+h7qd1iJ/gKpaocX+Dek1VdrkaZNYj2gCVOd5Qb8T3z/q2WAge20RO2EikFPH9I6Y0CzWsAiEIgkB513mkGmXBQYmm0qEFgee5kJAwLAuWZQnfc7YfG6gOpjLJPV2dPZe+7qqrVk7t7lm8e8fu1L4De3HlVVfDoBY+/6XPwbQNkEjFM3FEePqpZ0ar5eqzI6PDh9nJFpDJmqzJmqzJmqzJ+vtqeGtODYRQ9PR0wXVc1Ko1BavKZmDqJhgBpIigMYLx8RHnwkvO7b3ggv+nvfeOuuw6z/ue3c45996vTkcHAbCIEqsaKSqkJVmFVnUsK0ocJ7blRPHKshy6LCVrKZKsxLGUxI7tuNCyZLmosIkFJEFRpCiKHSJAEB0YTANmMMBg2vd9t5yy9353/njfve8dJf8kWcnCH3draQma+eq955zZ736e5/d8z2uUsfjQ+z+EX/31X8d3vv0tMNHh7le9ElcOruKv/uVX4MKFZ7G5vYPJxg6MMXjbW78Du7vH45NP/MvTbb9YjEa7GHyHcT1BXTeAVuiGDtYajCYjTA9mUGAbXYycd5MALasBMTLsSGvoxFZckkGTiGT4NEJ7zSoriuKbFPH8K/bS5RxAohqzzRiUZDCWwSFRUV65LzIhEOf/SKzMSlRnEnUNiXtwjbJoqhE637EFWza8WmkoyaIlkkE48jAJIhAgdOb8cyhYxQpgTJHtkooPKRIFWKfR+R6UEpyzGBYeQ9tD1TykN3V1WAEVcQwP5CMmMozwvjSDY1AsiDFGdH4AkigwMcI5B2MNumFA23bY2dxig7miMgCWeiadkKARIzBvW4AIo7qC91EGCgdrDSIRLl58AU1dcbacLL74pS+mO+65HYtFp/YOZthSCj/x539SKQ3V9x6PPPrEC7/5m7/15Qce/ONPPvz1r33+2tVrz2xu7wSjDDa3NrC9uYWD/QNow1291jLVeWt7B03TYNF1nGX1A4xt0PUDmroClMbBwR60NtiYjDGbzbG/t4et7W2M6hrB9+i7DoMPfFjkHPphQAwB2CcQuA/ZaMNwpKGDMUbI4lxFo5QBRb7GkopAsoghIlGEtTJgU2BoDzj3qDQPD0McQBRhjcNktIkhDHzNJA0/sBqmjUXwA4JnW2gYWv5zbRBD5F7YSEzGNfy9o5B2nbM8ZCuw+ksRSAmj0Rg7W7uLd7/7n/6Ds+effeGn/+pP/zdv+Y5ve+PHPvpxo6XH++y5szh67Biij5jPpyBEHG9G4oYgMb2qUlOjlAblDlYZih9+9Ov46lcfaB95+JHTF56/+NkPfeQjHzl//vyXkoqL4yeO4vr165hMNlDXDSJdwxCMvHYEZ5uSmZ+MGqSU0PcdXFXB9wNmsym89zh2/Bj29g+gk4KtKozGYyzaFov5HMYauMpiuneA0XiMFBMSKSEoW64Xmk8RQ8Lu7i6stQiRgUldy4OV957dGynyz1bXoCGhqSuYmsnc2RY/hICUAnZ3DmE2n+NVr/+m7/+FX/zv/+K/+7Vf2/6ut31LcCngIx/8ML7/ne/Eo488ikOHd3C3emWBmv3Sz/8Pe5//wpcefMXdr/ja1u6hr+xs7uCBrz6oHv76I6kZTWAd0/OHbsB0foCmcrjl1ldhNpuzWpr48DDEwKR+P8DHAJUSPCUh0AtcL8mASzdCqpRScFWFEPgQiEIqEDOG/DHITik+mFutKuK+aKAfBihIDVsifo6A30siknuIifDWGHSxRxg8nKuWZ3EE1DXXtdnKISVCO29RVzW7kgCEgWvMtFVX+77/9IXnzj76j//Xf/DKw0eOft+Rw0fe6Yfw6i99/ov1pauXMdncQAjidNgYAarBB3/3/Z9ytvpEirjslV/vJtZrvdZrvdZrvV6uAy/X/BDm8wV6qcfY2W0QKeJgtg+VktggWVk6dujYG1949kU3b3u8/Xu+G9/w+jdgY2MMkxQULHYPbaHWDdqW8Na3vhVf/9ojmM8O0oljNysf44UP3/uRrxqrEShAKY35Yo5FO0dVV9xLSgEmV1Ykps6SqD6KVBl8k2RbOe6qQInV0bxJigT5GlxdZKRbN4n8qOTvy2ZMQRQHViFzZSzlTKpmQqhU6CJPyFob/iHk5yzlsBk4qpV0BCeE5LExmsBUBovFnAnUSQNJgcSuB8krAok3i4mBRa6qEL3Ar0isxDojUJk87SoDa2oQEfqhL8NS09TY2b4Ji3aBa9euYmd391gz3sDBwSUcP3EcN7ubeLOJlVYiAcT0w8ADOBRiTHCWYTSz6QI7OzswGnDaQDeNqDEeMOBeV3Uj2DmGAIrAqHacQVYak5phRF3oceXKVdx33+9hMZ9jMtnAPa98JQ5td3jlq1+lNjY2MZlMsLtzGItZ73/tV//tQ2cunv78pz/1mT++9MLFRy5feuFU13Whqkc4fuIWbG5uYeg6zOZT+N7DWAMfAjY3NgEkzMIUfuAKGK2BQBGBCNPpFNFHVJXha5SAqIHxqELTJFD08N5jPBohOofed9BWYRginHagGEHgvGJKQO/nUk0F1E1TrOc+BMQQMGrYOjvrFzCGzfWD92hqJqe3ixbKcCbXU0TlKqSkGEhmjOTGFSIFeD+UvGsCoR6N+PNl8I3Ri2tAl3vGWgOlLRYLvn65VoZz3Vob9MOApmnQjGq08w4XLj6P8WSMzc0tEBF99CMf+s2vfOlLX/yOb3/LX/jRP/uj//Hf/tm/89q9a3u4cuUKfD/gxRdexGRzA9YZPP7447j7nldKbRMwnbXY2GikxotQVQ778xk+/0efx4uXLs1q506ePXPm0+973wfunS6mD3ofuso5OKMx25+BEtC2HRaLFs5Vov5FORQADBSUNtjb34PRFru7h9C3LRZtK4AlYDFvoZVC73tsjiZ4/sJFbG5uAOMxKBKmewegIWK/24NROQcfQKljuj2X0GI+n0NZjb5tMR6PUNc1QiSGtgW/tKYHdja0i56VyECoXA3nNEbjDdTOomsXuH7t8i3/+jd/4680xr36bW9/K378x/4j+8/+0f+O+z51H07cfBPe/va3w9UW8/kco9EEjzz6GJ489dTFm2+99eT21vbJo4eP44UXX8DVy5eTkuGwqSqAEtq2hYbCMHgcPXII5hu/Aeefu4Ch7xH8gIODKR/IUVralCmW4AeAAtbLZHZltBxMMm8g+AAWcMXWLoeEBIUQojAIxE6SMQnyfM5OZxRYFcmzXIPyQabY3ru+kwMSwuB7vs4F8pb/rej7DhpcR2aMQd2MMJ93iIioGgtlNLpFNyz6cB5Kne8pPro33f/s4aOHvvehrz/49ptvu/0Nb3rjG93ZM6dx/vwFdG0PY8zpytUfAnCqbhwU3Ho3sV7rtV7rtV7r9XIdeKvGYugHHOwfoKobAEw61krj1ptuwfVr10BgOmft6jvvvO2ub7/84mU8fvJJ/Id//sdx02tewxvHRYuXnr+Ekasx21vg4PoUn/30H+DEzTdje3cbN992Ox566Gun2/bg1ObmLltejQGFhMV8jqrhPlHfDQg903E9MeilMgY+MogGeaiEltocIKUghOS0JCGJtS7Tg5XSgCEZastoxxZoqSWCKKyUiKtbFA+dWvPXyx+fc7UxRskas2LgDA9JEHI079x4iE4AZz+jl37ZVDDFucvXWgMkzUOYUrBWwwvUK4aImH/3Yk1NQFKw1gnpmIfrGAKcstgYT7DoF+j7HqNmjK7rAQCvfOU37NS1wW133HzDxZCrnFIiaMkL930P5xzqusbmxkQ2uwkbGxPolcahvh/QjCooa3ioyxpeVlxA6IYOTteonGPboo9QjkFkja2hIjCfzfFD73wnzp59FrWuULkad9x+O55++ln/uc998fTpU8888uSTT3/uA+9/3++RptMpcq72xE23oO8G+OChTcLzF57DxmQCrQ0CdXDawnde7KRsKR0GD6K+XA4+RBghzBIUxpMai3mH6D3msxma0QiwCpEI+9N9GGNhjEG/aFlB6hc83GiFvmuhFBPGreV7jPwA61glq5sa0Wh4H2E02/CNMWIF5YOPYegBRXC6Qt2M0PYdD0yGld4odGettGTwheoNElhVkGHXgOu29fL+IO6N7vu+HPowJVchpojO97CKlbRF10OnxLniaDGdzTAeT3DzzbcCLygcXN87e+/H7/1lj/CAp+GH+vnwxu9829vuObx9+NjQdappaigNvHTlKiabmzhx/DgO9g8wnS5w+twB/uhznwMloptPnIj3f+X+BUV18vnzF/7g4Ycf+tip0ycftNZ2J266Cfv7B+j6BarKYd7OUVc1yEdoa7C1tY22baFUQFM5DEMPo1k910YjRI97XvVKjEcNHrj/ARjnUCVg0S+goGGUQt92AFgJHoYB2lgYY1FVFTbqCm3bwkcPP/QIyqNyDsZY9P0CdVUjBkJdN1BJo+1bhpv5ASlxFhoaiL0vh2SR2LbrKguAO5SrqsKVi5dxxx13ve0b73nNd73v/R/CK+68Ax947wfw2td9I/7cT/55bO1sYlQ3aBctNiYTXL56Fb/93vce3HzTzQ8/cP8ff/5gb+/F3e3DuHz5Ck6ePo1AAXXjQIkPDnd2ttEuOmztbGHRdtyHPB7h0otTBPJwtYWzDsMwoO8XABTG4zH6vmcrseJnGSixG0YsyjqJE6TtxDbNkZOSEYHmIRaESAy/gsAEM0U834tL+Bk7digt4yerxHEiEiI8P0cqV8N3A2IK8Ipfe6U5ktG4GvN2BuWNHOKx6h59RALgGgfrHBbz2eXZdP/TdVU/OW42P3vx+YvfOTs4+NPHjx9/c9cuMF/MX5gvuvdWVfXVEMK8amqMm2a9m1iv9Vqv9Vqv9Xq5DrxGW4wbi91DOyAktLMW58+fx8bWBrS1mIsa4n3AseNHX3nTzTfffez4Cdx8+20Yjcd4+LHHcezoMQydx/nzF7C5sYnHn34M5849g+3dHXzP9343FotBvfrVr8C/ePc/fQJAu7G1gXa6QB8GbG5soGsXUMnAqISmGiHEge3AApvSzkCn3IurJGsL3kQlBljlTXv+vOzHVZrrhZJ03PL+TOU5lJXHGADZT1nnOD+WIP2rCVrbJY1ZAFqKWMngsl2AElNykWRw0bmDl8ogaYyB7wfOFq9s7viQQb5HCqKmErQx5b8TBMaC0uFTNnPWOPhhQKBOlA1gY7zB71vwABJCDJC/QtfNLwIIp08/p5tRo6d7e7j9ztsxHjf8sSmBiA8d6qaCkZxw/p7aKNTGcQWSUK3bdoG6dmwDx/9Fni1xntdaixSTWB8t5rMWV/f2cPnSZbp+7XL6kR/+M+aO2+7AHXfciTOnzw0PPfTw6fs+9skvfujeD3/qiScfv392ML2wsTmJu4d3QDFhPKkxX7S4fJkztjEGzBfEiniMAmrSAiBqMPQ9/JCYvEwR/cDv9Wg0xggabbsAJcJ4NMZkY4y+9ahdBWNYeYtEIIoI0WMYerZ2ah4qlVIwVg5HVqqyElGh3JJY5IP3kh1leJlS4J5cyXMztZltxj4GmDDwJr+89wQjtVu5XxbS1azAcLTQeyYlExXoFVc7OZDAhXgAJ877WgtYAy0WU2jAKC3VYRHjkZB6Cbh+7Rr2cI0Px4zB4Z2j4cknnvq9B/74gU83rjrxnt/5zXte+cpXf8MtN9/yGmPtHZtb2yde+03ftPX+93xg9KrXvGrz8ccfH1tt1Lnnzito7F947rmn2649v5jPTr34wqU/euHii/cPYZjXVYNhGDA92Bc1egQkwubWJnzvESPBOofpdF+o7fx6NHWDunKYd63AvhS+8qUv86xPCXVfoapr9N2AhIjG1XB1A2sNmqZBjISu69A0DUOPfIAPPUIgOMmqL+YLbGxswlkLH3J2NCLFhFHdQGsetDU0+o77dgcidH2Pm2+5DfPZFPsHBwzGUnwAEWNAQjrxrnf9jf9se3t3c2d7C33X4fxLL+AHf+SHMBo1JbIxHo1w6cVLeM/73otrL11+8qVLlz/63HMXnqyqCuefewHPnT8HUhHGCbipH+CHgN3dHWxsjFE5i689+DWu8omxDPvW8jOw73sY6zhzLx23Cvm5iOJGSURlsM0kfaboU6kRgzwnJPTPlUiQmiGh6/Ntk7i7WwbbbJMutURIYqFeWqBzJRuQMMReDnmY1xC9VLMBaGNgRkTfwdWOIYSJuK+5HqGyBn3wfACCFHzvnz2IBy9Zox/RWn/9tjtu++tK67daa/+4qux9Xddeq+oGg2fXx3qt13qt13qt13q9TAde8D4Di0Ur9lWDo8eOYTqb4eKlixiPaqQYcW3vir7lttfffuzEiZ3R9gTHjh4BAHz84/fim17zOvzwD/8QbrnlOJ547An82r/+Ndx860141avvwcmnT+Kzn/ksff2hB6/P5vOHALb/+TBgc2MiKhYQfECgiPGogR906ValxPTiECJvnopQIL28maKce29l6ExFWWSqMvKAm2EpMm8aGVSCWA1BuTpHiYLAZOZceVH+TivODkZCPwwMR9G8VaJAiIiwOkOEOBcbBl+gT9wJDFFzeWiKPkJrw9TfEKSrM/GgogxPmyYVpUNprjIK3sNo3qiHFNC3PbqhZzCWVmjqBovFvFQcvf+97//IpcsvnX7oaw9XJ04ce01YDD/5d/7W37rnW976bfwt2EPLOV3rYOR1J6Es9yEiRUJdO1aorMWx48dYzYoJxqil9FvaRFiJ5h5N/pjTz5zGpz/9GWoXrd7Y2MQr7n6FObR9dP6hD3307LnnTn/l/e/73U889dTTX9zb27u0tb2DO269DfHIYVx56SVMD/ZRNyMc7A+AVvDewxreaDdVA6M128atRlM1GAYP67ivOMQBw9Bj1IyQKMFHzkCnyIMEISKEgPmsRV1VbOGeTxFCzgkqGGsRew9jpaM08kAwGo14IPYBVe1Q1RWrqBbouw4KOSKQkCiUQxgtFVNKsSVfQUFbKwc2UQYzVtZi8NjZ2gFRxGwx5/siKOkGNgXGxmc+nFXXWsHaGikRAsVCyA0hAMTuAD5k0ZIr5qGm7zsYbVE3NTs9KKAZNRwJ0FLyJbVbe9f3QDGEo4cOXbh+be/Cv/3Nf/9ZZyscPnToUF1VR44cO7axt7e/efTo0bsOHz322sO7hzbPnju7f/jw4YsXL7z47MbG6IW9vf3zZ86cemFjspEaXWNjMoaPA0JIaOc9QvS46aabYLTG8xefx3gygbMWXT9HU7OLISUmIO8dHHBPqwxVVhvYqgIRxweGoZfqJs00ciJQkjqwkFC7BjEQUvI8kBoHqCiOEQMfPSu5VQ1NHp309SrNw1aIfDigDF+fi8UCzWgEYx32r11DUgqHdg9h0oyw6BgQtnf9qv5P/rO/+FN/42/8zPfd+5GP4XOf+UP8+F/8cfz4f/TX0DQ19q7vYWd3B2dOncbTzzyF9773A/SaV7/yufls/tuf/tQf3Hv46GH/0tUrWLRTKKugCdylvLmJ2XSO2XyBo0cdvO8Rid0pe/t7OHL0CMaTMfbO7sMqh67roNkWgBiDWLEVbMVuksF7vkaIn08ELS6CFaU2qeUhpJDucwSFldu4rBpaOSRb1s7xX2qdHTh8aJhrucpnaiY1a8WHorYy8D4gBsJkPEYITC4fbXJeOpFC6AfuJh+P4OoK1HNWOPQBQwgY1RXqpkYffNv1w7Px2pVLX/nyXve6173+7xw9euhN93/pj7/dqPlCWfN0t+gW663Eeq3Xeq3Xeq3Xy3eZKOqTMQ5bG1twlUOKCZuTDdR1hbbtkGJCVdWj17/+DT961x13vWOyMcZ8toAbTXDr8ePYbEboux7T6RyLWYfbb7kVp089C+dGePHFF7C1OQ5Hjx79/UceffQ9Z86cumwdA4q00ZhNZ2w3zkrSwIqkrZyoDqIsyEZSKcm7ymCqDUpVDg8KovZqJfU4SuC2eSjmTFkeknPNrhZVgoQiyrMzlX4e5xybdJWCSgpErJrGEIR5lUoNUVKA1Zwl08bwz0gyxCi2LyrFgB5tDW+ySyYuVzGx4mO05UogzRUmbIDmnzdbnbl+iVW8TOBlsBZnf4ehx3Q2xaFDh7G1uYWnTz595cGvPvDEfDZ/9MzJs5+vazf50T/7Y3/q2PFjmjJtGhpJFJVSMSIqL+dEpS84se05kSrduPk15fomBoNRTGjnLYZuwIsvvYCXXnoRN990M3YP76qd7cNXY0xf/v1PffK3/t7f/3v/8Nd/7Vf/wR/+wR/+zuWXrjyxtbUxh1KwBti/fpXrmhIPpNmcbqzBeDzCqGkQKLLNkgjD0GMynsDLhtcPA3d0WgtrHZq6LiC0dtECOmE0HiGEgK7t0PUdIiX0fcs2YZ0HwVRqd/ggxsh2nu2VTvLCRtTTru2gkirXSd7oF+eBHMLw2x6gdEIzGiMGVtl1HhoUXyfWOlhj0A8923VD4N7j7GygBBJHgLFMGVfEToUQOReutSpDhYaCNjxoB8/DjdMWysi9ohSIglRUEUZNjd73GE82MBlNOOs6naFdLEAxYLFYoKpGqA07DLq+awcfrs4X7Qsx0bNPP/3E15+/cPHLp5555ovX965//uRTT33huYvnnnjuuWef398/mO7s7sIZi67t4SoLV9c4mM2xtbkFHwYQAXt717kWzFnMFzN+f2OAztVkSg6pknT5aoUYI7Y2uVvYBx7YMl23rkfwgwfljKvmgSxnTYeBIxWHdw9DJ67aqasG/dDzSx75uVG5ip0DfYdIAdoY1K6CtQbDMBT7bj8MAADnHEcSNHDl8iXsHjr09t/49X/9i8eOHj1y9epl3POqu3HmzBncduJmHD5yBMryff/CxYv4xH2fwDe/6Vum505d+PV77/3YP3nLd3zHnALh2vUrqEeOM7rHjmNjtIn9/T203QK7O4cQibC1vYOua3H48GFAAdf3rmExX8AHQtOwyyY/E4FUeAcU+XpV2nD9GhGMsSUKwTlqIbwrLTETdtqo7BDRCiqLxPmZJ6djRvHzIwFwljPSpdJMDoKIxNkiNWkUSR7vAk8w/HxORNjd2YE2Bl3XCROCn/GVOHkU+67RtS2GGKGURuUY5BbB75U1CgoqtO3inDNm79ixo2/aPXTo+0fjcer6/upstv8SFOgXfuHn1zuK9Vqv9Vqv9Vqvl6PCu7E54Sxqiuh9y7Ue9Qa01pjPriP4gHoywahuxt/9Pd979+bmJi48dx7nL1zAm7/1W/Atb34T3v/b78f2oS2cuOkW3HbnHTh27BCefPppXLm+h5cuvUSbGxtf/uSnfu83v/bQwyfr0ZhVtEjo2h51XUNry9kqzWqMDwEREIWTeNgjISAlHqCY7JmgkhG4SYJKeRxUPPgmVgK0lg2v2DpZVZPuW4qlaihb5pw1bCMmzjMDCtGH8nFJs2Kch2NrDRQppriC87/WsQJIFJbqA0jAV5ptpjHCWgtrLDxxhjdRQiRa2WxK7FK+LmfWAGVMUVCaUYMQI4a+hzGWu3Atb/6894hxQF03GI1G6LsBTdXA1Q7WaRw+djgc7M8+cOXK1e8D8A4j8Kq8tL6hiKjULWltyp+4qip5OsQMp+HP9T5i0bZAIoyaMarGYXN3A1evXWk/8clPfvaTn/m9Tz/y9Ufu7/v45N7etWtt3+HIsSOY7c8wasZYtAuACDFx/2k3DIgp4djxm2CUxrX9a2xpjBEHLedmiQKiIlhnEFNCN7SwxmDUjDDd9wJ9Srh87Rr3BGuDSAEICf1UhhLFSrSygJVKHhFhEYVQnSnhJMqwMQZ+GEDEhxpd20lnLitTigAvcDKtNddcEaC1RVIkBylYHiLEBEJgK7NVoowbOGvQdp04AQYhPptlh3IiKYPWYrNn1TIMQdRewyCt/D9aIYQAYzSqqkLwHjFFJJ9Y0ZZoPIHQ1BUWiwVCDLh27TJG9ZiBURpoRg1ACfN5B2MPMB41sK2DrixG4xH2rl3BeLKBphlhvjiYaW1mu24HQXm+R4xGiAHtYgFjHOqmwbVrexhNxrBWY7o4QNM00HJdO1vB+4BEqhxwkdhn66pG13UIwXNcQGywZTj2ARvjDXjfI2mg9x1i5OHOWH4d/OD5tYmB7cY+4GB/WtwmMXqJNeT3lWBIwxiNEPh6ICJEyf2zvZdgKwdjamxubCApYDafwhgN6+z23/rbf+s//8bXvvauhx/8Oh5/+CG8cPUKtg8dxaNPPIF7XvUqhsEB2N+/jrvvuhvz6fyL/+bf/fq/mHftfH/vKs6ePcuW3WQl31+haweMJ5uom4ZdCrXFlWuXMdufIsWI3g8Yev5fbQyms32OP4iTJZEWFp9ClOx9PgQjee4yXkHLsyrXxyX5/w0oxQJMywc4yyeLksOxJOLwsuebVvp583WcwGp9kqHWCOE7JuJnxUDs5kjA9esHAjTkLmAIEDEGQqSIieMavl4PsNbAe4+mmQA+wZNnNwdpbGxOUDd19+xz5z5lrdn+wR/60Xd99g//8NuOHT369GIxv+iDP7/eTqzXeq3Xeq3Xer1MFd7J5gQKGkPfIYSIIXLPbVU5zOdzGMs5y0OHDh37cz/2Z//To4eP3AkVsXf9Ko7uHsFDDz8O7Rx+8IfeCRBw6cVLOHvuFOp6hGdOPYO969eefPyRx/7Vk08+ea91rqXICpfSCk01YpLt0JcOYGczXEVJpi0yZMgYhOCRUmK1VWlRU3kw1EoLy0qooMUrx7ROAQ/Dmqw6cG8pk595JVEn2PKsyhAMgKthxJ6cB91MYdbKIEbe3FVVzb25IZTsWSJWB1mhFgK1UlJ/JENlAUYlGZ5YIc71NSHGUhHDGWRRChUTeLNaku2ECQpVXSESb+65GqfDdDbF4SO72No+hM2NTSwWc5x65tzVx08+efXb3/bWW5Bw/Pr1fTseb0AZtVRs5HtmxadAvwQwo4tartniS0AYuLKkriuMJ2PM284/8OCDz3zy9z/5wd957+/88i/+3V/6x1cvX/0MJTo/my/a3Z3DmO1NEULA9GCK6D1GowbGWcRIaLsOSIm7fRN3+87mM742fACIBxXjrOQHFfzA1ngeXjSsqziHmwgUA2drI1soSbo9tdIwol5XVcV51xBRVW7pBgDbOrVh+FDugCYKgFJcW5OBOop/1pzhZRCSKzZoJcCqGCOMsSv5cZTDHM7vSmUPJWhjpKuUAHAtlzGWbahqeahDMbL6q6XuKvGwbYwumUxtDbsqrGWrfZJ+X7H+xxj4AMcTvOd7cNSMoY1mSq5EEow2UIlJxlo6i4eh52owIvhuKIq8tVyr1XZtgcoZpVDXNWJIAjriOEPT1DCG89XBe7T9QuIMGtY5GPCzoaprPgSCWj5TXFXI00rxz0uJijXWB66TGvpBVGBCSuCIg/TV8mGAZQDa4Hk4M8sBLFKEUQqucoWAnTkAxlg0tSiGIbJLgAh10+D4iROwhg+KLl9+Cf/B2//Uj//qu//l39Raj168fDEtDqZqPuvwN//mu3D3q16F6cEMKUU4Z/DSlSu48/Y7T/3K//wrv/zcxef+eOfQNs5fuIBFu4BxFoDGZLyJ2f4Ui3aBZjLCZHMTIQzwPgjgi63WTdWgakYMPrN8XTQjziD3fb/yDNOSTZffHXHJSigP0MxEI8nmahjHzggtNW48tNLyKaKxtEEvZ2D+GsSDsMrPdwVUzpbX3hiLSkBw+XCQUkHmccWWBlxdyYFngjUG0Px+xRjLwSL3uUf46OGqCnXToF8wvK1U4yW0PvpLd9x5x/Mnnz753O7OziwlivPZ7OLP/dzPpfWWYr3Wa73Wa73W62Wo8M4PFjDKwFUjOGfhmgqz6YwhMc5gc2MD5BPqujry2JOPHd7d2YJrNDa3NjHdX+B973svfuq/+Cl88vc/iztuvwWBErYPH8YTTz2DZ8+ciwcH1x/0MXzx0O6h6fX966XytutadIsFrK24g5bAmTKjoQyAEJFSth9rxLRiHaUoKpyYmRN31XL+VCNpgAJv+jXk5D+hUGiTAIVirgKS/hytFJS2SzBKWubPtDLy+alYnpNYpBlCxQcFFJejdkpSSSQU05Q4I5iDa1r+M5OgKQ+48nWsdUWlBQqjizNz8nFasxqoUoKSIQYpwVjH1SApMr1XKRASRpMGSapBnK2ha4MTtxzFyWee/vhP//R/9Vhoh28Lw/ATv/w///KPfN/3fa9dKQnhXG8iVlfK6yqWcQIrW5F/F6sVlOUs46lTZy9+8AMf/sozp575+Fcf+Monzpw588LO7hHceuvtCH7AbNZiOt3HuTNn0TQNalehqceo6graGDgYuA0L7wMoEsIQcW16HVorVLVDO58jKSO9sTxkdV0LZy3atkXlamgYPsBxBinEUm3FBxOmWDZ1HgQTV/u0XVsOGWIMxYJJlFBXNXz0ywwuj3P8PgnN1hjABwISwWiLxtUY/IC+F2s05Pohfl8jFCpn4QePmIhtndqg9518TYUoBypOKorIsyMghiAXlUJKCuNRg67rCplcW8AngoXOTVliNVWwhvPVbd/C2RpWa4SVQbvrelgZqL0fCmBrtWonBI/JZCLuBY/ZdApjFEbVGMPgkRTQdh2apkblKrSRMB6PMfgOChrBe8k1M83X9x7WGMym0yW8iADnqjKctt0cRlkYaxG8L4dRWpniRojEZOumrmUQE4q12MQBoBmN0C4WsM5x76z3qEZjdoCkxFlfbQQQFuGHyPefYNuypbf3fGiytb2Jru0RQkTf+ZJln4zH8J5Jz6dPncTW5haj34y9+yd/8j/+KWvN7lNPn8LDX/8avue7/jS+f5vhbM5oTMYjOYDTeObMuSfu+8h9v/zAQw99dHfnEEKKnD2dVPJaynPDaIybEfq2BVLCfNEihoC6qtF2c66CC5zd5teUgXpD57mvVnM9HAS6xpAyLR+nYJ2BSqocEGity0FJtjXHwC4FayxiCiDpHl+eNMo7levm8ulkeZKqcvBIIFFqFazjw6HBhwK+Sklo9cRuCGsMjHNM3FcahCRd6C0fUAXCQH05MDXGwlWW/y0KEVbl7+GRfA+lFNpFf/GTn/j9jy+ms63ZbFb1fd8PfbcedtdrvdZrvdZrvV6uA28IHqQTDu8cQeUqXH7pshA0IxIp9H2Ltm9x9NiRO3/0P/yRW/tZi0svXcQ7/8yP4MKz5/Ez/83PYFyPMZ0dYDJuUNkKT52+iCMnjuIHfuCdlz/xiU98+bHHnjjnnOXTdDAp9vbbb8Pe3gEW84XYgi0oRQwhsrolA6rRlqt+JLObBEyVlNiYFStk2eKcTbdas60ZCTBalYwvkeTGtNjx8pZKqMEhBoEHySaLULp1cs6SLbs8HGmlEDwrc0hgWquRAYqkl9JYaK0RI9cecbaYe1ohii5IBqmkpMaXeHhUGtbYQnpWKUFpI3ZrUT2IVW/++ZSoFxY+BFjNqt3Q9yClpTO2R/SEswcH2NqcoKkq1JWjRx/6+lln67N3veL204v59C4Ab+T9JysjIXCOM1ke3pS8fkRJNv5KwFHAMITw8MMPf/Xd/+LdH/vCl7746fl0/vhtt98yv3btOqqqxtWrl7HZTzBbLJBUQu0qzhhvbaBb9Kicg60Mht5jd2cbV69dxXw+B8WI8XiMycYEi3YGpITRaIJFt4D3A7p+huiZ0hxIMt1CeFVKIfoB1jgACrbS8D4IiIzzqcnwhjtQZFUoRpBArWKIS9+A1iV7rUW1WxLEE3ewGn5/lDacH6Qonc8r16H0ixrDm/EYA/ok8DIYxLisHqIUi62dD2w8jLIM9FGqQMaQgDCEUjmEJNU8IXJtlajQSim22QfOYRZlTBEf5mgebJx2bEOlCFdVfG0GL1EBVsibUQPvOYPfDy2sla5la/i9GQY0rkaS33PezrnPFglKJThjYFWFKNl4zhwzYd06Hqozic5ahxA56681d3o7lenqCbayoEBleFJKwQ8BMSw4DiDwI0QCJVYfm8oBozG8H1htthX6MMBqC2sc15+RZ7eJtgxok7adGNkenoIq9Wgh5AEsiVK9BGVxhzJXHnVdj/lihu/9/h/44W9587e847HHT8Jpg4ceelwdv/lmfPs3fxu0VggxQpkEqy2+cP8Xn33Xz/zMz734wksf2trdRt2McfXiJUQC3LgGYoIPLaZti8nGBHXDtvT5fIah77C1tQOKQYjUI1Bk4rTSJDEShRAGbDSbMFqjX/SsaGt2JKSYK9HkaSvZ9KzKIjHDIHe3548L4g7Iwy2Qe86zQpxNzuIekY/LPek5by5niACAQF7uX7aYl89V2d5Och2LhVophgwCqCuHPg5omhGM1pjLv0WJGDDXKwWrDbsBwK89HyIGGobuKgyuaujiJlmv9Vqv9Vqv9Vqvl+nAO9nYAkWP6cE+EgG7hw9BKeDq1Stsmw0EpRNe/ZpX3v3m179h5+MfvQ+T8RbOnXsOn/rUp/Fd3/3d+MZvejUODg7wb37j3+Kuu+7GEyefhrX13uVLl9576cqlz3ZdN+96xZtQk+Csw8H+jAdaq9H3A5y2IAIqUyFqQt91MJUMepILXVb5qAKIUmDrMYfMiO3KYaWiCJylW+KdUbKOLAeoMggjJMljalGOpVpD25IPTJFk2GaqpzIG2lCh6WroUhuitOZNNcViz8sbN6U5s8h2WhmAtOFBx2jZpHtWHa0BpcDWYbG8qkRFfSGp+GC4E6uvIXCXrhLrN9N9A3Rq0HcDjGE4zZUrVxACYffwLt7w+jegXbS4cvXKw0+cPPmxHwNeRyGaYRiEUmvgDFfh+IGHQGs17Erud+/g2rV/+A//8acf+tpDnzh39txnz549e27n0A4UEp579hzafoC1FpubYzhjceTIYWit0bUdYoxoFy2aUYPZbI44i0gxYj6fYjHvsLExRtAa7WKBwbPCuAg9qiqxpVk6dLWRwwlheIUQ0Ag92VZjprzmS4AirBwOKDmoIMVqFQXOtjMHilUua7K9MQtR8mfEwwKr3/I+EyFGYlstRX6dEmfSY8oDMmRglS7cfJ3JQU4kwhCWXblKsSUYEUJgVuCxnv88hih/zDRqo6SDWmBuVVXxAYVA0ELkj0+K4XVB7Lh5iLDWSi8xW+izjVRbtksPvkflGiHhBtjGwVrLA5pSQITAnBys48xttknXoqRppRHCAK1cAcFxu43mryNUdqMdDznBizLP1mOtVYkBpERM4Y0BdVWxmyMxFZwowpgKWmm4yqFrO7iKs6D7+1M4x+6OkCKs1YghK4WaB2EZpPJAp61G8BEhLeML3AmrOIdsbVEZk3SZh+i5qgzA5uYmZtN9TCaTm//7n//5P//Gb36jfv78eVRVhb/wF/4ijt90HBub28w0iBEREfv9Pn7tV3/1fWEYPnR4d5fdA5RQWYtKV6CBEELA4D2qykARIQ4Rve8RIx9szGYHMJoBW5xzpgIO1JoZCRGcvWf3TIRKpoCjmN5skFTk5xfkGk6J1XAt9xF52GRRVw3b2/2A7H1etrLJA1nxwZpWmrPsKTIAD1J7JF3rWltoBcQUuRZMKRiJBxipREuJxGnN3yd6ti1H6Tsn8AGlUnyQlCgx7E6iMST3bAwBBEIfPKqq5h5r+Xeo7VpEebZba2Bttd5NrNd6rdd6rdd6vVwH3vGkRt8CQzfAVRWs1pgezJESsLm1AWMcDmYzc/zYsdtPnzmV7nrlXeqWm2/HZz7zGfjYwjjC/sEBunaOw4eP4PNf/CI+8P73n9y7uvcb24e3PhwpPWMc5/XYupmgk0EMxMRR59D3PQIFJA1WZ4ZBCLgBxjCpmGt3qSi1kEE3ZzmX2dJUsrYyBhZFLIlyC1pSQRnKIn8utFrI18zDdZKNExEPGMZocGMQD1rc/LIEYmX1A4rzkcUCmEnOFKG1g9Gq1H2wVTaxpRLA4AemL0sHptJKBtkg9Fip4LCsuDFtW35GpZFkKBuGnm3CTQM/9DBWI3Qe0Uf44KE1YKzG9GCKM6fPYndnG4tZ69/z2+/9l9/4Da+953ve8T0/OdmYcJ2IQqkDqSpbVBYk4ORTz5x//+9+4L4P3vvB333uufNfTT7tdd0Cd955O5JSaGct9vf3czwPSBqj8QTQABHYHhyY9J2tssF7WGMxDB4hBszbOfeBZvKuqJ6DZyKuSgZVU2OxmALg6hjrLAPS+lZyz3ItlGuFYTYEFEUzhiCgI1ZCjWzL2Q7LQxBvqBmCw9287BHO2W0G8RCMdQJHC9DKScetqPryuYX2rBSctUgmMeVZhumcD865RYi7Qct9QdHDVI5zvT1nFrM7IYo6r6SDlyJDlFhYE+upZkVbExWirga/FpChMiXunyWKrHpThDUWtav50GoYZBBYMMRI7nkKsRw+UeoEJ6e42zqKTT/xIGitFuuwBcXI9HhblWcBE7IV+n4orpC6sqDEALgon6MVMB6N+euGKEMKoJSBsQ5936HrB3ZFREIIkvP2A7QyaMYNnHWY+Rkr0KSkTkfDSmUXW1yZ6r2xtYn5dApCgrOVKLgJSDxIej8UIJY1Dsnw4cEwcJ720O6RI8eOHLpt6Du8cOECnnjsMbzyta/B7bfeUpwlzvEw99WvPPDU/V968D3OOVBI6PsBZ8+dgtIaW1s7mB4cwFiN7e1NAArd0CHEwBlnV2PhPVv1W1bjm2aEGBYFOsfXlZLDOL7+q4qruIa+59eSJFZSnrFMJs8Z2YQkBzrsahgGza6B5TGT3ANmmQuWexqJh9k8DiNRARFqLV+HVFGWlQzESPnAyDA/INe9KVaBkTjDbqzl62nwmPoDvs+DB3SCtkoy9VwjZ62BjwOsrVBVNeazBWfgLWfGtdISn2Da9nqt13qt13qt13q9PJdRyqCua1jnGFo1DNjcmsiAyhuJumnGP/ETP/GXv3r//XeGmOw9r74Lx285glfcdSdeePESjh07ht2NHZw4dgTvfve/eu6pk0/+45tOHP+dqqrOPvvss8k4LeqKwcZkUyiwAYuhRQwRWxubUFqjb1vJS/XQ0GXPA1FaoZZdsGxX1mW4hVQRZYoz53vlbyTXpVbriYDl4ADNuUBosSHKkKAZ/JRSZEsl6w2sXuRKF1EVVwolpUaICblKFA0FVvxWVepEQjhVBqREJY6RM8QpQWlWrQCNmKjU17CKZJcgpKwaicLE713eYPPAp0U17hc9gg9sUZSBuh5xb23btrh8+QpcZUExHtx3331fmWxsHv/2t3zr67MFMVuD5/NZ+vpjj5z99B985nP/6H/7R//qF//u3/3Fj3zkg7/xwsWLZ+56xd1d5Sos2gVSSvCef6eD/SkUFJqmwqLt0HUefd9iMZ+hbwcQCF23wGLRIpWBQAasxGqLcRZOhqAYA6AZKGW0KbU9xljOGmo+0MiAqqyQJlGYtGT+IkVAS/6boihMvEHXeXiVwuokBG2+rqS3l0gIxzWUOArye6UgirDkG/k65k26c44/LibOiMu1pJTirlywZT5ShFamWNgLPGwFZEWSa8xDPaUoTggjiptQsynwdZ9/TvkeuaIo26PrqmI6tZeMsuHhJFfTaMXxgnzVk8CAirWVeODg4ZigDA/bfJ2SAM7U8rDGWp5+ie/HGESVi6HYxVPg66iuaqnG0qxqE7+/SQ4QjDGoKq5Uy7lSrTLGSLLOkqVnC7PUFznHg56P6Acvr0lkkra1iD6U/mzI++C9Z0BXdnIQg720FkeF0Qy7il5U5iTPGn6vmrrGZKverOvxWz78ux+9641veh0uX7uEvYM9vPENbyoDr9Ya16/tdb/0C7/0Tx76+kMfbEajFFPE3sEebOVQVdKtGwNGoxFfc5p/10XbAgKxG4YBMRKqukHT1KCU0A0dUHKvVl4PKs8cZ53k3SOMEpjeSg3b8jkrR0lJQFNawhmJSfgqg6pWq4jE8q2NhrWOq9USCngwia/ZaAvnbAG1GaOXnueUoXASh0F26MgAr1R5/lkhZ1OUn08DznL1WxK1OqYIpkLw/ZuShh8GvjatRiQPZxy0NfCSa44h4OfXtUTrtV7rtV7rtV4vT4VXG4MQI7pFh8o5QAOzxQKL+QLjZoRAAYePHNl43Te97q7f+trX3B233Z6efvJJdfLpU/ju7/ounPjm23Dm7Dl89IP/HG9727dic3v86GjcfH68OblY2abU/LTeo6nGCJLzi8kDFojEVSGJeAOeYmRystGl5zGrtUgJKqEAYpawkyTKg9A2QVKvKr27WrodWZYtyiQPoazelY05uD9W9lGgwEpEVTu2uBFDU4zSkOINaGcQhoE3seBsLecjeVhTia2hCRFaW1hruT5D+oVzRyjXbMim3wiFmnjwtUJ5TnFJzs2KSBLQltJa4D2BrbNGw1QOfvBo5zMoZTAej5kYK2r7ELguZHdnF3v7B9DWoOt7aKUwnc6e//v/y9/7b3eObM5+7M/8uZ8Yb4x3277z16ZXH33Xz7zrw1/+whc+Pp8vHj/Y3++b0QhHjh1F8BHPnjsLYxycrbC3d8DU17pCM67hrBMAmUZdGQx+wNAN0Fpj8KxYUyIedENCoB6TZgRra3TBM2QHBBJidxIqtzIaiviwxFUOCopzlkkqp6CWm2S5pozmIWtJbc7VVnKNKMWbfsZ/L22rArZKOVMuf08x8nsqf8h5WyZBQxmBliVoTUIJd0hECL6HpLE5U6wUnGEytZfBOInyxcMulp2+McBaBwqRa5QynTnbqiOD4JjeDKjIA7IxYv9EFGsnE8/ZHswDd4o8PGZljinDcj/J/Rh8KIRyJt5SIaUbwzbYGEK+RaGFdjz0HeqmBpFGMoB1DsPQwXvOnTP9mmRIJDhrAKntyodNiQDvO3F8yGGT4WF5PpuXP4sUC2gMYoENA1//dVVnk4LUNbEaaquKr7l2wZnryIPN0PcSXyBUDQ/eXbuQnwsy1InrROzqueqrkKv7DnVd8TVpDfauXr/y5BNPPHn3XXe/40Mf/oD75m/5VvzYn/1xHBzMgZSwuTUBAPzCL/7dP/zIxz70gc3trXh9b59jH8ogRa7tggIm4w20i1YqqwLCwEN6jLkejKvWnLFIgVXtZjTiw00CmnpcYFZ8cCGdwdLXrrRCCuICkOdwthBn1lQ+QCipVpX4WZ6f1yS6sFbL52wihGEQKJ5lZ0FkgFn+Pn4gOHG0BHEf5PdVld5l/heA1WBILzKJM4YVcYY8yIwfA6IGH2YJN0Ipg9F4hL7vMPQDoPj6cc5Jx7OCjwQlEZyUKMeP12u91mu91mu91uvlOPD2bQdtNCaTMZpxg+t716EGriWq6woH8xmOHD60q6FvevO3fqsZjyYpEfCWt7wFDz74IL77B74Xve/Qti0uPPeCjz48FyNdni1a3H7rMVTWYdF20EpjsZhBK82bEBi4xmHoeoTBS942IbJEyspATKVeKAsJ3GnLimfCilIkamv+/7VAd5LAfHJ+FtnarLWoxWqpkOWyDKVQNTViiGWTX1RBpZcbZ8sZQ52IIT15+hHlw2gLSBbNaIWoDSrHMJ8+eN4kgzfK3N3LMKXoAw91opJVVYV+8IAMp0hJal3yUAcoo+CcQd+yWmOshTaKc6SBCde5f9UaJk7DAEg9/OBxcHAA7wfYyiIMAQfTGQ4dPgyVcOFdf/1dP/e77/nQ7+8c2r3npZcuX7xy5aWvPfjAA08RRTLWYmt7GzcfP4HLl6+i77jeJXdaTsYbYpWMZYiczzpYY+GsxWw6Rd/3mGxMEAaPuua8X9u3XJESgCH0PJQlVs1CinDWwlWVWFkDgvelkoYVPCU9xZqBZ/K+5e5ZFMWdBzidZA4WF4CV1y9GvgasVpCzCBk6WT2yxnGONkYEgUMl4sZla9gMbS0rU1w7ZOTwJaFddKwIKyZCsxwpFHEhiRvLedO+75ewNbFB53wq5yxZSdOKM+AaQCTu8c0HJyjOA6likeGZtKh5SoEgGW35flqb0tUbBe1sBEDHY34qKlq2iyMqmIpVLypDM0r1U/ADAIW27zl7qy3atgNA0gPMXmdtVFGiQ/DcfywDRkyR6fKmgjEave8AqQqKPkr2WBW1VWkFa/l+YDUwiEJcYQgMlLLWcP7f8L0X5TCsqRsMgxcbdcWgrMj3b0iD9DJXktdnp4bWCkZXSJGw6OfcDx2Xbo/K1aAYpVqr23v8sccf/Gt/7b/sPnHf77k3vOFNsMYwpVwO7WaLaffilec/bp17ZrY/Q91UoGDhg2eL9cAd3EEzY2A0ahAGD68CalF2fd+jbmq+9toFW8o1H/BFigAltP2i9ExzrVcoEEGjdbEbG62LfZsSH/RAQIEZ4oXSx5slYJTn+TIOkXkMJBBBzu/mSAlf28uvZW0DaAU/545ko7kbODs2mNmnoWDkGtKF6pzBaypX16UEaAutDFv6lSlOB995UEqo6goU5T6TQx2jVXHmRAoI0d9InV6v9Vqv9Vqv9Vqvl9fAq8TKNXiPOCf41mNndxfjzQmGtke7WGA+mx+9dPFSbZXBhQsvqq888CC6bo4/80M/iL7vcevNN+E7vvMteOrJp7pxMzlIFA+uXruMSy+8AOscdOK8qR+km5ECDwEDb2BhFNM2s6LGnSEoO6OU4Con2TFWLgms8GQClcp1QyrlohDeYImNeEn65Kymcw4hsL1PaaZwKpZ5kBLg276opimBN85KQVsDteKmAxHCwNTipA1bScHxSGuZxBqjl07dBB89EFmFtpUtm0DrlplVU2kmDVvOfBIlGMtWPKO0dIWmol6rpARKFUVRd6xGhQFIAQADf6x1GDqPGFtUtYNVDuPxBkIYMJ/PoDQwqUZATFi0C1CMGFUN9ubXr3zk3g990BiNlNh6eOLETZjNDqAUQ6SuXrkGW1lM7BjeR3TDAOcsrNOYTmdYLFrUdY0jR45gun+AWbsQuyhbb4kYGHb92lUorTCZbKLvOu5vpYgUB9TVCEnbAsqhlKTflLK+JF2yWmiqqeQDtebsIaQ+SCWwDRUEq6xY5LmCJjGmGYAt9koqBy6iDpEqFwHFuHzfE0qePKvxfhj4cs7k76Rg9LLf2GiNkBhwlS3NSms4y1U9i/kCALh/WCdEGmRs5985Bj78yYM8b/ATdwkrwzneyAOtdRZQhhVhJFF+U9mwJ+J+VSWW4SSKlhGokY8emjJ1Wn7efL+hcOA42544PxuJr1PnKgxDv/xe0nnM5F+CdQauquDjQqqDpOZLs2JXN7WQ3iGDf5Subjn4Sko+LxVaML9nqtirWf8juKYGhYB+GITobjB0HWewNV9HfhgKhTolQiC+t4giKleh7zskGV7zQYeyrKZTiIjewzmGePGhAw/i3nsZkgz6tkVV1zhz6vS5Rdu2f/1df31za2MbfvBwhvP/APDhD37kyw8/+NCnjGZFHPIsVAI5qxs+KEJiWNfe3h4f5FgD7wNiiNjY2ARSwqJfiIshATDcUc1nLUgpCJVdIUlMAMTqdFIKStwFHHfxTJuX6yZnxzWWfeHZMSEPXqgVu/HyopEBeKVnOivFlFHPAtNatHM5bLTgr0zl0DLb/Zn8HRETd+qyM0jL78v3n60MBh/4kDEBRB7GmXwDlyw+xxNY5eYedz7sUUhI5IV4jrXCu17rtV7rtV7r9XIeeCtXwTqLuq5xfW8PddPAGI3FdI75vIU1BuNRvTMeNfrkmWvY2prg7JfO4iv3fwGvedU9+PL99+M/+Qv/Kc4/9zwG74eNzcn10PnFoc0dHPQzdNQyPCd4VBVTWm1VI/qArltgMtlAUtytmVRC6AceFECo6optnSEUQEqkgCiuNKXUCmxZVDKC9MUm7o8U2myO75LYorM11Ci2GWoFKKPFhprYFi3KAdSS9Bwple8dQ2SFr3wf3vmQwFuI+HvlPLIy3I/KJFMHilEoykxVpsBKSxQysDIWXmpvxqMRuqEHDaFkG430olIkkA/FLqoU26BVBNfWVPwz9X0PYxi8EwPB+xbWGjhXQWmhJLcdRvUI48kEfhhwve9gnMWR8VE+jDAK0XvM5zO2gSqNuq4xW8xAlLC7u4OoI8IQ4H2P+XSKuqoxmYwxeI9Ll18CkWdVSRFGGxNg0YK8R0qEelSj7wf4MDBIBqK6aHnviam9MQWEzhdyax74KBFoEKWRiUhiMVU5Ds6kXZXfR1Y8eRCSzG7eaEtuO6v7maKc1VituBoIgByMUCFwl6FL8r+2yjb2CAPDE5skG7NCpYrylXhTTUBKumTCY4oF+kVJBtwE7q3OSrXWbAVNbK7NPbskvzxJ1lsJ3EkbgyAUW83UM6TI13tRghMQ5JrUSkvNF0chkgB+OGdqYHMemFJxGpCodyl4LFFyEAp1hFIJpjKgkDh3S3kQV7BykEMU4bSD9wFaWTmcIPRxQKIo8CGGViXrpDNWw9UGMS4znsg2Y8XuD446a841U0JlXekydq5C9KwI8rNrYGUXOVvMXdkJwDAMYr12IB9gZMgNkZXkPMiFENA0NbQ2DM6qK8xnM7zujW/2SHpx8/Fb+VpMSSB4wBOPP/n8//hL/+M/P/nMqZNN04CSwny+gHWqZNZH0iPMLoa0kg8nHvo0H5rNZzMGvGkFUpypNtoU1wvb9Tm3nAIP+sYKyTgGUfz5mcVQM/k8vULAV1nHpQxgLpA0xZOrnGUua5tSnppXVz6ozB2+im37JTJCVABySnH2W1kj9GSS2EluEueqLWsN08UH7k4fuk5+llQcHiSANySFtvOw1qKq+JqKMaKqa4AIXcdOFej1tLte67Ve67Ve6/VyXtoPbInd2NiQSheFfuDsUlU5tN0CIdBGRDRHTxzF29/+DvzV//qncfudr8C9934MrZ9ha9Lg4Ycext7V/TPnn7vwxHQxCyEFVOMKFAlty0Mvb+4ZQOQ9bzR87KGsYhXCR1ilC5HUe6GsSg6QsgImP7ySnVKGEeXNrCCqZGPF/0uJpC+W/y5bElnU1bCOh8dMF2VLtNTGqCXgSEsvY87caqPLhs86B2ccDzQrNS5cGaRLTQ7E2pkSDxZasrnGMIRHGys1K0Y2oImreNqOAUZGw1ZVAQhZZ/lzDSt43gcMg+dXyPDAFSiKVTAW6q5SGu28w2LeQiuNpqlhrEHnOxjDkBstOeHeD+i6nqtifEC3aBGGwCRt66Qv2GE+azGdTuH7TsirFrayhTCdiFDXNZxzWMwX2L++hzB4BBkGKTGoa+gGxCD0XaKyEVVGganfWsBFlknTslGPktMGeJjLsCWopQqpMwitXCJ8KKJFM1pmeCE9uapcY0QECiSSloxvYsEvLgIBm2WAWGJrAl+rpEq2lQ9EeLDRKZNn+Wsts7qshmVF03seOjKkC1quz3zgojIMKpX6LQUUayznxKkMpVn9VkBRgZXhyABRrqsR0nlipdX7AB+CDL8M/skQrVy+6ipb8r5so+aL3xon9lViAByEPC2dqQwi00UBzHUvKSV0bc/3nADr+BApFTWxshUqx5ZdJL7e2NJsYJyGc5ZhQ1CIPpYBLVIUay5nMWMgBO+LRTb/7kQEbS1G44YBaqKOe98jyeFAIXZDcU2S/CxIXG9knUOIkTtfJee6s72LM+fODE88+YTPKnmgkJ8zwy//yv/0T59+5ukPbkwmZZBUhr9e5WpY4zDdmyIFCFzKIwTupJ1MJuwW0BXm0xn6vhPVWKGqazSjBs7ZAo3KM6fWHAWw2kklDxXYHz8X83WvkOKywi0KPCxXAknApNwLSg4TShFvZjOoZQevUkv3BNv92Y2hkipW6CSHihD7ODsz8j8MSQ4XExTlrD4T+I2WaiGBzymtUdU1V14lBaMsH6ARS97GCsBLni2UIqIPUs9likuHCeLrtV7rtV7rtV7r9bJUeGOKmB1MoVTCzu4WNsdbmC4OsJgv4KyBNQ513Ry/9OJl98STT+IVt9+JV9x1O/67n/tZPPrgI6jGDZ49fwGnTp08uz3Z/vDp06e/urG5ie2tHTz15FNwlYNWQF038BSQKKLrxLJoGP4Suk6yf7z/aUYNlLXoFh0y/Gdp/+Rhc1XtSkgMmiKx0WkjgCrpT5U9VsodojpXrnDeTSlwn6XYpJWRQVo248V2KRu5TH0lcHZOW95EMfSY1WGu8mDlljf+Qt6VGpiUmNaaf3ZjNPzAuTHlDMgnkGPVWYWIFHnY1ppJwpRkrFGsBhq7rFhJ0CU32fuhqClG1D6lIXlnBnJFHzCejOCJlcHgPS5fvgKjOT/MWWR+rX3Xy8/uEIRMO/S+1OVQZMAQd1ayjXU2XSASZynJE9oQ4GquwKLIQwRFgcEMPZx1UNogJCFji82XZKCixMAYCOWX0nKjLNoRv0aUbiD05gxvqY2KuQuX880Jcl2JqqlkKIYCDJSo+3oJTZOvo27YwIuaqVlp08RfX1EqFO0YqSibSmtYZWFMhc638jW539hog0geUUXEOGTWFveNqoQUqJBwc11SPqBJCmK/pZKPV2WKTzLQcL7bOSdKOMOj2H6PG+q98k0UYpBDA10OYyLRiiiXRCFNEgUIS9hcLrFRRnKfyy5tVntRhiKV2GnRdwtEIlhXicU5IoQe2gj0SA4suHbGiNIauSYnZfWe7eIUI+qqRiKFylTwwwDrFGCVHOYogedZhMiANOPY8psz0CoB3FaloQygs8dXQSqLwNdxGIDEyqi2CkpbPkzTQOi5v1ZRgqsqzBczbG5v6Lf/qbdbvleByjgA6H72b/93//TDH/7oP7v11lvpyuWrYs32aFyFlPgAQWmNXg2gFAWuB1DkZ9LgPVKMqOoRw+i0LbZjpyySSujCIK4FsGJKbPXn2IhCEscEU8KpOFkKXwE5Pq2WzgOlSj5XqUJHkC7fG9XdPPiq7ITJLwJEbc1gKvDBFsPb8nkP388a/CyJ0v+8LJ5DUd4T5HrESqZfcz88K8ZgZoMcdmqluQZtxS1itIOR7C5SwtB7AHQDrXq91mu91mu91mu9XmYD72QyYXWkcYgxYjqfw7kaiVpY50yIvjp85MjtR44e1e6Zkzhz6hSOHjuKt77hO3D/H3wZh48cxeOPPIXPf+GLnxjX449sbW++ePTIUexd20NT12jGDWZEiJQQBq4D0VDQxrFNUobQRAHJ8i6l63sow4MZ9yzGYkwLMYodVfJ6WizLKoGUDDJYWjELZTZbW6NHIgaWaCvqVUylhkgbAQdJrlAbA6s5P6uTEjJtRKSAytbQpkYfe86aDh5VVUNrJvCGEDjdKARXY8QaJ/Af71m1VlohCWHZOYfB92iqmmtSRRmMiVDXDQYfQDHByrCREhCil1oYtjSz+sHFGnnzZpRhFU1raKnd0IaptPWoQiSx98nnW2tgDVOUm5EVOmlC13aiYCrpSGYLoXMO3dDza5i0UF8556a0htEWVuyzQIKzlnOg0l8cKSIpMAhGsrVIKAMnb35j6ZLN3a45Y5g3ySotN9JlUy1DMW9a1WqBFIr6H0k6P1EyppSzh2BBMa3UoOTgodYyaEqWkjtsk3y9PBBphEKiEnK4YstxFCdASC1fK0khpoBEpoB7tDGS7+XOZB+G0kNKFOFqB1tV6NoFotj1K9fwdROXduVSZwQ+1FHGIHrPeVtxQoToy+vLtV2ZYMxqbQjELgnF+VoecFaGY1GYtbFQkUAhyJAr8Dgh3jI0iLgGR97bRLm+K/dec85Um2XvqTGsC0fi/H9IfGCSKGHwA1fGWAtlNCrN9lW+x7jDtRsGPrAIkQ+LPB9UsUvDADEhBi/dr0bU2gTnLDIJfvADd7aGBFgDawE/eBhnBYokVGxikFmMJLVBAaFnZbtyDs7VoMA1RrfddodNSVUPfO1ruPMVr0C3GC7+7M/+7L/67d/69/98e2trOjuYA8TKb4bvhRDRdT3GGxNsbE4wnU4RBBg1nkww9D1a38NqjdniQFwOSg4TCG3bcXRDDr/6oeMBXQ7oZMZDpISqqUAxwg+RD0t0NqtkuNRSoc3mmmWtkMQFpDedh95lxAAqZ8WXVmesVBLxpcgUcYhHh1QUWn2Ua1dJDnnFWi13ekwJGg5KnrvMO6BsrOcIABSgk7zfBiYDroyGAUMNtbFQicnW+TrPBzbOrnt412u91mu91mu9XrYDr7EamxubeOmlK1BKo++vo6kbbG1uwrD3bVQ5d9Ndd92Jt3zHt+NLn/8Crl66hHvf9yH87gc/gL//y7+C5y9dPv9Nr3vj048/8fBZ0ymoTuFgOkVTj7GYLUCR0IcOxljU1ahYyaLvOVuXWP0zRiNIR2YKJKRTgwgFSgFJcUY32zMpK64GSKRL3UxKS+iJeEyRRQOtuCKIEm+yo2TgspqgpLomCRBGm9UqGpnAFKGuR6BEMM7AJgsfeiStEGNCinzyT4lgrIHRSiivDHsJwReLn7UWdVNj8AMoCf01ZuIpKychEtNotYGCZ6uzNVBCkdVgEinFIJZDC0pLgBWBJIPnYWDQjBu0i1bALEAig957tuHmgSKw+tmMx1jMZogxoq4b7jitG/ihR0pgu7pSMDGBfOCh1VreNFsLP3hYa6CSLhVQVvo027ZHUzWI5JkwLPlA3u8qUfFTgQ0VEGqG48jwmPO5WFHzs+rHA5RsfnM3c1p2Mhf7bx6SeaxZsT9rscprqBShZCjGCu2ZAOikGNJEqvS9sntSrfTw8kEKMhBKapCUUJ7zz66liiUDvbhvWiz2AtfSlt0RXGPF0YBsKVbKLC3IKtuTpaNZBsoYYzkQgmbgUoxBbM16qW7LEK6t4YMqodtSCmJWVTcA4fLQ0LUdv0f5vjGqdM8SEQeP5dBCJ1Ws+krspkmeEUazk8Lkmi5k+FEqpOmIBEVLtZAUQ8eodMLKcEKqZEIjBe6yRoJNWgZIX6BkKqlSi6MURw2GYShfw2jD9VpQ0NoiIi4vzqTK4YwT8rqXaiYNtsI66Zwdhp4/LdL1h7769S8bXb359z/5hw/f94l73/fFz3/uo5Vz8yH08G2Qyiiu66nrBloHaM11Pm40hjUOcYilCipRgtOWDzeUYhs2lhbz7JIB8bXFz9b8DJAcdpJrJvCAraSPulj35R7Rmk8rmbNAWE6zfA9oLK95kkK3VG5WcJWVKLz5EKVQ9YEST4lpGUNggje7WYKP/O9D/vjsKJAe5hCG8meKCMoIHAtMA6dAHEWxpnQox8gHf1ppkBwAUeJDHi054hT4gIOwVnjXa73Wa73Wa71etgMvEeHyS1cwGjXcwdp10Jr7TCfNJu649c7Jm9/0psMUIs6cPoUXX7qEY8eP4pbbj+Mv/9W/hNe89vX42B/8wxdecfddB08+/vBiMZ+jamo0TYWhawFjmILsAyB5u94PvFGylitQAhMwo3SJWmu5W1K6LI3WAHGlTu64zPVEKfGAmYVApZaqATSkBxcFehKJeMMjljbeoMUl5MhA8pZYko9JrJApgiiIksob6K7lHlCjOXubs2xVNWJbtVRZKHB+j7O/hPHmJsKQKbEGRlv07QKVtawkGOmmjAnaVVCJh1BrrAzqJFAuXSqMbCFZi52bGLKVqzuUEoulysRcD1DCEALnYoU4rKTWJoQItL2ouRbRBwTwIML0U1YKdR4Kqoo7gClBWYWqtqW7mPPSoVi3IZteQoSxFjAGIFrWyCgFa/k9DoEBRdZaHoRD5KFG8WCSu5lRNrrLuipkQFXu6MxDc/44tcyBJ5GmqABk1bL+Jya2T8pwKCJU+bm0Zms4W+Q1tAypCcvcuYJGUlyFxP3O/PWtMoh62f9MQQBSCtLrK3UtkYqqTZKRNMbywUciGOeEFs3U80SsxiaQqHXshrCOq4ai0IeTDzyEKM0DkVoBZClh4QZipUwvld+skOUKpVUqb8IyL6+UqPWJR2RrxWEBJkorzW4CKl+UB36Gd/EhlELuyF0qxDGmQtXN1m6lxZYKvXSAJA2KfglAsgakVOk3ztdc7SxiCoBWiJ77w5UQp4NnZZMkOuE9H8DFQcB1+bBObO62stDgWiSSa8BoCyIeopPWSBR4oKKEJx574pn/5Vd+5ee2tnZvf/zJx57qh8X5phlBW87QMxuP2IESgLaTTl3DQ+R0Oi0VQEYy0AzV0kIBT3zN6SSgqSTX6BKKRongKoeYOKNNKbFDQfLQEOs5A8mWnc+QOznXUil5/wh8vWa3TYas5Xy5Sktiekp5EM796RwxWLnQZNjm60trA63A9XSU5BBTMuDl/pZBXv5tsNZBgQ8MUh66Y+Y88L1mNPcaU6Sl20By9BR0iQNwLlkVen4Ifr2bWK/1Wq/1Wq/1erkOvPN5i43xBJPJBnwI2NzaAFLCfLZAXY2SSlRtbW9sPfnkU7h69SX8pZ/6Kzh35jy8J9x05DZMNrehtTl49Otfm/W+x3g0RjfvhLLK8lruuI0xn8hrhrtInQtvojWCH6AFrBOzWhBDDoHxppZIfK56CRiSvKHKm7Bs0BQQkFbZ/qyXm2bFg4PRVr6GbKSURlKArdiu23fcIRwploqakjuEErAPYJyFNZyZ9CqCwJAThr5YIBG0sfBirxt6zqpaozGfzZFAGNWNZDwjrKnQ9m2W/DAMA6y2AtfS8DEi+AANzpwZy5sv33tRBjUrq6JwliFNacwFUqVheMOGIAcMvGF0dSUdl6bYx7OF1xiLYfDQRsHVjpUkJHg/wDgD57h2xSqLkFXtrJYrUzbASmlWr4MHEbEV3FoeskWtTUkhSkbSCAU2W2yzgEQp15IIj1XlQVdIzSmnvOWqkMsnK3+FKCuk7UzlzlU7ZcOOXE+UrZecUVzNDuZrlJVHURghdS9Y0l81uH4rk5B9CLCO66vYsVqOb5aVKzHCGK7ESSuE6ZQATx5GW0QKxY6cBLzGFGEq1tyUSHpF88ucYUR5QDQrUCldfvj82vIn5fsx9+tSGRrSShUQHxDxwRGku1gLyIlp26YQdPOgU0jHyHZqdnWwY4FW1GQSN4Au4DCGX2kenqW6SsmhipZe1tXfufeDgMgitHJwlQMN3LtMKWGFf8b5WMcHOjFX8YChYjxAAVrlkY0PIqxkirXWcKaSgx/OyFtnkFLEMPRwzoF0CqfOPvO0Uvrpuqoxbsbw0tMbQoQx/NoESqikqzofuogNhGt3VH7P2KLro8cgj9CcvWULOwnRnZ+Ngzx7QwSzBvKAKa8t08JzFjfHDVSJbCwzrEpq29ISnJYPTmg57GaFGGml1Cor9EkI+ch57nx7LmnIMnIXm7eW+ji+LlccB1GVgTXGwIccEQVWmCj/2yF08UhISsNYh5T4foLmPurVnC5n8Fn9ZSeCWe8m1mu91mu91mu9XqZLj8cTzOZzXLlyDbPpFNZZNFWD8WiC4D2uXL0cjx+/2b3zB9+J55+/iE9/6tPYm03xT/7ZvwapgPe977fxyY9/srv5xAlvrEUInMnNp/9KadRVDW2U9CAua4SywseKrULV1NDOIIgympU50JICW+BEYndVWjZPaQmPycCUFJfWuJjrYlSmjGZqrWQttSq9ukzhhQwJgLFGamggSkjCEDwiWBGp6xoUE9q+Q0gB1jjJGzKd2FiDkLjLMUE6dVOCj6xu1nUltGehR4PzdUwgZiq0MQYhegyh59cnAdYY/vymgTUOw+AFKsR0ZrYm8jBGAnph27BYUZFAMYCEhJ2VSvIE7wNM3sgphcoxLZcoIIGHba6L4SxyJEJlKxlME/99ZJUpBq7YQf7vDH3SnNnVojwPfV9Uwyi1TjlbmhIhxCBqOeTAQ4mDlPPbma6cxHOpipqUlSQhxq4SkZMSpanolYXQjLTMKOaROl9n7KrkzXDK2VzwYKeguPIGAnBSS6iWNlqUXAKlUHpsvR/k8ESJWim1LznXKkNXUjnbyDA3mbrYoisHElpr1LbigVRsmDzg8w9DKQlxlge0nNmEZGMD5UOUXCnENWFFOV85gBCfbjmJKMo6lgr26uuYbaZKSNNMESepbnIMfIoRMXB/qnMOxigYeQ+12K2zZZvfe1aKiRispMHXra0qJJUtvLEMrz4ERJl62HpuQCDMZjMMg1/Ss/Nhh2Y1vB8GPqgTJVVDS9c2VzUZw5R2QKPvB7R9B9b1jRzgEJxjEvx8NudDKefYUWEMrK0w3pjAOoveD8L+SuVgTgGwmntgozwnCBEhBrjKYTQZo25qVHXN1WdCGLfWYGOyAWeqMjMqGKmw8pxZTjwAUyIkyX2X9wuZ7E3lGuaDRQVFqlDMUSjjWLnmVFGQy5gq95xKN9x1WPnhil06ibWe77cEaHkeyHWa7/mYhDyfB9eUDzFzppydMF6qsax1TGOW+9k6s+xpV4DRrDIX273k7vl6YXU3xlXi/XozsV7rtV7rtV7r9XJdFkQYjxo09RgJhCsvXYarHCYbG9ja3kLvPQ0h4srl6/jWb3srbr/9DvS+xzu+662omxEqNcW4ctvXrh9oo6xYvKJkQ0XV0Qrj0QSUCItFK8OqcDmNhnUVQ1+0XvYtEkN6uNdUVK7EVjbeuDJBOBIPQQQStQbSSZo32Ss7EUqwtmYgSd7MKumxlZoWrTVM5cownAfOEAJyq2pKPPBVzQgqEfp+gDEOlWSBFRSstiDNdkmkhMbVDONSgDYMkVKKLZOmshhmrNKFISCmhNrV0Faja1veyENDOVeGopQi6rrGMHh0XStWvITKVWUjS4EVJQUFIyoFioU7FGqqXhmwMp0UkTD0Pat/SsEnv6KsMbAqeh7AALZRtos52wLldRiGXjbHCSkxvMhaC20Uhi4iIZYBj+FKktWFZtUrxjJ05I2p/ApIFIXAbJFSFGsyfyyDa/i9TfIzp5Xqk7RSYbIi1pb/zrbLVT1J6p2loordBCHbIWUvXzbbYg/WhgFgAMTWKtcakQxhCcmgdMAaw9U5iST3m/h1VtIvqjSWdVqkEMGdxEkOBhRMOQQZ/MD3gHTQZphQAh+UZPJ4ydPHIEOvvHTayJDIh1Ep52FNbh6iP1kuU9TsXHvDAh7fLzkHHbOiLF3Sq1nq4INk5wUgBbbSKr0cXDL76wYAksCMrHRlhzhAGy31MgwgiqJK6jz8xCg/x7I6SiuzPEyz4n0XGzgpgk5c/RUiyuAXV4bDKJlpaw1iDIieD7dUVn61grEaOvJr6LRFTDyA86FDwtD25dVMiq8lY/g9C0GOEsRWS1FquJQGkUEYInzgjH/lKiRK8IGvF+/Z+WGsgfcexnAFHXziSAHEzUBU1GjK3da0zNsqIWlro5Gi/M7lCljeO5CDBFVqneJKTEBD5TgBVkjdQCFhp5V7qlTP3VAbxh9gjWboVfTLzC+z+ZDtHEoZASCyVdmuRGmsYyCcH9i5keS5H6I8UzQfE5FUyeUDG+R/l4QOnunl67Ve67Ve67Ve6/XyW1oZ0Sq0QghcT2ONQTf06LpBWWPiEPp4fX8fh44cxtbmFvau7aE7mOL4LTfhwvPP40d++Ie2br/9Nj/4Hs4JXEktoVB932PeLtAPA1fj8NQgEB7OJiImOTFfql6JeDNR1RWM0qWWJ9fCcN9kKBAU2S+VXlYt6mQSOx/FiOA9fPBiTVVF7c1fm5XJKB2eA+fEwpIIap3DeDyBcxWP7NrB2gp15aAVKyEheAyDh3MO1hr0/YCu7+CchbUWVVVjMpmgqZh86lyF3c0dBM924tGkxqJbIFLExuYElWOKciSGZXFNEwOwcg2T0mJhVkrULpXPBZAQiyU0BvFpiqKt5X0gks7byATqnAUl6RctROQ8KEpXawhewD2GrcvQEs/NPaS8CVXGcPVMjBiGoRwM3MAVk/eKac1/YlAtAlASRTCJVzuVHtdsaUwEUFI8mNGSFLv0oaYbfpcy5ckhjIhMK7ZO+TlFTWbwGJWPzo5erVYGRoWisCWBneUBTSvDCpPSQnNOXNFECYPnDlWKDKZi1T+wFT9yt6pzlVCMxUArnc0kpN1h6EsXrNIKVuyYUV7PECLfV1XFfy52bB6kmSCsJaupZNOfLaDG2JKbhQK0KMpLsi4t+0qJs+V5SCnW5/xzS9du7gamGFcqpKhU32RXgDGu5EEFuy3/yW86iWoNMOgt+ogUuJIoq8wh8dfVypTsaMrXtljWY3YIaMP5+BhFxCb4yDndGJnWnnOrpaJHhkYmOztYa/ljYwDFiL4bAGg0zRhdz24Na6WeyziOBwjUjn8ujZQUFu0CQMIQBqa515UcPDAhWEGJ9ZkH2iW9mF/fYegRUhAQF7+3wQ9gMjfn7DliQpxT1vlQMLswDIwyYg3m50hMkR8j4g7QagmPK8wqQoG7KbVEvaWEGyFzKpX7I63Mz7nHt+Da5f9qnVuU1BImiJXsPTQKVB3E/07Ia0L5sEUeKvyckd8Vy/hLznwncRRY6/gQSwrVM0U9U8bXa73Wa73Wa73W6+W5bDvn3soQPOqGrXDaGAy+h49Bz2azrlsMs3tedRfOnDmFT3/qU3juwos4cdNtePe/eDfOnTvnf+BPv/P5M2dOPeeshR96aKsK5MUotnDmQVLLTqUZjeC955ynwIQYpBM5g6cUCMt8WYxMw0xRqkpWMls51Jkk10YgpJWqId5siSKkiPs+SUHpVDYqla2htS1KSAZRUYywjrOzxkc46zB4z9CnEFDVBvVkjKEfYHSNSD1/HhH6vsd4PEJVV1jM50gEzBdzzGZTFCkRQNd1MMag61s41Ljjlttx1VzD/vQAMREm4xE8PGhgJWg+70rHKoNXCJ4irLVwrkboW4bjSJZP50qdRDDWFiWXpyYwodRaBmIlpphCMoPGOBhRYBW4ogQy1PAhASvg2hgQWbanizqWhzIGUFnJbftiMTTayCBAJR/NlVCR3wfJaZZNL/cscTWRlmOOFFeYyiXEV2qo8iZcJb6eCCQW5jz0ZgVpacflTPfSHcB/pwpkhyWt5WBscmYSKBZeCDwspcRQI6Hr5oE7hCjKLMOmrHXoxdasleIDBYpIWpS2xLCsph6ViiHjWGUnQukgTmqZWfSeYA3nxKMM3loGGe/58Cn/QgpsMSfiSqVIedhRK3CqBApMAs8b/0RRYFis2t5gExf3QBI1T8nhBx9A6XJfKj6vyLyqMviQ1BYlFcswLc1S8vFJhnnOqOd8tdJGrhoNCNCtdA+nlXwp0srAm6AkI2yUQa4gQmS7vJKaHiBHmPnzM7Ct3Eulk1UcFXKIoIUmHKN0Q2uNlCJiICRwjZKzDtEzcIvk8wzH/7n2Rq6hGDy8HEY0dcNDfZIB1HC1WSTOIgtjqxCeY4wwSu5no+CqWrprNZJJiF6AckZDJ7O85rOdHzkOIoOt4cNNRBn01eowyxpxPizJ/PMM17ohk5vSir35Rg76sg1spe+Z2FLOZyax/ExJ4inFFSK3q5ZAsMp/l5VqZMJ0dvRoROLDoQytUnJ/WGehtEPfdit934mZBuVeWq/1Wq/1Wq/1Wq+X3cDbNAxK6vqOeyJjRIoexjjUtdNd13WPPfXotccefQTtbI6uW2Bv/wpedc89+NSnLuD1r3vDuc994Y/ed/L0qSe2NzcRAlOMh26ANgZaJXgfBZqiS1fq0HXc32pZTeJaHj5ZTxDLnGREXVUBmSrLgd7St6hloM6boQQlG3AmCJusbsXIypoQaNmWqqAV01TZ0mmKDa9yXMEzXyzgqophTIrrQKAU5osFNje2EaLHfD4HJR5Gbrn5Flzb32Nro2Ewzmw+xdD1/7dUgFtvuRUawPXpPnrPm2qmV3PfrnFs7Q4xADpBC4wmp02VYls1ZxDBnagpwYqqm0VxnQmuiaB5LuCqFiNdugKYUoBsxmXjmO3mSiEEggokSq8ulS6UmGBLYvtOYBAS98pGQIZooxlixpZYyfOlVZgMFYIyDxZ6pbKk0JdkE63lawjBVTKn2UZ7w0b6BgtzBvvkAxRdNvkqLb9X6enVEHsylq+FzNzZOp2xSSSqZpIuUq34WtZawYAp1Pn355oXg0iB1TGlYR0PuFGB3QlerJxJVHqTq4KWNCruY+bcbyAZJaRLVyf+ehQTjHNS05NEDVZL8jGWxHMt8LKYe2a15utB5ZcwreTiU3EXMBDLQFGS1yPDwRgMlXt2kdKS9qwBnXLPtMQNpF9Way1WYgGDxTxgljbWosrFXCEl9V/5QC0fFCmtYZRCAluQk0pwcr1yZRdnc5EPy4jz+EkJVCnxwLXaH5trtVhJDzcAvaLY2Zfd0PzfFPlgZj6bARqom5pV1MTVQipxZRK0FlCSFJZrrvjq/IIhaJqjF3VdieUWcFUlpPRUqpKU0nLYR9Ar93ciKnVvJDVKWI0B5FiB8BkCxaKMIkct8sGTRqHCl7c9S76rADQsnyNYAcYtk+B8gGW4jYs/xPBBmhFSc74Hl4org6QqgZexfV0OWCQOUVRkUuU+11ohhiCQNcm223w4ZtB3LfeYa6kci2L3Vsu+7vVar/Var/Var/V6GQ68bTuHsw4cu0wYjUbofQ8DhZ3t7XR1cxRevHhx/73veQ+c0jh8+DD2r1/FI4+3+OZv++aDD3/ww7955tlTH67rUZjNF7CGN/A5FwiBMWXfKqt6krOCRpCNPStGqVgPYwZOyTBKuYJEICU5B6kKWVcth6U81CEV6i9nFQU6FXhzx3UtBrZxSJJ1c3bZyWuchXEWMUXQIDa+RUJd19jZ3kEzajCdBjQbm4gxYGtjC8Zq9F2LfuhhNbj65//BuvD8hbKJ7qYLbGxtgRDgvZcKKYvpdCq/t2FVIxIiBalxUoUMnIgJztGHYic2QmglUTcpMlma876sUGtkAJUHwBCjXAXCKhSVihIGJ1HpKOXvscwGll5MDUQKUkOCFagRlUMNBkABK75GKJWBVGIbXc3YqhtVKBKKrip/hhtU4ITVbPeNvZ3l26obP2rZ2cv2x+KiV7ihgbN01yqmTGu1zEZCDnLYjSBOA2ix21NxOVCKnI2UvlSjWfk2yAFm7joNoZMBhjOKiApWOl6zvTWGiEBcyaMF4JR7rNu+BYjBWEywlqysAKvy/aNTGSX5dyR+hbVk0EFpdZQtOWaVllVL+dBASRcw5bMGSlxXlmvBxOIMtaxEgmYAER9ukdDX85vDXddKK7GZs8qoqLz7hSdAefgs7tiEkCJb0eWkw8dQri8th3R5MM3kdz5cSKXyKfd+L/0BQhqmEkQt0L0l/7ucFEBrViBjIhkkQ4YRFMdLtvs7ZxGi53hqJMzjwL2+iqFyKeZ7XMGa/B4G6dhmxVnpFWU9A/pkANda1Pk8RUIOKjXdQCnOL3+KtARWrbhWOD67hFat3Gmrky5KXKDcbMXus9IFHJEylV8qwiCRGbYkp+VwnBRfI7S8ZpPm50e2yEPAZ5BebI7O8PtBSKgtO3q6dmDQHgUYy0M0ESFphRRXXA7pRvV5vdZrvdZrvdZrvV5eSw/DAGUUYkxwrkbtagxdjxADXnzxBT+fz8Oh7d1n77n7nvTss8/hE/d9HCoBf+U//0u4+aabPv/8C8+/B8A+SKywiuFHdVXBWoOUFKq65oxZJN5sabb3FaInRVCMkvlMha6stEblnGRslWQLdYE9LUcNse4aKzlWyJAcy0CUwHY+70Ohv1rnAJXQ913JyBIi13mEgLZtpV6FN6NV7QSUFdG1HQ729qGVxWSygbvuuQu2Mjhz5hS6dg6SHO//25WEqHuwvwciVlai5P6MZuUMom64ysqekQcWlYdhLPtRtTasmGve5EYKUIbriay1UJZrmRIxA1YbA0CzOqdz7Q6rTybDjyRLm22vucLJGIPlKCT1JrnDVV5XEitqzoAW+FOhJC8HnxuspNBQmn+25ViqJGu5pKmWr7vqfVcrO3ZgSRPOmb5VElP50LSstcm54DINr9pjl32jy00+D0S5ciuJoqcKVVwqt+TnjrkHWgYloyxHA2ipRKlMoaZMXWZAkhbrePSBFT3DyhbnbzVC8PBhEOVaI0VanTZKb3SM3MOqtFCjFYq6nW2hOXdJOg8Vks3Pv5vWMkgv/cp5WEwrROoonbGr70mSvuelar60DaeIokKT3COKxFZOfNijtII2pti2s0KbCvEdhRwuTK1iay7OEUoIFOXal4E7UclOk6IbKOEE7iqO8hxUCrCZI0D5GoDUrfHIbx3n3EMMfMiQgOAjAMPPT8WvL4yS+DPnbZVRUFYoz0LeDqJe5yhHjAldO3C+3/HwG4kYfKZynzNBmews4H5Zkv7ibEMmiiUTnl9HvqhW7qoVe3I+WCmHErk3OgOfsnWgwNCWH1funYSSIS8HI0kJjEwVC7GSQ1TQUl1XK4o6oOG0k69HBYClDVfcpYTSpUuJJM7j0S167lGXj+eoAT9z+fCEv36OJSiztjSv13qt13qt13q9XJd1FVv4iBJm8yk0FCpbwXuPa9evxmY8wn33ffz3965ef8e1a5e/ezrfwzve/p349//m3535rff+1q/3Q3vS1SMeSmTTl5DYwqpYHfTDwBsoAIMPQEwIKsEaqadJXOMCSmKBZbAKj5+R87hitU3cBCObZ1pueGXI5VN+sbUqHowo5d7MJcE3RoKxGvVohKFrQSmhHtXcndkNUMagqh2SgFyUSvAhYnM05kyx9Ao3kwoJEWdOn8H1K5f/P3ujsu1vc3MbxhgMQxT1hPPQQz/AKLYnR0RYrWCMhiePBN4M8/DAeVAllT6IaZmfBaCIgS4ZHBZjhDMOPhD8MCAoXTasIQbORqplf62wjKQSiTfeRujE2e7Ke1uDhFgykDH3BOcCoJQ53mwdVdBATMVOnGT4kRdnqQ7mDW/Scs3wxl5DY7V3JMnHq/R/UYeS86ZqZYBdHbzkc5eBRXn9ct8zvwLQ5a+XmUcS5Yyru3gjH7NdV6ziWgYESAY5hAwdS6LA88FGzHpiAgDu1w2D58OLykpueUlDLkMfgCEFHpoyCGiVvq1iyWEmsdOq1dxtbs8lWjkQkKEnpkL+Lq9xLsLKFUTZvZFVdbHVlsx9VlzLcKWW9VDSPVxIwFBA0ohyCeRhnBLBCGwr0YrSqFZfs3TDYQUEXpd7Zvkpo8q1mdKSFG+0wRAHycirFUdrKod1Oim53FgJJrEZ53nPSkVYBNu6lQYQUOy/ORtNMa7kzgUGJ4qzhkGgAGc0ok5I0IU4jxSXVVgy0FW1g/e+HJ4wkElBW4b2xRCKCE4rVuN8gJQEEpfEHp3k8KUI2HL/GGXArvNUWrCVVlwPl5aTsM4ZYBBiSCVakA+6VAbZyWuiBDgGJMRMkpP7K6vtUUBb+ZonqQ0qHdkrFvTcw55ru7TijmyAyiHIxsYmhmGA771k2nnwzfZ+Y5ZVYuu1Xuu1Xuu1Xuv1Mhx4m7rBdDZDVVdoqhqLdgFjrdjRuPri/PPnH//qg/f/s/Fk/NJsf/aqb37zt+5+9L77/s1LVy5/crKxASiNvusZIOR55GUVtSp2PIpB9piKoSopAoqgk+EMqja8sZb8Vd6ERk9SB8O50JzP5OFCFVVAa83DNqXVWlBoDVSmYmW3iHhs/+0DYTy2cHUNDAPIE3ofUVXcYWqUBmmNwQ+icml0/QA/9BjVDY4cPYwLF57HlUuL/5Pd7/+r1bYdRqMRhs6jqi20smi7lnOzSQstOXCnrVWy2ebBzlUVA4uCKM+Zkh0CklYlR6mUgTHLjXOkbNvU5bVVRrOqJrbobEleKqiSYZQhTWmuQcnEU84ZL9V6LZtQKlncTPJdITnTUklKMu3m2ZNV4WXPs1rJ22aLap7MFPJAi7IZXwJ1pIO1DLjyuiCr0rlLVHbmq+VFksMFSFTi5WuqxZYM6TONQRTwFasvMrFcpRX6sAIlL0qXKJxFUcoQKh4EjDaIisQtwfCdPHzGEKTWiSFkIQzso02inGow6MgnHiLl986vRVqph+FKIzmQ0PlQQMvPlnPKupCWs+amEt2Qg1blMCAr7FQOMVLO3+LGOhoeQfnzSQZXfg85opBIlUEnUoSSAUvloTTTuKUKqpyxyFTFZGmSAwwwsCpfTepPKJnF0gyoxKR0Svyc0UkXC7XVBlHLfUTLAyaKAuIS54SXjLxWutj+rTGIgW7ItiZAhi0F73uAgAiIQqmhSTqcNcc4whCLUm+Mk+5sz12zAqSLOWce2Qqf6efMkVPFLpxjJUkI0UDut04lSECJf6BUXi9aPoeK/irqrDJMqQYhhL4cYCkOAReXR3ZJ8HPGCGFf8y9e3sMEZZYDOt+TrNCrwqnL9WXLCrFYDuMI2rpCRlfiWui7TqrrovAljKjOzCiw2mKIfr2bWK/1Wq/1Wq/1erkOvMMwwBoLqzRCDNz3GAN3FYJ7QTXMYr5ovwRtTjfjyd3v/cD7j5x//vk/ArAwxoBiQvA9tNawrkYMnhUNyqf9GjziJCgZuLRY7vL2USueTnmTKgqfKHBZrWULqGarGfEQoa0q3aY5u5soSW6MN70U6f8U0XSuQqUtfDcgacJkMkHbdYWQ6qxC3/echdQKm5MtVE2Dtm1BwWNU1zh37hy8ZGL//1iZ+Dt0Heqm5nwhsQpWNzW6rocPA7Y2d6A0sL+/B2XAncBixcw1TEmqXbRAvbTSCEm6WMXWyh3KtkB+mGjKGcMkakzJpCpAJc49FluwqPacxYvQ2kIZBZ0YHKZE2c8gnyX4SDbGlIeT/L4loT7LHlf9SVbMkr5MaakOr7B3CpW3ZC7VarIwLQt5M2snLTfLaeUiylndPDDFlVqstPJDJ40bfkilwVnZRDyQyucTEYwMWTElhiWJCp+QVUf+s0ABTjupIqICnXKW62O6EBCDHCwImRu59zdFdhhLxp4d66r0iqZIBRqmNXf6BtnMK6l8ikVaV2WE4ez0Uu3PALr8u5ZDh6zaZaX9TwDBlFrhXyvcACVLomQrpUArf6cSlc7UrKgqJaTttLSOU1oenqmUVgT61Q7ZZZ+yysO24nyzCPcMvgokarE8p3SCMgk6ivMkLTOvmXidlV29UnlDKZbvkwd9JfdOpp+H0JeO4EgELSRipRnsl5Dg82GEvHT5AFApDe1MUWz7vuPDkXwgAT7g0kaX52ShbishicsPnqTrXCMr50sMWb5A1Mr7j6SWijuxm8MoKyRrrj/yYQCRXaqucrCkjCn3v9FyeJEHYCI53FLLA4+VuAH765fKrpXKNMjro5RlCn2klQFbLTP0GWqm+EDKDwFGc8d1Els4NMqz0we/zvCu13qt13qt13q9jJcajyYgSoghoB5VSESoRyMopdG3Lba3dtHOW9SjerS1va2HfkHPPnfeJyDYypbhMkVWicwKHVYZVnr8MIBSlA5PtvZpgSY569C2HZwzICG3Oue44zJSyTrGtNIfS/x53PUZoJWRLFUqypKSGg5trAzeDFjJw1nTNPC9F0XDQlcOfuhgbC2bfkJlKyitsLO7wzkxBbjK4dTJk/+/Kbp/cjXNBE1Vs3ITIrRx6Lo5JpMJhr7Douuwvb0FEDCbzQqAKRNvM2VUSQ0HUeQsrGYVnvO/Qs0leT1XlfNsay31HmllyOOaEtwwWGfldmkTzZtvo6T7OPJ7q3SuBFJLoBbLgTyHlv7WG5i8ZWgspxnFcrz8C23YLhyJJFOqVkbkPOiWqRi5PgcQTVG+SVoZkBXSDTMyq1hpORyqbMtebsxZVccNNGNtlNh8dVGS871FkW39SEznRgJCYIq61oa7og1bMUlyoTGJSgfOfGYVvaoqQCn0XQ9jtNyzMpBKZVESAm+K8h5qI4TzJBlSGZKk64oSyeujQErBWS2HJQnWVtzFLWolH2yxHXW1XzkJrTmPmBDYlVoKiqUaqkDrZEhh4ngqTgOUgZWW/52dr5L1VSvD8lJ1TCX/vvoOL/uFc2c1xwMgB3ECiy+W/WKRL6CuTNEGQvSw1vBzsMD4ROFVplTsZEcBMpSPcu2OkaqutHx/Y4LVFgEekTh+EKQ3XBslNWScyc5nL0ZzdzKJvbfcf2lJj8r3d3YyaLMckFNKK6+cQNdEzdaZaL2KPke2NetlVZTYuzUUEqklXCxxhZMyhonJKZcC8fdkWNgKmDABgULpi84HZVoiMEYbmMogROLvHFipzRb9bBknAHVVQSmDfuhhLLubknx/rTQiAoxzHJ0Jqdih8wprlXe91mu91mu91utluf4PBYESAVsZNmgAAAAASUVORK5CYII=" + }, + { + "id": 2427, + "type": "ResolutionPicker", + "pos": [ + 480, + 1330 + ], + "size": [ + 310, + 60 + ], + "flags": { + "pinned": true + }, + "order": 130, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "resolution", + "type": "COMBO", + "links": [ + 3447 + ], + "slot_index": 0 + } + ], + "title": "Latent Resolution", + "properties": { + "Node name for S&R": "ResolutionPicker", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "1024x1024 (1.0)" + ] + }, + { + "id": 2435, + "type": "SamplerParameterPacker", + "pos": [ + 480, + 620 + ], + "size": [ + 310, + 80 + ], + "flags": { + "pinned": true + }, + "order": 131, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "sampler_params", + "type": "SAMPLER_PARAMS", + "links": [ + 3460 + ], + "slot_index": 0 + } + ], + "title": "Sampler Parameters", + "properties": { + "Node name for S&R": "SamplerParameterPacker", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "deis", + "beta" + ], + "tabContents": [ + { + "sampler": "deis", + "scheduler": "beta" + }, + { + "sampler": "ddim", + "scheduler": "simple" + }, + { + "sampler": "dpmpp_sde", + "scheduler": "karras" + } + ], + "activeTab": 0 + }, + { + "id": 2436, + "type": "SamplerParameterUnpacker", + "pos": [ + 3855.24560546875, + 6490.48388671875 + ], + "size": [ + 370, + 90 + ], + "flags": { + "collapsed": true + }, + "order": 189, + "mode": 0, + "inputs": [ + { + "name": "sampler_params", + "type": "SAMPLER_PARAMS", + "link": 3461 + } + ], + "outputs": [ + { + "name": "sampler", + "type": "COMBO", + "links": [ + 3463 + ], + "slot_index": 0 + }, + { + "name": "sampler_name", + "type": "STRING", + "links": [ + 3465 + ], + "slot_index": 1 + }, + { + "name": "scheduler", + "type": "COMBO", + "links": [ + 3464 + ], + "slot_index": 2 + }, + { + "name": "scheduler_name", + "type": "STRING", + "links": [ + 3466 + ], + "slot_index": 3 + } + ], + "properties": { + "Node name for S&R": "SamplerParameterUnpacker", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 2453, + "type": "ImageSmartSharpen+", + "pos": [ + 1760, + 970 + ], + "size": [ + 310, + 250 + ], + "flags": { + "collapsed": false, + "pinned": true + }, + "order": 270, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 3481 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 3482 + ], + "slot_index": 0 + } + ], + "title": "Sharpen", + "properties": { + "Node name for S&R": "ImageSmartSharpen+", + "enableTabs": true, + "tabWidth": 50, + "tabXOffset": 120, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 1, + 0.75, + 0, + 0.5 + ] + }, + { + "id": 2454, + "type": "Color Correct (mtb)", + "pos": [ + 1760, + 970 + ], + "size": [ + 310, + 250 + ], + "flags": { + "collapsed": false, + "pinned": true + }, + "order": 293, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 3482 + }, + { + "name": "mask", + "type": "MASK", + "link": null, + "shape": 7 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 4606 + ], + "slot_index": 0 + } + ], + "title": "CC", + "properties": { + "Node name for S&R": "Color Correct (mtb)", + "enableTabs": true, + "tabWidth": 50, + "tabXOffset": 175, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + false, + 1, + 1, + 0, + 0, + 0, + 1, + 1 + ] + }, + { + "id": 2464, + "type": "TextVersions", + "pos": [ + 840, + 1130 + ], + "size": [ + 870, + 150 + ], + "flags": { + "collapsed": false, + "pinned": true + }, + "order": 132, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "text", + "type": "STRING", + "links": [ + 3492 + ], + "slot_index": 0 + } + ], + "title": "Prompt", + "properties": { + "Node name for S&R": "TextVersions", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "photo of a sea turtle with a shark in the background" + ], + "color": "#232", + "bgcolor": "#353", + "tabContents": [ + "photo of a sea turtle", + "photo of a sea turtle with a shark in the background", + "", + "", + "" + ], + "activeTab": 1 + }, + { + "id": 2468, + "type": "TextVersions", + "pos": [ + 840, + 1320 + ], + "size": [ + 870, + 80 + ], + "flags": { + "pinned": true + }, + "order": 133, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "text", + "type": "STRING", + "links": [ + 3493 + ], + "slot_index": 0 + } + ], + "title": "Tags", + "properties": { + "Node name for S&R": "TextVersions", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "" + ], + "color": "#2a363b", + "bgcolor": "#3f5159", + "tabContents": [ + "", + "4K resolution, photorealistic rendering, detailed texturing, cinematic lighting.", + "victorian style, baroque", + "", + "" + ], + "activeTab": 0 + }, + { + "id": 2469, + "type": "UNETLoader", + "pos": [ + 3223.2578125, + 190.7760467529297 + ], + "size": [ + 320, + 80 + ], + "flags": {}, + "order": 134, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "links": [ + 3494 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "UNETLoader", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "flux1-dev.sft", + "fp8_e4m3fn" + ] + }, + { + "id": 2473, + "type": "Reroute", + "pos": [ + 4183.396484375, + 4989.3701171875 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 190, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 3528 + } + ], + "outputs": [ + { + "name": "", + "type": "CONTROL_NET", + "links": [ + 3501, + 3519 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 2476, + "type": "Reroute", + "pos": [ + 3833.2578125, + 406.53271484375 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 203, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 4423 + } + ], + "outputs": [ + { + "name": "", + "type": "CLIP", + "links": [ + 3508, + 3509, + 3510 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 2477, + "type": "Reroute", + "pos": [ + 3823.2578125, + 246.53256225585938 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 206, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 4426 + } + ], + "outputs": [ + { + "name": "", + "type": "VAE", + "links": [ + 3512 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 2480, + "type": "Reroute", + "pos": [ + 4933.396484375, + 4989.3701171875 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 257, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 3519 + } + ], + "outputs": [ + { + "name": "", + "type": "CONTROL_NET", + "links": [ + 3520, + 3522 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 2481, + "type": "Reroute", + "pos": [ + 5713.396484375, + 4989.3701171875 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 282, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 3522 + } + ], + "outputs": [ + { + "name": "", + "type": "CONTROL_NET", + "links": [ + 3523, + 3524 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 2482, + "type": "Reroute", + "pos": [ + 6453.396484375, + 4989.3701171875 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 304, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 3524 + } + ], + "outputs": [ + { + "name": "", + "type": "CONTROL_NET", + "links": [ + 3525 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 2483, + "type": "Reroute", + "pos": [ + 4253.396484375, + 5029.3701171875 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 242, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 3527 + } + ], + "outputs": [ + { + "name": "", + "type": "VAE", + "links": [ + 3526 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 2563, + "type": "SimpleComparison+", + "pos": [ + 4413.65283203125, + 6075.1103515625 + ], + "size": [ + 210, + 80 + ], + "flags": { + "collapsed": true + }, + "order": 258, + "mode": 0, + "inputs": [ + { + "name": "a", + "type": "*", + "link": 3647 + }, + { + "name": "b", + "type": "*", + "link": 3645 + } + ], + "outputs": [ + { + "name": "BOOLEAN", + "type": "BOOLEAN", + "links": [ + 3668 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "SimpleComparison+", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "!=" + ] + }, + { + "id": 2564, + "type": "JWFloat", + "pos": [ + 4273.65234375, + 6125.1103515625 + ], + "size": [ + 210, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 135, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "links": [ + 3645 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "JWFloat", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 0 + ] + }, + { + "id": 2565, + "type": "CM_BreakoutVec3", + "pos": [ + 4243.65234375, + 6065.1103515625 + ], + "size": [ + 210, + 70 + ], + "flags": { + "collapsed": true + }, + "order": 191, + "mode": 0, + "inputs": [ + { + "name": "a", + "type": "VEC3", + "link": 3646 + } + ], + "outputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "links": [ + 3647 + ], + "slot_index": 0 + }, + { + "name": "FLOAT", + "type": "FLOAT", + "links": [], + "slot_index": 1 + }, + { + "name": "FLOAT", + "type": "FLOAT", + "links": [], + "slot_index": 2 + } + ], + "properties": { + "Node name for S&R": "CM_BreakoutVec3", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 2568, + "type": "SimpleComparison+", + "pos": [ + 4413.65283203125, + 5885.1103515625 + ], + "size": [ + 210, + 80 + ], + "flags": { + "collapsed": true + }, + "order": 259, + "mode": 0, + "inputs": [ + { + "name": "a", + "type": "*", + "link": 3650 + }, + { + "name": "b", + "type": "*", + "link": 3651 + } + ], + "outputs": [ + { + "name": "BOOLEAN", + "type": "BOOLEAN", + "links": [ + 3664 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "SimpleComparison+", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "!=" + ] + }, + { + "id": 2569, + "type": "JWFloat", + "pos": [ + 4263.65234375, + 5955.1103515625 + ], + "size": [ + 210, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 136, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "links": [ + 3651 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "JWFloat", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 0 + ] + }, + { + "id": 2570, + "type": "CM_BreakoutVec3", + "pos": [ + 4223.65234375, + 5895.1103515625 + ], + "size": [ + 210, + 70 + ], + "flags": { + "collapsed": true + }, + "order": 192, + "mode": 0, + "inputs": [ + { + "name": "a", + "type": "VEC3", + "link": 3652 + } + ], + "outputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "links": [ + 3650 + ], + "slot_index": 0 + }, + { + "name": "FLOAT", + "type": "FLOAT", + "links": [], + "slot_index": 1 + }, + { + "name": "FLOAT", + "type": "FLOAT", + "links": [], + "slot_index": 2 + } + ], + "properties": { + "Node name for S&R": "CM_BreakoutVec3", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 2572, + "type": "SimpleComparison+", + "pos": [ + 4423.65283203125, + 5645.1103515625 + ], + "size": [ + 210, + 80 + ], + "flags": { + "collapsed": true + }, + "order": 260, + "mode": 0, + "inputs": [ + { + "name": "a", + "type": "*", + "link": 3654 + }, + { + "name": "b", + "type": "*", + "link": 3655 + } + ], + "outputs": [ + { + "name": "BOOLEAN", + "type": "BOOLEAN", + "links": [ + 3669 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "SimpleComparison+", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "!=" + ] + }, + { + "id": 2573, + "type": "JWFloat", + "pos": [ + 4293.65234375, + 5675.1103515625 + ], + "size": [ + 210, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 137, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "links": [ + 3655 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "JWFloat", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 0 + ] + }, + { + "id": 2574, + "type": "CM_BreakoutVec3", + "pos": [ + 4253.65234375, + 5625.1103515625 + ], + "size": [ + 210, + 70 + ], + "flags": { + "collapsed": true + }, + "order": 193, + "mode": 0, + "inputs": [ + { + "name": "a", + "type": "VEC3", + "link": 3656 + } + ], + "outputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "links": [ + 3654 + ], + "slot_index": 0 + }, + { + "name": "FLOAT", + "type": "FLOAT", + "links": [], + "slot_index": 1 + }, + { + "name": "FLOAT", + "type": "FLOAT", + "links": [], + "slot_index": 2 + } + ], + "properties": { + "Node name for S&R": "CM_BreakoutVec3", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 2576, + "type": "ImpactControlBridgeFix", + "pos": [ + 4683.65234375, + 5635.1103515625 + ], + "size": [ + 230, + 80 + ], + "flags": { + "collapsed": true + }, + "order": 285, + "mode": 0, + "inputs": [ + { + "name": "value", + "type": "*", + "link": 4000 + }, + { + "name": "mode", + "type": "BOOLEAN", + "link": 3669, + "widget": { + "name": "mode" + } + } + ], + "outputs": [ + { + "name": "value", + "type": "*", + "links": [ + 3663 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "ImpactControlBridgeFix", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + true, + "Bypass" + ] + }, + { + "id": 2577, + "type": "ImpactControlBridgeFix", + "pos": [ + 4663.65234375, + 5915.1103515625 + ], + "size": [ + 250, + 80 + ], + "flags": { + "collapsed": true + }, + "order": 284, + "mode": 0, + "inputs": [ + { + "name": "value", + "type": "*", + "link": 4001 + }, + { + "name": "mode", + "type": "BOOLEAN", + "link": 3664, + "widget": { + "name": "mode" + } + } + ], + "outputs": [ + { + "name": "value", + "type": "*", + "links": [ + 3662 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "ImpactControlBridgeFix", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + true, + "Bypass" + ] + }, + { + "id": 2578, + "type": "ImpactControlBridgeFix", + "pos": [ + 4643.65234375, + 6045.1103515625 + ], + "size": [ + 210, + 80 + ], + "flags": { + "collapsed": true + }, + "order": 283, + "mode": 0, + "inputs": [ + { + "name": "value", + "type": "*", + "link": 4003 + }, + { + "name": "mode", + "type": "BOOLEAN", + "link": 3668, + "widget": { + "name": "mode" + } + } + ], + "outputs": [ + { + "name": "value", + "type": "*", + "links": [ + 3661 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "ImpactControlBridgeFix", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + true, + "Bypass" + ] + }, + { + "id": 2580, + "type": "ImpactControlBridgeFix", + "pos": [ + 4613.396484375, + 5259.3701171875 + ], + "size": [ + 230, + 80 + ], + "flags": { + "collapsed": true + }, + "order": 274, + "mode": 0, + "inputs": [ + { + "name": "value", + "type": "*", + "link": 3680 + }, + { + "name": "mode", + "type": "BOOLEAN", + "link": 3685, + "widget": { + "name": "mode" + } + } + ], + "outputs": [ + { + "name": "value", + "type": "*", + "links": [ + 3681, + 3686 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "ImpactControlBridgeFix", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + true, + "Bypass" + ] + }, + { + "id": 2582, + "type": "SimpleComparison+", + "pos": [ + 4473.396484375, + 5349.3701171875 + ], + "size": [ + 210, + 80 + ], + "flags": { + "collapsed": true + }, + "order": 243, + "mode": 0, + "inputs": [ + { + "name": "a", + "type": "*", + "link": 3684 + }, + { + "name": "b", + "type": "*", + "link": 3683 + } + ], + "outputs": [ + { + "name": "BOOLEAN", + "type": "BOOLEAN", + "links": [ + 3685 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "SimpleComparison+", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "!=" + ] + }, + { + "id": 2583, + "type": "JWFloat", + "pos": [ + 4363.396484375, + 5359.3701171875 + ], + "size": [ + 210, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 138, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "links": [ + 3683 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "JWFloat", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 0 + ] + }, + { + "id": 2584, + "type": "ImpactControlBridgeFix", + "pos": [ + 5343.396484375, + 5229.3701171875 + ], + "size": [ + 230, + 80 + ], + "flags": { + "collapsed": true + }, + "order": 275, + "mode": 0, + "inputs": [ + { + "name": "value", + "type": "*", + "link": 3703 + }, + { + "name": "mode", + "type": "BOOLEAN", + "link": 3687, + "widget": { + "name": "mode" + } + } + ], + "outputs": [ + { + "name": "value", + "type": "*", + "links": [ + 3700, + 3701 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "ImpactControlBridgeFix", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + true, + "Bypass" + ] + }, + { + "id": 2585, + "type": "SimpleComparison+", + "pos": [ + 5213.396484375, + 5349.3701171875 + ], + "size": [ + 210, + 80 + ], + "flags": { + "collapsed": true + }, + "order": 244, + "mode": 0, + "inputs": [ + { + "name": "a", + "type": "*", + "link": 3699 + }, + { + "name": "b", + "type": "*", + "link": 3688 + } + ], + "outputs": [ + { + "name": "BOOLEAN", + "type": "BOOLEAN", + "links": [ + 3687 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "SimpleComparison+", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "!=" + ] + }, + { + "id": 2586, + "type": "JWFloat", + "pos": [ + 5083.396484375, + 5349.3701171875 + ], + "size": [ + 210, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 139, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "links": [ + 3688 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "JWFloat", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 0 + ] + }, + { + "id": 2587, + "type": "ImpactControlBridgeFix", + "pos": [ + 6093.396484375, + 5259.3701171875 + ], + "size": [ + 230, + 80 + ], + "flags": { + "collapsed": true + }, + "order": 276, + "mode": 0, + "inputs": [ + { + "name": "value", + "type": "*", + "link": 3702 + }, + { + "name": "mode", + "type": "BOOLEAN", + "link": 3689, + "widget": { + "name": "mode" + } + } + ], + "outputs": [ + { + "name": "value", + "type": "*", + "links": [ + 3697, + 3698 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "ImpactControlBridgeFix", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + true, + "Bypass" + ] + }, + { + "id": 2588, + "type": "SimpleComparison+", + "pos": [ + 5923.396484375, + 5359.3701171875 + ], + "size": [ + 210, + 80 + ], + "flags": { + "collapsed": true + }, + "order": 245, + "mode": 0, + "inputs": [ + { + "name": "a", + "type": "*", + "link": 3696 + }, + { + "name": "b", + "type": "*", + "link": 3690 + } + ], + "outputs": [ + { + "name": "BOOLEAN", + "type": "BOOLEAN", + "links": [ + 3689 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "SimpleComparison+", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "!=" + ] + }, + { + "id": 2589, + "type": "JWFloat", + "pos": [ + 5813.396484375, + 5359.3701171875 + ], + "size": [ + 210, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 140, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "links": [ + 3690 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "JWFloat", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 0 + ] + }, + { + "id": 2590, + "type": "ImpactControlBridgeFix", + "pos": [ + 6928.259765625, + 5260.18798828125 + ], + "size": [ + 230, + 80 + ], + "flags": { + "collapsed": true + }, + "order": 277, + "mode": 0, + "inputs": [ + { + "name": "value", + "type": "*", + "link": 3704 + }, + { + "name": "mode", + "type": "BOOLEAN", + "link": 3691, + "widget": { + "name": "mode" + } + } + ], + "outputs": [ + { + "name": "value", + "type": "*", + "links": [ + 3694, + 3695 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "ImpactControlBridgeFix", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + true, + "Bypass" + ] + }, + { + "id": 2591, + "type": "SimpleComparison+", + "pos": [ + 6643.396484375, + 5369.3701171875 + ], + "size": [ + 210, + 80 + ], + "flags": { + "collapsed": true + }, + "order": 246, + "mode": 0, + "inputs": [ + { + "name": "a", + "type": "*", + "link": 3693 + }, + { + "name": "b", + "type": "*", + "link": 3692 + } + ], + "outputs": [ + { + "name": "BOOLEAN", + "type": "BOOLEAN", + "links": [ + 3691 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "SimpleComparison+", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "!=" + ] + }, + { + "id": 2592, + "type": "JWFloat", + "pos": [ + 6548.259765625, + 5370.18798828125 + ], + "size": [ + 210, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 141, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "links": [ + 3692 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "JWFloat", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 0 + ] + }, + { + "id": 2600, + "type": "Reroute", + "pos": [ + 7143.2578125, + 474.9197082519531 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 336, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 3717 + } + ], + "outputs": [ + { + "name": "", + "type": "SIGMAS", + "links": [ + 3718 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 2775, + "type": "Reroute", + "pos": [ + 3883.6513671875, + 5865.1103515625 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 194, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 4012 + } + ], + "outputs": [ + { + "name": "", + "type": "IMAGE", + "links": [ + 4000, + 4001, + 4003 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 2826, + "type": "ImageResize+", + "pos": [ + 6813.396484375, + 5219.3701171875 + ], + "size": [ + 320, + 220 + ], + "flags": { + "collapsed": true + }, + "order": 185, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 4073 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 4074, + 4075 + ], + "slot_index": 0 + }, + { + "name": "width", + "type": "INT", + "links": null + }, + { + "name": "height", + "type": "INT", + "links": null + } + ], + "properties": { + "Node name for S&R": "ImageResize+", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 1200, + 1024, + "nearest", + "keep proportion", + "downscale if bigger", + 0 + ] + }, + { + "id": 3004, + "type": "easy bookmark", + "pos": [ + 390, + 60 + ], + "size": [ + 210, + 82 + ], + "flags": { + "collapsed": true + }, + "order": 142, + "mode": 0, + "inputs": [], + "outputs": [], + "title": "🔖 1", + "properties": {}, + "widgets_values": [ + "1", + 1 + ] + }, + { + "id": 3040, + "type": "ControlNetLoader", + "pos": [ + 3220, + 660 + ], + "size": [ + 320, + 60 + ], + "flags": {}, + "order": 143, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "CONTROL_NET", + "type": "CONTROL_NET", + "links": [ + 4592 + ], + "slot_index": 0, + "shape": 3, + "label": "CONTROL_NET" + } + ], + "title": "Load Inpainting Beta ControlNet Model", + "properties": { + "Node name for S&R": "ControlNetLoader", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "FLUX\\FLUX.1-dev-Controlnet-Inpainting-Beta.safetensors" + ] + }, + { + "id": 3055, + "type": "ImagePadForOutpaintMasked", + "pos": [ + 1760, + 970 + ], + "size": [ + 310, + 250 + ], + "flags": { + "pinned": true + }, + "order": 314, + "mode": 4, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 4606 + }, + { + "name": "mask", + "type": "MASK", + "link": null, + "shape": 7 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 4607 + ], + "slot_index": 0 + }, + { + "name": "MASK", + "type": "MASK", + "links": [ + 4608 + ] + } + ], + "title": "Pad", + "properties": { + "Node name for S&R": "ImagePadForOutpaintMasked", + "enableTabs": true, + "tabWidth": 50, + "tabXOffset": 230, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 256, + 0, + 0, + 0, + 40 + ] + }, + { + "id": 3061, + "type": "FluxSamplerParams+", + "pos": [ + 5317.1435546875, + 2858.443115234375 + ], + "size": [ + 250, + 270 + ], + "flags": {}, + "order": 308, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 4548 + }, + { + "name": "conditioning", + "type": "CONDITIONING", + "link": 4588 + }, + { + "name": "latent_image", + "type": "LATENT", + "link": 4639 + }, + { + "name": "loras", + "type": "LORA_PARAMS", + "link": null, + "shape": 7 + }, + { + "name": "seed", + "type": "STRING", + "link": 4552, + "widget": { + "name": "seed" + } + }, + { + "name": "scheduler", + "type": "STRING", + "link": 4553, + "widget": { + "name": "scheduler" + } + }, + { + "name": "steps", + "type": "STRING", + "link": 4554, + "widget": { + "name": "steps" + } + }, + { + "name": "sampler", + "type": "STRING", + "link": 4556, + "widget": { + "name": "sampler" + } + }, + { + "name": "max_shift", + "type": "STRING", + "link": 4557, + "widget": { + "name": "max_shift" + } + } + ], + "outputs": [ + { + "name": "latent", + "type": "LATENT", + "links": [ + 4560 + ], + "slot_index": 0, + "shape": 3 + }, + { + "name": "params", + "type": "SAMPLER_PARAMS", + "links": [], + "slot_index": 1, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "FluxSamplerParams+", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "?", + "euler", + "beta", + "20", + "3.5", + "1.15", + "0.5", + "1.0" + ] + }, + { + "id": 3063, + "type": "VAEDecode", + "pos": [ + 5607.1435546875, + 2728.443115234375 + ], + "size": [ + 170, + 50 + ], + "flags": { + "collapsed": true + }, + "order": 326, + "mode": 0, + "inputs": [ + { + "name": "samples", + "type": "LATENT", + "link": 4560 + }, + { + "name": "vae", + "type": "VAE", + "link": 4561 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 4543 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "VAEDecode", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 3066, + "type": "CR Integer To String", + "pos": [ + 5007.1435546875, + 3128.443115234375 + ], + "size": [ + 320, + 80 + ], + "flags": { + "collapsed": true + }, + "order": 195, + "mode": 0, + "inputs": [ + { + "name": "int_", + "type": "INT", + "link": 4563, + "widget": { + "name": "int_" + } + } + ], + "outputs": [ + { + "name": "STRING", + "type": "STRING", + "links": [ + 4552 + ], + "slot_index": 0, + "shape": 3 + }, + { + "name": "show_help", + "type": "STRING", + "links": null, + "shape": 3 + } + ], + "title": "To String", + "properties": { + "Node name for S&R": "CR Integer To String", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 0 + ] + }, + { + "id": 3070, + "type": "SomethingToString", + "pos": [ + 5007.1435546875, + 3208.443115234375 + ], + "size": [ + 210, + 80 + ], + "flags": { + "collapsed": true + }, + "order": 196, + "mode": 0, + "inputs": [ + { + "name": "input", + "type": "*", + "link": 4564 + } + ], + "outputs": [ + { + "name": "STRING", + "type": "STRING", + "links": [ + 4554 + ], + "slot_index": 0, + "shape": 3 + } + ], + "title": "To String", + "properties": { + "Node name for S&R": "SomethingToString", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "", + "" + ] + }, + { + "id": 3073, + "type": "SomethingToString", + "pos": [ + 5017.1435546875, + 3248.443115234375 + ], + "size": [ + 210, + 80 + ], + "flags": { + "collapsed": true + }, + "order": 197, + "mode": 0, + "inputs": [ + { + "name": "input", + "type": "*", + "link": 4565 + } + ], + "outputs": [ + { + "name": "STRING", + "type": "STRING", + "links": [], + "slot_index": 0, + "shape": 3 + } + ], + "title": "To String", + "properties": { + "Node name for S&R": "SomethingToString", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "", + "" + ] + }, + { + "id": 3078, + "type": "SomethingToString", + "pos": [ + 5017.1435546875, + 3328.443115234375 + ], + "size": [ + 210, + 80 + ], + "flags": { + "collapsed": true + }, + "order": 198, + "mode": 0, + "inputs": [ + { + "name": "input", + "type": "*", + "link": 4566 + } + ], + "outputs": [ + { + "name": "STRING", + "type": "STRING", + "links": [ + 4557 + ], + "slot_index": 0, + "shape": 3 + } + ], + "title": "To String", + "properties": { + "Node name for S&R": "SomethingToString", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "", + "" + ] + }, + { + "id": 3089, + "type": "ControlNetInpaintingAliMamaApply", + "pos": [ + 4247.1435546875, + 2908.443115234375 + ], + "size": [ + 360, + 210 + ], + "flags": { + "collapsed": true + }, + "order": 286, + "mode": 0, + "inputs": [ + { + "name": "positive", + "type": "CONDITIONING", + "link": 4615, + "label": "positive" + }, + { + "name": "negative", + "type": "CONDITIONING", + "link": 4590, + "label": "negative" + }, + { + "name": "control_net", + "type": "CONTROL_NET", + "link": 4596, + "label": "control_net" + }, + { + "name": "vae", + "type": "VAE", + "link": 4591, + "label": "vae" + }, + { + "name": "image", + "type": "IMAGE", + "link": 4597, + "label": "image" + }, + { + "name": "mask", + "type": "MASK", + "link": 4620, + "label": "mask" + } + ], + "outputs": [ + { + "name": "positive", + "type": "CONDITIONING", + "links": [ + 4588 + ], + "slot_index": 0, + "shape": 3, + "label": "positive" + }, + { + "name": "negative", + "type": "CONDITIONING", + "links": [], + "slot_index": 1, + "shape": 3, + "label": "negative" + } + ], + "properties": { + "Node name for S&R": "ControlNetInpaintingAliMamaApply", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 1, + 0, + 1 + ] + }, + { + "id": 3093, + "type": "ConditioningZeroOut", + "pos": [ + 4017.1416015625, + 3098.443115234375 + ], + "size": [ + 320, + 30 + ], + "flags": { + "collapsed": true + }, + "order": 262, + "mode": 0, + "inputs": [ + { + "name": "conditioning", + "type": "CONDITIONING", + "link": 4614 + } + ], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [ + 4590 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "ConditioningZeroOut", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 3107, + "type": "FromBasicPipe", + "pos": [ + 3807.1416015625, + 3008.443115234375 + ], + "size": [ + 240, + 110 + ], + "flags": { + "collapsed": true + }, + "order": 200, + "mode": 0, + "inputs": [ + { + "name": "basic_pipe", + "type": "BASIC_PIPE", + "link": 4613 + } + ], + "outputs": [ + { + "name": "model", + "type": "MODEL", + "links": null + }, + { + "name": "clip", + "type": "CLIP", + "links": null + }, + { + "name": "vae", + "type": "VAE", + "links": [], + "slot_index": 2 + }, + { + "name": "positive", + "type": "CONDITIONING", + "links": [ + 4614, + 4615 + ], + "slot_index": 3 + }, + { + "name": "negative", + "type": "CONDITIONING", + "links": [], + "slot_index": 4 + } + ], + "properties": { + "Node name for S&R": "FromBasicPipe", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 3109, + "type": "EmptySD3LatentImage", + "pos": [ + 4967.1435546875, + 2938.443115234375 + ], + "size": [ + 270, + 70 + ], + "flags": { + "collapsed": true + }, + "order": 261, + "mode": 0, + "inputs": [ + { + "name": "width", + "type": "INT", + "link": 4623, + "widget": { + "name": "width" + } + }, + { + "name": "height", + "type": "INT", + "link": 4624, + "widget": { + "name": "height" + } + }, + { + "name": "batch_size", + "type": "INT", + "link": 4638, + "widget": { + "name": "batch_size" + } + } + ], + "outputs": [ + { + "name": "LATENT", + "type": "LATENT", + "links": [ + 4639 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "EmptySD3LatentImage", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 1024, + 1024, + 1 + ] + }, + { + "id": 3110, + "type": "GetImageSizeAndCount", + "pos": [ + 4597.1435546875, + 2818.443115234375 + ], + "size": [ + 230, + 90 + ], + "flags": { + "collapsed": true + }, + "order": 199, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 4664 + } + ], + "outputs": [ + { + "name": "image", + "type": "IMAGE", + "links": null + }, + { + "name": "width", + "type": "INT", + "links": [ + 4623 + ], + "slot_index": 1 + }, + { + "name": "height", + "type": "INT", + "links": [ + 4624 + ], + "slot_index": 2 + }, + { + "name": "count", + "type": "INT", + "links": [], + "slot_index": 3 + } + ], + "properties": { + "Node name for S&R": "GetImageSizeAndCount", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 3115, + "type": "EmptySD3LatentImage", + "pos": [ + 4215.45458984375, + 2046.50830078125 + ], + "size": [ + 270, + 80 + ], + "flags": { + "collapsed": true + }, + "order": 235, + "mode": 0, + "inputs": [ + { + "name": "width", + "type": "INT", + "link": 4636, + "widget": { + "name": "width" + } + }, + { + "name": "height", + "type": "INT", + "link": 4637, + "widget": { + "name": "height" + } + } + ], + "outputs": [ + { + "name": "LATENT", + "type": "LATENT", + "links": [ + 4649 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "EmptySD3LatentImage", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 1024, + 1024, + 1 + ] + }, + { + "id": 3116, + "type": "GetImageSizeAndCount", + "pos": [ + 3974.998779296875, + 2046.4549560546875 + ], + "size": [ + 230, + 90 + ], + "flags": { + "collapsed": true + }, + "order": 169, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 4635 + } + ], + "outputs": [ + { + "name": "image", + "type": "IMAGE", + "links": null + }, + { + "name": "width", + "type": "INT", + "links": [ + 4636 + ], + "slot_index": 1 + }, + { + "name": "height", + "type": "INT", + "links": [ + 4637 + ], + "slot_index": 2 + }, + { + "name": "count", + "type": "INT", + "links": [], + "slot_index": 3 + } + ], + "properties": { + "Node name for S&R": "GetImageSizeAndCount", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 3119, + "type": "SetLatentNoiseMask", + "pos": [ + 4210.45458984375, + 2138.50830078125 + ], + "size": [ + 200, + 50 + ], + "flags": { + "collapsed": true + }, + "order": 263, + "mode": 0, + "inputs": [ + { + "name": "samples", + "type": "LATENT", + "link": 4651 + }, + { + "name": "mask", + "type": "MASK", + "link": 4658 + } + ], + "outputs": [ + { + "name": "LATENT", + "type": "LATENT", + "links": [ + 4652 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "SetLatentNoiseMask", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 3120, + "type": "VAEEncode", + "pos": [ + 3967.401123046875, + 2134.5556640625 + ], + "size": [ + 210, + 50 + ], + "flags": { + "collapsed": true + }, + "order": 170, + "mode": 0, + "inputs": [ + { + "name": "pixels", + "type": "IMAGE", + "link": 4653 + }, + { + "name": "vae", + "type": "VAE", + "link": 4654 + } + ], + "outputs": [ + { + "name": "LATENT", + "type": "LATENT", + "links": [ + 4651 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "VAEEncode", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 3123, + "type": "ImpactGaussianBlurMask", + "pos": [ + 3940.073974609375, + 1847.580078125 + ], + "size": [ + 320, + 80 + ], + "flags": { + "collapsed": true + }, + "order": 201, + "mode": 0, + "inputs": [ + { + "name": "mask", + "type": "MASK", + "link": 4657 + } + ], + "outputs": [ + { + "name": "MASK", + "type": "MASK", + "links": [ + 4658, + 4681 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "ImpactGaussianBlurMask", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 40, + 10 + ] + }, + { + "id": 3124, + "type": "Switch any [Crystools]", + "pos": [ + 4456.45556640625, + 2439.50830078125 + ], + "size": [ + 210, + 70 + ], + "flags": { + "collapsed": true + }, + "order": 268, + "mode": 0, + "inputs": [ + { + "name": "on_true", + "type": "*", + "link": 4662 + }, + { + "name": "on_false", + "type": "*", + "link": 4660 + }, + { + "name": "boolean", + "type": "BOOLEAN", + "link": 4659, + "widget": { + "name": "boolean" + } + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": [ + 4661 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "Switch any [Crystools]", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + false + ] + }, + { + "id": 3125, + "type": "easy float", + "pos": [ + 4299.60205078125, + 2402.7548828125 + ], + "size": [ + 210, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 144, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "float", + "type": "FLOAT", + "links": [ + 4662 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "easy float", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 3.5 + ] + }, + { + "id": 3127, + "type": "Note", + "pos": [ + 6880, + -310 + ], + "size": [ + 210, + 80 + ], + "flags": {}, + "order": 145, + "mode": 0, + "inputs": [], + "outputs": [], + "properties": {}, + "widgets_values": [ + "optional mask for details.\nuse remap range to guide where you want more detail." + ], + "color": "#432", + "bgcolor": "#653" + }, + { + "id": 3128, + "type": "Note", + "pos": [ + 3230, + 40 + ], + "size": [ + 290, + 70 + ], + "flags": {}, + "order": 146, + "mode": 0, + "inputs": [], + "outputs": [], + "properties": {}, + "widgets_values": [ + "setup your models here.\nfeel free to replace with GGUF models" + ], + "color": "#432", + "bgcolor": "#653" + }, + { + "id": 3130, + "type": "easy bookmark", + "pos": [ + 2600, + -230 + ], + "size": [ + 210, + 82 + ], + "flags": { + "collapsed": true + }, + "order": 147, + "mode": 0, + "inputs": [], + "outputs": [], + "title": "🔖 2", + "properties": {}, + "widgets_values": [ + "2", + 1 + ] + }, + { + "id": 3132, + "type": "RepeatImageBatch", + "pos": [ + 4563.8857421875, + 3611.912841796875 + ], + "size": [ + 210, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 295, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 4667 + }, + { + "name": "amount", + "type": "INT", + "link": 4666, + "widget": { + "name": "amount" + } + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 4668 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "RepeatImageBatch", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 2 + ] + }, + { + "id": 3135, + "type": "Note", + "pos": [ + 5457.8857421875, + 6542.90966796875 + ], + "size": [ + 360, + 60 + ], + "flags": {}, + "order": 148, + "mode": 0, + "inputs": [], + "outputs": [], + "properties": {}, + "widgets_values": [ + "here you can modify the final image that is sent to the preview node. these nodes just pass it though" + ], + "color": "#432", + "bgcolor": "#653" + }, + { + "id": 3150, + "type": "ControlNetInpaintingAliMamaApply", + "pos": [ + 4184, + 1754 + ], + "size": [ + 360, + 210 + ], + "flags": { + "collapsed": true + }, + "order": 288, + "mode": 0, + "inputs": [ + { + "name": "positive", + "type": "CONDITIONING", + "link": 4670, + "label": "positive" + }, + { + "name": "negative", + "type": "CONDITIONING", + "link": 4671, + "label": "negative" + }, + { + "name": "control_net", + "type": "CONTROL_NET", + "link": 4672, + "label": "control_net" + }, + { + "name": "vae", + "type": "VAE", + "link": 4679, + "label": "vae" + }, + { + "name": "image", + "type": "IMAGE", + "link": 4680, + "label": "image" + }, + { + "name": "mask", + "type": "MASK", + "link": 4681, + "label": "mask" + } + ], + "outputs": [ + { + "name": "positive", + "type": "CONDITIONING", + "links": [ + 4678 + ], + "slot_index": 0, + "shape": 3, + "label": "positive" + }, + { + "name": "negative", + "type": "CONDITIONING", + "links": [], + "slot_index": 1, + "shape": 3, + "label": "negative" + } + ], + "properties": { + "Node name for S&R": "ControlNetInpaintingAliMamaApply", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 1, + 0, + 1 + ] + }, + { + "id": 3151, + "type": "ConditioningZeroOut", + "pos": [ + 3966.073974609375, + 1919.5799560546875 + ], + "size": [ + 320, + 30 + ], + "flags": { + "collapsed": true + }, + "order": 264, + "mode": 0, + "inputs": [ + { + "name": "conditioning", + "type": "CONDITIONING", + "link": 4673 + } + ], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [ + 4671 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "ConditioningZeroOut", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 3154, + "type": "FromBasicPipe", + "pos": [ + 3764.073486328125, + 1920.5799560546875 + ], + "size": [ + 240, + 110 + ], + "flags": { + "collapsed": true + }, + "order": 202, + "mode": 0, + "inputs": [ + { + "name": "basic_pipe", + "type": "BASIC_PIPE", + "link": 4674 + } + ], + "outputs": [ + { + "name": "model", + "type": "MODEL", + "links": null + }, + { + "name": "clip", + "type": "CLIP", + "links": null + }, + { + "name": "vae", + "type": "VAE", + "links": [], + "slot_index": 2 + }, + { + "name": "positive", + "type": "CONDITIONING", + "links": [ + 4670, + 4673 + ], + "slot_index": 3 + }, + { + "name": "negative", + "type": "CONDITIONING", + "links": [], + "slot_index": 4 + } + ], + "properties": { + "Node name for S&R": "FromBasicPipe", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 3155, + "type": "Switch any [Crystools]", + "pos": [ + 4542.45556640625, + 1782.50830078125 + ], + "size": [ + 210, + 70 + ], + "flags": { + "collapsed": true + }, + "order": 310, + "mode": 0, + "inputs": [ + { + "name": "on_true", + "type": "*", + "link": 4678 + }, + { + "name": "on_false", + "type": "*", + "link": 4675 + }, + { + "name": "boolean", + "type": "BOOLEAN", + "link": 4677, + "widget": { + "name": "boolean" + } + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": [ + 4676 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "Switch any [Crystools]", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + false + ] + }, + { + "id": 3156, + "type": "Note", + "pos": [ + 2830, + 570 + ], + "size": [ + 370, + 160 + ], + "flags": {}, + "order": 149, + "mode": 0, + "inputs": [], + "outputs": [], + "properties": {}, + "widgets_values": [ + "ControlNets required\n\nhttps://huggingface.co/Shakker-Labs/FLUX.1-dev-ControlNet-Union-Pro/tree/main\n\n\nhttps://huggingface.co/alimama-creative/FLUX.1-dev-Controlnet-Inpainting-Beta/tree/main" + ], + "color": "#432", + "bgcolor": "#653" + }, + { + "id": 3000, + "type": "PreviewImage", + "pos": [ + 840, + 150 + ], + "size": [ + 870, + 920 + ], + "flags": { + "collapsed": false, + "pinned": true + }, + "order": 156, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 4414 + } + ], + "outputs": [], + "title": "Img Preview", + "properties": { + "Node name for S&R": "PreviewImage", + "enableTabs": true, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": true, + "secondTabText": "Img Compare", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [], + "color": "#222", + "bgcolor": "#000" + }, + { + "id": 2214, + "type": "LoadImage", + "pos": [ + 1760, + 170 + ], + "size": [ + 310, + 410 + ], + "flags": { + "collapsed": false, + "pinned": true + }, + "order": 150, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [], + "slot_index": 0, + "shape": 3 + }, + { + "name": "MASK", + "type": "MASK", + "links": [ + 4515 + ], + "slot_index": 1, + "shape": 3 + } + ], + "title": "Img Mask", + "properties": { + "Node name for S&R": "LoadImage", + "enableTabs": true, + "tabWidth": 50, + "tabXOffset": 65, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "clipspace/clipspace-mask-20915175.png [input]", + "image" + ] + }, + { + "id": 2774, + "type": "LoadImage", + "pos": [ + 1760, + 170 + ], + "size": [ + 310, + 410 + ], + "flags": { + "collapsed": false, + "pinned": true + }, + "order": 151, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 4469 + ], + "slot_index": 0 + }, + { + "name": "MASK", + "type": "MASK", + "links": null + } + ], + "title": "Img CN", + "properties": { + "Node name for S&R": "LoadImage", + "enableTabs": true, + "tabWidth": 50, + "tabXOffset": 120, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "ComfyUI_temp_tqckc_00117_.png [temp]", + "image" + ], + "color": "#432", + "bgcolor": "#653" + }, + { + "id": 2219, + "type": "LoadImage", + "pos": [ + 1760, + 170 + ], + "size": [ + 310, + 410 + ], + "flags": { + "collapsed": false, + "pinned": true + }, + "order": 152, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 4446 + ], + "slot_index": 0, + "label": "IMAGE" + }, + { + "name": "MASK", + "type": "MASK", + "links": [], + "slot_index": 1 + } + ], + "title": "Img Load", + "properties": { + "Node name for S&R": "LoadImage", + "enableTabs": true, + "tabWidth": 50, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "clipspace/clipspace-mask-20860894.png [input]", + "image" + ], + "color": "#232", + "bgcolor": "#353" + } + ], + "links": [ + [ + 1118, + 589, + 0, + 590, + 1, + "GUIDER" + ], + [ + 1120, + 593, + 0, + 590, + 3, + "SIGMAS" + ], + [ + 1123, + 586, + 0, + 593, + 0, + "MODEL" + ], + [ + 1187, + 641, + 0, + 644, + 0, + "*" + ], + [ + 1308, + 705, + 0, + 418, + 2, + "INT" + ], + [ + 1309, + 703, + 1, + 706, + 0, + "INT" + ], + [ + 1310, + 706, + 0, + 418, + 3, + "INT" + ], + [ + 1360, + 596, + 0, + 591, + 0, + "INT" + ], + [ + 1371, + 591, + 0, + 590, + 0, + "NOISE" + ], + [ + 1372, + 717, + 0, + 711, + 0, + "*" + ], + [ + 1424, + 586, + 0, + 589, + 0, + "MODEL" + ], + [ + 1442, + 724, + 0, + 777, + 2, + "STRING" + ], + [ + 1443, + 793, + 0, + 777, + 1, + "STRING" + ], + [ + 1474, + 590, + 1, + 609, + 0, + "LATENT" + ], + [ + 1489, + 586, + 0, + 837, + 0, + "*" + ], + [ + 1490, + 837, + 0, + 834, + 0, + "*" + ], + [ + 1538, + 609, + 0, + 715, + 0, + "IMAGE" + ], + [ + 1546, + 777, + 0, + 641, + 3, + "CONDITIONING" + ], + [ + 1584, + 777, + 0, + 836, + 0, + "*" + ], + [ + 1585, + 836, + 0, + 921, + 0, + "*" + ], + [ + 1589, + 922, + 0, + 925, + 0, + "*" + ], + [ + 1599, + 933, + 0, + 932, + 0, + "BASIC_PIPE" + ], + [ + 1608, + 932, + 1, + 697, + 0, + "MODEL" + ], + [ + 1644, + 945, + 0, + 641, + 1, + "CLIP" + ], + [ + 1680, + 965, + 0, + 963, + 1, + "VAE" + ], + [ + 1744, + 713, + 0, + 1026, + 0, + "IMAGE" + ], + [ + 1745, + 1026, + 0, + 1023, + 0, + "IMAGE" + ], + [ + 1769, + 1052, + 0, + 1051, + 3, + "SIGMAS" + ], + [ + 1770, + 1054, + 0, + 1053, + 0, + "NOISE" + ], + [ + 1772, + 1055, + 0, + 1053, + 4, + "LATENT" + ], + [ + 1773, + 1051, + 0, + 1055, + 0, + "LATENT" + ], + [ + 1775, + 1057, + 0, + 1056, + 0, + "INT" + ], + [ + 1776, + 1056, + 0, + 1051, + 0, + "NOISE" + ], + [ + 1783, + 1060, + 0, + 1061, + 0, + "*" + ], + [ + 1786, + 1064, + 0, + 1060, + 1, + "VAE" + ], + [ + 1787, + 1053, + 1, + 1060, + 0, + "LATENT" + ], + [ + 1798, + 963, + 0, + 1073, + 0, + "LATENT" + ], + [ + 1800, + 1073, + 0, + 1072, + 2, + "LATENT" + ], + [ + 1802, + 1074, + 0, + 1075, + 0, + "*" + ], + [ + 1803, + 1072, + 0, + 1074, + 0, + "LATENT" + ], + [ + 1804, + 965, + 0, + 1074, + 1, + "VAE" + ], + [ + 1811, + 1085, + 0, + 1072, + 4, + "STRING" + ], + [ + 1813, + 1086, + 0, + 1088, + 0, + "INT" + ], + [ + 1814, + 1088, + 0, + 1072, + 5, + "STRING" + ], + [ + 1859, + 1113, + 0, + 716, + 0, + "IMAGE" + ], + [ + 1863, + 1103, + 0, + 1116, + 0, + "*" + ], + [ + 1864, + 1117, + 0, + 586, + 0, + "MODEL" + ], + [ + 1867, + 1128, + 0, + 1129, + 0, + "IMAGE" + ], + [ + 1868, + 1129, + 0, + 1130, + 0, + "IMAGE" + ], + [ + 1871, + 1129, + 0, + 1131, + 0, + "IMAGE" + ], + [ + 1879, + 1136, + 0, + 1134, + 1, + "VAE" + ], + [ + 1920, + 1162, + 0, + 1073, + 1, + "INT" + ], + [ + 1923, + 1134, + 0, + 1128, + 0, + "IMAGE" + ], + [ + 1952, + 1219, + 0, + 1085, + 0, + "FLOAT" + ], + [ + 2000, + 1274, + 0, + 1217, + 0, + "FLOAT" + ], + [ + 2001, + 1279, + 0, + 1281, + 0, + "*" + ], + [ + 2002, + 1278, + 0, + 1280, + 0, + "*" + ], + [ + 2003, + 1282, + 0, + 1285, + 0, + "*" + ], + [ + 2004, + 1285, + 0, + 1072, + 7, + "STRING" + ], + [ + 2005, + 1286, + 0, + 1072, + 6, + "STRING" + ], + [ + 2006, + 1287, + 0, + 1288, + 0, + "*" + ], + [ + 2007, + 1288, + 0, + 1072, + 8, + "STRING" + ], + [ + 2012, + 1297, + 0, + 1292, + 4, + "STRING" + ], + [ + 2013, + 1299, + 0, + 1292, + 5, + "STRING" + ], + [ + 2014, + 1304, + 0, + 1292, + 6, + "STRING" + ], + [ + 2015, + 1303, + 0, + 1292, + 7, + "STRING" + ], + [ + 2016, + 1306, + 0, + 1292, + 8, + "STRING" + ], + [ + 2018, + 1300, + 0, + 1293, + 1, + "INT" + ], + [ + 2019, + 1292, + 0, + 1294, + 0, + "LATENT" + ], + [ + 2020, + 1291, + 0, + 1294, + 1, + "VAE" + ], + [ + 2022, + 1301, + 0, + 1297, + 0, + "FLOAT" + ], + [ + 2023, + 1298, + 0, + 1299, + 0, + "INT" + ], + [ + 2024, + 1302, + 0, + 1303, + 0, + "*" + ], + [ + 2030, + 1294, + 0, + 712, + 0, + "IMAGE" + ], + [ + 2034, + 1312, + 0, + 429, + 9, + "FLOAT" + ], + [ + 2035, + 1313, + 0, + 429, + 7, + "INT" + ], + [ + 2037, + 1317, + 0, + 593, + 1, + "COMBO" + ], + [ + 2038, + 1318, + 0, + 593, + 2, + "INT" + ], + [ + 2039, + 1319, + 0, + 777, + 3, + "FLOAT" + ], + [ + 2055, + 1328, + 0, + 1262, + 0, + "COMBO" + ], + [ + 2063, + 703, + 0, + 705, + 0, + "INT" + ], + [ + 2064, + 1340, + 0, + 705, + 1, + "INT" + ], + [ + 2065, + 1340, + 0, + 706, + 1, + "INT" + ], + [ + 2071, + 1323, + 0, + 963, + 0, + "IMAGE" + ], + [ + 2073, + 1346, + 0, + 1345, + 0, + "IMAGE" + ], + [ + 2087, + 834, + 0, + 1358, + 0, + "MODEL" + ], + [ + 2088, + 921, + 0, + 1358, + 1, + "CONDITIONING" + ], + [ + 2089, + 1358, + 0, + 1051, + 1, + "GUIDER" + ], + [ + 2090, + 1358, + 0, + 1053, + 1, + "GUIDER" + ], + [ + 2091, + 593, + 0, + 1359, + 0, + "*" + ], + [ + 2092, + 1359, + 0, + 1052, + 0, + "SIGMAS" + ], + [ + 2105, + 1099, + 0, + 1051, + 4, + "LATENT" + ], + [ + 2163, + 1339, + 0, + 1387, + 0, + "UPSCALE_MODEL" + ], + [ + 2165, + 1388, + 0, + 1387, + 1, + "IMAGE" + ], + [ + 2166, + 1388, + 0, + 703, + 0, + "IMAGE" + ], + [ + 2169, + 697, + 0, + 1389, + 1, + "MODEL" + ], + [ + 2171, + 932, + 5, + 1389, + 3, + "CONDITIONING" + ], + [ + 2172, + 932, + 3, + 1389, + 4, + "VAE" + ], + [ + 2173, + 708, + 0, + 1389, + 5, + "INT" + ], + [ + 2174, + 1218, + 0, + 1389, + 8, + "FLOAT" + ], + [ + 2175, + 1308, + 0, + 1389, + 6, + "INT" + ], + [ + 2176, + 1311, + 0, + 1389, + 7, + "COMBO" + ], + [ + 2177, + 1389, + 0, + 729, + 0, + "IMAGE" + ], + [ + 2180, + 1387, + 0, + 418, + 0, + "IMAGE" + ], + [ + 2202, + 1325, + 0, + 1404, + 0, + "IMAGE" + ], + [ + 2205, + 429, + 0, + 1408, + 0, + "IMAGE" + ], + [ + 2206, + 1408, + 0, + 873, + 0, + "IMAGE" + ], + [ + 2209, + 1404, + 0, + 1411, + 0, + "IMAGE" + ], + [ + 2210, + 1411, + 0, + 1405, + 0, + "*" + ], + [ + 2211, + 1411, + 0, + 429, + 0, + "IMAGE" + ], + [ + 2212, + 1410, + 0, + 1404, + 1, + "INT" + ], + [ + 2231, + 1406, + 0, + 1405, + 1, + "INT" + ], + [ + 2243, + 1405, + 0, + 429, + 6, + "INT" + ], + [ + 2278, + 1470, + 0, + 1134, + 0, + "LATENT" + ], + [ + 2305, + 1488, + 0, + 1095, + 0, + "INT" + ], + [ + 2313, + 1262, + 0, + 429, + 8, + "COMBO" + ], + [ + 2333, + 1515, + 0, + 1500, + 0, + "COMBO" + ], + [ + 2334, + 1500, + 0, + 590, + 2, + "SAMPLER" + ], + [ + 2335, + 1500, + 0, + 1518, + 0, + "*" + ], + [ + 2337, + 1520, + 0, + 1051, + 2, + "SAMPLER" + ], + [ + 2338, + 1520, + 0, + 1053, + 2, + "SAMPLER" + ], + [ + 2341, + 1523, + 0, + 429, + 10, + "COMBO" + ], + [ + 2342, + 1524, + 0, + 1389, + 9, + "COMBO" + ], + [ + 2343, + 1525, + 0, + 1292, + 9, + "STRING" + ], + [ + 2344, + 1526, + 0, + 1072, + 9, + "STRING" + ], + [ + 2361, + 1534, + 0, + 1330, + 0, + "*" + ], + [ + 2380, + 726, + 0, + 624, + 0, + "IMAGE" + ], + [ + 2399, + 1600, + 0, + 624, + 1, + "STRING" + ], + [ + 2400, + 1602, + 0, + 1600, + 0, + "STRING" + ], + [ + 2404, + 1618, + 0, + 586, + 3, + "FLOAT" + ], + [ + 2406, + 1620, + 0, + 697, + 1, + "FLOAT" + ], + [ + 2407, + 1621, + 0, + 1622, + 0, + "*" + ], + [ + 2408, + 1622, + 0, + 1292, + 10, + "STRING" + ], + [ + 2409, + 1623, + 0, + 1624, + 0, + "*" + ], + [ + 2410, + 1624, + 0, + 1072, + 10, + "STRING" + ], + [ + 2412, + 1627, + 0, + 1055, + 1, + "MASK" + ], + [ + 2418, + 1629, + 0, + 1617, + 0, + "FLOAT" + ], + [ + 2471, + 1677, + 0, + 1679, + 0, + "*" + ], + [ + 2473, + 1683, + 0, + 1679, + 1, + "*" + ], + [ + 2792, + 1344, + 0, + 1342, + 0, + "IMAGE" + ], + [ + 2793, + 1342, + 0, + 1343, + 0, + "IMAGE" + ], + [ + 3092, + 1106, + 0, + 1103, + 0, + "MODEL" + ], + [ + 3152, + 645, + 0, + 429, + 2, + "BASIC_PIPE" + ], + [ + 3212, + 2211, + 0, + 641, + 4, + "CONDITIONING" + ], + [ + 3214, + 2217, + 0, + 1090, + 0, + "INT" + ], + [ + 3215, + 2218, + 0, + 1331, + 0, + "INT" + ], + [ + 3263, + 2260, + 1, + 2257, + 6, + "FLOAT" + ], + [ + 3264, + 2260, + 2, + 2257, + 7, + "FLOAT" + ], + [ + 3269, + 2264, + 0, + 2265, + 0, + "BASIC_PIPE" + ], + [ + 3293, + 1117, + 0, + 641, + 0, + "MODEL" + ], + [ + 3295, + 2281, + 0, + 2285, + 0, + "IMAGE" + ], + [ + 3296, + 2279, + 0, + 2287, + 0, + "*" + ], + [ + 3297, + 2278, + 0, + 2288, + 0, + "*" + ], + [ + 3299, + 2258, + 0, + 2290, + 0, + "*" + ], + [ + 3300, + 2291, + 0, + 2260, + 0, + "VEC3" + ], + [ + 3302, + 2257, + 0, + 2292, + 0, + "CONDITIONING" + ], + [ + 3303, + 2257, + 1, + 2292, + 1, + "CONDITIONING" + ], + [ + 3308, + 2292, + 0, + 2293, + 0, + "CONDITIONING" + ], + [ + 3309, + 2292, + 1, + 2293, + 1, + "CONDITIONING" + ], + [ + 3310, + 2294, + 0, + 2292, + 3, + "IMAGE" + ], + [ + 3311, + 2295, + 0, + 2293, + 3, + "IMAGE" + ], + [ + 3312, + 2297, + 0, + 2296, + 0, + "VEC3" + ], + [ + 3316, + 2296, + 1, + 2292, + 6, + "FLOAT" + ], + [ + 3317, + 2296, + 2, + 2292, + 7, + "FLOAT" + ], + [ + 3318, + 2299, + 0, + 2298, + 0, + "VEC3" + ], + [ + 3320, + 2298, + 1, + 2293, + 6, + "FLOAT" + ], + [ + 3321, + 2298, + 2, + 2293, + 7, + "FLOAT" + ], + [ + 3329, + 2293, + 0, + 2302, + 0, + "CONDITIONING" + ], + [ + 3330, + 2293, + 1, + 2302, + 1, + "CONDITIONING" + ], + [ + 3331, + 2304, + 0, + 2303, + 0, + "VEC3" + ], + [ + 3333, + 2303, + 1, + 2302, + 6, + "FLOAT" + ], + [ + 3334, + 2303, + 2, + 2302, + 7, + "FLOAT" + ], + [ + 3343, + 2308, + 0, + 2302, + 2, + "CONTROL_NET" + ], + [ + 3344, + 2307, + 0, + 2293, + 2, + "CONTROL_NET" + ], + [ + 3345, + 2306, + 0, + 2292, + 2, + "CONTROL_NET" + ], + [ + 3347, + 2310, + 0, + 2311, + 0, + "*" + ], + [ + 3348, + 2312, + 0, + 2313, + 0, + "*" + ], + [ + 3349, + 2314, + 0, + 2315, + 0, + "*" + ], + [ + 3354, + 2275, + 0, + 589, + 1, + "CONDITIONING" + ], + [ + 3356, + 2317, + 0, + 2273, + 0, + "CONDITIONING" + ], + [ + 3362, + 2328, + 0, + 1072, + 1, + "CONDITIONING" + ], + [ + 3363, + 1079, + 0, + 1072, + 0, + "MODEL" + ], + [ + 3364, + 2329, + 0, + 1292, + 0, + "MODEL" + ], + [ + 3366, + 2332, + 0, + 1389, + 2, + "CONDITIONING" + ], + [ + 3368, + 2308, + 0, + 2333, + 1, + "CONTROL_NET" + ], + [ + 3371, + 2303, + 1, + 2333, + 6, + "FLOAT" + ], + [ + 3372, + 2303, + 2, + 2333, + 7, + "FLOAT" + ], + [ + 3376, + 2336, + 0, + 2335, + 0, + "MASK" + ], + [ + 3377, + 2337, + 0, + 2336, + 0, + "MASK" + ], + [ + 3378, + 2341, + 0, + 2340, + 0, + "SEGS" + ], + [ + 3379, + 2340, + 0, + 2339, + 0, + "SEGS" + ], + [ + 3380, + 2339, + 0, + 2333, + 0, + "SEGS" + ], + [ + 3382, + 2343, + 0, + 429, + 1, + "SEGS" + ], + [ + 3384, + 2306, + 0, + 2340, + 1, + "CONTROL_NET" + ], + [ + 3385, + 2307, + 0, + 2339, + 1, + "CONTROL_NET" + ], + [ + 3390, + 2260, + 1, + 2341, + 6, + "FLOAT" + ], + [ + 3391, + 2260, + 2, + 2341, + 7, + "FLOAT" + ], + [ + 3392, + 2270, + 0, + 2341, + 3, + "IMAGE" + ], + [ + 3394, + 2296, + 1, + 2340, + 6, + "FLOAT" + ], + [ + 3395, + 2296, + 2, + 2340, + 7, + "FLOAT" + ], + [ + 3396, + 2294, + 0, + 2340, + 3, + "IMAGE" + ], + [ + 3398, + 2298, + 1, + 2339, + 6, + "FLOAT" + ], + [ + 3399, + 2298, + 2, + 2339, + 7, + "FLOAT" + ], + [ + 3400, + 2295, + 0, + 2339, + 3, + "IMAGE" + ], + [ + 3402, + 2333, + 0, + 2344, + 0, + "SEGS" + ], + [ + 3403, + 2344, + 0, + 2342, + 0, + "SEGS" + ], + [ + 3405, + 2345, + 0, + 2341, + 4, + "VAE" + ], + [ + 3406, + 2345, + 0, + 2257, + 4, + "VAE" + ], + [ + 3408, + 2346, + 0, + 2347, + 0, + "*" + ], + [ + 3409, + 2347, + 0, + 2348, + 0, + "*" + ], + [ + 3410, + 2346, + 0, + 2292, + 4, + "VAE" + ], + [ + 3411, + 2346, + 0, + 2340, + 4, + "VAE" + ], + [ + 3412, + 2347, + 0, + 2339, + 4, + "VAE" + ], + [ + 3413, + 2347, + 0, + 2293, + 4, + "VAE" + ], + [ + 3414, + 2348, + 0, + 2333, + 4, + "VAE" + ], + [ + 3415, + 2348, + 0, + 2302, + 4, + "VAE" + ], + [ + 3418, + 2284, + 0, + 2341, + 1, + "CONTROL_NET" + ], + [ + 3419, + 2284, + 0, + 2257, + 2, + "CONTROL_NET" + ], + [ + 3425, + 2364, + 0, + 2334, + 1, + "IMAGE" + ], + [ + 3426, + 717, + 0, + 2334, + 0, + "IMAGE" + ], + [ + 3432, + 1115, + 0, + 1103, + 1, + "CLIP" + ], + [ + 3433, + 418, + 0, + 1392, + 0, + "IMAGE" + ], + [ + 3447, + 2427, + 0, + 2428, + 0, + "*" + ], + [ + 3448, + 2429, + 0, + 1090, + 1, + "COMBO" + ], + [ + 3449, + 1090, + 1, + 586, + 1, + "INT" + ], + [ + 3450, + 1090, + 2, + 586, + 2, + "INT" + ], + [ + 3460, + 2435, + 0, + 2437, + 0, + "*" + ], + [ + 3461, + 2438, + 0, + 2436, + 0, + "SAMPLER_PARAMS" + ], + [ + 3463, + 2436, + 0, + 1508, + 0, + "COMBO" + ], + [ + 3464, + 2436, + 2, + 1271, + 0, + "COMBO" + ], + [ + 3465, + 2436, + 1, + 1510, + 0, + "STRING" + ], + [ + 3466, + 2436, + 3, + 1272, + 0, + "STRING" + ], + [ + 3481, + 1343, + 0, + 2453, + 0, + "IMAGE" + ], + [ + 3482, + 2453, + 0, + 2454, + 0, + "IMAGE" + ], + [ + 3492, + 2464, + 0, + 723, + 0, + "STRING" + ], + [ + 3493, + 2468, + 0, + 788, + 0, + "STRING" + ], + [ + 3494, + 2469, + 0, + 1105, + 0, + "MODEL" + ], + [ + 3499, + 2472, + 0, + 609, + 1, + "VAE" + ], + [ + 3501, + 2473, + 0, + 2284, + 0, + "CONTROL_NET" + ], + [ + 3505, + 2262, + 0, + 2475, + 0, + "*" + ], + [ + 3508, + 2476, + 0, + 777, + 0, + "CLIP" + ], + [ + 3509, + 2476, + 0, + 2211, + 0, + "CLIP" + ], + [ + 3510, + 2476, + 0, + 945, + 0, + "*" + ], + [ + 3512, + 2477, + 0, + 641, + 2, + "VAE" + ], + [ + 3517, + 2265, + 3, + 2257, + 0, + "CONDITIONING" + ], + [ + 3518, + 2265, + 4, + 2257, + 1, + "CONDITIONING" + ], + [ + 3519, + 2473, + 0, + 2480, + 0, + "*" + ], + [ + 3520, + 2480, + 0, + 2306, + 0, + "CONTROL_NET" + ], + [ + 3521, + 2345, + 0, + 2346, + 0, + "*" + ], + [ + 3522, + 2480, + 0, + 2481, + 0, + "*" + ], + [ + 3523, + 2481, + 0, + 2307, + 0, + "CONTROL_NET" + ], + [ + 3524, + 2481, + 0, + 2482, + 0, + "*" + ], + [ + 3525, + 2482, + 0, + 2308, + 0, + "CONTROL_NET" + ], + [ + 3526, + 2483, + 0, + 2345, + 0, + "*" + ], + [ + 3527, + 2265, + 2, + 2483, + 0, + "*" + ], + [ + 3528, + 2474, + 0, + 2473, + 0, + "*" + ], + [ + 3543, + 1090, + 1, + 2507, + 0, + "*" + ], + [ + 3544, + 1090, + 2, + 2508, + 0, + "*" + ], + [ + 3645, + 2564, + 0, + 2563, + 1, + "*" + ], + [ + 3646, + 2566, + 0, + 2565, + 0, + "VEC3" + ], + [ + 3647, + 2565, + 0, + 2563, + 0, + "*" + ], + [ + 3650, + 2570, + 0, + 2568, + 0, + "*" + ], + [ + 3651, + 2569, + 0, + 2568, + 1, + "*" + ], + [ + 3652, + 2571, + 0, + 2570, + 0, + "VEC3" + ], + [ + 3654, + 2574, + 0, + 2572, + 0, + "*" + ], + [ + 3655, + 2573, + 0, + 2572, + 1, + "*" + ], + [ + 3656, + 2575, + 0, + 2574, + 0, + "VEC3" + ], + [ + 3661, + 2578, + 0, + 2276, + 0, + "IMAGE" + ], + [ + 3662, + 2577, + 0, + 2278, + 0, + "IMAGE" + ], + [ + 3663, + 2576, + 0, + 2279, + 0, + "IMAGE" + ], + [ + 3664, + 2568, + 0, + 2577, + 1, + "BOOLEAN" + ], + [ + 3668, + 2563, + 0, + 2578, + 1, + "BOOLEAN" + ], + [ + 3669, + 2572, + 0, + 2576, + 1, + "BOOLEAN" + ], + [ + 3673, + 2335, + 0, + 2341, + 0, + "SEGS" + ], + [ + 3678, + 2270, + 0, + 2257, + 3, + "IMAGE" + ], + [ + 3680, + 2260, + 0, + 2580, + 0, + "*" + ], + [ + 3681, + 2580, + 0, + 2257, + 5, + "FLOAT" + ], + [ + 3683, + 2583, + 0, + 2582, + 1, + "*" + ], + [ + 3684, + 2260, + 0, + 2582, + 0, + "*" + ], + [ + 3685, + 2582, + 0, + 2580, + 1, + "BOOLEAN" + ], + [ + 3686, + 2580, + 0, + 2341, + 5, + "FLOAT" + ], + [ + 3687, + 2585, + 0, + 2584, + 1, + "BOOLEAN" + ], + [ + 3688, + 2586, + 0, + 2585, + 1, + "*" + ], + [ + 3689, + 2588, + 0, + 2587, + 1, + "BOOLEAN" + ], + [ + 3690, + 2589, + 0, + 2588, + 1, + "*" + ], + [ + 3691, + 2591, + 0, + 2590, + 1, + "BOOLEAN" + ], + [ + 3692, + 2592, + 0, + 2591, + 1, + "*" + ], + [ + 3693, + 2303, + 0, + 2591, + 0, + "*" + ], + [ + 3694, + 2590, + 0, + 2302, + 5, + "FLOAT" + ], + [ + 3695, + 2590, + 0, + 2333, + 5, + "FLOAT" + ], + [ + 3696, + 2298, + 0, + 2588, + 0, + "*" + ], + [ + 3697, + 2587, + 0, + 2293, + 5, + "FLOAT" + ], + [ + 3698, + 2587, + 0, + 2339, + 5, + "FLOAT" + ], + [ + 3699, + 2296, + 0, + 2585, + 0, + "*" + ], + [ + 3700, + 2584, + 0, + 2340, + 5, + "FLOAT" + ], + [ + 3701, + 2584, + 0, + 2292, + 5, + "FLOAT" + ], + [ + 3702, + 2298, + 0, + 2587, + 0, + "*" + ], + [ + 3703, + 2296, + 0, + 2584, + 0, + "*" + ], + [ + 3704, + 2303, + 0, + 2590, + 0, + "*" + ], + [ + 3717, + 1052, + 1, + 2600, + 0, + "*" + ], + [ + 3718, + 2600, + 0, + 1053, + 3, + "SIGMAS" + ], + [ + 3722, + 1051, + 1, + 1470, + 0, + "*" + ], + [ + 3723, + 1130, + 0, + 1627, + 0, + "*" + ], + [ + 4000, + 2775, + 0, + 2576, + 0, + "*" + ], + [ + 4001, + 2775, + 0, + 2577, + 0, + "*" + ], + [ + 4003, + 2775, + 0, + 2578, + 0, + "*" + ], + [ + 4012, + 2783, + 0, + 2775, + 0, + "*" + ], + [ + 4026, + 2276, + 0, + 2289, + 0, + "IMAGE" + ], + [ + 4029, + 2280, + 0, + 2281, + 0, + "IMAGE" + ], + [ + 4030, + 2289, + 0, + 2281, + 1, + "IMAGE" + ], + [ + 4031, + 2288, + 0, + 2280, + 1, + "IMAGE" + ], + [ + 4032, + 2287, + 0, + 2280, + 0, + "IMAGE" + ], + [ + 4073, + 2305, + 0, + 2826, + 0, + "IMAGE" + ], + [ + 4074, + 2826, + 0, + 2302, + 3, + "IMAGE" + ], + [ + 4075, + 2826, + 0, + 2333, + 3, + "IMAGE" + ], + [ + 4414, + 717, + 0, + 3000, + 0, + "IMAGE" + ], + [ + 4423, + 583, + 0, + 2476, + 0, + "*" + ], + [ + 4424, + 583, + 0, + 1114, + 0, + "CLIP" + ], + [ + 4425, + 594, + 0, + 832, + 0, + "VAE" + ], + [ + 4426, + 594, + 0, + 2477, + 0, + "*" + ], + [ + 4446, + 2219, + 0, + 1320, + 0, + "IMAGE" + ], + [ + 4469, + 2774, + 0, + 2784, + 0, + "IMAGE" + ], + [ + 4511, + 1022, + 0, + 1113, + 0, + "IMAGE" + ], + [ + 4512, + 1090, + 0, + 590, + 4, + "LATENT" + ], + [ + 4514, + 1090, + 0, + 3032, + 0, + "*" + ], + [ + 4515, + 2214, + 1, + 1321, + 0, + "MASK" + ], + [ + 4541, + 1688, + 0, + 1293, + 0, + "LATENT" + ], + [ + 4543, + 3063, + 0, + 3057, + 0, + "*" + ], + [ + 4548, + 3084, + 0, + 3061, + 0, + "MODEL" + ], + [ + 4552, + 3066, + 0, + 3061, + 4, + "STRING" + ], + [ + 4553, + 3071, + 0, + 3061, + 5, + "STRING" + ], + [ + 4554, + 3070, + 0, + 3061, + 6, + "STRING" + ], + [ + 4556, + 3076, + 0, + 3061, + 7, + "STRING" + ], + [ + 4557, + 3078, + 0, + 3061, + 8, + "STRING" + ], + [ + 4560, + 3061, + 0, + 3063, + 0, + "LATENT" + ], + [ + 4561, + 3060, + 0, + 3063, + 1, + "VAE" + ], + [ + 4563, + 3065, + 0, + 3066, + 0, + "INT" + ], + [ + 4564, + 3069, + 0, + 3070, + 0, + "*" + ], + [ + 4565, + 3072, + 0, + 3073, + 0, + "*" + ], + [ + 4566, + 3077, + 0, + 3078, + 0, + "*" + ], + [ + 4588, + 3089, + 0, + 3061, + 1, + "CONDITIONING" + ], + [ + 4590, + 3093, + 0, + 3089, + 1, + "CONDITIONING" + ], + [ + 4591, + 3060, + 0, + 3089, + 3, + "VAE" + ], + [ + 4592, + 3040, + 0, + 3094, + 0, + "*" + ], + [ + 4596, + 3099, + 0, + 3089, + 2, + "CONTROL_NET" + ], + [ + 4597, + 3097, + 0, + 3089, + 4, + "IMAGE" + ], + [ + 4606, + 2454, + 0, + 3055, + 0, + "IMAGE" + ], + [ + 4607, + 3055, + 0, + 1346, + 0, + "IMAGE" + ], + [ + 4608, + 3055, + 1, + 3103, + 0, + "*" + ], + [ + 4613, + 3106, + 0, + 3107, + 0, + "BASIC_PIPE" + ], + [ + 4614, + 3107, + 3, + 3093, + 0, + "CONDITIONING" + ], + [ + 4615, + 3107, + 3, + 3089, + 0, + "CONDITIONING" + ], + [ + 4620, + 3074, + 0, + 3089, + 5, + "MASK" + ], + [ + 4623, + 3110, + 1, + 3109, + 0, + "INT" + ], + [ + 4624, + 3110, + 2, + 3109, + 1, + "INT" + ], + [ + 4635, + 1327, + 0, + 3116, + 0, + "IMAGE" + ], + [ + 4636, + 3116, + 1, + 3115, + 0, + "INT" + ], + [ + 4637, + 3116, + 2, + 3115, + 1, + "INT" + ], + [ + 4638, + 3067, + 0, + 3109, + 2, + "INT" + ], + [ + 4639, + 3109, + 0, + 3061, + 2, + "LATENT" + ], + [ + 4645, + 1293, + 0, + 1292, + 2, + "LATENT" + ], + [ + 4648, + 1679, + 0, + 1688, + 2, + "BOOLEAN" + ], + [ + 4649, + 3115, + 0, + 1688, + 0, + "*" + ], + [ + 4651, + 3120, + 0, + 3119, + 0, + "LATENT" + ], + [ + 4652, + 3119, + 0, + 1688, + 1, + "*" + ], + [ + 4653, + 1327, + 0, + 3120, + 0, + "IMAGE" + ], + [ + 4654, + 1291, + 0, + 3120, + 1, + "VAE" + ], + [ + 4657, + 3121, + 0, + 3123, + 0, + "MASK" + ], + [ + 4658, + 3123, + 0, + 3119, + 1, + "MASK" + ], + [ + 4659, + 1679, + 0, + 3124, + 2, + "BOOLEAN" + ], + [ + 4660, + 1305, + 0, + 3124, + 1, + "*" + ], + [ + 4661, + 3124, + 0, + 1306, + 0, + "*" + ], + [ + 4662, + 3125, + 0, + 3124, + 0, + "*" + ], + [ + 4664, + 3097, + 0, + 3110, + 0, + "IMAGE" + ], + [ + 4666, + 3133, + 0, + 3132, + 1, + "INT" + ], + [ + 4667, + 418, + 0, + 3132, + 0, + "IMAGE" + ], + [ + 4668, + 3132, + 0, + 1389, + 0, + "IMAGE" + ], + [ + 4670, + 3154, + 3, + 3150, + 0, + "CONDITIONING" + ], + [ + 4671, + 3151, + 0, + 3150, + 1, + "CONDITIONING" + ], + [ + 4672, + 3152, + 0, + 3150, + 2, + "CONTROL_NET" + ], + [ + 4673, + 3154, + 3, + 3151, + 0, + "CONDITIONING" + ], + [ + 4674, + 3153, + 0, + 3154, + 0, + "BASIC_PIPE" + ], + [ + 4675, + 2330, + 0, + 3155, + 1, + "*" + ], + [ + 4676, + 3155, + 0, + 1292, + 1, + "CONDITIONING" + ], + [ + 4677, + 1679, + 0, + 3155, + 2, + "BOOLEAN" + ], + [ + 4678, + 3150, + 0, + 3155, + 0, + "*" + ], + [ + 4679, + 1291, + 0, + 3150, + 3, + "VAE" + ], + [ + 4680, + 1327, + 0, + 3150, + 4, + "IMAGE" + ], + [ + 4681, + 3123, + 0, + 3150, + 5, + "MASK" + ], + [ + 4682, + 2302, + 0, + 2317, + 0, + "CONDITIONING" + ], + [ + 4684, + 2302, + 1, + 2317, + 1, + "CONDITIONING" + ] + ], + "groups": [ + { + "id": 37, + "title": "Depth Mask", + "bounding": [ + 6583.2578125, + -219.2234649658203, + 835, + 289 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + }, + { + "id": 43, + "title": "", + "bounding": [ + 830, + 90, + 891.0089111328125, + 989.237548828125 + ], + "font_size": 12, + "flags": {} + }, + { + "id": 33, + "title": "Text encode + Empty Latent", + "bounding": [ + 3593.2578125, + 110.77632141113281, + 1221.3590087890625, + 627.1068115234375 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + }, + { + "id": 32, + "title": "Text to Image", + "bounding": [ + 4843.2578125, + 110.77632141113281, + 1349.0771484375, + 622.7144775390625 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + }, + { + "id": 30, + "title": "Noise Injection", + "bounding": [ + 6253.2578125, + 114.919921875, + 1709.174072265625, + 617.1067504882812 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + }, + { + "id": 42, + "title": "", + "bounding": [ + 1749.915771484375, + 120.41236114501953, + 330, + 470 + ], + "font_size": 12, + "flags": { + "pinned": true + } + }, + { + "id": 31, + "title": "FLUX Config", + "bounding": [ + 3213.2578125, + 120.7763671875, + 338.9848327636719, + 615.9749755859375 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + }, + { + "id": 41, + "title": "Output Selector", + "bounding": [ + 470, + 140, + 330, + 130 + ], + "font_size": 12, + "flags": {} + }, + { + "id": 39, + "title": "", + "bounding": [ + 470, + 270, + 330, + 300 + ], + "font_size": 12, + "flags": { + "pinned": true + } + }, + { + "id": 36, + "title": "", + "bounding": [ + 470, + 570, + 330, + 440 + ], + "font_size": 12, + "flags": { + "pinned": true + } + }, + { + "id": 35, + "title": "", + "bounding": [ + 1751.614013671875, + 595.9087524414062, + 330, + 120 + ], + "font_size": 12, + "flags": { + "pinned": true + } + }, + { + "id": 34, + "title": "", + "bounding": [ + 1751.614013671875, + 715.9087524414062, + 330.64825439453125, + 183.89500427246094 + ], + "font_size": 12, + "flags": { + "pinned": true + } + }, + { + "id": 20, + "title": "img2img", + "bounding": [ + 3615.267578125, + 899.5374145507812, + 1360, + 540 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + }, + { + "id": 29, + "title": "", + "bounding": [ + 1751.132568359375, + 901.252685546875, + 328.9569091796875, + 329.4349365234375 + ], + "font_size": 12, + "flags": { + "pinned": true + } + }, + { + "id": 27, + "title": "", + "bounding": [ + 470, + 1010, + 330, + 490 + ], + "font_size": 12, + "flags": { + "pinned": true + } + }, + { + "id": 28, + "title": "", + "bounding": [ + 831.2684326171875, + 1080.7266845703125, + 889.65869140625, + 328.6146240234375 + ], + "font_size": 12, + "flags": {} + }, + { + "id": 25, + "title": "", + "bounding": [ + 1751.0048828125, + 1231.8818359375, + 329.5889587402344, + 228.2154541015625 + ], + "font_size": 12, + "flags": { + "pinned": true + } + }, + { + "id": 17, + "title": "Inpainting", + "bounding": [ + 3617.85400390625, + 1498.7139892578125, + 2168.875, + 1056.0318603515625 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + }, + { + "id": 44, + "title": "Outpainting", + "bounding": [ + 3616.754638671875, + 2617.475341796875, + 2363.591552734375, + 806.6248779296875 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + }, + { + "id": 14, + "title": "Ultimate Upscaler", + "bounding": [ + 3618.262939453125, + 3465.4765625, + 2048, + 658 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + }, + { + "id": 11, + "title": "Detailer", + "bounding": [ + 3628.262451171875, + 4175.47607421875, + 2045, + 667 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + }, + { + "id": 6, + "title": "ControlNet", + "bounding": [ + 3633.39892578125, + 4899.37060546875, + 4068.64794921875, + 563.90576171875 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + }, + { + "id": 2, + "title": "PreProcessors", + "bounding": [ + 3633.6552734375, + 5505.1103515625, + 2370, + 730 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + }, + { + "id": 10, + "title": "Save", + "bounding": [ + 4399.70068359375, + 6349.2841796875, + 880, + 290 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + }, + { + "id": 9, + "title": "Sampler Params Split", + "bounding": [ + 3645.2509765625, + 6350.48388671875, + 679, + 214 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + }, + { + "id": 8, + "title": "Final image", + "bounding": [ + 5332.61376953125, + 6356.9921875, + 597.8187255859375, + 287.3917541503906 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + } + ], + "config": {}, + "extra": { + "ds": { + "scale": 0.8264462809917354, + "offset": [ + -290.33, + 71.91000000000017 + ] + }, + "groupNodes": {} + }, + "version": 0.4 +} \ No newline at end of file diff --git a/comfyui-flux-continuum/workflow/Flux+ 1.4.4_release.json b/comfyui-flux-continuum/workflow/Flux+ 1.4.4_release.json new file mode 100644 index 0000000000000000000000000000000000000000..bde5d6519c0b0a798f6e62d32efb02b990a1c2f9 --- /dev/null +++ b/comfyui-flux-continuum/workflow/Flux+ 1.4.4_release.json @@ -0,0 +1,22400 @@ +{ + "last_node_id": 3818, + "last_link_id": 5743, + "nodes": [ + { + "id": 1026, + "type": "ImagePass", + "pos": [ + 530, + 230 + ], + "size": [ + 210, + 30 + ], + "flags": { + "collapsed": true + }, + "order": 242, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 4941, + "shape": 7 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 1745 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "ImagePass", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 1113, + "type": "ImagePass", + "pos": [ + -4080, + 300 + ], + "size": [ + 210, + 30 + ], + "flags": { + "collapsed": true + }, + "order": 181, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 4511, + "shape": 7 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 1859 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "ImagePass", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 1346, + "type": "ImagePass", + "pos": [ + 1789.6929931640625, + 1029.87646484375 + ], + "size": [ + 140, + 30 + ], + "flags": { + "collapsed": true + }, + "order": 375, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 4607, + "shape": 7 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 2073 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "ImagePass", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 3676, + "type": "ImagePass", + "pos": [ + -1800, + 2770 + ], + "size": [ + 210, + 30 + ], + "flags": { + "collapsed": true + }, + "order": 403, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 5525, + "shape": 7 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 5474 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "ImagePass", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 3699, + "type": "ImagePass", + "pos": [ + -5058.875, + 2580.03125 + ], + "size": [ + 210, + 30 + ], + "flags": { + "collapsed": true + }, + "order": 222, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 5537, + "shape": 7 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 5538 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "ImagePass", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 644, + "type": "SetNode", + "pos": [ + 4186.2509765625, + 329.36273193359375 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 373, + "mode": 0, + "inputs": [ + { + "name": "BASIC_PIPE", + "type": "BASIC_PIPE", + "link": 1187 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_pipe", + "properties": { + "previousName": "pipe" + }, + "widgets_values": [ + "pipe" + ], + "color": "#322", + "bgcolor": "hsla(0, 25%, 26.7%, 1)" + }, + { + "id": 712, + "type": "SetNode", + "pos": [ + 6340, + 1780 + ], + "size": [ + 210, + 60 + ], + "flags": { + "collapsed": false + }, + "order": 395, + "mode": 0, + "inputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "link": 4854 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_Output - inpainting", + "properties": { + "previousName": "Output - inpainting" + }, + "widgets_values": [ + "Output - inpainting" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 715, + "type": "SetNode", + "pos": [ + 6650, + 440 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 380, + "mode": 0, + "inputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "link": 1538 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_Output - txt2img", + "properties": { + "previousName": "Output - txt2img" + }, + "widgets_values": [ + "Output - txt2img" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 716, + "type": "SetNode", + "pos": [ + -3890, + 300 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 265, + "mode": 0, + "inputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "link": 1859 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 4779 + ], + "slot_index": 0 + } + ], + "title": "Set_final", + "properties": { + "previousName": "final" + }, + "widgets_values": [ + "final" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 723, + "type": "SetNode", + "pos": [ + 1431.1396484375, + 1160.7176513671875 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 254, + "mode": 0, + "inputs": [ + { + "name": "STRING", + "type": "STRING", + "link": 3492 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_prompt", + "properties": { + "previousName": "prompt" + }, + "widgets_values": [ + "prompt" + ] + }, + { + "id": 729, + "type": "SetNode", + "pos": [ + 5413.5576171875, + 3283.437255859375 + ], + "size": [ + 252, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 377, + "mode": 0, + "inputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "link": 2177 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_Output - ultimate upscaler", + "properties": { + "previousName": "Output - ultimate upscaler" + }, + "widgets_values": [ + "Output - ultimate upscaler" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 788, + "type": "SetNode", + "pos": [ + 1590.7579345703125, + 1348.9764404296875 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 261, + "mode": 0, + "inputs": [ + { + "name": "STRING", + "type": "STRING", + "link": 3493 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": [], + "slot_index": 0 + } + ], + "title": "Set_tags", + "properties": { + "previousName": "tags" + }, + "widgets_values": [ + "tags" + ] + }, + { + "id": 832, + "type": "SetNode", + "pos": [ + 3371.815673828125, + 318.3890380859375 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 232, + "mode": 0, + "inputs": [ + { + "name": "VAE", + "type": "VAE", + "link": 4425 + } + ], + "outputs": [ + { + "name": "VAE", + "type": "VAE", + "links": [ + 5324 + ], + "slot_index": 0 + } + ], + "title": "Set_vae", + "properties": { + "previousName": "vae" + }, + "widgets_values": [ + "vae" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 873, + "type": "SetNode", + "pos": [ + 5929.0615234375, + 4052.4970703125 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 389, + "mode": 0, + "inputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "link": 2206 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_Output - detailer", + "properties": { + "previousName": "Output - detailer" + }, + "widgets_values": [ + "Output - detailer" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 925, + "type": "SetNode", + "pos": [ + 680, + 1180 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 233, + "mode": 0, + "inputs": [ + { + "name": "INT", + "type": "INT", + "link": 1589 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_seed", + "properties": { + "previousName": "seed" + }, + "widgets_values": [ + "seed" + ] + }, + { + "id": 1023, + "type": "SetNode", + "pos": [ + 670, + 210 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 311, + "mode": 0, + "inputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "link": 1745 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_send", + "properties": { + "previousName": "send" + }, + "widgets_values": [ + "send" + ] + }, + { + "id": 1061, + "type": "SetNode", + "pos": [ + 8560, + 250 + ], + "size": [ + 302.3999938964844, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 414, + "mode": 0, + "inputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "link": 1783 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_Output - txt2img noise injection", + "properties": { + "previousName": "Output - txt2img noise injection" + }, + "widgets_values": [ + "Output - txt2img noise injection" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 1075, + "type": "SetNode", + "pos": [ + 4777.0771484375, + 876.7098999023438 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 361, + "mode": 0, + "inputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "link": 1802 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_Output - img2img", + "properties": { + "previousName": "Output - img2img" + }, + "widgets_values": [ + "Output - img2img" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 1095, + "type": "SetNode", + "pos": [ + 480, + 1070 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 236, + "mode": 0, + "inputs": [ + { + "name": "INT", + "type": "INT", + "link": 2305 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_batch", + "properties": { + "previousName": "batch" + }, + "widgets_values": [ + "batch" + ] + }, + { + "id": 1105, + "type": "SetNode", + "pos": [ + 3371.815673828125, + 203.81993103027344 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 253, + "mode": 0, + "inputs": [ + { + "name": "MODEL", + "type": "MODEL", + "link": 3494 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": [], + "slot_index": 0 + } + ], + "title": "Set_model", + "properties": { + "previousName": "model" + }, + "widgets_values": [ + "model" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 1114, + "type": "SetNode", + "pos": [ + 3371.815673828125, + 428.3890380859375 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 231, + "mode": 0, + "inputs": [ + { + "name": "CLIP", + "type": "CLIP", + "link": 4424 + } + ], + "outputs": [ + { + "name": "CLIP", + "type": "CLIP", + "links": [ + 5319 + ], + "slot_index": 0 + } + ], + "title": "Set_clip", + "properties": { + "previousName": "clip" + }, + "widgets_values": [ + "clip" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 1116, + "type": "SetNode", + "pos": [ + 560, + 470 + ], + "size": [ + 285.375, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 288, + "mode": 0, + "inputs": [ + { + "name": "MODEL", + "type": "MODEL", + "link": 1863 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_modelWithLoRAs", + "properties": { + "previousName": "modelWithLoRAs" + }, + "widgets_values": [ + "modelWithLoRAs" + ] + }, + { + "id": 1217, + "type": "SetNode", + "pos": [ + 1938.784423828125, + 667.22509765625 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 260, + "mode": 0, + "inputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "link": 2000 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_denoise", + "properties": { + "previousName": "denoise" + }, + "widgets_values": [ + "denoise" + ] + }, + { + "id": 1271, + "type": "SetNode", + "pos": [ + -2766.130859375, + 241.08197021484375 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 281, + "mode": 0, + "inputs": [ + { + "name": "COMBO", + "type": "COMBO", + "link": 3464 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_scheduler", + "properties": { + "previousName": "scheduler" + }, + "widgets_values": [ + "scheduler" + ] + }, + { + "id": 1272, + "type": "SetNode", + "pos": [ + -2773.01416015625, + 363.06768798828125 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 282, + "mode": 0, + "inputs": [ + { + "name": "STRING", + "type": "STRING", + "link": 3466 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_scheduler_name", + "properties": { + "previousName": "scheduler_name" + }, + "widgets_values": [ + "scheduler_name" + ] + }, + { + "id": 1280, + "type": "SetNode", + "pos": [ + 670, + 750 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 234, + "mode": 0, + "inputs": [ + { + "name": "INT", + "type": "INT", + "link": 2002 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_steps", + "properties": { + "previousName": "steps" + }, + "widgets_values": [ + "steps" + ] + }, + { + "id": 1281, + "type": "SetNode", + "pos": [ + 650, + 860 + ], + "size": [ + 210, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 235, + "mode": 0, + "inputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "link": 2001 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_guidance", + "properties": { + "previousName": "guidance" + }, + "widgets_values": [ + "guidance" + ] + }, + { + "id": 1320, + "type": "SetNode", + "pos": [ + 1890, + 340 + ], + "size": [ + 210, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 258, + "mode": 0, + "inputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "link": 4446 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": [], + "slot_index": 0 + } + ], + "title": "Set_loadImage", + "properties": { + "previousName": "loadImage" + }, + "widgets_values": [ + "loadImage" + ] + }, + { + "id": 1321, + "type": "SetNode", + "pos": [ + 1950, + 180 + ], + "size": [ + 210, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 313, + "mode": 0, + "inputs": [ + { + "name": "MASK", + "type": "MASK", + "link": 5605 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_mask", + "properties": { + "previousName": "mask" + }, + "widgets_values": [ + "mask" + ] + }, + { + "id": 1330, + "type": "SetNode", + "pos": [ + 1881.1695556640625, + 1443.02587890625 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true, + "pinned": true + }, + "order": 237, + "mode": 0, + "inputs": [ + { + "name": "UPSCALE_MODEL", + "type": "UPSCALE_MODEL", + "link": 2361 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_upscale_model", + "properties": { + "previousName": "" + }, + "widgets_values": [ + "upscale_model" + ] + }, + { + "id": 1331, + "type": "SetNode", + "pos": [ + 1919.8201904296875, + 1329.295166015625 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 239, + "mode": 0, + "inputs": [ + { + "name": "INT", + "type": "INT", + "link": 3215 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_res multiply", + "properties": { + "previousName": "res multiply" + }, + "widgets_values": [ + "res multiply" + ] + }, + { + "id": 1345, + "type": "SetNode", + "pos": [ + 1799.6929931640625, + 1079.8760986328125 + ], + "size": [ + 268.79998779296875, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 388, + "mode": 0, + "inputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "link": 2073 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_Output - imgload_prep", + "properties": { + "previousName": "Output - imgload_prep" + }, + "widgets_values": [ + "Output - imgload_prep" + ] + }, + { + "id": 1392, + "type": "SetNode", + "pos": [ + 4466.86669921875, + 3450.522705078125 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 347, + "mode": 0, + "inputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "link": 3433 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_Output - upscaler", + "properties": { + "previousName": "Output - upscaler" + }, + "widgets_values": [ + "Output - upscaler" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 1508, + "type": "SetNode", + "pos": [ + -2766.130859375, + 281.0810241699219 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 279, + "mode": 0, + "inputs": [ + { + "name": "COMBO", + "type": "COMBO", + "link": 3463 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_sampler", + "properties": { + "previousName": "sampler" + }, + "widgets_values": [ + "sampler" + ] + }, + { + "id": 1510, + "type": "SetNode", + "pos": [ + -2771.3779296875, + 320.59674072265625 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 280, + "mode": 0, + "inputs": [ + { + "name": "STRING", + "type": "STRING", + "link": 3465 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_sampler_name", + "properties": { + "previousName": "sampler_name" + }, + "widgets_values": [ + "sampler_name" + ] + }, + { + "id": 1518, + "type": "SetNode", + "pos": [ + 6250, + 650 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 272, + "mode": 0, + "inputs": [ + { + "name": "SAMPLER", + "type": "SAMPLER", + "link": 2335 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_sampler_convert", + "properties": { + "previousName": "sampler_convert" + }, + "widgets_values": [ + "sampler_convert" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 1617, + "type": "SetNode", + "pos": [ + 650, + 940 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 238, + "mode": 0, + "inputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "link": 2418 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_max shift", + "properties": { + "previousName": "max shift" + }, + "widgets_values": [ + "max shift" + ] + }, + { + "id": 2428, + "type": "SetNode", + "pos": [ + 650, + 1350 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 240, + "mode": 0, + "inputs": [ + { + "name": "COMBO", + "type": "COMBO", + "link": 3447 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_resolution", + "properties": { + "previousName": "resolution" + }, + "widgets_values": [ + "resolution" + ] + }, + { + "id": 2437, + "type": "SetNode", + "pos": [ + 610, + 620 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 241, + "mode": 0, + "inputs": [ + { + "name": "SAMPLER_PARAMS", + "type": "SAMPLER_PARAMS", + "link": 3460 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_sampler params", + "properties": { + "previousName": "sampler params" + }, + "widgets_values": [ + "sampler params" + ] + }, + { + "id": 2507, + "type": "SetNode", + "pos": [ + 4839.5029296875, + 425.84979248046875 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 276, + "mode": 0, + "inputs": [ + { + "name": "INT", + "type": "INT", + "link": 3543 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_width", + "properties": { + "previousName": "width" + }, + "widgets_values": [ + "width" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 2508, + "type": "SetNode", + "pos": [ + 4839.5029296875, + 475.849853515625 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 278, + "mode": 0, + "inputs": [ + { + "name": "INT", + "type": "INT", + "link": 3544 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_height", + "properties": { + "previousName": "height" + }, + "widgets_values": [ + "height" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 3032, + "type": "SetNode", + "pos": [ + 4839.5029296875, + 375.8497619628906 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 274, + "mode": 0, + "inputs": [ + { + "name": "LATENT", + "type": "LATENT", + "link": 4514 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_latent", + "properties": { + "previousName": "latent" + }, + "widgets_values": [ + "latent" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 3103, + "type": "SetNode", + "pos": [ + 1829.6929931640625, + 1149.8760986328125 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 376, + "mode": 0, + "inputs": [ + { + "name": "MASK", + "type": "MASK", + "link": 4608 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_mask_outpainting", + "properties": { + "previousName": "mask_outpainting" + }, + "widgets_values": [ + "mask_outpainting" + ] + }, + { + "id": 3220, + "type": "SetNode", + "pos": [ + 5970, + 2720 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 391, + "mode": 0, + "inputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "link": 4819 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_Output - outpainting", + "properties": { + "previousName": "Output - outpainting" + }, + "widgets_values": [ + "Output - outpainting" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 3238, + "type": "SetNode", + "pos": [ + 3376.16357421875, + 580 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 252, + "mode": 0, + "inputs": [ + { + "name": "MODEL", + "type": "MODEL", + "link": 4805 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null, + "slot_index": 0 + } + ], + "title": "Set_model_fill", + "properties": { + "previousName": "model_fill" + }, + "widgets_values": [ + "model_fill" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 3301, + "type": "SetNode", + "pos": [ + -1800, + 270 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": false + }, + "order": 312, + "mode": 0, + "inputs": [ + { + "name": "MODEL", + "type": "MODEL", + "link": 5615 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": [], + "slot_index": 0 + } + ], + "title": "Set_sendModel", + "properties": { + "previousName": "sendModel" + }, + "widgets_values": [ + "sendModel" + ] + }, + { + "id": 3328, + "type": "SetNode", + "pos": [ + 1898.784423828125, + 667.22509765625 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 248, + "mode": 0, + "inputs": [ + { + "name": "INT", + "type": "INT", + "link": 4976 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_mask_feather", + "properties": { + "previousName": "mask_feather" + }, + "widgets_values": [ + "mask_feather" + ] + }, + { + "id": 3338, + "type": "SetNode", + "pos": [ + 1880, + 260 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 256, + "mode": 0, + "inputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "link": 5370 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_loadImage_IP2", + "properties": { + "previousName": "loadImage_IP2" + }, + "widgets_values": [ + "loadImage_IP2" + ] + }, + { + "id": 3340, + "type": "SetNode", + "pos": [ + 8620, + 6390 + ], + "size": [ + 260, + 60 + ], + "flags": {}, + "order": 410, + "mode": 0, + "inputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "link": 5337 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_conditioning", + "properties": { + "previousName": "conditioning" + }, + "widgets_values": [ + "conditioning" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 3347, + "type": "SetNode", + "pos": [ + 5926.3271484375, + 4704.11474609375 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 392, + "mode": 0, + "inputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "link": 5002 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_Output - depth", + "properties": { + "previousName": "" + }, + "widgets_values": [ + "Output - depth" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 3363, + "type": "SetNode", + "pos": [ + 3371.815673828125, + 708.38916015625 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 251, + "mode": 0, + "inputs": [ + { + "name": "MODEL", + "type": "MODEL", + "link": 5013 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_model_depth", + "properties": { + "previousName": "model_depth" + }, + "widgets_values": [ + "model_depth" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 3364, + "type": "SetNode", + "pos": [ + 3371.815673828125, + 828.38916015625 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 249, + "mode": 0, + "inputs": [ + { + "name": "MODEL", + "type": "MODEL", + "link": 5014 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_model_canny", + "properties": { + "previousName": "model_canny" + }, + "widgets_values": [ + "model_canny" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 3376, + "type": "SetNode", + "pos": [ + 3371.815673828125, + 948.38916015625 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 250, + "mode": 0, + "inputs": [ + { + "name": "STYLE_MODEL", + "type": "STYLE_MODEL", + "link": 5033 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_model_redux", + "properties": { + "previousName": "model_redux" + }, + "widgets_values": [ + "model_redux" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 3377, + "type": "SetNode", + "pos": [ + 3371.815673828125, + 1058.38916015625 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 243, + "mode": 0, + "inputs": [ + { + "name": "CLIP_VISION", + "type": "CLIP_VISION", + "link": 5034 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_model_clipVision", + "properties": { + "previousName": "model_clipVision" + }, + "widgets_values": [ + "model_clipVision" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 3401, + "type": "SetNode", + "pos": [ + 1778.7926025390625, + 854.1670532226562 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 247, + "mode": 0, + "inputs": [ + { + "name": "VEC3", + "type": "VEC3", + "link": 5518 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_ipadapter_strenght", + "properties": { + "previousName": "ipadapter_strenght" + }, + "widgets_values": [ + "ipadapter_strenght" + ] + }, + { + "id": 3454, + "type": "SetNode", + "pos": [ + 5160.0888671875, + 5483.4619140625 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 384, + "mode": 0, + "inputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "link": 5174 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_Output - canny", + "properties": { + "previousName": "Output - canny" + }, + "widgets_values": [ + "Output - canny" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 3559, + "type": "SetNode", + "pos": [ + 1880, + 220 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 255, + "mode": 0, + "inputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "link": 5371 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_loadImage_IP1", + "properties": { + "previousName": "loadImage_IP1" + }, + "widgets_values": [ + "loadImage_IP1" + ] + }, + { + "id": 3584, + "type": "SetNode", + "pos": [ + 1880, + 300 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 257, + "mode": 0, + "inputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "link": 5374 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_loadImage_IP3", + "properties": { + "previousName": "loadImage_IP3" + }, + "widgets_values": [ + "loadImage_IP3" + ] + }, + { + "id": 3587, + "type": "SetNode", + "pos": [ + 4230, + 7160 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 300, + "mode": 0, + "inputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "link": 5376 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_Output - face swap", + "properties": { + "previousName": "Output - face swap" + }, + "widgets_values": [ + "Output - face swap" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 3653, + "type": "SetNode", + "pos": [ + 4770, + 5040 + ], + "size": [ + 250, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 330, + "mode": 0, + "inputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "link": 5478 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_preprocessor_depth", + "properties": { + "previousName": "preprocessor_depth" + }, + "widgets_values": [ + "preprocessor_depth" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3654, + "type": "SetNode", + "pos": [ + 1860, + 870 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true, + "pinned": true + }, + "order": 338, + "mode": 0, + "inputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "link": 5484 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_preprocessor canny", + "properties": { + "previousName": "preprocessor canny" + }, + "widgets_values": [ + "preprocessor canny" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3673, + "type": "SetNode", + "pos": [ + -1600, + 2770 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 407, + "mode": 0, + "inputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "link": 5474 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_previewOutputs", + "properties": { + "previousName": "previewOutputs" + }, + "widgets_values": [ + "previewOutputs" + ] + }, + { + "id": 3697, + "type": "SetNode", + "pos": [ + -4900, + 2580 + ], + "size": [ + 260.3999938964844, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 302, + "mode": 0, + "inputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "link": 5538 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_Output - canny preprocessor", + "properties": { + "previousName": "Output - canny preprocessor" + }, + "widgets_values": [ + "Output - canny preprocessor" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3767, + "type": "SetNode", + "pos": [ + 4762.06591796875, + 5092.7001953125 + ], + "size": [ + 260.3999938964844, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 331, + "mode": 0, + "inputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "link": 5616 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_Output - depth preprocessor", + "properties": { + "previousName": "Output - depth preprocessor" + }, + "widgets_values": [ + "Output - depth preprocessor" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 596, + "type": "GetNode", + "pos": [ + 5870, + 340 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 0, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 1360 + ], + "slot_index": 0 + } + ], + "title": "Get_seed", + "properties": {}, + "widgets_values": [ + "seed" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 645, + "type": "GetNode", + "pos": [ + 4709.0615234375, + 4102.4921875 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 1, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "BASIC_PIPE", + "type": "BASIC_PIPE", + "links": [ + 3152 + ], + "slot_index": 0 + } + ], + "title": "Get_pipe", + "properties": {}, + "widgets_values": [ + "pipe" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 708, + "type": "GetNode", + "pos": [ + 4911.81689453125, + 3398.91357421875 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 2, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 2173 + ], + "slot_index": 0 + } + ], + "title": "Get_seed", + "properties": {}, + "widgets_values": [ + "seed" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 717, + "type": "GetNode", + "pos": [ + 1000.17724609375, + 150.2889404296875 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 3, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 3426, + 4414 + ], + "slot_index": 0 + } + ], + "title": "Get_final", + "properties": {}, + "widgets_values": [ + "final" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 724, + "type": "GetNode", + "pos": [ + 3660, + 6590 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 4, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "STRING", + "type": "STRING", + "links": [ + 1442 + ], + "slot_index": 0 + } + ], + "title": "Get_prompt", + "properties": {}, + "widgets_values": [ + "prompt" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 726, + "type": "GetNode", + "pos": [ + -4847.85595703125, + 249.03724670410156 + ], + "size": [ + 313.42822265625, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 5, + "mode": 4, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 2380 + ], + "slot_index": 0 + } + ], + "title": "Get_final", + "properties": {}, + "widgets_values": [ + "final" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 793, + "type": "GetNode", + "pos": [ + 3670, + 6550 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 6, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "STRING", + "type": "STRING", + "links": [ + 1443 + ], + "slot_index": 0 + } + ], + "title": "Get_tags", + "properties": {}, + "widgets_values": [ + "tags" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 933, + "type": "GetNode", + "pos": [ + 4526.86669921875, + 3370.522705078125 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 7, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "BASIC_PIPE", + "type": "BASIC_PIPE", + "links": [ + 1599 + ] + } + ], + "title": "Get_pipe", + "properties": {}, + "widgets_values": [ + "pipe" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 965, + "type": "GetNode", + "pos": [ + 3712.240234375, + 880.7233276367188 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 8, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "VAE", + "type": "VAE", + "links": [ + 1680, + 1804 + ], + "slot_index": 0 + } + ], + "title": "Get_vae", + "properties": {}, + "widgets_values": [ + "vae" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1022, + "type": "GetNode", + "pos": [ + -4250, + 300 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 9, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 4511 + ], + "slot_index": 0 + } + ], + "title": "Get_send", + "properties": {}, + "widgets_values": [ + "send" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1057, + "type": "GetNode", + "pos": [ + 7001.9658203125, + 267.23828125 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 10, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 1775 + ], + "slot_index": 0 + } + ], + "title": "Get_seed", + "properties": {}, + "widgets_values": [ + "seed" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1064, + "type": "GetNode", + "pos": [ + 8234.751953125, + 204.01480102539062 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 11, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "VAE", + "type": "VAE", + "links": [ + 1786 + ] + } + ], + "title": "Get_vae", + "properties": {}, + "widgets_values": [ + "vae" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1079, + "type": "GetNode", + "pos": [ + 4077.0810546875, + 926.7098999023438 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 12, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "links": [ + 3363 + ], + "slot_index": 0 + } + ], + "title": "Get_modelWithLoRAs", + "properties": {}, + "widgets_values": [ + "modelWithLoRAs" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1086, + "type": "GetNode", + "pos": [ + 3967.0810546875, + 1136.7099609375 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 13, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 4689 + ], + "slot_index": 0 + } + ], + "title": "Get_seed", + "properties": {}, + "widgets_values": [ + "seed" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1099, + "type": "GetNode", + "pos": [ + 7071.9658203125, + 397.2384338378906 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 14, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "LATENT", + "type": "LATENT", + "links": [ + 2105 + ], + "slot_index": 0 + } + ], + "title": "Get_latent", + "properties": {}, + "widgets_values": [ + "latent" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1106, + "type": "GetNode", + "pos": [ + -2386.878173828125, + 382.2384033203125 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": false + }, + "order": 15, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "links": [ + 5614 + ], + "slot_index": 0 + } + ], + "title": "Get_model", + "properties": {}, + "widgets_values": [ + "model" + ] + }, + { + "id": 1115, + "type": "GetNode", + "pos": [ + 550, + 400 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 16, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "CLIP", + "type": "CLIP", + "links": [ + 3432 + ], + "slot_index": 0 + } + ], + "title": "Get_clip", + "properties": {}, + "widgets_values": [ + "clip" + ] + }, + { + "id": 1117, + "type": "GetNode", + "pos": [ + 3776.249755859375, + 239.36273193359375 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 17, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "links": [ + 5046, + 5326 + ], + "slot_index": 0 + } + ], + "title": "Get_modelWithLoRAs", + "properties": {}, + "widgets_values": [ + "modelWithLoRAs" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1136, + "type": "GetNode", + "pos": [ + 7364.07373046875, + -7.376744747161865 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 18, + "mode": 4, + "inputs": [], + "outputs": [ + { + "name": "VAE", + "type": "VAE", + "links": [ + 1879 + ], + "slot_index": 0 + } + ], + "title": "Get_vae", + "properties": {}, + "widgets_values": [ + "vae" + ] + }, + { + "id": 1162, + "type": "GetNode", + "pos": [ + 3853.34716796875, + 1022.2464599609375 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 19, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 1920 + ], + "slot_index": 0 + } + ], + "title": "Get_batch", + "properties": {}, + "widgets_values": [ + "batch" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1218, + "type": "GetNode", + "pos": [ + 4901.81689453125, + 3528.91357421875 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 20, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "links": [ + 2174 + ], + "slot_index": 0 + } + ], + "title": "Get_denoise", + "properties": {}, + "widgets_values": [ + "denoise" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1219, + "type": "GetNode", + "pos": [ + 3957.0810546875, + 1086.7099609375 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 21, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "links": [ + 4691 + ], + "slot_index": 0 + } + ], + "title": "Get_denoise", + "properties": {}, + "widgets_values": [ + "denoise" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1282, + "type": "GetNode", + "pos": [ + 3977.0810546875, + 1266.7099609375 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 22, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 2003 + ], + "slot_index": 0 + } + ], + "title": "Get_steps", + "properties": {}, + "widgets_values": [ + "steps" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1286, + "type": "GetNode", + "pos": [ + 4037.0810546875, + 1206.7099609375 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 23, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "STRING", + "type": "STRING", + "links": [ + 2005 + ] + } + ], + "title": "Get_scheduler_name", + "properties": {}, + "widgets_values": [ + "scheduler_name" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1287, + "type": "GetNode", + "pos": [ + 3957.0810546875, + 1306.7099609375 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 24, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "links": [ + 2006 + ], + "slot_index": 0 + } + ], + "title": "Get_guidance", + "properties": {}, + "widgets_values": [ + "guidance" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1298, + "type": "GetNode", + "pos": [ + 4830, + 2040 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 25, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 4917 + ], + "slot_index": 0 + } + ], + "title": "Get_seed", + "properties": {}, + "widgets_values": [ + "seed" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1300, + "type": "GetNode", + "pos": [ + 4550, + 2110 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 26, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 2018 + ], + "slot_index": 0 + } + ], + "title": "Get_batch", + "properties": {}, + "widgets_values": [ + "batch" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1308, + "type": "GetNode", + "pos": [ + 4911.81689453125, + 3438.913818359375 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 27, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 2175 + ], + "slot_index": 0 + } + ], + "title": "Get_steps", + "properties": {}, + "widgets_values": [ + "steps" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1311, + "type": "GetNode", + "pos": [ + 4901.81689453125, + 3488.91357421875 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 28, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "COMBO", + "type": "COMBO", + "links": [ + 2176 + ] + } + ], + "title": "Get_scheduler", + "properties": {}, + "widgets_values": [ + "scheduler" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1312, + "type": "GetNode", + "pos": [ + 4669.0615234375, + 4322.4921875 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 29, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "links": [ + 2034 + ], + "slot_index": 0 + } + ], + "title": "Get_denoise", + "properties": {}, + "widgets_values": [ + "denoise" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1313, + "type": "GetNode", + "pos": [ + 4679.0615234375, + 4212.4921875 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 30, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 2035 + ], + "slot_index": 0 + } + ], + "title": "Get_steps", + "properties": {}, + "widgets_values": [ + "steps" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1317, + "type": "GetNode", + "pos": [ + 5670, + 520 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 31, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "COMBO", + "type": "COMBO", + "links": [ + 2037 + ] + } + ], + "title": "Get_scheduler", + "properties": {}, + "widgets_values": [ + "scheduler" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1318, + "type": "GetNode", + "pos": [ + 5690, + 560 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 32, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 2038 + ] + } + ], + "title": "Get_steps", + "properties": {}, + "widgets_values": [ + "steps" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1319, + "type": "GetNode", + "pos": [ + 3650, + 6640 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 33, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "links": [ + 4993 + ], + "slot_index": 0 + } + ], + "title": "Get_guidance", + "properties": {}, + "widgets_values": [ + "guidance" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1323, + "type": "GetNode", + "pos": [ + 3633.3486328125, + 1092.24658203125 + ], + "size": [ + 280, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 34, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 2071 + ], + "slot_index": 0 + } + ], + "title": "Get_Output - imgload_prep", + "properties": {}, + "widgets_values": [ + "Output - imgload_prep" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1325, + "type": "GetNode", + "pos": [ + 3629.0615234375, + 4002.4970703125 + ], + "size": [ + 268.79998779296875, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 35, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 2202, + 5638 + ], + "slot_index": 0 + } + ], + "title": "Get_Output - imgload_prep", + "properties": {}, + "widgets_values": [ + "Output - imgload_prep" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1328, + "type": "GetNode", + "pos": [ + 4529.0615234375, + 4272.4921875 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 36, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "COMBO", + "type": "COMBO", + "links": [ + 2055 + ] + } + ], + "title": "Get_scheduler", + "properties": {}, + "widgets_values": [ + "scheduler" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1339, + "type": "GetNode", + "pos": [ + 3631.819091796875, + 3288.913818359375 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 37, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "UPSCALE_MODEL", + "type": "UPSCALE_MODEL", + "links": [ + 2163 + ], + "slot_index": 0 + } + ], + "title": "Get_upscale_model", + "properties": {}, + "widgets_values": [ + "upscale_model" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1340, + "type": "GetNode", + "pos": [ + 3653.55810546875, + 3513.43603515625 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 38, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 4714, + 4715 + ], + "slot_index": 0 + } + ], + "title": "Get_res multiply", + "properties": {}, + "widgets_values": [ + "res multiply" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1344, + "type": "GetNode", + "pos": [ + 1769.6929931640625, + 1209.8760986328125 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 39, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 2792 + ], + "slot_index": 0 + } + ], + "title": "Get_loadImage", + "properties": {}, + "widgets_values": [ + "loadImage" + ] + }, + { + "id": 1388, + "type": "GetNode", + "pos": [ + 3631.819091796875, + 3408.91357421875 + ], + "size": [ + 268.79998779296875, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 40, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 2165, + 2166 + ], + "slot_index": 0 + } + ], + "title": "Get_Output - imgload_prep", + "properties": {}, + "widgets_values": [ + "Output - imgload_prep" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1406, + "type": "GetNode", + "pos": [ + 4469.0615234375, + 4192.4921875 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 41, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 2231 + ], + "slot_index": 0 + } + ], + "title": "Get_seed", + "properties": {}, + "widgets_values": [ + "seed" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1410, + "type": "GetNode", + "pos": [ + 3629.0615234375, + 4072.495361328125 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 42, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 2212 + ], + "slot_index": 0 + } + ], + "title": "Get_batch", + "properties": {}, + "widgets_values": [ + "batch" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1515, + "type": "GetNode", + "pos": [ + 5860, + 650 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 43, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "COMBO", + "type": "COMBO", + "links": [ + 2333 + ] + } + ], + "title": "Get_sampler", + "properties": {}, + "widgets_values": [ + "sampler" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1520, + "type": "GetNode", + "pos": [ + 7021.9658203125, + 357.2383117675781 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 44, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "SAMPLER", + "type": "SAMPLER", + "links": [ + 2337, + 2338 + ], + "slot_index": 0 + } + ], + "title": "Get_sampler_convert", + "properties": {}, + "widgets_values": [ + "sampler_convert" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1523, + "type": "GetNode", + "pos": [ + 4669.0615234375, + 4362.4921875 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 45, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "COMBO", + "type": "COMBO", + "links": [ + 2341 + ] + } + ], + "title": "Get_sampler", + "properties": {}, + "widgets_values": [ + "sampler" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1524, + "type": "GetNode", + "pos": [ + 4901.81689453125, + 3578.911376953125 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 46, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "COMBO", + "type": "COMBO", + "links": [ + 2342 + ] + } + ], + "title": "Get_sampler", + "properties": {}, + "widgets_values": [ + "sampler" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1526, + "type": "GetNode", + "pos": [ + 4047.0810546875, + 1346.7099609375 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 47, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "STRING", + "type": "STRING", + "links": [ + 2344 + ], + "slot_index": 0 + } + ], + "title": "Get_sampler_name", + "properties": {}, + "widgets_values": [ + "sampler_name" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1602, + "type": "GetNode", + "pos": [ + -5269.3134765625, + 322.1641540527344 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": false + }, + "order": 48, + "mode": 4, + "inputs": [], + "outputs": [ + { + "name": "STRING", + "type": "STRING", + "links": [ + 4780 + ], + "slot_index": 0 + } + ], + "title": "Get_prompt", + "properties": {}, + "widgets_values": [ + "prompt" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1618, + "type": "GetNode", + "pos": [ + 5120, + 510 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 49, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "links": [ + 2404 + ], + "slot_index": 0 + } + ], + "title": "Get_max shift", + "properties": {}, + "widgets_values": [ + "max shift" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1620, + "type": "GetNode", + "pos": [ + 4686.86669921875, + 3230.522705078125 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 50, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "links": [ + 2406 + ], + "slot_index": 0 + } + ], + "title": "Get_max shift", + "properties": {}, + "widgets_values": [ + "max shift" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1623, + "type": "GetNode", + "pos": [ + 3947.0810546875, + 1386.7099609375 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 51, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "links": [ + 2409 + ], + "slot_index": 0 + } + ], + "title": "Get_max shift", + "properties": {}, + "widgets_values": [ + "max shift" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 2217, + "type": "GetNode", + "pos": [ + 4356.2509765625, + 399.36273193359375 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 52, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 3214 + ], + "slot_index": 0 + } + ], + "title": "Get_batch", + "properties": {}, + "widgets_values": [ + "batch" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 2328, + "type": "GetNode", + "pos": [ + 4077.0810546875, + 966.7098999023438 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 53, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [ + 3362 + ], + "slot_index": 0 + } + ], + "title": "Get_conditioning", + "properties": {}, + "widgets_values": [ + "conditioning" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 2364, + "type": "GetNode", + "pos": [ + 1150, + 150 + ], + "size": [ + 268.79998779296875, + 58 + ], + "flags": { + "collapsed": true, + "pinned": true + }, + "order": 54, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 3425 + ], + "slot_index": 0 + } + ], + "title": "Get_loadImage", + "properties": {}, + "widgets_values": [ + "loadImage" + ] + }, + { + "id": 2429, + "type": "GetNode", + "pos": [ + 4326.2509765625, + 449.36273193359375 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 55, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "COMBO", + "type": "COMBO", + "links": [ + 3448 + ], + "slot_index": 0 + } + ], + "title": "Get_resolution", + "properties": {}, + "widgets_values": [ + "resolution" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 2438, + "type": "GetNode", + "pos": [ + -3249.044677734375, + 316.6081848144531 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 56, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "SAMPLER_PARAMS", + "type": "SAMPLER_PARAMS", + "links": [ + 3461 + ], + "slot_index": 0 + } + ], + "title": "Get_sampler params", + "properties": {}, + "widgets_values": [ + "sampler params" + ] + }, + { + "id": 2472, + "type": "GetNode", + "pos": [ + 6300, + 460 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 57, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "VAE", + "type": "VAE", + "links": [ + 3499 + ], + "slot_index": 0 + } + ], + "title": "Get_vae", + "properties": {}, + "widgets_values": [ + "vae" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3121, + "type": "GetNode", + "pos": [ + 3640, + 1700 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 58, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "MASK", + "type": "MASK", + "links": [ + 4966 + ], + "slot_index": 0 + } + ], + "title": "Get_mask", + "properties": {}, + "widgets_values": [ + "mask" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3133, + "type": "GetNode", + "pos": [ + 4396.86669921875, + 3230.522705078125 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 59, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 4666 + ], + "slot_index": 0 + } + ], + "title": "Get_batch", + "properties": {}, + "widgets_values": [ + "batch" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3217, + "type": "GetNode", + "pos": [ + 4540, + 2570 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 60, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "links": [ + 4788 + ] + } + ], + "title": "Get_modelWithLoRAs", + "properties": {}, + "widgets_values": [ + "modelWithLoRAs" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3218, + "type": "GetNode", + "pos": [ + 3640, + 2480 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 61, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "VAE", + "type": "VAE", + "links": [ + 4785, + 4796 + ], + "slot_index": 0 + } + ], + "title": "Get_vae", + "properties": {}, + "widgets_values": [ + "vae" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3224, + "type": "GetNode", + "pos": [ + 3680, + 2740 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 62, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "CLIP", + "type": "CLIP", + "links": [ + 4782 + ], + "slot_index": 0 + } + ], + "title": "Get_clip", + "properties": {}, + "widgets_values": [ + "clip" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3225, + "type": "GetNode", + "pos": [ + 3630, + 2520 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 63, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 4786, + 4810 + ], + "slot_index": 0 + } + ], + "title": "Get_Output - imgload_prep", + "properties": {}, + "widgets_values": [ + "Output - imgload_prep" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3226, + "type": "GetNode", + "pos": [ + 3650, + 2590 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 64, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "MASK", + "type": "MASK", + "links": [ + 4787, + 4809 + ], + "slot_index": 0 + } + ], + "title": "Get_mask_outpainting", + "properties": {}, + "widgets_values": [ + "mask_outpainting" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3227, + "type": "GetNode", + "pos": [ + 4460, + 2910 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 65, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 4793 + ], + "slot_index": 0 + } + ], + "title": "Get_seed", + "properties": {}, + "widgets_values": [ + "seed" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3228, + "type": "GetNode", + "pos": [ + 4460, + 2960 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 66, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 4794 + ], + "slot_index": 0 + } + ], + "title": "Get_steps", + "properties": {}, + "widgets_values": [ + "steps" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3231, + "type": "GetNode", + "pos": [ + 4440, + 3000 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 67, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "COMBO", + "type": "COMBO", + "links": [ + 4801 + ] + } + ], + "title": "Get_scheduler", + "properties": {}, + "widgets_values": [ + "scheduler" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3233, + "type": "GetNode", + "pos": [ + 4450, + 3040 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 68, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "COMBO", + "type": "COMBO", + "links": [ + 4803 + ] + } + ], + "title": "Get_sampler", + "properties": {}, + "widgets_values": [ + "sampler" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3256, + "type": "GetNode", + "pos": [ + 3790, + 1980 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 69, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "CLIP", + "type": "CLIP", + "links": [ + 4827 + ], + "slot_index": 0 + } + ], + "title": "Get_clip", + "properties": {}, + "widgets_values": [ + "clip" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3257, + "type": "GetNode", + "pos": [ + 3640, + 1650 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 70, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 4849 + ], + "slot_index": 0 + } + ], + "title": "Get_Output - imgload_prep", + "properties": {}, + "widgets_values": [ + "Output - imgload_prep" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3260, + "type": "GetNode", + "pos": [ + 4830, + 2080 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 71, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 4839 + ], + "slot_index": 0 + } + ], + "title": "Get_steps", + "properties": {}, + "widgets_values": [ + "steps" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3268, + "type": "GetNode", + "pos": [ + 4810, + 2120 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 72, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "COMBO", + "type": "COMBO", + "links": [ + 4852 + ] + } + ], + "title": "Get_scheduler", + "properties": {}, + "widgets_values": [ + "scheduler" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3269, + "type": "GetNode", + "pos": [ + 4820, + 2160 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 73, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "COMBO", + "type": "COMBO", + "links": [ + 4853 + ] + } + ], + "title": "Get_sampler", + "properties": {}, + "widgets_values": [ + "sampler" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3285, + "type": "GetNode", + "pos": [ + 4820, + 2200 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 74, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "links": [ + 4921 + ], + "slot_index": 0 + } + ], + "title": "Get_denoise", + "properties": {}, + "widgets_values": [ + "denoise" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3291, + "type": "GetNode", + "pos": [ + -2406.878173828125, + 72.23831939697266 + ], + "size": [ + 230, + 60 + ], + "flags": { + "collapsed": false + }, + "order": 75, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "links": [ + 5611 + ], + "slot_index": 0 + } + ], + "title": "Get_model_fill", + "properties": {}, + "widgets_values": [ + "model_fill" + ] + }, + { + "id": 3302, + "type": "GetNode", + "pos": [ + 510, + 350 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 76, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "links": [ + 4940 + ], + "slot_index": 0 + } + ], + "title": "Get_sendModel", + "properties": {}, + "widgets_values": [ + "sendModel" + ] + }, + { + "id": 3303, + "type": "GetNode", + "pos": [ + 4730, + 1770 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 77, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "links": [ + 4945 + ], + "slot_index": 0 + } + ], + "title": "Get_modelWithLoRAs", + "properties": {}, + "widgets_values": [ + "modelWithLoRAs" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3329, + "type": "GetNode", + "pos": [ + 1839.6929931640625, + 1049.8760986328125 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 78, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 4977 + ] + } + ], + "title": "Get_mask_feather", + "properties": {}, + "widgets_values": [ + "mask_feather" + ] + }, + { + "id": 3330, + "type": "GetNode", + "pos": [ + 5540, + 1930 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 79, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 5589 + ], + "slot_index": 0 + } + ], + "title": "Get_mask_feather", + "properties": {}, + "widgets_values": [ + "mask_feather" + ] + }, + { + "id": 3331, + "type": "GetNode", + "pos": [ + 5160, + 2940 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 80, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 4979 + ], + "slot_index": 0 + } + ], + "title": "Get_mask_feather", + "properties": {}, + "widgets_values": [ + "mask_feather" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3342, + "type": "GetNode", + "pos": [ + 4090, + 1840 + ], + "size": [ + 250, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 81, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [ + 4992 + ] + } + ], + "title": "Get_conditioning", + "properties": {}, + "widgets_values": [ + "conditioning" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3344, + "type": "GetNode", + "pos": [ + 4630.46533203125, + 4699.712890625 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 82, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "VAE", + "type": "VAE", + "links": [ + 4996, + 5001 + ], + "slot_index": 0 + } + ], + "title": "Get_vae", + "properties": {}, + "widgets_values": [ + "vae" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3348, + "type": "GetNode", + "pos": [ + 5246.32666015625, + 4994.1142578125 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 83, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 5007 + ], + "slot_index": 0 + } + ], + "title": "Get_seed", + "properties": {}, + "widgets_values": [ + "seed" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3349, + "type": "GetNode", + "pos": [ + 4981.232421875, + 4995.3798828125 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 84, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 4999 + ], + "slot_index": 0 + } + ], + "title": "Get_batch", + "properties": {}, + "widgets_values": [ + "batch" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3350, + "type": "GetNode", + "pos": [ + 5236.32666015625, + 5054.1142578125 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 85, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 5008 + ], + "slot_index": 0 + } + ], + "title": "Get_steps", + "properties": {}, + "widgets_values": [ + "steps" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3351, + "type": "GetNode", + "pos": [ + 3692.0634765625, + 4822.7001953125 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 86, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 5023, + 5106 + ], + "slot_index": 0 + } + ], + "title": "Get_Output - imgload_prep", + "properties": {}, + "widgets_values": [ + "Output - imgload_prep" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3355, + "type": "GetNode", + "pos": [ + 5262.06591796875, + 4782.7001953125 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 87, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "links": [ + 5003 + ], + "slot_index": 0 + } + ], + "title": "Get_modelWithLoRAs", + "properties": {}, + "widgets_values": [ + "modelWithLoRAs" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3359, + "type": "GetNode", + "pos": [ + 4410, + 4830 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 88, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "CLIP", + "type": "CLIP", + "links": [ + 5012 + ], + "slot_index": 0 + } + ], + "title": "Get_clip", + "properties": {}, + "widgets_values": [ + "clip" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3365, + "type": "GetNode", + "pos": [ + 4580, + 4780 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 89, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [ + 5015 + ], + "slot_index": 0 + } + ], + "title": "Get_conditioning", + "properties": {}, + "widgets_values": [ + "conditioning" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3369, + "type": "GetNode", + "pos": [ + 5226.32666015625, + 5104.1142578125 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 90, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "COMBO", + "type": "COMBO", + "links": [ + 5020 + ] + } + ], + "title": "Get_scheduler", + "properties": {}, + "widgets_values": [ + "scheduler" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3370, + "type": "GetNode", + "pos": [ + 5226.32666015625, + 5164.1142578125 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 91, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "COMBO", + "type": "COMBO", + "links": [ + 5021 + ] + } + ], + "title": "Get_sampler", + "properties": {}, + "widgets_values": [ + "sampler" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3378, + "type": "GetNode", + "pos": [ + 4450, + 6240 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 92, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "CLIP_VISION", + "type": "CLIP_VISION", + "links": [ + 5051 + ], + "slot_index": 0 + } + ], + "title": "Get_model_clipVision", + "properties": {}, + "widgets_values": [ + "model_clipVision" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3379, + "type": "GetNode", + "pos": [ + 4473.34765625, + 6191.7451171875 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 93, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "STYLE_MODEL", + "type": "STYLE_MODEL", + "links": [ + 5055 + ], + "slot_index": 0 + } + ], + "title": "Get_model_redux", + "properties": {}, + "widgets_values": [ + "model_redux" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3380, + "type": "GetNode", + "pos": [ + 3680, + 2640 + ], + "size": [ + 240, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 94, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [ + 5039 + ], + "slot_index": 0 + } + ], + "title": "Get_conditioning", + "properties": {}, + "widgets_values": [ + "conditioning" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3403, + "type": "GetNode", + "pos": [ + 4230.998046875, + 6323.8974609375 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 95, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "VEC3", + "type": "VEC3", + "links": [ + 5082 + ] + } + ], + "title": "Get_ipadapter_strenght", + "properties": {}, + "widgets_values": [ + "ipadapter_strenght" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3451, + "type": "GetNode", + "pos": [ + 3900.090087890625, + 5473.4619140625 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 96, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "VAE", + "type": "VAE", + "links": [ + 5168, + 5173 + ], + "slot_index": 0 + } + ], + "title": "Get_vae", + "properties": {}, + "widgets_values": [ + "vae" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3455, + "type": "GetNode", + "pos": [ + 4470.0888671875, + 5833.4619140625 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 97, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 5179 + ], + "slot_index": 0 + } + ], + "title": "Get_seed", + "properties": {}, + "widgets_values": [ + "seed" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3456, + "type": "GetNode", + "pos": [ + 4200.0888671875, + 5753.4619140625 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 98, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 5171 + ], + "slot_index": 0 + } + ], + "title": "Get_batch", + "properties": {}, + "widgets_values": [ + "batch" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3457, + "type": "GetNode", + "pos": [ + 4470.0888671875, + 5873.4619140625 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 99, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 5180 + ], + "slot_index": 0 + } + ], + "title": "Get_steps", + "properties": {}, + "widgets_values": [ + "steps" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3458, + "type": "GetNode", + "pos": [ + 1828.7926025390625, + 824.1670532226562 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 100, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 5212, + 5482 + ], + "slot_index": 0 + } + ], + "title": "Get_Output - imgload_prep", + "properties": {}, + "widgets_values": [ + "Output - imgload_prep" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3460, + "type": "GetNode", + "pos": [ + 4530.0888671875, + 5563.4619140625 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 101, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "links": [ + 5175 + ], + "slot_index": 0 + } + ], + "title": "Get_modelWithLoRAs", + "properties": {}, + "widgets_values": [ + "modelWithLoRAs" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3461, + "type": "GetNode", + "pos": [ + 3660.090087890625, + 5683.4619140625 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 102, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "CLIP", + "type": "CLIP", + "links": [ + 5181 + ], + "slot_index": 0 + } + ], + "title": "Get_clip", + "properties": {}, + "widgets_values": [ + "clip" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3463, + "type": "GetNode", + "pos": [ + 3810.090087890625, + 5593.4619140625 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 103, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [ + 5166 + ], + "slot_index": 0 + } + ], + "title": "Get_conditioning", + "properties": {}, + "widgets_values": [ + "conditioning" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3488, + "type": "GetNode", + "pos": [ + 4450.0888671875, + 5913.4619140625 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 104, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "COMBO", + "type": "COMBO", + "links": [ + 5211 + ] + } + ], + "title": "Get_scheduler", + "properties": {}, + "widgets_values": [ + "scheduler" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3490, + "type": "GetNode", + "pos": [ + 4460.0888671875, + 5953.4619140625 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 105, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "COMBO", + "type": "COMBO", + "links": [ + 5210 + ], + "slot_index": 0 + } + ], + "title": "Get_sampler", + "properties": {}, + "widgets_values": [ + "sampler" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3506, + "type": "GetNode", + "pos": [ + -2416.878173828125, + 182.2382354736328 + ], + "size": [ + 240, + 60 + ], + "flags": { + "collapsed": false + }, + "order": 106, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "links": [ + 5612 + ], + "slot_index": 0 + } + ], + "title": "Get_model_depth", + "properties": {}, + "widgets_values": [ + "model_depth" + ] + }, + { + "id": 3507, + "type": "GetNode", + "pos": [ + -2398.478515625, + 280.7325134277344 + ], + "size": [ + 220, + 60 + ], + "flags": { + "collapsed": false + }, + "order": 107, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "links": [ + 5613 + ], + "slot_index": 0 + } + ], + "title": "Get_model_canny", + "properties": {}, + "widgets_values": [ + "model_canny" + ] + }, + { + "id": 3553, + "type": "GetNode", + "pos": [ + 3629.0615234375, + 4212.4921875 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 108, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 5593 + ], + "slot_index": 0 + } + ], + "title": "Get_mask_feather", + "properties": {}, + "widgets_values": [ + "mask_feather" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3555, + "type": "GetNode", + "pos": [ + 3629.0615234375, + 4162.4921875 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 109, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "MASK", + "type": "MASK", + "links": [ + 5592 + ], + "slot_index": 0 + } + ], + "title": "Get_mask", + "properties": {}, + "widgets_values": [ + "mask" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3589, + "type": "GetNode", + "pos": [ + 3620.95361328125, + 7143.40185546875 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 110, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 5382 + ], + "slot_index": 0 + } + ], + "title": "Get_Output - imgload_prep", + "properties": {}, + "widgets_values": [ + "Output - imgload_prep" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3592, + "type": "GetNode", + "pos": [ + 3650, + 7200 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 111, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 5383 + ], + "slot_index": 0 + } + ], + "title": "Get_loadImage_IP3", + "properties": {}, + "widgets_values": [ + "loadImage_IP3" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3658, + "type": "GetNode", + "pos": [ + 3830.090087890625, + 5743.4619140625 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 112, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 5452 + ] + } + ], + "title": "Get_preprocessor canny", + "properties": {}, + "widgets_values": [ + "preprocessor canny" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3659, + "type": "GetNode", + "pos": [ + -5268.875, + 2440.03125 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 113, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 5453, + 5537 + ], + "slot_index": 0 + } + ], + "title": "Get_preprocessor canny", + "properties": {}, + "widgets_values": [ + "preprocessor canny" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3660, + "type": "GetNode", + "pos": [ + -5218.875, + 2790.03125 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 114, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 5454 + ], + "slot_index": 0 + } + ], + "title": "Get_preprocessor_depth", + "properties": {}, + "widgets_values": [ + "preprocessor_depth" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3667, + "type": "GetNode", + "pos": [ + -5218.875, + 1410.03125 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 115, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 5464 + ], + "slot_index": 0 + } + ], + "title": "Get_loadImage_IP1", + "properties": {}, + "widgets_values": [ + "loadImage_IP1" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3668, + "type": "GetNode", + "pos": [ + -5238.875, + 1720.03125 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 116, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 5463 + ], + "slot_index": 0 + } + ], + "title": "Get_loadImage_IP2", + "properties": {}, + "widgets_values": [ + "loadImage_IP2" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3669, + "type": "GetNode", + "pos": [ + -5198.875, + 2080.03125 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 117, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 5465 + ], + "slot_index": 0 + } + ], + "title": "Get_loadImage_IP3", + "properties": {}, + "widgets_values": [ + "loadImage_IP3" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3670, + "type": "GetNode", + "pos": [ + -5258.875, + 1070.03125 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 118, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "MASK", + "type": "MASK", + "links": [ + 5588 + ], + "slot_index": 0 + } + ], + "title": "Get_mask", + "properties": {}, + "widgets_values": [ + "mask" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3671, + "type": "GetNode", + "pos": [ + -5278.875, + 770.03125 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 119, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 5468 + ], + "slot_index": 0 + } + ], + "title": "Get_Output - imgload_prep", + "properties": {}, + "widgets_values": [ + "Output - imgload_prep" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3675, + "type": "GetNode", + "pos": [ + 1880, + 170 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 120, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 5472 + ] + } + ], + "title": "Get_previewOutputs", + "properties": {}, + "widgets_values": [ + "previewOutputs" + ] + }, + { + "id": 3684, + "type": "GetNode", + "pos": [ + -5258.875, + 1150.03125 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 121, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 5586 + ], + "slot_index": 0 + } + ], + "title": "Get_mask_feather", + "properties": {}, + "widgets_values": [ + "mask_feather" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3395, + "type": "GetNode", + "pos": [ + 7130, + 6710 + ], + "size": [ + 240, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 122, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 5729 + ], + "slot_index": 0 + } + ], + "title": "Get_loadImage_IP3", + "properties": {}, + "widgets_values": [ + "loadImage_IP3" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3339, + "type": "GetNode", + "pos": [ + 5820, + 6700 + ], + "size": [ + 250, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 123, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 5730 + ], + "slot_index": 0 + } + ], + "title": "Get_loadImage_IP2", + "properties": {}, + "widgets_values": [ + "loadImage_IP2" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3336, + "type": "GetNode", + "pos": [ + 4630, + 6710 + ], + "size": [ + 260, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 124, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 5703 + ], + "slot_index": 0 + } + ], + "title": "Get_loadImage_IP1", + "properties": {}, + "widgets_values": [ + "loadImage_IP1" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3368, + "type": "GetNode", + "pos": [ + 3670, + 6510 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 125, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "CLIP", + "type": "CLIP", + "links": [ + 5019 + ], + "slot_index": 0 + } + ], + "title": "Get_clip", + "properties": {}, + "widgets_values": [ + "clip" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 418, + "type": "ImageResizeKJ", + "pos": [ + 4273.5576171875, + 3293.437255859375 + ], + "size": [ + 320, + 240 + ], + "flags": { + "collapsed": true + }, + "order": 320, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 2180 + }, + { + "name": "get_image_size", + "type": "IMAGE", + "link": null, + "shape": 7 + }, + { + "name": "width_input", + "type": "INT", + "link": 4718, + "widget": { + "name": "width_input" + } + }, + { + "name": "height_input", + "type": "INT", + "link": 4719, + "widget": { + "name": "height_input" + } + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 3433, + 4667 + ], + "slot_index": 0, + "shape": 3 + }, + { + "name": "width", + "type": "INT", + "links": [], + "slot_index": 1, + "shape": 3 + }, + { + "name": "height", + "type": "INT", + "links": [], + "slot_index": 2, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "ImageResizeKJ", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 2048, + 2048, + "lanczos", + true, + 2, + 0, + 0, + "disabled" + ] + }, + { + "id": 429, + "type": "DetailerForEachPipe", + "pos": [ + 4889.0615234375, + 4022.4970703125 + ], + "size": [ + 320, + 540 + ], + "flags": {}, + "order": 349, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 2211 + }, + { + "name": "segs", + "type": "SEGS", + "link": 5335, + "slot_index": 1 + }, + { + "name": "basic_pipe", + "type": "BASIC_PIPE", + "link": 3152, + "slot_index": 2 + }, + { + "name": "detailer_hook", + "type": "DETAILER_HOOK", + "link": null, + "slot_index": 3, + "shape": 7 + }, + { + "name": "refiner_basic_pipe_opt", + "type": "BASIC_PIPE", + "link": null, + "shape": 7 + }, + { + "name": "scheduler_func_opt", + "type": "SCHEDULER_FUNC", + "link": null, + "shape": 7 + }, + { + "name": "seed", + "type": "INT", + "link": 2243, + "widget": { + "name": "seed" + } + }, + { + "name": "steps", + "type": "INT", + "link": 2035, + "widget": { + "name": "steps" + } + }, + { + "name": "scheduler", + "type": "COMBO", + "link": 2313, + "widget": { + "name": "scheduler" + } + }, + { + "name": "denoise", + "type": "FLOAT", + "link": 2034, + "widget": { + "name": "denoise" + } + }, + { + "name": "sampler_name", + "type": "COMBO", + "link": 2341, + "widget": { + "name": "sampler_name" + } + } + ], + "outputs": [ + { + "name": "image", + "type": "IMAGE", + "links": [ + 5630 + ], + "slot_index": 0, + "shape": 3 + }, + { + "name": "segs", + "type": "SEGS", + "links": [], + "slot_index": 1, + "shape": 3 + }, + { + "name": "basic_pipe", + "type": "BASIC_PIPE", + "links": null, + "shape": 3 + }, + { + "name": "cnet_images", + "type": "IMAGE", + "links": [], + "slot_index": 3, + "shape": 6 + } + ], + "properties": { + "Node name for S&R": "DetailerForEachPipe", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 1024, + true, + 1024, + 903106182242508, + "randomize", + 20, + 1, + "euler", + "beta", + 0.74, + 5, + true, + true, + "", + 0.2, + 1, + false, + 20 + ] + }, + { + "id": 583, + "type": "DualCLIPLoader", + "pos": [ + 2997.352294921875, + 397.0935974121094 + ], + "size": [ + 320, + 110 + ], + "flags": {}, + "order": 126, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "CLIP", + "type": "CLIP", + "links": [ + 4424 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "DualCLIPLoader", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "t5xxl_fp16.safetensors", + "clip_l.safetensors", + "flux" + ] + }, + { + "id": 586, + "type": "ModelSamplingFlux", + "pos": [ + 5300, + 370 + ], + "size": [ + 250, + 120 + ], + "flags": { + "collapsed": false + }, + "order": 277, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 5045 + }, + { + "name": "width", + "type": "INT", + "link": 3449, + "widget": { + "name": "width" + } + }, + { + "name": "height", + "type": "INT", + "link": 3450, + "widget": { + "name": "height" + } + }, + { + "name": "max_shift", + "type": "FLOAT", + "link": 2404, + "widget": { + "name": "max_shift" + } + } + ], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "links": [ + 1123, + 1424, + 1489 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "ModelSamplingFlux", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 1.1500000000000001, + 0.5, + 16, + 704 + ] + }, + { + "id": 589, + "type": "BasicGuider", + "pos": [ + 5940, + 410 + ], + "size": [ + 160, + 50 + ], + "flags": { + "collapsed": true + }, + "order": 324, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 1424 + }, + { + "name": "conditioning", + "type": "CONDITIONING", + "link": 5237 + } + ], + "outputs": [ + { + "name": "GUIDER", + "type": "GUIDER", + "links": [ + 1118 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "BasicGuider", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 590, + "type": "SamplerCustomAdvanced", + "pos": [ + 6280, + 410 + ], + "size": [ + 240, + 110 + ], + "flags": { + "collapsed": true + }, + "order": 351, + "mode": 0, + "inputs": [ + { + "name": "noise", + "type": "NOISE", + "link": 1371 + }, + { + "name": "guider", + "type": "GUIDER", + "link": 1118 + }, + { + "name": "sampler", + "type": "SAMPLER", + "link": 2334 + }, + { + "name": "sigmas", + "type": "SIGMAS", + "link": 1120 + }, + { + "name": "latent_image", + "type": "LATENT", + "link": 5329 + } + ], + "outputs": [ + { + "name": "output", + "type": "LATENT", + "links": [], + "slot_index": 0, + "shape": 3 + }, + { + "name": "denoised_output", + "type": "LATENT", + "links": [ + 1474 + ], + "slot_index": 1, + "shape": 3 + } + ], + "title": "Sampler", + "properties": { + "Node name for S&R": "SamplerCustomAdvanced", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 591, + "type": "RandomNoise", + "pos": [ + 6030, + 340 + ], + "size": [ + 210, + 30 + ], + "flags": { + "collapsed": true + }, + "order": 178, + "mode": 0, + "inputs": [ + { + "name": "noise_seed", + "type": "INT", + "link": 1360, + "widget": { + "name": "noise_seed" + } + } + ], + "outputs": [ + { + "name": "NOISE", + "type": "NOISE", + "links": [ + 1371 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "RandomNoise", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 1, + "fixed" + ] + }, + { + "id": 593, + "type": "BasicScheduler", + "pos": [ + 5860, + 460 + ], + "size": [ + 220, + 100 + ], + "flags": { + "collapsed": false + }, + "order": 323, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 1123 + }, + { + "name": "scheduler", + "type": "COMBO", + "link": 2037, + "widget": { + "name": "scheduler" + } + }, + { + "name": "steps", + "type": "INT", + "link": 2038, + "widget": { + "name": "steps" + } + } + ], + "outputs": [ + { + "name": "SIGMAS", + "type": "SIGMAS", + "links": [ + 1120, + 5330 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "BasicScheduler", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "beta", + 20, + 1 + ] + }, + { + "id": 594, + "type": "VAELoader", + "pos": [ + 2997.352294921875, + 293.0782775878906 + ], + "size": [ + 320, + 60 + ], + "flags": { + "collapsed": false + }, + "order": 127, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "VAE", + "type": "VAE", + "links": [ + 4425 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "VAELoader", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "ae.sft" + ] + }, + { + "id": 609, + "type": "VAEDecode", + "pos": [ + 6480, + 440 + ], + "size": [ + 170, + 50 + ], + "flags": { + "collapsed": true + }, + "order": 366, + "mode": 0, + "inputs": [ + { + "name": "samples", + "type": "LATENT", + "link": 1474 + }, + { + "name": "vae", + "type": "VAE", + "link": 3499 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 1538 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "VAEDecode", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 624, + "type": "Save Image Grid (mtb)", + "pos": [ + -4697.18603515625, + 239.85467529296875 + ], + "size": [ + 240, + 190 + ], + "flags": { + "collapsed": false + }, + "order": 273, + "mode": 4, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 2380 + }, + { + "name": "filename_prefix", + "type": "STRING", + "link": 4781, + "widget": { + "name": "filename_prefix" + } + } + ], + "outputs": [], + "properties": { + "Node name for S&R": "Save Image Grid (mtb)", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "stickFigures", + false + ] + }, + { + "id": 641, + "type": "ToBasicPipe", + "pos": [ + 4016.249755859375, + 329.36273193359375 + ], + "size": [ + 240, + 110 + ], + "flags": { + "collapsed": true + }, + "order": 359, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 5326 + }, + { + "name": "clip", + "type": "CLIP", + "link": 5325 + }, + { + "name": "vae", + "type": "VAE", + "link": 5324 + }, + { + "name": "positive", + "type": "CONDITIONING", + "link": 5017 + }, + { + "name": "negative", + "type": "CONDITIONING", + "link": 3212 + } + ], + "outputs": [ + { + "name": "basic_pipe", + "type": "BASIC_PIPE", + "links": [ + 1187 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "ToBasicPipe", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 697, + "type": "ModelSamplingFlux", + "pos": [ + 4870, + 3310 + ], + "size": [ + 210, + 130 + ], + "flags": { + "collapsed": true + }, + "order": 264, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 1608 + }, + { + "name": "max_shift", + "type": "FLOAT", + "link": 2406, + "widget": { + "name": "max_shift" + } + } + ], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "links": [ + 2169 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "ModelSamplingFlux", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 1.1500000000000001, + 0.5, + 1024, + 1024 + ] + }, + { + "id": 703, + "type": "GetImageSize+", + "pos": [ + 3883.55810546875, + 3513.43603515625 + ], + "size": [ + 200, + 70 + ], + "flags": { + "collapsed": true + }, + "order": 193, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 2166 + } + ], + "outputs": [ + { + "name": "width", + "type": "INT", + "links": [ + 4716 + ], + "slot_index": 0, + "shape": 3 + }, + { + "name": "height", + "type": "INT", + "links": [ + 4717 + ], + "slot_index": 1, + "shape": 3 + }, + { + "name": "count", + "type": "INT", + "links": null, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "GetImageSize+", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 834, + "type": "Reroute", + "pos": [ + 6850, + 240 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 352, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 1490 + } + ], + "outputs": [ + { + "name": "", + "type": "MODEL", + "links": [ + 2087 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 837, + "type": "Reroute", + "pos": [ + 5737.9697265625, + 223.6033172607422 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 325, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 1489 + } + ], + "outputs": [ + { + "name": "", + "type": "MODEL", + "links": [ + 1490 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 921, + "type": "Reroute", + "pos": [ + 6850, + 280 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 314, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5238 + } + ], + "outputs": [ + { + "name": "", + "type": "CONDITIONING", + "links": [ + 2088 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 922, + "type": "Seed (rgthree)", + "pos": [ + 480, + 1160 + ], + "size": [ + 310, + 130 + ], + "flags": { + "collapsed": false, + "pinned": true + }, + "order": 128, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "SEED", + "type": "INT", + "links": [ + 1589 + ], + "slot_index": 0, + "shape": 3, + "dir": 4 + } + ], + "title": "Seed", + "properties": {}, + "widgets_values": [ + -1, + null, + null, + null + ] + }, + { + "id": 932, + "type": "FromBasicPipe_v2", + "pos": [ + 4696.86669921875, + 3370.522705078125 + ], + "size": [ + 270, + 130 + ], + "flags": { + "collapsed": true + }, + "order": 180, + "mode": 0, + "inputs": [ + { + "name": "basic_pipe", + "type": "BASIC_PIPE", + "link": 1599 + } + ], + "outputs": [ + { + "name": "basic_pipe", + "type": "BASIC_PIPE", + "links": [], + "slot_index": 0, + "shape": 3 + }, + { + "name": "model", + "type": "MODEL", + "links": [ + 1608 + ], + "slot_index": 1, + "shape": 3 + }, + { + "name": "clip", + "type": "CLIP", + "links": null, + "shape": 3 + }, + { + "name": "vae", + "type": "VAE", + "links": [ + 2172 + ], + "slot_index": 3, + "shape": 3 + }, + { + "name": "positive", + "type": "CONDITIONING", + "links": [ + 5369 + ], + "slot_index": 4, + "shape": 3 + }, + { + "name": "negative", + "type": "CONDITIONING", + "links": [ + 2171 + ], + "slot_index": 5, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "FromBasicPipe_v2", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 963, + "type": "VAEEncode", + "pos": [ + 3843.34716796875, + 972.2465209960938 + ], + "size": [ + 210, + 50 + ], + "flags": { + "collapsed": true + }, + "order": 188, + "mode": 0, + "inputs": [ + { + "name": "pixels", + "type": "IMAGE", + "link": 2071 + }, + { + "name": "vae", + "type": "VAE", + "link": 1680 + } + ], + "outputs": [ + { + "name": "LATENT", + "type": "LATENT", + "links": [ + 1798 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "VAEEncode", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 1051, + "type": "SamplerCustomAdvanced", + "pos": [ + 7311.9658203125, + 267.23828125 + ], + "size": [ + 240, + 110 + ], + "flags": { + "collapsed": false + }, + "order": 381, + "mode": 0, + "inputs": [ + { + "name": "noise", + "type": "NOISE", + "link": 1776, + "slot_index": 0 + }, + { + "name": "guider", + "type": "GUIDER", + "link": 2089, + "slot_index": 1 + }, + { + "name": "sampler", + "type": "SAMPLER", + "link": 2337, + "slot_index": 2 + }, + { + "name": "sigmas", + "type": "SIGMAS", + "link": 1769, + "slot_index": 3 + }, + { + "name": "latent_image", + "type": "LATENT", + "link": 2105, + "slot_index": 4 + } + ], + "outputs": [ + { + "name": "output", + "type": "LATENT", + "links": [ + 1773 + ], + "slot_index": 0, + "shape": 3 + }, + { + "name": "denoised_output", + "type": "LATENT", + "links": [ + 3722 + ], + "slot_index": 1, + "shape": 3 + } + ], + "title": "Sampler", + "properties": { + "Node name for S&R": "SamplerCustomAdvanced", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 1052, + "type": "SplitSigmasDenoise", + "pos": [ + 7064.74609375, + 454.0147705078125 + ], + "size": [ + 210, + 80 + ], + "flags": { + "collapsed": false + }, + "order": 365, + "mode": 0, + "inputs": [ + { + "name": "sigmas", + "type": "SIGMAS", + "link": 2092 + } + ], + "outputs": [ + { + "name": "high_sigmas", + "type": "SIGMAS", + "links": [ + 1769 + ], + "slot_index": 0, + "shape": 3 + }, + { + "name": "low_sigmas", + "type": "SIGMAS", + "links": [ + 3717 + ], + "slot_index": 1, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "SplitSigmasDenoise", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 0.45 + ] + }, + { + "id": 1053, + "type": "SamplerCustomAdvanced", + "pos": [ + 8094.74609375, + 294.0147705078125 + ], + "size": [ + 240, + 110 + ], + "flags": { + "collapsed": false + }, + "order": 412, + "mode": 0, + "inputs": [ + { + "name": "noise", + "type": "NOISE", + "link": 1770, + "slot_index": 0 + }, + { + "name": "guider", + "type": "GUIDER", + "link": 2090, + "slot_index": 1 + }, + { + "name": "sampler", + "type": "SAMPLER", + "link": 2338, + "slot_index": 2 + }, + { + "name": "sigmas", + "type": "SIGMAS", + "link": 3718, + "slot_index": 3 + }, + { + "name": "latent_image", + "type": "LATENT", + "link": 1772, + "slot_index": 4 + } + ], + "outputs": [ + { + "name": "output", + "type": "LATENT", + "links": [], + "slot_index": 0, + "shape": 3 + }, + { + "name": "denoised_output", + "type": "LATENT", + "links": [ + 1787 + ], + "slot_index": 1, + "shape": 3 + } + ], + "title": "Sampler", + "properties": { + "Node name for S&R": "SamplerCustomAdvanced", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1054, + "type": "DisableNoise", + "pos": [ + 7904.74609375, + 204.01480102539062 + ], + "size": [ + 210, + 30 + ], + "flags": { + "collapsed": true + }, + "order": 129, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "NOISE", + "type": "NOISE", + "links": [ + 1770 + ], + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "DisableNoise", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1055, + "type": "InjectLatentNoise+", + "pos": [ + 7674.74609375, + 264.0147705078125 + ], + "size": [ + 260, + 150 + ], + "flags": {}, + "order": 411, + "mode": 0, + "inputs": [ + { + "name": "latent", + "type": "LATENT", + "link": 1773 + }, + { + "name": "mask", + "type": "MASK", + "link": 2412, + "shape": 7 + } + ], + "outputs": [ + { + "name": "LATENT", + "type": "LATENT", + "links": [ + 1772 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "InjectLatentNoise+", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 533956304975038, + "randomize", + 2.5, + "false" + ] + }, + { + "id": 1056, + "type": "RandomNoise", + "pos": [ + 7131.9658203125, + 267.23828125 + ], + "size": [ + 210, + 30 + ], + "flags": { + "collapsed": true + }, + "order": 182, + "mode": 0, + "inputs": [ + { + "name": "noise_seed", + "type": "INT", + "link": 1775, + "widget": { + "name": "noise_seed" + } + } + ], + "outputs": [ + { + "name": "NOISE", + "type": "NOISE", + "links": [ + 1776 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "RandomNoise", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 1, + "fixed" + ] + }, + { + "id": 1060, + "type": "VAEDecode", + "pos": [ + 8384.751953125, + 254.0147705078125 + ], + "size": [ + 170, + 50 + ], + "flags": { + "collapsed": true + }, + "order": 413, + "mode": 0, + "inputs": [ + { + "name": "samples", + "type": "LATENT", + "link": 1787 + }, + { + "name": "vae", + "type": "VAE", + "link": 1786 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 1783 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "VAEDecode", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 1072, + "type": "FluxSamplerParams+", + "pos": [ + 4297.0771484375, + 936.7098999023438 + ], + "size": [ + 230, + 260 + ], + "flags": {}, + "order": 318, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 3363 + }, + { + "name": "conditioning", + "type": "CONDITIONING", + "link": 3362 + }, + { + "name": "latent_image", + "type": "LATENT", + "link": 1800 + }, + { + "name": "loras", + "type": "LORA_PARAMS", + "link": null, + "shape": 7 + }, + { + "name": "denoise", + "type": "STRING", + "link": 4692, + "widget": { + "name": "denoise" + } + }, + { + "name": "seed", + "type": "STRING", + "link": 4690, + "widget": { + "name": "seed" + } + }, + { + "name": "scheduler", + "type": "STRING", + "link": 2005, + "widget": { + "name": "scheduler" + } + }, + { + "name": "steps", + "type": "STRING", + "link": 2004, + "widget": { + "name": "steps" + } + }, + { + "name": "guidance", + "type": "STRING", + "link": 2007, + "widget": { + "name": "guidance" + } + }, + { + "name": "sampler", + "type": "STRING", + "link": 2344, + "widget": { + "name": "sampler" + } + }, + { + "name": "max_shift", + "type": "STRING", + "link": 2410, + "widget": { + "name": "max_shift" + } + } + ], + "outputs": [ + { + "name": "latent", + "type": "LATENT", + "links": [ + 1803 + ], + "slot_index": 0, + "shape": 3 + }, + { + "name": "params", + "type": "SAMPLER_PARAMS", + "links": null, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "FluxSamplerParams+", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "?", + "euler", + "beta", + "20", + "2.5", + "1.15", + "0.5", + "1.0" + ] + }, + { + "id": 1073, + "type": "RepeatLatentBatch", + "pos": [ + 4013.34716796875, + 1012.2463989257812 + ], + "size": [ + 230, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 266, + "mode": 0, + "inputs": [ + { + "name": "samples", + "type": "LATENT", + "link": 1798 + }, + { + "name": "amount", + "type": "INT", + "link": 1920, + "widget": { + "name": "amount" + } + } + ], + "outputs": [ + { + "name": "LATENT", + "type": "LATENT", + "links": [ + 1800 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "RepeatLatentBatch", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 1 + ] + }, + { + "id": 1074, + "type": "VAEDecode", + "pos": [ + 4617.0771484375, + 876.7098999023438 + ], + "size": [ + 170, + 50 + ], + "flags": { + "collapsed": true + }, + "order": 345, + "mode": 0, + "inputs": [ + { + "name": "samples", + "type": "LATENT", + "link": 1803 + }, + { + "name": "vae", + "type": "VAE", + "link": 1804 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 1802 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "VAEDecode", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 1090, + "type": "SDXLEmptyLatentSizePicker+", + "pos": [ + 4526.2509765625, + 379.36273193359375 + ], + "size": [ + 230, + 120 + ], + "flags": { + "collapsed": false + }, + "order": 199, + "mode": 0, + "inputs": [ + { + "name": "batch_size", + "type": "INT", + "link": 3214, + "widget": { + "name": "batch_size" + } + }, + { + "name": "resolution", + "type": "COMBO", + "link": 3448, + "widget": { + "name": "resolution" + } + } + ], + "outputs": [ + { + "name": "LATENT", + "type": "LATENT", + "links": [ + 4514, + 5327 + ], + "slot_index": 0, + "shape": 3 + }, + { + "name": "width", + "type": "INT", + "links": [ + 3449, + 3543 + ], + "slot_index": 1, + "shape": 3 + }, + { + "name": "height", + "type": "INT", + "links": [ + 3450, + 3544 + ], + "slot_index": 2, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "SDXLEmptyLatentSizePicker+", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "1024x1024 (1.0)", + 2, + 0, + 0 + ] + }, + { + "id": 1103, + "type": "Power Lora Loader (rgthree)", + "pos": [ + 480, + 320 + ], + "size": [ + 310, + 240 + ], + "flags": { + "collapsed": false, + "pinned": true + }, + "order": 208, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 4940, + "dir": 3 + }, + { + "name": "clip", + "type": "CLIP", + "link": 3432, + "dir": 3 + } + ], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "links": [ + 1863 + ], + "slot_index": 0, + "shape": 3, + "dir": 4 + }, + { + "name": "CLIP", + "type": "CLIP", + "links": [], + "slot_index": 1, + "shape": 3, + "dir": 4 + } + ], + "title": "Lora Loader", + "properties": { + "Show Strengths": "Single Strength" + }, + "widgets_values": [ + null, + { + "type": "PowerLoraLoaderHeaderWidget" + }, + { + "on": false, + "lora": "FLUX\\Kodak_MC3_Style_F1D-000019.safetensors", + "strength": 0.8, + "strengthTwo": null + }, + { + "on": false, + "lora": "FLUX\\CrayonDrawing_v1.safetensors", + "strength": 1, + "strengthTwo": null + }, + { + "on": false, + "lora": "FLUX\\FLUX-dev-lora-add_details.safetensors", + "strength": 1, + "strengthTwo": null + }, + { + "on": false, + "lora": "FLUX\\CinematicStyleFlux_v1.safetensors", + "strength": 1, + "strengthTwo": null + }, + { + "on": false, + "lora": "FLUX\\olympusd450_lora.safetensors", + "strength": 1, + "strengthTwo": null + }, + null, + "" + ] + }, + { + "id": 1128, + "type": "DepthAnythingV2Preprocessor", + "pos": [ + 7334.07373046875, + -147.37660217285156 + ], + "size": [ + 310, + 80 + ], + "flags": {}, + "order": 399, + "mode": 4, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 1923 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 1867 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "DepthAnythingV2Preprocessor", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "depth_anything_v2_vitl.pth", + 512 + ] + }, + { + "id": 1129, + "type": "RemapImageRange", + "pos": [ + 7674.07373046875, + -147.37660217285156 + ], + "size": [ + 220, + 110 + ], + "flags": {}, + "order": 402, + "mode": 4, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 1867 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 1868, + 1871 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "RemapImageRange", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + -1, + 5, + true + ] + }, + { + "id": 1130, + "type": "ImageToMask", + "pos": [ + 7684.07373046875, + 2.623236656188965 + ], + "size": [ + 230, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 405, + "mode": 4, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 1868 + } + ], + "outputs": [ + { + "name": "MASK", + "type": "MASK", + "links": [ + 3723 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "ImageToMask", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "red" + ] + }, + { + "id": 1131, + "type": "PreviewImage", + "pos": [ + 7904.07373046875, + -157.37660217285156 + ], + "size": [ + 220, + 210 + ], + "flags": {}, + "order": 406, + "mode": 4, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 1871 + } + ], + "outputs": [], + "properties": { + "Node name for S&R": "PreviewImage", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 1134, + "type": "VAEDecode", + "pos": [ + 7504.07373046875, + -7.376744747161865 + ], + "size": [ + 140, + 50 + ], + "flags": { + "collapsed": true + }, + "order": 396, + "mode": 4, + "inputs": [ + { + "name": "samples", + "type": "LATENT", + "link": 2278 + }, + { + "name": "vae", + "type": "VAE", + "link": 1879 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 1923 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "VAEDecode", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 1262, + "type": "ImpactSchedulerAdapter", + "pos": [ + 4689.0615234375, + 4272.4921875 + ], + "size": [ + 260, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 190, + "mode": 0, + "inputs": [ + { + "name": "scheduler", + "type": "COMBO", + "link": 2055, + "widget": { + "name": "scheduler" + } + } + ], + "outputs": [ + { + "name": "scheduler", + "type": "COMBO", + "links": [ + 2313 + ], + "slot_index": 0, + "shape": 3 + } + ], + "title": "Adapter", + "properties": { + "Node name for S&R": "ImpactSchedulerAdapter", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "simple", + "None" + ] + }, + { + "id": 1278, + "type": "StepSlider", + "pos": [ + 480, + 740 + ], + "size": [ + 310, + 60 + ], + "flags": { + "collapsed": false, + "pinned": true + }, + "order": 130, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 2002 + ], + "slot_index": 0, + "shape": 3 + } + ], + "title": "Steps", + "properties": { + "Node name for S&R": "StepSlider", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 20 + ] + }, + { + "id": 1279, + "type": "GuidanceSlider", + "pos": [ + 480, + 840 + ], + "size": [ + 310, + 60 + ], + "flags": { + "pinned": true + }, + "order": 131, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "links": [ + 2001 + ], + "slot_index": 0, + "shape": 3 + } + ], + "title": "Guidance", + "properties": { + "Node name for S&R": "GuidanceSlider", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 2.5167946835645574 + ], + "tabContents": [ + { + "value": 2.5167946835645574 + }, + { + "value": 2.9933584474977253 + }, + { + "value": 30 + } + ], + "activeTab": 0 + }, + { + "id": 1285, + "type": "SomethingToString", + "pos": [ + 4117.0771484375, + 1266.7099609375 + ], + "size": [ + 210, + 80 + ], + "flags": { + "collapsed": true + }, + "order": 186, + "mode": 0, + "inputs": [ + { + "name": "input", + "type": "*", + "link": 2003 + } + ], + "outputs": [ + { + "name": "STRING", + "type": "STRING", + "links": [ + 2004 + ], + "slot_index": 0, + "shape": 3 + } + ], + "title": "To String", + "properties": { + "Node name for S&R": "SomethingToString", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "", + "" + ] + }, + { + "id": 1288, + "type": "SomethingToString", + "pos": [ + 4127.0771484375, + 1306.7099609375 + ], + "size": [ + 210, + 80 + ], + "flags": { + "collapsed": true + }, + "order": 187, + "mode": 0, + "inputs": [ + { + "name": "input", + "type": "*", + "link": 2006 + } + ], + "outputs": [ + { + "name": "STRING", + "type": "STRING", + "links": [ + 2007 + ], + "slot_index": 0, + "shape": 3 + } + ], + "title": "To String", + "properties": { + "Node name for S&R": "SomethingToString", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "", + "" + ] + }, + { + "id": 1293, + "type": "RepeatLatentBatch", + "pos": [ + 4760, + 1920 + ], + "size": [ + 210, + 50 + ], + "flags": { + "collapsed": true + }, + "order": 344, + "mode": 0, + "inputs": [ + { + "name": "samples", + "type": "LATENT", + "link": 4919 + }, + { + "name": "amount", + "type": "INT", + "link": 2018, + "widget": { + "name": "amount" + } + } + ], + "outputs": [ + { + "name": "LATENT", + "type": "LATENT", + "links": [ + 4920 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "RepeatLatentBatch", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 1 + ] + }, + { + "id": 1358, + "type": "BasicGuider", + "pos": [ + 7014.74609375, + 314.0147705078125 + ], + "size": [ + 240, + 50 + ], + "flags": { + "collapsed": true + }, + "order": 367, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 2087 + }, + { + "name": "conditioning", + "type": "CONDITIONING", + "link": 2088 + } + ], + "outputs": [ + { + "name": "GUIDER", + "type": "GUIDER", + "links": [ + 2089, + 2090 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "BasicGuider", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 1359, + "type": "Reroute", + "pos": [ + 6860, + 460 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 350, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5330 + } + ], + "outputs": [ + { + "name": "", + "type": "SIGMAS", + "links": [ + 2092 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 1387, + "type": "ImageUpscaleWithModel", + "pos": [ + 3921.8154296875, + 3298.913818359375 + ], + "size": [ + 200, + 70 + ], + "flags": { + "collapsed": true + }, + "order": 192, + "mode": 0, + "inputs": [ + { + "name": "upscale_model", + "type": "UPSCALE_MODEL", + "link": 2163 + }, + { + "name": "image", + "type": "IMAGE", + "link": 2165 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 2180 + ], + "slot_index": 0, + "shape": 3 + } + ], + "title": "Upscale", + "properties": { + "Node name for S&R": "ImageUpscaleWithModel", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 1389, + "type": "UltimateSDUpscaleNoUpscale", + "pos": [ + 5081.81689453125, + 3258.913818359375 + ], + "size": [ + 310, + 530 + ], + "flags": {}, + "order": 363, + "mode": 0, + "inputs": [ + { + "name": "upscaled_image", + "type": "IMAGE", + "link": 4668 + }, + { + "name": "model", + "type": "MODEL", + "link": 2169 + }, + { + "name": "positive", + "type": "CONDITIONING", + "link": 5369 + }, + { + "name": "negative", + "type": "CONDITIONING", + "link": 2171 + }, + { + "name": "vae", + "type": "VAE", + "link": 2172 + }, + { + "name": "seed", + "type": "INT", + "link": 2173, + "widget": { + "name": "seed" + } + }, + { + "name": "steps", + "type": "INT", + "link": 2175, + "widget": { + "name": "steps" + } + }, + { + "name": "scheduler", + "type": "COMBO", + "link": 2176, + "widget": { + "name": "scheduler" + } + }, + { + "name": "denoise", + "type": "FLOAT", + "link": 2174, + "widget": { + "name": "denoise" + } + }, + { + "name": "sampler_name", + "type": "COMBO", + "link": 2342, + "widget": { + "name": "sampler_name" + } + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 2177 + ], + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "UltimateSDUpscaleNoUpscale", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 381177150362568, + "randomize", + 20, + 1, + "euler", + "normal", + 0.2, + "Linear", + 1024, + 1024, + 20, + 20, + "None", + 1, + 20, + 20, + 20, + true, + false + ] + }, + { + "id": 1404, + "type": "RepeatImageBatch", + "pos": [ + 3909.0615234375, + 4042.49658203125 + ], + "size": [ + 210, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 194, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 2202 + }, + { + "name": "amount", + "type": "INT", + "link": 2212, + "widget": { + "name": "amount" + } + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 2209 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "RepeatImageBatch", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 2 + ] + }, + { + "id": 1405, + "type": "ListCounter //Inspire", + "pos": [ + 4629.0615234375, + 4152.4921875 + ], + "size": [ + 210, + 50 + ], + "flags": { + "collapsed": true + }, + "order": 321, + "mode": 0, + "inputs": [ + { + "name": "signal", + "type": "*", + "link": 2210 + }, + { + "name": "base_value", + "type": "INT", + "link": 2231, + "widget": { + "name": "base_value" + } + } + ], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 2243 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "ListCounter //Inspire", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 0 + ] + }, + { + "id": 1408, + "type": "ImageListToBatch+", + "pos": [ + 5709.0615234375, + 4052.4970703125 + ], + "size": [ + 180, + 30 + ], + "flags": { + "collapsed": true + }, + "order": 378, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 5633 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 2206 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "ImageListToBatch+", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 1411, + "type": "RebatchImages", + "pos": [ + 4409.0615234375, + 4042.49658203125 + ], + "size": [ + 270, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 271, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 2209 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 2210, + 2211 + ], + "slot_index": 0, + "shape": 6 + } + ], + "properties": { + "Node name for S&R": "RebatchImages", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 1 + ] + }, + { + "id": 1470, + "type": "Reroute (rgthree)", + "pos": [ + 7584.07373046875, + 32.6232795715332 + ], + "size": [ + 40, + 30 + ], + "flags": {}, + "order": 390, + "mode": 4, + "inputs": [ + { + "name": "", + "type": "*", + "link": 3722, + "dir": 2, + "has_old_label": true, + "label": " " + } + ], + "outputs": [ + { + "name": "denoised_output", + "type": "LATENT", + "links": [ + 2278 + ], + "slot_index": 0, + "dir": 1, + "has_old_label": true, + "label": " " + } + ], + "properties": { + "resizable": true, + "size": [ + 40, + 30 + ], + "connections_layout": [ + "Bottom", + "Top" + ] + } + }, + { + "id": 1488, + "type": "BatchSlider", + "pos": [ + 480, + 1060 + ], + "size": [ + 310, + 60 + ], + "flags": { + "pinned": true + }, + "order": 132, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 2305 + ], + "slot_index": 0, + "shape": 3 + } + ], + "title": "Batch", + "properties": { + "Node name for S&R": "BatchSlider", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 1 + ] + }, + { + "id": 1500, + "type": "KSamplerSelect", + "pos": [ + 6040, + 650 + ], + "size": [ + 210, + 30 + ], + "flags": { + "collapsed": true + }, + "order": 195, + "mode": 0, + "inputs": [ + { + "name": "sampler_name", + "type": "COMBO", + "link": 2333, + "widget": { + "name": "sampler_name" + } + } + ], + "outputs": [ + { + "name": "SAMPLER", + "type": "SAMPLER", + "links": [ + 2334, + 2335 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "KSamplerSelect", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "euler" + ] + }, + { + "id": 1534, + "type": "UpscaleModelLoader", + "pos": [ + 1760, + 1420 + ], + "size": [ + 310, + 60 + ], + "flags": { + "pinned": true + }, + "order": 133, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "UPSCALE_MODEL", + "type": "UPSCALE_MODEL", + "links": [ + 2361 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "UpscaleModelLoader", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "4xNomos8kDAT.pth" + ] + }, + { + "id": 1624, + "type": "SomethingToString", + "pos": [ + 4127.0771484375, + 1386.7099609375 + ], + "size": [ + 210, + 80 + ], + "flags": { + "collapsed": true + }, + "order": 197, + "mode": 0, + "inputs": [ + { + "name": "input", + "type": "*", + "link": 2409 + } + ], + "outputs": [ + { + "name": "STRING", + "type": "STRING", + "links": [ + 2410 + ], + "slot_index": 0, + "shape": 3 + } + ], + "title": "To String", + "properties": { + "Node name for S&R": "SomethingToString", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "", + "" + ] + }, + { + "id": 1627, + "type": "Reroute (rgthree)", + "pos": [ + 7634.07373046875, + 32.6232795715332 + ], + "size": [ + 40, + 30 + ], + "flags": {}, + "order": 409, + "mode": 4, + "inputs": [ + { + "name": "", + "type": "*", + "link": 3723, + "dir": 1, + "has_old_label": true, + "label": " " + } + ], + "outputs": [ + { + "name": "MASK", + "type": "MASK", + "links": [ + 2412 + ], + "slot_index": 0, + "dir": 2, + "has_old_label": true, + "label": " " + } + ], + "properties": { + "resizable": true, + "size": [ + 40, + 30 + ], + "connections_layout": [ + "Top", + "Bottom" + ] + } + }, + { + "id": 1629, + "type": "MaxShiftSlider", + "pos": [ + 480, + 940 + ], + "size": [ + 310, + 60 + ], + "flags": { + "collapsed": false, + "pinned": true + }, + "order": 134, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "links": [ + 2418 + ], + "slot_index": 0, + "shape": 3 + } + ], + "title": "Max Shift", + "properties": { + "Node name for S&R": "MaxShiftSlider", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 1.1500000000000001 + ] + }, + { + "id": 1630, + "type": "Label (rgthree)", + "pos": [ + 770, + 100 + ], + "size": [ + 25, + 36 + ], + "flags": { + "allow_interaction": true + }, + "order": 135, + "mode": 0, + "inputs": [], + "outputs": [], + "title": "v 1.4", + "properties": { + "fontSize": 36, + "fontFamily": "\n", + "fontColor": "#ffffff", + "textAlign": "left", + "backgroundColor": "transparent", + "padding": 0, + "borderRadius": 0 + }, + "color": "#fff0", + "bgcolor": "#fff0" + }, + { + "id": 2205, + "type": "Label (rgthree)", + "pos": [ + 1950, + 100 + ], + "size": [ + 96.79166412353516, + 16 + ], + "flags": { + "allow_interaction": true + }, + "order": 136, + "mode": 0, + "inputs": [], + "outputs": [], + "title": "by WorldObserver", + "properties": { + "fontSize": 16, + "fontFamily": "\n", + "fontColor": "#ffffff", + "textAlign": "left", + "backgroundColor": "transparent", + "padding": 0, + "borderRadius": 0 + }, + "color": "#fff0", + "bgcolor": "#fff0" + }, + { + "id": 2211, + "type": "CLIPTextEncode", + "pos": [ + 3846.249755859375, + 429.36273193359375 + ], + "size": [ + 210, + 80 + ], + "flags": { + "collapsed": true + }, + "order": 343, + "mode": 0, + "inputs": [ + { + "name": "clip", + "type": "CLIP", + "link": 3509 + } + ], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [ + 3212 + ], + "slot_index": 0 + } + ], + "title": "Negative", + "properties": { + "Node name for S&R": "CLIPTextEncode", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "" + ] + }, + { + "id": 2218, + "type": "BatchSlider", + "pos": [ + 1760, + 1320 + ], + "size": [ + 310, + 60 + ], + "flags": { + "pinned": true + }, + "order": 137, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 3215 + ], + "slot_index": 0, + "shape": 3 + } + ], + "title": "Resolution Multipy", + "properties": { + "Node name for S&R": "BatchSlider", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 2 + ] + }, + { + "id": 2334, + "type": "Image Comparer (rgthree)", + "pos": [ + 840, + 150 + ], + "size": [ + 870, + 920 + ], + "flags": { + "collapsed": false, + "pinned": true + }, + "order": 198, + "mode": 0, + "inputs": [ + { + "name": "image_a", + "type": "IMAGE", + "link": 3426, + "dir": 3 + }, + { + "name": "image_b", + "type": "IMAGE", + "link": 3425, + "dir": 3 + } + ], + "outputs": [], + "title": "Img Compare", + "properties": { + "comparer_mode": "Slide" + }, + "widgets_values": [ + [ + { + "name": "A", + "selected": true, + "url": "/api/view?filename=rgthree.compare._temp_thtgv_00001_.png&type=temp&subfolder=&rand=0.8637171826944127" + }, + { + "name": "B", + "selected": true, + "url": "/api/view?filename=rgthree.compare._temp_thtgv_00002_.png&type=temp&subfolder=&rand=0.7523002101689604" + } + ] + ], + "color": "#222", + "bgcolor": "#000" + }, + { + "id": 2397, + "type": "ImageDisplay", + "pos": [ + 2050, + 90 + ], + "size": [ + 26.399999618530273, + 30 + ], + "flags": { + "collapsed": false + }, + "order": 138, + "mode": 0, + "inputs": [], + "outputs": [], + "title": "Unnamed", + "properties": { + "originalWidth": 44, + "originalHeight": 50, + "maintainAspectRatio": true, + "imageBase64": "iVBORw0KGgoAAAANSUhEUgAAACwAAAAyCAYAAAAnWDnqAAAACXBIWXMAAAsTAAALEwEAmpwYAAAGGmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgOS4xLWMwMDIgNzkuYjdjNjRjYywgMjAyNC8wNy8xNi0wNzo1OTo0MCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDI2LjEgKDIwMjQxMDE5Lm0uMjgxNSBhMjQ5ZDA0KSAgKFdpbmRvd3MpIiB4bXA6Q3JlYXRlRGF0ZT0iMjAyNC0wNC0xOVQxMToyMDo1NSsxMDowMCIgeG1wOk1vZGlmeURhdGU9IjIwMjQtMTAtMjNUMTk6MzM6MDArMTE6MDAiIHhtcDpNZXRhZGF0YURhdGU9IjIwMjQtMTAtMjNUMTk6MzM6MDArMTE6MDAiIGRjOmZvcm1hdD0iaW1hZ2UvcG5nIiBwaG90b3Nob3A6Q29sb3JNb2RlPSIzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjQyYjIxNGY1LTFkN2UtNzY0NC1hMzYyLWM2ZjE0YzA1NzE3YiIgeG1wTU06RG9jdW1lbnRJRD0iYWRvYmU6ZG9jaWQ6cGhvdG9zaG9wOjhiYTk0MTFkLTI2YjYtZDM0Ni1hZjFkLTVmZjdkZmNmMzhhMyIgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjUwMTM1MDM0LWQ2NWYtMjk0YS04YjMyLWY4ZDZiNjI0OGMzMiI+IDx4bXBNTTpIaXN0b3J5PiA8cmRmOlNlcT4gPHJkZjpsaSBzdEV2dDphY3Rpb249ImNyZWF0ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6NTAxMzUwMzQtZDY1Zi0yOTRhLThiMzItZjhkNmI2MjQ4YzMyIiBzdEV2dDp3aGVuPSIyMDI0LTA0LTE5VDExOjIwOjU1KzEwOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgMjYuMSAoMjAyNDEwMTkubS4yODE1IGEyNDlkMDQpICAoV2luZG93cykiLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjQyYjIxNGY1LTFkN2UtNzY0NC1hMzYyLWM2ZjE0YzA1NzE3YiIgc3RFdnQ6d2hlbj0iMjAyNC0xMC0yM1QxOTozMzowMCsxMTowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIDI2LjEgKDIwMjQxMDE5Lm0uMjgxNSBhMjQ5ZDA0KSAgKFdpbmRvd3MpIiBzdEV2dDpjaGFuZ2VkPSIvIi8+IDwvcmRmOlNlcT4gPC94bXBNTTpIaXN0b3J5PiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pg8rrwEAABT4SURBVGjendlpjCXXddjx/721v1dv37v7dfdMz/Tswxnui0RSC9eIogxFlhyQUSDFSSBZMBBESmDICWzFieNYCQgYChzHhuXYUOQYpijJokTRJDXkiOTs+/Ss3T3dPb2+fatXaz6MYYTmNmIBv4+FOlV16p5zT4nxSoUPeihSMru0xD/99NPf+OUnnvq6FJ36aCWBpqsgBI3WkJXVgeU4ofqNZ/79/TOX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", + "lastWidth": 26.399999618530273, + "lastHeight": 30 + }, + "color": "#00000000", + "bgcolor": "#00000000", + "shape": 1, + "lastWidth": 26.399999618530273, + "lastHeight": 30, + "imageBase64": "iVBORw0KGgoAAAANSUhEUgAAACwAAAAyCAYAAAAnWDnqAAAACXBIWXMAAAsTAAALEwEAmpwYAAAGGmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgOS4xLWMwMDIgNzkuYjdjNjRjYywgMjAyNC8wNy8xNi0wNzo1OTo0MCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDI2LjEgKDIwMjQxMDE5Lm0uMjgxNSBhMjQ5ZDA0KSAgKFdpbmRvd3MpIiB4bXA6Q3JlYXRlRGF0ZT0iMjAyNC0wNC0xOVQxMToyMDo1NSsxMDowMCIgeG1wOk1vZGlmeURhdGU9IjIwMjQtMTAtMjNUMTk6MzM6MDArMTE6MDAiIHhtcDpNZXRhZGF0YURhdGU9IjIwMjQtMTAtMjNUMTk6MzM6MDArMTE6MDAiIGRjOmZvcm1hdD0iaW1hZ2UvcG5nIiBwaG90b3Nob3A6Q29sb3JNb2RlPSIzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjQyYjIxNGY1LTFkN2UtNzY0NC1hMzYyLWM2ZjE0YzA1NzE3YiIgeG1wTU06RG9jdW1lbnRJRD0iYWRvYmU6ZG9jaWQ6cGhvdG9zaG9wOjhiYTk0MTFkLTI2YjYtZDM0Ni1hZjFkLTVmZjdkZmNmMzhhMyIgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjUwMTM1MDM0LWQ2NWYtMjk0YS04YjMyLWY4ZDZiNjI0OGMzMiI+IDx4bXBNTTpIaXN0b3J5PiA8cmRmOlNlcT4gPHJkZjpsaSBzdEV2dDphY3Rpb249ImNyZWF0ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6NTAxMzUwMzQtZDY1Zi0yOTRhLThiMzItZjhkNmI2MjQ4YzMyIiBzdEV2dDp3aGVuPSIyMDI0LTA0LTE5VDExOjIwOjU1KzEwOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgMjYuMSAoMjAyNDEwMTkubS4yODE1IGEyNDlkMDQpICAoV2luZG93cykiLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjQyYjIxNGY1LTFkN2UtNzY0NC1hMzYyLWM2ZjE0YzA1NzE3YiIgc3RFdnQ6d2hlbj0iMjAyNC0xMC0yM1QxOTozMzowMCsxMTowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIDI2LjEgKDIwMjQxMDE5Lm0uMjgxNSBhMjQ5ZDA0KSAgKFdpbmRvd3MpIiBzdEV2dDpjaGFuZ2VkPSIvIi8+IDwvcmRmOlNlcT4gPC94bXBNTTpIaXN0b3J5PiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pg8rrwEAABT4SURBVGjendlpjCXXddjx/721v1dv37v7dfdMz/Tswxnui0RSC9eIogxFlhyQUSDFSSBZMBBESmDICWzFieNYCQgYChzHhuXYUOQYpijJokTRJDXkiOTs+/Ss3T3dPb2+fatXaz6MYYTmNmIBv4+FOlV16p5zT4nxSoUPeihSMru0xD/99NPf+OUnnvq6FJ36aCWBpqsgBI3WkJXVgeU4ofqNZ/79/TOX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" + }, + { + "id": 2413, + "type": "ImageDisplay", + "pos": [ + 470, + 90 + ], + "size": [ + 330, + 65.24058532714844 + ], + "flags": {}, + "order": 139, + "mode": 0, + "inputs": [], + "outputs": [], + "title": "Unnamed", + "properties": { + "originalWidth": 956, + "originalHeight": 189, + "maintainAspectRatio": true, + "imageBase64": "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Y0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALEwAACxMBAJqcGAAABoJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDkuMS1jMDAyIDc5LmI3YzY0Y2MsIDIwMjQvMDcvMTYtMDc6NTk6NDAgICAgICAgICI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiB4bWxuczpwaG90b3Nob3A9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGhvdG9zaG9wLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCAyNi4xICgyMDI0MTAxOS5tLjI4MTUgYTI0OWQwNCkgIChXaW5kb3dzKSIgeG1wOkNyZWF0ZURhdGU9IjIwMjQtMTAtMjNUMTg6NTQ6NDQrMTE6MDAiIHhtcDpNb2RpZnlEYXRlPSIyMDI0LTEwLTIzVDE5OjIzOjMzKzExOjAwIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDI0LTEwLTIzVDE5OjIzOjMzKzExOjAwIiBkYzpmb3JtYXQ9ImltYWdlL3BuZyIgcGhvdG9zaG9wOkNvbG9yTW9kZT0iMyIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDoyYzZmNjdjNy02NTI1LTdjNDctYmU3MC01NmFmYWQ0Y2YzMmQiIHhtcE1NOkRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmNmNTZlYi03NTZhLWY3NGMtYmYwYS1lM2JlZmY1YWMxMWYiIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo5MmE5MDI5Ni1jOTE2LWUwNDgtYTM0My1jNjgwYmVjYWNkNTEiPiA8eG1wTU06SGlzdG9yeT4gPHJkZjpTZXE+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJjcmVhdGVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjkyYTkwMjk2LWM5MTYtZTA0OC1hMzQzLWM2ODBiZWNhY2Q1MSIgc3RFdnQ6d2hlbj0iMjAyNC0xMC0yM1QxODo1NDo0NCsxMTowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIDI2LjEgKDIwMjQxMDE5Lm0uMjgxNSBhMjQ5ZDA0KSAgKFdpbmRvd3MpIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJjb252ZXJ0ZWQiIHN0RXZ0OnBhcmFtZXRlcnM9ImZyb20gYXBwbGljYXRpb24vdm5kLmFkb2JlLnBob3Rvc2hvcCB0byBpbWFnZS9wbmciLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjJjNmY2N2M3LTY1MjUtN2M0Ny1iZTcwLTU2YWZhZDRjZjMyZCIgc3RFdnQ6d2hlbj0iMjAyNC0xMC0yM1QxOToyMzozMysxMTowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIDI2LjEgKDIwMjQxMDE5Lm0uMjgxNSBhMjQ5ZDA0KSAgKFdpbmRvd3MpIiBzdEV2dDpjaGFuZ2VkPSIvIi8+IDwvcmRmOlNlcT4gPC94bXBNTTpIaXN0b3J5PiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PpGGSOYAA3j5SURBVHja7P13uK5nWSYOn9ddnvLWtfZau+8kO72TBJJACiUUg4iAUgVEBAfEBiM4Kli+0XEcHXUcHQuOo+PMqIwzDqMCCkiHQEgggVTSy05233ut9Zan3O33x3U/z/uunZ2gv+87ji9/vFeOJKu+5X7Kus/rPK/zJCIBhAClFISUsMYghAApJZz3CCGAAEgp4OEATwie4OGhEgEQIXggUQmstQACBABjHCAIeacDZw3qqoLSCUIISHSCopqCIAAAQggAAcYYaJ2ABAEAnOXnz/McRART1/DewwfHr4sEhJJACHDWI0kSBO8RKCCEAIDgnYeUEkISrLfwziNYfs6l4RDWWdR1BessnPVQSkFpCWsdfPBw3kFKieAcfAjQ8X2mWYIQAGNMfM8S3nmQBCAIzlgIKaGkhHMOUmpYayGkgCCCNQaAgBQCIMBYw88TAoL3UDqBkgpVXSEgoNvNUJU1vA2AIEhB8C4ABKhEwzsPZx0CACIBUICzBgSCkhrOO/jgoBMNJRRqY4AQEBDg4YFAkEKABCG4AK0TWGdhTIUkSeHjuSCFgjUWgIfOUhAAUxsEeBAEiIgfAwHBOwihIEjAOgcfLCQpgAjOWWilgQB4eD7uklAWBQQIgiQCAJVIGGvgrYeSCsZYyEQg0QlMZWCt4XNXSHh4fp3OQwoJ5wKIAjx5AACB4L2HEALx9ACBAAQEAMHzzwMEBMyKACL+3eZxNleI/yUQ4u+3X6f2/2HuZ/knZz/bfDZ7RbOfxdxX6AmPfeLrOPFr/O6ICETE10UAaO7Hwtyvhfg9ImqfN4TAP4MApRW8j98Jnr8eAFCAEBJAiOcKIOK5ABC8dyAiCCHgvW9fS/CzhSZB7fM0bz0gzI5TCCdZqaeuZo2pXcb2wG96w/Pr05wjzeMHzN5/8zA+8D1ECIKzNl538VgSnz/8fkJ8v/G6DPE1hfgSRHxJ8T5IIDjn4zEDBEk4bzcdDyUlPBDvbQLOOpCMx9bH+2lo3hMgtISzDkpqeMf3AQcLpVK4eC0vLS+hLCtMJ9P2tfBxD/F18bsPYfP527z2Zu34dcYrIQQIQQAFPmdCcywEr4Hg8wYOEEIiUHz8eL4pJUFE/P6lgLcO3gcI4q/74EAQkEohBA9BfG4poVGZAv3+AMPhEMeOHkWW56jqEiEQut0eqqKA8wYueNRlBSk0pCRIrfneTASlEkwmY3Q6uSCh/HQ6RqIUSMh4fgPGWT6nnUNdV1jUoha1qEUtalFPv5K8WWk2MgHe8SYlIPCWhhjsaqV4syFV3NBEXOA9yIW4ieGNbYibex88QvDtBi54/j0PD+8cJEn4+Lwkqd3INJtg7xkIBe9R1TVICCgpIJUEIEBCwMfHFSSAuBFnwMevm0AQRHDBAwHodrsgIqRJCh88yqqEIIJQkgG/NVjdugoiGQEQb0iV1Oh1+8jzHKauYUwNAFBKgwJBKYVAvOFTWkNKCe9cBAz8mnzcHSaJQgB4nYmBA29SASkkhJCobQXnHBBcBFq8AeX1B6zzkEJAawaBQhA3KaxtN6xK8bFygTfcfLwCgvNIEg2lNDw8nLMtGJRCQCcJjLHwzkFIASlVbEoA1tVQiebdXiB4Z+G8BSD58YKH9wwiAh9ECCVBgkAk2nVhTBAiEI7nU/Dw1oHiGkjJx8AaAyElXLAIFJCnWcQqAVIq+HACxBQzwCiFAoEgSfA5GgJkBGaIIKZp6lCLiuL/TsBTBAYRT/zeE4EXPQkApvjPZiDbfG0ewoX2a/Po+4m/O//8JwGAEbxSaLAdAWIOZkfAJ0i094DN74Ffn9aqbVYFBHjnW8DIYIfP483Ah+JxFHzehdACpk0vURAozDUETsDtgkS8Sc0dh38C2MXcym5ekBNbBNQeW0FirhEQZoC5+bU5gEeg2FzD3LHC7ByZOy4NEAzNmoEQmq5D/H/wAT54SEEtyPTBt8CZ4s867xhsN9d7BNNK6hYok+SmpA+ANRYEIE9zWGfhKYCEACARrIcAN5qscSAhGHwGD0ESMt5vAvymRhAJghQyrlnz94J/pAHuIYR4f4t/X5p7EMVmgI/gNr5PUHMfiI2NuC4+eATHwFtJHY9N/NsQuMmVpClEfH3GGaR5BqUU1tfXoBL+2yWl5r8VQiLAo6yreE8VSPMOlle28N8q6+GMhfehf/2Lv/Oay5/1rBfef9+9R73364F4Xa210KmGd7ZtCvzcz/3cYkexqEUtalGLWtTTsFSzeUEAnPPtHs25GSPjnIdzBkpLpEmCyXTCrCnFTj0RvAd8sHDeAXBIkhTOWTjjoJUGY9D5TStvLDudLopiiuCBNE1RVzUAQpIkkEqhKEo4UyNJNIgEnHNQCTOhJCSG/S6qaQGtMmitMS0mcN5ieXkLjDGoygogQjmZQicKeZbDO88sa23bjb6SEiqyCMeOrjGrrRSsNcjSNAJWD+ssZKKRyAzOWxTTKbRKeRNHzJIaw8yqFIoZYiHjRtoCwaOsfAsUQARIAQoewc025GmagwjwISBRKeq6io8VN7TwcCEg0ykDf89sdCCPAAclEmaTVYK6rqCk5I1pYIbFOQ8fauSdvGVipNRxY8pMp9aKmXEbWXIhQIGZFUkSzhgEBAgpIYWElASQQF1XoMBA2XkLpRQz6xFQWxBvrKWAEB5aatSmhvEOQjJArW0NyTt55FkHzjvUxkFIQlXV8N5BCmbjnTVAZNKBgE4nR1nV/HlkFhvmloRoGcIGnMyzWSGEGUSiTTgLT42xaI573AxmN9PFc78xB4oaIBhOANGbH/PksPqkX55DdMyyzoHNOQAS4usgQRCxIdAguwa4EhFUVB8wm9+AZCB4fgACM3kgioApxMfwcI6fR0pu+jTvqGGbT2RsW7ZUAOTj4wb6f3eHa1ndObAbTuDaY/MluNAqFHyksUkQ4APmewHUgmaP4BvwG8FcwGYWnbix1eC4poHWcNW+bbbM2GQRGUQPD2oZ4IbpZmUL/06AUPwkkuL5HxiIgjwcBSgpgKBBPmBaTvn+TICUEgoBTvLxMtbFBgU3N2pTt++BSMC75vjO/kZwc0kgROVDcx2hhfZ83NqvNZcDBVAgAAJC8nNa5+J9SCIIIASH4CzD7E3XbLxO4/OJJOF7n7NwxsCFgG6/DyUFxuMRtOB72qQYIc1ypDrFtJwgOIdO3kGaZlhbXwOCh4ssrXEmOWXvqWd08+5L3viWN77lW3fftWKsqQjyf9u6KldWtmBjNEYxKdDpdeCdR1FMF7uJRS1qUYta1KKepiVF7OhTs1ETMyAgpeTNlJTMwPgAa03LkvnADEIAgywfPCAIQkokSQL4gDRNAMGy1wY8B88S6jAnXVRSQwqB2tQQSqKu68j2RtYIzCILqWCN4U1fBH4NAGqYqLIqUJZ1ZAAFrHXodftRSmxRVzWqqoJQvDHPsgxwAS5u+khIlhXH9wgiGGthbA0feJNqjQNIING6ZUZBEciRgDOGF7hhSCJ4SJIU1lgkadKymCJKoLVSzAJT4I+db+WQgTWBCMGjk+XI0gwIgHWO5dBKgkDQaRKZjgBrLbPdkb2lECWV8Vg775gBFxHMkoCpa1jnGQALyWDaOQR4CCmgpIJ3AUqqCA4EpJYI3rF0WytorRm8e0AlySYm1XsPlWh+PgEIyQB8MBjCGgMf+HkIIcpgRSsfbOTa3rF8eqYgcOh0u5BKoK5rKJ0ycACDDR9ZoAAH0bBGcV2llPwcfjPQ3fT/CMpokxT2iRfTTPBKcxB49tkTQB1wwvfn/w2bWEM8Kav5TwOCLZCnGdpuwH6zHi0Ajs+OGfadwY2IY0TD4Mf1VEqwLH0OBAkilqK6zYCWwPcSkjST/9IM2of4TyN9DSdKsOdlyk8FdDd9Qps/p5nkl+YkzT74zQ8TaCbbjUxto+SguHYNYG6PUSNnxgzotWAXYQZu4z1BRKY0ksDted2+riifbmUIUV4f+IfRNC2991DE9xTH3TN+PZ6VFIECpIpSbe/j+EdslGEmJ4bz8Zpx3NFoxRChfc8No8/nDl9XzTFsAD+i6oRAoDCTiAuS7VFhJYqMCoBmnVvNPEQE99w0ZGDcXLfG1KziEQRTcWOTFCtbQhxlUVrBWocsy6GTFMbw+IXSClIoFJMCaZ6h2+2hmE4xnkzxgue98DnHjq29+YorLn/boSNHLvjiF760vHPH9gNK4yYPPzYmQAhe86qsEBwfr1/8xV9c7CgWtahFLWpRi3oalog7HcTtE28worSPAaqDtRYuWPjA8lOlVLt/9N6CECCUgE5TSCERXEBd1CwjljyT1kh6lZIAIcpgA6q6gncOtjYoypKBVNz4MJBlAGSMgXEGgQJ0qpEmGsF71LWBUDznORqPUFYVlGRAVZUVAAZy1vLMajGdQGsFnaQtaCsj+PVgUKmlgFKCX6Nn5ruRz0blHZy1oBCQpCmD/kDo93osMQxgWW6UVLtmo+iBqqx51jFIZrO9QCISECRklOvBE6x1zJ75AGMsb9CUYqDngdow+JYkEZyHqQ28D8iTDEpodDo9CCiIIJGnnShPZABb1SWklOj1+m1DwxrLAFzxZpSbG9w08JHZM8bA+sBrCm5shOChSEGT4lnhOAOe5im01vDWwtQVfAh8nIyFtQbG1TC1A3kJ4wwz51E6ba1tN6tCAc4ZeM/ycUECQrGcXUoJoTSk1phMxzCVgZSK2XDjWBIpJAM0wcBfyNhkkBJErGRwjs/F2Bt4IoqlE7jU8GRY8+QgLDzJZw0LFk6AusDJBMvhJCg7nPDxU3DBRDOAecKvtgAFm4FlI0v3sXnivG+ZzIY1bl6bc47PD2fjWEOA9wHe+giCadPjMrKjuXc3e7etXLiZEabwhFX+tmD3pEsxt0ZhrpnhQzuj3jQBRNTF++BPAOIzyXLwswYA5llY8USJebvGEU+391nJjTvv4uhCbEY1zSHvPVzzGqJ0tpE7sySdkOqUwanwcHCojEXwkfW1LjbaEug4IgCwggQkQEIhzXOAApTm69/4ZoZYgITkblNk6xFOfg4K0VxTEfRGDT0JAmT8N8qwA3xsJALOWVRVzRJqAMGz94OSkhsoTSNE8HwtCeJ7SQTYxlo4yxJvqSSU0CinFXsrhDgzHoButw9nDKSQGHSHsJVBUUxAgnDaqacBAaiqCt1ub7tK5Cvf9aPvfONLXvjCvetHj+Ov/vp/4vf/4Pcu6OTdfgAhyTSMM6iqihuygpBm2WI3sahFLWpRi1rU0xbwErE5lZ9tOENgxscYCynZWImIoBMNrTS8ZxDcmM8QCcBTyzw202rOuQg6I9BtjKYiq6NVwv/qBEmqICJzIaSCJAktNaTSUDpBmqfIux2enVKapZFxLitJEmRZjixPIWTDnvCGyloHKQUEgCzLkSRpu1Gv6xpZniPRCWycHe10uyApUNWGTaoyjU7eQSfrRvki0Ol0kOUp0ixFXRnkWQqAwTcBMLZmJkUQdKqRJArG1lBpgjRL0el2YQzPwgbymBYllNZsJKMVb5Q9s586TSMb7qNsWMPUlsEb0wxI04zlgESYTqaoLbO0vDl0MM6ABMF6j0DgBoLlRoNSGlIwkDd1zcBYCGRZhk6vh6Iq4b2DTnWcJWS21zhuQHgfUNc1Agkgmg4FDyB4WFdHwxmemRVC8nxzM/MJC2MMlNKYTico6xIEQqI0SPBcXQCvQ5JoEAjGGG42SAFSUY4uJPIkh4xstIiQyDnPBjTBI00T6EQzwG2AG6hlu/mMEA06aTEZ5hlAnBwMY/Mo5gl8YtgEY0PL+s5+mU6C1+YnaE8+o3uiQRXhqdheZtmonaNv2FyWo4YIvGiOaQ0tUJ7J2UNUdcxmKkmKJ3QCnJ9J4NsphuBbdcRspt2169u+yjDHBNMM/Lbs9KZ/w0nJ23mZ9MlWdvMyhRPRP7xzrH6Izy2FhFTccOImn48g2UXqllntdm61AYskWrOt5mg2HgUNAPYuzGaFo5x60xx3XH8lFRBNmWJHDQieRw6cZaJX8DVBghtlzvHcbSfvIM86ICFbYG+tgwshKjEISipkScL3T2ITOwHRzum2jLMQLbifN3LzgRtHrZIgNgG943lv7yyfax487iAkIHjGlzBrHlD8WzNvtEZgk7+6rhnYSlZ3aK0RACRpgrzTRaPw6XQ6CB5Q0WDQOYeqYk+ENM1gnEG320Gn00W/38ejjzyI9Y01XPLMS7YuLy+//jWvec2bfup9792xZfsK3v3eH8Mpu3fh9tvv7EHIJE9zVFWJqqygtULWyfg8XtSiFrWoRS1qUU/bUgEhzu/JaEziYwddQERmrAHDwXsETwAkEi1gnZnJjK3FdDyF95aBD1j2miYpjKmjA7IGSQIcxY0VWiMWdjuWkIpA0cSpkbT6QMxUhBqJ1CimJYSIhlFgtjXJUggIlEUJ62zcwKUQSqKqCuRZB94xc2idg1YKVVmy6ZHzccNFmE5LeG8jmyEQXEBZFWywZA1konjmOAA+VAyyvIMxNUxtoJMEUoBZSqUQPDtIa51AKQlTGRRmAiHZhdR7D6GJGXTrIUlGV2wJBwdWlfN8nrEG3W63nTUjCSgp0cm6wIRBvrEG3V6PmxhglhYuIEkzKKlBISDt9lCWJcqCwSwJgSSy8/AeteP3kyQDZsJJIO922NimtpCRDddJimAtptMpnxfkT5jXI4g4B621QvCWpZRSIM9ylEUJlaiWae10utBKo65qOG8gSEBKjcpUMNYjOIc0TaE0zzia2razy1D8fCTZoCzRCTSIzz3nUNWGZfseIPJwnhsEcUQTDVJveMuAGdidudUSTpyq3eTee8KcaSNyPTkhfCKHu9ncavbZvKlVeGpw+8SHia+xYZKpnTNtmkINY8kOvwGhnUedve7mPHU2glxC69zcvirP4EUQO4i3cm6aza02wJZNmfieoaSEJx/l93FUt3l9tNkdOeAEBjrQyZfxCatzguV2uwCEBoo20urm24Jozrk6IMS5daUk2Iw+tK+R4uyr96E9BwQCIAk+8P2u1YfPmV7xsgX4MGcaJlji7NsZaAbPs+YEz/Y2LRpusBmohJtE3troF8CmTwEOVVXDBcNNMikgiK9JEZsOVVlAaY26NlF5g1b6b0zF92xgUyOkWfsGkDbr1DjNe++jEZ6bgVfE8Ze2iSRYvoyZyZ1onLKdhyd+PMRGY/AeQTQKFMBGlZCzLNd2sbkHWJAgTIspklxj+/ZtGI8nSNMUAQ5aC1Bg5YfSAkr1ceYZ23cN+8M3XfAd5//wW3/gB3bdftvt+MynPoN/9f6fxt/937/F4/sf7ZZV0Tl27FicuyYMhkMYY1DXBk+lrljUoha1qEUtalH/fwa8vFHljVbw0X2zcdOMLG0bP+GbmTECT32x5M05BwJgrWHWLcqQAwBjeI5USPCcKRGgAWcdyqJkp03DzqGAQ7BAkAJSadTlFDJG91jDhixpoqEEs8yEgDTPUJQF6rJGp5NDKolMSXTyDpIkARFw4ECBjdEGspRnDPuDPqaTKfr9fnSABfr9HuqaTbfKyiNJFNJEozYGUgvkaY5JMYHWCRssmZrfo5RxXYA0S6F1AkhgOpoA3sOECgEs0TOmRmUqCAikWcKzjVH+2Mk7KKZTwAV0Oh0Ml5dx7NhR1HUNqViGm6YpsxveYdu27RhNNjAejSGEQJJnsN4hRIOXECNLQBrGmna+2NQ1ksiwSq0Ay0wIb/4knAPSkMI6h7IqkSiNRCdwxqHX7WHdrUcWnuCtBQXi90wCJHiDWpsadVUjURpSSVTRrcbUBiE4JLrD0uk4i8dOqQwminIaAYSIc4YBWrH7LBQhSTWMtajKGqnm5oKLjFnjaOuMgwkxLkqxbN1Z185t+gg+lFKMc93MxXoOxW4CJvyxaBmsmbkTngBnT4K/nrRoE7wNc27N4QTLq7AJDtMT0O1JQG9LaEbGVAgGppHRbY2Zmh9uDJ0aB92IAdn5m2dXhZjFOxHQzq9nWYZpUcRGl4S3IboJzwA0RUTrfUDwzAZaY6NRk5iB8/ZnPTaLnWfvJyA8kdndtAZPsj4n/PAmF21CBIF+tsINY+sJXvjooh7ZaQ8INNLnEOfl+eed9wx+BbGqPpp7+fie+HjMeUA1mDg0PnY8q87jthY+Rve0zHaIs7+CG5PBRdVCYOmvJw8ijxCiL0A0bKOo3qEYqSTCLH6uiU2TUkBGA7NAClmawnkbxybisWzOybl5ZMbDFGOF4t8VzLtqN67WHt6L9o374KGUiOcaG9cpoWCdhW1kNbGR4J0H+SihVtymDT5EFQufq22sm1atA7WpDdJBF3t27QYBuO+++3Hm6afTcHlp6/Fj6+ddeNEF36Wkft1bf+AH9yot8IXPfQbXPf95kJDYvWs7XviS6/pfuuEr6u677kK3N4BSEuPxJP5NIdTVguVd1KIWtahFLeppC3h58+Zn8UAkWulcY0oykx3y5kPGTSEQWTIpIhhQvPGIETA+eBhrYz4noSzK1vAl0RpScr6r1ArwjplDzyyntRZpkkAIjaoqkegkMh0eIcYKFcUU4/GYpW3eYzIpoNMEtrJwzsJadvRNU4XhcBXHjq3BmBIDKSCVQJokMRJIojYGRVW2s2CJZqCoUgVJPEO8tLQEZ2MuL3jezlsLEKHb60JKibKqkCddZnwA9Lu9Vk4HIiQ6ZfCapZCCMyRN7aCkQH97H/W0hHFskAUiaK3RHw4wnUyiYQ5B6xRlZRA8IISC0hr9QR9FMcV6UYI0f00qiSRJ2aV0OmUTsSRFmiRIkgzWGtSRRU0TjaKqIISA1il6gwxVWcJE8CoUoSwreBeQZSnLg42DgECn10VVVZgWU+TdbnSC5rm2qq4A79m8iwgqTSGl5nPBB5RFibzXRaY4S9gag+XlJZAUGK3ze9apag2FWKQpIAio6xJSaRApSCVQVBUz1dLBVoYRRXSubaJQEHyMJhHRn2fmqOtPAnxDBIjYNKs5h5EacBaHOv1T4LB51jacAI7nQ4zQsnezOdkAPMEA66Rg7okPPAPIzUylx2bDquDn4oVibBOF1rW9iV1RQrWz0M56nveMRmMQaJUiggQccT5yohOUZRFZZo/GdtiF0I5KuDga4SJom40lgJtqcbaewVSLqWZA8ckW/Mm/sQkY0yyTas7Mi9lfiqCNDfw44kcpxWC/yXqad71u1CkRKCsS8Hbm+EyBWonwbCwhSpvjYfOuAaR8D21dr9vsWXZUb1jl5hg1ShwhJZw3HP8lWD6cZh1UpoYpLYNp7m7yvdttVi4QGvaUGdnazEvy46ztvMN380+TO9zGjAHzMVAhmlFpwfFALvjYwIvN0+YcdA4hSqk9OKaJI9D4nstzwKHNSCcCRBBQCY+MlGUBqTRsbeFdgIFBliUI1uHQkUM4fvQ4BMn0uhe/8FW7du5+ad7pXqC0OLsYT5evvvpqwAMXXPQMbN+xHSurK1hdXcEtt3xj7dav33o8SXKe+Q8MspumKrxf7CYWtahFLWpRi3q6Al4SAhTzZtkcaiZpk1Ky8UzjFBxYQiuVhDfRxCZmjvhgkeU5PEV5sPcs0xO8oVZSwzWSPOdgpUCSZqinRSvJU0qhrmqUdQmtNNIkQ1nXSNMEzjLT6oOHrT1Is9unsTWsqZGmGbYsb0FtDBLJ86ZlWUMKgYsuuhAk9Pbrr7/woqNHDhz66k033qZ1AuccdJqiimZHw8EAQhDWRxvcta8r6JAg6/ZR+xqHjxyG1hq9bhcUeH1Wt2/HoaOHILVCMSpgvYN3YyRpgjTNWuksKYVuZ4AkkRgXE97sSgVnPbq9LopiwjO0SsLVFdbX1qCTBCRVnMdzPI8sBJTWKIoC3V7exkmtH99Aonn+FoGhUpakUDqBIKCaFgzA+31UBedP5p08Ni/YVGv37l0YjzdgjeF5PGIzs26eoSgKSBmNubxjZi4A1lawziCAnbaDC2zmpRN45+Esz80hAM7XUEGhmE5BxFLZQITgHaZlCS0VlFJYW9tAt9tBnrOx2GQyhmsY3CDYsEzFhkRkaa3hTWijQmgM2DhXOkBL1RoQCUEs63TRWIfiVj+y7RRC4y00y3XGCTmy88xWwzmGyBhuyjKax1dhE7QNT4BjM2r2iQLnJ5sLxklnWOc/pzAHRnxgGbeLIDXO9voo525YwqbJ1WZFg+W6dVVDQHDMleBmlw8e49GYM48FtZExUvAcO4Ron7NxcRbtHGojIBdzjtHMAgopIEBwjmYxP2GedQ+blyPMmUoBTw52afMyzmT4c4xlfLyZpD1CtmaOOd7LmuYJf8yPp7WGta4dlUA8h9jwbs4p2yOyoNE1OjLLTU5yM+/Mj8dmYCSZfedrKyCAM7WdZV+FLMuZEfY+zssLOBdQFCWz0k3UFBhACiEQKKpziNiRvRlp0RLOIhraNbPBTcMhAmyaGVGF+F8+bxSrgBppcwS75IEgqf3pZjE4Uim0l45vzKt00rLXHJ3GzbyqqkGeRxOaBmJzT+r22HHZO4vBYAuqumJ1DEmM1yeYTifDH/+Jd//Y85/3oneuLC2fIpTC333kI3j+dS8Axb9Xz3/B8wEAo9EESqf4wz/64NcfeviBfcsrK1hfX0MnzyEkoZhOOYJP2MVuYlGLWtSiFrWopyvg9d61JjLN7FpMVQQgEIKFEhw144NnIyBr2UQpytEamWfzWN56hOCg0wTeATICaJHyxk2lGefVVlX7fMF6TO0UUkokKbOStTFtt18oBWNqhCA415cEhAzopF04zxuyBlD3ej0cOXIEQhEoSHQ7/cuvf9l3/NBLr3/py50xD77hDW/6+Xvu/dZnt23bhtHGGN579HodON+wE2zqIkgjT/Jo/sJ5uERgkympUNsKh48dATw4UocaF1Vi52YB1GWFTt5BbS3ybg5T1W3UifcB06JAURRIswTTacGmWtFV1Fo2aBpvGOhEt1FEIXiILGXmCJy1WdU1dKLQ6TDbmucZamtQ1DVvTAVHkUwn45i7WaEoC1hjYQy7NgdvUdUVptMJvPdI0xRLS8tYX99AWfLGrqrAub6KzcKctTDOIs1zNs0aTyC1gqsNjCmhdAIfiCXWxIwgu7AyW1jVFabjKXq9HpQQmJYFspyPv5Ya4+kESZbCVDVsaeB8lCqLKJm3M8aqYYesMa3ZFQTi+48RM67BtTGCimjOlKfBsXGivZ0f3ezOyxdIaMcyGfBEABDoSXXMm0HsDJnSJontE3+aTkCx9GTM7pN6VoVN5rotSR1diAWxoy+vYRNDxaAneP4ZkszACWJ2zQYHMnyOa53AVRYhOBjnoEhBkIB1HrUp2mPVsOohAhvvXAsGvfeQKs6exrGJVk48tzBNPE6YNxZrv0FPcHTGky/JCZ/P8nB94Ll7QoCQKh5r3/Y5nHObZpIb8z5BBCFY+cCeeQIhOAjFzRYXY8La3FoS7TEXUVnTtkQEwVteH1Ozi3FjjNVEGEnBZnZEYNm/C62xXi/vwTgLa2NDEoHVHjqgLitozaMhZV3G+W3OSQ7CAUFHRYZnIz2pWEJNQJAN4A9RuRPgnGlncCleBy7GNwkSPNMdqI04Y4k8v1Pr/MyVO15pQgk46zgCzTqEmGUOEKsKXB1dpblpqZSCkAKu8qyEifLtPOtgMp3EJmvAxmQNRTld/tCH/vcvX3/9S37o45/4VHrNtVfhE5/4NK699lpc/x3XxetBwNQGf/xHf4Ibv3oz3vWud+Dhhx7+hhTpyNQGWkk455GlKeCr+HdvwfAualGLWtSiFvW0BbxEFHMQ0eYxiplbC5RUMb5HMJAIgWN9ZAJnHUvOJLMItamB0Mj/2D3YWwvv4zxfYMmjFswkO8tGMGnSQYBHWU2ZrfAuOgczIwXHLs8k2MAkSTSqsoKQxAZGhmWYVV0h0SmcZVfijfUNnHnmGWe+5rWv/5nnPvea733owQfplNNO2f2vfvpf/fpf/dVff/DOO2//mFlf35/lGcqKgdTGxghpmkAoQi/rw9QGtqpgTI0sy6C1RFFWSNMMWZ7F2WB2Uq7jnGtdlhguL7G8ug5IswxdrVAVFaQU0EkC52Kmbp5yZrAHsk4GEQhBJm0cFMCzz0tLS1E+GjCdTCGVhNYKCVJkWYqqrlHWNbIkgTEGo2KCcjyJm2S0jBRa4BEgoWmwNBj2l3b3QEEEgIZC6l7e65517lmDLE2S2lTj++57sNy+bdUdPnzYHjx4ZCoEHX30kYcnSknkeQYdQszHJJAApCRolUBKARMjf3SqIUCo6hJZnoMATKZTCBBsYOfr8XgDScZA2FUOYzOG9R6uDOhmGbRKOL+YBNbHI3TzHqqaI0h0omN2bEAvzVA7C2MNyHvEtBckiYIgwHoHgoCWzG4772YA0POcKqPfsMnjiK+JGahqMGbjnBvmWMiTMq3xl2ayZnpKX+UZLguYDwGipwJxhCeYVzXJPkIIbgC40EbsNFLZmbyX2gaWlDwz6i2QSB3n+Zlpc8GxesEThBfcPhCELEsBsPwdDsg7HThnOV973giqUZVEOtN6h+CiZLcxbjJ2k0vVvIHVk4F82hwm/MQlPVmqTpSvNGAacyx+sx4+hM0u1mEOmPoQ2UfJ0mQfmWLyUXQQI4UosrckI34O8XeYMRbU5A7PwLWSKo5DyFZe3bwXDwsigjUeJAJ0msLVFpAs1ffeI+vmqMsKiJnkzTy7IAFIVo4IIaGTBEoSSuOZp7UGQhASlcSorxrOhZk5V5MLHF2m2axMtDPyvjWAC/Dxbws1ubrk4eaEEo2MvpF5EzGwDb6R13N+OwmCdR7eOWiVtAffOoNyXECrhFlv75B3cu60WrBBYV2iKIvkv/7Zn/1/Xv/6V//o2toaLjz/bJhgccrpu3H+eedi/+MHMJ6McfbZZ+FTn/oUbrnt63jt616LXbtOOUSge5yvIJAiUSlqY1GWPFZSmxLdbnexm1jUoha1qEUt6ukKeEMIrelUCNElWBBc3JH44FFbgyTNkOY56rKE8Q6aCJCA8IC1HDvB0SGiBVVVVXI0j9IIFkiSBEmisba+BmdsnC1L4EKArR3PQwkBeAcQm6hkeQqSAtZ6SKVg6xreW+hUx+gihSzj+dmN8QaDQsPmUzrJ+t91/Xe/8xUv/+5XpnlGS8vLWFnZgmdcfPEVb3vbD17y6c/84823fvOWj37ik5/5Xx//6N/fu3PPHnSMgZTMRNauxGg0QqebQ0gB6z1EEOj2utAyidEWPRw/egydfh86zZElKdDrwnuP6WgKJQUmozE63S4bwiQSVVVBxaaAUgK9fh91ZVAbw8ZR3mPL0jJqY1BVZWw6aBpPpqHX68Fbh7KuUNc1rHU4sP8AToxXISUxWBoCLqTbt20949lXXXPm2trGoN/rJ3mW5Dt2bt922WXPOmfPaaeef8re3TtCgHbOBVdbvbplpT8Y9GUIAeNyHI4fOVYPhkM7mYxDptPJo48+9tWffO97/8ftt9/+D4cPH9oACP3eEKAA7wWssdCJ4rikso75mh42bowFJMqygFYaSaKRWoe142s4de+ewRte99r8D37vg4dVIrxMFFwIUEJBSoHRaIrVwRCJ1lifjqGyBNYb+MDNFSJgNBoj0SngCcFFQOH9zImbGIBIybEr3roI8ELjixPlmr6VRfN4bngCwmrA7WZ2h04epgvE2ea5yJ+T4rbNllSzh2mDlJ74PCfG8Z4ACJsGR/vzYvZaWNLKcUAixmG1jx/nW0WMb2LndAZOCAQSPmZSewiloBLOTi6mJUtZowa2nQcNYLfuAFgyCC6w1DXOFJMgwGGu+RYiGz8D4c2i03wH4anA/z8R9M4f+5lEObSqlXnQzfE5M3dndpyPcmCwsiB4P3NT9mjzYCkQpFYIznHD0Mdc2eYYNc2NGJVlrG3zwq0xIMlz/SEEzq4Wkt2xhUSSpah9gKcAE9dckUBQCggS5bRAmuZIkgzeW3arjyxpcA6OBNKsAyEIdVFzpBDATG9gltXHa4NnuiVso+4JAcG6dr62kR8771qFSfA+mhOCc89jo0kQ571LJaCkio79aP0VqJHVh4Y1F7DWQScSUrLbvpCITLNAt99t45e0UlhZXcX9992PH/7Rd/34W9785ncAwNLSEu6752688U1vwC/8wi8BAEaTCZyxOH5sDY8++jh+6Rf/NZZWVvH+9//CJ7729a9/I8lSFFUZGxYe3nOsm5DiJPnEi1rUoha1qEUt6ulS1OTiBsE7CimijNE5kOKZUOsi0yiYwXDe8IbFMSshWmfgEGcFo8soeHPMEj52dtVaw1iHLEnbSBzvPKSWrVGWVJIBi/WAAmpTcyyRALYsraCsKhhToZP3QQKoqxpKJTDGYs/unVjfWMeBA48PX//6N/zI97/5LT+xffvOHWeedTqWl4fsIFxyvI/3DjffctPGffc99H9+6Zd/+eeOHz3+mNa8mVo/vsYztt5CSIn+oM84nAjBW2YcAktBy2qKbr+PTqeL42tHGeBHeXhtDEuRKcBYy7OmiA6tgp2gpVJYO34M08mUQSI8lJQIgVBVBZukzJVOEmZkSCbLy1tOO+3U0y447dQzzt97+hl7dp2yM+/2cr17zw61PFzOnPHbO93OGeeff+6OJ842PrG8cxhPJuj2OgCAqqr49Ue0JISAKSp84hOffOwvPvS/P7rv4EP/0Mmzr376k595TAgVXWUdrPMY9AcgARRFyTJBYyJzA1hbI0kSWGvQzXNMp4X8gz/8gx+55qqrnvGa7/3e/3r3ffd82Trve70+xuMRn39SYsvWrZiMJpBacv6oYeAgo4NtXXPDQkSToMYFmCKo83DMuEWjmxCa+JywKUc3xDleMRdLxN+jzba6EYwJQZvNrU680ATNgWOaC9pB+7ihjSCan9ulJ0dzJwJe2gzM5nNcG1l+MwProyS4MdxqPOnQvl/fKoSZzZMQosleDbN516jCUFrBx+iuVCfM3ArOiHWenXdDvIZBAhTjZJrZ4nmgKQRfg82ba9a8nZaOs9htDNTJ4piebG1OnhEVo235i1prAGBXccwMzqhxqiZ2XbexkRJV8PCOGynMCAMQcRaWZIxV4wUNsYEyz9dLFaXi1vIwieL5cx+lxkIQR51JBa0UnOcIskYeLaOTeXAOSZbxMXMBSgjUtsbycAuEVJgWY5RlwU0KKQHMMtiNNUjSHFknxXQ8QXBsG92abJGIow/R5ND7yPZKHsd2ob3+hSBuUBp2+CZBrYRdSI5BM3XNzDYknHccf9XM4cc1cVEJkKYpvOMxF3afjmqhVLPUOoTWg0JKgrUOWZZCkgKJgD2nnvad/+3P/vvvro+OnnnantNw2ml78Vu/9u9gncR7fvI9SDJ2f9eKGzZ5nuGmG7+G3/jN3/7c337sb3/OGPNFJXkWvWmGJYmG0grjyZgj8cpisaNY1KIWtahFLeppWEpQ0z33CN5DRraimbdC8KDAMRu8uROcKas1ynIaNzAyZiTyxjd4jtKAZxMW1wBb73lDohSEIBjD85ZKKpALqOs6gg6KbtGArS3yPEfwHnXNxiqkBDRlnLOYSrjgAEtYHi5hfX2E6XQi3/+zP/8v3vx9b/ypO+6+c/kLn/88zjr7jIjwBYSQGI0Y1J155rmDSy955uvuv+/eG371V3/jP29d2YJJWaA/HGA4XEJZVrDOot/roq7YzGkyrSElNwNccEgpxcZoAwHE8j3n0O/1sbJ1FYcOHUQZZ+ayLEOJAoIEjh45iiCA4Cy0zsSZZ565YzgcdEfjsSEKXkoh+v1hPhwMVk7Zs/v0paXlM/ecumf30vLSlh07ty/3eoN+lmS9QX+wvG3L1pVuv6uavEwAqIsaKuHZtvl9vvcNWPKw3kFCxnVpjIMIx9aOwgfHJmSRKSHi42ONwx233YFde/bs/rVf/9W3H984cv4NX7zhP974pa/+9dr6BjPvWiNJBerIQgcQ8k4GFRjcZ3mCjY11VKZGN+9i67atSLJk166du97wtZu/fuWBQ4cGr3rVa174ile8vP6Lv/gf5pnPuizVSu8497zzdz/7qqurH/uxn/iTv//o332q1+sjBGKWC43xjodzDo4IMsToI6UgJcGUFQiERLNZWIiu5EKgdd1mZe8sY7YBsE9sFkTwKGZOzcGHOROrzSCrjW15Ul4XmOd/n0rsvHmgFU9qQNyAVxfnJBtQFxAg4/txwUMKBYQADwdBEkrx/G3zkpMsgXWes1sbU7QIpEmx/NQai2DZnI5IwHnHsVtgWS7PsnLTg4iZu0a2CgoIgdljIrSNLwbA84ZhM1D6hAzepwK3OMnnJ8qh5xheF0cJmFAW7bFsjiEJmguJovZcCMGj+dUkS0BEMJUBKY588/CRsWZGMAgAkS0NwcfGAEdHUbwHxgTeVjIevGd/Ac5HVxdffNkZhCDvuOvOxyiEjSTNUFclsqzbmv2JCHoHnRzrGwYkBbp5DucCK2bIIklTCMtmW9ONafxbIFo1gI9NUHbk50aIbSTIjbO3EPEaZMwarON7SjypW8k22AjL2zgzTgFCNm7hHBfWjHRIpRGCRzEpkOd5NIdj13fnPJwxEGkCQRJSKKhcw9gaWksgEHQiMZpOd/zMT//suy55xkVnfvhv/w9sXWPb1q14zeveiFNPPzUy+dEDIPBs9I03fgXfuOObxx/d9/BHlJA3e+GwvGUIW3HubpKlHHdkLBKVwtRmsZtY1KIWtahFLerpCngbx00O/2gMd3zLVjXzflKoNo7HegdbWgQfkKQaSgrU3sb5No4NIpLtJs57QAkg73ZRlRxTY60DNYYmIJaYSoKpLRs3IcAFiyTTUFrDVjWU1BhPChABq1tXUEwLWGehEwElE2TdDI8+8jDOPv/cS9/xzne8a3VpdfnGm76G8y+4AEtLA5S1gdYcOeQRMKmm2LK8BB9cZ+34xlnLS0s9EMadTo4sz6CURDmdYjAYIHhg/4H92LZ1KwaDASbTKQN3SPSW+uhZg+l0itXVrQy6rMWRI4cxmRYwVY3JeIy6ruCcxWl7z9x6zjnnnXHBBeecsrpl5cxdu3df/JyrnnvFzt27Tq3qMkynE5tnKQa9oer1ukmep/LbHciAgGkxRSfv4Btfuw1fveFG/5o3vk70hh3YYCCI5YK18ZACkIpZNqKAclrjyNFDsLbCtq3bceDxx0E24KA5hPsfug9n7D0T/d4A+w88jtXlLbjgoguhkxxZpuR9n7t3x2//h99ZIwj0hz0Y20hAOf9yuLSMLM9x9OgRaJnAO4O64mzd/mAIbwMefvhRnH/R+Xt3n3LKOR/7yMfVlqWVl/3BH/yn71ndulXv2r0zvOAF11ETCwMAv/kbv37RLbfc/BMHHt//uU6338aEaK3ZbKjJLo0KA3hma0OYSQ8bBjVJeENtogGYD7PJ2iatpjGsasDsE9HTCazn/LfDDEjNM3onsribBdNPgWRPhmzn53Vbk+jQmiKF4FuGEkSbMnwpypbZZTuFltGIyAfIyMqZqgYRx3h5FyA1uzEbZ+Etx4m5wNnMSirUVckMupKtA7QkBjFplsFbD+cM58UGD0EKAbadfXWO7w3tXG1sSsw3GuZnq5/Up+pE5vdk0bwnZBbLaH7XMM4sw43HLMqpG8f0hv10ziPLMqxuWcHBw4fwjMsuWdq9e4f7+498fCQlN/eSNInAnRuL0CqqaMQsEg4MaBHBcaNE8C5AkWLWNghIydm67/nJn3z11i3bXnX06EF/zfOvvvP++x64L1HJg5//3Oe+tTFaX8+WtiAASNMM02mB4dISVle34tChwzxrbH2MYdPMpAKA8xwnlecICCiKacxrFlBawJtolKcUnAdIxjgu6xDAc/wqSeEsezQ02cGcywsgCATHcuxowdU2N1xUDDUKCBmzorm5otrYKghmmrUSqGuLqiyQZTmkBGpjkSU5tFaQQuKxx/fhe17z6pe/4Q2veykAfM8rvhcPP/IwKuNw6umnticQRxvxtfBX//N/YbgyxPaVnQ8V4/GNnTwtdSJRFuyR4L2HqQzqykTFxkydsKhFLWpRi1rUop6OgNf7dkZQkIA1DkJy3IgDz2shRsj4wLJcgGejhFTR3bUBFB6mNNBJAqkklNCcuek8ut0ey0M1y+wqU0MpzRssKdkgJ9TI86w1RsnSHM45TMZjJEmCfn+IsiyRdThrdzKaIskSLA2HMMbFDZLFFc+67LW7d+8+48EHH8Rzn3cNtm/fBh/AeY6eDVWyLMXGZAMbo3UcPXwUd99xz85tqzu3PH7gofHS0hLqymB9ugGhCMeOH0WS5uj3BiimBbZsWcHUT1AVBUCEY1WNPbv2RPdYh+l0ivFohMl4jICAQX95ePFll5xz6p5TL3nuc6+9+roXveiK00477ZxOJ0sIhKqocGxtHYOlARK9BeujDSRaYdDtPYGkcoGl1I1TrSCBsq5wfGMDWZaikwOn7T0Fe/eeIoYrA7jgkFHa/n6eslyzAYMChCTR6PcH7EBd1jj/gosxGPRRlTX6wwHquoDSEuedcyE6XT4+TYmgy8NHj9wzriYYDPrQCaGuDMqqRNbJo+Ot5fzfLIUzFhujEVZXV5DmOY4fPYbalDj1tFOec/HFF67+i3f9EF73plf3VrduRVkU+NY999GeU07DueecjfGkgNYJzj/vvGf89m/+x1/7hZ//ufffc989n9Y6hXEWWkgIIVn+GCymxRTWeAihIAIzvZz161uzIu9dS+U2xl6zeJyGkcOMYaRwUt8kNt+hGQg7EROfAGCfyrBqPpG3AefzYDnMmxG3z0etdFtENUWbJdaAtRBiXI3i2dQ2j5jnm4UEmxN5B6WTNuyWTZk8giUAHIsVvIetLc+712xwpKSCNfy7LEPNYI1FWU2BdpYaUImCLQyM4SaZjLndAb7NcObZ6/gaiQFXiEB0FgA7l/c6B/hxMvOweWK4WZcwZxzWgGjM2PwZ6OVRjTRJUZkSIc4ne88yWqXZsbysbf/Nb33ry6655ppXbt2yYsbHJ3/1pS9/6ePWwCqtoSRHabEpH0WgH3hG1vI8LmIMEQht7JZ3jaszS3y9s8g6Hbljx7YL9z2279p+1t9unTl05OCh4489tv++F1z3/BvuueeeT95999235nkO7RWkEFhfP86NwSyNsmOgrAwbPHkf2WW+j1dVGfN/gSTh7PC65pxy61wLPpvrIaqQ5+6xAYIUJM3MECmI9tA1SoFoIQ2CQKI1XJw91lojgBlcBAblgOe/Q+A5b6EVAIdOtwdrDNbX1qE0531nWYr1tTWoTG9/93ve/QME6I11lh5LmaDT6cRrPHA0VAiQpOB9wFnnn4Nzzj4T7/nx93zzzrvuvqfTSwEhUJY1g32SGE3W4QlQiuLrk4vdxKIWtahFLWpRT9OSFCWDUikkScIGKJBoRJVCCHbEDBQ3Iwyy0iQHQCirIs748s9JwfOrLrAJVZ53OKfVg41UfGg3c1nGTr5VVaM2FZIsaTd4zEyksDXPaBIBSksgeJTTEj7w571eD0IoLA0GePDBB3DJM5/xvA9+8IMfmE6nywcOHsSgO8DS0hAgz5toGxiMS4H9+w9gOilw5pln4JJLLzcf/9Qnv3z02KFHdXwNJNmZ2lpmrVdXtyDJUgZU8Oj0OhgMhnDGYn20gWNHj2A0niAE6p919hnPuP76l73s7W9/+zv+5U+8+1+9773ve9+bvv9Nr7nyyisv27p1dVuitWxgjbEWSsuQ5xkpKZFlKazj18vz0SwdtMbi5q9/HQLAcGnIgEwRnLVI0gzDXg8heOSdHGmetWmuTQaoCKJlxprZzRCY7c3zHFmeo9vt8rpbNmQZ9vtYGi6j1+1Ba42qMrC1xcMPP4Qbvvwl3HrLNx767Gc++6dCiLKuHNKMgVLwPpqfeVR1Hc1mWDlw7jkXoq4tJpMximKKvJdt+8MP/v4vrh0/fup4NMI111wDADi+dgyPPPQArrj8Sug0BTxvMAVnK+957etec/EtX7/lqw8+8NCBlZUVWMsu4sbUMLWBlAJZljFjFuWiSkkYZ1nuLTj+xAcfgZVoI1JmWHI+umhmGjwX/Trn2ruZTGw/oBkofSL0fcKPbUrhDZvsqqLUdf4X5lOQNj0X2tlYiu+reQVtnm3LMzfzuNGci2I8WQjI0g4rLIJlwyOdoigmzMxKZhvTJIkyWwnvLHSikSiN2hpoxSACAkjThBmx0FgzUYw6c21uL5s7ReFrwz5zNlK7/k08FEWE24LUzRHJT5pP3B5jCpHxRlQFzM1qx+fRSRrBr0dj8CcEg7M0z5CkCcqigNK6++rXvfZfvvz6l7333rvufc73veFNz3zlK155fZan6Re+8PlbjXWViJJkkOScXjgE8m1zgyTLp6WOmdExIgfN+HXMHEqyBMH7sH//gSMrqyuD0cbooo9+9GMrSultV13z3PPKsnrmj/7wj1x97jnnbLvt9tsfGY8n62meYWN9AiEVtmxZgvceRVmwGV/M1CUAzlo+toJgo4OzUgpAjKMLDP7bBorjdVFKgiRFKbvnvN3YYIBoriFusBExMxziDEFjhtZIyI0x8V4R4/JiNrBz/LrYwGs2UqCiUVa304NKFKq6QlkWmE6nePOb3/TO9/z4e95e1pbKqkKep1haGkBFgNqoCmRklo8dH2Hbrq04eGR/ddtt3/jrybj80sOPPFK7YEEywNVs8GUD+0AIpVpDtQ984P2LHcWiFrWoRS1qUU/DUoIIUicAEB1v2VXUBw+hJFQEXc567mRHkylmHASIBJRiuV1oZ8/4901dM8PrPawtoaWCEOxS3Di9NtmlSZIBzsEYlrAlWQZr2bkzUxm63Q6sZ5AkVYJEEqxx8M4h6SpMiwIgseeHfvBf/PjuHXtOv/e++3HG3r1YGizB2AqZ5gxbmbCRSggBK0srmE7ZaGQ83Vjp9DvqnPPOx61f/xp6nW50QvXI8xyDfh/WWIzGY6z7EYqigFYC/d5wsGP7rjPOvfDcC0/Zs+eis84+69yLL3rGWXtPP/XUratbh0o+udSt2SzmeYaAQJzvSajqCo888gh27dqJpcEQTYyukAJnnHoGuv0OGypJnl1lcEttnnJDcYXIm7HbcIzwiGyLhuTsUcExIq2sPVI1FABvHTyiaY4UIAHkeYJ9j+zHsUNrGHSH4boXveibf/SfPzjat+9RaJ1itDECxxXlKKsSQgmkOmMDnYSgEg0fDEQc7KurAt/3lrd99zXPvvY5d999J4rpBGVRIsszfOwfPobnPe8FGAwHGE8L5GkCEhLOBkhF2LFj5zNPO+W0S7vdzq39fg+j0RhKS3ZtFQ145QlI522MUOE8WWYLZ3ODTXZnc77yJphiTExzxEJkIOfA6TyQwgmAa06nTJtg8rerzWm9M/CNGQgO1BrENQesZSZ94LECzIFaH3UcIjLXkQ13wYIoZhB7liHbYBFEgISAh4d1NkY2uTjfHECSHa4ROI+VCCimY3R6XWRpiqNHjyJNU0Al7P4cc75DZNQEEbwAEqGjPBhw0bCoMUmSkhlBb5sVj4ZfYSZr5mOGNi6ImgU5kd0NJ6wuMauI0DQRCFKiBbxNmaoCCQFJkoGdZHMuFwLyJIGpagDA93z397z9T//4P//Mxz/2ic6555yFD/2PP8eOU3au/Mqv/MrPkMDGr/ybf/sfpFTwzsR7X4CQEkLEeVawKaD1DlVVAfDQmhsJWvD91QULCG5EKCFx5NCR2z7+kU/+ztZtq6Xz/gd27Ni15X0/+VP40P/885XSVCs//4u/cEXt/LP+5E/+9K9OP/P0W/c9uu+xw4cPjdMsgZYKnbwHpRSMtZxnKwWcYf8BHwLW19ehKMDUVatwEFIgy3MAQDGdtsym9dzgFEQxw5xYGg5CkqSwVQ2Qh9IJrOP7NhvFCXjPozDWGmjF/hBNvnuapAhKozZ1C5S9C+j1uijrElpJlEUZzQsN8m4XZ515Fu6+806cdfY5V//Gr//mj0bIjZXlIRoj8sa0TcjIWAcHZwO89Xj43ofwtW9+/cGbb/r614rJeLJleRnGlgjBwQaHNO/ChaYJaVCWJbRSi93Eoha1qEUtalFPV8BLgmNwnLUQQkBICQeHJqujrm2MJFFtB15KgnOWNwya58l8HTeGUjJxEjNNy6Js81mFEqjLGnk3B0LAxsY6pFQMdilAQEFpgbIsAc9S2EDswuwsg/EszzEY9rAxmkJKiTRJQV7g8NEDeOe73vma17z2dS+fTAvs3rUbVVlBKkIQKm50mZVQQsIHj27e5Vk2AAcP7z/yhS987v5Bt4ctyyuQUkBqhelkisl4jLKcYmNjHWna6TzjkovPPOPMMy8447S9z7rm2msuv+SSSy7asWvnVjU3x+UDUNcOZVkgzzJIwTzOaDyGkgLra+s4evgIBktL2LVnJ5x1KKsanU4OpRLs2b0HaZ7EWcxmzg3Ytn2FN5jBoa7ZQdl7AiHOBgYClICgAIrsI9EswoXA3/PRYVWConMu4Lxl5sk5EElopTnnGMDhI8f8xsb6BjwOf/GLN9z/pRtuuGfHjpV7P/GJT3xmNN6wy0vLmEwLSMHmMUVVIs86cN5jNBphy5YlEAhp2kFdW1jjMCkK5N3Olre99a2vAyDPO+8CnHfeBfz+rMXOHTuxtLSEaVEg0RrNHG9QM9CY5Wl/NN6IMSceZOO8uRKo6xqFsZzdG1kkQTHj1cfIHcFS/iZOhV1l45xvmAmLW8Mdtnr+p2BVPEFv+xT17VJ5m/O3VeM29DIa5+I56TJhkyS6AcRCsGGbtQbBB57tVnxtBx8glGSn9Tj767xHcB7BAVKqCHqY+U+1Ruk8AxLPYKU3HMi6qhQSUpdcfAk9uu/h6bHja7559b1+H6lgR94szTAtimhyxOBoXirfAFs23JpJxts1DptXb97JeVMX4gTwS3PmUy1FL5oGFAP5EKOXQuBrgtgtC0IodjqIvgbGWIwnE7zoRS988bve+a4fDw6dsihx2ml7cdfkDmwZDgEge/e73/MDH/7wh//vnXfc9aDSKecLwyN4Qm09Eq1BIcDEaDdmglnJAIrxRt7FEQYJUxlAC4xGG7DW3p0k+r9561d+6J0/8HolbLo8HOCWr30Tznvx1rd+//e+5fvf8orTzjh1sraxcdcH3v+BP/zzP/uz/751dZtfWV3BkSPHkGUJQgBGowlUkqAoKzjnkKQJKBDqqoRQEjLe/+u64mYmOGrOWIvgPYyp0aS4U/Rm8PAwVcUmWErBB4fgXbyefIzEi+7cxH+LtNZQxOdJIEJVldBK8zVKPFteVSUCBVjLp1e/1+dcaCEw2RiDSCz91Pt+6ke3bt16hndAEoG5jwZyRLN597quYySfxtatS/jqTV8u9u/b94U77rzzq+TJd7td+KmDECmcmaAsS+RZDk8BMiikadJmpi9qUYta1KIWtainIeDlubnA+bsk2LG52SQ2ssfoYkvgeSytFOq6Bojnu4iAaMjK87tCYjIaQygBkWgGbNHlVwiBbreH6XiKLO2AJNDrdVAUU1jr0E1zaJ3A2AqBeCPbyVJ4AHmWAZ7gHX8tTZm1LesSaZovv+z6l71yeWmYra+v47H9j+HWW2/Bc658Ds4440xYa+GJXaYhgGA9SBK6gwwE4PDRg3cpgX0rq6sYjyc4vrGO8WgE4ZGcc97Z515z7bWXnXXOOVc859lXPvOSCy+8cLi0NNy85QbgWZ4shEBZ15AgaKnQqBJFZL4PHTqO/Qf2Y8vyEpaWlkEkoRKJQZpG6SIw6PeYSXKOmw1gVsKYGlmiIQJHmEDPjJWMZ2aFvMfaxjq6nS7SNGeWzPsWMLGU2sMFA++ZvWrMYVKdgFLegI7GBfbft2/8+S9/8db//X/++h/uv/f+zx89eOhhCBwUSlZ7du/GvXffw1JFpaC1BLmANE3hSgcCQQmBPE8wHo2QpjmybsC+x/ah28mRdzSe85yrvuOa51zz3AZwAAQhgaIo8LznXocsS9m9tjVgmmNQAdS1qQAgTXjTXhUVnDMxa1fBE0e7NLOoQQA60XFzTgAx0G2yRYUgNrfCnLw3AkXvXewDhSeC3DBjXhEjkYiI1RBPIq0Nm7yZadNXNv/w7HtNHi5FQ6UZrp7FHlHMdG3Ab5hjPZuPpSQEF3/PR5BCAsbXCPCQYOdmuIBO1kFAQF2XsM6h3+8hzVLUJbvVHjl6BK9+7fe+6Kd/6qffcOddt/f/5L/8SfkLP//z7o//6E/u/vRnP3PX61772uLOu+585NOf+vR9/d4ggAhBAInWcX44NIlIiHIEJFrBRFd2rRUAlu43rz8Ibjz4EB2oieW1M1b/JE2IqF2mQCwlJmolzYiNn2ZOOFoXtMfdkwcRZ69KqZDnGTZGYyillt7/gfe/69IrLjvroYcfwZ49u7HnlD3Ye+ap6GR9AMDW1a3nXX3NtWfcecddD0ohI85miX+aZlBaohhP544n/+Msqy5ICnhn2rlsEQ29dJpgWk6hU/H4Fc++6k5bV8WNX/1K6q3D29/2FpCQ2LZ1B5aWhgoUhsNdu5/zP/7rfz19/77H1z/9qU/9316/gzRR6HY5+st7C7YsZ3bdOgstNfJeD1XJs8vGViw/lxrOWQaoSqHyLH9mWXQzIsCztj6wDNxFs0IAkMSyFaV0e0yV4gzeuq5ZkSICZNAQJNvjaqqaY4zgMBz04TyhKktACmRZgsGgh2/dfTfe+P1vfvU73vFDr+LrmA3VfDy3xNy4AAB0ohu9EAKHDx7Bwf2HH7jnrvs+Hkiu1bbE+MAIICDrdrCydRuOHz8GkgKmLEBCQqsE3rjFbmJRi1rUoha1qKcz4OU50bg59h6J0gxiHc+uBm+hJJtUsdMw556SEGye49kQCOAZsLSTYHl1BXVZoixLOCJ0up2Y60lYX1uDJAmlJVSiEOAxHo0hhIKtN7C8MoRwEpWp0ev2kOYax4+vgyoTASBvV6aTAnkngw/AsNu76Iy9Z1xW1xZ/9t/+LFx66aX07Cueg6Xl5bjBlzDOQQme+2qyRolYRvilL96wPNkorhyNJrRjx65dL3zxi0/de9qe0y+64PxLrrrqqov27Nq1euLiBY+WmSIBBEHQCa9DR6WRUWaU4ok5vKXBAJ2sg127diBJdMs6OOfgRYCIzKO1DiQ1CARTV7DWQCmN8WQC2R8gUEAn6cYNMEtbUx2bD/BQKkXwvEn0UfIpiGcIOQfXwXuPPM/a9QGA2755J778lS9jPBl9647b7vjCPffc/02V6dvHG6NbqkmxZqzDjp07ABnw2GP7kXc7kIJQW4vxaIJ+vwetJTrUQV3VKIopsiTF6uoqrPPIkgSrKyuYjscYj8aDH3rbW18jhcgjlgTFSKB+v48QjaRiYhLDkjkM6LzDkaPHRwDHv3hjkSQaWZagrmsoncA5g6Io2jlbRUk7z+ocx2UBfK576Tdl7qLJiPXsGN40BWYoczO0orm4oHAiw3hilNDcz4cTIO7JrIXn2d8QM1BDM+saxctNU6oxWWKjoDmH6fheRJS9Bwo8201guaY3PItJGghs6EVwMLaADzzPKr2Hcx6TYorh0hDH19dw6t69V7zn3e/7t1c86/IrL7rgQlhjceGFz8C//43/YA8c3G8vf9Zl8t777r3jZ372/b/7d3/3kb8wVVmSICilEOqYQyv4NZESkdnl18bmVTEPVsxyf5s1FnE2dNPaAO1c5YmOzCFeuPy7vLJhLpO4iWOTQnBDiViZghCgJMGDxzK6XZbQX3XVVc961rOe/cJEZ9i+fRWnn3Eq1o6v4/Y7bscVV14OADh0+Ij5ypduLJrD6TxnjQcXEKyDDYFNwhDY8dhFWXcEagzMBbvChzhrTR6TyQRaa0ym5cbDDz16x9333Pf4j/3ITyytLm/BZDLCtGR1zmQyhVIatXXo5fn23/jNX//Z177+dQ/URfnNPM9QTAuURYX+gI3rjq8dBzw7qSOa2xHx8Zq5KnNjqMkF5jEXAcTZ/aZBp1Ucl7EOShDf45SEd0DwDjrT8N6jqiqQizPcnufqRRAwNUeJOWchKEGedvjvkg+ojYV1AZ1eD3VtIYTC4SNH0N8yPPu9P/W+dwLoTKsKiggIEiKy9s1pwa7YjRyJmf4bbvhK9dlPf/6Wf/jEP9ysBMEB2LptFWVRoSgrjNbHEMSz/84F1OUEAoENGBe1qEUtalGLWtTTE/ACgU2hhOC5QDD4UkrFDQLP/zUxIfAElSStk6dMs1aWJuKcXlFUGC6ngMtgaovas/wtTTi70HneqAsh4CqP2rBxUpakMX+XIyzyrAOlFKz12L5tGyRJjMcTeLD8d9gfQEuF0WSM61/0kqvPPPu04YFDB3HhhRdTojWWlpexZXlLCxx0lGVOxwWMMTh08DDOOe8s/M2HP4JEdF/4+7/7B8/csrrkr33BtVu2b9vWVXMSS9dAD+tjTjHiJlDMGPFWbhqixRDXtCohBKEua/R6PSSJYqMua9lEydScRdzEdCDAOgcJNlPROoFWGgHgiKRA2Pf4Y9ixdSs6uoM4ThazkHlD3O/0YrYuotMws40HHjuA4fIQ3X4XBw+u4cD+Q6inBmefdwZKU+E973l3+PRn/vFjO3bs+N3gcaMxrkqz1MDDKiXQHw5grIMWEkcOH0aaJtCJAkmFTq8DUxuM1kfodDsQWkIKiaXlJSRpCqoMjh49huHSAJPDY1x68TOe++IXfceL5xGJj1J2rTSMZ6flpf4gfpdBTFXWbIDkgq2qagMIMLVh869EIUs7qKoKxXTCctDAUStSKhjrUFWuncdsJN8+2HZ+WfAwZ5wvn8e1NPsknDC4O18NtvXhJPLbTSh4M1D+NpLmVvbcMLWEGfONOfdizBsBzZybAcBbzt31znBWmAtItASERlGVSBRLVG08NxOdwFiDPM/Q7XVx5PAxIEjoRGP9+HEMh0tn/tZv/dbPXXTxxVfefufdeHzfPrzuta9Hv9cHALVnzw4VAnD2WWdf+tf/63/92vXXv3T7Jz7x8T+syuq47Cs2D4oXl6k551pIwQ2g4CHBHzfviRUAEcD7+cYVzYy5nhA/1Lp0QTTxOBzKtYklpznLbe9ZIRAoxGsrwFm0rtbrGxvwweP0M864YjjoLU0ndcteHjp0CLd841Zc+9znAgAOHzp05KGHHn5Aa80mS1F+LwXnEAfLcT4usLGa9QaSZFQX8PHw3kPHe0Wv04dONIQWWFoa4MjhY+VXb/raza974xu+vmPH9gsOHDiEbp5haZAh63LerhAEYy2KusZll1x65b/517/8S29+81vfvbI8fLjb6cB3cpAgVGWFpeESRusbrS/AZDwFN0Zlq5DhzGCJumaDOB2zcxtzr2a9pRawxvK9KB4fzlnmWeSqKNscdwuDJEkAaxlkyxjDRAIBDqauYIRAmmTopF3UdQ2tFBKlkPR6KIsJjh0+kv3Sr/7bn3jmRZdcUdaG83+1jI2tRuGCE+KoBIQC1jc2IBO1TtLdUJXFI1oL9i8QAiRkm00sSaMoSngELC0voy4r1HW12E0salGLWtSiFvX0BbwEpSSUTGBMFaNZ2ClTSQnveDda2xpSKGR5zpsdAeR5jjzvoCoL1FUNoXUEPRXWjq9BSQ2tJVxNmEwLpIkGQSLVAra2vHmKQC3NWFbmvIUbMTMwXBoC3mFaFFjb2AACoZt3kOZdyMmUDbWUhAtuy5vf/KbrAWDHtu14sPMgPvmpT+P88y/iTX4jdWxkpp5nWbdt3YbggSuf/Wxc+7zndVdWBt0WXESnae+YbZJCQCnehLX5qc1IYTiBkwuAJ5bOWetRmQqdlA1dGpyTJklkfQOU1pBEcAiwACQRpErgagNI4NjoGJTU2LK0BIAZqO1bt4KEgnGcgUkxOgpx/hBgE5c777oTO3fvgPASxbTAQw89jOUty5hWBT7xD5/A4489htHGBq597tXY2NjAaLR27IILzrtxbW39a1LrtTwjlGWFoijQGyxBConjR45Ba43VLVthfYmN8QgBAqtbViB1Bus9uyoTQSUO4/EUaZZjuDTEdDrF2rF1FHWp3/Yv3vHq4WA4DH4uAgYBQSpAAhKRVaI5kCeIo0cEUE0re/jgwREAQArAMWhaq9aZnRQESQpaa9RVxa6/8DHjU7YSfSkkv1YpmamKNFCAnzkhR+Owdk40zBjUk4Hdk+Dab/ODT1X0xE8jppidi9Se4yHGD3GkjIa1NrKKIkaMKTgf4ODY7MfW0RiNYCxHzmipeZY7lUhzztnd2Fjn2fA4Vx8gBv/+3//6z776la94BQAkp5+KvXtPgSKFsjKQSkBLGZl0CSmw+oe//3sf+OxnPtd790++91e89VOtNUKUsEOwAkQJCeM9JMV4tOAAH02v5nKSQTP2msdsT7DQbj8Omw9H8x8ikJBz2czRCzt4BDB7SRKR0dRQQrEPgTEwpkI3z/rPu/baawHA2Bo+MOCdTKd49Wte176IQ0eOHh4X4wN5plHXJkawsTN+EGil2sxiKqQ6abNvQQLecQycEhJBaZAUGE8mCALodntQMgFEOHDb7bfeCODN/WEPcAE6UTCVieZYAoePHIEUAvmO7XjD61//yvvuuf++n/+FD7z/jNPOqnftXMXRY0dx9OgRDJeGyLIOJpMxr51gcJ7oFF45lFXFADDOsbDU2bC/g9JsbobAMUzGwlkDioZciLL/4H1rpBc8IEUCEhxn1DioC7AxoQvsZg3iNSLBozc+BORpypJ453D40CG8+ntf90M//zM/+0MAoIWETDg1gJq59xMuKSJittY6rB3bsLfe+s2PfukrX/polqbBxfGM0cYY3gekWQoInvmt6wpaJxypRAI6SRa7iUUtalGLWtSinraAN8pyvavgA5vQKJWgKKbwjjctpCXPRfoAaytYY9Ht9FBbzlslQXAiwJsSoiBUFc8BQgdUVQ0hiHNdqwrOWagkRXfQ5dlPKWBrg063C2MqlHUJZz2SVGFSjLCxvoFevw8tFJx3KOsCoIClpSFMZXH0yFGcd8H5z7/kssue3b4rIfFdL3s5hsP+bPMb3U0RAvqDTotcvAd27NzK780Edgv1FlIoJFrCgzMzmxiL+flR3hbPR6Sglbr66IYslMSWwRKAgCylTRsuTjUV8AioXSNf5HnqI0cOw9mAHbu2ctRHYMdeCX4vWZrBec/OqghttqUtLe6+627c8rVbsb5+HOddcD4OP34IX/rylwEi3HTTTSjKKeADtu3YDuc8tmxZwm233Y777n3g+Eu/86UPnnPeOfSnf/zf6JZbb0GaaKRZDusC1o6vQUoJ5yyqukC/30e/twSQwmQ8Ql2UEEoBCKjrCtZaJEkGIRWquoYUDFoOHz6MCy6+4IyXvfQ7XwQAdZynFdH9l+XVBKkE+pHZLssCggQbUElex7o2E5Go9U53AKU0z3wKNl1KiGcMbbBQKmtnf73jxdc6QR3dZzlTlOWNTURRc4yUUHPSYe6ENCCLIsPafj+cBODSU4Hef/rPhfld+twM8PxssyCwyVSUnSI2XEI8d1iJQdGwjM9fZrk9m8qBmwDcAOC1UEpDSMJ0MkGn08Wgn2E6meL42lG88U1vesUPvPUtbwVYsppmOQ4cPohO1sGwP2DpcDQSIgooSoPTzzyzu7Jt24/+/h998Os33/TVv+72Byz5h4MAD7tXlv0BlFYxxohaBpbde5mFbzynqJ1vjpA1vt+5gOTZGkdQ3f5ca2TlY3wTv38JbvaFOCecdxI461BXBp1OB+sba3jWFVee+4pXfs+zATY/G29M8LnPfR433vBl/Oqv/Som4wopgIceePAovEOSDKCVR1lWSJIMZTmdzWSDc2rJS0it4FwJDw9vSmjJjtoeHkmawHuHNMvgfcB0UgIigILApz/xuRsf2//Ywd07d283lnPJJQDrWcK9urIMW5tWKfBzP//+H374/odu+eM/+89/flZyLqbjAvCE8XgMJRTyTs7XpmMnc+uZeXXWcf4sESRJCMHsdICDb43FCLauIKSEUgmC9/Bz57gQrBQSINTGQGkFgkBZFVCJ4hGDKMd3zqM36INIoKoqCJIoqwJCAbUzyJMUh48cxCWXXnz5f/mTD74HQObtTFo9u98y6g1zkVYgwmQ8wdduvhX/92//7jO/9/u//R+1lo9olcL7gG7SRZ51UNYlSAKTyZgbEEkKArCxvh7VSrTYTSxqUYta1KIW9XQFvKJhOIggwEYlLgRmyEgyCAE7bEofEGxAmii44OGcgbUGQqrWmMp6C5UIKJUCISBJUmitmHFyAVoncUaV58uYAeIZrk4nR5rn2Fhb4/xb79Hp9iBA6HW7qEyFsqwwHk3Y4KrXwcrWFf2uH3nnK5aXh52Dhw7jvnvux7btW7F71x4Yw87GECFmWvLOx8VZOQGO2uH5M4rMqEAgGWcKG1fq2b45hM2oN8zhFRdYqiej8y+7qoYZI0hs/oUmG3UOwCgSMRE5oKqYDU/7Gayz2Lm6A0Qej+/fhzztYDhYAkmCVArG1VhfX8fxw8ehtcLGaIS//IsP4fM3fBG7d+4I+x57zFeVEVIRjScFXvSSl+BrN98MKTUuvOhCHDp8yA56vcMi4IFHHn7stsf2HXi8P1i6ZzwaleW0RF0bHDlyFEIIZGmOAAeREoQhjMcjTKYlsiRFJ8lRFhVk4tDr9eCdh60tjDE4de9pWDt2DAAwGHaxPkow7A+euW3bjlObyCShFIypUYxG6HZ6SDLNDYq4tjI6iFOcvZVK4u67v7X/vvvvP9jtdQDnIbo5jDUoywp1MFE9AFRVBaU4L3Y6mbTnXgDa+KLgA8fvELvkMuMpotzZY+bcHA/YnHx9Jic+CWg9kW18Mtfm8FRf2DTB20pD2yxl79mIjVjGTBQNygRnZxPAMmAX0Mk7qKNLs5QKSipeDzAN1kQ+kRJIVIKqKuEiQyyURLfbAULA8TV0X/3q73kLAFmXNVSiYKxBN8vR73XbWeymVRAApImGcx6Dfn/4S//uX7/ve7/7e+6ejDbuYBdtjsGi2ACSkuWkZVlH+bZor7vGbZ0i4g1BzGKZ5lOJ5tld2uxmPVtNz7njxKMJwQVIzUZmFK9jJRWctajLCjpJoaRu1u+ZvUF/FQCyPIOzPezctQNblpfxmX/8DK557vMAAAf2HzwMAHmng9HGCCQEsjQByGM6LdoZ1SYibFpOAWLlhzMOQhKsDfDkoQMhOI+s24GAwMb6OoTkN3j4yNE7vva1r39198t3fzeAODrC54FxHlmaoQ6srlFagkh0f/+P/9Ovfuvhe4584XNf+Phpp52KosogJDcCdJIgTVJMplM4Z2FMDUKKJNEw1iKNEUMqUVCej3/LwgfimKnA6hiPEB3AeXzFx2QAF5sNtq4BSFYFRXm0dQ6KFNI8Q1mVUFoh72QwxkFrzZFO1mF9tI66rJI3vfn7f3A4XDqTWW02dUMbiRVa4yt4lrVb66C1wtEjR3HPvfeOv3zjl754+hl7Hx2PxphMCrhgUZoS8AKdbgckPANyoZGlGSbTMXxw6HZ6KMtisZtY1KIWtahFLerpCniBAKkFnONNu3MBiRBIkxweDsYYiIogpYoMFiHNUljL81ZVWbEEV2sABKEkymnJj5OnkCRhrUdZFMg7HXR7HWxsbKCuDUhGpkYKFGUJYww76/L+HcJTm+na5MQO+gMsLy9jNB5jbW0N3V73wjPPPOvZANDr9nH2OWeh3+8hSZK46Y8ze4FjTYgo7oFZsioiwEGYsXZK8IbM+lnW6SweaIZrxKaNc4APDYPGjYNUJ+2sJW/OHaqqRFnX6GQ9pImGD5x1q4RE8A7WeZBUGC5lIAKMMQiBmw8ry1vhvMW0HGM02sDBg0dw5MhRPPzwQ3j4oUewc8dOZLnGY48dxAXnXuxP27v7yJ133L32nKuuEueddbb88o03jR95eN/0Gc+4RAyXlvRkOq1P2XvqfV/67Oe+cu89995ivX30tjvuWP/Qh/7npKynptftwdQ1pJLNqBuCjSxoNCKrCoO6rng2MU2QpinKkjMz806OaVmgKCaoyhLWW1jD4OmVr3rVi/JMoygrJIqdvAVJJGkKmfA5QDEc1vtofhNNi5q82X2P7btntL5xKE0SOGOh06SFVz7OZuokgXOOnz8CPRLMwHPuaYCIrLLFLLZGxI248zMTq5OStz5s9lY+eXDuP0/BDJz8F2jz11uDK5o5+wpBMduUn7TJEobnDO3KGACIPxdnxj1AspFBewQvoINE1ulAkkIxncCZCoIIGxsjHD56BFdfe9U1L/vOl7KqggR88NBKIxkkcfY5RGMjatc0RNMv5wO+84Uvfc5v/tZvvu+9//J9P10W5aFEszIg7+SwxqKsC9iY+StIQGlWeJAnEMnWoTmEGCHk52amMfO1btYldq/Y9CoaVs1ijGbNCCGjVLcxT/IGicyghEKWcub4dDoGAHnttdc+N08TVCWPf/QHQ1z6jMuwdmQda+sjTCYjJOkSnLcPpHmHm3jxvllWJWfvagUpJFxwUFpBkIB1dSu11prd6MeTDSipmOG1DlVZwXug18vR6XThQ8D+x/dN//xDf/k3r3j5d1+vlUxslIWHADZuAmcdyxDPkeChVXLKr/zyL//yj737x9cfuO/Br+w99TSMJ2MQCayvjTCZ8vMGxyZWIbDLuXMeJBTI83nDZoIsQQ4R1CoojrYS3Pg0dR2bL5KN+ryf2dtL2UbamcrwOeMcvJZ8HcboI2tcPOaKZ3mHOR7f9xie+awrrv+RH/6RVwOAQ0DwDqPJBJ1OjizJ2PFaUXsO+hBa1Y41FkLgsb1n7r13dMu6G21MkGYZjLUoY9TayBl0ez1okSHLUnZsJ5alG2ugk4Vp1aIWtahFLWpRT1vAKwSx5C12wAUoGrM0e8QAIVQr7RRSsKTUAiQVtu9awXQ0wmQyRbffjaYlno1/nIMJvgUfxhg4a5FnOXTCxlhVVUFrNgHJ84ylbATs3r0Lp+zeg6PHjkFGV+VjR49hWkzx6KMjEAR63e6Fz7zsWT9+3jnnnQ0AeZ6i281aSWNrtguBOVFqtKuJpjVgLWjwLrq9EggCo40xhBAYLnXi79KcJ1BoQS61QJmgZXRd9h5SzJxzms13iDFOWqVsWINmjo1n4OApMu38upzzMFUNTxLrow3U1mDn9u246867ceNXbsSho4dxfG0N/W4fz7v2eVjduh2f/uxnDj7/ec/f98hDjzx077fuv3dpy/Cxv//Yx47/37I8cv+DDx5XUpl+v4v19Q2HEGqVyPWDBw4eLKvK97pdFGUBIQRSnWJaFOj3uhj2l7C+vo7asNFWp5Oz4Zi1CMSRI6Y2QHSW7fd6KGsD6wK2rq6AELC8sgXGWDx88GGcdc5ZZ77pzW+6joEXHxuPgCRR0FpxZEwDWzxaGa6ILFxT3/jGrbf54L3zHh6BZc+KZfK9bh91VaE0FZw1bdasSiSsYUto513LGvrW+Gg28x3mpbDzcuXN5Osmpv5kmLWZO/2nZO1uRtPYxEzOyOW5j9soJd7kh3j9EsUsbSFmzZwoGU5SjbIqEWwASWJVhuLoFykTZjmFgiTB0VxCoNPptk7eztS47roXfWeWdQcNkGjQY9NQaGacGyl+gG+vHefYOOtH3vkjrz/42OEv/dIv//IfC8F5z9YZBBGBZ+CYLZ6llTEuR7dya2rfP8fUBDeTJTfy5lbL3rDBmJvXDdRGEzVuxEDM4w2xuSV47tnYaCQFYFpM8YzLnrHrXT/8w88GeB781lu+iaPHj+LCC87Hi1/yQlgbQCLgHz72D7d/9CMf+XRVFAjeQZJAXRs4x07HIs6zpppBpBceSqewtoILAiT5fiqVRgDP6/uYj6y0xGQyAYgwHA6xfecO/M2H/+ZjH/uHj37xZS/9rhcGF0AK8f7L512ep7jjzjtxyqmnYNDrY1KUeO61z73id377d/7NK77rFT9WFpO7lVJY3xhBKL4edGxGSClhrUNV1eh0u9y8ChbBS77+wcaEzsVGKYlodshrL1p39Ng8jCoFIgnSAsHxLC2RQJZ2kHcF+0oEjzRNISUbGKYZ+yFIpVCMC3jvd/+7f/dr7+52u9ud9UgSbs4OBn3o2KgV8X7MKpvQKng+97nP41t33VNMp8XNX/jMF26cTsbrWZ5DCMLqyhYEBIzWRqiNwXRSYDgYYmO8xoZZWrNCwrjZH5tFLWpRi1rUohb19AO81rG5T57n8M4jWA9nDRx4pjTLOzz3SDyHV9satakRPLGbqJCoqxLOGdS1Qd7pYGW1g+lkChEI/UEfo/EIkiS0kjh69BhWVlYRrEUxLbl77zyGgwF27twBnaR4/LHHsL6+hkF/gDRJcOTwERxbOw4CyVP27t67dXnL5a961au+4/rrv/OFKysrpw6XBsJZZnd8CHNZlowcPDADNk0cCZu88maIQswanm10+71Om93YML+hcYBtYXNLGkFSzHmMLrAyAiyWy85gtiABihGn3rHUFIHZJCUlpCQcOXIYWilMpwVWVlfx4P334fOfvwH79z8eLjjvQkrTDGedfQ5O2bsXx48dO3Ls2PoD997z0IN//eH/881bvvG1bxaT8qH9+x9//PjG2jEbN6IAoHSKbifDww9P2A01AGVVotPpoNfvsgurYOZHEINeYxxG4xGqum7nW4uiiKYyACTBC4csT1kyaQ0qU8eZYs4xzbIOAEBLjeGwh6uuuPLaPTt3nDEejyGlauOZWjY8UHSYpnbNheKD5n2AVBJVVdcf++jHbvbOIOl2kaQ9TMZjntu1Hsg4Tkb56LgcWSEpFIIkWGPaZof3rkWnTfNiPlaomemdl8zOvvntLzLO8RV8fbXZON+mGrA7F4NEczPibdyQbxQMM+fz2SyrR3COWz4iMq3Os6OsABKRtI0spRVAAs7Ydk1sbaGEAimOxHHeYWN9HbtOO+3c73vTm18Ivi1AChnn4/kKQxAzt3JB8bxhsEdEUCB4FyAk5alOtwMOMslBTkRGvRk/QMxvdTCFZRWBJMD5OHLBxkauiQ8iGa/wmRIjZg/NHcPZaELj5uwisCYAxtioGCfkWQaSEs4bUJxFbZzP62m1t5tke9eOjqAyiZtuvRmHD+xHUYzwnKuuwdJgC2xp8W9+5d/9/VduvOHLUkp2yNbRoTk2V0xwbAblPUvqvUCWZCAeYIX3HnVdQicJbF3De8cjJFH50s062NgYYTqdQAqJajrd/2d//F/+4mUv/c7rtJZUxzggEhTn1xkAHzpwGIOz+kgThQDg+c993ot++7d/671ve/vb393vD6ZJkoBI8qxwnDO2xsH6aLDlHeq6hnceXrC5k1IJvLPs8i94FtkaB2sNbDQ9lFq20UvB85y2cxbCA1Jp1PHrIcYg1VXZAmVTGzjv0VU5x7ClGR49+BC+7/VvevNLXnzdi4BmZISNqFRs0PjmPCDPxy/mbB87cgz33nOPUzp59JOf/NuPHDp44IHlLcsoywL9Qb9ds/6wD2/Zw2A02UBZlTzTbG1skLCR16IWtahFLWpRi3qaAt7GBRSRmQ2CAZrWGs46NvKxHjZY7ooH3oykeQplJAgBSZpx5946mNrCOwdjOLvXODZcss4iwEOnCazj+dksUdi6dSs2RhsgIow2Ruh0WGp64MDj2P/YPmSdDnr54Lzv+u6XXffa17/uxVde8awrl5eWdmmpxQyQzLJ1EWaxJCGaSrXN9/gevZjNzzKT5+PuV8AHggCgkrhp5+0Sb6jRPC7Fz6mVRPpZEkcLnqgBH3FzKznPg/GLFJDRfCkQITiLo+trePyxRzGdTDGeTLB//z7X6/WFlJLOPedsXHDBhXT06DFjnDs0qabfuv3222/9zD9+9uZ7Hrjnlsf3PfZgWU6rNNOwxiPPO0h0ikFvABcNjOqyhnUOvWEP9bSGEBKrqyuoygob66MICDlGhIFogmI6xmQyRZ5nkCJmLXuPLMvhjIFOE3b79Txj6W0jGeRZ3jRLMRz0cfjgERRlAakkrr326qsQgLvuvtufe+65Ikc2m6ltmxOERx55GKsrW5F38lkSUOw4PPTQQw8cOX78m1KmkEpGAAt4H5AkEpPpGMZaaK2QJimMNbDOwVkf5z25KaI0O8kG51v5Ok5wPt4EbOmfAXbj93kW+Z8BducfIiCen5i9lvg6AsIJTLBoHZqFEFBSw3kLUIjseICjGCEWCNa5aCymYWrL4wVR7eCcx9Q55HmOTtZDURWADyimU7zmhS98wYXnnntxM2Edjd0jAOfHlUrEcePAx1RICJIRaEa218N//otf+BbicbNNw80xuJVawjk2c5IywHuLEDgiRhHHxITg4eO4A1GA842Z2Fx0UcPqUpgLgGK5NQS/PgGCdyyrF0pG9bwHjOf86CyDEEBZ1VCpxsUXXXLJcMsWvb6+DhmAl17/Evyvv/qf+Mv/8Ze46MJLsG3rVhTBwsPfDMAMhksIPsBYiwSANXVkuhkAG1O3CgMigBTfWxQ4OqsueZZad3sM2ilgPNlgQBgUNo4dR5530O8O8cl//Ow/3nrrN+649NLLLpKCeEwisEeBCx4XXXQhNjY2MC0n6GRdGOegpcQPvu1tb7njtjtv+Z3/9B9/P0k0rLNIkhTFtGBgC56ddYZgCoMsy2BsxU1EIfhj79u56CbmLtFJy5Y7a5ntVRKQvlVRUIiNi+AglEZVFCjGE0glkKZZm80LEbC+vo5O3sWjhx/C9p07z/3AL3zgbQB4TIZYFdLkHQcSMasZMJ6PtRSc290fDPGSl36n+Mu/+Muvf/bzn/1SlqUIISDJE6ytrSFNUz5HgoOUEjpRKIopeoMeRusbQJBQpFD4GjpdSJr/f1FCqvSsc845fffOXReecfre884484wdzju5dnTdkYRzwt/7tVtv+cqtN91y5+j42mJwelGLWtSiFvVPA7ySBFSWoCpLji7ROs5SRQZTCEhF0IIAQZAihXEGtamQJgmSLENVlujmXTgXMJ6OobXEtm3bMZlMQFIgzTKoxHGsUZaDZ0O5S+5jNMpkPMZ0UkBIQq8/6O0984zTzj/v3Cu+6+Xf9bwXPPcF15577tlnzcMN59l1NjiLJE3nwGuUmNJsjg+B2LyKd+UMyFyTuRpNrOKDS5oHGqHdyM9jGDpBlTqLG4q0kQsgNQPU3ntUJbPhOlXwLmB0fAwpgaIscejQEdx7770w3vj7vnVPtXfvabrTHWCyUU7JJ+Wg35/effe9j+3ff/C+42vH7/nqTV/9xj333nvraLz2WF3VMQ9YotcboNfvwRqLqqpBnmf9dKpRlTWcs4h2RvDBwzlmmY01bJxjLUizQ3KiU3bmDhYiZlAaZ6C1RpZlKKsKztSo6goqTUCBj2GWZQyohMR0UmDPKbuxsTFCVVfI8hTDrf2dl11x2TNG4xF6vYHo9npxXWMebvyMQBBStkZSo/EIUijkWQ4A+PKXb7x7PB3vH24ZQoJQmaqdz6trA6kklFIwxkI0vZGAmC3N0l/vuaFDaHhBmuHHCLpbuXCYzfL+82dyZwZOs4bIUz9IA455sy42Mc7zqJcImxykm3nxZpPfGAh58lEqHA2DAiFLU9QVR6wIqSGkAAXAeQuVMBArqxLBCywtDdmYhzRe8pKXXg2AvGdpamMuJmLzRkg5e13R/Itn3ONa+wCpBB5//MD9t9122zcgWE4tAhCEgPfsxi2VgLMVS60VIRjBWbfko+O3j+cK2vVtwJOQIjLLs+tSxrlYZsJj5Fp0cA9etMoCKZlVtk0+NlHMAub1scbj+dc9/wqEAKWZad172ml44xu+H8++8moMh0MAwMMPPlLse/jRRwBg+/btOHb0GMqyhFKKo6EcM6UiHjsSLAGujYlzvAJCaQQX4J2HkgreekDw+zO1RTmtkOoMSZZisDxElnZw3333PvzxT/7jDZdeetlFUcPL6+Xj/Sz+88CDD+Gi8y+EkgJlWSHL0uRnP/Az//JjH/v7rz708IM3dzpdlNMSACHNMlR1hV6/h6qoUJQFiAi9Xh9FUUawyiMbVVmitgbkHDrdDme2lzUosvfwfA5A+Bhxp0BCwhsLpTRIcuPBVBbeAWVZQWkR33MNgoSJubevec2rX3PhBeefU9Ul4CXn9wqOtmK1DytvKHiomDUPALfdfjtKW2PfI/se+txnPv+xvXtPf/yhhx5EmiYtcPfewRtuhpZFhbyTxQbeENMxx+INlgaojlQ8j7yo/1dFRL1tO3dc+oNv/8HrPvyRv7n60mdccvG21W3b8zRRT/Irhz/y8Y984opnPuvPb77l618NIRxdrOKiFrWoRS3qKQGvtRZSK5bJycDGPoI3rN4HWOGRZQm8cajqGlmeQSuNuqxQk4MPBVxl0VsZQGtmBfJOjuB5M9dNUvQ6fXT6HRQTbsjWpoSpK6hE4dChg1g7voZONx9edvlll1/3/Ouue+7zn3fNOeefc/7ePadsF/Ngs3UA5S49SQER5YDNLB6bW82DlpmM0Uc6VhA2x0iEmYGPx8ztlQS1Dstz/5vTQ2LmxBzAUtqACGp9NJbxqOsa49EEK6sr8CA8su8R3HvXPSDFrHY5Lcxd3/rWdDweHd6xfcexB+55cAOgI0ePHXt43+OP3Xv3XXfed/DQgXsOHzm4X6o0shgBw6U+TGJQ1RZKMRg4cuQIpGRWJHjA1gbescOubQ1+KQJcg/XRRpSuJ7DWMDsoAakIrvIQQkGn7Bbb5Lo2jqRCSI4qiVnNSknoVKMua6ysrMAbwvGjx1HZGoP+AI888jDOOf+8y1aXV88dbYywY9t2blpIwez3JnYVWFlZ5TUFkGgNqRRiCg9uuumrXz1++LBZ2boVo/VxdByWUHmKyWgCYyx63S7HvQhEaS8/vvcMeNjl1cYM4HbSmgFmZFW9m80/Yvby/llMbasmOFkQ6LeHyk987ubcprnHFxRlu6Ft+FhrGfxFV1yWQYtoZBQNoaScnd8xd9Q7D2+Bbdu2oa4t6tqBiLC+vo5du3dsf+F1z7s8vqFZwwdAUVZQUvLMZ2gAML/CVlIsCFVRIstyfPjDf3PzwcMH78uzjGfaKcAFzgt2jgFncMyueRtagB/TheDjPYqak4JEO9/bAL1mbhMUmOElEZ3n+fPgmB0WMfPW2hLecf62gOD50jh77IOHThL0B/0tz3zm5c9cX99AmmkET4AE+kt9XPnsKyAFu79XVVFaY8p+t48jhw5jY30EkgKTyYQbR2kG64mN4aSK8XAGWifQgg2inHfwjlUvSmsE52Gsg1DsjN8fLMN7j6IsUFUV0iTFyuoqvnrjjZ/zPrwVRAk1ecXegzxLVQaDAfRBjX379mHPnj0AgPF4ipXV1bN+9md/9ife/ZM/8SNaq7HUCh7M0vrgUZc1qqoCBaCcljC1hdQSKtGoypKjwUggzzSMdagrbrQBgFI6qoS4AWNtNDLTYCAPAikJeA/r2YldgGfMnQ9IpMSWLSsgCKytHcfK6tbz3vGOd74GACbTEr28O7uvR8l/43zvQgA5VivpVEMnCT7xmX889IXPfvG/f/GLn/9Yr9tzdWXhEWBqj2F/CO8dimoKnabYsmUZ3nlMiikOHTzMIwo+YGNtA1oqjmla1D+rtq2sXvT93//G7/qjP/y9a65+7vMvvfCCC09pvmetQ1XWSLNk/s8tAGBjbWPry1/80jfdeuPNlz//Rdd97b/96Z9+/ec+8HP/55HHH3twsaqLWtSiFrWokwJepZjdTdMUWZajKAv4ANi6Zolz3BCbCBjKaYk0zdHp9KIRVYVOt4fJdAKShMFwiBAcinKKXq+HsijgUwuzXsP7AFNVWFtbw+q2AfrLg1Oec81zrnzWpZdfc/HFF1571dVXXzDo9bvzL5Dl1gRq0pPAH0/LAloqCKE3QQhrLIz3yPIUtWFX4EAs0dZKok2YmVeHkmgdb5s4lfYPbJhtsts4GpyQQBNmDrnWe4zHY5i6ZjdSD1gH3PfgA/jUZz+DRx/dh/F4EgSFtU63Ww4Hw8Ias6/bze944IH777j3nnsfPHL40KMPPfLQQ0ePHhk1T5FlXfS6fZAQqMsSUsvWsVQnGs5YeO+QZBnK6RTWjqEVg0TnDDM8tYFzzJIkSiNNNbzn91dXJspZA5IswbSawluPXn+AqioQgkei0wgGgTzLYWwNUxn0en2EQNGEbAKtJabTAkJIKCfR7w4wHPYhE4nvefUrrx4Mh1vW1jawa8sQk6JAKhIGsrEh0ay99x6dTgYASJMsStaBw4ePjb75zW/eoJIkuj8b2OAA+Oh2m0J4E9nJwBJbIaC1RF3X8TgKKMHzgw4BSZoieI+6NlHWTG18yWwg9J+Ebk8OiP85UuY4x9xq8+fA76aAorgercEWRXOswECQI2l4HQkUM5R928xhGa1s2TDrLMoqQJICZEBtDKrKIE1zyEQCCNiza9eF3rrTAUA2MUgigtA4q9w0poTgV+u8g7cBKmHzozTLIITAP/7jJ250tg5JrwdTG5ZjBx8dcPl98SxpI8sNsSUV4mw9tYZUzVrM5p4jKx9BbmP4xBqCOOcv47x44CaY9Y7X2DNDCEFwroa1FlmeQQqN2lg86/LLTz33/HPO/MoNX8azr7wSvX4PR48cw/HRBk4/5TQYY6ABDIYDvWV1y9A6g7KukHXYDEkQYJ2HcRbOctwPm7exq7ggCWcdfLDAnKmWMXV73G1dQ2mB2lSwniXXVVnjSHkQBIkvfO4LX/zyl7/y9Wuuueo5LuYXk5Rto4OIsPfUvThwcD/uu+9e7N17OhACrPX4/re++fU3ff2mb/zu7/7Ob55++pmYFiXqskI372I8mbDbt3XRFZ2N9yaTCUIAskxDCDb/k41Zlea8XRccrDe85vFcUTrhmVvHa19NawhJ0BHcQzPoVVKjk+dw3iNPE1R1ibe//h3f+4yLLrrUWo9erw8tBatrpGjHS0K8PhSxsZbSzA5/9KMf83d9684v3XXH7f97PFk/Oi3GWFragul40ioWvA9QOuV5ZWMw2ZhwU08nKMsJN2GIVQE2gvpFfZtbGxFt37Xz4h/8wbe+6YYbv/zas846+3RfO4hEzhll8nU5Go9Qmxz9fme2H/Ae/+n3fj9cfdWz6aff/4FzhZDn3nPXXa/+0R//0St27Nz5gQP799+/WOVFLWpRi1rUEwAviciYSglrbJzpS6E7XQ7u8Q7T6YSlzVIxCCaOmbDWcEddBBTFlJlfpZBlGt4LmJIBx/59B+BDwOq27YOVLauXvPJ7X3n5a1//ysvPOefcy7cubz8rT3NxIjho//jFuUrfON3GTb2ZMyUhEjHiwrdyxaKsoJREkuq4+RZtqovfBGpn7FsTXySI4NGwRLPM1fgnF9Y5CIrusM4B0SlXCsKxIxsYj0Z4bN+j2H/wcdx//0M4evg4pFZ2MOgdPXjg4NqO7Tv2P/LII7fddONN37LOPnzw0IGHvLePPLrvsY2imAIAOp0uVldXsbGxAfaZRjTnISilYY2B8yyPtK5q82kzEuh1OijKgo1jlMTUVtFoSiHRCkVVwFoLB4pyb95sSNJIMominCDLc5AmVFWBOs4XOm8xGtVQSqKoSiB4ZGmOqq6AQKjrCs5ZaKWQKI3hli0YjccAHMpiCqmketWrXnnVsD+ElgkAIM9SPDFqh7FLt9NpP26bDgTcf999j95+2zfvTpSGdxyHQ4pgKzbREcQSTorRU42JE0UjHO8dvHWAjPOxPnBjpJknpNDGDT3BVfmfMsP7/61ha9tRCSduFueujzkH6TkX6dDE1foAIWmO/QwxJzpKt3kQFEqpOGPJBl51XUFqAescpkXJ11icja/qEs+6/LJL9+zZnTdzws1ranJ2A2bS7Wb96rrG8WPHsXV1K3Si2bgIwMb62jcAwDoL7z2yLs9qTkYTQDCA9jEz28dHZizLc/ftrP58o6Sd9W5yeqPpWZDxsHj2LApscuURAO/hvI33tNCCZ60U6sogzTI2MSKBQ4eO4oy9p5+rhMiXlpbR6Xbb+1S3k0W5PKsS6rrSo42NFecddKJR1wZ1ZTFcGmI6nWAyLiAIGA6XIaRAWZYcoVVxswiBIIWCyARMVTPwSxSk1CwNDx5aSZiCFRfOWB4/yRMcPLD/kQ/91Yc+dc01Vz1nppJp7mVsepamCXbu3InHH38cPnhkeYbKWCiI5Kfe969++MMf/vCnHnnkkVv3nLIHE+dnOWxEyPIUOkswHY9hnYUUCkqrNkqNSEAKQl1Zfp2agbC33AgR8a7mnANIQKYKMjDjnndzBBewUa6jk3bQ6/VRT2s4HzCZTlCXNYSUq2948+teCnCzTmuJsiqQ5BoCs5GENhIrNgaNqfAHH/xDGFsdL0fll8fro28tDYcwNsA5HgUZDpY4Ik8BzjpIkthY3+AVNIDONFSSgBSPhghJILtwaf52tby69ZJ3v+dfvuGH3/nON5533rmnAkAxmcIYh77qRYO7OFqkBZaXl9jcLP4j4kjS933f99HK1hVopTGdTvHN229P3/NT7339YHlwF4B/vVjpRS1qUYta1BMAb/CNYyY7PyU6ZdmcM1jesgQC4dix41gaDiGIUJQViqqEjsCB4gTk0lIfqcqwMR5jOh2hmEwBQJ1z9jmnXXHFFZc9/wXPu/r5173g2aecsvfi3Tu39098Id6HNj4inLj7F4BoslADUNUGWZIi0RpN+oiMbqxSJjxG62aZpA0rMsvcDK0ME2EGdilu5lplbTR7Ys+hGJUCAe/ZyZUkRTflCR649wEEBNxz7wP285/7oh30u0mSJiLv5MeH/e6ja/8Pe+8dp9lZl41fdzvlKdN2draXbHqFFFJJIPReg5QAglIFlaYC0rFQFAQVAVEECSrwCkaQhABBSSCQnmyy2U2yvU6fp51yt98f3/ucmU1B3ven7+dF5vYju9mdnec85znnzH19r7bQu2f3rl0333H77Xce2L///snpqX0Ay4zW8N5BRdTHOTQyDKMN4Bi0NojjGFobFEWGKI4AMBTaIFIq+HANpCTfauXD9c6BeY6yKIEyyEo9fbZGF4BjARiF9NYAConJpaqNfq8HwQUxq46AoUpU8POSxLXdHka/14cBhRvlWY7CaAwPDUEqiTzPsWLFGHrdHnbevxvjE2PHjrZHTwEAJSupGq+B3VJ/9EOJfytmav/+AzvmF+aPrBgfh7MOeZYj61MgVqQEHaMl2Wpe6lCVRZ+jEJykvow84NU5sMYGkLRI4XPOIZiAdXYRYD4Q/PqHAcPsvwD4LkG/1XEe5SWuK5FYUPNWx+7hOKXd8tCB6kHS+ip4zhoHLkkCnBUDJEkKJQXKwqM/6BEo4Qm4VHTOyhJxFOOJj3/CmSQT50Eavgh4idCzi2Ff4TwmcYIVK8aDt4D+7J67tx/Zed+ug7FqQAiJPCvANQVmgXk46yG5gHaGZMeVXSEAcGtdfV7qh4B/4DkPsDtI2IXgMF4vJnE7R8BLUDdw1evrQ3yagCIAGSkAwT/sDIbGWqcODQ3hwgvPR9X5PDY2il279uCuw9tx6qknAQCGh4fiiy684JhvfONKREkEyQWSVox+rwtrLeI4grWUziwZ3f9Fngewi+DpBbgP16h1cKUGYxTGplSEZrOFLMtgysAwcoFerw8wjjtvv/V7+/bsftWGTZtXVYFu9Hz1IYyJpMobN2wEQOnrMkirN2xcd9wff/TDb3vZ5S9/7SDP+2WRoSzpXEgRA96h0+0CnpKWQdZiFJrSmKWQGGS9wLb60FUbk+c3z6j6SkhoXcJzC2bpWIzXMFqDgaPZaBEIzQroUoNzjlXj4+jrPi598tMeffIJJ51z7/07se3uuzAxNo4TTz4BcTN+0Mxoabr6fffuxP337nXnnHXmjq/90/+6fm6+UzaaCT074hiwgDMGxmlIxlHkAyQpdR0vzC8gThmcN5QkziVcacGZPNr2sLyOWlEcr3/5S1/2iu9f893LzzzzEScB1OduS4MkSZA26Rnm6p8D9Kyme3bpk5Cm1Mds2UR7Bu+Qpikue94LICTHcHPkUsbYn3vvZ5fP+vJaXstreS2vowBvlMRIRQNFlkMpBiUE8oL4lDwvAU99kYPBAGmaQgiBViMNfboJGs0GFhYWMDU5VW1+4lMfeepJl176uEsuOPv8J1386EsetWbt6lUPxWAVJclolZTBd+fBvECdOIUlIUHgNSBRQsLB1hvXGjBx2ly50Bdcg1W2KEIOUUT1HhnsgaCKGGBe1b8E2SYXHL1+H1YTQ+O9x51b7wRnwh7af9Dt3btHz83PT+7fe+DwyaecXBRlkc9Mzx0+tGv3bbfccuNNe3bvuefwkUPTMlIQTCBOY+hSI1VRkK9yOE8bfWcdJd9qwFpNFUIApREbC+c0HBgiRcE+zltkeU4b5iKHsx5RksCUJYzTgd1mMKUO0mPySxpDXchKygCyffB+knydcyAvM/J1egsH8oFqa9FsJCiLAp4DSRRh0B8gbSSAZpAqglQR0jhGo5EgGxTQ2uD0M04/c2JiYvWDmMmlXms8vHqYhe7Mn9740+sAYl+MMWEQ4KFNCWsctLckKeccUkkYYyFAwWWV9JCkuLx+UfJruyCFrRPPAtP/kBh0yeW5GHpWh6Y9TCfvEh38g9/pQ7HHrAIoHswefbGyejhDQUAs9Mhat6RT2FvkeQYloxBeRey35BwyIh+oLjW8cyhKjWarjTIrwAUjwOEZ4jgFnMfI0MjI6MjYaQDV9yglj6q5BSjQiQvaqFoHlGWGOEkQxxGpCix5M0tTzjvuu8Mjw5BKoMhyFFlRhytJKRHHKXSvCxZ6oa22MN7UclUG1NVf1TmrVBos0JEOLozkbPD+UpgV44xAtPXwjAPMUSASC2DeIwA2hkG/gPcORmtMrFmTPubxTzj78MwRrF6xCt6QxQIARodHsGpiApwz9HoZ1qxdg2c/55kbv/lv/8bSRuLBKAyu1+tRJY9kwatoUaA4SsZNvdYEIKGBWMVgwkBwBeeorzYveugOekiiGJJzZFkGzxRUHGFkeBh33nbnrf/xg+tuu/xXNz+5et5ZR+FNdYVbqBw6eOQwDuzZi3POORs2iFte+qIXv+A711xz/d//7ef/asuWY5HlOZ1T42CcQ6PRgjPEXvfKLiXzS0XBZ9aAMQGqbHeh15lS3H3oYSafrgS8gxQCztP9bI0BEwJK0vCtKHK028OIpESnswAWifZb3vQ7Lx0fW5F2ul2cdOKJ8M5hZGwMFBjOjgpwq+5vALh76zacdvopU9f/5IZ/3X/wwK3toRYGeR+pamDQ79Gz10dYtXoV5ubmyNOr6bxHKgK8w2DQB+cC2pQAY4jiGEwvA94HLiFl44UvevFz/vXKf33deec+6tEjo6PMa6oqy7IBVBTBc1//jK66mQHUtWTWOZRFgThOgjIlCK9cUKtwYoMBYM3aDceeesppmwEsA97ltbyW1/JaXkcD3qHhITjj0Ov2iG1jBh5Ao9Gog6eSNEVZFMiLHFwIREKCS6Db7WBqahLDw6NDlz7ucY+88IILH/OEJz7u0jPPOuvM4dbwSPUi8/MdeA+Mjg7B2ZATzBmk4DVgFUzA80p+6sOGtQJCQYIcwnWYZIub/woULAEIzAPwrE7+9VVVEao/C/JoPLhtxoVdc9Wt66kvFP1BhoP7D6KRNmCdxZ59ewfbtt1zeHpyeu/czPzeffv33L9/7/7t+/YfOHDPvXf35+Y7/e3bth+xzi4ggIyRkVHq09QangEGOkjJHWxpwCQx3K1WG/1BH94S0DeW3keeF4F5JCDc15p8jYKBMREShSkpVwgBHwtKGQVtMmAdVSUBocPUw5Ya3jhEiYIFSXshGJ1/xhDFlFILQ2m/1lJnqTEaWlOljXEaTDCqMwJDp7OARtpANsgx3+1iy7Fb0O3P47zzLriEgWH33j3YtGHTg1W77GdYZcOG/eCBw91/u/rbP262hpA2UvR6A0RxhCROML+wACUldGmQpim00cTuhevDGFNLeIsir6W6LOBea7GoAkDVcbvoeXxInMoWQ6nwgHCVo0Dvg9he9vDv8wH/XYVQVVZixpYyvazugq52ihyCpNoekEoBxsGYEh4egpGkmIOh1JQczhiHLiktveRAs91CWWpYD0qmVTGmp6exYfO6LavXrNmQZzkcQOFUDxhSCCnrc0VWznAeBQuduPR33U6n351fKBa6HSSNFIJzWDA0Gi2UZY5Ca+jSwDsLDkkBeo4qzuqAunB/V+nsHlS5dNR9XQN/R6x/GAp45+E5sUrC+Xoz7byHNVS/E6X0DPQeUDyCdQaxUhvPOP3001etoBmer4djQLPVoj5v7yEFR7/Xw2233TakdeGdb6Lf7YHzPuIoRq/fB2OgrtlwHzsX7BShr9lbh0hK8t7WShySWFtrIBkLadwMxhq0WkOhbxaIpMTk5JH52++47duX46VP5oz8j2BLmTTUFUIjw8NYaDWwe9dubNi0GdoYCCmjD77vfb99/7333nHvPTuuHxsdw/TsDGA9+lmGVatXAdZhcnKSuoyVgLcu+HGBOIpJni3Ir1sUBT2Lg3dX2xJSCHCmUBZl/XVgITzRe0RRhGZzqGaw5zsLePJTnnrpxRdd/AwA2LJpc32r2CWKg7p3PXSKA8C3/u076PR7uPP2rTd+5tN/9b+Gh0eyVtoAhIdSEi7Ilx08up0u+v0BWs02yqLAYNAjcA5gqDUEB6C30KGgQ0dBa8urvufE6MqV53/iL/7ytW983Wuf3+v2G3mWQxcaKlI4ePAIjC2xceOG4Ndf+vO+6hCn/AQaTvFakVXZJFx4/jnPQzo/cOnjH7P+vHPOOw/ALcufwvJaXstreS2vowDvwtwcypJ8md57yEiAGQ8pBEpDiaHDw0PodnuAIy/W9NQUvPc4ZssxJ77gVy571nOe+7ynnHPW2Y9SUtVSZWdpgyYEh9ZFzc45uJCUSqAsKwpYa5HGaWDZAkhdWuHij3ZSsgDq/AP1pEtSiAMUqP/M1TLmUH3jHawhSTaXEtYQ6yPChrFmHTnDwQOHMd/p2Jnp6cOHDx6656Zbbt66deud91lj7jt46ODOfn8weeTQkW6SJtY5g7vvuRMTK9dgqD2E+flZjIyMkvyP9nLgnKMsS7SH2xj0+uBgELFEaSgwqdvpUvBNFFEwWFmGWiUf6lhC5YZ3IXCLgwUZKKq+TWNgnUUcxRCcY9DP4JmDYPTaUimqRjGWjicvQzWPgKjSbq1HnEQoizJ0HTMoJWljyQTSOIKMJKQSGPT6sNZiYtUEms0Gsn6O4eFheMYwOz2D+dmFlRddcOF59EmJRWDIjvr4Hh7whr+4f+fOnbv37N7GwFDkBaTgKPIyyNRRJ9tKHiOKFs+DtzZIVuk8sqVhR0EJUPlb6+Ajthi+5B+qh/dnkToPTDZ7kMT5gclpSwB0dW27B24kcbR/NzAjlWyTiF6LKIrAGQFaH6pvmCD1htEapbGIkjhUZlkIwcMgCsizDBx0bbRazTrcanruMB79mPOPO+nkk1ZUzMtD4fla4hzuuzRJ6r+XQWoe/n1PO1M4b6G1hpQCTHhoUwSJuUZhDFioUSrK4igvvguePiECwLVVuVglSabBmhISTHCUugxOeE5dr7wK+qL3whmHlALG0WukaQyAY1DkaLWbGB0ZwcF9XWzYtGHzirEVEwyADR+QcyTFds6AeQ5IDsY9Yhnj7HPOg3WOGWv80FAb/d4AxpjQD+7Jf844tC4hA3i1ISAwiiJi0gVt/K0jtY3WBdXtWAMX5M4eHkmSYNDPSLYdvsfffO6vv/XCl/zKr5999rmnW+/AmAggsEqmp27eRpJiw8bN2LF9ByZW52g2mxgUJTZt2Hji+97z3vc99clPf6PVZnvSSBBHDQipMD83CyUiNFtNDAL7K2IFZy2844B3aDSbaDRSdBZ60M4hjhswVoNLjlhGyPO8/lnQbrcwGGSQUiAvczBOvutGmmJ2dgad7gIAxK97w+tfwRliG9h9zoCyLGGdrWvLFq9Buh6nDk3hx/9xA57yjCcP7rp769WA22GtxfTcHKQCBhmxto2kgX5/gOnZPhppA4JzaKthnUcSEcuYFUUYpHCAA8aUNExYXmg3h059y1vf9rLXvP41LxxuNjf/y9e/jrMe9ShMjK/EkcnD6HUHSJspVq9dFZ4Xom5ZqIZL1c9wshtIKEGp737JM5AzgVJTcJsUPCh3OJ713Gde2Eqan+3lfbv8aSyv5bW8ltfyqgGvNRbD7SEUmkJqYpZAKoaiLJBlOdqyhaLIobXGSHsIc91ZnP6IM058wa+88PJXvuJXn79uzdpTFkGuh/WWejarxFYA42PjQRpmYb2h8Ct4cMeRRNESJraqOHkwujgKLzCqHqr9tljMU6l+YFasXNUHyquOVU8hOMZaZFkGpWKkUtZdrc57dOa7GPT6mJ2Ztdrqvf/6r9/66S0333rjIOvdfujQkfsGWfdIr9/LB73MT6xZiUHWh/MaIyPjABMocg1jNTp9jX6eQ/Z7NSvXzwaUSuo0Yq2gVATtS6qGMgbeUTqukhzOajBBPcje+cDGBYlr2JhXabRVDY0QEmD0/sA81buUms5BzbzRcMNoA+cpodgYFtg0wNsqCddRMJkAmkND6Pd6sIENy7MM7aEhxLFCvz8Agkx20O/T5nWoRYFHnGPy8CFsXLvulNNPPfW4LCuwZmLVUQDSe3/U5vRnrZ3377yr31mYi6K05uilkCi1CUwOyZLzLAOT1JvqLW2olIzAwFAUZQ0sGXztf3Vs8do5qn6IPYwhdylm9UtSlB9YXfSQ/5wd/S3qC3cR3LoHYmr/4NeuritWawA9jLZgjFKUOedUycI5HFxITuawltQUUkryqDqgLAtIESFNYvT6PfT7AmvXrsXBg4cAAGc98sxHAUBZashI1ffV0kOqnQIPGGDUI6hQdL13374DDGygVIwojoldCyFwxpgw2KEKKRo8Acy5+joh1t7Buuq6offCOCkNqrNrjAMLYKRKD/YQ4bqztXy9kvh7xsG8Rz7IwaUADwMVLgSYFFi9es0W7xEXxiKSHOBkQSjKElEUEWjWGnGc4K6td+PbV109Za2T3lqdGUvJ9UVeDxmMMYiTmO7H0DltranvD+89jDEAGIUjLQHKpfNQSgV1gsPCwgKssUhSskCMjq7A7NzMff/yrSv/+eyzzz1dCVX71qtBCWeLwWOtVgtnnX0WOr0uet0+ojiBthZPfMITnvDBD77vbR/56Id+p9FI5jvdPuI4gS41etkAjTRFI23AGI1+dwAmUNdgeUOgxQOIkhhJGqHbzZEN+jRkCTLWOEmgjUZRFmA8QRwlAGMo8hKTU1NI0wR5WeIJT3rCs5/59Kc/vrqDeHi+SyUQMfVwczJ4Djz5qU/Cv//wP378xS996crh4VFEcQxelAAsjLOIVIw8L8L5lRBSQGuLWFH3fJYN4Gw1FGOh05sSw51bDq26+HGPe+q11/7gnavXTTx6cnISul/gvHPPx1y3gx337sDpp5+OTSvGyQcuZf3U8J4G5JX0nC2S5fktt9x+6Iffu1Y+/klPHD/tEaemlQ9da41BkaOtWvDehxBLiemZae0FlqcPy2t5La/ltbyOBrxRnCBttuGzDB4eeV6AAzDeYu36tTC6xPzcHJrtNg4c2o/nv+CyE7/2la9+AsCT5xcWsPWuu7Fx3QZK9eWAVJT4S9PaRfkhD/23iovA8AQmplKgeb8kdOfBzJdnde3nInjz7OgvP0oS62vXrg+vXRYlykIjihWEFBgeGq6/uiwLv+P++2b27dl7ZGZydv+e3TvvuufeHXfs27vvngMHDt134OCBmSzrY+XKVRgfH4cPKaeDXg+9Xh9pM0Z/kKHRbCJpROh1u5AqQpIm6PS6gLdQKiGJFgBjNaZnZ6CkIp9onsFbi7TZJpaZg9giT87DygtpgnzLewcODu8pnIsLkhM6S7JPISWYQ133IaSAs+TTVZLAinEGXHAIyVFqF0Cbo/qY4LMjKSVJ3jkXaA01UAwG0KYEkwwLnQV475GmTeiihLdAv5eh1+2h3R5Gd24B0zOT+O3ffONjxidWDhlnwdzR4JCxn7/1566777pTCoWhoTYGgwEajRRGaxSGkqSdtQR+ogjOuRAuQ8FTXAi6JowLgIpwJg9wrAKQddVO5e+tan8egph90ETGP8SXPHB+4x+8Ia8obo9FsM2WaqSDP7WytjPGICQxYMSoVZ24HN4R2+kZD8MkCkFynmG4NYxc58izHFKQjNNyAc45BaRZg9mFOTSbTaxeuxa93gBHjkxixYrRxrOf+6xz88EAs7Pzfs26tWxRSfHA9/Lg//aVSiOcp6u++c3dg8HAj69cCW0N+roful6pMzVJE5iSEn5d8CiDcVh4QIRBhjHwcIuefM/gbRVC54PVgYAXOAv+zCDkDf29kVIAByV3Ww8Whh3Uc8shuEBZahw+fASRinHJoy8+K5YKsRQh6IxBcIFGkgIc1DXOqHN2z56d9qc33tCbmFit8kFfe+/R6S6EqjC6V7UxyOZzxEkEwYmJJiabpOZSUVgWZ6AO3aBQccE76i15HMEZPBNIkiiA6ARxFGNiYi3++Z+vvPJFL3jJS045+ZTjETrMKxe0x+I16xkNMPK8RLPRII+xsygKi3e88x2/euttt2796le/+olN6zdiUPTRHGpA5gLaWHQ6C0ijiOrSjEaapDBGo7QavX6PBqAgJtU5ApEyjsA4R5ZnsI5SktMAnIuC/NRp2oBQCo1GApWq4d/+rd98mWB8yFgHwUlO7EHDwMVrbXHYCTAszM2jMDkuvPi8/p/+2Ue+MHX40N6JiVUo8wKCcWjnMdIagRACc/kChBSwLlTaOYdSl2g2GzBaIzckvXaeNAYA9Vc7+8uLsRhj4oWXv/gVX/j8372jzIpj77/vPpx8womwFpicnQNnDI+5+JIAcumJYa1BqUukSQrOPNiSz+/g4SM7rv/RDVf+6CfXf/PK//WNHTvvv/f8L6//8kdOe8SpxzlG6o0okpCqBcY4ytAfDwD/8e//MdXv95enD8treS2v5bW8jga8jHHMzc5BSIEkjpHlOWIVI5EKpizQ7XZRBAkXABw5NH3eF//uSxecdtop6A8GfmhoiAlBlRQ+7MoZaY7qPj2/ZBNiDXlKyatVl68SPOWoTZ1LyK4lia9B6Oz5EgzhjyLHWNhcV76tJblU6HcGsMZAMKDX60OXVh86cGj/rTfddPf2Hdt/tGf/7lvv2b5979T0zOGFzuzMirEV6Mx2MbF6AuvWrsMgG0BwqqgY9AeQSqLb6YSwFQ6tgG6XNnRCSiRxDG00mo0meShD7YaxtpaSEuPCAzAj+TcXHEZrCBGHkChdSy5daSCFgLe0ERZCwFgLZgm9CanAg2TR10Ffnmp4SGUI66vAL0BwgX6vX7NGzlE9D2cSzWYTeZahtBreWMRxjKzfBxjQbLVhCoPh9gj6/R6sNtBaY9PmYyC4RJ5n1Ofb62DlxHjr0ic+7jEAkGc50jR9iG7bh4e8FK4lUJaluemmn97RbDXRbDaQFwWsdiFkK/SuguSpgnFwwVAYA6kUOPMoy4Ik4IyDQcB7eq9au/o680s2zdWvVUURr2TOSxldv+gtWwxGYw8LiCs1w8MlOLOlU5ujbgIa+BADQhv9ihWpwlsIqwXmiZGSgfbhNHCSXGKQ0XXbbDQBRuFT5NV3GOgCYyvGYDUNTcq8wMz0NACDkZHRdRs2bjw5aTQwJiQD+88+tYdCv76eSp148ql7rfsHCjICJ6BuCfR4Y6E9KOhIyLpf2zoHBkvv29G5ItBPqco2DDuqIVuVss7Cs8h6CxEkkqXRdfUPBwOXApAeuqRgLQiqMmpGKclYswHOfdS5K5/ylKeclsYxef0FdfiCA3Oz8xj0BojTCEkjxuzcHJ7wpKeId8x3Rj/5yT8XWdbH/n0H4AwghYQuSLrNOUOj0QDnDEVRQHCBVtqEsQaF1uFeDNJ6waGUhDYGVpewDIhUjEQ0oE0BwEGHAY/gAt1eB63mEO66/c5br/zGN75+ysmn/C7j4qggNlYpX+qMA2Dl2FidXG5LW9mu1R+87w/eun3rtq2HJg98T6UpjDdI0hixAwaDPgbZAEpFdb+u9WG4Zcl6IaQA4wKmpFAq5yysNogVBV1B8PBsdGgPtenZ1O+i0Wpi+sgUzrvgvMc84ylPuxgABBjyosTcwjyG2+3FCrMlfvtudwFHDhzBd77/XRy75Rhc+bV/+c5V377qWxMrV8MZCl0rSw1jqLO7zDX1t5eaBiqhD1qFui3GBQX4OQtnsERZQQOaX8Y1OrLi5I985KNveNaznvHi/ft2jbWaYzjzjEfin7/+NTRaQ3j8E5+EFaMjNGxd8tBzqKrGGBgX0F53b7z5xhu/+Pkrvv69a675l3t37Nj3guc9Gx//8EfwxCc//sDjHnfpWPX55oVGJEWw5DjEUkGFOOdLH3epXt7WLa/ltbyW1/J6MMOrIlhB9TZFXiCJg7fPO3Q7PeQ5dTzmeY44SbYcOnjwSXPzC0PHbNmCRrPBoiha3JcvJcGWMLPV3j3XBboLXcRRjKF2+6geXM+q2gHqBfZLTJ0PUHseVS9USZYdyHNKYIZBPGAnPj15BIpJHJ48ov/yr752/fTszPemJ2fuAtje22+/Zc/c3Nz0QqeDFSvGQ32LQp7nkLFAt9cjgOE9tLMYZH0YZ5EgRtpoAAzkkbXUW0xSNyDLcuTlAGnaADx5IRmjyg7LyIeo4giMMZR5DhEqQUQkIRCSTn0I2eKC2DjjKOk0bLYqeTNC4Jf3xHiRDLL6LHwtv6tkkVVCs/eOjplxWEeAwBoLxqgiRaoI0lqSe8KBMYkkTeA9MOgPkM/maLfasNoEuXAOFUnEjRjdhQ5GxkYx2h4+Lk1aJwGUNivqwKF6ZAH/APq0DhGzDt1Oz7fbLabLcr/3brvgEjPTMxBSoiwLOHikcQrnHf23JamnsSZ4kUnGKYSovbrEHC6C1MVOWV/7OyuP9CJYxZJEZwK7tZS40h979mDWt7oBQj/uf7p+Bou8lGl2SwBd5U0m2S4xTiJch8zT/cyYhbWuBs0cHErRdR7FMbigMCvHqB/zyOFJjIwNY3ZuCq2h1ilRHK0EABXqwNj/RjAtQ3jvnKHb7WZ33HH7vYpH0FqDK4lYKRRFEbx4gTHzhnzJztWf4aJyIwQwObJRVGKReqBQwTnGjhpAMBJM1MdurA6fCYNUMtgwqPYojhKsGF+BQwcOYWh4CFkxGNt5386JE084AdYYkjyHALd7tm3DuvXrMTa+AmVZgPMIkZI4dOBQunv3bjM80g73JK+tB9oY+jyEQ5nrcKxAUZahAtzRgMo6gAFpktbJ1FKS/NuFyixrba36oBoqQJcaLtVYNTHhv/JPX7viaU95xhPOOPOMs4ylKiZgSRDaks+qKDVVvqECeyTZPuGUEzZ86tOf+r3nPe+y+6xxe8A4Ot1+qEiiAR/ngurQPHmsSU1BrxBHDYADeZ7Rs0VKJEmCIi8hhQSHh3cWSsVQlb9XSMRxDM9d8tLLL38eGBv2np6dc7PzSJsJ4jReVEaEDzbL+lhYWMDM7AxGV4xgzep1ez72sT+7wlkza61BZ6EDpRSEkmg0mxj0+6QACZJyLgSUiiCVQpYNkA0GsJaGkpwF5c2SmjD7S8bwxlEcPfoxlz79O9+95vfOPuvM87bdtQ1jo6swPDKMrdvuQpYP8NSnPSOAXfp54owjdQY8lIighMK2e7bd+Y9f+cq/fueaa67Zvn3HjbOTk/0Hvtapp558/KpVq8eqekApSLOc5wWkVHXaOBiwa9fuzvK2bnktr+W1vJbXgwDvIM/ABdVFxAHsWmswGAygdYmxiYnWxRdfdOZIc+TSxzz24qdf9sIXnt2upukIMuOwB+dLwqJqhWf4HwcPJRRWjq8I/5YKJGoW9qgqTU69t3WnxJJwoTrMqtKPEptbAUC+ZOdWbcoHgz527dkNb/z+G37843/41lXfumLfvr13WON9qzWETncBSRxj5cQESeScR7PVCAEzGtIYRFGEotQEEhmBh0HeQ5okUEKh2WhAMIHeoA+jST5rHW2mi5zSrZ3zEBL0+9KBC2IVdVECzkMoYlgFC7VLNoBMziE4oI2hDRcE1Q0JFpJXKXWZCVn3lTpvA5tJ50IIAofWWnAu4eHgHFvsTOXUUQtP/a1RIpHlBYQw4Jz6N72nY88zCqhJGymyPCegrCSk8yiKEsYYtNvUK3pg/xE87TVPe8Spp568VmtXS95DMskiq/kwfCEXHEmSMKkErvzXq27fef/Og8ZoeMaQpAkW8pw2nYIjjRMAHkVO79NZS32/zkFrTWmfnNWyVh5kdN5TuJpzfjHp1fmj7LusBua+ltb/bHR3NHDlIY3cBQDmflZzJ/vZINjX7Dira5QocMtDcAbrQZVDngMhEKYC3FJKOOah8wJKKqgoQhRHUEqBc4b+oF8PkoQSWLliJXr9Hl79mtec30xbMFoDjNfy8J9rEequue9bb79t+933bLtj9dpVOHJkGo12g76EcyRRA2WRASF52AWA7vmiXnzRCkGS5ZBCR+c5VE3VdUXVPwtBN8455HlOCeSB+XfBK+ycgxTkLdRWw1mgN+iDRXTNKyZWnXf+uROLH9OiCmB4ZBitdhOm1IAFooi+z+T0tOj1e3wwGKAockRxAucpYIwCqxiMLmGNBhcKKpKhkog+W60NDSjA6vtOcEHmVUvPbS4EpCT/sJIKvf4AwjMIIdEfEOt66+233vHhj/7J56748hc/LjiLq/NTPR9cNTz0HiqSQT5Pzw9jHYw2UErhoksufuKb3/ym177/D/7gXe3WsIuEgDEGw6MjKLMCYAzWG8zPz0NFCmmDwgjzQYn5hXkwDjQbDXjmkWc58jyD0RZSKTjnEMcJoojk3YJzNFpD2LtnDy549IWPufylL30GQAMAD49GI8XI8NCiPYKB/OoAGBNopk3kRYGRoWH9D//4pX/5/rXXXjPSHobWJSIVoTQaMlYo8hK61FARQ7ffg3cOkimUWodAPAclYgju4BmlfSsloYNFxHsP48pfmk1DI24OP+f5L3jdpz71qd+MIrlu/4GDGB5bgb0H9uDAof244NxzceGFF9G9YR2pvEK/tQgX3O7d++79+Cc+8aXvfe/qr22948673/+e9z7s642Njp1cDRV1aajizGrMzs9hbHQFJKPGh8Egw1e/8rUd73//+5Z3dstreS2v5bW8jga8Qgh4OBhnoKDgrUe304MQvH3xYy55/Ove+PqXPe85z31iIuN2ta1cTDwm3xeWBPVUysX664CaZWGB1aSv40cnMVfsGVsqC/U1c1VJFavgKfLgoQ67YqFeppK0dXodeAsMDw9hdmYeN994692f+fRn/sAZ/VWZRmZ2roPR0VG0WuQ163S7dSKx0RpMNDA8PArnLPqDPrJ8QPtqY2nKLBVcWQAO6PS6YODgXtRpkxbEVEml0EgbtNEuNXVMYpEttNqQ75R55Dqj0ClnA+ByoYaIBQ8iSTZrSbLlR4VYVW2jnvl64w8AkkkooeCEg3UGjNPm32pD/rhmE8aQJDlRCZQKqbacKh9c+LxkpAi0OY8kjZEN+kGOTX7CkZERWOso2EoI6LLEYNDDpo2bzrHGwRoNKRSOmkosQXQPJQZeyiRed92Pbtq7b2/WaDRhjUHe53XFlS418iyvGb4sH9R+3GoYwkDn0jmSkNOl5wOjF1hC72u2ljZqdBBVFXTVzeyDd3BJ8evR4LS6rANAc/XXH/13Dw0QHwY8Pwj8+kXfehh6WE9QmntBYBfkHHAhGCZJ4zDUcZBKBsBMkuFmswEbBihtqTA2OoZ+r4dikKvjjz/xNCAkE3sPwfjDibcfAsCzow5/x/btt+3auWsqSWKoWCAvMsASAK3SxpWSoUM32BM4Fn2SAZzRexfgzNVDCyFpiFFq6hYmMEfHQAMxHoZPFtqWwReLwNYRmDLGII5ixFGEPCuwYnwcWW8BJ51w8sljY2Ot8OCsPwwuJDZs3IgoUnDeIY4j9Lp9TM1OY3ZuZm3WH0ysXLV619j4OHRRoNfvQ8QCSil0Ox2owK57T2qE6vdRnIR0akCKKNgf6FotbQkG0HCMeSRJDGscBr0McRTTcENxCmjzDKNDK/Gtb1355R9d/x/PuvCiS55inQP3DJ6TuoeBfNw+SIsDEQ7jqLYoSWQdUPbW333b63560013XXXVd644+ZQTsLDQRZ5nKEsNLgSpLZoepSlgHYMUCkkjhnMkky9DLZsUCnFCTG6R5xBSQEUR8rKEtQ4qikNQlGm+6bd/+9VpkqygIRj1KadJgsmpaYyOjFBFVjhmxqij/HvXfxetVgvjK1bu+sEP/uPrrUazYz0DmEQU021edZsnUYI4TZAXBYzRMKYEA6vD3Rhj1GDg6edarJIQDEiKh0pR8z99tRqtNS97+eVv+/O//PPXHzx0JNU5hQXeveNOrNuwBo+48MJaXl4NDT1IYcSZRLfbm/r4R//s7z7z15/9mwOH9m4H/uQ/eXQw9bE/+9ipAMjrXd3nIsGa1WtgQsidFBGst9NRmty7vK1bXstreS2v5fUgAi1NYigRQUqJIi9Q5AUe//jHPuJ/fe1rf/mdq676+5dc9qLnVWDXhh/21OUY9ttLwmj80k16SD51OLprtRYY+rA5WUytWgS9gU0DW2QgGeN11RHCJt6D1wJHzxe/PzE9EkmaAh5oRCmu++F1X52ZmfmHw0cmzeHDU9i4eRPKssS+fQfgvYOQErqk/s0kTlBkBRY6C+j3u8jyAYSUcNbCGl+/d8UiFLkhloVzGGdgvSHm1dqQgErS5kGWkbSYA9ZpYtAg4UIdEhcSnhMzmxcZGCfZIg8yXGNsCJEC9Q4GtlFIQT5G78IGn4J3IhUTE+RoCFDqMrBefElYFIMzhqp7DAFvbXXdUesdbTrjOCEWo9RwIRmWGEUOJSWiSCKOI+jSgDFAlwXm5+axdv06bFi/rjU6PHLG1NQ0pBJY6CzQxv0hIo4eEgaHhGEAOHjo0K3t4WG0Wg1Y56m6KVZQSlWIjwBvJfGthieMfGIOgNa2BrusGhR4X4eeVJLWKg14KffMQzczFzz4QpdqnY++9pcCWraEya58wqxiKo8q0/EPD36XhGI98ET5IGXmQpBE1gFOWzhL9wlXIU3YOThHUtMkSuGthS5LeGdhtIV31OGb5RlKZ2Et9RA3mo01XvtNAKCkpHohPLx/1z8kll9Mkr7lp7dsz7J+SBa3sDrcK/AoihwcVH8lI0WDGWPJ9+k8lJCIZFz73p0jBYII9UXWWrq+liQQM87AJQ/p48RyC76EoQ4MkWAcHAztdgtJEgFwyAcZnNaAdzjmmE2nAajTza2hgcfU5DQGWYY4jhFH5Nufmp7Gbbfchl//1VeeesnFjzl2MOjBWYveoE8qEUsebALYrr4vKaCKwRhDgCqw+CRdtqjst5xXI0ELD4tsMIAuCmhThgGmhS41mmkDQnEMjw0hGwwWPv4XH/8sgFwG7781hq6JIOnngkOAgtBmZ+dhCkPnhlP1T1mWUEqNfuRPPvymibWrNx+anISUlCcwMjoMzhglG8cRlFSw1iPrZ9BaBwY3pS5w50ICtUMUxWg0GxgaGUZeFCjLAsZZ5HmG+dlZXP6yy1982XOf96xqAJZlOYoQPthoNuoBGg0M6D4u8gJDw8M46ZSTcd1113/vphtvusEYg36fvMYeDEpK9Lo9Ur4EZYgQHFJICKlgvIdQAnEagUuqhzPOhk70nM6+syjKAlKK//GbhbGh0RPe94EPfPQzf/3Z387yPFVcoNVq4Dvf+x4mVo7jrEc8YtFL7ej/GaOhAmPMXXf9dd999jOfedl7PvCu3yWw+5+vLcefePzjnvCkMwCQVSaOsNDp4J577kZnvgPBRd2B/M0rv7n1nm3b9ixv65bX8lpey2t5PXBJIUjm53OHsshx2umnr/yTP/3Ttz7ijDNeBlCnqdaWuvCC948d5ZM7mogCFu2MIgC+2p9ZM7gMD9BoBnC75D/DJobqkTJoY2G0RqvZovAlDwy1WsQkh7wr5xc7fFvVlBlA2k7dQOc3DPIc4A55v0cTeU+b37woIARDLx8g9jGcddBOQ3KBfFCCCYE4SmDK8FPc0+ZIqRhCKUgmiBFgPhB+FGbjHdFvxhliBpyFD5tyBgPGgt/XEfjinpM30zloA8RJAs45ssEA3lqoKITsMAnBGQFs40KoEpCkCXWWFiVQJdgKkhg6vbipBgssbRyT9895CsUScjHlmUswHiSNIY1WKkWdts7DFhYqUuBcIu9lEExQ52azAS4FGmkTHhyNVqtx5tnnbFo5MQ4hOFrNdh0ohqOuGQ/2UDCYM8Sxwsz09NStN928I88yKEUJukzQ+bLWQWuqjhGCwxlLPq867ZYkdYITKGIhsbcCivC+HuRUf+bC8GCpUdWRcbb2AT/owv/PunqX/JPqmPxSuP9A1vfnoU+DosB5h5BQBSkUrNFwIeApURKcCTpf2sMJHyqKOJSgvysLg16vh9EVIxAFhwBHFCkcmZzCBRee/4iTTz5xQ5iRHdVh+5CH9KChxaK90hqLmdnZ/e2hEWzavAn79x3AYJDBlCVM8OBzztEfDMCFQByn1JEqXBiEIQwpaPhgwufJQF2czpBVoqo38cbVzx1K8XYofQnvKNiNS/LU2jAM8t4jFU3k+aD2vu/fvw8MSDes33gMANpge8BzBus8mq0m4iSmflvOcejwYdy/6z7cv2snNm3ctHF4aGRzlg1Az1MgjiQG/QG0NnDOQTCSc1tPbDFAtUu6LOm+k4IsHoGBJS86RxQLWEfgloEjiilwaZAPgj2FoygNpOKYnDqMuNHE1/7xG9f8r5d849+e/8znPK+6hqMoqu88bTQ4ODhjaLWaIYyQsqF7/YXQbx3huGOPO+fVr/6117zrHe98J1atpqFaUVKAHiflincekguAU+qxZx4y4kDhIZkAFxLGWDDOECkJo4m1ljJCGsWYnp7Euk0bjn3/+z/4WwCUDdPTNE2DrJmh1WjUPlrnXA1+O50e1q1dj9179tz3+S9+8e+Ns3nSTKGMRb8/QL/I0EhisIIjSWIIwZFlGbytZN0KDSkB55DlGXW0C0GVekFamyRJ7ff+nx4LfNIpJ53+/f+49k8f+chHPnH3/ffhyKEZpM0mvv/v38Vxxx+PM844lZ6R2oLJkBchaaR9cP+hXR/9049+8u+v+OKXpyenJ/93Xvfi8y844fRTTtkAEJOe9QeABcZGxxCnZFeB84AArr7q6n/Ns35veVu3vJbX8lpey+uBizfTNsZXrECeZ3DOsYXp6TPe8XvvOPvaa39Yb1aVkuCCQXBGks8lO9mlvBR5mcxiCEpgz6wzIXhlySb/KEaY/tyWJAsrshL//oMfFl//xtc7//gP/9j/9Gc+W04emcTYijEkjQQ1yl0KFkIIUtVpShJSWnv37ju0876de9pDTYyNjmFsZJQCpLiH0SW0sbDOwRqSIQvFyavlLZIkhuQS83PzKIsCSkWoYrKycgDryuAhppAZU2qUpoSlGC0IKeu6G2tM3YNJfbmoQair2fPQrQmPsshRZFktzSythmcWjFcpXgywqL14WmsCfix8TqGWByAPL+ckSvSkjIap2JCyIP+ilAQ4GIeMREhGLqC1AecCcRJDSQVtSsRxhHyQw1oK2YpS8n9PT8/AM0AohdtuuxllmbXWb1g7Qv5gktFWQWNLARFtkO0DkOMieLpr27Y7J6cm97kQ2tUepmGHMcRSihBuE8s4bM9p+JGmKaQQsNYEGfyivL5id+naIUbbBeZp6bEtetQXJeQPZHEfdMD+IWjPJSCeC76YGL00NYg9DFXqSTGxmIlFfyEYh4okgUFHib7G6SC1lBCCw5QOzhh4b1GYAtYTSJRCQYgIQ0PD2LhxE+I0xtzCPFqtNtKkgV5/AG0LPPaxj7lg46aNI6XW6A16FCbE2FHKjeqYjvpcseiDrg67s9DZv2ffnnuHR4aQZSWKrEAax2Agj7rWBuAB3BlHad+xRLvdgmce2pQwVtN1HT4PG5hSqhHiwYPt4IPkdKmnVwhBTC5j4X5gkFIhjlIIzmGNQbfTQVlqDA0NY+269fDO49hjj11zwUWP3oIAuBkjUI3gSRXgNbsYxwlWrV6DtWvXoz00zI474biVFFQlkCbkM48i8kyTFJdSpuOYvKvGGOqtjWIaNAIhdIy+nofLxBiqUnLWUXK7B5JGgjRJ4Y0NydYEhpn1GB4dgozi3h+9/4Of7fa6h+NYIVIEdvOyRJEXMCU9ubiggQf13Fpo79AaGkGz1UQZntNvffObfu0xlz7mKdMz02imDWhtMbFyJeLwPRmntPAojgjIe2KOraPEbSkpTdo7FwZ7BdI0QbvdgGMO1lk85/nPe8mxxxxzundkN+CChgFScooq9MSye4cwqOOAAxpJgjRt4M8/8akv3nn7bT9uNNtwHoijBMNDwxCMod8bwHsalpWlpmeIiuAsMeZlUUAbTWoeEYExAV0a+jNQbzIc1TyVRfE/dpNw8eMuecZ3r/3+3z7ykY98YjHIsG71Gnz+C3+LD/3Jh3D+BefjGU9/OtI0JQVJeDZyQUPN6667/tsveenlv/7xj3/sz/53wS4ApCo6jjMqWM4GGbr9HpI0wcSq1XUwoVIK2++59/4bb77pW8tbuuW1vJbX8lpeD7XkxOpxRFEcv/jyF5149TevHs3LwQXHnrB5XZKqGkxSUO1iIFUFboGjhagOHsY66tWr/oYx2JKYDBYRKOIBNDhnkA8KTM/M4Cc/+SmOHJ7Cueedh/HxMfz4xz/ub1i7rnvaKaePTEysTo47ZguUlNBao9Vo0mZzSYdrJUHVWmPnrvuxZtVqDA2PAAB27du16/DhI4e9s1i9ZgiMl1BFBCUEeqZPclyjwZmAKTWBVcaRlwaKezgL6nKFRl4Q86RkBBmqW7xxiJIIxmh4mBDWRd/DGgfOBLy3EEyAycUqIg7AGB3CdeicUW8og5QSxoTzBgYmQoKwEPDOw1i9KI/lFDRlrAX3dKycEUvpLW2muZIUguUdpKTP1jsHzwEVRcRa6xIigGIXvGvOOjBGfsMyL2C0QdJIkKQxikJDxQJRpDAY9BHJBPAevW4PVjsIJrBly5YNcaxSAHDWw8OSHJMd1UAbinOqOLJF2Xv1BT/5yU/vnF9YyFvNJvn7AvvCOEOcJLWv2bnF7+i8Q1EU9fCDc1ZLKau0ZVd7eRflyYuVRJRwXTG/3vuHpzQfqPFlDw10j2Kjfk5P70PJq6tUUuc9VVKBPnfJGElhObF/8JQyzZmAZx5KcQKHXoDHHGVRotPtAYwhVgr9XhdZlCOKEgp18hArx1Y+EiCFQjW8wUPg+Qcy9LU1AaR2YAL41yv/9c6bbrzxns1bNmNhbg7OOJQokTRTSBehLDR5SEMXcmlKSB/BVN5wFq7PcLKUiknG64hZ9BWru6SHtQa81ZQtpAa74HuvLAHOesRRSsM3Z5FnJZQk6eoJx5986roN6zZUczxWBxU4qkvilNxrjcHE+EqkcQP33LUdq9dO+LXr1goAiJQEFwJFVsJYByk5WkkbvV6XEuGFqL3ZdP9aCC6gtabhjrWwhsLX6FqknmDGOLSx8N5AgmTZ4AxxpChleJCTUqMssGJsFLfcfMvVV/zdl/7+dW98/e90FnqIUwUeGOYo9AHXOQ2eauAYOKSsppTUTZvE6aoPfvAP3vKc5zxnm4XfM7ZiCBwcw+1hWGuR5wWEkBQIZg2iKKYk/cDCDnp9NIeGwESMNErhLKBkhEhF6A/mcOJppzz6db/+qhcBoSN4iXS5vh/Y4vCq8hjPzM7gnm07sHPP7pu+873vfIWFOqfefA9ccqSNBEkUI7MOcaJgDT0nVAhtjJSiSqWQbi6VgtEanEtESqDUBZgAtC6opsjStfo/bTHG5DOf+exX/OB7P3i/YHytd8DBQ4dw9x1b8cIX/QrWbdqIE447HtUQyDuEMDuGbr93+EMf+uNPfuyjH/vzLM96/4evz/7gfX9wJgDoggZdd22/C8duOh4bN66H0QZxHAMAPvHJT15519Y7ty9v6ZbX8lpey2t5PSTgXTOxCo1WY+zMR5z56LmpufEzzj7zsS/+lV8ZTlLagHDB4byFY/4B9R7sqA29C7QtAZFQ98EYBBOQUtWBMZ1OFzMz01izbo3fvn0727VzJw7sOVTMzs/Mbti8gTtnWp1u9/Alj3309c76mz/96b82hc4ve9Sjzr50PB1HVUnBsSiBXpRKA956rByfQLPZQpZl6HUGuPOOrbf3Bv25RpLAWYe9e/ZifOUKDAYZwDh0WWCQD+j9hr5bxgV6eQEfERvrvIMQ5K2DIybBOwKnxlj4gvpzpZB1iBI8iE1jCNJFSb25RsNYktt672q/Kee+lidTBQNJHTlbusFXsNrCeBNCkAycZaGKSQT2nMF6V8uEPQAXKo4IuFDljocDLL2WjBREtXHkoq7lcd5CKgELh0bagFUGRZlhLs/RbLRR5AVVLrkS1ho0Gm2MtNsAGIbHh3HsSSecLIgWh7EGZanRaDWPxoWMZKKL3mI8SB48OT15J721qjqEwLvRHoxbWFsFgnEwIeoBAgLQFaA+V+sdbZyXgMhaJssYgsK5fu0lLdEPjUfZg1Dfz97EhXvHBeDLwB4EjPGQcHJJPdeSe4/Stv3iIIlxxHEMYw2MKSGEoA5MxiAU3cvWeQyNDCNNEsyXc3DO4MjhSchIoD0yhFjFMEaj1Axbthy3+ayzzz4JAKRSVBGDxeA6j0Wy2zoPbSxiJWrVBq+HBQ6AwM49O+/mgi3MzsxAlxZCcmijwTxHnEQwRQlvLKwhtp8LCW0tTEbeXu9Imi+FgPUexpBdwLPQw2ypbokxBiYq37+FCOncDIA3JgRfERiumFkfUqy995BOII4jZHkOoRS2HL/5kYNBtzUyOkQSY0/5BAhMsbGhHzuAa5VESFtNfOazfz37g+9fOwlwFKUGYBGpKATNEdDiLPRlCx6GXuTZdZWCxvtwXEG17lmonOJw3kEJAefoGWG1ga3evy2hnYa1VDc2eWQGmzZvQDNt4z3v/cAXn/P85z1t9ZpVp+alRqwUoIhJtqHuikKmNEqr0UgTepqECaMIfb4XX/ToJ77z997+m+95z3vfsX79Oj0zN42JlasQRxF6vR4El+ACGBkZAcCw0OnBOo9WsxW84B69Xh99DBCHVGd4hiwvRj7yxx95w2mnnHYKQgI5Qqd73Zdd37/h+ucMzlkMD41gZGTY//BLP/zB1OSh7cMjw/DOQioOzgUGvQGSOIaUHHlB3dyeeRhdoCxo2EDscXifhj4LZzUECwnZgQWnZHdbg/H/QWA3esKTnvKqv/v8F94lGF+z454d3ljNvn/t97CwMIe3v/33SaUUngXUiU3n4IfXX//vv/mG3/jQbbfdftUffvAP/4+P4axHPuK0l1z+kosAwDEGEUU4ZvMxaLYadN8EFrkoiukd997z7eXt3PJaXstreS2vhwW8hyenMJQ1sxuu+0k/iaPjBPcn3n/vLpx88slgcpF55Et27NWEnSTNrGZZKx+iIzqN2MKwAZyenIEHcMftt4MpgXUb1rHNG7YglnF3YaZz0/277r9jYX5+bmZyprtr5+47Duzbf+PhqcMLt9+5Fb/+a7928vj4+KX9QQ9laZFEMW0GGWU9Y0kQkC5JUm2tw979+5DIBDf88Me39rsLSJTE9PQsWkNt6NKg11mAlBGcJ9aPJHwMSiiUugxyOwbL7GL9iSfmxRuS+fIgyyNvK6EQbynpl0sBDvLFVeyt0SRzNlrDg0FGEs66UJHja3bYWkNnNJzjqlrFGlt7GBlnVAfp6ex7hnDOOaw3NXJTUsAa2sRSKinJK1mQYTJQyJZH5Qf2iGQEDwYnqeLGW4ter0sJ1bEC9wSyy7LEyMgIRhvDYExAcvJVRVGMLCswOrLieBHoD6WIcXqo/lZ2FIhDGBLQ3lIb07ntlltvp+OXBNQWFoL/OIAvziGiGMbSxtZp8uhqrevQM4TzU3cYV2nfWCR5l/ZJV1/zn+LRpQztz+rQDeeWYek99J8zvPXdVUeg+zowixh+Xn9vYwyFTXlbezNzm1NIFTx0YMfzbIDuwgLASDqbJBGiJEEjbRCqYkBpS6zfvOGUVavXrAcooK5C3q76XkzUoWLeeVIRKLH4vAjHW6Un79t/4D4PDudIgp80EjSiJga9Afplt/7whRAUNBXYcFfVmwDgkkNFClpb2NJASKrjMo4sA1wweLA6vIoxBhVHNJhyoT+ZCXjuoKQiSbCUwTtfwDuPOE7RbDUxN7cApWJ28WMuOkYphbnZOYyOjcJ6CpsCGMnKhYLxZIOw2qCRNmBKjfnZuWLQ7S0kcYSipB5uAlLExFvv4JgjptYjAOfQpRw6dulesPAhid45A6USeAeUxtKQJoRbSSlBIQfUnd5oNBAlETwTEJK6hcdWrsC+vbu3fvITf/bFP/rQH3+YeVDCMmPU0131e3tGIFFFNMQzFkoKkuMj9EAz4I2/+Zsv/+a3vnXNddddd/Xw0DAOHjoYuoIlWu02smyAwSAjFlVF9P2YR7fXARcSK8dXwhpDlgkVY//ePbjowgue+pQnPfE5NKBzNbhhDzEKopovB2sspFToZ30kjdaugwcPXgsAjbSBubk5Ujp48uxmWYFISaon0mWoXzJBAeAJ6HpHPxtAPmdtNLQpQ1CSgnMeRhuyv7j/ORQvY0w8+7LLfv1Lf3/Fe1pxtGp+agFXXfVN9s///A381pveiNe9/jUEdkPwHl/0LBQf/ujHP/ehD/3hn87NTO/6/3scp5/+iCdv3nzMpoX5Lvbu3429+w/g4oseDSE47t62DaeeQr7hv/u7L377xhtvunF5O7e8ltfyWl7L62EB7/07d+G5z3v64Jprv3t486ZNl73sV3917SmnnVIzSn5JL0wl8WQg4FXJiiu5qNaa2DQpAdAGd3pqCjffeiukF0ibLZO206lWszn7z1+78sjuPXvu2H9g93ULCwu3duY7h+7eui0/5vgt/uCBA0hkjCiJcOxxW0Yve8FzTwWAe+7d4SfGV7PRkeEaH9jwOxHA9tzcLJx3GGoPY82qCXS6/SN79+25o91ownmHhe48lIqghEQcJdRVmQ8IHDBKiR0MMiglsGLFGObm5lAWJaI4or5ZIcFcYOgYhf+AeWIOHWCtCR3DDDAhfMuR39B5SlBOVEqdvFyAcwZbJQcHUOS8gxQKTHBKRvbk9QUcrLb1ro/haPOndw6WeTBeBTKR3JE29QVJLz15Rq2zgX2PwARQFAUYSN5MKbQOEEDEFKX5FhqCK6RJDEgCj91eB+32EMA4PASKosDYSCvIuUkivXb12pNqwLgkmAwPUWpDX7ME8YZ1y8233n3Lzbfd02q2IDhDt9cNHtgIcRyhP+hRiJES8AwwmtJnq8AqIQX1xwJUJxUScsnTebRP96GCp2oJJWMPL2v+WaD3ganKD3ytn4WoWW1DXYKcAyONyv25WM8lJfl5qzTm0pR0bQfPdqPZgrcaxjgIJRfZzcDC6kJj5cRKlIXGjh3b8YLLXnDK6GhbGQsw5+A9A5cCDA6l0cFTyUN1DoeU8VHnzNeJVUC3081/8uOfbhVcotGksKEiL6C5ATiDZFTh1el0AQFwwVAWJOvnoJAyGYBiURTg4HVfLxN0XqqUbZKML/odrLM0RPKgFF4uUepyMdk5J0l0HCk4xmGdRWe+C2c08kE33b97z8qVz51AUZIvljPAWxoqVI00nANgHCpJAAAHD+7HEx7/xNG777xrdV7kaDSakFLSwKHICTRr8iNXVclRFAPOwjILMBF82ZUigNLNuRShN9hCCBrmkEfdQToRwLKjpHYZocwzJLHC6OgI9u/bjyiOAAB/+vGPff6pT3/apRdffPFTSl0Sw8yXVMxxD8ZFfQGLiGN2bh7tdgvOOBhdIm40EMfxyne+611vf/Yzn7Wt1x3sbbZSyDTGyqFx6MIg6w+o6ilJwMFQGoMs68E7oDnUQJKk4JzCubLBAFk+GH/1q1/ziiiKEqstHEK43xLFSm2hDz+fOOPQpcHhA/ux9a47sn/4yte+/N3vf/d74xMrYaxHszmEQg+gQr+usRrWajRaDfJ0c6oy8o4yDYQSEF6G5GYRapIiMM1hjQY85T5wBkRxFBK1f/GXYEI+6xnP/o2//cynf7+VRBOz8wNs274Ve3btwytf+Wt44hOfAimS8BxcfNDt2bNn+4c+/OE/++xnPneFtWX3/+9xtMbHRj//6c881QuHue4MpGQ4/fST0Wq1YKzB8ccfjyhSuH/nztn3vOe9/7QwPze/vJ1bXstreS2v5fWwgHfN+Ep855tX+xNPO3ndn//lnz9q1apVVYkunKfOQ2IYaMPFQ52HeIgahiOTkzh44BBWrx0/9J3vfn/vVVd/r2gmUeviSy6M1q/bMP0vX/2HGw4fPPjTTre3p9Pt7c5LPbtq1QS0LjE3PYNBvwNnLNauWQfBPfbv3Y9Iqc3HH3v8qRbAcVuOZc1GE6EqlLyrHrQhhIPTFhOrJhAltKE7dP8kvnftD+68b+fOHWvWbwATwKGDhyiEJFIwISQpjRNIpaAN1e4ISR64hc4CrDEQwXfLuQibZgZ4B+ttqGgKSbCcQ3EFzzwBX0+gg0KKaCOqyxJFkQGOJHjeklTPBZBYox/G6hAQCkta3OwhsHqLXkIGMFcDI6ooqgCHRVkSOAcjL52QnAJtEECiC92qMqpDxay38AWx0VRFFAHgIVmVwGOz0YRSCgvz82iYJvq9DvrdHiYmVqHX72Hzxk3HPP7SS2l64kI/bDU8eRi8iNAjTNJq+pNtd23bJoToCSExyHKUZYmhoTa0LkG1oVS/VBYlBJeQXAHh2gBf7OKVQhJ77gihcMaDx5ACch4IditQKYSovbcPArNL//uhfv8AeXbNkj4QBf+sAKzab7oIIit2mIcKJgJNFDhmnYXzDtqZkCILWOiQuM6pCxkUAOSMJym4oJofSrl2mJ+bQ3u0jQsuPO8YOgYTUqod8kGBJEnRiBuL8ns8oEk5KEGW2g0OHTm0ozT5DikEirzAyvEVmJvroNPtQAYQV+oSxhlwJojBdbb+zpxxqg8LFVqec3BBnmRnXWC+KdKpei+ccxjjoEtN6gfBYZ2HlAB3LNzXxM4Zp2EcJxApSLkx0+3grLPPGT373HPXdTtdKBWDyQjOW6g4Ql6UVFXFBXzoZKbBk8NrXv3r6HZ76aq1K59ywnHHfXPHfffd32hwRFGENE1IfQDAmDL4ri0iJlCE4QxnDExxOGshBUcUpTDawITPlVXam3COpSBpNeMCUSTBOUOZD2CsQV4MEBcqyJs5JlavxuThw1O/87u/88HvXnPNI1qt9hpStahwrhfF/H5JgroQAv3uAEISABXhOfTExz/+sX/whx949e+/413vXrV6NfI8R54VdXCZjBQlHhclDTucRWt8CHmW4cCB/RgeGcbEypXYvXsnXnL55S95yYte9HgAmJqdwsrxibrPlYGhqn6vq9WCdD7L+7hr21a0R4fv/NEN1/+TtWUh5DBmZ+cwMjSEwXyBVkOGQQHJkfvdHjwDkjihwDBPCe9aawgmA7NMYWlcpJBShgDGUA3FAOscfNUR/Qu8okbSftvv/+6b3v17734LY2zkrru2w8FjdnYOv/Xbb8KmLZvq69t5DxG6qL/+9Su/8frXvebth48c3v5Xn/rUf8mxXHjuOY99wWUvOBcANm/YjN17d2P/gcPYuG4T+r1eUDIA2+7aerMx+Y+Wt3LLa3ktr+W1vH4m4GWcIS/1yBMf/6RLVq1atQoASl1gZnoWY+PjiLgK7AULXBKtA7v3ozvoYd/+A5idnp2PknjHVVddvXX33p0HnDUHmJIdMB5NHR6knPHMuOvvObj/wG0HD+wrhIrQarZhyxL79u7G5KFDKIzFBeefQ5K03gCOAVPTh/GMZz7rEatXrZ7oLCwgUjGkkCGMB6HLl1I56ReqzqlWMSj9tru2/Xh+fnZhbGwFXKGRxHHdd0n9ttTj2ektoJE00Gq2MRgMUOog8WOcwLT3EKg2WA4yUmBQEEKhKDJ4byElbZQAT6Ai0G/OeHinISPy8DLGAO6hraadGxFVwaMI6ox1FOoluCCfZgD2CHUwQhBQNdYtgcGLKdVVawxjjJhdxkKYWOCGhagTSr0FYpXQBtmUiCIV/LsBNHoGazziRFJYy4BSgKMm9fF655HGCcbHVsCUFkmSYNfu+3HOOeecefzxWzbRIZE/9kHA8CGWD5v9at2/c9f9U1NTaDUbYIxqiiiR2qDfH6DRaMAzB1MYeMED0CF/oAt9wlIqAn/BG1ptlF2pjzqWxQ5o1IyhELIeYDx0WfDDoHf/c3zdQ/3dA5nium5raUgcqw3QnLMw/GDEXHkbWEEbKpgMpBJgnPz1IpKwxkEXJZSipN7hkWHMLyyEHmOPodFh5NMFskG2qgKzXFTS8GrIE8KNwGtWEQhpukEFAAA+BE199R+/dvvu3XsmkyhBWWj0+wOUuoDgDN5Rx7XmFlJRT64xJqQpy1rabCv/LQB4CxdAZiUMQNWxHKqlvPP1sKkKLHPWw4buWyEJrDrn4Eug1RqC5BJlqZGEarNNx2xa94gzHrGp1+lhdEUUZMWA5BxKCXDBYIyDt5SM7TkNR1QcYYi38enPfOYpn/vrv37iq1/zmvuTNIEJzLIOwNYGsOScQ1mU4fgRBhg0zPN1VgJZJrj0td+WewokI7+2AxOA9Qa2RMgeEGAcGGQZmo0WyrJEkgisWrMOP7nhJz/604997LPvfc9736uUqn3OlcpisUGa/mx4qI2syMAYQxIlsNbDOItYSbz+9b/x0n/6ylf/5Z5t229K0wYW5jtoNBPqE5cCUkhwXqDZbKHTmUM2yGGtxcjIEDjjmJ+fw7p160581zvf9SoAYmZ2DlGcQgQ5cyWhrYc+qFRIqGUQp55yavmP//SVf9l1386to6OjpATwHr1el55vms5vo9GA1gZFWYS+YIssG0AIRZLnPIPzlLyslILiVDvlQyhjxSx77+G0w5L49F/I1UiaQ699/Rve+ba3/N5vttqNxvTkNL785S/hoksuwmMf91i0Wy16nhrqhg4Db/fXn/3cF17/+te93Vgz+V91LEPtdvSpT//V8wG05hc68MagLEqMDI0AAAaDAYaH2wCA71/7g2tnZmbnlrdyy2t5La/ltbx+JuDtDvpDq9atOntkfOz8QwcOY2RFG1obJGmKOFoEj928i/t33O+bacNm/cJ/81++pX90w4/z2dmZOxnDNy38ddkgn1m7fnWTMWXiKO52Op3ezvvvXbj//p1m9ZpVUCpFVmhEDjg0fxBr1q/C/FwfzVYLJ2/ciDhqYGp6mtgXITE2NoqzH3X22VwKJHGCOI5hK/9lCHeqeGYW5JxgHsZa6FzjyOHDh++8844fKZWgLHP0+xmSmGSwWhsURYGyLGuPYX8wgOSSJMneQaqk7pJkYLDWwBhNCcrWkIzOZLDhz6yxMIZqErynfkbmgtzUWXjjKVgqVH3UuMo7cKHAvIdlDjxsXDknlkmH1NkKA5HM0dUdnb4OTqE0VQ9LEtiqN9ksoifnqFKJodrok/9VKaobIoBLdUYi+AGFFHDewDmDzkIGKSWajSYajQZyXaLVbsF5i36/D6VilHmOMi+wZfPGSypoa7mvsP0S2HY0pVpXVoVBwfzcPDy4nZ6ZuktKHhgrDSEFioKqkZx3yIuCWLBI0XXhHUnNa+BMcmSjTQC7BIrhKVW8Dq8K58YH9peSsclrWjGoi7vsnxPk/jx/91BAt/qlCoQRJBumxGlfJ9R678C4JH+rr3pIw2dmQpVNTDVX9H0IvBd5hqSRot1sIstydOY7EIIjTVP0swGssSiybGhsxeh6AGQZCMF0LCR7McYoTTmwgZwJFEWOLM8wNDRELJp3VTUqbr35lp/ossDKlSuRZzm6nR7AyR+ZZRmEkiRPBaO09KDAMN7UMN9qWzOPdEIWe5M5QtpysARU4Nbb4DNEqC2SCKm7gmTdAJigdN6834d1wNDwMNJGFD4Xd6y2emRkfAWkJJk4B0dpS0roZRLz3T5aSYKYR0tCnyw6WQ9jahSjo2OPB/BpzgUyXYDBIYoUjDYhFdgtXiLBZ+ychQ2pxtZaDLJB8DH7uk/aG0qmFuAQXEJJRoM0CxjjICOBZrOJwSDDIBugKDRaQw04Z9FqNjCxajU+9KGPfvbiiy86+3GXPuEZWmtEkQKWqkkeMKcSQqA36IMzgUgqeM/g4ZAm6eZXvebVr3zjb7zhllUTEy5SEkVOCdzGGhRZAecd5mZmICXHyOgQet0BrHGIEokDBw7gPe99zytOPuWk0+dnZzF1ZArHH3dc6OoNSo7qWMLPAQrrA3rdPu67fxdu+NGPv/eu3//9LydpCqUi2LKAVCJUsNFzUko672VZkBWCC2hrKYMgNAHQ85eTIiPcWy4MvarhkxQUEuiMwy8y3GVMRu9/93ve/p4PvOstcws9tW/vIdxww09w7qMehYvOv4DArvfQpYGUHFwI5GU5/ZEPf/jTf/SBP/yL/0qwCwAnn3zi+U9/8lMf11/IcOjQIUxNT2Hz5s3YuH49PICVEysRSYVdu3bv+fq//Ot3Pvaxjy3v5JbX8lpey2t5/WzA22o21uzbfWDN7j27iiMzB8pvXX2rv+Sxl8oTthxbbr3r7oP33LN9109/+tN79+zftfeWG28ZbNy4obnl2ONGBt1B1B5pL6xet+q2fXv2XJ8X+XSStP32HfcgGwzgncfw6CjWrV+LPCtxcP9BmrZzjoXSYdWaCczPd9DvZ1izZhUEl5hbWMDGTRsxM30Ec1PTgGcbTzr+hHNpM43a41olclaJzTTxZyAigGGQZWCco1N0b7hr2903Dw0Po9vvU6iVMZifWwAEAdIojsn/Zh0EU5CRhLUMvlwMGTKlIel07RMkWbcUHNYALiTAghM4hiNPr3cOXAlwL2Cch7YmSOHIR8tCqig8yfRsCFFyrgxBYDwEw1A1EJYkU/vAanHOye9HVFrAJDxInT2M8RVKDv5qkoB6xiFCIiyYR38woE2l5GGDScx2ksSwxoIzAsdSKKQppQDPz88jbTQQNSI4S5LhNI6w0F3AyIrhsWdf9txHh/07JUB7VgP3So5Y9QQHbEfEZUBIUijcve3u3Vd/5+o7GmmzZmwV41BhwOAMJUkLRf5iUxpkeV6nggMItTM+hPLwurfYWgKONTvIFocn3vklEvPFA2RVzQ0IlNRfcxQj+3OywD8D+C4mOFMY2dJ+4NpnWQVquSpBnH7PWfiMPQUqOWMQRzHJ9rUJfdIS1mj0+oNQw+OhIFDkWfBYZjj19FOPv/jRFx9Hbz2MKtjiRt97DyboXFSlUkLKGiAAJLFmAJyxHePsTQBgSo0oilAWJZSkfmetDZz1KMqM5MJKQYqI2GtryX5gfei2VnVnMgGuihJFYNps7eHlAhRuBk4+YSXBPEeW5zXLyqUKNocIHBzGlRj0B3Wn8MknnXpauz3EJaMqLCUVvAWKUpMaIzCfSgpYRxeBFGRJyAeZx9AoGx9fubnRbI847+aVFACCp5+RvUJ4hzwraiBbBaxZS4nV1X1oQ8gcsezV+fZgnCPPMwgpKBTPGaQpWTW88zBGQwgGbXI0myvhLVlGWo0WFOMH/+xPP/4XF198yVlRFK011oa6oyXsafjFeQq0a6UsWDokBXBpB6k4fv2Vv/biq6666kfX//C6K4ZabUwdmaG+4JA4HScRolYL3W4H4AzNZhN5nmN2fhrnXvSox7/5zW9+CQDce++9/tjjjmdCCZRlWYfN1RVdnK7xMs8RxRFUFMM6fehvv/C5vyl0sbs9OopskMNYCyEiOKvBOSjx2xoIJmDMoncaAcgLEYaZ4RqXQsG6MOgUKqh9LKoeIm8D2GX+F3MDoFL+5je/+bfe84H3vAmAGh0ewt/+zd/AOYffedtbASB0eDPq+2YMc7Nz977mta9921e/+pUr3/Pud/8Xg2/Wetfv//5LR8dXrBn0cxyzeQs2bNwILiQGRYE8z9ButQAAf//FL1256/57b17exi2vh1pRFKknPfkpEwf27+3deuttC8tnZHktr19ywNvvZ5lS8c6pw9Of+OmPb177kY/+ycKVV35rhjE/vWfXnkPG2ak9O3cvDA8P20arKffv2x8dPHhEGq2F906njbS7d89+7bzDmjWrUOQlikxTKby22LVzL8q8hIoUmo0G8rzA0HALzUaC3bv2IY5jDLVHkKQJ7rv/fkxPTmFi5QoUpcUjzzzrvEc+4swztC5JggssSbZloY+T+jOVoMojY0mKPDc/r7/1b//2b9NTh6fOOvtc9HtdHNh/IIT0MHAmAEFMqGASYAaOAXmWEeMZRXXnJBOy9hJyUbGirJZ2ssAAV8yoB1sE5oxAKwHY4PVjPni+yNtLPkSSWLPak0kAuiKyAHeUf9N7B+dYHZbCGK+rTipkQsylA5cC3tLrS6ngXBn8wSRFFQIAI9kjPIOS1AdqjEVZlHV6aRI3EDcoBTWOYjTbTQq18RSYpST1GO/dfwCPecJjHnnxhRefjMCcijCxWAosq80reZAXveIIG+vWUBPd3sKt01OTewFiONM0QRRF6Pf6MEaHgYUFYwxFVoILYqtdkHFb6wC36D8Eo65Uv6gIPgqNEkMenIdL/KfVufe1hJdY6AelLP+c+96HVHUfBS4WUUbFPlcduKzq3636rL2FcArM83DNkK8zThSsszCFRYkSeV4AoXqHMYYkScEY0O10IFUEcImiKBBFMVorx3H++RecMtymMmvGWeh3rSrIUL8+Ed50XEIwNNtN8kZbX8tRv3TFl7fu2LFj+8TKVcgHOaRScM4iyw2KsgwBQByNZoosy8K97uvOasEFJRgrBXhP6eiOk9/c2vrkCc5gXAhZEqxmBT2jkKc8K4JygpKgrXfQpqSBgBBhcKagpEKns4ANxx7DLrjgwuNnJ2exZvUE+qWGdPT5NBopjLHkhRckixZVYnWwAgy3RxkArF23urViZLi578D++WZrqK7Tcd7B68A4M44oVuRRZq72+NYZCqAKJM/IbgCP8HyxFELGBSIVwzpSOBSmRKk11SQpAmvCcsxMzSBSMZqtJsqiQBKnuOmm267+8pe/9JlfffmvvUdW5kwsgkHng1SdMTgAkVIwZsnzhzOUpUYcqdHffsNvveqqK6+6NpbxwfFVK6g72QPaWAghkKYJOr0OpqZmsGpiAiPJEA4dPoAX/8pLnt9utTZqq3HMcceydnuIBmlSEovvQ9+tC1YFHzrKGRDHUl//4x99dXZu7poNmzaj1+khK3JEkUIaN2ANBd1xIZGXOTzzaLVb8M4jzwcQUlGYWJ4FKTcLYWcanHNEKqYKLF51FpBygPmQZ/ELSvGecc6ZL3zdG1/7JgDp3MwCPvD+9+Os88/Cy17y0nqYZjUNbhljmJ6a2fr85z7/jf9+3Q/+/b/6WFpD7RW/9ea3/s6b3/LmlwNA0qAAvAQKYDRgWpjvYGx4BEcOH9n7pSu+9OX3vPddy7u45XXU2rRlU3Lk4OETXvrSlzz3b//2755y3fXXXicZ/6DxrrN8dpbX8volBrxam8l169cNvvPtq2/5wt99oZRSlt+96mqfFRlWrVoLzgVWjK8ICbBROTV1ZDA9NYlG2qBO1bQJGSnEaYTJySnqSQXgrEOeZ3DOI202wDmIeWMMURRhemoWcRphdGwUzjvMdxawcuU4Wq0WikGOqckZnHT8yeeMjo8n3X4GyQNo5BymDGnJLCSjCto8DrI+hlrDsMag2+vs23r31huTtIkD+/ZCSIkoViiKEmPjo8izHGVZUDpxSOl0WpO8mQnyArLQuwsgTVJkRU5MWmlgYOGLAASkIPbJejhYMHAIRSDYOywJV6HuW+p9JIQTRTGF7uiS/jwAGy44eJBgOiEqepuSnVkVTkMdUIsWNh4Y70WwxpgI3rcg6zUEGowOmzfGQ7WNB+X+OCgmCaQyTt5X56nz1JaIoOB9YIFBx9vr9KEigV6vizSOodIYF1zw6Es4WAMPJD0dCJRVw4sa0QXcy2iTxThH1s/x3e9//4aTTjnZ3HLjrUjSBIJT4BHR2xQuFoewLWMtnDWwRte1Id6TLHTxfLBaNuqXVuDWybRLaNYlSHYp8K2qtvzDSZt/PhL3wX+wlCV+UDAWq7uRq+PgjBGj6AHjbH0/MMHgLX0Da0z9noUSsKEuC9YFb7dHHEUYHhmlPmWrIaVC1s9w1hlnnAjQ4IMzTm03FQsffvOgzmJGKgKqilp8E3lW3D89OzMfRwplXhLwVgpZnqHINYSQkEogjhMY62CshrcO1jpwTkoGzhkE58TKhhc1uqyvI2J9QV3g4NDGwMLXjDnnAswzcO/hOQ3LOKNqMB5C4oy1IRyLg5UMLtdjqUpWt1ttGOPJXyzIK73QG6AoSoyMDEMyBjAB64mFjaQCE3R8QIrOQrfodXqF4FFIaKfxT3VPMsFCXRJ1wHL4UDMmKMCrLAFGLJs1AJwLIXr0/qWUEELBhGGOEAK61KFTnHzXcRTDaUqGVlKimbaRM45+v4dcS7z7Xe/5C87kJS972csfr0saUjoXpMMVFRrmcGDA5JFppM0UoyPDsNbUvvtHX/joxz76woue9eObbvj0xo0bMDMzizLXGF85Dm00ZuemkSYNOOtw/HHH447bb8cxx2w54WlPe+aTSAFg0J1bQLvZhookvCeQXQ0NPfOwJYHnpJngEx//5ODAkQM3fumLX/6nuemZzpr1a9BstJBnOZyzWOjMUegUI8uHlFQjZ6wOAVj0HKMwK0E+f059zlT1pcHDzxvyrnti+YMlwgZf6y/aetRFFz3tG1/7p3dsXLdh3fSRafzZn30Mm4/bjBde9ivh2aEp+TulerMd27f99PLLX/7mG2+68b88JIox1vjwxz/6jt9909veBEA468NAcVFaHymFTZs2wgP4ow9/6Iv33rv9J8tbuOVVLcXkpt97x9tfdP311z95757dp27ZtGklALZyZM0jnvrUp/Y3blj36b37DhxePlPLa3n9kgLeLM/yffv251YXaDTT0EuaYHTFKLS28J5jkOXodLpQM/MwTmPjhk3o9Dq0u+YMTADOekQqQWHI4ymFQJ4VaDYbKIsiMCINqrxxDp1uF0wwxHGEXrcLbS0mVq2EsQ6HJw9jZLTdOuW0k88J3Ca0tZCePHpSiTqpkwU2yxoD7hgmj0yi0Wpgz559OxY6nV3Dw23MTS9gfNU44oQ206Up0B900Wg0aWMuWABRDElCHb/W2BAWFTyenOKM4iiBC2CBQq0E+egCi0uhUwheQkaSt4r1ATFWjTiGbDTR7XZRFhrekUSOcdr0isD6lkVJabSMzoIPzJYLx8WDzBSB8eOofICs9gZTCrEl72KQSCIcH4cM/Z48BPtQ3YpzHsZqjI6OwnkLrRnSRowsy9Dr90lO7C3m5mfRag0hjmPqIjYluGAYHhpuXnzxoy8EAGNpc4/FvC3yQxuLQhdIkoTAVI17GbIiR5qm2Ll715ErvvQP/9HvD5A2UgAeRVGAApJIQm10idzY8C9R1zEtrc0QXAQGfbHD9iiwyo4Gbf4otjXIhpd8vYf/T4O3HgRkfw7K96iXfFDhqA8DkojC1nQZ7tUg/+YCDh7GWMBoCClRllQ9BUnXM+f01UWRk1dda1hj0Gw0wAVHr9dHkqQYardw8HCXDQ0Pn1C/Ng8e8sX5RPAFY7ET2DPoELzUTJLFbmUAnfnO9NTUEQwPjQZZOXmjlVSIowhaa+RFjtKUxF7CBVlySF0OJ1OXhsAHGJwzxHgGaT+Fdpnw7y04CHRbRzaEKn0eIZHamQDmHGC8g1AkbTbWAPBotVrYuH7TydMzM5u7/S64kIgbEYyzEEKBMTp3SkiqsylKCMWC5Js+G7pugZnp6clu1p2L0wZarSZ0USDPS/KM+1CTBdSBY/S+w3MBDJILmKoKJ3Rte+fBEM6lMZQW7OhcIMj3EZLIWWAtvSfbQmlL9Ac9rFm9CkeO0GBhdnpu9qc33vDV57/g+Y8f9DI0mg1IpSCYJEtCCM9j4f9WjI1S6rV30GYx3VgphQ+8932vefkrf/XarN/fXgwy8CiCNgZlXmBhvgPOJVavWQWjC8zMzOB5lz3vmZs2bDh2bnYe/awHxkUdQMgeMPRhjJ4fURiY7Nm/e+HI4amfWmu2SikwMzsLKRMkSYJudwEOFlLKxWezRegwLsNzm8F4A2187SGnfm8XhjY0DFmqujB2sUqurkf6BVpnnnve8/7xii+9b+O6DafPz3bwF3/5SWzYvAmvfc1riU0tCiglwgCb4Xvf+c73f+ONb3j79h33/rf03b7i11/1oje+4Y2vNloLoRQNoMN0pfKtW+MhFce2e7bd/4XPf+Er/hftpC+v/7Z11plnX/rTm3/67jPPOutSAFi/Zj3tC7XFps3HpJ/97Gfeee9996497rgTfv+++3ZMLZ+x5bW8fvkWn+/OI9d9DPIMDBy61CiNRqkN8ixDtzuP+dk5DLVaiGKJNFbQxpLssdkIm2iOufl5GG8wPDyMJI0x31tAqYlBzfMc3jPkWQ7rLOYX5tFsNjE2tgJwlABtjcGeXXuhSw0uBLYcf8KpjzznUWdo6xBHEu1mM0jbAvgU9Guv10Ov28EgyzDXWcCdW29HI4px+62337jj7u2dvCgQJRH6vS6KPAO8RW+hCwaObq+LsihgShM2z5TimRcZmKgkyRKMCxS6hLWWGCDBwTiHVBGUiuqNkJAScZzUNTnce0gparAqeQQhFMpSo8jzAL6ItRYheAdL/GkIvrfFdhr6nTGG/GZK1MEt1D9KS3CS7jnnYYypK22spZoXXZZgPvg8LbEVPARaMUEDjDiJ0e100VnokkTSOsSRgnUaKqZKCBVSs6UQiGOSSB48dBjc+ZNPOf7E0wHAMQcTUq7ZUubSAzo3yPs5Bn0KSbKG3q8QApwBc/Ozu6Ymj9zT7S7QeWRAnEbgoVvXhwRmJQUkFwH4iJqVcd4GRpbXrGklS15krZaAXY8HVw/5o5lXko0/dPzy/9nuy9evX58fdvTrMsFqE7vgPJyLJRLrEIrmLHmtOaOUY+9RVxVV3lruASUiNJtNShQOTtWFhQUwALosMTMzg3VrV61at3bNsUAAi+FYeThkzlhdVcOw+PtYSLTTlKS9S87T9MzkPMDQaDaQlRlyXcBqUw/C6Pp1sFZTYBwTkFIRQGEugNCgYvAO1msaboSBFzG4PMjYLawzlG7MXFA8EPj1jCTYkktwMHDPoSLq/GbCI0liMACDQQZtHd7w2791yQtfeNmGRpqgKAeeg4ZSnHEIJiAYx6F9B/GNf/4Gdu/eDSVVAGQOxtgatF1//Q3bjbE2jmN6ZnAJWVd+KSglAuBm0NrAA4iTlFhnb+B5GK5ZQGsDYw08c2GI5RAnCeIkJktFLb1nSOIEUkpkWY5+L4OKiHlmwRc+OTmFsiiRFRmsc7jxJzd/f3524Ybx8XF4BkRSwegS3c4CKVi8oxRqBkRpDCbJWBIpBRFAZZ4VOO+S88989Wte9ea52W5rzfr1aLfb6PV64JLjhBNPxtnnnIVGkuCaa65BHMfHvPZVr7tcSo69B/dhYtUqbNq8qX4vrvKuh+FKWZQodQFwoNPt4rWvft2gETfvmJmZ6aiYQqeKoo+i7CNJE7TbQxBcUCo7XP385pwqugR5OWrptQihbELQvcZqX4kPsu6QA+BRqxh+kZDXk57x9Mu/e/XVHzvx+ONPn5mewQf+4AP+tEecgVe96tXw8NBlgShS4FxCCol/vOKKr//KC174hv8usHvWWWePf+RDf/SaqampIeP8UQO1alTMgnIEAL79b/925fz87J3L27flBQBbthx/+rU/uPZPzzzrrEstHA3/LDVYeHioVGLN+vXqksde+vJnP/eZT14+Y8tref2SAt522oApQiCHI12pYgJlVoArAcE94jhGpBJkgwwMAmVRoshLeNDmUmuDJElQFjkmDx5BmRsMNYbBQRu/9vAIkiTG8PAwOBdQMoJnHkaXmJ2ZRpomGB4ZxorxMXTm57Bn516sWbXmsRs3bhiXgsMFxiUvCwp4WkKbcSYxP9+DMRZRpLBp42b0utngmmu+d93KFSsxMjyMFSvGEKkEgkl4AGXwYvmwAbKeaiV4YHI5E0s2rBKScZiiRJqkIZEzdJk6D12nyfogWwacJZZFKurkZaEOSEgRUnItiiIPrBTqug0hOLyjqiDnHKQUtT/MA4tMTeWHrSpEsCgRdjWgQ82kUWK0hfOWJODMg0cMPKRhI/gbRQCA1pgQgOsDg+agy4LSmZstSCEhpETSSOi9M448yxBFMUpT4gUveO7pmzduWK0Dq1gdm7bUDwuQvNZ5j14/g/fktTXGwBpb57/svH/XNmNdt9lqQijy5lrjarksYwj+XAHBFSkLuAyy8OAN9tSJTCFjgpjswPTWPbFB7s0YfjZz+0CPrscDKOKHx7MP/mMfvh178Pf29NmR5zgw42EjmOcFirwAQ9UDGoK4QhiXCBeUMRYIAw8bzgfxnj74Zz2yLEeaUB0V+RsFwCz6vS4aSXPFujXr11fHypivc7IILAF5oWswslSJzRirvdjVmu/M7+aCwcPCaUvgOFXw1lFac5CJShlB8CBjtfSanDMIQdemjBTgq95dgAsBpVS49onJU0LVjC5nHHESE8MXPnPnKbjIegfBJYy1KEsDXRiUWqPZbEJKhaQRYeXE6FkAkKQNGKdZnmeIhIBzwEKnDyEl7t15H6659ntot6kqhbp9aQhVyXx379l9Bw2JyH9eFDnJdV1QiwgR0t4FmmkbRmuURUaqTk/3J0A1bEpGBH5d8HKDwWoK3mMc4JJSva3zKMsSRZEjViqANw8dnt86L7Aw34UJw6x169fi5pvvuPedv/vODwPYzxzH4YOHveICUZLWbDHqKijKTyBRgYU3FkrJOjr/8pf/6gtPPuW05w/6PbQbDbTbQ4iTBuJYIY4UktCX/opX/NqLL3nMRWdaeIyNjWHQ6cMZRwCH+VoxA0/s7MJCB4lKMTszj3/48j+ZK674hzuuvPLKH0qpwIVCpBQU55BcQckIaZzCWgfBOExBtXGNNA3p3jbkHXAIHu4pzuuBGjHobFGsQUmJkIzCwagHmf3CZFadcdppZ3/i43/y1hWjI5s6c11893tX45nPfga77PmXQYgK8MvQZw186q8+8w8v/7VXv2VmYe6e/65j2rh5w6pWq7Vp9fgEkpgUFI4CLeqfQ7rQMKXBvffdd8dnPvc3X17eui2vsK9I3vTW3/6N4eGhM7Uu4U0YXDFGieJcAMYjPD7j8ZHxs5bP2vJaXr+kgNcBSOIUggt0FhaAMAEvTUE1PM7COYvZ+WlIJeEZR38wQL8/wEJnAaUpoa1Gq9Wkqh0GLMwtwBpiHwZZhpHhESzM99DtdiEjCc8YlFIAY1gxNoZmsw0P4ODBg9i3dy/aw62hZz/nWU+KlMT9O3di8vAU8iLHzNxsCKih7YcxFvMLXURxAiUlvGFYtWoN9u7fu2vr1q13O2eQZQWKskS/30OpNZI4rTfoSso6vZY8rhyRipCmaajkAcoyR5YP4JxFGTpbtSGpseQCIvS+SqnggrS6qr+wNvhcw8acg1GPYUiErS2sPFQqYTG12Icf+pV0d6ksN00bBGqsBcDrB3wVcAMGOGfBwBBFMURIheaChwoRQtC0YbYoipKk25KHzSxV+EglICSxzyqKIaMInHP0+gMUeYFIEaM9yDLISGCQ9ZEmMQRnI9pSAm8FOgBAVLLKAPaGRtpYsXIEjVYKFSvEiVqUGwP4wQ9+eIfRBTjjKAuNoigpXTdIO40xtX9b65JY3SA9FEKiMrVWHs+KNceDcOsi+K3lyv8bAVT/Kbp92K/zD4+rfR2dBTgsBrZVPsKaFga0MzDeEkCoBgEVUKg8iIxRZyvncNYjy7N6Q8CDBzRtphgeHkWkIqwcHx8fWzG6oobzYTBQvXaVTEuu9KNZ8mrAUf1+253b7tl65x13OeswP9+BiuLAQDMY7+CcDWysD5Vb5AGuaoloPkG+aWcNBJck1Q7PAOMsJa0HibfnnpTLQlFCsKWwORbk7ZwRQy4Eee2dtYiiCK1WC5xRGnA+yFD0stF2q3UsAVWBdqtd9Y8C3mNoqAXvgampSaxevRLr1q8Jf8VqzzEA7Nh+//wtt916FxcKQpDX2DsatEmlKKHdOGJfGVCWBdKkiWazBVdViDHqEibVAo5KOWecPP1l8PnaIG8WnIV7gmwMIqJ0aCZ4AJMUvBXFCs56zM7NgQuGL1zxhW+8/Xfe/heNRmLaw23W6XYRKUVDwuqadXRPxUohlhKDLMfUzFyQHHPM93pYs2Zi5NN/9cnfHG62z+10OhgbG4azLihHOsjyAitXrT7u8stffBnCdT4xMYG0kYJLFgLkQthfuPZLU4JzjrgZQcUS46tWljfffttNkzOH9kSRomorAJ1eF8bRs216ZgZlWQQ/uIA2hirKgnSescpGosAYecSrZ4k2ZvGaZ7wOByyNpiFi1T39C2DhbaTNVY94xFm/ds/WHY/cvWsPvvj3X8C2u7fjwvMvDNdtyEEIH/FnPvPXX3nLm3/n98tisPu/87hGhoaKrbffuT2KYoTSAHBO97YPvdMqVjDeZK//jTd+avvdd9+0vHVbXgBwwfkXPOk1r3rV8+j6JVuYIIEdZVSEjBXnSCF06qmnDS+fteW1vH5JAW9v0Ee310GWDRBFxPZ1+z0oGUMwCnkxRkOXBazV8I76Z+MoQjNtgnMOo0sMBgNQIb0MnjxKYm0NNbGwMAdI8kFFUUSTZEb1QYXR2LV7F+CAdevWoV8UOOXEUy+9+KLHPOrQwWncdcddfuXKFZBxhDUTa6iGJBy80QalLjCxagytoRbWrF8NYwyu+cH3fwrOjkhJTEKR57X0ryiKkMgqoaIYzjlYrUP/okE2yCggJvQzSs4RxxH1dXoHz8PG31pkRYYoISDoA0j1jkAV+WA9IpmAMQEhVA2uKjmtQ6jJMCZ0AUvwkEgKxpekvjJibwJbaQNorlhKv0RSK5WiZNwQqkRpxQS6qaaVEYB25INUURQYQgajNax1SNIUkVLEXhtHLLeSgGPodbskE5IS2SAD4BHFClxyZFmOJIqx0FsYy/Kc9rCWVAMu9BHX/VLwARSIuo+4AkpxFME776ZnJm/jMqJKFc4RRRFURJUw8K6WizvmYRECveRiVy4PvSqVn9c5YpjZohvvQezs0r85KjyK4T/17LKfO7iG1V/N8IDXCIymD9dQ1b7sH3ioAdRWXaHe0mbVBnCDAEWl5IijFNZaCA5IIQFPQTsUbFRSz7MHOvMLJKVtJjj2+OO3tIeGhHeVrDQcW8XeMiCJIkhGmdWs8sdWrDkjpnNuag5//slPXnXP9h3b0jTF0HAbzjtkWY4iL0g9YGiYQX7y8BkxUpZUHbRVBZfRBOC4FPU96ayt2fDSlHCGvOi8VmtY5FkWanFiYrNDgJH3FowzaFOiNEXwenqUtsAZZ5xxznBraHOeF+h2BmCeQ0iFwhhwyRFHCr2FeWSDPlatXE3srl8MOJuZnQMA3HzzTfft2LHjzpGRYeRZGaR2QHehCxFSxb0DTGFQ5AW0LRE3FaQK6b9Btk3ntVJvBMkn/ab29FYSYM6CoiT42bXWIZeAIYkSxCqmvICaRRUwpUW71UCzOYyPffKTn//mt751bbPZhHF0jhkQ0t7DUK1WlAAjI20MjbSQlyViqdBuJACA0884/ewLz7v4dyYPzm6en1tAnEhESQRjSU79spde/iuPetTZZ2aDAs7R9RnFMYxzWOh24R0Nqqyj3ALjNIaGqJZm+/3348wzHulXDI/sJvYbsNpgMBgEabun4CrrSAGiJGSkIDmHtiWM1bBLwudcALDV++NVWHUYSnJBKeWeecqtCJ3Pi0/g/3fXeedfOPZHf/yRd/79FV98xYqxFex9734HVqwcxXve9z5EkUI2GCDPCnjGIJXAD6697rtvf+d735fnnV3/3ce29Y57pv7u7/7+dgYKtuz2ejDa0MAULHQoA1dd9e1vf//aa/9pedu2vMJeYeQDf/iBVyZxMlEUJVmdQv4Bq/JdQJkkRChA/+C67y/XWC2v5fXLCnhNWcI7CymJpYzjhNhHzmoWJklTRFGMOEkBzmBtDg+DUpd1mq8uC3DPUBYFojiCdRa9QQ/eWCzMzyNJUmR5jumpGQwGfSzMzyFNI7RH2nBw0LbE+PhKWFvi9DNOPX9kqN1OGgnOOecc5hiBUjh3FDiKkwibN62vmbI4irB/397i3h333ZANMm2sQTYoUOQ58qKAcxbWO1hrKBDKeWJOAnskJW22nLWwVsM6AxErpM02pIqRJA244J+NoiQETQHeWmhdUIiMYIAA0kYCxkGsGgSco5AmMBe6cC3gHCTjtMlmi6yYcy54o4mhZcHfiMBEEnMcWJ+QW2WD7NtZT/JCUNqx0fTnJFnlQSLNaubIGVeDLC454B1MqVEWBYQQi5UwWqM/6CFtNIgtkxzWe6hEIUkUFIsghQBTqvnKV77qjKHmELQ1EJzR5puHPtnKl+f8okyxBqUVlchw38777tpx7z33qOBz9ACM0bClJvZKSKRpCs4EBGOIIgWlosXvU39fYhAr3y3nPDBVi0zoQwLcpXQrexjM+qAv/fm3vWzpN3lQ3a+vWelKUsmOAsqLDL13FOpSDafoqziqsCfGyMtLlTUUDuWZD8nrlFDMRABE1mHVygnAMaxZu+ZkgMHUIUksbCJYLZMvtQ6fJ2A19f4yzmrGV4Te28Ggd/P8/Nyg0WwhjlIw70k1EPzvSimkaUJ1T54YaMbJp+3CfWKtCVJ9Yii9p2FQHKm6qowHpg6M7kljDVD1t4ZTbYwJvbwh3Cn4351zyAYZOGOIY6pDefzjn/DYE086eQQADZFCxZKSEvDA9nvuwd69e5EkCueeczYO7D2CI4enIMPXHdi3vwrjOlgWWTdNUzAeasBA50CXGoUu4bwJlgcFLjgW5hYwNztHScHVdezJ0e/pQq5j2iqWkXMByRV1xxoX5P/03IiiJNwTxFxSRRWHKR1cCbQabUhJDOnGTeshOJv81F/+5acBDMZXrABYqIUTYZTiySJRCfOd90jjBEkcoT/o1df05NQk3v3Bd1/2rg/8/ssmp4+gPxggHxSYnZ/D8PjYaW9521teWJYaW+/cirLMIRiDccHaAAbGifUvC40sK8AhoKIIn/jEX+CbV14Jo01+xx2376vZfl1i/YZ1iKMY2hSIUgmpFJqtJpI0oXMSrCjee0jJ4WyQZhsLJQWSNA0J+8Gq4ln9PKm8u/CU4qxUVIeE/b+8jj3uhNe96U1v+E0AjZNOOh5DIyNYv2Ejtt1zD/bu3gfjPLgSUFLg9ju2/uQ5z3vWW+dmDm77v3FsN93y04Wx8fHrAMyVukSUxCi0hjEORlvEicKevXt3vvnNb/kTp4v55W3b8gKApz/l6Y+99DGPezpACd5SCdoleQ/BaN+BqsqMAdd+/7vXf/GLX/rW8plbXsvrlxTwCiERJw04BnT7ffT6A/J/aYN+L4P1Do1mA845DAY51dqEpNg6tCaEtHCIEMTiEMcRrNFY6MzBeYd8QMm7kZJot1toNBsYGxnDoJfDlA5xnGBqcgppEovjTzp2i3YWjUaMdevXgHNJMkbOFytsnIdni+DGOY+8LOE49t977/ZbrKV6kPmFBbRbLQyPtGmDFiSvnnlkgwHJphhVIBhrQ7qpXJRWGqDb6UIXJUToAjbe1OEnLtSDRCqmxFYpoaKI5G7WwFtd+2CXAqqqW5VemlMgjHWIwmbaG2IObEgRlVICnEMoRXJP74K3zYeqo7Bx9ybIoisURcfHOKcqDmNgrYaxJawzJG/kEjAA88R6aWMAxoPsnBJgWfAkG2MgGEOapGg2mpiZmkGZl4hVhO58BxMrJ07cvOmYswiEk6SIpIFUJSMQlMaMWEnUVTu0sa2SVP/m81+4cvu2ew5XYWV5nmPQ69MmVXFkeYFBVtCAwDh461DqEkYTMKoCquqTXtUJBQ/nUfD0IX25OFp57H/G1/1vM7w/e1EYl6/F3/WR+sUDqQK2KOiMrsWqdsdZV6fyElA0sMbQJt+ZuvopzzLo4Df13iNNGmg0m9BG842bjjmhelfWUeBYqUt0u/26mqiKEnLewzIHJhbTaj2o/khJUe66f+feKtV8fnYOcZySD50BIlJ13Y2QikCuNyg1DaWqWhJqj1msKHGO1BrWUsiZ85Q0TIw0SFXBOTj3YJLCm8AYJSkLUfuftbEwRocu10YtlT/5xNOHN6zffOb+vQfABSCURCxJfswAOGPRbrYwOjIMgGPlyglEsUQjJbDsrcOGDRuhlML8zGxn8ZJhKAsdatJiCCGgJHnijbVwzNUAXoZnAcK9ThJpku9brQMr6Rf95yHZms6Bq3MBqF5Nk4LDEPNP2QUG2moUZYlOZwFalyjLEgsL81gxvgLf/va3r7riiiu+Scw1qQJ40K37KkiILR3IAHk+QLfTqdmVVruNNWtX4ZWvfOkr1q5Z88i5+TmkrRj79+/Fr7zwec9dt3rtGcwzTKxcDSVkrSKIVIShNjG5LKhsojAYKbIBJo8cwkteeDm8xJ6puek97fYwHPModUnKAQBKKBqAwJHyYUnKehSRD9paStdXKiR/e8B7W3veGQOkDPJ7beAqIB46qblYUlT8/+Bau2aNeMlLX3r5O97xe29AiDs/fGQSL3rp5TjvvHMxeWQSSSNBu9VErBQmp4/seMmLX/C2+bnZO/5vHuf3//271/zRh/74j+64/Y6bJVgxNzsFJoEoloDHwh988AN/unvXrh8vb9mWV7We9ZznPFcIrrz1oVbMHRX4aB2FHQZrSeevP/e3fz09ObVn+cwtr+X1Swp4eehulYISR21IQ3XewrgSQnJ0O12AU6dpf9CDUhGSJEUcR8ET6BDFMUZGx6CkQn/QR14UxCpFCYRSkBEDF5SCzDhDlmusXDmBoaE2Nmxch3YzxR13bcXoxMSKc847e0s36yLLS1jnkMQReRFL8uPZkLJrjEG31wMYgzYGBw8ewF13b7399ttu2zY8PATOBdrNBuI0hRQSuiypIkkE766U1LcZOjgB8s9R+I2CVAplUdTlo1k2QBRH1H/pLBg8sn4G5wEuJQpN3b4+bKKqyh0K3RGIogiMSSiVQHCFikEzztSbVx+YTx/CharNPf37mDZaztfp2BwkaSUfMoEiFSkopUJQzxJPaOhslUKSnxc+sPiOakBkVF8YUkkgpLQqoajuxVpYY6GNRZ4VkII2omVJbA+8xQXnnXfKxg0b11cMHwOQFxmyPIPWFkWpwQAYQyyTD+DNWQetNaQS2LHjvvnP/83ffjttNFFojTzPoaREe3gIcRKTRFFQ3zNHFWwSNvt1mBkLDN6i97ViYfzPEzb18Lj25/ra/7Ptb2BwGQPjWEySxuJGvQIA1ZdzxuHBYawNAVbBnyoFVKQgJIe2GsZZRHGM1hAFK/X7fcRphDLPoUuNNE2RpDFuu+M2lGWRbNmyuTKkhuMA8qJAt9cNklmGSKkwzPHk3w9VPJyhVg54wQa5NgdWrFhBPdhljkJT4J02BYwpQF578mYzXnWdEkPJGIOMKAG4UkXQtSXDZ+9CwJsEFyFoqE7kpnvHaQPmGWKZ0FAghG4JoTDUbCFNGrDWkL8WHrNzC+BcDZ991qM2bjpmA5x3KMr8qE+Jc46x0XH0+wP0un3EaQzHHCUVe+r4HRkeAgCMjY9OMggM+n16zghiMel5SMFfQsg6gMq7wPBXxdQ8pCOz8GuoI6pk7fB0rYAD1pkQJEc1QlxQbzcLm0BeJ3w7yEhCxhRUpo2GNpQOXZRF6DJmg4989COfW+gsHFSSoROSmhkLXuhKaWBRT0CSJMWq1WthtMH07AyiKEJnoYc1q9ZuedrTnvGrutTMaIMtmzcf/4ZXv/4FALDQ7WFs5QqoiBLsjbFggkHbECYoFruzAeDa/7gOz7vsBTjhhC3427/5++/MznT2qzghtYCUmJudJ/WCkihzGgyUeYGy1BCSwxgHKRWiOCJgHtQtVGFliP32oHqiwKCzJV5fJng9yCvLkBvA/99keE899bQL3va2t/726aeevLbX6/rvfv/7aDSbuPD8ixCpGJc+9jFYtWoC/cEABw7uufvNb33Tu++6a9t1/7eP8/r/+OH8O9/+jj959Wte85yLL7z41778hX/6pgB38Fh4w+t/86Of+9zffGl5u7a8qrVuw4YTL3nsxRdXPxe5CAGOYARwGYKKSKEz3/Xvfte7Pn311d/55+Uzt7yW1y/vksaVgPVgXoX9P6UEe88QxSpM6hk4FzC6hBIKWX9AslhPrI1SEt47TE9PwVpKSo3jmEIDGEezlaLMNUbHRiGVQpblxAA7i/7g/2PvvOM0K8vzfz3ltLdNL7uzs71QloWlN1GkIyCKDRR7EmNvMYmJ0SSa8ktUsCtEghQFFKyAIFV6B2EX2F229+nzllOe8vvjfs6ZWYoVJclnjp+V3SlvOe197vu67u/VQLPRRORiQfZbvmLFIQcevizLDIZ3DyEMJILAh2UC3HPKrnELkUwjjlNUysDY6Ch27tylHnr44Qc4Yw0YsjzrjKPeqBORtlxGkrSgTAYufFKmXedfK+UiRYi+aVyUUE6ATdMUxhIMybpZWqMs/CCkrNo0c5mOtKAqlcuwWqOZthBFIaBJZRFCEi3UGJTLZVKNnSKVpQkBWXwPiUqK3N4soxzjcrlCc2bWQoLmEL3Qg8oUNEi9FoIsjbCWrI3GQjtgQz6fCJtbMz0qmZ0yqJWCBYOxCtoCvgyRJRpSCvjSnyLLWkaqh6GYDp1lCCKyYkZBOJgv/SgyxiIMQ+RALuYyLjkn2zdnHODGRQfR64qT1nCWZRsEFxCCIU0MuB8WVtJUZC67lKzcbNoMLIMrmJjcIyM2JzFrbfZQe59TmT4rN5fh13//uUWvfQGt9/m90dNt0Pnrtc7GWqjeKMaSC2UydzdYlscSOUq4Jvt2lmTgjI65J6lgpILGzbrGKcrVEsIgQKVScTnUwODgXFirgzTJylP7lCzo1XIFtUr1OfHFUnBI4btCjGZ8Jycnba2txnbtGtq4a/fQkNIaExMT8ISHSqWM+mQdggskcQIhPAR+hCxNCuWXWSrsPU9CeJRJbY2rqwzlwVqWP5+BkIJM3ELAkx4y16ARTAKCRgpyGzMpkgaZSt01KSCED8EZ0cBDiXIl6CuV/F4AaNQb5HZwRzZTGkZZTEyO4cmnVqGrqwNSEJE9cDA6ZQwCT2JseNxeddUPnghDj+zkxiL0A5pHVmQJNtZCwEIKyty1QjollpoNxtGk83OWOTt+/v7z+fw8eze3wRtjkMYpFWqehNIxpDuPPM9H6AdoxQ0a3ZB0XeuMosrGsjFUy1U89uhjN573pfO+/g9//6nPeJ4nsiyDF3jF8wJkc57Sr6mhoK3FZH0ClXIZlbYKjLb4+Ec/+qZNm9c/eMPPr7v0b//6k68emD17v1tuuxXz5y603d3tTGsa3KD5appT1srCkwxKGQSBB601fvLjn6JW7dRbN2/58bU/+cllzBrTmBxz9xjaB1maQSly0GhHfUvSFjlqGEMcx5g+IpLECbTRU9eXMZQ9bSwkl/A8z0WdUdYxWVEYYPJZwf95Cm9/b1/XO971jrcceMDKQwBgw+bNrLe/D/PmDqLVSqBVilIpAhcSN99862P/8OlPvf/hBx/85Uv5mp9avWoLgMt7enrvWbZi2dV33nnX+Ncv+MbN1tqJmeXazJZvb3/3W0/ca9myBXmzz04PiAeRvZXK4Ps+7r3/7hs++7nPfd5aG/8pXttfvPvP3l+vN0s33nTjTbC2OTo2+kymVDJz1Ga2me0lLni1UUAGKKvh+T5BYzTNkErhuxm0BFIKBL5fKBKeJDuYDAKyEioCm5TLZTDO0WjUEQS0oDJGw5cBpOQIfR/1yQa6u9sgPeqyZ2mGRqMFHSeY2zvwClhUBSeCKOfSzVu6GUJhoTODuJVB+h66ukI0my0YbTE4MJCse3rN0624ha7uHmQqQ73Vcjc/jVpbDWEYoNVqQmUpLQxBdmjP98EcpVJwD57wkaZEoJacQ3hEOG7WG454nBc1BllGikAQBDDWIo0zJK0Y0sUIpVkKAUfDFURUJUq0gB/5aLUSWENZlsooBKUItsUQpwmMpqxSKcn6yWlJ6SJmDJh29lxjCjUwc6oDF0SiVcaAmSlrdJamsIyDMYE4iUlNdIVhKYqgDNmim40WJPNguYKyFNMUBCGEFGir1TA6PIpaezv65vUjjZuYaNRRq9W6p9d4FoBwZFMLAe4oqsJllxhtnYBuifwc+KhUqyOzZvVPrHriccyaPYfgQsag0ajDGioqjDGUZeyK16niFg7SkxbqusnhzC7GibkC8QUL2F9X1Npfr88C7AV+hL3AV6cpuEXuTw5+mgJwUeHpYGfWFNFFFm7m2xU42ugCkMYYoI2lhhGAuNmCNT6k5yHwOXRmUaqVAEMFRabqqNZqEFLySntbmD+GoSehIs3qwtpvXNYr/Yx1zmRHD+dgnDPcdPMvVm3eummiFEUw0KjWanS/cJEv0vPBbG4bpVxgLomunJNacxu+c/q6Y5fnZNNseJaSZZ4LKuzhZt5pv5ECDqsJ2gU3825IBVQOzFaulNBsxVA6w74r9lnueaKrPjkJnRl4khf7lAHwfAEuOFY/9RT6+/rR0dVRzNpSJJSLI9qwbufqJ554jDGGzo52qMxgYnISYRQiTRsI/YCysl1zQzs7rYGh2dG8oHJUZsEkwAjiBEdEJpqxJWeJUxo5404R1gTE0hmE4EQrNRQv1Gy0kGYZpC8BA1JWWYZyFCHLUjCPIyqVcd4Xz/v2YYccevDJJ53yapWqfGqXMpHdGf/smfQoDDCrbzac8Ix6EmPW7P7+j33sIx/8/pXfHzjogENeH2cZFi1ahP7ePpZHLAW+KDLCcziXKfLMgd27duPvPvlJ/c0LL7jmzLNe8y+RX3q8HJZguUGz2aR7a5a5sQaCKBqlC9s8XSsCQpBLhwsCE6apcjR5VrgapBTFsSE6s6Pou3OOC06nmTHPk8390m/v/9D73/w3n/ibtwDANdf8EJZznHrqKc79Y9FsKhrfAZo33njTF17qYnf6tnv3rmcAPHPm6WfgP/7t32ZWajNbsXmeF1703xcdT/dxXfBO7LSP2Jy8PzkxMfIf//75r1lrd72Yr2Fw3lw+PjpuJybG7coDV77pL9/znrNvuukXP9+yefPIlVd+/z8H5swJnn76aWWgW7/85e3XzRkc+Kstm7dumjl6M9vM9hIWvL6MkKkMnuDQOi9mPRitkMYUV1OOaOZOeh6UmwNtJQodHR2QQmB4aJhifJhFo1Wn2TNGkUSVSglWW0RhgJHhEZoBFgyBLzE2OgY/9NDb043Nm7dgcHDOgtececbxtHDjaGuvQudFAEwR9zE8MoIszdDX30s2VqYRVSLoiWxkstFcB8ZyWAwylSH0Q2iuMDY6Bs45oiCCtTEyNwcHTgWltRY6bRaqiIVxGY4KhhnoOCWiKqPFYeD7zlbKIKQHMAFfCAif5pjL5QpkypGlqcsVpPlKYyzKlRLSNIO2pD9mWQzOOJI0RaqUW5RxKlSlD+6IuhZAFJUQlgKMT0wgjWMEYQTpbK6+JOImm5ZhKLgobJNSCGip4Xm+K4y1WxzTSjVTCkopeJ6ELwP4foBW3IIxCh3t7UgzjTTJoJQClwJaWwwNDQNGoa+rB/PnLRhImiksNMJSBKMNNHSRSWqnF42ugOGcIUkSTExMoH9WH376s59tXLNm7WRnVw/iVhNZSgqUlB5URjAiKaSz2nJwS00EJpzwwjkV2TZXc1HYnadbhDE9d/dFWa8+W8X9Df9+1ree+9Km5neLLFDGwC0vZj2tdkqvgxpBMFhGRY7gEkYptOIYUngIw5CKYp2R3dyRaXcM7Ua5XKXiQCtwZkOPyRJcM0gIssJaADo1BCdjU7O12lgIcCRpDMkZPOmjWqH5y8ceeWyVFNJW26oYGx9Dvd4gmrQm4rC2RGaGpggp66K34NwXlMHNCoiXEKR+Gzdvr60psndbcQwLwA8CpHFMc+tagTOy8FOhqGlmVghIZ/tPWgnSJMPI8DiCKIQfBTjiqCMPGpg3yEd2DcEPI1SqVWgDMG7BJVmEZ82ahTNOOwP1egPjo3UwDsRZjFYrxuDAHADA+MTEtiRJN6dJBun50DpBmibgDEiSFOVyCZ7nodFsutnivPALXR63BueisDLnlm0hqBgrMFbaOPWb7pWZ1pTHKyW0UjCMyOqcS6g0o1gqJlAKI1jOHMmUEdjPGJSrVfhhgCzLMD4xuu0TH/vY51cecMDyvr5Zi1SmICTdH6c3mopT2TUFJhp1MAt0dwWIggBZprDXsn0O+tY3L1yyYNGicjkqgXdzWCaQaQNPMqJmM+5AUI68rA2E4KhPjOP2O29Pnlmz4fb77r33fM7Fw0TmTtDd243JyXGYTMPzAxfBljeOBKQUFGcGynf2OAMXRIDX2kU9uWxzzhgMI6YDMQJoBj4viO3UnEhxVf9PK3dPPu2MU6//6Y8/DaDcbDZgoXHgygMQeh6SJAGzDOUymTj+9V//9b++/e1vX/Wl8z8/syKa2f7Hb3vtte/BJ59yyqEAitGfvNENxsCsLQjrF/7XhT+98aYbb36xX8PmjZsMAOy99z6n3XDjjd8dnDOAc8899+QkSbL29o7AWoulS5dKANW9lu79hv1WrFixYMH8V69fv+HpmSM4s81sL83GM6VgjUaSEpCKMUCrjGxyzMWYMIZmi3J3rQEVTm4hNTE5Cc/zaJ7PgY44pLP1ZSiVywjDCGPjYxifmACXArVaFVbTwnlyfAKlqIRZfb046OCDD9hv/+X71uuT4DwXtmxh7SOLr0FnVxd6Z/eBSw6lM4wMj2Hn1h246+57nt66ZcvG3t4+1Jt11BsNtLe1Q3g0z8iceEZzYgqeoBlEbTTiOIaFoQWolJCegB+GYJxTQ0D6kNIDE6xYYHMuae5Uegj8AIFHURyd3R2o1qpoa6uhUqkhiiooVyqoVtvQ3tmNIIwQhBS90YoThG6eOFUJXNwmCRIa8DzKCTbGujgYTrEucQvglOdrjSVYkzaQgmaPwzAorIFRGBZE2iRNC5ox50SklZKiOqw1SFUKz5PgXCBJYiQpzVhaYxBEIYTH0d3VDa3oQ4UAQykyreEH4fy58+fuF5SoQEeRycoxnUvMWK6UUTHFOOD5Hnp6SRzetnnLek8K9HR3IYlTJHGMen0SrVYTxhB8SWkNxp3S6M4PAM5mzxEEQfGecyWVFYWT3VOtfdFWq+x5tVz7fE8yDa6xR9E9LeaUChzAOkWailVdFMGUU2lczJd0hYIrRBicU4MX9nPlbLJJEiPNMnR2d8HAoq1Wg+9JDMyeBd/30NXRPdjT3d0GTLMAM2I/+54sChzuFFaPc3BBMWHKqYy5cr123drHkyxGo9EC4xKJyqC1gpR8yrI87fzIbdE0h0XHUnDh4rZEcRwpl5eEXGY5XRtw+dOMLLvlcsWNKAhIwafivBgV5b70EbdaAGfw/AAMHGEQohyWogXzBxdJzjG0awj1yXqRO0y5xtRI0anC8PbdYIajraOCSrWESqWKjo4OcA5AAdu27dg2WW9MRqUIWmk06g3AAipV4GCI48SpzxZaZwAj9ZVzKqgEly6+ixcz6QbWuReEc5GgaOYwRvuVzidG+09KgpTFMZJWCwBchJeAthpplhUZ39ZaN75BrpGhXTuxz1574VdPrP7lxz/8kX8DkEmPMsN1pqCdmmodyThvYmkAvZ1dCPzAgcIoz7u9rZ2/7e1vbW/r7PQyRVnfbozWHb+pqyavKbmjXj/0wKPqpz/62dq777rzlocfefiO9vZ2SF8iVSl2bN8Oay3CUhlRKaJ7tIPu5TnbSpGzgJoFlLGrNc0vo3AOANKX8D3p7pE0yzs9Ni3/L71nd2241/g/YVu2ZNnAmaef/j4AnQDwxKpVmDN3EPPnzkeSUEyTcSz1W2/55S//6dP//OX65GhzZjk0s/1v2E4//fQTuju7+jOlwBiHdg4u7pxe2tj8fpLc8Itbb7PW1v8Yr2PugrkHXPmDK38yOGcgFyL89vaOsjEW2kFIs5TuLYcfcsRef/u3f/O5maM3s81sL2HBK9ydIQh8ROXIkSoJdqIzN8fEDEUwOFJy6AfwpYfGZB1aKQiPQB60QGFOmTCQXGJo9xBaSQvlShmM0cxesxVjbHIczWYdWZpi3bq12LR5M9qrbXs3G61yo9HcozLIbXtwxarwOIyi+B2tFMZGxjDZqOO22+/coJQaq5ZL0EoRcTjVRf5vuVKGcDEUgefDQDswk1/kVTLBYIWBhkGrWUdjchywjCzQktNsnbYFDbVcqoBzUk7C0AMDofG9QGJ4ZBijY6OwnBZTHIwyfmHRaibwPdqf1gKBT3OuME6JYRxWMwRhCdVq1bkzuYNTMbRaCQCGqFwCwBC6KJXxiTGnjFmXlxzAagPBXGatoRntVquZ45IpusiSXVIICS/wkWVUGCtFoBfGOYaHh5GmCZRWUFqhs6sDvheAaWqSnHDq8Uccf+IJewMAlxxJmjl6MC8il/YAO+WxrQZuoU9d2VartbHZbCBJUoSlCFxSdifNXCt40ofnkxqpFOVpFrOzjEErjWajgSzLaKY1zz7OC7Fcgnp2xu7vkLmL59V27POouXmQDHu+KvgFN+H2GWeM1FiWF3pUEOakYSKFT2UuW5M7osnOygVBlLRSxWvigmjqI8PDaDVbEJ4PpQwmJ+pYvepJHHzYwQf09feU8qZIDlLKN5oLt1O0dDfvXilF8AOf1H/BMTExuWvNmjWPC8YhOUdHRzuqtQrlQHMGzmie1fN9mk3XxsVvOTVT0/2HC+4KQnKXFJmwlrKXwYBMp27MwCJtJTBaoz45SUqwtY7WSedXligkaYpGswEhPHi+Dz/0YGEQRgHmDMzq3rltW8/w8G4Mzp2D3p5uaJ3HW1G2MSP11o1ZaDSaTYyOTiDwPDTrtL7KMoW777x73UR9rFmuVGGNpf3NOYHqHOVd6QzCowaRUQpKZYhbcQFby6O1jKVREw7mLM10nnDBHFWYzgH6OUFwPbcaZGBglqLJ8pEMLjm0KwgJAO3I7zBo1hvYvX03OBeYmJjAwMBc/PwXN3z35huvvRoAslhTQS0J/JQX3fm5KABopZE0WkhbBIxK4sRZ1Tkq5ZIjvpOlOKdJO4utU1EdaE/Tebfy4AP4scce5/X09O8c2rkLaZygrbOGaq1KaqyhUYZ6vY5mq4k4iaEMFfJpkhW2fJnn68LNfrvzwrr3kGXkcmGusYBirh6OKD8tnos6LtNi1V7ajTEWnX7Gme98z1/82XHU3Erw8MMPwRcEJPR9D75Pbo8kVtv+9d/+40tx2lwzsxSa2f43bEFQGjzppJNOLNRduNz6Yk3hyPRguOr7Vz+iMn3fH+u1HHzIwb377bO8AOpZl0lOKWUUoccZg8pc0XvY4cvb2tq6Z47izDazvTSbZCDbG+OisN5qo2GSxIGpOExqKL5GSqhU0YwagCCMaIGlgSxJnaqkwTgtwgOfOu1KK6RZRlmIfoCuzk6kKkUYhQiCEFs3bUVHV1vHsr322nfr9m1sr732gVFkH4yTBNIX8LgHwQWiiFQJLg10ZmAMMGv2LBhlUS2V4snJCVstV6CVhvSJnBz6EamQipQGw2gxrY0FBxGppSdoljHVSLKUigKPsmW1okUTFaccYRgBjHJ/4ySFH9B7IgqrBsDh+RLaWGSpRRCUMD4+iiAI3YKWQFBCUtxSvmDyZYAwCiGEQDOOARc7pK2F9D14QkLpDEmWwA8DGGPRbDahtUIQViGERKvVgtYa5ZJXzF9TprLL/mW5RVAgzRL3YWGhNCm2HBTdwjlHFIUYGx+HH5RQKZeQZQlKpRKajSaUyTAxwQpCa5KlOP64E08BwPKsy0LbLJTeZy/Opv7CnLKTJEnrmbVrnwKAkdFRsneGATxPomWbYAzIMoNWvUlUVQBsWsHHSZJxRTafsq07y3axMGXA88qx04tR9puK019nX36+r/2an7d7eprzZgBVlS432LFxchp3AbayREbmzobPGSeXhSvMwDiYpPgtxgXaSx2IE7Letre1k0IcBQhCH7VaBXsv3etgUtvcrCyn124o7Nbl/dri5Ro4oi2j5ok1GtAWN/7ixie279ixxfNDKG2QxAkyR+YGAJ1lqKcJvMCHNdrRcBms4MjjtIwlaymz1mXK0vnCXaFrYGGUcu/VOqWbCO6MC0jPWfsNQxD6sMaQRd4V/cpo6JhcDNWOKnYPDeOAA1cuPPLIYwYiP8STTz2N3r5+zJkzQBxqN7dsjca6DWuwa2IYJx5yArlbAulyfKm48EKJoeHhXwHkyhifGEMQ+vB8aig1mk3kEVOw5JyhGWxRqJLcXa/5sWY8n0Wle3DqxhymFEbtzg1qtZDizajIc3wG45RqKEPOF24RNxNITzqyu4GFchmzwNbN29HT14s0Fo0vnvfVC484+thjozDqJTXfYmKyjkpUApOCCN2WZowZLLp6uqGMQpIkgAakD3iegFIZ0kwVEUSWWRf55FgNnLsxkCn3xq6hIT5n/uCI+aVZrY2CsQYqVmi24gJalqUZZZ87SzOzxBCAR+eRMQaZyyKGm81lnMNoXRDHCYTHXGwRXafUcyFlP7+X5tF81vzP+DDv6OiRp55y+tvefu5b3gMgWP3E4/j5Ddfjda9/IwbnzAVgaSQh8ACg8d73vv/zP//5j78/swya2f63bG94w+tPefnLjz4UTlwx7r7htIIigxcAvnnBBRtuuvH6jQAwe1Z/MG/BvMBa2McfeyI49NBDejw/KFttZE9vL1Y/+cTY4II5o2tWr5lYterJ1vM998DAINu6dXOxGujr7tkPrvFqDZGi4ZrNDAQBZQyFM+fx1U+NaYbhmaM4s81sL1HBm2UKYRQU9q4oDKG5dDOPKGZOuQAyRcqtMQZhGKEUlVCvN6Ad5CqPbaAVu0KrGaPNRXNwIVAqhUiTDJOTk/B8H0krRbVaRittYe/+pQv2Wb7vfv0Ds9HV3UGzn8YiikI0mnVkOgUTAtpkKFdKzt4oEIQB4lYCy4Dl++8zZpnF+OQkuro7oZXG+HgdSZoi8D2oLHUZwxppmsLzPYoryhSk9FzBSn/nQkwt6K2FVhqlUgUsYo5uGiNNU0gp4Qc+6o0mMqUQlHyMjQ1T5AVnqLWVAZCFUvqesxRLGKtgjEAURaR86AxBFKBaq8LAIlEpSlGESrmC4bFRsnVKiVK5DM4nXJFANsUojBA3Y8oG5hyRHyIMQ8RxWiiC1uWc+pwjzVJYaxB6IQwsMpXlgThFtrA1QJJm8P0QaaYAtOB5HuI4AxhDpVKhghwG1bYqwlL/0v323/9wWoRTvJDniaks3OcpLPMPqOlzgM1mc8fuoaG1gR/Bl25eOlVoNikfmo4FFSzCk8hiAy5FAR/LCavWMFLwi8LavhAo+flE2d9Khf39t1yPtntKyns8v3WlZK5Mo1BU92RBuxgmwR0wyQCS4EQcNPvJPQHP82Fc0dhsNSE5RxiFqDcbqHXWUK3UELcSNNMU3X09A3m3vMh4ZVMFO9vj76ywfFpQVBHjVPA98vCjT8StOG5v70DcbMEoytvWikBy3JOwmQW33M3WesUsfZqmZHkWHEo5Bd+BhzgXU0Z1FyXDDMV4UdMun+uiWVYpSVHWWsPzJNJUQQiJMAjRaDYARoA+oyx0pjF3cP6yBQsW9AFAR3snwogKMu4aDzAA4wJttXaUqxVIF5sWBSEYZwh9ev9jIyOjTz715OOcc/ieB600lMsXFlKgVqnRe7M0kqAtFafGxTHl1w4XwtHVbdEUYGDkRjFTSijnDMyplZRLrGg/cQbtfsaAYssYrLPb0Yy/EBxBGJGDI00hPIFAUtNFSok0TTBrzgBuv/OuOy699JKr/uzP/vx9XFAGsx8Q28Fz9Hd6nRR1B8YgmECpXHKRVXnxOozRkXE0G00csP8KhCW/uB5yblsey7VxwyZcdvklqFQqj1955Q++ed999z3oByHSNMXkxCSMIUp+4PvQUsOXIQQXU9BBQYAxDkMuAhetRIA0DsklEqUp7k1w13si9wucks4Zgy7uksLNGk/FhnG89JbmlYetPPGqH1/1yZIMZgPAnXfchd1DwxicM5fmuLWC55MT6F/+5T8v+/ZF3zz/v779jZlV0Mz2v2Lrm93ffeONvzgbAFduJC4HXjJYWOaaWwD++78vMTt2bV186qtPec/f/90nSxdddOGsXz36uL9oySL5zDMbqrP65/QsnL+oo1Ip1RYsWBjVW+MqRRb7Mlz3la+e9/X3v+/Dz2kENZt7gpbnL1zwCrg1MsEkbeGmyRuWQnAwLjA0PNw474vnfaw+Nm5njuTMNrO9RAUvFaoCnNNCIIlpMea5xaO1QBSFNOdkDbhkMIbiXSYmRpGqzGXWBlBaI3NFJVm9DKJSALQsSmGEpJVASAFjDLq7u2BBZGJrEnS0VQ/s7uxaOnfOIC3YmC0W0mmSgimGiWYdEBbVStX5NhmyVgZPSmQqaV526XcfFIxTIZRk8DwBP6BCsdVowfNIofY8mlllnBQV6UuKFAlDpClZCSUX4L5EY7IBX/jo6eqCMhpZqjA5UYcXyCLn02rqMlptoAwV/76k+d5mfRK1tjbUamXU63VEUYhqqVxkFUsuwEohWrGFlBKTkxMQbuay1WqRUqMyiCB0c2i0vxnjyHSKLFNUmHAO4XJJ0ySFaBOYPWs2LICtWzchTWNEYTlHAbvMUpoDjaKSe2yn3jsLrGVAKYrQmKyDBZQVE/gSStECT3oSYZlmhfffb7/DFyxYsDCJU6g0gRQhLQzZ9CKPPYsPRaAlT0hyBgiBe+++f/32nbt2dnZ3goNDZRkSrcjiyty5wEARL9YQkEyrQr1lriKzToGcKs5+8+eMhXXq5QuIufY3P8KeP8heUBlmzwewmuaQttMkcKs18Ozok+KvHBYaShGRWAoJT0okaUK5rEqDWQYGCZOmsNzCjygOimy+9DsMFkHoQxmFalu1SgovNVByYnAOqpr+Guw08Bd3UDbmaEOtVuvJLMvoevA9F1NFhac2CkwwgHFkKcVmUb4poDKK3mKaoneMMQV4jTsgmTIEbOJGgDNJXX03yyWkAJhFlir4zuqfpQmgBKwGAl8iCP2iGOvo7ECSpahWKigHIbi2CwAwYywG58+DlAxKpQA4BPegtIGKM7S39+Cww/rhhyGyjEBvkxOTiOMmonIZ9973wJpnNjyzvq3WRjnDhhgElDmdgkuy3mVpUtiX6f44BUUie7gsKNz5MWCg+43Ns5gNWb4BAlpxxp2KSVFVfiBgOYe03MHxEggHSiASvYS1GlmawPd8lMolNJsJGAd8R+sXUqC7ozP+5tcv+PKBBx60fPny/V4eBD50PmrAJIyBi//SLtZNkl2a5eME9OLnzhmAx3yYLgW/JKGhwC131ms3deB+dtfQbuzeMbHmpsduPv/OO395uZReCk2wg2azCSG5Yz5oeIEHGIskSYl87/tkB9eaLPLWQkgJ3yfrPbmP0qIA1pruw77vo9loEEuesYKiTe/NgjMBxqxb5BJw7aXcGBddP7v+uo+WZDDYqrewa3gE8xcuxvL99nNQLlfAM4ann167+j//89+/ZK3VM0ugme1/y3b4YYe9YsW+y19GPTxW8EDgGvp8mkOqs73KLvzq1w88+LBDDxodHUZbpR0HrjwYo6Njdv8DDmbcEtCwvbMdcRqjr38Wdu3eBWYw78AVB7YPzBpYs3X71kenP//o6K49Pv62bNzyCIDTCPjHC2dKvhXiD4BPfeofvnXfvXff1d3VEwwN756JKJrZZraXYONgdOFnaeYAJwKZSpGkCS0qmUWaxkgTop560ie1yFBxJ6WA9AWUVpTfC4MsUyiVy+ju6YI2pBzXJybRjGN0dnbB9wKkqYI2Bs1WC2FQEqecevoxB6xcGXiedPm9ABMMaRKjUq2grasNg3MHMG/OXJoh1BY7d21DphOMTYzhsV89fNOmzVvvBjwopRBFJQhO8SxpkiBJW8i0QpIlNO8nKZtTaw1f+jRbyxkq1Ro834fKFExm0dvbg66uToRhBJ1qBGGIUrmEKAxhrEWSJqg36vADH7VqDV2dHZg7ZxBpptBWa8f8+fNgodFqtaDSFBMT49iwaSPGJycxPLIbW7dtxu5dO1CJQipOwNCcrGNyfAzz589D6PtIkgSe76Faq6IZx2i0GhStlGpwRgCWqFwidc0BVEZGRwkGJSmCg3ECfNHiJ5+XtUUMVZamLoaZLIR+GEIwWuhLn6zXUViCNmQvbdYbmBidcJEvmbdk8aIDSmEoLICoVILwJMGkXJHLnqd+ZEzAE5LmX9zXn1n/zOpNG9e3JibG0Wo1MTnRQJKmFHfl5hkZtwCjMF/OGTKVFTb76VZfYGrudar+ZHsWjC8anRnPU+z+jg/Onl1NogAJGWMKxTV/d8a9L2qAIM8PglKqKOA555DcA3OWK89lMXu+j3KpDCkkmvUGJut1GGvR1dGF9hpFEhE8ibuXQvvRPus9sdyJ7b5cbzQRJ/R5/vivHl8HWKRJgjTLMFmfcFnT9Np0pgCt6FgyiphI0pTOMQ5YqOK9GBhnrbZIVVbENWmtYUxG9xlL9w2izedwPa+AP3mehPQ5jGVoNppI0wTCo2zXZrOJHTt3orevR7785UcN7t49hEZzAtYm2L59G+r1JuI0g4IC4wT/ktJHfbIJBoYwDJApiuqpldsBAKuffuopLwh2DQwMYHxiHIwB0iNitCc9JHFKyrebu9Wajp141qLJuvlmA1vMkDqvHLizS4NZRGEEz/Op2HRKMOy0QhM0j6q0Iw7nmceOdKyNobxZnZFa70soQ4p0mmR4Zt0zUFmG9c9seuqd7/rzL4+OjYwAgBQ+Qj8qQHgAQ+ATARsO7ATjcnvZVHNp1kAPBgb6wfdoNNlilAMAWs0YaRLvqtaCix7+1a8u7emdlfb29qEU5WAq4azIDEmWwXNws0xR5KbRyl0/1kXn0v1IORo9zaDTFRWEAWQgoVSGLI3d7UKCcV4wAGhenZpIxlpYRn+0yV7SD/JPf/qf/vLUE088FgBkILFx02bss88+OOLII13DJ4PnBQAw8tnPffbfR0Z2PzGz/JnZ/rdsjLGBN73h7L8AILRzszyHPaksNqxbjx3bt+Hlxx7Llu+3gknhoRRU0ZhsoL29G709s9j8ufMwf9E8LFq6CF3dXejq6YQF0NvTi+7eHsxbsOjAz37uXz84a9bctl/3mn70ox/9YNeu7dTMdSNUG9ZvwMjoSPEz1/zgh/d98IMf+bsfXfOjfwKAmWJ3ZpvZXkKFF9ZA5TRXT0DZnPzqQXoSaZIQAIkLJGmGKBAuqoSBiYDUtjQB5wQ84uCwAoiTFEmcIEliRFEJBhphWILKNIQnEKcxTCvDxOQEMm0W7bvigCMAUu5ozcTRTFpY/eRqDA7MRU9fD1oNmtsMoxA6JRtbpVrBJZddvuWiiy++uFIt7ZBSYnJsEnEQwyqDarWCVJO1rVKpoT45Ds8p2NDKvdYY5VKFKLhKA5yhs7sbRhmkcQbONeIsgWYGXBMZMI7JKhdFASkr1qBcqcBojSRJMDk5gVargSRuAYzJtkq1s3/ZkvbFyxb2z5+/YO+VKw9cWZ+sd8bNeOcdt9+2+p577vvV8O4t2z2Pt5/x6tcccNThL1s5MHtW/L0fXHnL+rXrb9+ydfNEksYoRSFSATRbMVF5Zb7o1ZThGwYwhizbQ7uHiOQqfdi4BcvhYmDIapOprFggqyxFEJagkUJymlnTmUWrGdP+1gpxkkBlKdoq7YjjGAMDA2hva8e6Deu9BQsXLABoQZ/n7j5LrizqTfasOtECxSJ/3bo1DwNk3U0zBRkImNRlbGaZiyuxgCAbrE0NRG77dAUZy2FKLrqHPbsIZayI/XnWh+pzi+DpyuuvrWGfbyiY/bbV7dTjTxd9p9GOyafrfsAY2ByaUxTDblbIMiijwDjB5xiocZQlZFO1jhAc2wSZzjB79ixkSYZmvYV6o4kwCtsqZVJ4URwvNq2BMLXXps9k5xywMArg+x42btwwtG7dmm2e9AicBEvKq7MWSymgFYfVgBSkIsNaepv5vuAUMYGcPpznoMKCGQ4mPCo+XIdfZZnrsgswy2CZRbNRRxiFRayXkJLGIwwDVxrGZohKIaQnkKUJtu/c3Sa8cG6iUtz6819AMIaXHf1KtNU6kLlINk9SHvjd99yBzq4uzJs7C9ooQACjE6OolWsIEGDb1m1rhoeG0F5tp9ikVqsAJJGzxr1WPtWkYYwI1dpB54psaRBd2EUyu9PATGtIWCidwWhb5PIWigdnyDJF1yVzJg/GyPGidKEcZ0nilGGg2WyiVq0RiV1Tdm2ctDCcjUJyH8PDQ9c+/NjD159ywinnwBLELC928yZI3gixbi7X5pnOLs5I29wNwNxctC1Oce7mdp9ZvxGf/39ffHDd+qev6ujsiHt7erB58ybU2toQxy1MTIxDcAHPl7CModUkYJnkkhokjDlwHZHgOeMEPlO6KMCZi29LMwXLyZaoMoo+My6bnds8jihPXycYHhdEEVfOpfBSbEuX7XP01Vf98G0A+MjoEIy2OOZlh7vXbmCVhu+yuD/8oY99/TsX//fFM0ufme1/+lauRHJwzuzBUqmy4h/+/lNvP/vsNx1LTVbiVrBpU0BgDJZbVDvaIDlHW1tbkQnvBT7KVYrgag/aiIHg0gTIBENNNqMtJBcYmDOAd7zzrWevXff0IwC+/EKvb9OmzY+cfsZpf3vZd7/3rzu37cIFF37ri9+59JLvHXXEkfv09PT4O3fuSG+84YYb6/X61ssvu0zMHNGZbWZ7iQteYw24ZdTZVwqZSh10ysBkpCAGpQhSCNQnJ5ClKSnBQroYErKDcUlKsXAd9nqj7sjIVXjCg9YpqqUIrWYL/bP74HkC9fEGykEHlu+z8oj+vtnzWs0EgjFoDjBmsHP7TpSjCjw/QNxsIYrCAm5iNNDX1wcoA6vNmi1bNt88e9ZslEshFUaC8hatJUhNlmVQWYrQi+BJD34UotUaQRj4SBXRhJVSqNaqBJVJM2SGQFee9BFEITxJnby4GUN4AmEYoLurE2Njo9i2fTuGhjwYoxAnMXr7Z7cP9HbPK/nhge/70IeOPeqYYw6PStFAV1dHyFi+nKPt3e96l33owYeHr/v5z3dv2bTRO/vNb+5cvGRR9e477rbvfMfbT7fa/OAjH/3ofz6z4ZnhWrUGo+GiXSR8z4dycSd5bI3RGlortNU6EIYhdmzfUUS9MMaQJilsYh3ciSFLM0gXu5SkMVSSQgQcymiEUQmeL5GkLahYIQwi+GEAO8nBmUSpFMIXvLp0ybJFU4WbBWO2WFyz56vvipHMqR8YHhnacMMNv7jHd1FMzQbN7XIQDEkbWvRnWheQGuuSZvKZ8zyXNJ+BLLJ3qTosAFr5Qtey5ylw2QsIty9Y9LI/4iWaFwuWqgWX4MMZZVIbY4g+Cw7GBKmlLr5KMA6rLeK4VeSaWguEQYQso1gc64BoAeMYGhrGy489ZtHgwGD39Cp8SpizLzgGzQAkaYIkzuD7HsbGxsfrjca4sUCaknoopEDamKTHyOjxZECuBKsyWGOcCsnBmHE5r66gy+eamcsXNhrMFUh5Tqsf+oUFmFkGrQDJfTCQC4BzgngxCmt27gZ6R5VqDdu3bUdUKvUuWrJ47pxZs7F42VKkjQQ9vT2uO8ghhQ/OGB58/H5ccdUVeN9734exsUkEgaQcaFgITwIA1j/zzGZrFLIsRltHGyYnG0jTBKHnOYXewJMejW1kUwphljmoks3fMqmLQkrHUMjR5oB2RS8DQ5Y56yrRn+A04cIqzIVwhSaBmXw/AJAii2nf5HPxVgFh6INZIEs1GCxRocEQBhE6uzvBhWj98z/+638vW7LsZQvnLxxkrjCENfAkjYo0my2UyyV3njrYlzVFNBQMwCTN5U8RkXMIjEGrmWKi3swOP/Lop55++umhZr2BbUmKZqNVROfRJWEALmCVhoCA73tIspjukZ4/lVNsLCw3UIYAVZ4nCV6oNVnGlQZjxjl/KRkgb6gwm5+Te/LlrH6u6+FPufHQ7zv//PPfu3zF0sXjI+N46vHH0WoqvPLE4wEwaJNicrJuu7u72IbNzzxy9Y+uvuj8mbzdme1/4NbR0S4BzD308EMPPvtNbz7q5ltuP2jJooWLo3LUEwUlTrA+l7jAnqdXzBm6Ojv3+FQSghfZ7dMb2pzxInYs5zIIQSM5KtMIQi867LDDjv91BS8A/PQnP/uPVx577A0To5PJ02uefOL//fu/AcBzyNBDw7tmxgdmtpntpS5482zLnE4puHAjSaS4Cc4RtxqQwoPgkuyCXCDwSF2hKB8JLhhUZmC0omKEURGdKQ2jGDq62zB7cA7GhscBADu27YDgAus3bpKnnvaqI+YM9HupI5eWy2WAMcyfN4+yDpkj4DmNyRgAArCZQb3RhOf5jzcm66O/GvoVPCkR+D5FeUCj2Whisl5HuVJGGhMwqt5qwjcZ2jvaqNBPyQ4puABjHM3JJuXOBj7KpRLZnY1FFEUoRREmxSQ8T2J8bAxP7NiGNM1QLpfZ7Fn98+ctXHzoya867ZUnn3T8oYvnDc7bunFrx+y5gwij0BV6FpOTDYShD98jy3WjmbDNGzd3H3H4kd1tJ5+CPJbl+ONPRBD4S0ZGR/5m//32f3z1k09c1hAefN9HW1s70jRFkiRIk5TydAOfZm9hEEVlNBpNl9WqIT3PxQzRjHYQhGAMiFstKK3g+yG0UvCkB8AgzVKAcVSrVaRpCt+LkKkMUgq0WnVUqyWEQYSnn3wag4Nz9l00f9HiXOkzsHtkV2IPNXV6Vq2dUuyYxPXX/fzO9RvWr5o7by52De0mWrjR8DwfTApIAGEQgicpVJbCMk5RMdMWnNzNuhr3uNZOPZ91SrM1dkrsdZTqPSo5ixcmNP/ate2voWLtUSg/z89Ne768HpgedcLAAe4AVXyqCMyhZESp1I5zxWAsxbRILoiO63mOMq6htCr2z+jIKMrVMvp7erF161YYZRYGUdhJ5yoprPl86fQ38bw9AWMhHS2YCzYGjslSOYLgAlq5+BZtXENEIMsyJElMCw9BBRnFgzrF0zUpOOMOuGWnKaOOjmvhFjUESCK1OwMcQIlx4g5x5oELRrnifgRjtAM1+Wg1G2CMw5oMAwODcxfOn98DAAfscwDl/VrKVARnBRRFJSmOOvwILF28BGkWo9LWCRigt6sPYegjTjOlobaCc0zUJ5Gm7tqyFlwKJGkMgGjSnKOIl4J1Vw/jRdwTc+8LrpllC9AUjZLQmAEr1GHj9iHjDMwwNwPNoU0Gow1R+RlDY7JBTS/GAeMIxUYX2bzNZkyuHacmt7W3w1qGibEJ9M/qx5Orn7zxokv+++v/+Kl//CxnjMNl3IJRAd9KU5RKJXddkuJOzwVkyrh7unXOal6cVI16E1kaw/d9/PKOWx67676775tojI6NjA45OFXkVFaDIKBGbZqkUEohCH0Y5iBdzBKAS1LklJRkT7aWQH06s8U9mXECajEmivih1GZglvZpAf+DzsO9SFUyhvY/e2k+wD/8Vx8+693ves9rAWB0fAjj45M45LDDoF3jSwqB7u4uBkCd98XzL9q8Yf26mWXPzPY/Zevq7ArnDA6uOOyIw1950603H1OtVfad3Tt7oFyuiGd/tFqQW2l6sv0LXXZmj/51Poowza3EXcMtX4cwVjg9gtADgKHrf/7za8444/Rf+/rdHPxDM0dyZpvZ/hcUvJxzUkgYKQj5/JdWmgpfSzEk1hh4ng8hGCyjeVDGGSQLICTFNEg/ABgQJwmq7W2wmjIrS6USxsbGofQGlIMQraZAf/8sJK0E/QO95VNOP2HvRjNBlsVEtzMGXuhBZaQWjE6MQWuD7s4uV9VY+MLDWGMSgvPkjjtu/2XcaqJUrSJJUpTKFWirMaFGKUqnUkVndzdgNMrVMnbt3A2tMlTLZcSpgvAk5UZqwsgHgY9aew3NRpPyhD2B8fEJjIwMQRkL6UtIxtGqN3qPPf7Yw88663VHH3booQfPmTOwtKure7YQorgPL1y2hFQbpSlblTNUymWsXvUEJibqKJVKaLRi9Myehf1X7ItyuYwkSbFt606gBCRJgtkDs+CHQQsA2turiOMUrVYLYEC5XKJsUM9Hliaw2iAKaYY2SRLESZOo05LozEppKrStRRqnsAYQwisybhljiKIK4lYCbRRGx0YAcEguUGtrQ7VWwvjoOJI4hulV6OzpwNnnvP64nt6uqOXijBjnxRz2dHDDdHPxlGuVQWUa3AOuv+HGGxvNph2fGCfAWf67jENwOgezLAWMJrsnp5lzbXRBpBWCu+xRRgAgB7LKbZt7vBZuC5W0KHpfoAj9gzf7Qorw88Or8iI2nz8UeUyL+4H8/TA3hGmcEgXL4QkPxhoYZmAZKY5pmlIEjB/AwCIs+QikD88PkKYZQr+McrmCqFQayLO5GX/um+DPV8e7wtzzAjSyBgDg/vseeGbH9p0jtWoNxmgEgY9GswWtLcLQd+/FEjCLkz3dya/FXGVuVabMqikngFEOusaJOswYoBU5OUjt5FRccQYpOYH1BJ3zcZJASgkuJLQ26OioIIpCGA20tddQKgUHbN68qTQ0vAtcMCyavwTdvT3g0uUdAzDKYr99l2P/FfsjCCJ4HneLLIYNG55BZ2cb1q1bt/aRhx5d193Vg/a2dmzduhUtrei5lIZOFcqlMrIsJeiaIwMzTg1IAwNmKJ7JOuueNe68sHnergO1FQ4EUsgFp0JYcA7he0gSStlgeZxTDngxDMIV19KT0EYhbcWQMijixsAsKrUqskyhXp+EtcxFvnmo1ir48nlfu/SIQ4865tSTTjrZUiIbNVM4Q2d7mwMY5vbmaT4BjiLuCtYWlngA8KSHNI3x+OO/2jI8NHx7fXLywaHhUcogt8QdaGvrRCtpIo6brklnKT9cKRidQkoPgvswyrjrm7KLde4ksKTiEpTNUcCthbH5rC69rnxu3LWa6OvCvSFtwJ73mv4TfXhHYf/3r7n6LZFkwTMbtuGq738f577lXHT19kJlKVpxDN8PIQLgiu9fefX5X/zSd877wvkzq56Z7SXdGGPe4Jy5y0484cRjv/vd755+5MuOOrRSKhfzssZYtOIUnkcCRHGbYHkWAHuO12gqedAWri3iXRCtnxgBDNNIV0Xc2bTBIUgpMDw6su3jn/jE//vvC//r8q999SszB2xmm9n+rxS8SiuyPeoMnh8giig6iGIKFVKVIghCAAZJ0oIQHnxfIlMZhOeDWYY0SeAFAQV+u+gLWCKgAhxxHCONE7BKFVGphPGxCfT29SGOWwCz8/pm98wXkoGLEKUoIKVBUYQIAMStbA8IJmMMzUYLmzZsxe233f7gTTfddPfe++yDeqOJkdFhNOMW+vv6EAY+olIJjXoTgechSTRUqlAql9CqN6G0QRQFiOMYcRwjDELK6gSpIiMjw5gYHyue148i3tlTGzj0sEMPOffsc4/db+8Vxy5atHDvIPD3qAO0cRm/jDnFi+YXjdYwmYFkNBe3afMGpKnC8SeciFn9ZJtM4hiNZgttnTVYMJSiMi67/MpLrr3uup97fojJ+iSa9SZFswiGOCFVJo1bNNMKEreM1QAzUFkKaEAZ5kAP1PtM0gTGaoJLGUNWWRf5E7eIqgsmkMSOgp1pJHEGLppIVIYwLKG9vYpqZ2XecScRLAVTI4PORqphLdmK9hy4QTGoaS0gmMTDDz+y7fZbb7sHVmN0ZAy+76FcLsFoiyRJoJWixSoc+ZXzAuLDwWgq0FqXWWqmJogL4K2DQPFpCnNO2c6VVM6mQoN/r0L391j0PksayknTdo/nZ9MyeZ0FK1d6wWFzWytjsJYaAZykdlcsO2XNLd05Y2i1muCRAKyieKJ6HUoprNhv314AbpY9t3a61/A8O8W667HRbKJeb6Czgyxljz722CpYst9aq9FSlDkrJc0YK6XIhUGe5CkYk1PnGWPkNuF5v94V/K54IXgZNUHoORj2OLDOYSKkRJopmnd1JN4kjRGEITxfotFskHqsLPY/cEXf+z/w3iP6Zs3C2MQYRsZHMDS6G129PbAuesIaCyEZIBjqraZTMBmSOHVjBFVUq1Xcfd+9j6xfv35Dta2KVtxCrb2K3bt2E5/AWoJluZlgqlUpt5ZLD0brYhaAC+6ih6Z0C85FEU8lhKBC2M1sk81XFQtHrg2kI1wbTYWukJIaJJwU7ziNYdzcr5ACnhCk7ApFzgFlISGhbIZMKUjBMTS0G+1tHZBMbv7if37hq4cffMgBHR2d/VmqIfzccs8KC/AepzpjkIVqSv+e1stB4AdQibEXX3zl3Y899uiPt+/YutFai9D3IRlHs9HCZGOcooK0piWrAdo629BqtVCfnIAGB5NwjTfmoH3KNTVzBR1FFBQrZoiJ0K80xa8xzomPB5pTlkKCMQtl9LRr1e553/gTbSeddOqpxx5z3KGrnliFx371MLp7ulGrlgFY1BstWGtQrfrY9My2p//qY5/8V2vt2MySZ2Z7qbb2WtuCN7717FNuuPnnp+63bMXh/bP7u6aKXE2Ed9A1F/jetHvGdFcYm8JRTltPMGuLZIN8jGlqOoljeqdWa41Mp4Bh6ZatOyasMUPr1q7ZcMvNt22ZM3fO1jvuuf2OKy+/4lZrrZo5ajPbzPZ/qOBFrsIxURRruZUuh/twzikz1dnk0jQm5YxJKGUo45DTIjqfOWw1GiiXyggiH0maoFZtQ6lUhtYWSaqxbcsOjI+N4NQzXnXkwKw5g1ww+NJDs9WEYBxBGLqZMKCvtwecMwwNDyH0A1SqVSRZgkq1jDXr1q5Os2RLksaYnKyjXKqCgaFUKsFqAw6BUlgiGnMYoNFoQCmDnu4eWJBqPTk5CcCi0Wxg2/btYMwibjUBBjZrzsDA3sv23u/oI4849NCjjjhw/wOX79Pf079Awnuu5cZaGABJphB4HjhnSHUG4ZSEOIuhEoVyuYx9lu+LvfbZG8ZoTNZbGBoeRX1yHJ2dHahVK7CcoTmZ4oH7H3rq7z/5d18aGdndKFcqaDWb8KOAMlYNRRBxRytWhoqEzJFuc+UIYBCMIQxCGvHU2ilsnCyOgoMZiyxTRHG1GmkjBhhHuVSG7/uQnkUrbkH6HO21DrRVati5azfCarTPnDmDywHAE6IIYbecwQs8gglpDc9FsEyJplM5rpAM6zdueHL38NBGLjgBaFwR43kS9UYdxmiys4JBCIkkzaBV5op4N6PLppRczghMQc9hpwo3gyLyNj9mJJLmM7/TytbfA7T8+yq/pGhyB99lU9E0bOq7uULGnDpFC20NWLKxMsHAmEWWJaTkOWAXE5Q1ygBwT6IxMQlrDSRPYKRFZ08HBubOwZp1a8C0bQOAVrOJcq1MTQFrkcQJZA57ex5t2vM8VCtVeJ7AyOg4tm7dug0A2jtqiJsJlMrQbDbAOEeWZLBWgblmEBVpDmDEckgVc0WaJqqx70ErA2Uyd/xsoYRzLtwsr6YmDhdg4EQ314Yo7FkG7ezQ7W3tBC4yBipVmEwnoI3G9h1b5ML58+bXqhUsXboXbrnlZlQrNZp7BdmxhaAmXKPRxNDwKPp7eotGVaZSzJrdTwX/Q4+sBYyJoghJlsI6kJJRmiBIksGm5GYBZyBospyWv4up92XNHqlUlk1l1MIyaJO/53xudyqrWClFhT6tJmEZOT0Yp3tCksbQxkDCNTcMPZ/nMVjN0YpjaFWnWf3AR6kUoVypYNfu3Qh8icVLFuHmm2/66aWXXHr7Bz/8wTd4gXBxRHwP5YQaGbmaS04BZvNrdnoxDAzvGsFVV3x/81133HHTk2tW3+EHgSJXCuW8e9Inm7whGj/jDHErxvj4JLk8OFmYjSnsEjCW7OBwirYQ1ChSVk8tihmjzGbnGoE1jpyfN34onzyfPy6Ohf3Tq7u17r6eL3/xi69vKwXiF6t+hQ2bNqBSacePr/kh3nj2OQiiEgK6VtW/f/7/XbBp49pHZpY7M9tLsXleUH3jG88+6+HHHv3zBfPnHwZXflpYWj86KKELjijWmfnnca7q7lHgTnWIp1Lp2ZRim2/10YYdb03seOjRh55a9djqbYNzB8fvvvfuzQ89+MBawcXmkbGxIWhM7N61a2Lnru0xAHzgA+/FFZd9b+bAzWwz2/+5gtdlXebZr2ma0iKTcVISGNFPLWgOUGVUTEnhOVCVhuf7Lrc3g+dJaKsRxzGpvlojDEJ4XEIrhdF6E9VaDRYWtbZ28Wfv+otTq1GNaa0wNDSMerMOzhh6+3rhewEt4ByhdsuWrejr7UelWkVjogE/CDA4d+6WarUDDMDA7NmQnoexsVGMj41Dcg64wo9LiSgIkMYJoshHUA6wdcs2tBpNpIpo0kIIBJ4fLdt72fIjjzz6yFe+8pXHrDxo5YHzB+fNf06dYtxCPS/dcksiA0q+j1SlqLdSSC4ggoAItn4A7flQ2sCTnOAumgO2iYnJcTQbdbS3tWN8YgKdXZ1oNhu7fv6LG85rxskD1gJaZfC9AIJJhFEAYyzGxhIADEqTzZMzV1A4lYuUPwL71BsNp7q4mUnLnUUQ0EbD93wwIQAYWEF2ImuJ/qqNRbkSoj5RB7RFV3s7Nm7YjhNPPnGf9kpHNY/I4cVzUtFmjKMm2ynxbTqp2Ti66xOrH3+g1ajHgR8SbAwEO2pkGZiz4uYRV5kiBSwn3k4b0HXHgO3xQWgdiXHPEVq7hyCb7wdWoGVZYbH9vRTf5y2Wp1Ov2B6VNSsgXnmUDF2XzKnl1oF0cpWXCiNSN/P4GeGsvNqSCqldJi4phqTu6zRFqVyG1gphFKBcrmBiYgJr1j6NOGli9pyBDgB0zJUzhDGDNE0gRXmPdzE1hw34ngfp1EYOBl/6TQBIM4VWq0VFt7NaE/2Wu7lKDypTheWMuwzf/NwDc+8jzQoRjQtWxMxwp7pyIcCFKeKaGAw4F9DawkKTBdop4RwCOkuhtEa5EiEIA4yNjmPV46u8jZs315Yt2we+J3HsK16JUil0cUcc2iowq6FToFapYVZff2G9NpbI2SrJKJqoUtkNAL7vI1MGzWaMcqlUWJGN1Uh04kBUmmz4nEMIihXTShfnZL7gA89zv00R9pU3gaaU1Hz/0fw1NZ8ooik/v6zlVLz7Pgwz8ODyIx0UzRpDjcEsQxCFUCrD5LhC6IewkYeJyTqkJ5HpDE+ufpKo8Dr9JYA3WGuRaQVhBY0hTIOLU+Mg7025e4+D0AAWw8MjaK91YPOmLbjt9lu2lmvh5t7eHjU+Ucf8wbnYsWsnGs0Gap01mMxgvD6JIPIRxzGMBUyWAdaSPVtbKKWJgK2JRSE8H5xzKJddDs7gMUcRNzmdOUWmqKEgJfEdchie5dYVwrTPJZfQLqboT25pFjhu2d5LDgGA4046AdsvGcJBBx+CIw49FFppGJWCBx4uvfyK6y/49oXf++pXz5tZ7fyhu1wINjB3zpw5c+a2N1v1nY888PCumb3ywlvgB3LRwiXHnXf++e9+33vfcyqA0vTPWsqNpzxrbaaKVnJj2T0+p+2zCtmiTczc/d59Tg4PjYw/9fia9Zs3bl27afOG1bffefPqzTu3rF6/fv2a8dHxBgCcc/YbZw7O/7GtXK6ISrksd+3elVpr7cwemdmet+DNLXNGO7KuNWCcww8DGEWKhtKG5tQsZWoycJqBUzTj1Gw1IdOMlEIO2MwiDEP4gsPzOFqtBsK2DpRKVWg1iba2Cur1SQwPjy8qV8oHCwGkqUGqM7R3dODxxx/Dzp07cOghh4GBY3xsAkYDSxYvQxg6qwtn2Ll7aPPukd0PVaoVCEkqRhSFGN6tkGUJyuUytAWY4KjXJ5BlPiYbkzCTwLZtW2khrll5ydIlex9xxOEHnXTK8Qfvtfc+KwfnDi7tbO+oTt9RWtM+IuAOAU60pZlSpUiJltJDFAXItEaqNDxPIPQCWAukipRUAQsuAMEZspQU2M6OdnR2tBdgLgB44onVD3/qU5/+4vU/v/7ywTkDKJcXYOeu3ajVqmjU62jWWy5HkkH6lGWrjUZmFbzAB4yBcjPJzNmJrYt9CUMf2tFJhRSwMEgzDS8I4XkSWeZszIpyLbMsRZop+L6PUilEW0cNE/VJxGkTBx24cvl0hZsJjjhN0ahPwg9CVKJyQQcu1Eo3Q2gtMDY6jkazjoceePgBt6iAthqSCcrX1QqlqAQLA5XQ0lMrIlTTfCsRV62hTNY8C3SPex6bFqvDpgG09uRoFeAaa7HnTC/7PRRf++uqYDZN1c2tnbaw6ho7ZcuCzeOFLMCclTXPIHTRDHlcTW4LZpxDp9opW1RUWu0ssk5lq1TLiJsJOEvgeRKtRgvVSpm319q6AKBUKYMLVhSwYRBCerLouNs93hOmYpEA+IE/EafpTgAYGx2FyRTK1SogPGRZDIDI8MqyAjpGM9k0SkD2Ul3MqNL1p6dFE1lMt3dTayOfaQU4OLxAQisNbUjJ9QIf3BPgYBgfH6M8XM5QqVYpustr4aSTT1p+2CFH9LXiBFpTpJk2poi5kp4HAYZG3MTI5DCkxxF4IbJEIUkyVKpVgAlkWdoYn6hvyM/nifFJpHEC6RoN+fHiXEAr5fLNybGRZZmz5BNEcKq+yenV05wRrsFkGEU7WUZqL42VmGkwsymF2FoDwSgfN05iSE8QqT3RYFxASmpalKII1kZoNhuoVqrIYoVKtQIuBIZHRiADia5yGc3WMABg7dNr7vvJtT/btGjx4rl7L11G52JOF7dTagzL4U/MQltDjVV3TkUR8SA8L4C2uhlE3iT3OOOcWyEFkjRBmqZo1EGjGVajUa8TmM0aB0ukfUv5yzQnnCnKfPcko0I9S6EVNUSEkGCWbPT5vrTOFWKLm5Ypmg7Wod25sztzSw0h/AlJzbPnDu7z2X/8zNuXLlrYtWrVY2hvb8MhB6/EYYceCmuBZpygXC5hx45tu772lS9+O23Vt8wsdX6/bcXyFYuPP+GEQ0cmR/f68le/uvz4E05YsWjhwlm7d+64btk+e7/vqVWrd87spT23WbNndX3wIx98zTcu/OZZb3vz246cGB+r5fGGOaOBcb7HqBFnU/8WHNNUW1p3Gsb2pKO7j3VrCOD32JNP1D/1yU/915Z1z3x33dNrHh9rNRoA8Ff46MwB+T++dXZ3V7769a98cP/99j/uiVVPPXHW69/w3R9cdeXdM3vmpdtmDwyycikScb2pN2/f8kf7cPR9r+cdf/bOow/c/9CDuWV84zPrN95+601PPPjIg482kmTiOQWvFBKpTovxRWudKpEpinlwygAsI6WUMYRRmebPdIowiMAgkSQxMgWURIggDIiaaRRh3lMFKT2EYUBqjeGYGB/HUUccun9/b3dPrtr09faCWWDpoiXwA98pgAblShnccuzYtQOdXZ0IwdFqxrjie1dc++Mf//Cu8YlJTDYayJIE5WoV8+fNRZYkGB0eQ71RR70+QRAX6cPYDG3t7aUDVq446swzX3PCYQcdftTSpYv37entaZtecJLKRZ1DmlsTZDvkpGDGcQJrLcIghPVp/oSUUgIFRWHg6rvcpkoqkXBFX76YZYK7CCWDp59cl8Bjj19/w7XXffmLX7sySeNfuYgXio4JA6Rpgma9DiFp/wiPu7lcRhReZahYcIUDAyn0xlqCVzmglDXGiZgMnAn4rmGQpimklIjjGFmWkXLnefDDEKUwQrPZhNUGk40JdPV115avWL4vACilIXMbY34eSaJ359h/6+jNpL4awHJ0tLdj99DQrnVr1j4NgOip2sArB0CiYI1FphSUpugUyTmRavUUtEk56BpRwVWhfNFsp30uQfXZMUR5wU6vysUX2aJR8OJue4KzckXZCU6Fsjxlk7ROaGZTErkrdrngrjDSRf4wKZgg4rFlYILBcvp9zylfSZJAeoIs4z5dl6UwQpYktSiqtFNBxaE1LfwnJybheXT+GeRAKYBK4efGTt1z933r7r//gTXVSgWe76PZbEBrjVYcIyqFSOIYlllISaCk3H5uDAPj04BcjLmFUG4RoEWQcfOrdC0KIse7+VUYgMupjGIpCcgG7opAy2i2v1xCM47RaFDBlCQNvO6s1xzZ1lYrPfrYY0izBHMH58Joi1mz+qHdSW0B+EGALtntZmnpvZfKJSc/c1xx1Q/u+f73f/BQqVJBkiTwPYnYGjTrjaKI55KOVWYtuKWM2CzLqADOmzSuOGSMOTe7KZwSzNn3lbuOsywrmnF5HpjJ4VCMwSjjFBUJozU834PPyfbNIYvcXMoABpIkc0Wri6izBo24gUq5glqtCqU10iRDKYgguzguvvSSzeW22uaTTjhx7h4cVYuiSCzm6pz7g7sGE11yDKVShZShKAATAo88/OiYMZRvtmnTZsrRbbh5Z8FQq1WQpApxq+UQBIYI2HEKKQUB7JS71xmDLCVKdd6csdY4m7Nzpbh7IKzbXwXrFUXTjrn7rDEGSmWuScbzO8efZHvXu9795g++5y9PuurKq3Dd9T/D+g3r8apTTsVhhx1JsWOhD86AK6+46mf33//Az2eWX7/HXZqx3nPOPufs62/4+Ttnz561Yo/PDgb09fSfFcjwAd+LPp9mrexP8ZoOPeKYY7/xtS+/u1QOe++/997HL/7OxT++8667b201mvZ/0H4LL7jgvz717ne/80P5/qrV2goiOywAFxPk8vX2SC8ogFT555/7OW6f/QlqYA0raPw/vuZHV/34mms+5qjJM9vzbGFQ8vv6+mfPmt3nPfboY5ubrUb8x3quqFzp+8Lnv/DmM199+lG33nTzzh98/5obr73+upubcWP8xX6uU151yrlvf+vb/w5AaeXKla886zWnH3f0kUecc8dddz86c9T/dFtUqbW/7W3nnv62t517xu2/vH2vUhj6gvNdP/zBD2/70Ac+dPXGbRtfNJp5VCpXznrdWa+56eab3/Gyo192NIBi1s6ozzTvuefu6w4/7Ihv3HvfPTdNV/ylMrrI3QUswjAA5wJZk+IcsoyIl1mmIIVEe0cFaaqgMoVyWELmQELlchVgpIaUojJqlTZM1McRtxJUa22I0xjxUIJqpQrhMwRhgBX77XdIvTEpjdXo7OqG0gZJHENpg2oQTakbgiA8s/v7wQXDurXP4Lbbbl/zy9tu/8nRxxw9NH/+fAzvHsPo+BguuexSCMbR2dOHNEsxPjnG9lm+fM7BBx64ZGR8ZPa+K/ZddPJJJx6ydMk+h/d0UV4DAEcANs5iA5f36SJQPDm1hHO7LlUJjLZEXYWAdDd0rUm9Em7h6e7HznaKYmHEhUQOc06aibr4ku/85AvnnXfBxPjoHeOT45OVSjsRRrXBxMQE5WAasp4LIQulyBgFpSyE8IhqaOh3hCdgtCP8ClIipKTFbpY5hTTTSE0KLriz6Wkoo5EmCaJyBHCLVpIAMAjDCJxXC7Lp5EQdy5etmL9k6dKF9PFjYEAFfRAEtB+FI7Yij/ZwFnAX8q6UQhBIrHn66Ue37dixrlKpusInQRK3KDpGcjBYeFzSTLcr441Td4UQBbCCSwGmFfI4IvasApdiPveMNXh2KTpNC8YeSOkXeaMCle2hJOfF+XTrdQHisIBgDFYIAnNBA1YUxTx3hRF1zikTVUgP0pdIkxiS+5SpyhkCP0CrkVDck6XjpaxBqa0a9s3ujQDKus3Pdc/34Ht+8dpp7lvsYVHX2mBkeBzapHj0sYee3rlj++aOrnZwJtBqJQ5ERQ4RKnQNtM6mnRNkuc6jliwYhFMoiVpMkT1SeuCGU+ySO2hS0riE5BzM49DaIk3osZmw8D2fRjUsEXul9BDHCTgY0lQh0SmYZbJULu8LAB1d7bjggm/h5JNPwSEHHUL71+bxxgQ1ktLdnwwgPYHA+kiSFOOtcfzs2p9c24rrW9raOmCUQbPZRKlcojloQQ2nJEmct5fuGXEcF3O5jDNnL6a8cwa6Vp4NMWPuvPCEgBUMOnMgJUYxG3za/rOFu4Iq5izLCieEgQWTZPnOlHJqOhFLBZcwGohKETKjMDIxDG5pfweBBz8IoJXGwgWLuo8/9pXdvuchzagQ9IQorPfMEiWZO2ozZ+6CtFPgMwCIWzH6ZnXiM//4DwvvuvPOrpGxEbTV2jBZb0JYgUqtCmMNtAPTZWlCThUuIfhUk0hrF79lyELPwIrIJe7UJWZNAUiDE42Znh5l4mKt9riPMKLF5gqw4dNcJH/8rbtv9r4//PHVpwFAW1cVURRhyd774r0f/KC7Ngn2uO7ptZu/8B/nXZhlqjmzFPvdtmV77X3MTbfd/levPOZlp2Ia7shai2ajhSiK0Gw18LnPfvZ9l156+S7G2HestUoIjwnJWZokL2r3ww/D3uOPP/mcH/7givfPnj1rEQDstXTZ8eee+9bXfeaz/3RBZ2/nt0d2jbwoKr6Uku2/4sCFrzzhlXsJbsqNybpmPODt7W2Nn/z4J+vXbli3fnJs7AULpdNPP+uMd7/7ne/K742WAVzyQrzIwZk5r8FOH8q11JSEnkp3sG40iU9zqYHlMZoanudhfKye3nj9L66cKXaff1uwZMGCs9949ilXXf39k/bZa+99B+bM1ld9/wf37HvAfpetWvX4rTa16Yvc9JCf+vRn3vOX7/nzvzYG0evf+Eac/uozz/nxz358+ezZ/Z/btm3H1hfruWodbYvvuvOudwAokVtKICqV93nbuW87DsD/iYJ3Vt9cFqcNNjo6/Efpqr7sqKMOfNs73vG6BUsWD65avfrBa3/60x9d99Ofrf+dPpd6+5ZfdfVVnzjtxJNeDyCc9q2lZ5515tHL913+ur/7m7+75Nobrrv44Yce+oPuVaUo2uv8L335I3/+Z+8+B0Bl2jKU1mpSlI48+uizfnHbzYd+8q//9guMsQustQ0AkBwM3KM5MqUU0pgKXOkJGE2LH+6yC5UyaLUoD9NAQ1tauHrCg5AUF9JqtOBHASq1CkZHRxFUI3AhkKUJ4jhDKSphYnICk+P16jHHHnvwnMG5aDboM1mlCpnSqLXVnKWOFvLWoVjymc3u7i5MNia2zFswsOmIww7F4OAgWvUYYxMT2LVzGy+Xo7YDDlg5l3vygCiIjj7mZS97xcoDDlg8faelqUKaKkieK7cczrUNN/JZrGHyAkswTgRkANVytVBrrCEQi1aarJIOEpNbVrWlWJkCjuK2kaGRoWt/9OObf/ijH11z30MP/iLO0iFSuRmarSYajSY8z4OUAibT4JJUCZqzU8gUFb0UmJ4iMY60yjh830Oz2QIYgx+EzpacwBiDKCzDkwJNTbFLFEVlASkRBgE4E2CWipqkFaNUKkNwgaHh3ejs7kRHexfWrluDlQfst6gaVroIksOJ/pvE2LVjF3q7ekgZDjiacRObN23B/HnzEfg+tKb9wSXQqqf4yY9+cvPw7l31ru4eqCxDrVbB5GQDiUrBOZFUOTiMUW5ek8NyVsx2U+FP6nTRXIAle2IeuesyQKdmdfcY/S0umVwZf8GRPIvf8A32a8vc4oxi0zrZjGy4BUCrsOnm8+Hu33Zqzomoy2T9nYp8YTQbaabGE+JmyymENL8KRqAymgEHRkfHUK5GaCUxxseGvV27toeLFi5Cs9FCra1WxGgZQ1m0XHAwK8CMmyl17zhNyarsywAMfLs1VptMI85oNj7JUprNdtnd5BgxTi0jixuDgLXaRefYIpap2HPWgcjohCNVzzioVRAW1lTAQLjZYJ0ptJSB5BKekIAgG7PVFo1GHZZZVGvtkF5HW62rYw5As/IrVx6EwcF58D0fmdI0my44koTmRIPQd+KDm2EO6Trd+cz67c+sX/tLxjjKlQqa9QY86aNULoOBo9lqFKoGEdwZDKdCnINB+IFTq10ckXVjJm7+Nge3kC0QhTWQFdHSNLbApsVv2D2KOsoB5q6rZ40Gh3Dvw0AbQPoeZJ5Xm2XIbAbpS1TLVUw26tQcVTQrG4QBNm5cj1e/5oyTTznllGUAHISGuVlqd/wYqcYAUAqD6TfXqcYJLHzfQxiF2LtWW/DWt5978vnnnXebhbWeL6GUhmEMRmkkSYIEzN3/KG/W9z004xZlLReLZVJipZBE7RYSsJaYDVw49ZpIzVYz+O53tdKU+ckspEsbACeImjHkzuGMT80Q8j9NwfvWt7zx5MMOOWjFHXfdDmY5/umfP4fJ8QmUAvq8lI6l+K0LL7xsw5b1d80s93+nhTo75PDDX3fZ5Zd9+uADD9x3z6YjXR9C8KKJe/oZr5oTt5LP3PHL2w78xF/9Vf3HP75mPhgvX/G9K3fcedud995w43W3PbVuzdrfd6awo6uj8+1vffub777n7nMPOmDlgQAEMTVo7MxqM+czf/8P//iX7/2LY1591hkf/dEPfvzY7/veq22V9sOPOuKYCy+84DVnn33OCUEQDDz7Zz7xiY8P33//vfe+8U1v+sGjjz360ydXrd5jhrlS6apeedXlbwdQ0dpOsZXZdD5Gbpdwi1NGzfLc1gzn9pmYmAQYQ6VannYP41PXtQaN6XjArqEdd6x++sl7/zefe0cddXTvwYceNuvrX/vqujSJ6y+G0v6qM1718tNPP+NVX/jiF496zWlnLgfg52fiuW8+Z+m5bz7njG9c+I2LymHp3xtx80Wz5u+zfL+j/+I9f/FnWWqiOE0wMjKKKPLbznnT2X/ZVi1PAvjrF+u53v32t525fJ99DwGcO8kqcHjYe/nyff7gRpMf9P/H57/wuqVL91pw0bf/657bbrvllzt3bN/xpzonBufO7X3DG84589sXX3B8f09v5bzzv3TreV/+4iUb1q7f/qI0T3t6+cc+/pE//8nPfvKJ9vbOBQBw3Mtf8ZZzX//Gk5fvte+bH3/yieHf5nGOOfbYV1x3/bX/esiBBx1ujSW3q1uoCLeGWbzX4mWf+7fPffbt73zn0YvmL/voug1Prf59XvMxx73itDvvvetTK1esPJQctbZwp1l3rzHOnVkJo8EvnX/e59pqbS0A3wQAaWChkgRSSHAHZtFGgQuBIIxIAdAWViekHIEWRCpL0Wg0EPgBLeSaDbIPcgHf8zA+OoZGsw7hSbTqLYQlH7Nn9yFNKLtwcO7sxYLzvQAQkVkpGK1QikJIXyLTGoIxpCoFYBF4IcCI+NvW3obAl92jw0Pzfnj1j4YWLF5Y8aTs8INo2TnnnH3Q4mVLVwwMzNmro629vxxFzFiNRhxDCAnBKFe4Xm8A1qKzq90V8I4cOq3YKeA8DEWsS55Zbt0cL7OgbGILcI9Nm5cFjFaQHi0e845nsxmrp9Y+9eQ3v/Gt6x975JGrNzyz7r5Ws6m9MEQQlbBjxy406hNQVhO9VTCkKoNSKZ1AXCIIPRhoqEy74sZZo5kA4wxZliJuJjCa1Pskbrl5V+OAOBmyNHH0XgGVppRxaSziuAXfC1wBy9HW1g7BBJQy6OzqQikKi1nRFfuuWAaQnVmIPN9ToFIuw/fpXIC1kMJDminUGw0EgQ/GAKVcvvHE6PabbrnpVik9V1QIKG2glILvedCazkdDnFyC/MDAaAIdWeEaIYoaDDTPa6gCmB40b1kxL7RH3TodHPXs6KQXLHaf/UMWvx20Zg9KVlGgMMsK0HQBKXJFbD6DbZxdHrAQTEAKCW005Ya62V/LSO0DoXTcPDNHEATgYDTTzel4SE8ijVNUahGE5GiNtbBg8YJyV2dXpdVKYDRdj0wzKBiC1LlFvdIG46MTUCpFT28XjLMZd3d3goFhy+Yt24QUsIyh0WwBFvB8Ce4JMDe3arTOsUsIPI+uf2vc8ZuiZudAEiouDLTLYBbTKMSpVuDC/a4ju6ssdZRjRpAiLuD5IaSQaDVjR/um+XXGgVlzZ1fnzR/sa8UxYAUOPvBgrHl6Lfq6exEEPrTRUxTk3C7MpjIcyWHAsXr1qvvWrd3wRLVapfuoJ8DBMTw0jLZaG0QikGUKpVIZDBQPZk3ejEHhtLFsemSWLSzayGndDGBMAIauv+KcQW40RxFBRk0ir5irNZrI0FZTwSylQJZldO9mHIEfII7pHCiXK67ZqRDHibvfAykXiFsJdu/ehTmDc5Z/7KMffUtRKFJHDqnJyErvbOVB4NP7yxtR01yLjJHrwxpQzi2Ac899y5nf+Ma3rknS5N4wDGHBMT427iLLKmTjNhYZqCmrNEHcpGCOQxCg7AdoJU0wzlwkEXPnD3cjDBZCeuCCI0sTKHcO0lyuuy9oC87I9ZDfh/KmTBF3Zv74lmbGWPt5X/jiSc2JOrZs3oojDj8Ka9euQztNIRQwxM2btm68+pofXvHv/+/fZqrY33IrR1H0sY997P0f+/jHPzarv78vB/0xZ7/ljAGMI4xCaEX3oCzL8Po3vnbw+JNf+b4wCBCFU660N77pDe/etP4Tmy695JJLent7L9q1a9e63/FYz//mty/8pz9/x7vOna4w59n1HAxJpqzgnPV19h13zmve/E4AH/49zinvtFNPO+mnP/np+15+zCtOyK++QklVzknlCVQqla5jjz3u1BUrDnrlgw8/dED/rMG/3rF9cyt/rIMPOWjWcccdt39+72FCuNdM6QEWU3O4BZUfU2urZqOFrdu327aOjtbjv3pUbd68ITr7TWd7vhcU2bo524JLgVajiZ27to9944KvX7Jr+7bR/63nXm9v/6ybbr75C/st3+eUQ1YeeMXihYsv275z9/BrX//a3r5ZfcNf//LXnmjUJ35r9fqYlx972DU//OGHjjrqyDN6unvK1gKjoxOIwsA1ug2sZeCctb/n3e/5yPrHN9QZY59+MWBPjDH/W1//1rkD/f0DzUYLURiif1YvsiRxa8b9Dlm6dHHp6afX/sHOk56Bvr5bbrjptYV7gHFyVgIYHR37g1TEOYNzFl115RX//Oozz3yDtlacctJxZvXqNbcefdQx/3zHnbff+sc+J/Zfsf9BP/3pzz67/4r9Ts6/tvKglacsXrhggef7H83StPWHPscRhx962t/+9d9+BkCf1SQAcgZYbV42q79/GYDf2DDd/4CVL7vuuuu+PHtW//K40YInJbgnYYsMbKp7VEaOvCVLF5184YXfGt1nr/0+uOrJXw39Lq/3ta997dt+cf2N/+J73myjNbI0g/A8GENuXHA25Qx0a0fOWelt5771PQvmLLhu/Zb1m+B7ATzpEzSGcXDuQUrKr/R8H0J4iMISylEZUgZo7+hEtVYD5wJhUIIUPqTwUSnX0NbWhY72bixcsBi9Pf3o7O7G7NlzMDAwiJ7ePuyz7z6YPWcApXIJn/vc595orbVxnFhrrd25c5u9+Zab7JatW6zSyiZJYrXRVunMZiq1Siurtbb0O6m98ntXNi785gV3ffn8r/3shz/+6f2r167ZNjw2oZJU2efbjLFWafd3a22rmdpGPXbfM9bYqe/lf/b4fWutdo8z/TG1VrbRmLRGKWuNtVu3bjNDO3fbLEmKR0njzN5378NbP//5869+29ve+eHjjjvxoL6eWT4HRxSUsHD+YvR09iPwKxDCR7lUQRjS/i5XqiiXKy4OhoFzD2EYwQ8C+H4ALiQ4F/D9AGFYQqVcc3AfDil8REE0Vay7ZoVw+cZcSng+Hf9yqUqFrpSQfoAoKqNUqaCt1g7f81CrtmHW7AHMm78Qhx1yKBgD/uuSiy+i96esUsZqa6wyutg3xkzfb8Yqd/y0NjZJU2uttd/97uU/FUKWe3p60dnZhVKpCs8L4HsBQr8ET3oQXEB4EmFUQhSWaRaaC4racTRxltOhHSFauII9/zrcPmCYZv+d9oc7pXiPr2Paf92cH+d7fo0VvNzf5n94zt+nF8PCvfbpz8sZp9eVvzcQjZkKPuayQqfev+8F9LuCgwlBxbHnISqVIIUH3wtRrdZQrbWhUq6hUq5hwbyFaK+144jDjzhkeGik3qjHtj5Rt41m06ZpalOVWu1OfG2tVcbaNEttq9W0RhubtBI7PjpurbV2+5Ydyctf9orXRVEJHe2dCIIIgRehXK7R+colPM+HlD4834cUHjwvdDFKKM5dwQUdV+7aUM5KzxiD9OgaEFzCkx6k8Nz36XzwpE/E9TCEJz0EQYj29k5EpRJq7R3o6uzF7P5BdHZ0o6urB2ASS/fe++CtO7e2Mq3szt277Zp16+ytt99ulVbWaGuV0tZYM3VOG/q3NlP3hImJSftnf/EXH/HDEF3dPajV2lCp1lCq0LXc0daDKCKltxRVEPghuKOhE1GdjmPh8psGqRJcQDgKezE57d6r5B5Zepmk80h48P2A9qF7jKnrhIM5WBPR9X0wMARBhFKpCikCMAiEfgmVUhX9fQPo7xtAuVJFT08fqtU2dHf3oL29C3vvvS/K5bL8zKc/80VrrU2TxKpM28nJhm21WnZsYtzWG013DzDPuac+e9Na2zhObStuWqPpPv6l8877797e3s5ZfbOxcOFitLV3oqOrC51d3W6fdqNcqiIKy5CCPq+4s0NKKVEqleh+ICSkIIXXlwGk9CG4BGMCvhfA9+hYSOlDSG/qGnWgNM6E26ey2I/uIIEzahza3PHzR/pz5JFHHL9l05bRX952h/2rj3/Cju4esz/4/tV2aGjEWmutch99553/lfP+2K/l/9IfAPITH//bv7fWxtZamyWpNcoU6wL6nNdWaW2N+3yz1lqlDf3JjLXa2izRVqXaarXnmX7D9Tfc/trXvv4MEYTeb/N6KrXK3tf94tpr6LM1tc063WeLdYgxz1mc/OL6m37V1d7d+7u877333WevCy+6+CuNZms009o2my0bx6k1mp7DmKn7nXX3Olp/ZfaBB361bc6secdOf7xz3nzuImvtBjoXNT2Gtbb4f23ss1+6yrTdsG5j49GHV23atGn3zZ/9t89/5qCDDzt65coVH7z00ouGi3tDvp4wxhqlbRorazJjv/WNb1zb19fX96c8X4TwvXPf8va9Vuy3f9eL8Xj//Nl/+Wz+2Wqt1ccd98qHjzn2+Jvuf+jxx7590Xe+d/Bhh+7/W57HlVefedZ74jR56pn16+2DDz5i42a2xxqWzmU6CCqhG8aWjVs2L5q/6NAX470ccvAhL5+cmBzJ13nFc2X0XN/61td+Ui6XoxfjuV77urPeku82k69PtLG33377rhNPOvnoP+B+ID5/3vlftNbaLNPFe7DW2k3rN92+eP6i2X/M82vOvPlLN2zefKu11mqV2dGRMZtlysatxLbqyeMnnnTS8hfhntd9wYUXXlMs6rS2WitrMmV3btluDz/o8Hf8psfo6Zu15Oabbr7ZWmvTlO5TcSu2WZYVx0Irba27blut2Ka0L7MPf/CjH/ldXu9bzjn37dbaIWutbbUSmySZ1ZqOjTHGrcemTnSj3U3DbW98/dnvtdZCMk6Kpx+UwMApczOJC6ouA0GbfN8HExxpnCKOmwjDEoGBrIHv+WR5zFIwxjA+MY5KpeIyMSVKpQiNZguVShVj42NoNppI0nRFrgggAOJUYWJykoptLmCl03/YVNytdTbQwPfwuje8vsQYjnheIS5n3DgyaQ7VEUVIORBGHkWY5DRcTJ/snJYXW+wHt/Od8pQXTdt37LS/euwxHLBiBYTw2OjoKJs7OAjp+xifGJ38r29efOeqJ1bfvmto1z2PPPboY0PDO4d1ptHZ2YWoVAEDw9DuEXgOShVYjyJgpEQpKiHLFOKkCc4FoigAs6B4FC4ReBTJkakUmVKwJqFFLjg0NLTJAA1SboRX2NOhLeAUH6Oocai1pripwIPHPBilkakUmmuEUQmcCUxO1jFrVhk7du5ApVYpz+rvWwyASM/OZpSDv0bGRrBt6w7Mnzcf1WoJOSE5TmJSW40FPA8PPPDQI1qrhlLazYMbikxiAlmauTWlgMoUPGFJpQQVdkpn4LkayIh6qzTNqVpH1C46zJjKd52u9E6dW6TSFLCqYq7IHX+Wg4Kerev+lk3RwnYMTDEoURStsFOUZip0yMaVA4nzv9B4Ab0wyt11oB2HpE2zhGzH7rrhkrksVioABedIswwAQ+D7BF3jgBf4YGCVqBSWoyhAkjCK66o3UalUCT5mbZFxzKUHT+YFFke1SlDz3buHJtNMbdXakMIPOHK5IuiYYNCaBiV5Dv/JEgghwWGLmCXr3P9Mk++NOWcGQLbSVBunFgpX0OTWXvqvcJRxwSUil8mtVAalFES5inqjDq0VOro64TfqWLHfvgtn984Oh4eH8fDDD2PRooU49JBDCAbs1IkckF1ApaYp8QAwPj7WvOeuu+7njMMPAjQaTUSlEHGsoFSGRnOSrOWCO3q0LRwleTyPBQezeirLZ1qTBECRXczyPOncxp37mgEHF/SK+WjuQG+cCfhBWMTyCE4ztMopLzn4SkoOpRJ4QQlj46PgXBKrwJCyKaWHSq2EzZu2YK+9lh333vf+5RsAQAgPFhbSI5dPEIR0prv4qNzJWChme3gk6HUKaTE6Wkfmh6jWqvjAhz50zv33PXTPJZd/5xvtbZ0IwwiNeh2pSgBYxGmrmGXO70OMcUDQuakynSsPxbljQGRXIQWs1lBKg4NmlqX0kaUZLBNuTt4WjQetyYUgpOfAgHDcHQ5m+R9dCXr1Ga99zcDAQPu5b3k7Km0VXHfz9dh37+WoVmrYuH4TypUynnpqzdBll15+/Yc++L4Z2fa32CqlsvzoRz72sc/9yz//NYAgjclRJv0per7SBnGSIAxDgDGkSQYuuKOtWyRZBt+TEIK7cSMLozSMOydPOOmEl51w0gmLP/DhD/xjbq17oa1/Vv/Lv/Sl8z958nGnnDi8czeCKESlVkWSUBpEuRwV5zvyzx/GsGLlAQvmLph7IIDrfwsVTpz5utee9cs77vx4V3v7ITt3jkBn4+ib3UvRXEbBk9JFvxkIyaczAxEEEgcdtHzWX/31R17HGLvTWpoBvezS76z75je+fvlfvOcv/5bnYDox7T427RJJknT0nvvvve3an137i+3btj/0zNoNw3vvu2/c29+784H770kGBwaaxx93IgcAZU0Bu4NxSRCTkxCexNYd2x/csWPHH5WUvXDh4trJJ57U/V/fviBOtRr84nlffuOHP/C+d+7cteOBfffZ69NPrHryzt/3sectXLzfXXfc/iYASBOFMJD8gP1XHnDAykNx9113m56eWs+HP/TBG3/TPKrne93/8fnPf/LjH/3ouzes31B95KGHcOJJpyCIZOEiyw9gfu8VPn0+DwwMzPnzd/35mwHc94fuq9ee9drXVqqVDuOgovlaS0h6rl27d7e44H/wzHBnd2/txz+65hwAHNPs8gRd1Gvvv/feJ37fxz7okIOPfOtb3nZOo5kQAJATxJBLjsH5g0fut3y/lwP47h9rrOLf/vM/3zVvzpyXA8C2bdvBHPCx2WjhgYceag3tHvuD1fH3fuD9r3r3u951Gn32mmJxy6REe2cHTj/zjMOXLd3rO089/eTzOgs458FXvvqV9x37ymOPzZIM2hoEpQBWk3uAXGtkOc7Xe77vIckyeIEvP/ih952zcuWBP3z44Yd+46zwm85+8xsv+c7FnwXQpZQlgZbn3BdMpcBMI3oyB4LNYbAf+Mh7z9x7370ug8d9CCapw1+uIgiccuIFaGvrRBiVITwfnhegXCqjFJQQBSX09PTSosYPUS5XwbhArdaG7q5eVCpt6OruQ2/PbCxbujeWLFmGwTnzceRRR+DwIw5FVC15l1/x3euttTZJSOlrtlp2ZGTEdQGNU3e11dOqdm2nunzWPFu9NdRZNdYqa6zKlcVp3a1nK7jKaqvttM7As7VdY11/0hRtg7yTpDJlx8fH7K6du+3w0LBN49ROjjeszozdumX7zosuuvjK4447/jVRVK11tPdg4cKl6O2dja7OXswbXIjZswfR3taJzo5OVMo1tLd3or2tA7VKOwT3EMgAPV19KJfawJmE5B7CsIRSVCmaAFL6kDKEkNIVc6QCCiGLiA4GAS4EQafc14SQCKIIvh/A80jNDfwQnu+jvbMdfhDAEz48P0AYldDd24PenlmYP38hli9fgVqtHQuXLFq4bdf27XkXLMsUdVusta04truGdtoNGzfYifG66/bQgYrjlm21YpvEqc0SY9909jlvBhh6e3tRrbahWq2hXK6irdYBTwYO7iVpkV2qohSUCoVXcAnfCxF4kVNCuVNhRaEShiHNkJOyO01BBZ6j8OZqzrPV3+lRMHv83m+l5L7Q96cK3qnH58V/OZ8iIHM29ZicuzgUp/jlFk3uKjHGGZjkdG4Ium7z1xqGEbq7exFFETwvQBiUsffey7HffisQhRFOf/XpZ+ZKW73ZsLtHhuyOXTvsZH3iWdeELVQ7bZRVijp6q59YrZ94ZNWGN77+zfsAQHutC54MEAYRPM9HFJZRiqrgXGJ6DjGpst6U8ij9oshgTvnkjM4D7pRtUvFFoQRLz4Pv+xCc5i3pGvAAISA9UpKjUhmVag21SjtKYRXtbV1YtnRvCO7hve95399Za+3wyJi946477Jp1a+zY6JjV2lil6OaTqxNak9rhNN/ijrFu7doNixYtmt/e1o6Fi5YgKpVRq7WjVK7A90NEYQlCUMHo++4aE6R007VK56Dn+fCddZgxgowxN7NNvy/dfvKcNVvSSAqfiobyPB9+EDn3h+esg2Tr9jxS2oUgtZ0xAV+GhQIalkJwySCkQKVSRRSVEUX0Xjrae9DR3oP29k4ArOuKy6+8plBrlLZK6eI+mmVZ0e3Nd5I2xmZGWzV1V7XT77L5vTVpJkWD9uYbbn5o1qzZc2UQYO68BQj8ErlAfA+1ao3U8rCMarUNDILcKaUKAr+EIIhQLlchuHO1cA++H8J39nYuJDiT4OBFTBFAoxVk4WfFfkHuuhAchWmE5SZy+UdVlRYvXnbI6lXrNjQmm/bLX/myvfeeu+2WHdustdaOjY7bdWuesju2brN33XHPLxcu3KtvRrn9zX/6Z/eF//Jvn/uUtXbSWmuTVmJVkliVZjZNnavMKGud2mmttUZrm8ap1VpZpbXNYmVVZmyaZlZlyhptbJYpqzJllVI2S5XVGf3u6PjItjNfd/opz68ayspHPv7Rj+8e3bnRWmuTZsuO7B4hhcRae/U1PzS33f5LY621KneXPEsx/fKXvnL+b3rPBx1yyP6XXn7ptzOdTlqdq3DT1lXW2l3DQ3bd+mdskqZTa6tcYZ1mc5uoTw6ddtoZr5r++LVabfDqH3z/J8/n4JiYrGfPbNy4/me/uP7rJ5966iF+UPJf6HV+/KOf+PdGs+nuK+TuM+59p0lqn1z9lN22Zas96ZRTX/vHPEc6Orq7f3jNTy/MUrXqFce+8ravfONrT1prVZrQcXn04Yfueuvb33rg7/v4n/j7v/m4tdbqTNutm3fbJMlss9Gi63p8wq5Zs2Hkve/94Lm/7jEWLlm84uprrrnaWmuzNLNPr3ratuotq52rrlDapt2IjdnTrZjG6dajjzrmmD9kX82dP7fnqbWrHyL3g36WG5L+ce89d1/0YhyXV73qzBOttcmz1yXWWvuDH/zwu3+IunvZFd+92FprR0fH6XPeObystXZibML+17e+fVF/32z+xzjf9lu+4pidu3ZuttZalWZ2aGi3zbK0eH/X/vyGy6JyNfgD1d3ajTfddEu+1stVf6Wm1nLNRuuulQcc2P5Cj3H00S9/x87tO4fJ2ZVZraiOSpPMZpkpjvn46IRtTDZs5hT+LFM2c07PD77/A6/+Ta/1wJUHnzEyMrY2d4PozORl2dRa9AWsY+Qwye9pw7tPOPGkfaTwBAIvRBInyLIYwiNroe/5RBKFRRgEIAVOO8qexfj4OIzlCHwPfuBBG5qxyrR2C1GG9s4ajDLIUoVyJQIsw+5dwzjiqGOWn/2GNx08MjqKSrlcWMPCqESzHRbOwjmV8TklkuUwH1vADxhjNHjC6KviWbqbIbHoOZOWeQIke54ZyxxUMb17pLVFPNnE+CRlx/b396OntxvrN27cde3Pr3/0mbXPPD050Vi9dfvWR2675ZZHVabqs2fPgtIaYxMT8CTN79WbTacQaAA0U5tmMc2t+iGEx5GmGYZHdtPiXXqA1cjSlN4jp8Wr1hqcmQJuJAQvAA+58gomoHSGNMsozoNzmkdUVFAolUAIIsPmx8r3A2Q8KyJM0iSFtSkss5g3fwE2bd6Mvr5Zg7N6+vtz8IQFoHQGCYoDaWvrRE+XnLZn6VXmCpPnSYxPTO5+YvXqXwEWzTguwD1ZmiFDBuEJcJfVKrhAHMek5ApGs4KckVqdQ56MU3fcz+Sz1AQQmzqehdpq91R4C+XVTmXkYhq47NnAjd9qVvc5Ku8LfT9XDNkeMK28m8+KM9jtTfe+cjgR5wxScEgZoNVogUuaQ6RzjCGMIgAWjXoDXArolGa8jdLQDKjWqpg/ONgJAKnK4Ps+oiCENaSqazuVRcoMc8Rrcl3AXafaaLtt585Na9evHRXCQ6ZJMdQk8SHJUlhjICWHlA5C5N5jnqFs8+vekpporJtTxxT4JGc4Y1omrzUG1oGWPCGgrSHFTkgkLXI+VCtVKK3QrLfgez6CIESapeAc/uJFi/ZpxQm8wMO++y7Hjm07ivudUgYmh4lZIM0okq1cKhWUbcaADZs3rR2fmBgy1qJer8MPyIGhM4UgCui1pjQ6YrSG0U7VZAKaafeeLLQhWjwYJ9iST7nZyu0jmsECrGCF+8BYCv2iuWRybHCn/E9XkimGxzp1yjkKOKnCzEWuaUX71/dDeL4Hm2aFmuVHPgZm9eHxxx7Dn//5n73lDWe//szh0SEYY213Vw8zRiPL6P5jjIHv+3tcLnza+b2nyEtfb8YtTDaa6G3vxM5dO9DW1oFjTzh25emnv/rcb33r65+bnJiEgUYQeNBKE3nbWuISWKLTZ1k65RKwU2RqxgVxKIwip4zRECz/nCHIltaaCPa5I8Q5DbglCznnRCQHo5EJwwwYuLPe//G201512qsXLFww797778Xg4DxYbnH7Tbfi7HPOhsoyVKo19Pb120svv+KWdetmsmF/CyWFv/YNZ733b/76k58AUImTlPLplYJWBIaEoVn6zCp40kMrySAFhxd40JmDBXKaTyW3C20ij1IDI76HsdCZRnutY9bn//PL/7BgyV4PrV/zZHGM5swf7HrvB9//sS/8x+c/CKCsMgVlLNq72sEYM9+94oqnv/zlr8Tfv+qqZQCivJ1qKbGr+Dw96ZQT9x2cNzfavHHT8873LV6y5GW33/HLz8/u6z9EpQpxmiIo+8XHkTEWgjFUS2XiN7CpCPtpDDwYSzO41XKl668++okPlIPKPY2kPkwul/HNBx160N+tWHlAumjBoqOfenLNrssuv/y2Hbt2PrRly6b1O3bs2i4FX3/fvfckL3Rs3vnOd+19/vlfPK0URbCaXlPu7uMgV+GyvZZi147dOzZt2LTqj3mevPf97/vAq8981TsBsP++6Nt7P/jIIxgdG0FHeycsgBUHrDzsiEOOPAjA7xy5wnxeu+WWm18NAK0kRVQKIKSA75O6niUW69ZsaF3zwx+t/upXz3/ex1iy15LDrr/+2s8vWbjkKO0+r5bsvSQ/oI5mz4u14RT/YWou3FgDL/Bmv/Xct7wOwO2/777iXB5aqlYX59eAcTd55pxhSil89atfXXPoYYf/wcfluGOPPROAn9/j2bQPk1Wrn9r82t/zcQ84YP9XvvpVp5zWqDdQqVYKS2j+GVltq+J1r3/dEV/5+ld7Aex4ke9J/uXfu+wdvT29c1qtBJ4UqJYr2LRpM2ptbeju6sLPfvKTO5v1ieQPeZ6TTznlsONf+crD87qLuUV8HusIAI889mi8ceOG51Xijz7q5adde/3PPlWrVjrTOCtGJHWmiQskGJ5YtRq33nIr3vq2t8ILPFqzawPGaXQPAEaHR2f/ute5bN+lB954ww3/3NHRtih3pxYuEYZpfAByXq5atcp2d3Wx/ll9tH506zUwoLPW3h0EQVXmC6hc/2UMKFcIVMINg1YGSZxASAFjDaIgQqvZcoAZmpmjyCJS0YQUaK/V0Go20ajXkWW0IAA3aMUt7B4ewhFHHvUKAF2Ut8mhtEaz1US1XC5kavuskzgvQ3PQTbGIYQX6B7CAtgQtwR6U5ecvQxheuHax1rjoDIYsTrF50xa7Yf1GpGnCSuUIcwfnYse23ZNf/9oFP7ns8ssu2TWy8wEYOxKEJdPe3g5jQQveVhOZ0gh9H0YRfKkVN2C1RuAHgAX8MECr1aBFpTZuRiwDGCMCtieRJsq9JgFmGRXrHNCG4qIY4zC5/dUwKnasLni/vi+hNQFvOOcQYPA8n8BgMQGshJBIlULgUzGQxRmkJyCFgLWcPm44EEQ+Dlp50NI9LN+cgAEMnGJzjAakJMu4o5iSRWrKznjbLTc/vWndM5vbam3gUmKiMUE2Q1ioTKHkhbBMQGd66uYJimDijDJcCzvnNNJYDuexBkiS2KmEOdV5qmjCNEryHuwp+6z5WjsNrvM73Vqmk3nw/DlI7i8UEWOmns5OFe95AZ5XCrnam3tN8lxQrRWMdvm83I0LWEuUb+NuNkLA90gdpIxjjagcgQuO/tkDtVyvEm5BP9lqIPA9CMZgALKsGOZmQy2U0qjXG2ivtGFW/2xx1fevfubRRx4ZLZfLroETQENRFrfggCASM4MgQjCfKuSZo6TngINSVEKcxmSJcYUxZ7wAcuUxPjktPfA8KpKNLmxAzJLS73kSI8PD8AIfpQoRqo1R2LxpE5YuWzz3rNe/boW1Ftu3b8PPr/s5dGrwzne/E4V7OS+0GUMYSFhL9ztjbBGHc8V3v/dAq9Wsd3Z0IM0yyo7UBBnzmESiM0e5BrShGC1rDb1fS/dJgi9lBZXeWIs0JTI0Z1N3LeFgOlO0byq8jbGFzV257xtjnDrOIT2BuBVDaUvOB05RIQX13FiarfZCKG3QmGxCSI4g9DAxPon+vl5MjI2hv2/WwR//2Mf+EgD8IIQvfUbgmSbNVXsepJR7FLU5QdpYAgTmOeDTL7PQp7xvYyhypF6vY2ysjte+7nVvefChB+985KFHbi2VqVHh+z6MtkSpt1RkeJ6HuNWC5/tgsNTACyIEvo9Wq+WihJyF2s1O51m6RhEh3JM+lFZQjgpvckq2BSz4tCYHc1wwjT9mDO+sWbOXfO+73z/eGI1HHnsEJ55wAlatfhxPrH0KALBj1w4smL8Av7z9zvv/6Z8+892PffzDmNl+/faK44896+KLv/PXDKg04gRhIPDU2lXwZYT5g/OLhk2aKoRhgGazSQWsDNy4DBV90pMwFuYXt9+6+olfPbHpxONPWLH30qUD1MQzLpaQPmOU0lg4b97hr3rVSS8D8H0A6J010PHWd731E//x2X99P4BSlmZoTDZQbauCMWa/c8nlV7/rHW//fK292r9u3bqvz57VHwnGisUeLTSp4N09NLTj1xS7h1933fX/b3Zf/yHNRovcP6FXJCAU2d6wCIIQfeFUsoiYJjxQf3PKUn3M0Ued8B//8W9vBfDF/OcfvO/BxxYuWvTW/ZYfMFirVuNLL7t44+8CRNJaH1it1vam4jofG6Hc7vHRUVjLsX79ZmzfteP+VOmtf6xzZOk++xz22KOPvSX/pK5Uq6i1EfcijjOEoYfxkfHkkosv2fGe9/7F7/z4L3vZy5a/4qhX7E/3UI8o8vm+NgbSAw44eJ9hKdmG5/v97u7OI6+48op/XbJwyVE6Uy6Gj8j7WZYVIEVPyOcuehmKNVB+B371a047/Iijj+y4+467fmcAWFQqRd+44Juvn9M7UJ1a79A5mqQp1q9fj3KpVB8eHX34Dz0u+yxfvte999xz3FShSOsSAswBY+Mjm37vBscH3/eGcrmts16nUZkspUawlFTnCCGxceNm3mi1XvQO5wGHHHjwKae86gwAJDxaWutGUQWlUgWrn35qzdXXXHPtV778pT/oeQbnLzoKLjrIWgttLLgkiGW+Nr/lplseHh4Zfo51uqOrc8Ett9z2t7VqZUGaZICYcizCEtwUAL5xwdfvuuSii0cPPvTAVx12yGHQmaJxrGnrgY7ujtqvKf6DS7976UfnDsxfoTJFjXKOItmEFbUfsvsffHDNRRf9N0vTbOAD73tfrX9WHzJjCO7nRsOE5KiUo0gabaBUq4DmwFKhlCYZGMhqKCzNhRoYpJlCGJWoMDFAW1sbxsfHXP6fh+6eXlij0IqbUIa0VWsMhoZa2LR1K0yWrjzhxOPOAoCgFBWE41q1BslJ4YBTeIqid1qXMVfzCGc/bfLW5XIwg18Lzf31PF07TTUCzUoai527dmHVqifY3MFBDM6ZBy/wcfMttzz8N3/9t+dv3bbpaul5k5VaOyTj2DW0E9u2b0WpVILv0aK43mxQjikTKEVEm54YH0eSxABnEJLgKdZQ/JJ0kBVDbTOkcQylKTuXWRCsKa8TrMjXutAmV8cZOIQjG7rFpaU9lyuGBgatpAVPeOBuYSo4/U6z0UDkmg9CUKPDlwFmzRmAL30EfoD58+ftl99s8kI777YIxqCsgcocOVnQ1y1znT9D+3fT5s1rUqPGfenDkzTrLYREliak0imDLNNuoawAw9zfqaPOuIS2ipROa904h1v4WwsuJGX05rOwjsJs8qKR82J+Mq8sn81ehn3hhsnUDO/zE5vtnjXt856A1lLMEgMr5kXzopPmpuzU+c+mOlaioFEzF61iqAlijGuEpG5uwoeUkppWVsBAIY4N2jvbYQ1Rj40xGNo1hO6Orgo5Azx6TChwSaRw4zrB+TmROx50prFzx3aYHoP2tjYkcXOrlDIGgFqtgrHRcaRZAs8PABcplcT/n73/DLOjONPH4buq48mTZzQa5RwRCoBEjsY2GNvYBht7k9c5YuPwc14be9c54LiAsck5iZyDyEignHOYHM7MCZ2q6v3wVPcZEbxIwIf3+vvspcvaYXTO6e7q6ud57hRCaJTRMDlptxVFE0GqRF/q+57OWNXTYqndrHVjWHtgqyTTlY2K25FKwTIYstkMvKoHxjmy2RxEGMKrVmEXLAgp0N7e0dHc2jwh5boY39EByzEgwgBm/CAFq+03iVEyq+VDAvCqPnZs27Ej8H2MDI/ArwZgzIBpWHAcB0KEgN6EFRQYV0k2cWzKpaSO6ABDJBU1UgyQodTHSA8VcgXWml9FcVFJ86s17LFpE+cGIj+E5ApSRDpaxdQ0cQY/9PRAzCU0Xbs4C0mOxulMGkEQoDRcQhSGyKRTCCNR97Nf/vLCadOnzxBQyKYzUEICUsKwzYSOndxAmgkQ7w88iUtSiaw91gf6oYAUIdLpFBQYyiPDaGtvxztOP2UmxA+/eNZZZ683DKO3kKqDFBLlsKw9D2xIJeBaFqIgRBTQcME0LQgRQgiVNLYMXGdHCx3HR/pmSGp+Pd8n3ZlB6G8kRW1fgZYNcAbOlGY+AG9nBOgJJ59w/FFHL16wetVK5HMZTJk0EXffcx8aGpoJIRzbDr/i43vf/f7VxeGhjfjn6x++2lrax999791fybrpFs8LkHEdlCrD+OtfL8OyY07EpImTEIaEltmODUBhuDiEuoYGcIMj8AMYFpkmDhWHD/zg4ot/dfkVl1430jd4YMK4ycf/5jc///77zj33VMOIn3UKhskh9HOvrbnpnQBuZow1ffVr/++7P7/4J59kgFsdqQKcoa6hDmAI/vS/l1765c9/5WdhFOw57oTj5rrZtAfQ/UnDPjoeN+2i4nm45JLfr1x2zKttTbKp3BG33nrrT6ZNnXJMpTwCEQqVSqUYGOAFIRzbAhRPGCxS0RAp7nJp0MeTZ52I8+KlALMMfsoZZ3x0ypRZV2/fvrE3/swd27eXAWwCgKuu/tshXZ/FRy0+kigXoAB0DnAYGB4uoqu7B23NY1Gp+qU//f6PN2/bsmHk7VonH//kx97pWubk8tAIDMdGY0MDTjvpZIpMkgqua2FgcGjD/s7uVYfz/q2tbacByFWrHvyqh3whj8D3URqpYOv27airz2Pz5s0v7dm981VutjNnzjrl6aee/tn0GTMXhX4Apfd7KQUM0wBjho5s4yj7/v7L/vznFwKvWv7ShV95v23bqaQo0bWFkBK9ff0NftVzDws1fPc7T/rXCz72rnh9CklrnnLQLUyaMgnr1m3YtH3Hjje9P513/gfPzWWz00MhYSbPU6rtKuVyccO6dYf1GVNnTT1i1fMrTwdAKRZhCMswtSeKgm06hEwWB/f5flB8q9fbccce9566fKEBCrC0iadSDG2tLWAc2LhhS1/n/v1Db+YzUoV6+w+X/P5IEUmEUQDbtIjpJWjwrSVRleeeX/nQqwYsza3GZz7xmc8smD9v2WjgijFARLXYsPsefODB666/6eJsPtcgZHgUgGbOiZEarwnOOSZNmtD2et/zIxdc8OkLzr/g/VLQwN9JOVRJCCC2ddqxd/fmyy7/69XXXXXt3nef/e6zvnbhlyePG9uOUrkMgCW+UzFw2tjc6JimbUKBzKiYdgH1Kl4ScSMkFVD5fAFKSfQPDCCdTsE0LUAxmKaBVCoNzkxUvBGUhgfR19sHpSSCMEQml0djQ0OuvqF+Qi6fW3rmO8/8lw998PxjpQLSjpsY9PAkkiXOmjzYwzahoY5CBeLJghxlNKV9WF43NIa9JsgmNR3WGEUrjTM+GFpb21DX1NB1oLdr1449e3o2rNuwZvnyO2/bsWv7qsamRtiGjcHBQbhpFw319SiOFGFbFqIggOd7CEWAIAjAweAZBmXHcm2QIiKEYQTODQRBANOwEEZhQj9UWo/K40Y8RtbCEErryUQUQmlqnlIysWg3TUNTdGkhRzICY0ojsNTchTLQOZIcSgZwHAeZdBaBTwY/9Y3NhLr5ArZlolgahohEbuHCIxcAFIVhaEqgYrphtw1YtgklNDE4NvpSDEKbYADAvv3714tISMkJJWScIfQqNPPgJhQTMKxaXIthW0lsSxSFFFHDiSIao1wxEsoVIWlqVMMYV9Z8VCZpbWGoUaAsG5WB+3qjkVE5g68F27LRyLA6mLiparE71OjKpHWuGVvV1n8c4aBipHcUehcfn8HIkVkqTWNmIMaAVGTco5spxRmkDNDT042Uk0F2TB5ccUyYMA6Tp0x0AGBwoA+248JJOXBdp4ZOjwKs+3r7oZREc0szmlua4VUrGGYMFa+63zA4qpUqwihEJELKsY4ov9TkDkzLTChOURTp96XrJbXLgNLUagaGUESJvrV24+v8a9DaNbmBqufRwMWwdLNH1OFQKdi2DaEkKtUKUqkUHEU64bq6AqrVan1XZ7fd2NKI4cEhHHvMMYhCReuNSb2+2EG0voR2rn/Q1dmr5s5f4D33wvOoVqsU46QHV+VKGUHkw7XtJFpNJRm1mq2iXWGkQG3goWn6Sbac0uZc8XnSiC7XDZgUteEJTdcpt1uCBkKckamb4zgQUiCKCOWMBw3gDGk3hTDwIZRC2nWTGKZcvoCxY9qxdctW/rF//+h/vO+9732/73kIoxCpdFpTiBnSToq+W0wqVqPYFJq6HoZEmeejacDJeZUoV6uwXRuN9fVwLIq927VrLxrqmt912smnv+vRJx75e119PYqDIzTsIksxWNxC4Ic0jNWNNeMmQp+MiDhneg9kSSoBGWjR9JCM7+j5o4QAYEL3xvqY6FlBWdfQNPea9v7teDU21Gd+/avfnMF83/nJj3+Ec84/D5Zp4Ix3noa2lhZ4foBCXT1WrXx5/bad2+//Zzv7f7+OPenY8xctOvIYKQHHIUTCtlP4xte/jXw2h1BFhFzoGkREEVpbx2jmkYBpU4Tjls07HrngY//ykxeeX/Hwb37+MwDA7r07npw8efLF8xcsnDVlyqR2xukekJK4AQBwzLJj3332e8++4YGHH5h0+imnHwkFMwwFYBlIuTa8arX7S1+68H9uvPXWP/rBSAAALS1jRMZ1/YOqFn3vKyEhwtBvaWrZPPo4Gxpb+SlnnHrWg48+9K2lxxx9dBD6sFMueNpI5rSuQ4h1HM1omgY4oNZv2LL1zrvvWPHcs0/vXbrk6KVf/8bXz2CMJ7nrTGkDR6XQMW7c7HHjO2YA6H2z18Zy0vYdd966KH7GJnWhvje7DnRj2/ZdaGxq2XrPfXc9+PZR3rnx9LNPLgMAJ5OGaRmJzMm0TKTcFKIo8n/zu99csWvP1kNGmceNm5B/5NFH3wUA/X39SoiQ1TXUYaRYxkhpBOlMBiLCgVvuuOOm95x99sGNckvroqeeffqnUydPWaQExarRMJpr1hFg2Rb6+4aGbl9+9xVXX/P3Pz760APbJk6anP7kpz9zum3bqZjxxTRF3DAMlCuV4e6u3sOKuzl26bGnAmj2gwiWaYAbtXmnYXIYcLB8+V2PbFy/YdebuS4trW3TH3nskfcBFAcKKXUtIWBaJlavW/fyC88///LhvPe7z3zXOflcYYKSgGUZEEoAXIEximaNZSvPr3xx5a4dW8tv6RCuvW3sY48/8W4ACKNQy2oOlv1MmjDhiB//6MfXX/KH39xwyR//eNuW9VsOufkdP6G99R1nnDrPMDkYc8AMqjXiaEMO4JHHHn/qoUcfevaV//aYY455z0/+58f/qoQiZojBwQyG0AvJG8g28NJLq5/7f9/8zlf7OjvXzpg9fc7ECRMYAAgNlozO4z75lNMbX+s7nv2e93z4mmuuuQhASogIdsqihSSZNu0Efve7P9zxs1/+8rv7du9Y+/C9D7X86Pv/dU59fcEZKZVgWhYc20n2DiEoP50bJjdjdMi0Lc1X4cjn8giDiOIZOMPwCGXqAgwpN0XuwVGEcqWaTMOzuRyaGpuQSrkwTRvtY8emTz75pA8edfSSd02eNGVOY0PT2Lr6fCGdStEJkK/Ax1RNLzK6h4j/m2IH00tHtxo8djpNppEMNdXoqMZZaWUNIxdflkwxmUZMJHXM+uVVfTzy0OPbVq5aec+NN9+wfM/unS8ZhlEaHBr0c+kCGhqbkM1Tw2CWRhAGESoVoiZXSlVEIkQq5cKSJiG1QYgoDGGYJoRSQBRRxq0IIBi5hFJxBdLwaboSZ5zoj1qT8UpKp9JusTG5GxrVDEM6XlPTRpUEuEN0VSgG27KTrFND6wG9ig/HJt2Mk0oRW08JpDMZQCiUqyNobGzumD595syE7ol4EEGfIyETgygpNUKmfyfm7/d0d5cee/TxVTISyDcVUCwW4XteYqkdhJ6mkpBWM6Y0QCko3TCMHmYwKEjFaBrM6HrGzbF+gB1MRdTfdLRO91XNrXqNKYl6RTv6D3jxyWBmVL7vQb8+WtOrzx9lmI7iP2tahtIIOhlwMX1sSLSuUJRJS0wH0rvGmgrGFemhOddorQEmgVQqBdu20NLejP0r96Bzf6cTeAGqFV/YtmtwzmqNplIUvcJoWJJKkVvo0OAQAj/E2DFj0dnVJfr7BjqjMCKnYMHg2C78IIBhmAkiGYkoQYkp0zaeN9Tcq+NzxTkn2joOZoZLldAKtH5c6CGPqfU2EkwxRJLcmRsaMhBSYXh4RDusA1EQoVyuYOy4jqZStWQMbB6AZdjIZHIYVhWYjkWN4ut5cbMarXCgr7+ye8+eYdt2kMtmIaVEpVSG51cRiQi2aUEqkMu4IsSCLjXdq3EurICg6ByLaLUiEgBIPlJziZfJXoY4R5ZzhCrUNG7aTGVEwyXbdvRUlUGGQmeeE+0/lU6TbMP3icKpqXCWQ6ZWfrWshyccgOKLlyz5wIVf/OJnAemWShXYLk1eacLODnLFH72+kwc3Y9pbgL3i9qLd2rTIIGp4uIxCPove/j4IEaE4UERLS5Pz2S989mOPrHj4Lq9S6VciQjqVQbnKwE06XtM04QUBrSRuURa6RtqEpL1UKgUhQ9i2C664HjpIQJGzbpxBCkbIR9wUM4Na6zjrWcUpAnoPfTte7e1jFh179LIT+vsHMXXmFDV33mzWP1TEqmdX4l//5SMIwghSRrjrnrvuGRkZ2Y5/vv7ha+kJJyz+8x//cEFMlzUZsOLxJ9Dc1oYZM6bTXiJDYpVEEXbt3o2WphbkC3nSkxoMjPHwwQcf+/NXv3Lhd9esfelVSM+OHTse+8XPf3nbRV/76ueY4lCaOSQlPSGPO+741uOPO/ZDjuVARgJ+GMHgDCnXxoHOru2f/cynv3f77bdf+5f//XPynstvvzP82AUXyNkzZ+k7hSfafW5wDBdHDqxfv/YgPevpZ5xyzlVX/e03tmmPp/ufmB3xvss0o0FqWZtlm4iU7P3+93505Z/+9y+XD3Qf2AgAmVy+8dR3nrli8RELZsbPT6Yz3oVSyGZS7rKlS+YCWPFmr8/cI+fNXLxwyRz6jjKxeVQMSKcz8CMPTc1NeODee54oDQ93vl3rZPK06XPaxk6aS2ifURucQyKdSkGICL+95LeP/u53v7n1t7/99SG//9iO9lnTpk5epCTgOC7b39WHCQCGBgfR0NCEiRMn4Bc//81Td9+1/NHR/66jY+z066+79sdTJ09ZTH4Mmm2i6ElkMJK67d3Xufezn/7sD5ffddtlH//3CwAAJ558yrJCoVBX4wFTDRQJAcMwMNg3NFwcHvYO9Via6pvGXnXV1ScAgGWbACRobFKr26uV6tCzTz/16Ju9Lme/7+wT5s6avYiQZAEzAQz0fXLnHWt7+3r6DxndnTFjwaOPPHx+vC9wg8PQw+gYzWQc8PwwuPWWWx656MIvvbUsnmNPfvfMadPnhhFR00UkSUYqKdVBKYUFR8xPH3nk/HcAeEf7mLEtAH56yA1v+9hpY9vaJkmpmY+SBtOmQfKeasXHf1/8P/eWhwcPorVn8/X5m2664V8BtES6rg6jEDbT4ILJ4YViy3e+/f3vv7Ty+bUAkE6ns66dyiBmRbHYe4b20fUbN5lHHDH/4PNwykkn3XLDjd/K53IdYRgmUlopyAfGAMOTT664+ze/+e2F+3bv2AkAnZ2d/Vu2bXOOXrIIgR8kfjXqFXr1wb5BwePmiBEcBhkJlCtlVP0qGANchxxDlVQo5AuoK9RBKcBxXGTSGTAATS11mDB+DAq5PBizEERy6nvP/cAPfnzxjy455+z3fGje3Dlz2ttb6+JmVwqV3HPQddLrQbAKo2SW7HX4yEwBSkIpSQXKqzAyVQtSV3G8ykHjPHDTADiHFMCzz6zc/ac/XXbzRV/7xkWf/NQnL/jeD7590dYtWx8KheoPAuHn0gU4aQfMYBgsDmJf5x5EMoRj2vCqVURRpBEXAa/qQUQKJjOpyI8pxTJCtVpCpTJMVGZtwsQ4ACnAGYNtWZAqShozqSgVnimK5bF1frLJLbLrHxWhQdM7bdalFMKQENEwFLR49MmUWqNGlEQGy3ap6APQ0tqCMIjgeQHctINCXR6DA4MYM6ZtViabbk6aOVZrOgFACUAIIOISitcaUzCaXgFAV1f39q6u7vWRCFEql2BYhAoTKik1uM5gcpMoN5FEFAakg9ZTPdMwdTMoRyFEurmHouYMsTxd8xG1UY/StvkH6cRZDb3Fa1GR1euw4PHaIG/cYL9W06ygqamjfsaTZlfrHSEAg/KSucGhQN9bytofME73k6J2iTEGU+evUi6vNjyKKGpCRRwWs5FKpWFaJiA5env6MFIqw7bTE2zHRjaXN2zHgcWtZExbA7FoY0xn0khnUohEiFw2AxD9L6r4lUGhBBqbG1HIFYg6yzkh/lJp0yToDQwAM3QGLxVdhtaCK11QJWhcTDlXpJnljCUDIp1ITKMWIQiFMSwagogQpmmhXKEBSjaTQeiHiCJCe4PAx5y5cyfa3DQD38OMWdMxaeoUzJ41WzeYKhkwjV4CSsoEjQWAocGBvVs2b97uuC4c20XgR/D8AIwDmXRaDw0oWsm0TMAgEwzSM0O7i3N9TxLdKBIRDY+0Y7BSCiqSyd7J9fqNIqLw0j5XK2AUo+suRETIsoy0FpjDdR0azFUq8D0PluvAsR1YnNZaFEWo+j7R44XA0GAR8+YvmHvNtdd8bfqMOVPKZQ+ZfAaZtFvTEcfnKln/bJQZtz5/khBSkZj2IYmHA+japiwXoRegt68XA/09cCwT02dMU3v278aRixaceP6/nPefXd1d8ESEIArADa4pTA4sy4JlkhOz69gQMqJ4NUlsAcd16VwCCEUEKQWUErBMogBKobU/ejBnMMrc5ZqBEE9mOTf04KSmA347XlOnTD0qU5cd8/cbrkU18Nj8ubNw791347prryZk0jKxZv3aXZf84fe3DQ32Cfzz9Q9QO+acdea7PnLE3HnzCR2lG8m0GYR+LilBkiFSExnI5uoQRRGGBgfJG4Bz/P3aa/70gfM+dNFrNbvx68Ybb7o/ioSvdGEeD+OlFLB0FnTgBShXKnBcG7Zj46XnVz513vs/8IXbb7/92le+3/HHn5heuHBxQZPOEkOpeNVt375t72OPPpEgjbPnzp/01Qu/8g3btMcLQfecyQ1AUrnEtdmWFBQDaNkmdu/d89J5H/zQZ35y8Q++FTe7AFAeGe6vDFf2xHdxLKUBA0ojIwoAxo2fMP4tKfyPP+7IlubG5oPmzXo42dnZjaXLlmHmtBmVO++666W3c6289+xzl2bSuTF+GMRzZWK66dp11Uur+g907r9PKXVYTfe0aVOXADAVU8gWMhjbPhYADa0pNhDYtm3bqr6u7gRJnDVr9ti///3vPzv51FPfEfnEyGQsTm8gVhU4sK9z375PfPKT311+122Xjf7MCePHLgJgJwwiRR4c8TN5cKB/0OCHHhl0+plnLD7x5JPn14YUPGGjxfXV8y88/+za1WtffrPX5ciFC04AABFEJF/Udvlc77+Oax/W9fj4x//1rHFjO2bFTbrSZoiInwX6OHbt2rFz+/Zt69/KtdbQ0FT3pS9/4X1UF5HE0TDpmeoFPvnhJPE7tP5amtoWHc5nzZw2fXF8bxEb7FXMxXK5PPzCqxvyY888/ZRTTyNmidA9BhCFIbjJsWP3rjWf++xnv7Kvc1/Cujjp5JPGNzQ0peL1xl5RB5ujM2cBZLL5cRf/8OKvNze3zA3DkJhXcXyiloU88thDT338Pz/+7R07tiRxRr293fbKF19w6XloQ4TUP0m958az6Lr6QmhqVgplt0oJEUVwU+QW54UeBATq6urBGUN9fQO6u7rRP9CHVDaDsR3j0MQbkc276O3vRXnEG3vUUUeffdFFX/7wO975jqWlUsUSUsC27MTAJO70eYLAvpaqtvYzdhCJ9JWN7KgGQunICJ6Q6Q52X459XZRExfNhgGO4OOyteHLFgSAM+wuNhaFt27Zvf+GF559a8cSK5/r7+nZEIhJuKoW2tjEIwwClchkSDKZhoFqtQMgII6WSdsi1MFwehuO4AGeQUaRpcgT/VyqVxGTJNDgMy4QU2liKk35TCtLZQSlUq9UECREyGoV0G2AGEkMVxjUlXDcNlE5jaI44S3SahhFf31ifI+F5HhyXdAnVqod0NgfIEEpRFMrw8DC8wEehrg6ukwLnDEEQYMas6Yttx0EYSXBIMMPQucexswtdAY5RHPOa+BFQwB13LH9s9+4d3el0liY4kYDveRRDZFJWMFEOqQhRUoEZhna9JFaC5rOPMjFTyblUumCJBzpITK9oDMAM3bRoavdBA5dRZs44JODmNdbyK1gLKslv1RQpVWumGGTiCpt8CaUw2pcrPmzSaesmiLyGoEaTrfXxen4VQpLuXkDqLGYFKRnKpQoKhToYhoGpU6d2LFq8ZG6l4kHKCP0DfWhuaIZp6SknWJJxykYNkJqamiGEQHFoCAN9feG2LduGOOfIZrLo7e1FtVKF7ZCZVCqdQbVSoabLMIiKD7quHByK0xAjishRXDGutZGslt+qmybFCDFJYqI418Mbapxsx04MGVzXRtXzUSlXYHITpklonWWnEcgIy5YunTZ5/GTs3LUTGzZsQEOhHvVNjcjnMomRGEON5i6lhB8EcCy6d8rlKjZt27KmODy4KwpCGAAkIjCDgXOT9LFSoVKpaPOj0W56TN/jkoYgnD6HmmH6NSFEwt6I6bOcmxBSJIwVEdPepaoZx+n7TgqJtOsiCkMITvdOGEnS3msWhl/1CRmHADcYpJBI2SYAE/mcjcD3sHnDhuOYwRYpRdTOdCql0XSlKWyEeMuE4MxGmQ8yXWhT816uVuB5PgoFigyiGlqBKyCVtpHKNBHVq6UV1UoVPT3djHEO13LMy/5y2VcGhko99955zxWzZsxGd1c3evv6AYMhjADHTUFJhcD3qRF2tEO2Ygh8H1IKmLZD7JrIp4GMZdL50m6QUghEWtcUP2+UhN6vyZ1ZQcIArWUF9XY0aObvL/n1kW1j2pBKOzjyiAUwuYUjFy9Bx/iJSfrAfQ88+EBfd/eL/2xp/wGFtH0cW7p02bvPec97PkBFG7FMhAywYOEiuFrWKGSI7v1daGxuRirloq2lCVJEWPXSSkyZMh23L7/rqc985vM/9crFf9gYrHp51WMrnntm50nHHjczfj5RRqgEQ2zCqJDL51AuVYpXXXnllb/6xc9/s2XH9h2v9X6ZXLYhX5dvJbSE1542uhB30nbx/ee+XwHA1OnT2+68a/kvZ0+fcbQIdXPKa6ZTjJFDOY/TDMCw4umn7v/YRz/6/3bu2PmqRnL8xBljHn/8kSnxlhU3F1IqDBaLsCwHg4ND7ltxnWZNnXFCjLIxPZCI/97S3ILHn1iBcrW6a8aMmW+bWVXOrWd/u+qKU1sacvo4ZaL7j1/XX3/j5muvve6ZX/7sV4fXUL/vnMW03iQcy0GqycXAQD/q6xpRKBTg+SGqlZF9o/YC67LLLv3mqaeeds7QwBCy2Qw9FTnJKxgDBoeLWLV29c4//fEPFz/x+GNXv/IzJ0yYSE1pJBEK0qhbFpllAUDf4OCBYnHwkO33lhy15MR0xnFiAKTmrRhnzEv85c//e//+zv1vytV4/lFLZt5/713H0zORENAgCGBaRrJHb9+265Ap0/X1DS0PPHD/e4h6q2toxg+2XdH/z8svrX5xsK//wFu53o46+ugzjz122QlRRH43Bo8dyYFMKqXrP03vl3QTD/QVD4tSfdY5tO5iZmZ8XJFOJ9iwaXPf3n37Dzq+6dOnz37g/ge/alpGpur5MDnXLENC9Hfs3ln51Cc//esH77//7oOeX5JPeFXnFi9WAPPnzUsnCHK2YPz85z//8gnHHfdOPwiI9WZpWW1EEr1I+YM//dkvfrNl8+aDMqlnz51bf8pJJ7cCwGBxEHX19XBh69oHCYjU2dk9YlqGBS8UyOQLEGEEz/fQ2taGnv5uhEEEzm1ksykMD5fQ09+LxqYG1NXlUKqUEQUVhBLo6ukeu2jJkad95ctf/uhJx51yiu2aXCoJJYkKN9o6PKEnjqID4lUgGHuNVoIlvUNs7HNQI6unnVIKch0zTGr2AmoobZdu6n079/Xf88B9K194/oVn161Z9/zOnds3WZY12D/QPxwEfsS4gcaGBoofsCkmSUiJwA+Rclz9kBSaegqYII0tUwwSgoxQQnJRNW2TKIzMQBSRhtc0DEipEFR8cEM3unoSJjQyIyVgcQ6pKXjQlugG55qyyxGKkIpxPZ3jnIMsISmGBJKDK2q2FRRl9UpJulpF6CaBp1REm44Dr1pJ3G0BB66bAjjDyPAIGuobUSlXUa6UW45asmRp2tE0SY34ERIWI6/03clB1appUxVRJcvlsnfffffcD5A7oVfxKAYnnYGIIkglIGQEMBN+4EHp+BZAEm2ZaQqoQqKxlHoDh0b44+xd+RpobVyEM229Gt/8alSny9QrHJbxOkiuek1ot6Y1jyed6hXd9KjpJ+LYIUbHg5hqrZt9MJFQqjjnesRP15JpAbySCrZFrrUxW4BQDAPZXA6RELqpMRHIEFEg0N7ajpGRIoLIw8knHNfa0FQ/PjYUyGayMEyiWEuNdMYDA6VhBiElTL0hVcselGJKhpFQUmJgYAChH1LEVRhCCE+j1IrM0fTGl7QTjJADovSQoRW0dpsipqirJ2q/SlB907II1YxkQl9hYCiNlGDaFiyt++ZMEU3IZrAcG5bpQAgB4QfgBm+z0haOOOJIPP/CcxBtIdra25I9S+nOIjFW8n0MjwyjtaUVAOBHHnbs2bm6v39gpJArYLhUQihCGAaH7/kIvAi2ZSKVTsH3PIRBSFTzWMXLNfWfaUYGYwdRfZGYz2nNtgKkUaPnx2srzqAWUUSOxbZNPIEwomgxALbrIvA9CBnBMh2kXHLTrngl7WitwGHSuTUNFAp1KJWKKJfKrR/91387q72tnXmeR02xIpPAOAIMB7l+0pohM67477FnvKKhKlcJA4WzmrO+0u5QMWpqOxYeeORBzJ+7APmGPCxYLVf8+S9fO3nzqZs79x142rYtitACSVJKlTIc00bKTUNIHbMWhbBMC0EQwICJSEgI7YSvFIPnBxDaOV8IASHJLd9xLERhqKfFsZvCKCM3SbSwt6PhdRyrae7sI+YCDOd+4FwMDw3BYAYyroux8xYgEhJd3Z3y6quvf1gpFf6zrf0HVL4ZkyZ891vf+sTc2bPH9XT2or6hAM+v4rmVz2HSpMmYoJ2Zd+7ZhY3r1+Oc97w3GR9yw8Ts2XNg2w4eefDBp7xy8f8seE3TXGQyM58wyDjVQZbJtZxAwrYcbNy09fmLL/7BL6+75to7pFKvGzdSjYIx9YW8QaRaOeo5DYRhiL279jvpVCo/pqVD/eKXv/zV7Okz3hdFNOhlRm0YGpsjMsXixtn782V/+dvXv/K1/x4eHn5Nd9uJUyZMHTN2zFg6FE0VVPRMmzRhPAOAzn37zTd7jdLZwtjHH3/0OOoy42d07FfAYNkGuro7vYefWPH83n37t71tw5EJY+YtXLjg2LipVzGLTSmYnENEAlOmTDnQ39e/5bDW4vjxTXfdfddCOk4GZtJ13LNnD8JQYknrIuzatcvbum1rMkT44AfO/fDHP/6f/+r7HjLZLEzbpMQEhcS9PwzFhh9890f/9dBD99z0SlfscRMmND5w3/0LAICZHEwJzewD9ncdgJASa1evO+SIp6am1tZbbr31xFrZw0ZFztFP9u7du2Xfvn1PvtnrMn/67NPHNLZOBAArZUOGkZanAJZpYMf2XX0vPf/SIR/DqWe849QlS5Ys1ONhzRJE4pkWN/DdnT3i1ltufzII/eitWmt2Jj3m8ksv/yiANDeT0SpYTHulNDxK5YjIkAwAtuza9uyhflYmV6h7/rnn5yaUhaTzVYmRbHfXgZHuvp6EuZJOp/mll1722YmTJhwlFWA5FlREQJFpGDC4geGh0ss7tu88yD9i6VFL3bPPene7RnmS53oscwQM2LELGIB3vefd7//sZz71H1Racl3TSkDpqEnLxrXXXnftqpWrb3/lcXEm6tOZVEssW3Js6vUMzknbbRrYvm1H6aknnxoxoyiEYQCe5yGbSiOVdlGulKGURGtrE6qVEHv27IPjOGhtbYXBDTS2NaIQBti5fZd7xjvO+MBHPnr+f5x43HHH5LK5VOwgCqYz6FQtxC2JEnrdtvYfTLtf1XfUmgnFYmMImsj7kYAKfChFOZ9DfUVs2rhhy5MrnnrgkYcfue/A/r0v7N67u0cqCddNobGpGa6bQmtrK0I/QqVahqWbh0gKpFNpRGZATriGAaEUFTlSIJfLIxIRqn6Zcmsj0sgyTbNwDA4/DGAYBjgziTYeO7+CaKpRSKLvmGonlUiKW845DFMbQGnKuYQEMyhy5SDjJSi4TgqezrRlhkE6HcZgWw6qVY0wiXi6w1CtlGEYlnZai1DX0ADLNDEyVIQfOEilU8gX6tDYUI99+/dhwuSJC4499tiFCZ35tUSsOvMSbJSmWru/QgJbtm3dvnvv7o2pVBqxBqXqe2CKwbYtcBjgpoXQD8G5CYMDXuQTYqsjtJjFk8Le4AxS0s4gtebOMMkoaXSWEBtlIsX1hqK4pjwkG0BstFNrcPAKJ9nkUaL+AcKbFO9UXIw+TTE9OKFiK1DnYDDKq1GA0sU+07bvUsg4PCJp+Limr0O7bsebF+Pxz2nY4vsUa5NJZRBGEQzbRjrtwvd9uI4LUIPaUhwqZguFAgaKg2hsaNRNp0rWJQNZFcfHFbM4hZAIPB/5QiE3dtzYxvUb10PKFAzLAmeAYaUgogiB72umB0MQaHSSa/MVTROVmi7HNMpWy5HVUSBSQukm2DAMhGEIppupGEExTBM6NhhhFCaOxIopGAYhda7joq+/B4Vcxmyqq8tVPB8N9Y044fgT4flVxJp3mufovUZPr23bQj5H0W1hEGHn1p19G9asfS6fzyEKQ8rNrQoEwgcMGvyFEjAUIbFkWqdNtZSoZRCP8lcjozntVh/nS8fsFR0fRHpU4ijGBmaGQbIMISJ9Xjk4TIgo0kaDtD4MmIiCEMoGDMOEZTiwLEK/FYC07cAPAgwO9qNUGsYHzzvvI5/65CdOI9qQBdux4UcRbG5ARgoVr4K0myKzDSn07G0UAh9nLTNiN4S+h9AXMAwgkgG4BLFNVBxRVXs6SAmceNIpmDC+A329vRgeGsHMWTNnffd73/rCeeeev9l2nP5cNq+HeAbK5RFEIJaKwU0IQbplQw8RpawNR03D0mi4gqW10FEUECLGlJbJiMTYRWl2mdQmH7THHurT7A0WePPnzTxy8ZGTAWDblq0YHili6tQZePyJJ7BgwSLMmjkdvucP+p63Hv98/cNXtVI9Ytkxy04ABzKZNDjj6OsfgMkdNDe1JUheuVzGEUcsoH1ND4YBhXSaMjknT5/yupEnra1tY9937vtOPeG448988skn3rVkMVGQk+hEoVDxfFiWCcu2cNVV19z1jW/9vy8d2LtnxzVXX/MPv//Jxx+3MEFLXuFm09XTg3wuPzb01Xd/9OMfz7rgY+e9Q2rPhwgSTLvDG5yG7VzR4LC3t3/3hV/5yn9fc/WVVymlKq+LeGbTWdfkbq14rQ3qQj+E5Vg45bRTjDd7jT76bx87fcmihdOTZ6RiWn5FdUS5EmLpsqXFK6++8oHHH3tg19u1Vs5533veN2nKxPbe7v3I1zXActyEaSWhYJgG2tvbBoIgGDqc958+c/rsSRMnTk7ooaD6ZeKkKSiXS9T87t5tLjzq6OOnTJ2x2uRi7JMrVnwTQC4KJRyHIRKCPAu4CZgMj614ctWXPveli1avXvWaOtnZM2YcMXPmjKlxr2NZJgCGgf5B7NyxA7Nmzurft2/PIVOO58yZderxxy2dH78vGz3I1/97y023rtm0cePmN3NNmpvHZq+86qqz4vpN6cQH13IRaglcpVzuC6PokCjNpunwq6+87r0AjFK5DNd1dLoJkmQRBjJn3bFn9+a9nXtfeGup8+9718c+8uEzidgnk+DV0Y8TMqOseV489tijL/7sp/9z/9e+8uVD+qy29jFTWtuaOqhmU7A0e08qJJ4qEydP8sZ1tCeV7dhx4087Yv7cc4luL2CYBLBQcgUHgODBBx66Zvu2LQedd8llQ31L/bi4GJa6vuGMkTeJElBgVQDoGD9h6vXXX/tlAHW+H8G0WI1VJyUsy8LGTZtXfOc7P/hpb3fnq4YNzU2NLa7rFjhnGNcxnkBJoQEEXUc0NDaEEyZMCM1UKg0GYExbGwzTxNDwEDn1ZtPI5/LoDfrRUF+PKCS0tOyVYDk2Oru6MHXG9A9f+r9/+VEm7Y4NwhBCF6YxCqE4P9i09jVyFw+vTGCvoG9qnQxIf5NKEcrR3TMwtHrNmhcfePDBB2695dYH9u3dt84yTNHS1oKW5jZEKkIYhBgYGIBjW/DDAEJKlMoVNDamYHKO6nAVJTmsdWDU6AZRAMd0UK6MILBsTR314dg0ybC0I6zveUSV01mcCqSpU7p4Iq2dBUBoTWbtqCKh0V0FKkw1lY4maHEWqs6ZYlzr5iRpZBMHX5lMSiplYkAYhgFmMZ2PS1m8QgjYjgvTsbUBUATHdeCmHJSKJXSMb4BhGejp68GnPvupIydPnJRPHuSqRjKPKYye58Fx3JoJmV4AIhLYtWs3brju+h2DA0P76urrEQQBmWkxcpv2fQFumnAcB17Fg2VxOOk0vCFP5x9xGDyOFiF0K9Z5jvI2gopUYgBVC6jmSUwT5RaLWjPBVA1p5eQIdxBlHrFLH9O6S/YaZlav1ANrVoJmM8TMBBXzIxUblQmcKCvoJtV6yNg9N0GmY1qt0gY6DOSQBwYRylq0sG4yDNNAEPrgjMOPiIUXeSEymTQiKeC4KQyXBmG5TltDYyOkEGisr4fUGkvGOYQStH6ljumJZQmco1KuJOhhuTISWZYlaEMN4XshOGNwMykoRU2d7djwgwASgqb3Qu8CuhGG1I7SSmjEtkapjhUfCuRILGWU0Nq1tbfW28TduEqCzjnnqM/lMFIugzGGcmkEUkpMnTF7Wl1DoW1kZAjpVBb19QUUhziUZKOydw/OYDYMExwRSiMllEolrF+/4aW9e/eu5UphaGRYN9wKruuSFjcIwbUWlukmNQpjJ0ZtrsaUdhWP0Zc447XmcszUKKOnxABBm34xQEWCMrU5BzcMyIhM7izLhmk6iSGTUoL075YBz/fIRdPkCCIfjDkwTRsiVDC4iRmzp6PrwIFp3/jG1z9qOaY1XCwhmyUmkmtZCIIQBjeQS2f0ME9A8VHuCYmBXghuWUkunmOnIaWHcrUMx3KglPnqyab+X8s0MX3yFADA4OAAbr7+Fiw9fimmTp52ztLjjnv2mRUrfoesVKbpIhICtukgzkHNZQvw/Qq8ahWBCsC4AdPUWudAQWgXasYZwihAEKrava1Nq0ZHrtFeKxNnccIEFN4GgBdLFi9Zls/VZcNqFW7aQXvHbEgpsWDhAsycMR1KCIRe1Kki0fPPlvYfUsPZDy/+4Vn5XD4tI4VMPoPhoUG4roNlS5eNYsNwzJs3j54lSsJgHKN2bIyUSsEdt9257b+++30qDidNrq+ra2zNZdMTTzr5uKOW37X8tKOWLDkKgBNDREojrL4fIQwCinq0Laxbv27gir//7VcH9u7Z8X99/9lz5jb+/Yq/H+P5IYojg2isb4Q5qr0sjRSxZfvmSXPnz/n3D33o/XkAiELSp3Mdy6EUkkE7Mw2MjJT3f+HzX/jq9Tdce8vVV/39H35+T1cnL1UqyKbTiSaO3IE5du3eje07dlV37dqz981ep0/8x7+fHO8ZiI0nIwXTMRFFAS655PdVCbl1aGhk3du1VqbOnNl403XXvFNFEcJI1EwilSQKOOfwPQ/XXnv91vee877D+owZM2YuyOXymbiJiASxUOoKeezbuxdDfYO47robzNtuvf34JUcv7vjxxRdPbmlpm1guV5NnRlw7cIshEtHAz3/60/95vWYXAI5ctPAIxpidDNr1MySTyWDhgoV4+eWXN6xbu3bDId5X5lXXXX0O5yR656OYcqPr/NJwaXNPX0/pzVyXjonjpi456sgjksZaS/mEVIjJx0HgdQd+9ZA+Z/z4sTNOOGHZMZUqDaJMnVms1OgkBjpnTzz+5BPPPfPs5rdqraWy+bYH77//PwAYsXsxe42OiJrdJF1EPvnU0zf1dncd8sBn6XHHzKyvr88pkHN2TAKIPUSGh0Zw9/K7Bqt+YABAob5p/N+uvOILM2bObgtDEXu2wdSRocwAbrrx1uUXX/yTv3/taxce9Flj29udU04+dQwxUCgnPGZEmdyAYZp44fkXw3nz5heuuubKLx637NhlQkiYFq+ZrkYCtm1jeLDY9bnPfP4XO3Zsfs095oQTTp7U0tJiF4sjAANy2YwGaUZV1kIOlsrlqmnZNjVEnodCIQfbtmEwA7blIPKp+89ms/DKPjL5NAp1WfR09eXymdwHP/7Rj30rk3bHVipVVCse8rkc8a5HGSqog4jK/7i9feWN8krsbLTrmxLUCMQ3mWHRQt13YP/QbbfevqpYHHjknrvueWLz5i0vM2Aklc6irbUF1YqHgcEhOJabuKO6touq51MxAzLwGh4ehsG5zhA1YTs2wogmMFJK+H4VUkp4vgfTtGAbFLMhwhCVykhichTGdGVFZjqxRlMphdg4g+moIUDpxo1CtG3LRBTFDmU6v0qfXMY4oTmSjHqoZ7A0wkkW9ZEU+ncZPfyYkbj1VrwqDMNErlCAjGga4gVVBFWiKzY1NmFkuATLsNDW3AIOA0MDA2x8+9hl8SI2TWOUqRMJTIMoRP/AANrb2l9VwAopMHnyJEybPqOvUqlG3LB12B4Z+wRhAM8jt9jS8AhsHRlRrZSTJoJcfUnza3ADEhKRkIk7NaBzYrU5mULNII0Qm4O1hYSUj2osRsUg1NJUYrdlXlvHr+Uazg6mNsa03YSJgFhjrBJjMTIX0tRIQXTfBA0HRRIZzIBpmuSuqyk3DDVKm1SUgQrGYRgmIhEmzSoYYJkW6V6VADcNiDCC7wWwHIeierwKCoW6dsu04AUBZU9yYH9XF9rb22HA0KZaDDCp6fJ8P/aLQF1DHQqFAm65/ZaRdRs2lHK5PFzbQcoh3WrgeWQupLPYmESS6x1TlCElxbzEbABNmUtIPozoV4wxWKZBzZuUGo2XME0LpmWSC7r+YkoqWAbZ+0sRoVrxEYYSrW2NUFGEgaF+dIwdO725tbl1YGAYYST0gzMA4xxuytZ0XJY0vXFuMzMYcqkcisUi7r7nrif2HzjQY3IG16Gmy7It0ihHCiJSkCyk+5wzGMqA0shu3NSDacpybJgxmgavHwBSyw+4HvIJFcGyLHDTgF+t0tReMCjGaV/kNEQTmpnCAQR+kKCnNNQIEQoGxhUcO0WDFEYax/EdHTiw7wCbPm3GBydNmLww8AOk0jU9rFICBuO1zM5R7AWeNI0M+/Z2olwpY9KkyVBCohwOI5Oph5tykYaLSrUKISkGSB6EEIzKutaj9vaxY3HK6adg1649qMs1pO66/a6vnffB83Y89Oj9y3O5AhhjKBTyAGMoDo8gEAECr0rDRgm4pgXD5MR24XT/m4zQ9iCQMC3teB2FpAnXcopICAghtb6XfqZogqDN1d7ajteyjJb/+uEPjwUD7r77Xtxx3z245He/xX0PPAhuGZg3ew78ShUP3HvfjsHBwRL++Xp9pPzI+e/49Kc+ebYMQc/haohKpYK6xoaac7wSeOqZp4fmzJyZaalvsdRBJvx6DxKCveMdp77ve//1raMWL1wy65bbbp3W2t42qTFf15hy3YTtIkMJyzUBRlp8zg3YtgnTMpLifMumLVv37dm75o18/1mzZ7UsOWrR7GKpnDBZ4iEgZ8Dadatx+213OH/96xVOvpBjYUjDRNM0YZqGdignagK3OcqVyu7zz7/gwrvvvv22N4SuNTa2p133oOdajAi1trbixRdfHP7zn/748oUXfvGwr9Gc+fPSV/7tb5OSz5C015u2oen9NhYvWhSu27hu164d2/a9bWtl9rypE8aMO3KwWET72PF6bkFDTykVDAAiVL093T3PHe5nLF167DEASCaXspNcYwAoVyp46cVVuPW229DT29VxzlnnjJt/xHxzZLgMEQawshmYpokwimDbJgCUf/u73/7yqaeevvUffebM6bMWxxTtWBwYPxcyro2169Y+u3vv7sFDOY6FS5Z0nP+h847TDPSExlzzbQDKI+XBPfvfPCo6Y+qUpU0N9a3QbDfDNBBGIXmZaJO5Z5599qWde3cckrb1pJNPPK2tvWW80k1f/NyNv78QEWAY2LVz98DyO+64T4rwLYkjstws/8Uvf/61445duiymD45W0b3qJclk6s7ld63+4x/+eM93v/3tQ/7MpkLDTEP74sQdvdLGtYIpuOkUbNspWIY9tr6hkZ9z9nu+8L6zz343kSol5dsrCcYMuCkbIyMjPb//4x/+Uiz2vuqcPPLoY1F3X3/djBlIGk+K/KvZJvf197RMnTrlS8csOeYDrzpWAAZpy71vf/+7v1nx9JN3vu7gIFOYBwApx4UfeuS+zzm8ahXcsGDYHM888+yGvfv29vJ0Kg03lYKbTqGuoQ62SYifk7JRrpRhcA7fD5AtpGAyE70HivWnn3bml5946rH/+fh//vuU3t5eOK6DxqZ6MAMIo2hU7At7lbHy62mdRqO9SVc+Op0FNVopB2Vw6SQdDA0NRw898Nimn//sl1d87aKvf+b66687/ze//M2PN2zY/KRhWCOZXBaRiFAuVQFGlCbfryLwSDtq2zay6TSYoEbKdRw4pgXbcpBKp5FOp8E4RxB58LwSlCAufT5XB9N04LouTJNDhBGiiIyBpJKwbJuaMkEZmNyggtc0TDJgMk2izIlIj4N1XWcwSBEh8AUhYBKjXNo0rYhrp1BuJIY+MhKk69D0UNO0YBoGTO1AGsf6BH4Ig5tgiqFaKkEpysaUQiGKIpiWjSAIkcnmkCsU4AU+du7egSmTp8444dgT5iTNnRztQqw1lYaFltYWSCa02QM1KzGn3jANbN60aQchRCaZh5hEc4i1m4Y+V5Zl6xzZEI7tIpPJwnFsyhJWtGFLTXE2uUkNnqF0FjFpgbn+TGboyRGTFP4iIygABkzS6ej3SaQv6tWsAino2tZWJHtdgDd29mPQWintmsxjPZAuWqR2XSYNJon0VTLZ0+YkGvnnvJa1HG8jdPyyFo7I6VzEnyfCEBCk4TYNA0wB6UwaUkoIESKXT8Ov+ki56XrbsZImWUDAMjm5gscxX8khS5gmNQWGYelpH8OkyVN9y7J8QjJIK8t0TrJl2TAtE55XRSQC7cZswDQsmJatDcaYNnTSk06d4coNTlpxjdLHjD7G2UEO70oo2LaDIKQ4H6L7aoMFoRBGEVKOjaH+AWIWQCGdz3ak7Cwb09KOlGsjEgJ19XmkMjQMUEzFGF7tFHNyBH7q6afE/j37R0rF8otDQ0Vk83mks2kyqhMCUSjBmaEHCJSZDalgWjR4UixuluJ7mieDGaZk7TgZT84JQ82ilZyoSVPG9M8iFZIRms7W5CYxJ4IwADcMmIZJ1F3GYXAThmXCdm0UcvWwLRvM5OAWRyadgV/2kM8UFv78Zz+/IJNNY6Q0guLQIKQSMBgpnUQUolr19BCJ/nBwYkhoDXYqnUE6lYJjW7j/kYfXn3DCKX9Zu3r1Xg7ADwQYN2A7NACJ0dTYFTV5ZuhBg2OlcdTRS3DyySeifUw7GhoLY3/yk4u/X59rmBZEATKZDDiz4Hm+ZkMopDMZpNw05Q0KgcCPYHATru3qPFGppRVGMiQjp0yeINIx0pxyUzANEyY3E+NFKvje2oa3rW3c2ObmtokAsHv/PlSqZWTTGezbtwdNjS3gDAiCCH0D/fv7+3qq+OfrNV+267IvX/iV80tD5dYDB/bDMk0MDRZxoPMApG4MOWf49SV/WHXKshP/7Quf++IvBocGBmKTOmJc0B6Qy+etn/73zz71w+//5IfvOft9H160YMHijpa2RseyEYYCYUgRIpZrYqh/EAP9A4nmTqgaMgoAHeM6ttfVFYpv5Bg2rd9k7dt/wC1kM2iub6KhuEbUfN/Hpg2bceGFXzLGj+8woojYJIZpaKNK2r24wWHYBgaHittPPfW0L7zRZhcAzv/IRxZwPXCnaEEDxeIQVq18EYYJvP/c90s3ndn9Zq5T9/6urFfxm2NqeUwn9T0ffqWCnTt2Ytz4jkhGYm1Pd9fg27Ve/CBY3NDWYjc0NtSQUEUMtLjJv/zKKx599vlnXz6c9x/bMaH92ONOWAyAdLig2EhTJ4Rk3BQOdO5DJASuuvpK6z8/9XFTCKWjX7TkR9FeBKD6y1/89hc/+O7FvxwaGHhdh/aW5tbWxYsWHzGafRZFEjJSsCwD1YqPZ5577pBN7yZMmDDD5GZ7vEfHYAIflUt+1VVXbbjsr5e9qTiiiZMnp049/dRlhIiH2lRKankT9QNDQ0V19913H9IQolBXxz9ywQUnkfcF02ARRmnjI5TLZZiMobPnwIade3c9/5bR5s9+93lf+txn/iMZ7ryqnlSI4sQOpVCqlJUQAt1dXS8NDgxtPPQGO1N34kmnLK0xFmkhcA1jG4xh3fr1uPWOO5f09fZ+uW1M+7d/8IPvfQoAi4SAkhKOa4EbBjzfx8DAIJbfc8/1EyZOfPq1Pm/ajFmqpbk1EyczcC11je/tUrmEBx96eOLnP/+5j7eOaRvj+4G+nkLn5xKgc8NNN1zzl0sv/V3ge6/5gJ0154jUjFkzZsf1ciaboQFmGIGBw6GhEJ597tmVxaGByDRNC/lMHgwSg31DGCmVwcBQrXrgBlCXycMPfARBACiOE0896Yxvfutb32hrackMDgzCthxtIKR0k8UwNFyEZdrIpFP/sLlNzHxY7QIkRi2jdY+xCZBeD1JK7Ovc1//UU8+u275l+8Zt27a99Owzzz5bHBnaahpmta6uDoZpI1NIIwwC9Pb2wzItbYBA2YmMMwgpUKlUyanONhFEEq5LCE2lVELKIM3jSKlEmjgh4ZjkOGtYJjVcQqBa9QBF7qcSEswkKnIQ+rqIB6Qi+24lCapXmh5TozLonUjKWhElQxjcoqJVRAnCKHVzGxuQkQU3koIxPlGxRbyU0AggQxCEkFIim89CCgXfD6C4D0jSJhqGCa/igymGupQD23Hg+x4cx0J9oW5CxfdagiiAbdo0LdTQl9IIKDcAAxyRCClvi2tDLymgFMOB/Qe8latWrrYSQy8O0zQS0ximiPrJTUNHioRgDAhCD8rTphkgUyqqVmsOumSExrV5DQiZZEobT6ikaVBxs6QneAyAYZr6hnuFyZV65ZAmNm96RaNb475Qk21QfjChubWNK3lPVUPzFRQ4N+kcad1lYv6QhMnL5EahZcASuig1yhT1EgYBrW+DBPucMXCLHtRRGCGMImRyOZqQ+tSYuq4DznhahHQ9UqkUKmEVmXQ6kQ/ElBopBMqVCrKZDJjt6ggpOj6/4nml4VLAOEc18OCXApqKcwOWZSMMAm10Bh1fwxGFoTZR4/o0yqRZV/qccmZAgFxV4wxiivDiYPohRSZRBuob6nGgsxNCSDiODSEi+IEPx3S062eMoNk09WxsaAKAUmkEEgp9vb3I1+eRzWSpUHyNzUtqXfP8efPUU48/tX3thrU7srkMMT88H5EfJnpj27SIiqwUSRj0FyAfAKnzyDV1W0pNY4fWyYw2PENi4qKk0i6OPBkUxehSHLEWhiEN5gyDzKsUIMJQ5y7S93ccQhfCUKAUliGlgJPJwDIttDY3Yc2adfjvn/zk/PkL5s72gwCu7cAwOUzLQhREmmVgwNZaICElDIPRNRUcYRhg7cYNmDt7NpSQONDVVb3yb9f8bvWql//317/77YV/v/zy/3FswwYoa09JWSuWWG3cG1PpiyNF9A8MoFDIwvd8KCGxbvUGLDlm8aL//MS/nf/zX//qR67rojRShRAClmXSsWpmSxSJxBjQtkm+IcMgMalinNzvmUpE9rR/Ma7PtYTyfM3AqXFKpRJ4q2N4Tcays2bPbAaAD1/wYbz3Q+/F8PAQOjrGYPq0KSiNVGE6JoSKev/Z1r7+q6Gufsrpp55xAnEuOQaLI2hpb8O9Dz+AJ558Gl/+8pcQSoH777/nKqXUHYyxOy1u9/z971d83zCMOhl7Byg1aujOkoiQ0I8SOlsUBQAz0d3TjZHhYUyaMFHLaADOlB7S0XvcfPMtzz///HNvyPymuaU5HTvpKM18iZebFAId48dh/LhxqJbLcNMuDWcTR32SSxjMgB96ez78kfMuevaZp5e/0fNnWI59+623TtMFCeVOM5I9vbjqRWW7FqurayqXS6WhN3OdJk+ePG7Z0qUT4iqQWDSA41gIQx/33HcPVr+0duPKVSuf+cqFX35b1kquvi7917/+9cRkyMxfzTrcsmmTuvaqqx72KtWRw/mMxYuOOnJ8x9hJNURHD9P1542bMAFPPfUczj7rLHz0go8lA3EnZdH9HsWsIES//8OffnXR1y/6oZLhP3RWPu0dZ8yeO3/ObHpGCEoJ4bqGAjBULI688OKLhzywmDRh/JE11LhWUzHtjssNBgH5slJy+M1cl0JD46Sjlxx1JD1+iRVWqVYBZcBJU0MjorCvWikfkomY47pjx7aPnR+jioZOFIkRas4Y0i71MKteXLVi/57db0nu8/wFCxbds/yuiwDUCSF1xv1BVjyaJYWEcRZ6PoOdwp49e172vPIhx8+d+c4zj3jPWe86OjmHMfNQUs40ADzz9DN4/pkVzPe8D1/wsY/yyZMnmUoCRsJwo2FGIZ/DI48+/MR3/t93/rxjx9bXRLyjUNUV6uob4jpX6gl2DcSB+vSnP9OxeOFCFhv5CiXgGMRSNUwTO3bu2PjNb37rd0G1+roD3XKlnOvoaB8PAJVKCeVqFa2trSTbYmaif97fvX8DAJj19QUMF4twHCoI3ZSNyCfqbcf4DrQ0tSCoBlizdjVgK6RcJxJhMFKtBplsLg/LMqgApEqMFr8CXF1QHITuqlqzEOd0xdoZVuvTEsroK3ObhFLBM08/s+aG62+4+/kXnn1oaLC4sVrxhsCZcF0bdYU6CCHQ090LbhgY6BuA69gwTQOZjIuRUhlSRmCcPtN0HIABQ8NDABQMw8RIqQTTsiBEiHC4CMOwEGkKhWVaUIpDMRoISCm0W6EJFTvGSkCIoEaFVdTYCkn0P2mAYoYUIDUazsBrBhm6yDcNU6NUQjdubNSNyJMMNYaaKUZ80mLkUCFWmNFUxbVcCCEQKkJzWdz8g/SsUSBguibqGuoAqdDT1YNCfYjp06dg7Zr1aGxonjNv3rxc3OwqxUZNxGrRMYT0GhTdQSGblANr2yiWRjZUypU1pqZcK8XgewFpnw2KWjG4AdKE02ZAlFdo51R9o3KlDXhY8uCP9VJco4OcsxoKDGi0hkJjGAxCw2MapsFrWtD4j8IrzKZYcl3jiCuGmo457nmlVFBRpA3FElJ1TOygZi0xtaLGLTYjiRF7QADgZISmjZpYrDPmNf2FZdKQwg88aqINA0xRQLdhWJCSUHupJGzLRiptIwh82KaFxoZGDAwUEQmBMe0t2cHBQWSyWQgZobe7G2NaxxzU1cfZbelMhnSiuoiMT1DFKxe9wCtBDySkplGDgfKfpaR1AQXTtBCGGtU3Kf9UaZp3vM5jR2fTMIg5oin9Simdo8wTGYBlk6SgODREml1GiLxlGchmMrBNG4EnUPE9GDbD0BCBK4sWLW4GANdNQ0iBnQM7wQ2FbCZH/us6FqP2RKK9rupXsWbdavPOe5fv7+3tHsykMyiXyxrtpL0AINOsSGd8xui8CJVGlnhi9EHMA1bT1cT31Cgb/3iNJKMbzdigB0o8ODPIBI8DUnJEYQQ3lYISUmtpyAVeKIlACEBJREGAdDoLbqTgplzU5QsYHh5CU2vjcSefdvJHYmqXZVnwvABbtqyGZVqYM3sOwCUMk/YPw2QYGRlBqVRGY30j0rk06hsa8dLatZg/ex4evu/RJx64//7bFi0+BhvXr/vLJX+4ZMa//+snPpXNpjRbhIEZ+uGImk6WgyEUPsIowKRJExGFAmEgUCqXkM1nEIYRPvTBD5/3979de+9g/+CL6VwGCg7CUEDAQ+QHkL6EMsjxOQgClL1QU9go5zreezkzkiGSZApBFNXy4jW1i3ODXPJRe4Bz9daZVtXlCyztpNtTtlsAgNuX34nFSxZi1XMvYfny+3Hyyach5ToYGOjH3n379+Gfr9d9HXvsCUc3NjRPCrwyZBTBcahAXnb0CahUqFZ7+YU1nZ27Ox/TNYpy3dwfsuk0fv/HS75tmlYTNbnEEIr8CExHqnV19aC1fQwcmwZxvu+j2NOLYnEA4ydMgptK032JUQ7rnKE0MuItv+vuF372s5++oWM46uglYzva291yuQrHdhBEIVyHBnaWbWPurLloam5EKpPWGbmjBraSEFkA1W9+4xu/uu+e+24/lPOXz+eybWNbGqHvE6WfRY2NTfiXC/6NVb0qbr99eVdX5/43Ras/4dQT5jGDpaQuioUkJ2oRRRCRwowZMyo7tu3c3dXZ0/l2rZWjlxy96NilJyz1vRCOa5HBoEbSmVCAwTBx8uSehvqGNYf7Ge8+84wlBoepFJLaN14XHEChkMOxxy/FkkVL0NXVie3btmPJkqN0EgiS637l1Vdf+oXPf+5ipeT/GSM0fmz7nPjpVS6X4fk+6usKeOHppzFz1kw4jtUHhe5DYk7YtrH8zuVHxcMBbozyGWEMXM8DO7u6Nr3pe/j4pSfMnzd3plRUhwsRApzBtROTX+zZu3NNtTpySFFVy44/dtbUaVM6AJ2MoGopD3ENUxwuonN715Yrr7r67i9/6Utveo0xzlvvvf/+73SM61gogeR5F3tExMCNUjUJneM4sA0Lvb29BwYHiysP53MnjZs0x+A8O/oaje6yd+7Yg8v/ehV8z8Oy44+xP/upT1BdzZQG5+J6yoSSKF1++d8v3bFj6+siza2tzZNamhvzChKGRd45NAih2iebzbJ3nvmOxKzTMjliO3mD2AvRNddd//ud27f/w3stk3bGpl23hUpRC7mMCc4Aoc16ucExNFQsrXt5zW4A4OVymZqgSJD1O7fQ1NwE3w+wf/d+PP/s89iwaRPGjmtHx9gO3H3H3becf/5533jooQf2xs1uzVmTmpN8Pk9oplI1c6nkJGvaaOwgGl9wxuBVPQwPlxAE4UGU0v7+AXzne997+JyzzvnXL3z28++++aabf7Bj684VMpL9KTclWpuaEfoB9u/dh84DnbBsDse2kctk4Ng2TI1yhELogk8iDAJtVgJYNlH8TGbCtWwoQXEV6Uwa6XQq+S5SCQRRgEhGOnaH4l9Mk4rPwPfBADg2xRdJJWPiKUzL1PRkBdPgMXZD6LJpJfEsRNlkGukjswTK4RydOVrTbyqoxEE01vZQFqZMLM1NyyRjrdCHVEo3SAH8KIBABCEop9VNpSClRC6XgWUZcJwUOto7wBnDgc59hc9+8fOnp1wXoXZAowGhOmg6xWP0U0E301RchyGdqxuvu2HFiy+8uLu9vQOWSY2aH/iAboJio66YDg4Z6zo5iHKrj19KQEht307TEmbEVEquQ+Ij3QTyGvUbAgpEeVaQScEahQEUE2BcI7KxVlodPLCp0exHhRoy1OJ1EGum4+EO1++RWEQnGkwyHiNab/zfDW5ql29DD0WEprzHyTzEKmCM9L88Xku6ESaxvoSAQCRCMC6RSqdhGTbCQIAxA6lUCtwgZL1SGoGIwNNOOm0aDKURyl6mGp8nn0v5zpoep+k/QlNU4lzZrv1dvcMDQ8VqtQq/UgHniqK8uIU4etwwTBjMBMDh2I6mG8uELWDoTFMhBCAVIiHhh5rGxGvu0EkWZfyw0HSnqueR9suydH6jAcd2NNuAps7plIv6+gIy2SzGdYxr0s06wtDHEfPno7W5HZ7nacrqKOaJ9hAjbVIJnudj2vTpQwbnwrZtMINDyAjcMhBFxBxQUpIJYCarXYKhHQvlKM0GuV+TCZ2hUSGWAADyIOMkvd4S11XNFjDi80jrW4yqgwI/IDYFJ/TXtK3k/Dq2g1whj9YxLchk08hm0ujt7kN9U+uRt995+8+OWrK4PVIRPL8KN0Xn0TRtNLe1gBkKQoYIg1DLNjhs20JLcwuCwMfmLVvR0tiE9pZWRFIOPfjQI38dHurvFZGP+lyhctlfrri0u7d7o354gJjQtHqlNi9jirKaDNdGc0sLDMOA49poH9sO23KSvXDeEfPnfPe/vv+JoeGBVBj6xG7gjHwQwgCWY8O1UjrexEI6nSbjLlCMGgPdV0pKjfjS3+PrzqBp+aaVyAzIG83ULJq3DuINVWh8/VtfPXLm9On2isefwIoVKzBp3GTs2LYVrusgn8lBCIFyxavs3L5jG/75et3XWWeffULKNRMfDse2cc/d96B/sB9HLJhD9cXQ4Nre/r7EPMrzRsKrr736j+d9+MP/9uSKp27eu3d/P+c0aLYcC6ZJdctQsQjXNtHb3zfwyBOPPv3Cc6uu/NEPfnzJxf918U3lkVI1HhMmA3w9nN2wYUN/d1fnnjfcXDj2zLg6pWg3SU6nkkyVjjr6aIwZ0xGHz2t5DO0H8fPtV7/73d9+8+vfXXbIw5dCPtPS0tyYABaj5sE9vX0oV8rI12WHpJJvKhZr3py5R8VIm9KaVpJqEBvnySee8UzL6psxc1r57Vor06bOOlZKdPT19QCQ0JVY0pACwLXX3PjYMy88t/VwP2Pm7JkLaU8XYFqTx7U85MCBLqx+eTWKA0NYvHgxWlvbcMSCBYiEQLlUhVchoGvbrp1P/dfFP/6lUtJ7I585ZmzHbKpfQRI+iwbhgYxgmjZuuuGm5zduWHtIzWJ9XfPcRUuOOiZmHILVHJrjnbC3f6C8du26jW/qmsycMfH957znQwAMEQpEPrnsu7aT1MD9fX245De/e+bZ51e9oaZ9wsRJDADaWprnWIbt4iDflVHNKQO27dgR/erXv7i9VB5+S3LOf3TxxZ858/TT3xszMDGKQVALC6FBeyRDRJJqP2Zy3HXPvc/ecP11Lx3O53aMbT8iRuPjA2WjBMPF8gh27dsFAPjyl76ChvoG+EGQmLxCS7nAgLvuvefG51e++A8lETPnTJ1ssBjU4xCCTEXj5BbFFGIneWg2ShSEKgZzL7/8r1ded+21V/1fx7X02ONmjhs3rh4gpNpNuTRIMngCoO7fv2/fnj379gCAWalWkMlk0d/fr5sLBS8I4XmVxDXMcYGxY8eh80An9h3Yh227Nl/34CMPnXr22Wf9C2e0pYtIO41ydhDFdHTjGiNtUAzcYBgqDsJ1XLhuCus3bkRfTx8ampqQTqXQWF+Pl196CdOmTMZTzz678fJLL/2cya3NTY3NaGtrhxARMtksquUKKqUqXNtFOku0wkhEGC6OED05EBBKoThSIhqblPD9AICEEAZ8X0AxCTeVRlANIJXQRb1JzUUUaHMsHRkkIyhB+kyKWCGUQOo4GeiQaJVQbakhYKBiOL64cZMfCgGmRM0YKW4ztDuvwWJ0N6a+yFqDFRt2cSpiozBE7EwrlY7aMEwdtSFgGERfVQpkWqWpo2TQ4yLwfVSrFZRHyrAdGxMmjUNrczPuWn435syb/Y53vuvM4wCiONTovaqGOI3mAo9CpKWUqFQq6OsfwJYdO1bm6+swVCySAZFlQlmmbtgJCRdCgNSj0G6NRE+0HAuVskcPc03pZKxG60xUjpwykRO0TMXoqs4f1vThpIllDBBKRxSNSnxOEiBYwk4wNKIpxah8VO2EKYRIEHqu/w86aYglmaP0nRWTyfkxGIMER6QLfdIvcMTqUcu0tct1lGhYTZMo4b7vw+A07LBsRxtYkRM41T8mgiDUUzQDMhKoBj5CM0QmlUFzUxNKIyWuAF6oK2B4aBjpdBpOx3iNSsQDq9FRA/E0NDaOo6Jq+5btBzg3qh3t7eju6iKjJMbh6zgipTc+BToWcMpxk0oQdVWRNvug5k4pfa8ofW8R7dXkeqCkDCgFVL0qoH8eU1ZNraP2gwAG4zBtohe7jov+/n6YnFlhqJppjQjsP9CFqVOnY6RcIgMoVlMIUFyYRBRGsG0b9Y2NmDh+Im677bZhcC4yuQzCQKCIIURJsx4RTVkI+FFE93pMVNbmITSkgh7CyNpdpKniimlDPlljbcS07kgPPqSSMBRp9blBcU4MBukHlULgBzBsUzfaCpxLcCXRUN8ABoWRSgWeX4VSERhzYbnWzI/9y7/8aNlRxywdHimjVB6BZTEEgY9cPo15TbPp+yIEg4TByTm0Uq7AcVMwDIZdnd3YsmkzJk+YgAP7q6V/+/i//Xzj+g23T5o0FXv27cWuXXswNNS/8g+/u+Sqn/7qFz/xA0+jFzUkmjEDYSRhcY7BYhFp20Uq5cbqDHR0jEUk9DDEsfAf//mvH7t9+a1PP/zAg39PZ3KwbQsQ2vSP+lT4vg9mavq3IvTLMkyEChCQ5K8ADqEUuDYCJMd8BiZ1vAJUYoxHUV3s/zRkPCSqne3wydOmjPPCKtZv2oDTTz0Z9YUCFi8+BnPmHwEeu2oHXl9XV9ce/POF19Z3zcnfc8+9Rw+PlFEZGUFbexteeulFrFuzDp/49HHJ7z38yAP39HUfOIh2WSqVAgB3NzQ0P9RQ13D093/4g+O379zhlIrlcNz4cU2trS32yy+t7Pz5L/dsWL9p08YDnd07u/furZxy2vFYtmzppzKZzPuQMNmELvqI4eKk3P5CIfeGdddTp0ydDwC264BzQvmEfv7E5C6poGsvJHKKmCp5z7333fKrX/7qv5VSh94sMuShWH1cLMeN//atO3Db7bfh6GVHI4iiwXxdfXC416lt4rjmR+9/8OjRbCJiwBjghonh4UFks6murVu3bVr5wsqBt4XOnM1mrvjb1cd2tDdBRAENLBWvxSqaBtasXV/5y2WX3iMjHNZ36BgzftwDDz40O24SjVHGk8QyMrH87jtwyiknYkx7m47PS8GreoiiEHUNdfCDsO+b3/zWJds3bdz+hij9Tc2pm2+9eQYAiDBCKuUinXahFHDKiacAAO69957HDjXH+0Mf/PAZDfX1YwhZo0SBmC0XH9GLL76wY/PmLYcdmZbP59nnPvu5fzntpNNOjpF2ITkYNzQTh2qyxqYmgPE3vA/u3rVTAcCcGTPnjG5uD1JQ6veeNGFSeaBv6LktGzd7b3aNffazXzjvkt/97kvEmNLRorHEbhRgFL/MOKZRv1a99NJDvYfh15DJ5bP333vffOgaJpagIoldAzKZLCzTwoIlR+PMM8+k55BlQyqp0zQkDMvEy6vXrP7yl77y39u3b/qHe0l9vtBMa8NIgAwylK0ZkiqloHjMlDQQhYKlM2m8+NLK537x61/9duO6df+nbKC9Y9xkgxvM9wJUqhVks1mYzCImXSTAbY4Nmzat7+ru7KSm2LIw2D+AMAjIjMOyIFSEMAzgBQHa2loQ+T4eeuBhCCVQ31KHzn1lBL7v79vfiXw6A9d1E70DGTMhMbKhJJhaIzL6JbU7ooTCmJY2TBg3Hv2Dg+jt6kNjQxMmjB+PTDqFbVs2PWia1ub2tnYMFcsYHBzAmPY2mNzE4OAgyuURNDTWQylCLPL5HMrlfQiCEL7v0TGFAhyA6zqwLBulUglSUG5tEPraqVijqJKKGNK7Cl1/auqa1h2apqXNpSjjEYyMThQIzZSaihg3t0rbp8t4UqrdhJUi92LOYgSR6N2CSfoeiFGtUXTH+OFmGFA6IzIMQyipkV6ttYzzW4XWcgIMlWoVhmnCMnUjrHNL44ejbdmwTBucGaiMVDCcGoSbslNf/MLnz0k7Tra3tx+5TAZu2oUfBZRLatqvWogE/LP4iY/mlibs3r1P7d+/78DQ4BAaGxvBmaX7Q4Xh4ghsRyUIH2cMURCAGSbADARhgCAKtVOzjn9yLO18TQY+Uobk4KynUYwZScbp6MljjNgo3XgkSK2mNCs9da0NGmL3ZqYjSLSJVIwAqvja1Ej8hCSjFm+kGN3cWl/FdRRGJEOIOJNWR0kpjYQqRaglrS8yIiEEkNEDmTFww0jWRcxuiumwnDNEUaizzBxYtqXRYQOO4yLluOT2bVm8u7tPVkZ85AoFmNxEGPooVyqor68fRTdliXETOIPJyL1W6UGXYrIvm8tp3bSEZTpgzEgKGMW1aYseghijwshHxz/EQmWmXf1oKBHPV4jRoHQmrWERDUb4lLNKlvlk9haGAlEUwHJMSMZhOymEfoSR4TKgJCzDaYRCC0Bma4V8HQCFbDZFBkZQNS01UzAYh4BCtVqB66aQzeawZ8/esueFYbE4Ass0UV/XgFK5Am4wBL6nr6WNKArBmNQsGDIaI70uS/YVbQVai1aKu22p7yUNN8YyCHJ3l4giCdN0yKVaN9lKCjDJtIM7o9XKJKIohMlNmKaNMArhV30IJeFVPIRBgEqxOvXzX/n8Dz70ofe/S0lg8+bNmDRpApoaG7F71w5Yjo32Me00nZYMlukAnGNfVye6DnThiDnz0NPTh/0H9iIIAmzcvMn7818u/fPy2+64pLGpOWhuakLQR7LTuroGXHf9tde/673vPu2UE08+pVrxYJomAj8CB4dp0zkQkURDPgcpFaoeuYgrpsBMTqit1qa5bir10//+yRdOff75J/1qsKPQ2IBicQT5XIHuIY3wm9xAEAXkNmm7yaCBMglZMsgyTQuWYeoBIiD1UFdBQSgqiLnkifv6W/aSiNauWe8tO/Z47NmzF7ZNDrmr166HkAJnnnE6AGDvnr2dxcFi3z9b29d+ZfOF6Y3NTRNLlQrKvqfqfJ9t374T//6Jf0ddfR4AcN/996+96qqr7v/5T//nNd9jYKDXB/CE/nPQ6/zzzn3Nf3P6me8al8vmzbiAVdpYLgxCVKIQW7Zt2SaVekMa0DEdYxtvu/mWOTGLKtK+GCZHwhJTtRStBIWN6ZA33Xjjg1/+ykXf3r/v8GKDFi5a2DZh3IR8wmrSU8B8Lo8li5agvW0crr/htm1dB/bLw71OC+YunD1p0pSZABl2Ku1jwA2Gvp4+3HzrzXLb9i27unv2byyODPpvx1ppbmqateSoIxcTmkYDRigGg9cwm56u3mIUim3jJ3QcHmX6mKPnzZ47fQqApN6iRwDVhtlMDuee+0FMGD8hIb2IIIJhcdhaS/rLX//62rvvXP6GaempVDo3fty4STE3W0iSAvnVKlKpNPr7Byqdvd2HFEc0b/6R9ddcc+07OEfiw5J4m4zSMXLDfGnThnVdh3tNlixafPy3vvWtT8fAhGGYlAOrB9BqlJdKNpc7pCHE1Gkzs7fddtM8ANq/QTsIk+osOQjOeMWrBG86cmvBwsUnP/H4oz8yTFYnNBtKC4YPGnok8YcM+hmv2XMHDnQ9ueKJZw8LJZ88ZcKM6TMmJwAS4v1CJZLEh+9/CF7Vx89+8lPkMjliE+qhmVQiScG57vrr/7p9+6b/k1XEuZVNmJcauKFnLK/VzVwiUjIBL1KZFACUrrjib3/ZuG7dG5IN2Iy3cD2My2SysCyTrieIuQsATz7x1PoPnkt7NZ8yZQoVpJzD831EIgBTgGnY6Bg7FqVSGQe6OhGEHjgDhgZGcOrp7zx+6pQZc194caVas34tunv6YDs2oTiS6JSKqYSaRwV6iH37DmD37j2IohCDg4NwLAfZVBoijNDQUI+uzm7cvfxubNu2Fes3roblcuzat2dgxTPPPNzY0IAgijBSGkJzSz0Cv4p9+/YhjCT8IERPbz9GRkbQ39+L7u5uSCHIiVVJBKEP0yA9W7lSJv0Vo4gCz69CCAnP8yAh4LguHMclXZqmEnLOtDEJWXIrIMlkFVFEBSpAekXIJDoJo3KuENNhmb6h9BRWiZoFM4shfy5H0SpqU1swHRkCpS+q0jmlcQ6xNmKSUr+XpswYRi1OhTEyPgBHpJv8KAgxXByGZZjI5woYGhqE51dh2hb27N+H933g3OlLl51w/LZt2+FHgfKjAJEIUalUtXvuawyGGTEYYsMj0iJY5WqlNCBFiCD0URwpwg8DDZ9JiIhykZVUsEyLnBmiAIbB4bqk80tcbUHa3yiKwDmDaXLYjgPbsg/K3zo4WoglN3KcU5sMOaApZwavXU/d6NLBMDCmHZEVyQ2gBzo1UxNqMrlpJO8hoZKHWzxVIxS3RmG2DEsjfVL/0ZE1SsQjEv1dadgShgGEDPVQo/bepG0MtKkR0aYMQyN9DLAs66B8w/7+fkgl4bgud1IOmG0g8IlCU6mUUCwO6yIrghg1AI6p1V4QIJ7wAsDg0GCxXB6BV/FRKDSAGwaCiOKRolAj90bsMq2ReEnUPDaKuotRMoiY3sYY13peC6ZhQTEGIRREqO8hTfFVkYRtOoDOV85ks2AAPK+Kvr5+2JaLdDqNSCk0tDSPzWRTLQCQSmfQPmYMDf1MByY3NW1bkOFMnP2rAD8M0d/Xh9bWVsybO9cXkS+GBgdRLBbheb528haItFu7EBLQiL/JqCnnnFgN8YCK0oc0+i2FRhLpugoR6WksNKKrknxgqQuYMAxQKZcR+hE4J/1/4AdkAGYaWntD+b+e5yEIfQwVh2C5DuoKBVQrIWbOnH3En/78599/5cKvnufaKbZnTyfmz5+HlOOgUqqipa0drW3tyeNSCBo+BWEIyzIxf/4cWI6Jl1atw/XX3qImT56M22++4+Er/3b1/3aMGzcilcDIyDAcyyHX4VwOUrCdX/vyRf917wP3beW2Adu2kEmnYNsWiiMjYEyCm4waUW7AcixwBhhgCKMI23Ztx65dO7Hm5TXYs3MvFi1cvOjS//3f7wEqG4kI+XwehVwdDNMENwE35dDAz3bJdEhG8AOP6J9aYuOmUnAdF2EYouJ5iCLS7SqDXJ5ty6Kcce1cqxBBQbxlxffA4KDctm17uam+CWknh56eXj2FdzGmrTn5vfXr1nf1DXQX8c/Xa76mT5++LJ9OF3J5am7XrF+P+UcsQhAorN9IcZpbt297rn9g4C3L1swUCsYpp5y6qLZPquQ5k0qlkM9ncc1V1z67e9fuN4SILjzyyLmzZ8+ZGCNcnLFRXkc0FRuNAtWea0BfX2/n7//wh9/u37fnsI/vxJNOaIuHqQbnGkoG6usLqPo+hkvlUl9P15o3c87Gjx8/zbWtdNLCsxo4MlIawYGuzqi3q3uoODz8trkzn3f+hxZMGD+hTei8eIoM1ENF3fwsOWrhQBhUe9esfvmw9AszZs84CoD2LlGJ/IuDIQojrF6/EfUNjUin04lLvePYBCrYDtasXr36Fz/7+R+qldIbbvqnz5jWNnnS5DFVP0AYBmRqCWB4ZERFYYj+/v7+4vDQIfkAhIE3pa6QWxAP8g1tmhrXqZ1dXejt7QseefCRBw/3enBu8H/993/7j1w+N0bKWqMGSUPzuIwGgL7u/h2rV2/ccSjvnyvkx+cLdRMSgEARUzVmT8ad9KqX12zvHex/Uw7kDQ318y/5/a+/n8/lpo2y5ABTByP8LGGTaalYLXsXN910y9bO/Z07D+fz5x15REdzS2MLMMqCVKmDxIgLFy7Azy7+EU46/rj4slLdqhMfAODlVWtW3XH78rveyGeOHd+RBwAZCijtI0AgVI26rRSASEGEAqFP9eV99z3w8C033n7HG2KGjG0z5s2fPR4MMC1yOldCJXVS/BKIEvSf9/f1IZ1JIZ/LwbINlEol9A/0ww98KCUTTZ/v+/CqAULPx9FHLc6988x3Ye7MeayhvgkNjYXkktm2Q0W8aYEzBt/zsXfXHlx11VXYtWcXcrk8hoaK2L//AKQgenEY+JChwLp165DLZnDa6afANBx09/ThqaefXrNu/cYXGpubUCoPw7Et2JaFgcF+9PR3wbA4HCeVuGxKIREEAUxd5JmWDdtykpiSSAhEkYCEQCRD+IGHIKiCM2oahZQ6IJnopQbniQuuYZpkD88NovQJCaZDlA1O5k9x7m1CL1IgWnJsKsOoYWOa/sx10atGtWlktc50Pmft5iPoH0nTR5SO2uJl0HmmUlJ5ndjD10TxpmVoGh650jEdH6KERLlURRAFqKvLwzBMFAeL6O8bhAzFrHHjxo4bP348OsaMYblslvKZ0ykacozWuaJWqBN1U8LSboD7DuzfuHvX7gOGzoWNghD5bBamaemsU5ZoUv3A18izCSEiCCFr51ixxMjJ0Bth1ffgBwHRSXVOaM2squb4y5K7TU/Emar9kTKW6iTmHOSaLXWzGut56L2kknEVkqCQSv+ctIjUpFi2QwgmIzOlOGYmOXFcazJNE6ZtaWMu7S6dMMR54tColKJYKaazmXWeL+NkYmVZ9JA0DTOhWkdRiJGREUSRQspNwXVs2CkHYAZMy0Rzc73K5zPI5NMY6O9DT3cvWppa6a42KN4mmeEwBUNrJ71qFX7Vg/AkDuzrqoZRCDftEgPA8xHoQZJQkd7IhW5wFelTkmuur7/WIcfrnWaDquYGrQcXMoop6QxRnI+qJAQkHJ0lbnAO26HoLjeVRiqbQhAFaGisgzI4GtqaFrSOaW0sV/wk95gl9wsQhiGiIMDowDTbslAoFNDY2IAnn3wSDz34cNUwYy01ma1ARgi9AJaps2+DKoLQI++AKCLWgab7GJr2XXOir52H2CmSG1zHL/FEC8gYg4yIyu+mUjomjK5P6PskubBMmJapDe7I5TqTzSGTzSV7ViGfQyqVRjaXbfnVr3/1kwv+5SPvCCohtmzcggkTx2Dnjh1YufJl2K4Lx3VrJl6Kabov7ZEN+SaISOHRRx8FN6He+d53swmTJnaueXnN39Kp9NZ0KgWugL6+XigAzY1N6O7phASwds2GJ66/5vpLK+VSxHQhH0YBOFc1ExG9mZqMQYgISiiYMNDS1IzHHnsc115zLaIwwoa1G/GBc8790Omnnn7e/v37USwOYqRSovMSRKBWmescbwZHyynAkbjhB2GgJRaGnsATkhFTwCLNniEDNpm851v1SqXS7Kyzz3YA4MKLvoIf/vhH8ITE2Wefg9POOKM23U7ZPf9sa1+nYDat+o9e8NH3A0DasjBuTBtjzMBwaRhr1qyFofeYZ5967oXQq75lAuxZM2bOX3TkEYuS527sWxI/cMB7MunUY2+4GZw4cUk+n8scNEhm8bOmJhM7KL9T//3WW2+/5qWX19z3Zo5n9erVYxEP+KWCVAJ93V0oV0qYOW0KIt/fsmHDpjdlTNQ+sa01QTsFPWullIiiCG1j2rBkyULW0toecGaGb9d6mX3kEeMBINLmihyxLIz25K6uLtx0w40v79+378Bh3dP5nL1g4fyFAMijI45x09cqiAKM6xiLtpaW5BrS0pFwUykACP/nJz/93UB/7yE5Ebc2tczlgKukhAhor1YMqG+oZ5Zjobene/WeHXsPSRZx3MlLZ40f39GoyeeQEtoHgQ6mp6cX//uny9dd9r9/WXG41+OUM057/7nvP/dsqt+UBncUYABChShVRlDxqPa44cYbntm4ZfMhrcF0Jj2urj5fV2P81SSCo/0Y7r7rzudefP6Zw95n2zvGtF/+18u+d/yy40+MDV2ZbgDkqDoUo31eIIllG4Sj32d/T2/X0OF8B9dJTcDBGBzdzzHAphSWHL0In/rsf8JyDN2M13oRQ+cc3778tjs2bVz7hgYLpuE2AIBpGsSMHJUyAij6aI0fiUjAcR0AGLr0iiv+2tW19w2h9fUNzW2LFi+aCZBUiSLZ2CgTX6BYHPE3b9qcDHT49m3bwRgw0N+PwA9RKNTDthxUylXs2rkHjusglU4hlc6goakB6bTL/nrp5Y9845sXfe5b3/r6f1z0lYv+eOMtN768ffvOMAwjREJguFTB+k2b8OiTT+CFlS9g187tYJzj6CVHoaGhDoNDgxjbMRa5fA6SAYZlghnA0qVHYfa8uXj4kUcxoWMcspk8+vr714Sh37lr524MDQ7Ctm1UvDLK5TKhfL4HMAXTJIMjqWNhLNMiL17D1FRVHdsTF9KCEEXDNMBNM3liBD4NXqMwpBPHObncyppRBDiIMsgUlBKIwgBSKQihyHlWoy5M62PBWW1yCUCJWnPIY6MeXUTG1NZ4eqvkKKo1Gy1uJ5RXCEJ68QonWWrY9e9IASftwnYdTd2mpiUSEXKFPLLZHMIwQsp14ZgOUm4WmVQajc0NSGVSmDRlynHplAvbthCGFGBvGRZpS1GL3Yk/Pm5SwjDCcGkY3DSwacNmXH7ZZU9UPK/LcRwya7JMFItFlEolpFIpWBZZkpM+g5xuLcdKGhzGFKQME7TSMMxaZm1MB9Y0UCWl1h8wHFSLal26irWhiRGHvlGkzoFlNDBgSSyJHntpJJgzMqNianSTpMkbQoLF9GhISBFpxLb2vjHqLqVAGAUaxSNtsEqwYdJrU/NTM36Lp4A8zg2VtM5jZFkKQdFXUhuXcJ2Ja3BIFZIhD4Bq1UM+n4Fl8ai3p9+j6a2PYmkYuXweYApVrwqbO+DKSJyl46bTsWxYlg3bcWC4HE7K9gCgNFLG0NAQuMmRSjmwDAOGaWldqYWUmyIEPDbDlirJTKVryGr0nkQ/TfreUISIVJg0jEQPo2m80iKi4ZEiStUypJQYGS5BKkXrhRsIgwCD/YNwLavwmU/8x7umTZpiQJ8vLwjomggFKQHHduBoOin0oIkygWlQNaZtDFJuWpiGxVzH1fnX+jppNJoZBizHgWPZmh4UD9QiRFGEKNLXQ59chZpObvSUUsNFNAyLkR1IcIMhEiGiSBDLxuCwTBspN6NR6YjuJ42Ics7hOE5Cm/c9D3v27sIJpyw967jjjn1HGETYtn0rJEJU/BIGBgcxbfp0MubDKI8Bna1t2SaqVQ/lyghKlWH89L//ByseeZwde/RR8tvf+fZVtyy/5bZ0Lo1yhfZr13GgVIjGhibkUgV4lQoy2RTuv+e+m667/tpHewf7YXLKCM6ksuRiqu+t2DtABALVchkiDJDP5nH2e96Dpccdi2qlhLq6AgIRpb79ve/+x/hJk2aAmcngJwpDbeRjkvmU1j9zw4BigOO6sG2botHCSJvHsaQgoiafhpee5yGMAiSudm+hS3M2m7Y2rFvLh8tFbNq0GU8/uQKGAl584UV07uuEksDw4DDWvLz6bXOs/f/nF2Msd+zxR3/y9FNPXAYQFV1IhRVPPIkXnn0Bxx1/LGbNmI7h4VL3vr17Vr2Vn/2OM854XzaTadZglI4Ro+Hj7l175H/94OIbt+/Y/YYopNlCnXH00qUnALHmXI5Kfk4qVxh6YDY6Uu+xx598+L9/+rNfDRcH3xT14JijjiHtn5RJ9GAmW0Cl6iOdSQePPvLwQ1u3bj4sHfmRRyxhABD51bq4eEgSO7QRXxRG2L+nO9q1e88+z6sMvV1r5rnnXmwEoIelOiaG1Yxv1q1dU7zpppue7+3rPizTrHnz5k4+/tgT5yeXTstWWG3IhbaW5oNnFgqaSgZceeXV11x34/U3Hurnnno6Za8ajCGbS9OzQCqYpMMOr7n22nsr1VJ0KO85Y8YsbbxFtHPGa1CHkBJHzJ+HmbOnbu4f7Nt1OOdq6tTp8y+79NKvZ7KZBhHJJN9dqlqlpRTVzdWKh80bN+/q6dp3SNrWuXNmTihkCw6daz6KCXjw8Ki788Cb2h/Ofu85//m+9xKfVsnRtEOtfT6IrBHXOhymYVG9oAdagYgOmxp+5BHzZgJav6tZCzXwYnSDqC12R0VsQtfPzz317Oo7b7vzDaG74yZMsjvG0BCLGRoE5LWamz6DtiXLsmA75LZ9xd+uuv2O2++4540eV2NTw6SGQn0HAFiOTYk6kvqw+Bj7+vu7d2zfkSDjphd4KFfKSGcp2zDSMQyGwZDL5eCkHWSzOWTSGQR+gFQqpYojQyOPPvroS7NnzXrJ87y7rrjiyiMff/Spufn6fLo8XAwOHOjy1qxdm5sze9Z7v/a1ry5mgtzhLMtEb28f9u/vQmNjM4Iwgoyo4BgqFjE0UIQIJEzTghf42Lt3X2njxm1blQIq5TKyuTxax4xBGPo4sL8bDIDrWiiVKnAsCylNQ/P9EJ4fkGspg9YFAplMBl61CgiAwUgot9RIRYnmNAxDAIy0rIaO+dDNL9PmJWSwQ02KZVlJ/E1MnYWkKawUIinaJGqGPPHdFUkBrpstAxxSN4uJgQ0jcyZd80PqaVfsPBxr9Bigi3EGyYyahlg3w0FMtdT6X8e2IcMYHaRIl2wuC5ObKA4VkcmkUCoNo7GpYe673/3uU+MbhPOYS6KNuWJR56j8Xwgd68E58rlCQt3t6+nb7vsBVKQ1eqaBatUjlJYb0EJmGKYBgxEFXYgQBjcQRRKGRbRVKGoahYx0MRzrnEnfKoDkBqPt0QCYbiBHpQ0xjRCy2JQs1kwnlCNDO+3WaFYybjyUSPQ3BlPkfquvh9RxOnFjGYZhghTFEy4hI0IFY5DXoGzoIAhq00YF2I4DzhhCvQY542Aa9ZYqgmHyBMEjtNfQbsgWrQEC/WEY9J0UDPi+j5TrwjBMVKtVDA8ORSNDwwEABGGA8RPGQ0kg8ELYOq+WJRpaomRFYQDLssi4jTMEno+e3h5Pw9Va6yjgByFYrK3VjuPc1AZuum2j3MVapNZoA7d40yWEl+jRtm0hioQ2LCKttlIg1Ebb2humSbmqvkAulYFiQF0+i5TrYt+evVh49MJTP/C+D55E+0IaoYhQ9kowTQ4RKTBbJbraZJY0CpRnDJg6bSrGjR+nnn/hBR3xNASvWiVTNJ3/azsuDM6JSqbjkqDdmOPscpr2yoTSLQWIRaALIsrqs2icoojpIKDzjJWCDAOYWgMdiZDMy7SpFVc6fJ0xYt3AQBRGSKfcOJUare0thQ9+8IPvBGAMF4so+xUYIcO9d96PRYsXYcyYFqLhSTLDYlyzU0yGzVu3on9gAKXBIcydNw8nnXQS5s9ZgEcffuLZyy//6187xnYIGYYYHh6BUhGymQyq5Qp2794D13XR0twIPwrQ1dWz67abb7ty4rjJM8849YxxpmlAMUluy4amKhkm7acGYNoWoBj6enpRV1+P445dBgBoaW1BX98gJkyceMySJYs/eMuNN/24Pt+ggmoVUIr2E9OMW2iIiPZHk1tkvihDrTunDcK0TO24rZLjJn0fTckNboDr7PC36mXZNsvnc1UDDNdc+3dUAw8nn3oyZOQhk7LJbdV10NPbU8I/X3GTyxYvOXrZl77wxXOuueGaozrGjl1oGpYlpIBlGvBChZkzp+LIIxdh06YNqnPffmYYxtbde3ftequ+Q1vH2MY7brv9DACIlILByMwzzhhftWpV70urVj777DNPvaGmqZDPTz/umKUL4yKZmC9s1GB5tIEktFEm0Ns3OPSd737ntzu3b31TA5GOCePb1q1ds2T0QBlgSGVS2LZ5Cy776+Wbdu3bc59XLVUO5/1fWv2CAoCOsRPGjZ7rxZ4Ovh9g+7Yd6Ow8cGDXrp0b+wYG+t+mtVN/9TVXLxg9FJdKZw6DfAyKwyOdtuMcNpI9ZeKkxWPaWieIiNhkxmuZ3BHmQYY7QsJiJmAA69avX/ONr3/zd0rJQ7rfFy1anFu+/M6jAcDzPSiuEAYCqZQLJRVeeunl/TfdctNTf/rzH984Pbe1JX3zLTcsORhAqL0C30cq5eKF55/bcu4Hzj30vc+0Mnctv+vCiePGL/FFBCtmEGrfk+HBIQilUNdQDygFp7EOs2bNOOT1N759/KTaMaiDWETxq1Ku9haLw4ftyL3slGXvvPPmOz4NQJvG6ghX1CJLR2e3Js2vpCaTgeR1gYjwzDPP7vrwh84/DDp1o33jjTfMiBt7NmqiwsCI7arjhsB11jgZL8XzNABQDz/22O0HOjtffiOf2dzckJ0xbWorDUVGUYy1PlpICc+rwjJMGIYF0zTQ19e3/xe/+PmlkV95w8OXhsaGiXbKyQJIam+uDISRgBQctm1i06aN27o6uxINtum6NqqVKgr5OuRbcujr6UUgAqIOCIXiUBmKKdTXNaA8UoJiEql0BmEQoampBbZp9q5a+dIDu7bveqBcHoEQArbtsN6+bnfBnPktzU1Ni5966llk8zkUR0q497570dLchkrZQy6bgWlSbMjmzVtRLVdgWynMnTUHLU2t6O7u2VkqDW9izAA3Oaqej/0HDiBl23BTLvzQQ+CHiIIQXqUC0zCRSqcApuB7Hm3STNIUlDOEgU/Nq2VqoyNdFAeRLraFdtYhd04JBaHpbSY3EakoMeSJEUHDNMEMDuWLWkSNbv64vtBcx5EoHUfCDnpo0VRMKQUBkaCFpkm0cEKMlW6ESWcW57lyZkAoytLkhqHD0qmRVCCdppSk84wLMopD4YT2SoZyuYx0Og3XTWGoSKhca3MLGuoK2L5zJ45ccOSy8ePHTfMDQXmDsYZW1cZhcRMgQl2cKmoUIp/QWCPlYuq0ybBttz/wKjBME4WGAkQkUClXIZjODI7IKEYphSDwdLYz1w7gEpaZQhSFlNHLKK9XKKLIGoYJFlMn9PlgiBFQpY09asZfSeFgaDqyTGby2l1ZaY0enV8FDtMyYXAkBmFxIRBrUIWKp3isZjGvIWCuI7uEFIleU2oNIFHPOVQYjcrdoUZbColIiqSZlZBQQkAJCduhIj3wA4risS2dVxzpzY0BTCKdSWt9NNHEXdchRD/rwrJscG7xfL5gayogDJiQXMF1qQkXSurGkiXH7FV9KIHYaAAjIxUwxRTnBiIRUESNYUNyBcYVRETRNYBCEPgJdRdKG2lwVTNfiRvcxLRJwbYJ/afLy3RkjDoIBTZMDtcmjWa5XAEk3ccMHCKK4FV9hH6IUqXcfN4HP/ThdDrXICKAGRKmxVEwc1RomOSMLuPLN8q+MZESgKG7uxsbNqyvgCllmhYcy0a5VIHtkFkCVwq2aUJGpJ1lhnbf1oMQ8Br1wOBcZxFrMFevk/glZZTkNEuFWlSVRiJsx6F/KxhCEZJkwaCHgB/4sG0bhUIdyiNlYsRYJmxTDyF8eWJjfcMyiQiPPPKImjdvLnPTaXjVAO3tY8il2GDkl1D14aQcODYNQu5afjemTJ2O3Tu2wzBNNLeMwZ6uvX233H775RJss2FaKA0PIww9pFIOBgeHwGEglUkjkgFGKhRDl0mn8ehDj982adzUybMmz/hGQ1NTuq6xAG5pYzQhwUyid4uI60EpBzdMhFGIltYWDBeLuPuOOzFt1kyk02l+1pnv/uhTTzz1VH9/z6OZbA7MMJKaRkQRDMughprR8DDwQoShB8YMLRHQAza9AGi50oTaTaWSnG3TsFCtVt6yArxS8qJN6zdUSqVhnHH6yXjokUfxwrPPYrB/kJgZXhWBFyBfqMv/s9UFMnWFpou+/c3P/fC73/vPlJOiXE2NdnJGRoMbNm5CueyhuakRfT29mD1zJu695/7+/t6Bt+zCTZ446YTFixctCPUzCIap42xov5g7d35PfV3jGzbAOf74ZSdOnTx5LO0lvMYwekWvFJvqxVmo11599fIXV6585M0ez7TJ0+fU5eumxHWDjIP9IoFcLoe5c+f33nzrrW9qYFDf0tL03NNPzdKkphoIoZH5VMpFQ3NTz8QJUwY3bdrwthhWferTn/7kBR+5YEmMgiW1jd4rxrS24fHHn9z63PMvrDvczzj66KXLAC2N4ExHU75i+D7KKTjwQ5iuAQYW/fxnP7+ys2vfIcfRmCZvy2SyE4nCm0KlXAHnBqrliuLMYFOnTh4e3zH+kJDDRUuOmnLiccfPSTiKMil4IaWE6zrwPA8rnnlmw+Gcp49c8NGzTzz55A8B2hRUSULc9fWo+gFK5RHUN9QngtcXX1x5yAyDuXPnTgDIx4fm8ySripmWYMALL764Y93GDTsO5zjaO8ZOv/WWW77R1NA8JvTpWRNLGWOZGqg1weDQIAzTRD6bS74DUwmXCtVyVa5es7b7cL6H5TiF1jFjJ+Pg3jr5W6XiQ0iBgpPTAAMSajcY0N/bh9VrVz90w403XtnVfeANGdM1NDSm6uvrM9Cl7OjEFmgwKGW7ZHim96xL/vC7y9evW/P0oe23k2fbhpXsiWEk4bombNtMaOkvr3p5Z6U8kqD/ZiQlLNNGd083UukUGOeojHhwHBteUEVTcxOKxSK6u7tRrlRgGAZS6QwcR+L5556BH0Robm5GXV0e1UoVzWPa0NjUrIJIZJeedOyktvFjMac0H/PnzIZX9TB7zlzMnT0LjHFUvCpc26GolEoZSikc6NoDpRT+etUV1c1btqx84cXnNzU1NcNNpbB75y50d44gnUqRniQQqEoPUkSQSqLsVVDxK7AthwpGzhOqo1KA73vgjCMUfpJzq/Q8wdE3qkGutYiCUNN4hHaVJXdbJXRQsjVKH+mHOs5G0y1Y3JgSGEDOuNopWOs2Eje2OCpER9hIjVhKqRBGYc304iCVEQekRKQC7QJpJJQjISRsmyU6ZEJEdYPOKYNSKIWRcgkmsyBDhWrVRy6XRegRvdK0LJR0PvMHzj33GHBulEZKsOsLpD+UgiiyqCFy5UoFYRCirq6QGBNL7X4HANt2bt394ovPb9IIBqJIwKtU4FgmFI/pqBKOS3RLXw8apJQIRQTTsBAEsUkV10hjBNOkOJYwJNdiKkjJRIFMxgg1j/kkTOf1KhETJVlCPVZ6NyKNDR/VHNPfwzBMYrdMh3TIUtaQyDi2gejmQpsySa3xrcUQsZgYqjTqKhWiIAIDNepSSnDDAmek+YyRRSGItsoAhCrSgwCmddSSjJp0oyulgJtyEIaKUONYOsDo/LtOGlASfX19cFzbaB/b6nZ3dUMIBVnIYmBwAOPHjdcXkhyavYCMjrjiyOfy4JyyKDPpDOoa8hgzdoyQMoQQElFIebCplIsg8CB0JqQCDTHC0AfjDLZtw5CSEGuh0RA9JFCMJVQfxnUusSR6OOMcTNUGJEJJyEBARpTpm6/PIwwoI9Y0OSzLhRQSXb378aEPvv9dZ5/5rlO2bdmIqdNnoeoFcBydxW0aGF2JxFq5+Ek1ep49MNiPoaHBiggiFfg+GT2YnJyQHRNZw8FwsQjTIMQ5jAKYJmUQSynJZIFB62tN7bouY6JD7W43WEKHIoqkJHM2pRAJAUtLDYSk/HBL/7eYfS507Fml4qHqe0inXRjMQKXiYdz48dMWLV74kWlTp7V3HjiA6bOmsWwuD6kEZs6ahkgQ9bqvtx+umUI+m9WRPEDF8/CBcz+IltZW9Pd1Y/ee/Thy0ZLoiksvu/Oh++69o72jA+VKGV4QIJVyYJo2OI+QyWQApWDbLizLQWXER6EuC9MwytdcdeVvmxvrpn/7O9+7gL67AoSCYZt4/oVnMaa9A+1j2rF39140NjehobE+kar09vbi5ptvxulnnoHJEyfhox/58Iy6Qt13PvChD+yTkFvrsgUM9A9QNiDntDYMSw8dIyglYNu0/wgRQoYSClYiJ4izhnnMPpEkXwmNkNzC36LXUHFAfPf73xatrR1YvCSDaiWAZVoo1NfDchxkMilkMylMmza15f/TjW6h0XzHmaedveKJx7965PwFxwJAf28/As/DLbfcqk48/RTMmzOHDQ4NIghCDPQNYe/+TtiWzabOmIpJW7cFrpuK3orvwrhRuOW2W843GHfAJJjS+7ge7G3auGVk5YsvLH9pzctvqGnqmDTJ/sMffn8GsW7omRfrjtlBJWuNDgkG7Ni2a/MTK576m1cuvem82pNPP20uAEPJeGjLdCMKTJwyGXUvvpzq6JiUeTOfMWl8+4SW5ubx1Hxot1woCCGRyriwHAurVq7sam1rGX471tBZ7373eXfcfscXAVjEomO1jHdt/pmvK2DlylUv9/R0HpZ+d9z4KZMfuP/e4wHCU/T2mVxDISX8ICDPGYP8AFzHBTMYHnvkscdXrVx14+F87px588YbBncBwDAs5AoFMDCISDBi0KCnWvEPiQrMIzHRgFmXsA5GcYCZHj6Xq5Wi47iHjIyeeNLJs674+xVfdV07LYTSz0d2UKPW2taCFjQjEhFMw8SO7dsHVzzz7CE112PHjbfvu/fu8fSdNRuN1aKIYvfnYnFw/Z7dOw+ZVcAYq/vb3y7/2jFHH3Ni6GuHYyaTdI5IKLBIJcamL695GW2trcjPmE1MQB1VGEvxMuk02lvbDmufamhubu4YP25s0ny+4kWJFDW/oeRc69/t7u4tf+Mb37569epVb7jxHxkeZkHgs3QmpWnvqKWk6IQVbpqwOD1L12/esPHSy/52/X99/4dv+LhOOPWU3Bc//8VZANXF5XJZgzc8YYVpJKEXAI5cuIi9tGql4lIAQRAglUoh8ANwzpBOk56Sc47hkWFEoUBppETUvDBEcbAflUoJI8MjJEVgCtu37kRxZBjF4SHs3rUTDY31uRNOOG5Cz4EuHNi/D/V19eBgmDBuAnbt3o3+gT44tg3HcbBrxy5s2bYF+/bvR0tLK45adjRmz5kZNdQVdpaK5W7f82HAQDadhQGK2rAtCxanpsNJuUhnUknYumFw4obbNomihYAIhW5iiIrHTL2o9EAvbh4UA2lytSOwaZmUbakRPdLd8iROSIhIN1a0UZKpFTU6MV890ZZSyjgtZB2rwlSsFWXJiozNKEREeZ40CqoZ9hhaG5xE6uh/xHUzFUXkiCuViO2HKYYmlQI3GAyLDChyuSwymTQhZUyh0JhDY1MDwjDEnj37MDQ4XMhm8zP7Bwa04ZckCq0O/qMpCm3druMgl81S8xHROUln07AsG/19/bjq6qvv3rV79ybHdan4D31Uqh7Fz2i3a9tx4Pkexb6kXHKrhYTjuvowFUzdFMRoOfR5jx19aXPn2ghMKz6SqTEhQtwg+jTjpLllPNZNGzAMK4kiShp6XjMtYkr77TIyN5BCai0vdSlK0ucZJqeQd9uFbTmkGYQ2I9I5wkqRtouMy4gyLxOHbdI58FGoJ+dcZ2Vz7d4rEh0G9LBDQSVU4zAkynckaCDjuCkocFSqVcps5SaampvR0trIFZPMdizKrpVAPp9PDMhi5MC2bLiOC26ZMB1Lx1uRVKE4NIwtW7YUAY5MJkuNrMHhex7CINR5zPp+gTbP0HFacZ4ssQNoXTEY2rWfduHADzS1lyalsfETdMMISdpMadBmGkXkvuvqfY04/xKcG00XXvTVjz32xIqGJ55YoQBoUzWWDMbUwaPQmpshY6P9v9Ha1oLm1iaAQxWLwygOjySIf+D7CDyfqPcqgoQAN8zaezLaP6DzeJWUZJg3WnseOzJrNomE1OeQ0GLbdpJ/C0VDNsuy4Ae0f0GRzIH2QxMiCmFbBoSgIYrn+WhrbV22dMnRJ/Z196LzQBcCL8TjK57BSIViB6MwQk9vHzhM1NXXkeeBHs69uHIlFARSrokojFAcHMS+vTufeOjhx37f1NLW39zUQMiQdhP3PA8MgO95KJVHEIQhql4VitXMAb3IL966/I5Ln1yxYjdAw6dYKjJcLqO/v4/ub9vE36+8Es+/8AI4OEIRoWPCBPz+L3/CzFlzMVwsYaRSwnvff84pP7n4p18YHi7xkeKI1jNrDT0YgihIhnOO6yCbz8JNaydng1g2TG/YsfM9N8nkyjAMmBZRjEUk3tJC3LTJoMe2bBxzzFIsW3Ysjj/+WKQzGVSqVKNOnDCu+f+zzW46X/eB97/v09dddfUf4mZXhhEKdXUoewEKdY1s0oTxDACy+TwM08CkqZPRdaAHe3buwWD/YNTf17e2t687eCu+z3kf/sh5Z7/nvWfFEiUOojPHcqrbb7t9/cf+5d+uefnlF9+QIQsTov3/R95/x+lVlev/+LXW2u3pz/SZZDKZ9EYKISSQhN4RFcUuFlSKXSmW41GaitIVFZUiSFF67x2kpkN6z2QmmT7z1N3X+v6x1t4znOM5Eoiv3+fz+Y2vvABhnrLL2uu+7+t6XzOmzThQCkFGPTPwz5Sw6lkI4LfX/fav99379+f3x3fK19dMifrrshmsFDWg6OnqQRgGoq6+1vwg79HU1NyYSmfSkXxSrmeqMgTw6j9eHdq+ddum5599tnN/Xj+EseRpp33q65f/+opfMF0bw0O5x4rUQtF5i/gvoOGq9/texxx91OwZM6ZOi541OlEwvFHPF8IUL0QV2kwjcByn9JOf/vTGd9a+vc+xOKd85OR0c0Pj+IH+QRbJ3SNBa9TUvfvue7Z07u3cJ5l0e1vbVDmpFjFrY5TUSBZJ3T2d/f19+zQ51g2Tnvrx074xcXz7AskKlY1rOupRHIoQvf29CINQ7pcAcPBKNpvap/dqrK9pra+paR3RkcvnO1fqLaoUIs8998Jb+7wuZRKZ6//0+0u+9KWvfE02q6liNSkStJzEgGkyvvW3v7/O/9tdf+NSFSZGaNTvUlcT6nnB+6IiLl2yeGJNJp0ZkRz+lwYGjWyPo5tnI9d/U0PLBt/z9mnymrCSSULkZoeM2KNHGvZRrKfSS7/4wkvP7tndseG9vv6CgxfRfC7XKAjqovWRGRo01XSOBmIA0Le3exAAVq1cIaLvC9MwYr+abdtxB5+HHHbFQaBiZKrVCkQQIgx8hH6IVCqDmlwtCkMlBDwAoQKeY2NPVxd0ptVPnjhlTHd3Hzo7d8N1HaxesxIB9zB16jTUN9THU5NCsYgVy1Zh2fIVqFbLqBSLOGzRknJSs7Z6vuNTSlEuF2E7NvK1srlUKBThhj78wEO5VIHjyPgaSgh8L1BRIHICy0Me+ymhsqAEVxmYEn+qPJJU+m4UhVNK3xSRlMnimgih5IdKZsrYiK5IjJi+IyktJWJEsgqARJO4CJgUXWyRN0zNHanKzgQhMTk62tzyUBVeMfhHdkZ1U2Zxypx0BkM3JCRJNQJc10Xgh2CEQWMaeMhhWQZMy0C1UsXwYAGUEhiMYbgwiHkHzlmUMBOThweHUFOTha7TeOwlo5GgokkkWrxcrsD3JV01CAJ4ng+NMWzetLX/iSeefqilucWrq6tH4IcIPLkx4IGQdDVGUamUpYTX88B96akOVUHAuZRSxX56Kr2aYRDAdwNoVAMjmhxmBzyGQMXgLyj5OUiMtWdULmwiUPLZUOb/CRX3FPuxIy+DGNGQBUpqPlomLWTXIW5GhEGoijc52ZSdu1GyNFXNhoEfTwMiGjTV1CZHeTsN04CmM/i+H4PVTCuhOu6BaubI7k0YcPiBBx6G0DUD6UwGggt4tivvdUHguT4Mw0RxqATXcQllBJaZAAFFqVyEYehxEyHyn1NCkM9mUV9To+RGIZJJCXVyPccZHB4s6LqmYqIYTNOEpsjaktYnYro2KIGmm5Cuc6pIfiN9bzGKW07YyMgzWrcZZXHGtG4a0A0ZNyQ4h+c5qJTLMcnasExojKFcqWDxkqVfQsiWdu7twhFHHEmiBTIGVqjaVmk7Iub4KOnZu/OwXdu1crmclsvloDPpIU8YJphgcD0fumkARMrySRRNRmXTKipuR1t5JIGZxvYDWfeKGI5EqQQuhT6HH/iyy66aO4TIJgulgAgDSbIW0i/meS5CESJXk0MmnUGlUgbRSPJTn/70SfPmHtzsc4GhwQJWvLUKRx15GGZNnwrPczE8XEA6kUJTQ72U0zPEMiTGJACra28XXM+FZZnbzj7rzKu37tq4ioBgqFBEyANouvx8jusi4LIZpquMW9uuIvA9VKsOwjBAPluLzZs2v/7Y44/ev3e3tCAyTQPnwDFHHYNZM6ajp6cbfb39qNo2GpoaECqxpa7rSCVTmHXADBx1/DGoqalF1XHxgx+d+8XPfvpTZw4NDyCTy4KHAo5jwzR1JCwrjoxhjKJcLkt7DGVynfNDCRkU6v4gFH4oY6N83wfTmFTNhPu34N20cWMZAFavWoFHHnkUAQSWL3sLuzt2IZlIgIeAriXrDdNK//9ToTumeVzmhGNOOvoXP7/04pnTpl7Q19PbAqiEBYTYsHkD7rz3HkyfMwvpdAYAUCmUsXtXF6ZNnYaamhyOPfFoPPjQw2vPPvuse/fHZzJMq+1LX/zyl3jAk4wy1awCdF2S4gFg4aGH7Jw4efJ7LlzaJ7bPmDhpwvhIlk1HS19HFbpRU4pQih3btm1/6IH7H9pfx7o2XztWdYPkvRCqZqRGsXv3br5p0/rhrVs3fyBfLTOTGcbk5piCgCigKNMINqxbj42bNg5NmjxpsFq191skESHE/PnPf/HD++67+9djxrROGujtB4n9i7J55btSXQcK7O3eu/ON117f8H7fT4BPBqDHm/xR9iAOOVhJ6AY0ld4QpRQ888LzT61Z+/bj7+c9V6582yNEyze3NFmy8Hq3KgAAdnft6S4Vh/cpP/m4k447QD77xChOyshzEgDeefvtrZs3bdmn6+JLX/ri577/nW+dDjXxlnCld48kC8UiHnjkQRTLJfBQxvUxplcc13X25b3qapuacvnaJtl4JnFU42gL796ebvv+++/bpyaHZSbYzy+67EfnnPWNbwGydqBq78Kicz5Knr1hwwbnl7/81fKklRuY1D5lpOnORwY1SmAnOH9/z5eGhoapPf0DUikV+WhHfc+4JopVbFzxayiqlSouv/rXT4Jh5z7Kucdlc5nESFkkRjFz3h21Wi6XO1979bVH9+X1ly97kw8O9Fk6o0koNawEU8qUDEoJXFfGcxZL744y0/zAV2Z5GWMhSZYhXEduqpOpJLgIYVelH5Mwhlw6Dd8PEXBJGRUQMCwLqUQSOqOwfRcTp0ycYRjJ2o7dnThw3ly88dYb2LB5AxYvWYyevm4IHmJM81i4tgvd0PHRUz8Ox62idexYvPTC83jk0ad2rFu/bl19fR0KhQLSqYws4gwdIpWCbdvRaVLQqBCGaUFjHI5tg/MQrhBq4io9rIHvq82t3LwbhoEg4AhD+R1kE1MGUHOVfxrBi6KLAYRIiSAlsU+IqNfkgkuJtJJiklF+AKaKpzD28AqEo5jkVOWAEUIV8EoutqNzSBH7FUNwlTtKKEUYSsiB73pKaq1yYLmkHHJwMCZJ1mHAYdsV6IaJsl2Vfk/BYNs29GwGuWwOCEIAhHz1zK+ems4kGnZ27BCB75A9Xf1oaGpCwpLTV40RhIFAT3cfEqYF1/dUHrMOgRDDwwUIIbB85YrNG9avXyW4kLE7hMCuVmHoBkwrAdu14XuOnN5CelG5ENANAzQM4XoSyiOo9NgQpijcIUfAOQi4WrhUD1N5Q5ki3QW+L6djEVhM/Y9Hjukor1gRp4mg8ENfwaNGIo2iH67gHaahIwgChKNC6JiSZ3POARLIq8iT55MqeTkP5cNCi55CqsERqQQY09S5pjB0TVEKJfggqsFlYSMl3BEIQdd1gMvrk2kMoS+juAgi+BWFXbGRSiVgWAyGQdHePhFr17+jFYsVlkgmZEFOuFR4kBGcvOoDyok2k02U4eFhEKKhpiYP3w9cz/EdWdz5qJRLAAN0KhUShEhqMaUCQchhmZakQPtVdQRGFkFKpW8zmugTQsGjXguXagnDNNR9zUG5NMQQCFiGBa5xeJ6PZCqtoE8BSsUiauryi+65955z1q5ZY06eMBETJ02R0U9qPYijgTDirycg7262jtpoEsIwZuzYzK5du4mEcAlYVgK6qWNwcBAhD+D5AqZhQjBDytOpbPAwTVPHhsD3o4msUMAkEUPnNAXKC0K5qRWKbEIIlJpFg65pUqEiJGhMhPIBQCmDH/hgjCGdkKRkShmyuSxc1wHTtCMOnDv/qIMPXoDlq1fikceexkc+9BEkLAt79+xFqVhBLp8FFxx9Q0PIZLNIMQPDxX7Ytoslhx6K4aECCsUhhL4I/3rr7beVKpUna2syGBwaApCHJOm7CLj8rJlUGiGX3IXCcAGccOTyeWiaBcetwvdc1Nc3es88/fxf28ZNmPvt73zz6ETShOsG0BhFd3cPbr75JixadChOOenDqK9tBHwOBhmfBRAM9A/CsV1MnNQuY6KA3He++Z3znnnquR3dvXuebmhoUo05Da5The86skHnO5LYL5Ruk0Cu0UyidoMwWj8kB4ExOdnWdQ2Gru/Xwq4u3zAMAI3NTfDCAIbGIDQNtl2RU3Lfw6x5M1vGto+tAfD/PLzKSiRSXz7jq0ee9dWzj0+lrEOnTZ8xM5VPpmpqa6S9YHgQuqFjT/deTJsxEQfPnxvfv+Wqjdq6LAYHB2NZ344dO190XHvD/vhsP/6PH3/ppBOOWRyKUbvIUVmQN998cwdl+rNz5sx+z+fpmOOOOUQDIUEYKrDdu6XMYlTzLQxC6LqOF55/8dEdHTvX7a9jPnv6rJZYqkopoJHYR1zfWBcsXrK4569/+1vfB7rOG2uzdNRESyrwIvq+jnLZ0VOZDBs7foyzP74TIcT49je/+8Of/PhHPwBg5WuzkOabEAO9PejvHURbayvSo+zxt9566xuEal3v9z3nHThvTvwVR+8l4hM56v/jsiG6cePGnT/9yU9/Wy4U3peUe09np3f2mefkTdOkALC7owM7d+7CATNmYt269aJp7BgyZ86sfYrjapswMfvQQ/dNi6b+EKEiC+Ndma7LV6xYZduV96ycGNsybt6qt5efByDve0KpCHnc+I6ewalECscedQySySR8Xw6ydu/u6Ojq6tonH342U1OTVJ166Zelal89IiN2PK/c1Dym972vT0n9u9/93vnfP+9731P9AFBtlCJMKG4Llxaz/sIw7x8YeGbC+AnrDpp7YB5AQ1zoRs0QzhX7JeSECv5+roNJkyfPSSQs/FcHb/yZyEiNwUfbKwFs3Lx+057uPU+vXrlyn+TUpqG3EQIr2iuR0RrpUdwVALjk4kufevCBB1/Y1+9VLlWyM2ZMbwSk+k9QeZw1SGCvL2MYfTfw32VDoAil31BORlyEQaA2UgTJVAKMUgSenAYZhgEv8BCoFxSCo1wpwUqYmDJpEhoaGmAl03BtBwvnLzykt6ebvvLqy6HOdAgCHHvMCTD1pJQkKgmf4zlYs+ZtiMDFQfPmor6+GVOmTMXSw5b29PUP9AeBDDyvVCoQnGBwqIBSuQxN0+Nph5WwYtmjH/igGpOeOEX7C6NoHyr9tTJjVcD1PITcj3NWgyCQ0R2aJgEplIzk7sbxrgScxGmzaoKn5KZq00wVUEpEMsiYwqq6NJQAjKppjnpwRZMcJa8gJBoAysLWNCwJ4KEjcrxQcHi+px4OmqL7CUmwDUIlY7Wg6zqEkDLnkAfQNAOGYULXqJS9EoGG+jowUIR+gM69Xairr2s69vjjDkmlkjh44UIEIcfmrZvQ1yvXANv2JHlOo8jl0khlE2hsqodddVAolDAwOIjuvXtQLhdBdbpHAH1MY6oA49A1Tfm4qzJghY+Y2kEAPwzicZ4IVa6wRgEmlz9f+XmZxkA0quSe/ogfQxlfeRiCUCabFspDy3RFxuWyMNQMSRqOEOxS2qTIySROLZIDd5XzJRT+nDIGplFEWaw8kjVDQY8oICAzPBE3SMiI/zsMZWQPlb9rGAZAAc9xAS4bNhACvudCYwy6IUEofijPr67pccSRAOAFLgAOQzdhmJbyN1Rlga1TFf0kZCYpoeju3YNCoUQFmMG5gKYzJJNJMKKN0qLEabiAkusHYYBUKg3TlPAi3/UDymhYV18LAgpdN0GoBp+HIIzC83xwQqApq0QYcLi2o0jFVMnLoY6DUizoI5YESgig5N6MaXHDyjAM6IzBMizYtovA50imskikkvBD6Un3Ax+Vainx5TPOOD2ouJN79u7BEUceFm8iS5UKCsVSDI/jqqiOZeqjNDlhTGIH8vk8WlvHpkrFEgehSGXT8PwQg4PDoBRIJhPgYSBfi47I4KO1JlC+5WjKPJKrOQLcEQBCHq0zEYROqQyCACHnqNpVKX9n8v5JJlLwpbkcuWwOQjX+6mrqYFdsDPT3Q7eM+gsvueiMSZOnNHZ27EFheBhLj1iCWbNnoXvvHhAdyNfl0dTciLr6WuRyaSQVqOq1V9/EmWd8HS+/8gYKhSrGj2vHylWr1t562003Q4iQ+0AqkQDTGGy7Cs/zwAhFwpJ5weVSBa7nIoSczieSSQhwaExT8kyBLds2rr7hpj/9+uWXXto40DcA05TXYzaTw+c+fzqOOe5YzJw1HcmEhVKxjOGhYbmuQ6CmpgapVAL9A4MA56hWHcyaPWfKDbf9+buE8qbBgX7JqqhUYDsumK7LSa1mgXACBgZdN+SaAg5dyfcjcJVUDsjnSRiG8D3/3fK+/fCzYvmyvl17todjx47B5MkT5eZl0gTU1tRi985OuJ6DpoamMUnNGvv/cqFLCNGnzphy6Le+fdaFxx513M+bW8ecMX32jIPnzZ+XOnzxUjieixVrViMUAkwzccIxx+HTp56GkEva/Ttr1+PNZSuQtDIIXA8tjU3o3tOH3bt2vrM/Pt/CQxYf861zvnW257ly0vrfpnvAY0889vL3vvvtZ+6/7+73VGDUNdRbsw+Ys1C1QmNrzbvUo6M2j1bCwqZNmzuv/c1vb9yfxz6ZSObkhEkg4F5sIVr39hqsW7ex+NxzL76zbeumD+QVHj++JfahCyKlvZGNZerkKbjg/B+Q1rFtg2+vXu3th2up9txzL7jwmmuvugCANTRUxFurVgAQYNCwfv0G7O7cDSNhxZJOz/OwcdOmTatXrSy9r4JjyrRJH//YxxZDreNRrGDUVKVq2iWTD8K44Lr6qqvvWL1yxSsf5PseecyRLbEKQTdhmAaEAFrb2khDXQN6u3r2qYmgMZpPJDLjRqr1EQWctM8QlIbLeOHZF9/zZHTi5Im1t915ywWNDU3zXNdHnFmtUhcCpZIDl0rUSe2ToDGZL2+YBl559eV1g4P9+/Q96sfWZ6OPHclq45JM7dFEIBzLeG9NTN00yDe+dc7Xf335ZT8AkBQR7RIizrOVA0IOqlEkk5Z45LHHHvz8F8/4yeq3V18GEr75rmY6EbHfFQCqxQrnUY7PPvyMa2vXFxx44LRsKiX3HkIoxo3cY3AiFDOIjMQAC/kZPNfFjTf+5dVdO3fsM5k8X1NTHys4CJWWI9+D7wcyqrRYljY0AK++9tqTlXJpn/O1a2pqJzQ3NY91bMlwsiwzVk8EnCOTSWHXrt19b73x5tZ3FbxCTayCMEDgeQCoLCYZhW07sB0bhFKk01kIQRD4LmynCss04Lk+mCIJV8pl9HTvwZ49nUinUmMWzJ03/5677sb8g+aT+qZGvL12LWZMnQxNJ0gnMsgkUmCUYteuXahUynhj2VtYuXIFnnriCSxfscYngu4ydaMAQuLpVMB9aJrMjnRdB17gIeQhHMdGGPoIAl8BYBiEyr4NfB++7yEMJRacCBJ7/zikDErEk2Cpo5fRFAS6bkrJq9poCzUBjILDDd2CxpgKO0Z8swpFZKaEIJlJQ9N1eS1RdcEp2Q6izW1EMlNTnhiTHqWPKx8bD4MRWYCI8ESyMxVJQEIF8JLUMhde4Cv/oJyGpZJp5NJZ+J58gOk6hW5oEKFANpeFYeoYGh5AyrImaoy1vfXGMrz4zCtYu34DCoUy2sa1KRqfoTDrQMJKAoJg79698AMZAO1UHKTTGeRzefieP+j7AXI1eRDBwYiMfJKFly+l34wh4HKDKeOTRBw7ozMdYRgg9D3olEFnenyMeRjGcnKqpNqUELn5V1nDgoQq80xIIFA0XRdcSpiVLFvT5HGQsVwy6oYSCkPX5e8pMBhlTHozVSTUqAeqLHC49N5SQmRhHzcp1FSOUgXkEvHGJQzD2PstlFdVCAkuCxSRlwsp36BKPeB5LlxXEZF1Q8KRlBIgDCRdmjEmJ79Cwk8kTEsqAKrlMjp3d6C5pYE01NUY1UpZRf4E2L5jKzq7dsvPLSg815XeGVWs7ti+E44jvf9y0WeBH/ie74VIZzNIJBIwVCEhc2WlBFnTddVNDGT2siZl99E9IBsTUcwWg66KLEqknJcqyVcQhPADOYVjuoZAyGvcDz1Uq2UwRhH6PhKWBT8IcMCC+Ud89GOnfuiKa65B/+CgMC09bmakkykkk4n4/ow93eLdMURQ108kX7XtCirlSmBYRhg9oGQzTZJ/5ZSWqqg0R2bXkpFcbaGK8Qh2Fv0Z2U9IeAtRjQJN16Ebeuxbl9nCNJYNBYF8oHieJ+VxajJsGDpsx4Hre6CMYGBoEFOnTvvwV758xol1dTmAAmOa2/CJUz+K2ro0xrSOgWEmkMym4HOZpW3phswa9zkOO+RInHX2N8AJ0DymGaDAmrVvP0moubsmX4tMJgOhmnGMagqqBjh2FZVyBdlMDg11TUhaCTiOi57eHgwN9sLzbOiUIfR9NDY2Y+vWzU8//PiDN1CNuK7rIxQh0pkMpkyZGnehA9+HYemwuYeNm9djeHAIhFDU1dVhcGAAWzZthFO1US6VcOrJHz3pEx//1Nc91yGFgUGEfoCmxgZkUikAstlkGpZUH0DGOPEggKHrMCKQofLJRwRsnWqgiga/P382bNrctWnzllI6lcHQwDAqVQf1dQ1oHz8RjuNg185dyNfkk/MPPGj6/6vFbkND88zLr736wptvuvkPBtO/etc9d8760KknZD784Q+hq7MLN990C155+RVMHD8ejfWNSCcS2LR5Cx545CEwasD3HVSdMurr8qiryWP8xDakMikYhuYPDQ/3fNDPd8ABB9TeeMPvz85k02Ntx5V096g9qBpZ3Xu7y0ccfuRKTTPfs8+wtqmx7bjjjp0TWWn+azboaCli9LNs2bJX3l675p39deytTF63nYoOpZCRAwq5I06k0njxhWf3/OEP1639oO/TUtdcH002I7ANVVafFWuWi5tv+NO2G/90/dsf9H2ymVzjgw/ff8VVV13+Y0pJulquwEoaKBYKYUfH7gAA5hwwBwfOmwvDNBCqDblhGJg9e3bp/b7vrFkzDx3fNm6yfIaIOL8coyPuVGEQWUVs2x5eu279Mx9Ykl5b0yyL9gANjY04ZNEhqGusx4SJ7cjnc9i2Y/s+3QP1dQ2Z1nFtdfF3kdJF1RBW34tyP5G2+t9jA4J+5zvf/8HRRx3zOd8PJZtBTUUZoygUhtHZ0Sn3RFTu24IghOt60CiDU7HxzFPP7drX41J1Slb8GdR0M4KKRjdauVJyLCvxr6eZ6SQ58sgjT7/opxf+EEDec1z1ekoNQaRpCwJwXRcAqn/7+z03XPfbP/yoY/uWd+xyufjaG6+9wBVLJppcEDk5k++RNELTMPaZUE6YlmSa3hhPczFiy1ISMWmxVFnhImLMACgMFyqeG7z+8ksv77OCI5PJstFdBM/3oj6CHE6oSEzPD3b5RLyvnOMjDl88N5fJUsMwYCYs9PT0oLe3H4SRGO7X29/bWxguvusap4RIiAgRAoZpIuQBiqVh2LaNMAzg+z78IEClUpbxL7oGRgk0jcJKJBAEHLbjYHdnpwQ5CY5cTe2cVCY79YQPnYjPfvoztKGpASefdIKkHHMO09SRyWaUh40gEMAhi5agfXw7hgqDKBXLPbf89a/LqrZdZkxHpSI/i8YkAVVmxzI1+fJUJIkGRmWxwwiFqRnS4xeGcjERBKZpQdNlRmZEHaSQxQsPIwiS2uxyIPDCkWkPkb5BIiTUR3qD5cY3FEpaq6KIZBVFwIn0pQYK2hOP4STLWV54XP6JMOSUyPiBqPaFgJLbeQhVh5UqWXVU2HLO4fuBksIqGSijMsiIB2CUKo07UaAVmWfJVWGVy2aRq8mC6RSe58FxPBx3/LHzDKbnzFQKLjzS1FCLE48+Rt47oeqMRTINIj2nhmmipiaPmnwN8vkaNDQ0wg85Vq9Zs813XZSLZQAEnh/CUPCqaOqqUU1u3hXIJwqAF4CcwKqpNgSBUtmOdK14JPOkaiisJmKEwrISYEST0sYIBKQibQhlUj4ehgrCxVWoOeJFnKvpP6VaTFYOw0AVRtFEX8qHiRAwdAOMyimsJC6rLRAP46gjQmURqjEKjWrQCFPRKCoSi+nQdTP2WWuaBsYYwkBlOgs50Ze+ZDkddVwHnuuqqbS8nik1wAMOpjHpSVWQq0qlCgEgk8ugZUwLgtAToCLgUNmtlMLzfQwPD8UTadOwFPFcQGMUbW2t0DQNxaJs8JeLZd+p2p4feKjaVYRckvN814PvylgbTdNGAayk7JirWCmumg5BGMSbAd/zpYxbwebk51dEZxHC913p1/YCVMsluK4DHnD4ng/OgUQiCappqJSKmXO/9e0veo43YdacmfwrXz2TZLN1iMBkjGmyeCQUXiBVIrbjSvJ3VIAqKRpR9+fGTRuxcuUqbN+2q6Trhq9rDIIDiYQeU0Z9z4sVCgIyXkqC8PR4qh1dQ5EqYLS5RghZAPPIBiEIAlfyCSQRWkmWKUMikYShS0AaJRSmYYIHXAGsAO6HSgXjQoTh4nPP/fbXLdPKdHXuxeo1K1FXV4uQC2iGBlO3kDRTSJkJeH6AZCIl74lAHn/d0PGRj56IWTOngwuO1W+v77jn/vueyOXS8HwPju2AEQ2VYgnJRBKpVEplL4dwvCpct4pSuSQhcYpgTkBRrTrgEKitr4ttHH/+05/+et3vf3ufpGgzEMrguC7KlbKUcho6EqkUGhoaQamJYrGMiu3A5wGmTJ2MydMmSyBfLgsA5A/X/+FbS5YuPsMPZMPPtiVBnAgJigt5INdNwaHrBkzTQuCG8BwPgIBpmSAqS1BwqfqIyOr786cmn99zwPRZewFgfNt42HYVXAhYCQNeGMINQlAAk6dM+X+u4KXUyH/29C985uqrrrhibGPr+ds2d8ybM29R7R//cL0+rqUFDz/8CK659lr0DffiiKOOQiZbAwJgx7btxe+fe94/rr782h4A6NyzB9OmTgUhHH29vVj7ztt47NFHUSqWC7t3d/Z+0M85c/qMg7Zt2TnP9X3kslIC63qu3C8wCWl77rmX7nvskWee6N8HONakSVPmZpKZMcBoZgCJEu7eVfVGDbJlK5a/sj/PwZyZ01Jt7eM0ANA0E7puSmk1CCZOmoSafK0xc+aMzAd9H9NMxtArrmwsAGCXK1i1clVlb3d3hxf6HwhYVVfX0PjAQw9e/dEPf+wrggtSKpWRTKewY+u27v84/0f3PXz/g8sAwLQseAo+F1NeAXR1dL0vOXVNQz351Gc+ebL8bhiVRyNGNVEjRR+JM5XXvbN23Z49nR+4mdDY0pgD5HOCYEReK0KB5198wVu/Yf0+FTOpdC5t6FpCjPoqEcE7ithzbJenspn3BFg64fiTP3vOmWefExf9lGJ0l7lSsiWoUjWSAj9Q6jVpeUvn0jhw/rx9ltbU1+ffVZCROD505L/x/cD1o0nD/1ywk3O//Z3vPPPE01dks7kxrmvDCT3BYxmvHFCEoYBuMuzYvt0968yzLj7jjDO+//bbK2KK9csvv7Zh5+5OG/EgTrwrC9d1fX94cHifmy6pVCrZ3NSUkuqCcBR+WVnAFIQzSg+hRMb1EULRvbdvc6lUWvF+rrvh4RFfuOt4cGxPgVTl3jT0pTXvrrvvuX/dO+t27OvrNzU3JmfMmjk1UmBwIVBbU4f6xjpl/5LHra+3t+g49rsm49Tzg/jBHpFfo2gLXdfhBxJ+4roOQj8AAoJ0IgdDl9megkgZRr62Bk0tYxCEPvvQKScd1jJ2TL69rRWNdfXIp2rQ3jZRXlyUxJM92ylj65Yt6NnbDceuorG+BQsWLMLUKVO2+L73DqGyABNcRsY4ngNNEVgJJaitrYVmGHBcT+bxBh64kJu8IAxi0qkgQCAClEolaLqGXC6HMOAQgVBTO0VGpULRqVWnVijzPFPYnlFFKAFVxFSVESmih1MkzQQoESqcVS0MalMrCzP5h6gMyMifS5TUOYpAiSA2lEqZNOcClFFoqgCkhIJRBk2TZF5NFf4QAropaaNcCDieD8oYiqUShgtFeb5DAd8NwTQNjuNieKCIgYEhWFaCzZgxY+7LL/2DJpIJfPmLp6O5cSxAJeEVFDGBmsSB9AK1NbUIPYHO3V1IZCwQAB07OrpWLlu5UtN0VEtliFBmoxZLBXi+DaYRhH6AwJf+Y0Y12ViAnIz5vgfHtRVZVhZiYeCDqo1mJCWnTMqlo0kL57IhIYtEJpsAQtGco4pZSdMjNaKUz4wUWBEl1/MlAMo09VEdONkACYIgBmTxUMlPCY8n/Dzg6n0Bw7JgWiYC34dddZRcNUQoApUHLPOaw1CC4QAJS4tgRLohiyqujPnRpDkqiKOpYBD6YBpVHlc58eMqKkjXDBBIdHsQhmhubgE4uF22e7OZHLiQjqaWlhY0NDTFMhu5sZLHg1DpCU5aCVhK0jw8NMwAoelMRrb4vo+ElYCpm0gkLNkUCny4nq2AchgpEhSQjaliPVqUOQ9j4neo1BBMkw0b2eSgMFMJhDwAI9Lfn63NwDB0JKwEKBh279qJefPnfXLRgoUf3rh6HSZNmEypym6LvguUm5uAgBGmZGccnIwUMer2jdeFUqmIcW3jkclleOgHsKtVOJ6Dqu3EygCdSECYYWjxRFBOSUZihjSqSSlvVNArWXVEqOZq0fF92dgzTAOEyqzoSCrNGJP/Hhy6IeVejudCMKlaME0TyXQSdsVGTV192+VXXn7+8UefcLDv2ejo3AnTsFDfkIemUVBBYBomdE02xVKmGcuSwiCEGwQghgYBSWYfGOgP//SnP93dtXv3co0xFItFDA0Pg1CZtRvBtkQoafrM0FGullCqlGS0BNXBwGBZKWQzGYAAxeIwdEbROrYVlpnqv+666375+uuvvEmI2lcp8jMkb1k2hSjD9KlT0TquFQlTg8ak+iWZSiOVSmGgtwcb1q1HTTZfd9utt/9g9ozZR7ueDbtiI/Alw8HzfBlvBUm4l88eAc9xwVWzxbQsaJqMfdJ1Q1lLQqWV2n8/O3bs3Hv77bevA4BEMoVMJo10Oo0gCNHWNg51tXVyM19bPzuZSOX+Xyh0s7ls9rgTTvjUn2/4/R/mz5t98QvPv3DM2jWrTSIYPvPpT6KuvhY3/+VGbN2xFVdeczm+/MUvIZVIQaPA2vXr1n3xjK98+4nHHrlw4aKDtgPA2OaxyGfzKJfLKFWKaGkaA8YYhoYKXXu7u/s/yGe96pqrls49cO53x4+fMCGXTSMIuYzDEDSOG7nq2quv/+EPLvjOU08/vE+ywKWLFh46GqAT757J6DibkVSCrq6ubU8//cxr+/NcOLY7DgHPYLScWv3Fd0J85nOnt/zq8suXTJo8iX6Q9ym7VRFr40aRixPpFA4/7HBjwYKDMWXytPftFzjkkCVHPPboo3cec/RRny8MF9Db1wczmQSAoR/++AdXLVux7OKGhrpdAJBIJTFmTAt8ZUMBALtaxaZNm/z3895t49umnHzySUujY0j+C+V/9LReKEgsADz40KOrdu7c+YFgYHMXzDPGNLcko2uFspiSgReefx6rVq4M8/ncPnkzG+pqsgajo+BOkTw7Ji3BtKyqV/X/5TTywHkLjrvpxht+aiWMnOcFiB77XEj1DABUbBc1NTWI8F6axkDV4CY6VvmavLGvx8atjBCgQmXXIkQOSWRRDVTLFWzbsu1/bFJZViJ73nnn/+yiiy+5FBRNQgC6aSGVSo2waNVzyld1c0ND4/IXX3zpBscuv8tzPHfebFpXW0fjiTNIzIkBgMHeQb56xep97qi2jW2py2bSEh6lLGPgYsRzTQhCIVSaC0cY+PA8yWp6/KknHnv11X+8L8WIiOQtalhiGFIhSRQUua+/B888/fzKn/30Z7dUCkP7/OBsbGpKjZ8wcWy0Egaq8a1TBiIEdEVrrq3J25Mmtb/r+tAkukeD7bqSrGpZsrjl8gHPKIOZSEDTddiVCsIwQNWuSKkzk3eqoTMAHJ27O1Gbrm09esmxh9XUpPH2O6vEymWEeL6DRUsWwXEcJCwTdTUN0BMmuvbsRl9fN/I1OXTs3oXenh7s6e7p37Jp00ulUqnDMM14quN7AQI/QOBJQBPnPgqFIgglyOWy8F1XShwBSXBTG2RKqYqOkRE0lFA5WYyIaSJEFBcjoVOyY8AIi7MXATWBESNgG01jsiAKQzWdlRdTRGjkkD5h0Ig+qPJgyUihCMIVkEhNDAUB4UpeAaE22JHegMbvFwbK+M1InEEKHsL1QpiGrgpDedw0pgLrhQDVGCx5U8IPPAhDen6rFQcCUoYbBBztEyfWTZ0+Y0bH9g7U1uVxx513oLWlDYcfvhSMyelhlA0LKvd6lbINUzdhO67Mz2MMDzx0r9i6Y8dKP/A2JpOScEoJgWWZKJaKSCYTsKsuHNsGCGBXXVCNgqqFD1R6G3kQQjclkMl1XXkoVMdSU3ClUIRqki4vdk03AMHh+x4MZoJqDKHng5HovAUglMFImHA8R4bej6InIiJwE4JAFcVCFdLRJE7TNFBNFo8RJj/gQezB0HQDjArYbhWCSMkp1IRMhBIi5qmcUwDQNSpfR0GJgtCHrpsIAw++L73HgRBIJlPwPEc1fiiELydkumHCMHUYYQjPc+A5ZVhWUk2DBRKmBc/3kEhayKQzyGQyGN/eDiEE3nrrrT2nfvxjGOgfwrSpU5HOpBGaiTjuKvJYy2ta3lOCA6alw7Vd1NfXp9rb22tWrl6D2rpahIIjYZlwbUdOrBmHq6jRknAu5cOaJunnfhAgCnCOoqAomJK7E1DK5D3GJFGdCw7DTMBzXIScI5uvRSplQTc0DPQMwXFdFIb6MW78+GNuuOHGH+7t6Uo3tDWJJUuXkKGhfgwELsa0tKqiccSHpDMdIQ8xXC4gl83H+80orkI2mRhmz5oLxigsQ08xyixKmaNpGjQqC8xSuYBcNgPHk35xDRqopkl1AI/kS5EKQ3Y8NV0HD0K5PjAy0j0nRF3X0tgfMQcEl8T4IOAKZMfBhYxssyw57bXdKkzLQGNdA97ufRvj2xce//3vnfvhkAN//9vtmDf/QBx66KFKqRKqCCQRW0M45D3ouz5++h8/xcKlh+C4Y4/Gxo4OtLdPDP9601/uuedvd93U3NhQ4SFHJp3B0NAQSiUVWQcBEAbCCLjrS79NIgGNaooDIY+7H3qgmgnP9+G5PnyLI5fPYlzbeOze3bHuvO/94MpHH3vsr7X1tQkIiijezHVceF6AVCYpPUOMoLenC0kzBdNKIlebx6YdG7F2zRrs2d2JtrY2TJg4YdqV1111/kknfmgziOikGoHBDBhEKm2iXGRXxSgxXUPAfRBOUSrKZw73Q6TSSYSQhbFhWPu1+BNCiHPOPmej3FwZ0lqjMsZldKbcU5x9zpkHv/jiC4sBPPF/c7E7ceKEQ267447vHnv4UacyjVk/v/iS8MgjjsBnPvc5yMgOYPmKt1BX14CvnHEWHNtBpVSGoVNs3rRh2de+cub5b7zx2svpbLZx8SFLCnKzpYFzgcWLFsP3fDQ21WP69Cn4xaW/6vY8R7z/zzqx9fHHnr5w+ozJxwoBeJ5c/4lSXbiej+3bt3b/8frrb+zas3ufoEPZmtqmN9947ciophgdXfOufx61bt3+19se27Bu7Zr9eT4++5nPH5CvyddEki4iWJxP++qrL6Ozs6NctauFbVu3fUBpA483xowwiFDKfgllqKutM1atWlHf39PbBGCfonkIIWTp0iM+//gTj19cW5Ob2N/bBy44mpqaAIHgP37y4+seefixKwHg0ssuFQDgOR52d+5GNpNFTW0eMhlP4PAjDn9fk+z21vELa7M10vNKVAEjaMQxHT1klPYlP4CpMfT093xg8JjnBI0QpBZq/e7v70d3Z6dsRJsGPv6RU81nn35G25fXnHHAzFQ0TIj3SZH1R32jHTu39/T39/6vUukPffiUo+/82+2/GjtuzLSIGzIaEknUZNTnDjhTEHoxkvXrez7CMERaT2Fvx959b7IUiqVR66zKx9VUtB9R0/FmzUpZ/J8fhzlTn33u+Z8uXXLoZ10vZLbrwzLlno6pGCI5EJLWOk3XEISi+PKrr/9185ZN/402Pu+AA7K5VMoUiiIVKRcje3FjS4Nx+pc/37yv33PS5ImTDF1PcQHoaqgWcUtsLwQlQk7Lo6EdoUimknj1jVfX/u2eO+/q7Ox4X9m/CTMTX96G8kGHQQCmaRgeHoYAH3rokQdu3bF9y/uyKhBimHU1DTXyec+ga8p+GIGE1Tns6+kfJoK86xqnGjMk6ZRIP5REfTP191xRTqVunjENTGfSS5VNIl+XAxeAaZkAIShXypg6ffrE5pYxE8MQ6O7tIUQXWHjwwajL16MmV4N0Iq1kmQLVahWu6yGXzuHwpUdh4cGL0LFz5+rnXnzhDUpJwbUduE4VTrWKVCIBy7Tg+y5M04BpGPA8F44jN/7RVEVwIYs51VFDnHslp6ClUhlDg4OqQ8rjCWUcPxJNV9QYT0BICS9GCMByMifln1L3HyULibhTGUXEELwb2y5G5WERlXUjIBRxmfwXIvCoV43I0roek51jmEWUycpDhKGQRaHK5oyGaDI7WE6zi+USKtUqDNPCmLFj5CLi+rAsC6VSCalketKYsW1TAyJoXb4eUydPR1t7uyTBqilf9JCSx5kinUqB6RSZXAp1NXVglKF9wgRn48ZNq3fs2NmdyWXBdClHHC4UAAF57nxfRvkwGuewBmEIqtHYiE6ZlAzL91LZtyoLmYchPF/5IJV0N5KA6ropZfSh9LtGObmcczBdBwiFpyapyWRS+X/V9FwBtASXnm0Gpgpb6SvVDRN+4MN1XenbBR8hc3MBCgLXcRTNWhZCQRBIuW0YgjFNxsoIDkOTmbXR9WeYhgRrqcdAOpOFEIDr+BA8jMnJumbEYKMglN1Ju2rLiWEo4WwRLC3wQxm1pFFU7BIKxUEMDgxg1fJl2LplM3ccz67arrzihIDOdOllUjLoyFelHCBSmqtROLYN3/eQzWQz9XWNNRKQJuIi2Qt8VG0bnusi8ipzPmIdCBVgLbo+QQSYziRYQVkV1KWMIJQNDBFyUMrAeQjfdaVUN/AwNDyM7r09CISPQqEfoGi58pqrzk1a6anPPv0yDpx7INE1inQqg1w6F0+ShSAIuIAfBAi8AJ7jo1KuxPcpFyNrBQ+4kkET6IaOdDJd64ehrhk6XM8BVXFgYRgg4AEoIShXKqja1RhSEoT+SFc/COKCWmOaCqlXyg3GpKw/RBy5FniSukwYgWVZig+gvNGUIAwlTdi0TPihi4SVhGv70KiOmdMOmDVpwtRPAtAct4LNW3YCoXyqSjCYjGWLHthSYi/XIsexceCB8zCxfQJefe1VXH3l1e4XvvDFB677/e8uc317I+chisUyfD9AMpkEeDgC7CKAHwRwHUdNZtUaGoay2UOk97lSKUuQl1xwYVcdDA8Oo7VlHF5/640XH3nkoZcBgOk6KtUqdu3aCdezkclKKEfge1ixYjmWL1+Brs7d4EIGFjU3taC9fSKamppx7713i9deeR3HH3PcSd87/ztfrFbL8DwOwhhMwwRlBJVqFZrGkMvlZaOFKgAJkZnGMnqGwg989R38/Z7DCwC5fH7X5s3bPC4EyraN3Z17EfIQ27ZvRfceudHTda3hsCVLT/m/tdBtqKuffOlFl154/wMP3nbE0sM+s2nrZmtoqID//OmF7ItnfIkZpo6hoQHccfttcGwbH/3Ix8ADyUmoa6zHE48/8eJnPv3Zb7/xxmsvy9WJ9qWSyXLUpKaUYNPmLXjtzdflhnzrdjAirANmzWx+P59X03T2sVNP/XpNbfpYAPC9ALohm54AheP4MA0d/f1DT+zetXuf/Wnz582d1z6+fda7qiG8O5KIcxErRIIg8O+9/8Gn9vd5IRRGNHDlQrJQ4mg4yvHIYw9tv+XW217+oO/T0tQ4GoKh9lcqL9bQsHTp4gknnnjipH0v2L94zuOPP3plbU1uol31YOgGGpsaAUBc9/vr/nDlFddeCQAfOuWEmiWLFzcCwObNG0VdbS1q8rk4jzSZTKFl7Jj8+/luhx95xKEA4AVBLAGmECD/vMEFM2Gif6C/Y3fHrtUf9LiOa2luq6+ra/JUYk8ymULVcbFl63aMHdeG5pYWWqnY+1Twhtw3Rg1346gsAcS+yVf+8crg9u3bC//jZNRItF580SU/njFj+vxoj02ihApBpG1K7a3z+Zy87jDqv6EEViLaHwH1jU373IwY6Ou1q9UKPM8DFbLREsnYCaXgADL59HC2NvPfJrxLDjvqo48++vBfly459HSlFoemycZ1jIBXHBCogWGhWBz+5Gmf+sXPL7n4zn/2ebr3du/YtnXLagICPwhULOpICowfBqRp9H3yL36+etbZBADqmhpmyBGBePciQuT+RUZGEhAwEMIUmBF4+NFHnly9fOX7ltT7ns9HX9eRbQgAenu7ccuNt7z57NPPPvl+X79YKLLQD6V6gcjoV845QiWtjU7DmtVrwv7B/taGhvpYwk7l5lJ29HnIYRkJJNVUiAsSS+I4l55R6ZNloESHU3EVYElDNp1GTT6LgaHBhlK1ZDz13LOYO28BTjrxJIwZNxZdXXvw9NPPwg8kGdd1Hbz22pvYs7cHg6UCdJPhlX+8HL76+qsb0ulkt+d7yKRTMaV4qDAMx3ORr80jFCEoY8jmciCEoFQsoWpXpZQ5CBREamSzKjeFIpZQapoupaIgsUdXqCKJEk1BdIjKQpUbHClTIvHNxyMJTjTdHdWpi3KsNCbpwFGUUHSCRGx7YHExGsuYY05VNG2koJoGAZnHG6WCRrIOAgrTlNMOxnT1YJLfkYApqSRXU02ubigPtm1juDAMP/DheS5830c6k0E2m0JLc9PCwPObGKUIBbB52zak0yloupQNUya7lFAIc8d20dffjyDk0HUN/QMDGBwaRuBzt2Nnx3rfdQO7asOxbVmU+z4CLunBXig3jRrTkUwm40Ip9GVxGPgBwAEeyKrHsixZ7EQ5cJLkFGPl5dRLg++7cF0bmqbJz0zlOSMakVAaDjDCwMBAhfwO8bUST9YoKJHXOwCYugVGZRRJGKjrBUz+DomiZCTkydCM+PwyTQcFg8EMWGYCjGkwLENSndU1qesmrGQKhmkgCH1Uqw4Mw1RUu4J8qDBN+Xol2ZkSBgIGy0oikbCkRzYIYNtVWFYK6VROgc6kNL9iV8ARwrIknM3ULFRLVWiGzidNnmSlk2lMnzpVArqE3CwyjUnZiyo6mZJG8UA2hnwvgOM46O3rJY5dTfqeBwoCRjWkUzL/Nwj82EOiaRoMQ/qco3gmUCDksmkQPUGFggMJHsZPWJ0xJIyk/HvdQCqZhGkZKgfVRxj6sO0qbNsGONjnv/SFMxcesuj4J59+GqeccjJax46B78kJYzKZReDJ4lU2B+QU3w99UBC0No+DxnRJpOahpB6r6DEv8OA4ciNxyGGL61PpJMtm0uBeCKdaQdUuwzAMVKuuKuYV9ZePAMiIgm/JIkpBnRxHrrGaFkO9ddNEIpVQ65Ra2P0AvufBdm14niubd0GIdDKNZCoBXdPk9zQthDxAMpWA4zlNRx111OcvveSiJQAw2NOL8887D9OmT5OZvIQo9bFkICRMU+12edx6O/bEYzFzzgFoqG/AxHGTOt96/c07enr3vE2EgFOxkbAMeIELJ3RgJnSkkhnVpAigEYZEUjYt3aoD13VhJhRBnggQRmN6vKZpcGwpEecI4PsuANL/9LNP39Pb2zMc+Yx2d3Rhx/adKBRlA813Pbz11nI88+IL8AVHTV0dBIC62locdOACLFl8JNrbJpBXX/2HWLdxI84885wzm1paDq1WihBcwLFduK4L3dDg+3LSHgoZiya5EbIpYeoGDEOD4zrw1YbMD7z9XgzedtvtK3d17toVcoGqXUbAPfiej/b2dkydPlWlDwMnf/jkk2YeMOvA/5sK3Xy+pv7Yo4760uOPPPrHw5Yc/UMRYPLw0DBax7ahrr4eVtqC7/nwHReD/YM44oijsHDhoapLryGRSuH1l9948vTPf+l7K1evjimnpeKwWLb8zZ0AoJsaHNdDa+tYtLQ0ortnL5atWMbHt4+ZcPIJJx2875MFQn99+RXnXfrzX3x7eKgAx3ag6/JelSBLiiAMcO99968482tnXft+jsucuXMWJyzLGC0lHol9UZNdNTkCgI5du9d1dHQs39/n59Zbbwl2796tVBO6tJGoTPujjjoGP/vpxRVNM7o+6PsMDhTseNarnrtUeUOzmTxmTJ3Nevv6vX04R9oPf/ST8+/8262/zGTSTX09vdixbZskIIOEd9x++w2XX/brX3ieXQKA/p4BM5/KJTkXqG9sJvmaGhiWKfccquDo2LE7ta/fq6llbPaoI4+eL0VJVCntgHeFvUbfO5TcCQD429/uemvZsuUf2L8bBH6Kc24ZpgWAI5lM4OBFC3HaJ09D24TxsN2qUyqU9inDO5vOxKOW0dckHUVUmznjgHDu3Ln0fzg31ne+9c1zFxw0/9hobx5LfJRiIQxDdHTsBgEJ77vnvr2PPfxY37u034jiGqX1e8asGY37emyYYQZMlwkPIORdhH3fC0ABbNq4sa9jx8742qzNtNDfXP37rz/55FO/b2ppWRSGCuJGoyJdgAooFgmJrYsAnPvuuedPzzz73PVr1qz8p7FkV1977dZnnnvuHwDg+4EI1HAnuv+3bt0WXn31tcPv9fuVFFelvrZhYlyvjD5hAAwmrYPgapih3qunp7fUsbPrhQ9y7bl+1Rl1zrFjx04plQYwa8ZspNKZtX29A1vf7+ubVDfy2ZzyJgupDBUEmpLYR0O+KdMmHnHcCcd96rRPfDJumFHP90EZiX2BQshs3UQyiYRlIhRcbu6E9DKFfgjLTEhoiC/gVzwgFHAqDnp69mLmjGnjtm/dbjiujSnTpsBWG4IAvgRWWQkIDgwNDKOnpw81uRosPmQRNJ0hW5PrTqaS69KpdJ/nunAcW2H3E7AsC5wHsG0HvhegXCnDc31oVIOudP2ECGi6Jv2pXCjpM1eeSOmPiza4EhKkIE6qsxHnp6rqNVRS/2haTOiIyRsxYZcrT6iI/beEKI8dJzFNGKO6WLFnRfnQhBCyoFNTZyFGvL4qDUedyFBurARivyqJoS8RUEWZ3dUkU2MUqVRSRvn4PtLpNOpq6qBpGvL5HBwFeAGVk41isZg/7vjjDqvJZdHa0oJx48dh2pQpyOazauLDYw8zIQSu58LxPFCNQlNdt2QigcLAEAqFIbfq2ru5CORUi0vQUCikN1PTGHQmGyoAEPoBBJcdM/ndNOi6IaXDjMhsXELBNDkNpWrSqEeAKy6VCropo3oMwwTToPy/DOl0BqZpymziUNJ0A19OzJhGAUoQhJLcHUlYQy59vT734StapTRsi5guHE0joyI8lUjGjQld1xEEPnzugzCBRDKJIAxgOzYMw0RTYwsSZkrK1DmUJziEpkl/MGUUhmEhYVowTB0aMyRR3ffh+Z70tVDpd+U8gJUwQChFEAgIITuFmqlDNyTBWqcGUokManJ5+IGHxpYWBK4b9O7dq9XW5JV8H2oCF8XjQDUNgKpTRalSlqTkMEQylUJdfR1mz52N5pbmdBB48H0Prm9jaGgQhin5AIzp8kFA6SjiubwTDM2EoVtgirItRNSYkrAy2QSS9zKonGzGObSaAdOUdGoRCEyYOJEkU0ksPOzQY79/wflfvPPOv2uLDl0oliw9VDYpKFRuc6hyW1V+NufQNSbp0gkDA4ODKAwV4txujVKEoYKFCcQUT00zrL7eXr5581YQAOmUahaG8nx6fhDvWMNQKAo4VfYKxHm50j5CgRAQgZquciAMOHigCnIurydN1+NOuIxlS0IQAddz4bseNJ1BEB9ChMhk0zB1TRMhn3/ggQee1DKmMXXrLTfj0SceQyaTkFL3VBLlalk21NQ58VwXvqfI126A9e9sEOvWbsCLz70AAWDOnLlv6dBfkWAwBsdzIAhHXb4GSdOSNgEivwdjBLomfcCabsG0khCCS7gVY/L6CiSFXlNAt2hyalds9A8OoKGuHn//211/v/32v99vWQbq6mqx9LAlaGhuQnF4GJyHSKTT+MpXv4ZLL/k55i+Q9QxV6y3TGcZPbMPhRx+FQ5csJdu37MD0iZPbr/3ttRfrhj7Fdx2ZFsc06IYWq0QoCAzdQDqZAQGV9wQdPXkjMHQT5n6WNAPA3r1dq5etfPM1nVHkczWYML4dhmGirrYeQRBicFCq46ZMmTzhuGOP/6KmW+z/9EK3saml7dSPn3r2Zb/6+V8u+8Uvr7KSiWOGiwNG67hW0T6hHY2N9TBMef9QRsF0hklTpqBlzBgJGQSwceOGrot+dtEvP/GpT5w9MNT736S8GzZvXBvJH8ulMpqbG3HQgQehtqYBRxx1FHWcoD6dSi+tr2msf6+fu66xIffVr57942MOP/KCNaveybSOb4OVkA2lMAhANQm8S2VS9p23//2ajRvX7rNcjxBiLl18+OKRKRqJFRJRM13CFoFySaoy77n3vhd7evb07u/z9OP//Mm81tZxI4WGkq4SStHX0xO88dprQ8XCUOWDvs/qFat7R2+OFehF7qMY8Ld779p91z13vycvYfOYMQ33PfTAr3/9q19c3NO9J18plOHYLsa2tiCdS+KyX/36juv+8Luf7e4aAZatXbuhtGX71gKlBE2NDSCURBmeUYY35s+fZ+7r92obP37yvLmzZ0bPTyFGRmwjuj/ESjkzYUJAiKeeevLJgf6+D5yrPVQY2lYqF7oAIHBDOFVbxTBqGOgdwPXX/d6ZNXv65Pr6xvccID44NECjApeqGE3ZmB0ppnZ3dLL1GzeIf3JtZy+44IKfXn71ld+QBbmCvFKK0TGttusiV1OLl15+9bkf/OhHl3V2dm7+r2oHAOjp7hGu66JcLGX39djY1Ypj6noo1wiikjuUgkNn8D0PTrmUn3fAAXkAGDdhovGt73zrh98995uXGQbGFovDMT09IpdrlKoYVBLvX7r3dndc8IMf/8d1f/jDr8rlwdK/UPNsVhJgQnVpH4gmvLNmzkwee/yxB7zX73f3328XADC5fdIYqd7i8TGO9abqlAn1LPMD+Zm379rx+upVq1d+kGuvf6Cv4EgiNXggUJPPxbYUzdLcrTt2rB4Y6n3fVohJ0yZazS2NicDzwAiBlbBUTTB6HQFc3x170IEHLS4MFurigjeiwxIqJ4i+78sbXchCwfc8SQgOA5iGiVQmDd3Ukc1kwMExtnUs0ikLw8MDAJBYtHDhIZ7r5Pbs7kRvz17s7tqJ7bu3I5VK4rClhyGZsEAoUKxUsXHdJgSeBBANDw/h6SeeeW5osPBKsVTek8vm41xU13Xg+56UWnsBGNFhaDoc14YgQDqTVrm7MqjH92VxrTGmLkI6MqGNYTAjskoRn/1IuqY8oqEAUZMdQkYtyGo6S4mETgn1RBIisqTIjkooIjkyYnCVQCShUBNbJZ/misAcEftkB0z6cEcIoGTUtDl6IEpYBoSEP3EexO9LWTSJloVhIiEnlIIT6ExDEISo2FXougad6ejr7UW+Pt968iknzacGQdv4drQ0N2DhgoPAqIR0CeUljhSumsaQyaZRV1sXQxGYRtHT24N8bU2xVCr2RVp7EAJNM5BIJJHN5gDVEdc0+ZlCIeWsEtZFldzVV94omcMpqbOqySBEnFOqEF/yQSnHz/ADD74nC2tZPIRwHVfRTk3VwOAAOBLJhIq28iSxVb0GY3ISZ+iG3MCrqT/nHH7gQWNMTQKFnFBpusKuSzJ2EEjPpkYZuC9Qtasqf1XAc33YjgNBZWEdBrKBwxiDzpiKjTJi91bgBdB0Bl0zZBGmMSVXDiIxPTSmq/f1EYQcyVQChqajWrFl7FgIKWGhOrgA+vr64DhO0DZuHJcLVBhDvKJ7gxIiO9QAdF2HYZlqoYwga/JPOpXOR34NyzThhzJGLPA9pJJJJBMpeK6HwA+VD1xGO3mBOyLlj0OPpZeSC9l88P0AAQQcV54/Ago/kBmogRci5Byu7yKdyohMKotjjz7mhPVr1rU7ZRsHz18Qh4aFIlRRPzI3MJLu6kyDKoURgkMzGaykWqSVGoQy2fAydAPptGyO9+zdyykI8rkcDMtA1XEAQpBKpZFKJWGasgHh+z6IkKAzqtQWlMpmhe/LRo6VtEAZQchH7CS+J2XzmqbJIplKyXRkZRDgcD2ZZ+y5npwmGyYo0VEuV+E6Lgtcf/KB8+adcuIJx80EgNaxrTj++OPUeEFGexnmSLMsDEMEbhjHrPT39aKhro5YpuE/+eQzHauWrXngJz/9yTUluziQyWRBNWkvKBXL6B/oB6UMSSuFkIcyVooQuL4H1/NguyozmEqlgoyg0OB7HlzHQRDIzHeNaZIsDYJUSjU8haj8+te/vn7jhg2bCIAgBHK5LHbs3I7uHpn6Yho6GusaMDgwgIGBfni+pyCCBJ2dXXjmqafQ39eNJYccgiDk+MwnPnXc97///e/ohpYJQynbtPQELN2Q1G9FK6OUKetAgGrVhufLDHAoRUoQ+Pu9OBRC8Oeefu6R7v6ekqnrIEJeN47rghCCzo5dqFQk/+TSSy4548OnfvTT/6cWurlc7eQf/fgnP7zn/nvvu/KKK37TUNt4CjXMuuaxrTjlox9iDY11JAh4nIUtp/4MfgC4tg/GKHSN4eV/vPKP008//cyLLrnoJ13dnR3/dMM1OLjeDYKqzKHOypQCTcOevXshoKOnb9hsHNOy8LOf+9RH38tnP+GkDx116y1/vfXqq6+8OFuXq09nkyKVSMAPuRKoymdEMmHi73+794Ynnnzq/vdzjMaPGz9x0cKDZ0VybEJGbFVcSKYHIQSO48L1AlSr1d477rzjgf19rtonTEwsXrp4lgTEjUyZIw/vM08/U3n2+Wd3Vu3yBy54fdfZMVrRHClZAMB2XBxz/FGpBQct+F+9hIaVSJ70oZM/cfutt9318Y+ceq5driY3bdwi+ocHMXbcOORq8li/cf2yu++9+6o3XnvjXf7Sil2pgGNHNGnlfISPEn33gf7CPnezli4+dAElJBtPREdl1sbydPHuOm7z5s07316z5uX9cQ5XrXx7+9p1G7tkQS2jRiO+yZZtWzFUKFinfexjC1qaG5ve62tOnDxZ1k18xFMeNf0im9u48WMzNfm6dzUIJs2Y3vrnm/58xa8v+/X5AEwZQTQS+yc4UXsCjnQyiY2btj7//e9/5wd2uXzd5BlTt8XrIR+Zeuq6pOpPnDQhO76tfZ/AacVice/g4OBeJd2PJ8yATDEYGBzECcefOLetdfxxc+bOT95y8y0XX/KLn1wCIGdoOsY0NI0065mMUeQhh+v7KBRKoJRi+7Yda7/2lbO/dsXll12zesWKfzmdfeGFVzbHvSWluFUTYqSSCXLqKaeedsSRR84BgAXz57+n79tQV5cfkYiMDjIjMeA0ygk2TA3Fcln88fo/PbZh3TvdH+TaKxULXZTAlmocgvqaelTLcli+evXqlx959KEPFLlVqRZZ/+Ag1QwF8KQq1SbmIwED/QPIpnNhe9sE+4H7H9w9UvDK8U1MoQy4zOr0XBnLoekaqJAZhYl0AoHvoWqXUa6WkUolUFNXA88LMTg8jJqauvlTp05fMm36LBy29EiR0pMwNB333X8vHn70MbS0tsBXXqeurk7oFsFHTz0Fe7u68Kc//nHwkcceXdG1p2sP5yEEJUgmM0iYFhzbhms7Mrg4CECZlDXpugYv9FCqlOQ0i0axKRpAVe4tpMxAY1oMgAGkjy7ykEXSlTj6Nu6uyG6jgFA+Ua6Cwmm8KY9ueJnBKdTEQmW+jkrLI6PGAvGUmCgJtRiJLCKgsc+UqBlDVBRLCayIPY8aY2ojLovgKD9WYxo0g8Um7jAMZb6dYLArFRRKBdTU10qPWxgglUhCNzSUKmU01jeMaWpoaBkeHkZn5x70DQxhqFSQ70VZHJweLeRMZb/yUSt3b28vQIGhocHtHbt27IlkKFEhCA64qoFBKYPv+9BNTU2BpW9TyjfldMx1HUkeVrIqEjUulBxDiFDm7ULm+bqep0jPJC7wGdPAVXYr0yRACCAwLBNeID2blBKZ86veX6N6vNFV4bEgHLBMSy1GVMl7CBjV4btSkjpUGJIxUZSBMSqJwZRBM01FAqYxpr1YlLJy0zJkTqrOYBgWKNMk2TiUBXsQSpBOGATQDB1WMglN16BpBgghKoJHRxjK4plSASshpWiuF8BMWMjmM7JoJwRB4KOmpgZBGGJgaAhbtu0o+l50L5A4titq3kS+daYUFSBcFmd+AN+TsvNMJlMHAOlsBoYpv4PMOAZs10EYeKBEdtC5asowBRwIQh9CbXhAAM3QIQiFRqLvqABWGJmuJhKWvAo1hnQqgUw6g42b1sO09IPaWsccvXXLBkYFBFMbtciDTihFoOKbKVUNPwUL4wLQCENtTQ2IrsF1JcU38nRTEFCdYeuObejc04GG5gZhJhIwLE16pkMOz/VU5BqPo84olfaQqJlmmQkZAeY66n4icB2ZJS4jMXgc5USUJI5Aep4d142bdQwUpm6A8xC6ZUiuQCip9g0N9VY+na3L19bM/tHPfnxcbWOt8de/3AwKgeaWFiXvkuwAXdPV2ibp58lsEoNDw9ixowPpfAapbML/801/fqRvsPvnf7j+9z/YsHntsoAHqFbL4B4HI5qS8UviOw8FfFeqf4igUrKnVCqh7yHwXUl7V03WgPsqfkKgUCjANE1k8lm1QSmjWCqibVw7env3Lj/3B+ddIwBPY0AqkcTcAw5Ex84OFAsj1jEiKF566WU89PCj6O+TwNP+/l4QInDEkUthuw5ee+01VCpVfO1LX/vUpLbJHyqVSyoTWTbibNsGYRQBl7L9aI2NeAxhIJUYGAU33N8/K99a+Y/777n3iR07tsVNGkKB+vo6cC6wft06hFwgm83kLv7ZT38ydtz4I/5PKnSbW8ZO+Pq3v3Xe4088fvsPf/CDX9TWZBcMDhbMo489AXMPnIuGhjrpgeNhPL2UcD9pazEMDWZCBwD+h99ff8c3v/6N7y5fvuJ/BXS9s/LtbZs2bNogN1w0trukrSS6du/E3u5O8swzzzYee/zxZ0w/YNaR/9PrzJ9zcPtXvnzmNy++6KKrTjn5pI8alskmTpiA2bMPIGEopJ+eEiWBD/xf//rKP5555hm/tO0Rme6+/Mw/6MCDxre3tUR7hHdvUIl61slGZ11dDW6/484n33l79av7+5zt2rlDPPnkE2ZUhUYx6fGUvrGJdu3eU+nZ2/OBdfzPPv3s5meffy4mD42WxyYsE1MmTZpmGux/lOsffMiigx957KEbHnnkob8ce9wxR/V1dyMIORYdupg01NeBMqC7u3v3RRf94upVy1f806n7Y48+vh4AdEMDAQdV6q3IklQqDzfW1jbuU1F19NFHLURsP8N/mbCNFPijS95XXvrHuo6Oji376zwODxd2ArJ413SplAo8H4sOXYgvnH66VSpXp9bk68a819fbuH5dRQiu8oJJDC0dfb3OnjM729LSFCsnamvqmn90/gW/PPMrZ55FGDH8gKsoOiGTUsBlxKba3z71xDPPnnPOWRe88/bqNQDQ17WnO5K7h4r/wLlAQ2MjMQ0LYejVer6d35fj8vbba3e8/sZr/4ingWSEmWOYBpqamsA0PTtl+rSzjj7mqCuXLj30OwC0IJCRdTISVO4Fon2663jQGEUul8HwUHHdlVddc/7jTz38ngu7F55/fk1X157VhkpV0SiL02OqZQeHLFy44PAlh59/2KGHf/3Cn134H4GHH1515bXj/rfXrG+pN6TsV9Y5gwP9qJTLkjcTE6xIrGTYtXPHrg3rN638oNfd8jeXr+zas+cuANWuzu7NN//15vs+89nP/nb1qncu//nPf/XLPV0fLBIuCIWgqhlPKY2tEMCIvdQyEzh04VJnd9fetxy/GseaaVIOCaSTaQRhAMd1pTSVkFjqGxKBZDKBXC4Hp+LA9lxFa/awedMQNAXC+sIXTz/u2GOOaUkkDQiAuH6IBqMRE8dNBCGaBGDxEDoY1r39DqigYMzAsjdXY/WqteUTTzoutXnzltS2LTuG/cCTnc0whK6bcvJGKXRGEXoBHK+q8kF1lcVLQBAAAjCYJSN8QikTJETCXN6lD1IHR5KDqQSlqH/PlWlcduF4XAhrTFP+iGDEXxPnWEmsFVFZspRIvYDgIu6MqiQcFa4up8Och3FBRTUNFEQFvYdxtiwg6atESHCNbphq6s7llDKUNwZjliyQweF5HsKAQy4KgZwqBgF0Q2blppIpGJoOz/Xgeg6CkAMiRNu4cWNTVtrKpfMYe/B4GLqORMqSk2YhoFFNxUSRePGJMnGjFd3zfKSsNK6+9ZrXXc8tp1IyKsZ1ZKyHoRkoVspyk24YcB0bnu+qZoUsMimAEKrwESKGFIkwhIgksVSDaVmolIvQNR2cyKJF0xTtUR13wuRGW9cNJFSB5VRtWcAQJn9XAAkzidDzFahenTfBEQQBTKZDN2W2cxCEqv4JpLc65Mjla1CplOB7CvwE2TyKJp66oQMIY/Iy1eRnZboOQiUl0DAMFYckKeP5XK2cdADQdElxDIIgjnGKfOEAUKmUoJsWDEuTuW+WnODbjgsQDQ11eWRzOQz0DaC2tkZOCJwqLDMBzoHN27bu8XwfCcscATTx6BAqSrOQ8iUvcGHquorhAnzfg25oyNRkm6EKY85lYe16HlLpDHxfTvcYZTCYDqYix/zAlwR1qRIHY0wde4YwlFNBECCVSinFiS/zmpWygWpU3q+GgXK5jLb2sc2/ve435yM0Zk+fNgftE9oJBwdCAl1JheJ4GyXflvYFrjKQKTq7ujAw0I9p06bADwJojEBwXT4c1e9phi40zSCDvYOEhyF8LwDRKBKmBkIY7GpVrQ0EjOkAl8VvGIQwDQuJZEq9P5dqBi79yozpYAYDQqjMcQpCJPyLaTpEGMLULQgiycw6k77tZDKD2ro8ioUihBColGzMmj7HKpWGWyZNm7R49gGzp2zasBnDw0U0tYzB5m3bkcvmMXF8O6IlLhSSDl0plbFnbw8ef+xRrF+3jv/HT35E773n3kf/8pdb/qO+rmGT7TpoaR6LUkl6X93ABdPl9RuGkloccNkkZDpg6AY0rsnJLqEQRCokpI9ISrNTybSarsi1k6vzIYneITRTgsCmTpmOJx594m8X/uynSy655NIveK6PXG0e7eMnYPWaVTCtBCaMn4jGpgbMnjMHfX39MSly3vwDsXHdJjz15HOoq89j0uSpSKWSmDJjSuM3vv2Nb3znu997m2l0PQRAmQZd0fxNPQld11EsF8FUg06Aw7IS0A0drvCRNK1/S8E4NDzYs3TJ4rvr6moWTpgwqZ0xDQaThvoZU2diz94uFArDyOVymDP7gJl33X3nz1Op9PmVSvnN/18Wuk1NTZM++vGPfexvd915aiqROEgIWOs3bMDMA6YjnUyrpqL0Lmq6kgNqRNk4SCyFB4COXbu3//a6319/441/vnl4eHDwX0rBu/cO3nLrbSvmzJ51UOB5EJq0uNQ31cHxbJx8yofo9m07zDdffW3+/ffc9aslhy655NXXX30cAJqbxyQSSXPKIYsOPube++4++aknn5i59p21jWNax4JzLtrHtRKuFCKWacSV4C9/ftnfL7nk0otC4fW832N20sknHwOlIiBEZriT0bQqNXTUNA3DQ4XCH/9w/Z1i9ENgv8nOm815c+YnR0/W4lgGQnDQgvnpxYuXNG/bsV0H4HyQ99q1u2vLwNDwTgAtkbx3tI2soaExf9JJJ3zk/HPP+8eVV18V+znTqYz57e9968uv/uOV8w3NmOy7DtzAQyKRFJrBiKYxMGqhe29X79fP+eZl3d299/zPE6PSei5CjxJmcM5lYzmC0YUUJ5x0bNs999w1DsCu9/q96msbZ40cO8Sxd6Np21HcXhSFt2v3zuf253lcs3L1po+ccoqyx6hnsi4b/fMWzIfjBY1dHZ0t7/X1Nq3f1iNCOESDRdTAgyjFpBImo7Nzt9mxY+uC1nFju1vHtC/80x///O1Pfvq0k6LcchrDW6X3NfADgErV1PPPPf/8N75+znnbdm6LGxPdvd3dSooKwVXDkYvY8qBr1gSdJRZhHyj1jlMNTvnQSfeeeMJJH2WMJSKGj1A2qggV++Mf//gIEBwh93DhyN5E2Q252htSSpFIyfX/tTeX/ePiCy/9z6eefPilfTlXWzZv6L7w4ouvvfjCC2+glOhluyJ0qhPGBUxLx9i2cdYF511w+mkfP+0zM+dM1yjjz61du/bv/9trdu3p8Sa2T4SuGwh8D8OFAlLpEKl0Wu3x5N7Ot124gmP9+g0bmMb6P+h11zfQX1h40MLv19U1X/7Gm69XfO4OQAhn3oGzw3vv/fsHvq4pI8SypH0nUsMKSE81VWtlKpPEG2++1XH1Ndc8c/Y5X41/V+MqZkS3TIQOV3QwDiMpwT6Rr7VcqiKXzaOuoR57unskzRkUxGJwqlUQgsyUCVMWdXbshtAImpoakcumYVccHH/MCUilU9KPaxooF4twfRuLD1uKutp6fPv73wYnIR8c7K9mUknH8xx4foBkMgFBGZKpJKrVCmzbRohQFbFyMmPoJsKAy7gPNU3y4SojtiT88lBOoAil0A0dvuereBUZ9h15cIUgI1MOQlVGF1cZZvKiH5FbxU2hUWIVEWc6xpJQSOAPgVBFojymTJObYC5CEMriDORorkuIpjo8kvTKmBYR/KHrmpoeyXPDuZREBoH0mEYm9IgqygPp/wsBJA250SgMF5DJZpA1EigUhqXnDoBGtWmEE0UypvD8ANQNkDC1WF4VNQ2iB2G0CIW+JAI3NzdBAD0dezpekpO4JBzbBTiHpmkoVUrQmI6KY4MLIWWfhKjOvox90UwdVPfldFs9fEzThEZHvDWgcvExDFP6qBiLpeMBD+KoISNCxtOomyVl4xrV4IVSagrVcdTNBDzPga7paoGjSGpphcIn8APp+aWMQtNl1JLnOvA8B5rGEIZMgd3URFTTkLSSCAIfnHAwKkPTLV1DtepCN0wwkJheXCmVwZiGIAzVe8oFlem6Rik106lU49hxY9rqcvWNTY0NqaHBIat1zNiUH4a9b61c9lwQ+HuKhQIc14fGEMf5lAtlVMtVaExHsViBpumwbQeN45oxZdJEtDQ3d1tmAmHgg+iS3AcSLe9C0nup/HuNaNJnBXlsh4YGMTQ8iEw62wZCMq7rlZjK+jUtC67nAEJCv0YDrBjTFG2Ux8VnEMpcOI0ClAtQg0kabhBICJyu6KuaBj8MQBShOZJ1f/y0T56ZSKQ/2rFrL/3wR04csQeEIwoQgECozlMUMUWpiGORiCAYHhwGOEMiYSKaEAuMgGQmT5DyLss0NCE45aH0B1dtG3U19TANA739fSBUypgd15WqA0XnDkoFxQWQ95jM+5bvY2omHN9RkUyQ+dcijMnxAZfqAc5ljmDIBWpyOVSrct3UdAO1NTkMFwaLru+0nnLyh4+1qy6eeOxpTJw8GccdfyJ6evpANR53SUXA4doBbN9FqVTAk48/hQNmzcGYlkayZsWawl9uufkv+Vx+kwT9yXXANA3YjhM3+TzXk9J8P5SZ2ppUJHiQVgXucdnkYQS6kUQQ+nAdW2WF85jQruk6qnYV6UwGsKQNwLQMlEslEEZRm28s3nbrbTcfesjCw5YsPbIdjKF5bDNCJrBl00ZUqyUADZgyeTKmTJ6Mgf5+FAvDyObyYKaGdRvWY+qUSTjkkMV48YVXsGDhQfjq175y2KtvvP7Vv9x044/HjhvvaaGOarkE3ZT3a9Wx4+xtYsj1Owh8+Zkoja/hf8fPug2b/6EZxnIA7YEfQmMyYk03NLRPnIhysQTHdmAYBpYeumTpgw89/Iejjjn2sheff+6Bf0dB9M8L3LEWY2z8/AXzZxw0f8HSx5947OSD5i+Y+vjjj7ONa9eHJ33ow2JcayuhDHAdD+AedI1BNzSEgQJialRuhFVzvHPvnv5rrv7tXY8/8chNG9auW3Xllb96z5/nxVdfev7LX/rCWYahj3BxOdA6rhWt41oBgP3llpvMXbs6F/7muuv++OtfX/FK85j6vv+86Efjjjhs6QF1+fpJLc2tbOHBC9A0dixax45BEASKWszjJh3TKXp6etc++sQTv/0gxe649vF1zz/73IFQe484354I1cSWOaHRWvTYE489tmHLplf+Hecyn81lsrl8LirMiFK5cWVv0TVGPvHpTzS+vuwtE0Dpg8n2w+rTzz23CsCh/8XzKeWcqSQ+9enPfOSb3/rGcgC/B4CxLc3TTv7wiWdc9ovLvt63pyebqcnK57lpQE8y4jsuGCXgjA7+6aa/XPb6G2/c0N3T/T/eB+s2btj0zttrd8ydO3eajGUj2NPdhUw6i3wuj107O5o7du044L0WvK3t462XX3ixcWSsIuLvE0uZVf/ArjrIZNJYt37dtjtuv/OZSy+5dL+dx+Wr3lzruk5omhYTikEDLtdY3dBQV1tbe/KHP3RCNpV5rVgp9f2r1+vs6Ni5bdv2jVOmTZ4XQ4mFlAXLSSdDPpurufjCS//zoIULfjzzgJljdU1PB5wj8HxoGpPPOJU5HIbSBmIZFlasWvbo187+2n9s37n9XX7tjp271hWKw+VcNp8mRDb9bdvG26vXiJkHzCLHHHt001VXX3vOuHET1+3evb3jvR6bJ5965vkHH3rwkdM+ftqn5EAltpHEbBw5rVDS3wjXpaIZI86OrkugbP/QwMBdd9/78n333H/5888+9cb7OV+/++3v7501e8aBn/r4p74lQjDTMhFyCU0MAyFS2SSZd9BcvVSp2l/5+lf/evtfb/9fr8dKsSSi6bim65g4cTTsnCglqbQzcRGIt958a0Mum90vUqW3Vrw1DGD437E+lYrlKoQoAcgGyrrKOYftVGFqllRdAdjduXPV3p5dy0b/rkZA4HsehrwBMKYhkUwgCAJ4rquASJA5Ur6PQqEgZXhOFblMDoamww89DA0OobG+flzbuHHTytUStu3cIhqax5BSqYRsIon28eORyWUACFQrRWzdvBVDAyUcd8I8JHNJ7Ni8Db4XdN59z/1rIcSAZuqyox9If2WlXIbruvA9H4ZlyAgbLsFF5WJRkqR1E57vxv5WOYUjEEROVSIKsgyWJiNxLipXlRAWy2MjLbhQ1amQ+3Nw8U/araNyn7jqgkrUiYRYRfJkEetZ5KY1DAL1QJMe4zCKOBJiZAOlpsqESD+xUFCrSrUqwTVqGs2U1NgwDYScw7GrsWfWdh1k0llAE2q6lEDgywK4Uq5IeBNkHldtXT65cOGiOStXrsCDj9wr5s5bQFxf4OCFCzB18gSE4Ag5ZJMAEt4iuJSZBH4Ywy269/bgkSceX7Fl89Z1GtNlZqyCRDm2DQ451bISCRBQuK4Nw7RACIOmMTiuDxYSaAaD4zjSz8dDuRlmmoRVMQrX9eC6DigYOGTGp850+EEAy0zANA14nh/DrqBR2OWKioBiYIYJzZf+1DCQIK2Qc5imIUFTviRY19VJf7KvunmmYcBxPaSSKSnH1g04ti3lsYTJnF0uO05yAurDdmwEo0iu/rAL00ppoR/oIaDV19eZAE2l0+lc4Ac1pqnXT5s5raG+tqFBcJotVYqZgw6cN6Z1/LjJudraMTSkVm9PF6GEkGwmTxzP797b133e2rffudu2PZSrFSQsHblsTkamEOkBjoBYXARwqg7cwAEIsKeru1oqV5DLpRByX+Wn0lH2FuVtIgQ6lfRiQgkGBgbg+z4s08JBCw4e1zJ2bMPQ4FCpsaFRMQE85UHVYRgGuBDwPQeB60vYnCCgTI87dBAibkAwTQPRCKDiX0AEdE2D5wfggQ/KNJgJCV7yHA/z5h901Le+/p0zzjnzHOOTn/lMQAjRwkD5dQnFKG6I6hJHCpBRtzQE8nU1qC83YLAwjPqaGlT9KgCCTDoNLqQsbLg0jMaGRmTzuUwimTTS2TR6u3vBCJPUYwW14AGX0nwikEik4Loe/EBSBaWvPJCNmECC4wglqFarCIMAhmkAhCJpWSBUoFypyMaY74ElLIQBRyJhIG1mYDANxWoBlpWE5/vQmI4d23fQT3/2U0d+5YwvH9CxswPtE8chmU1j27YOpJMpNDU0wHOlT9owNFhpA6Yw8NyLz8LhVRx3/FHo7u4mL774j5c7du1+LZ/LoWo7AFdQtZAhDELouprYByrWTmMIBAdHCMKUfYTLxqKggGUkJCsi5DCNhIqX8sGU/JRz6R8eGhxQlgSgVLKh6xqcqg3LtLCro+PNjdu2PHDSyR/+XsA58YXA2OYW1KvoUKguPVW2i7Vr38HCRYdiyuRJ+OmFF+Kl51/AhRddjLbxbZg5eyaYZuCXl/3iC6+99o/nN23Y9FhDUxNMy5KKJyYzt4UAAs6lL1mpaKQSiv1bPLzxlHewv+fEk096ZOmhS49vamrO+r4PEGlzICJEJpvB4MAgtm/bjukzpuO4Y4+ef+SRh990zbXXHjlnzuxbd+7atapYKAb7+3MZlkUt05pwyOLFS6+//vpjioXhWS0tTU3DQ4ONra2t+tbtuzC2pR2HLlrCbM/G8FAfCNWQTCbBBeD5vvSOK6WD78oG2Z13/h2Dff17H3jwoV8uX7XiT4XhwX0+uA/de9/rq7/xrbXz5s07QELgBMQoGikhBB/98MfpYLEoUklr3MwDZnx2zgGzwieffJJoLMHGjG2D7/k46JCFI5slTUPoBSo6Taq9Vi5fvfKSn1960bK3XvtApGRDM+oMw2yLpkmaRtTmWq4fkQUHAIqlYu81v/nN7Xa5XP13XG/9/f2Jzl07tTkzp8X3ERnlNXV8F4899nB5145t+wVNftUVl79w2OLFX0gkEplRC7GU/IBgXNu42muv/c2vn3z6qa9PGj8B6zesrXn++Rdrbr75L4njjzsW9YYpc8sFl43xRAKdu/f0XXTRJRfdeNMf/3Dhf/7nv5Dqbux69tnntwKYFvFScpkshCBwqjbmHzS/8YIf//jkurrG5wcGev+lXL0mW9uUTqVS0XAj8onKYnrkOFJKkclIFsQ9d939wvbt29btz/O4evU7ywYHh1a2tLQcHIShjKFh0k/seT6mTJ+Mn134sy8YKTNcuOTgWw1q7hzo63c2bNz4T6FZa95Z3X35r6948wc/vGCeGB25GXl6BUd7+0TzK2dNnDzS0JA2JF3XYkm+kPMlWJaFYqnSf81vrvjd1Vdf8+e+nj3/LVT36aefXbFz1841c2fPW0IZQ19/N9KpDNrHTyC+F6Czcw8++alTP/La66+sI4T8TAjxnta5IAiGli49/IZjjjlmUT6XH++6DkzTUhwY2VySgkGu8nRls5yrxJMohsnxguIrr7606ta/3L5s8qSJ/+jZs+d9S4IHBnorRx171K+6u/aI73z7e+cAsEQo64lEUiOSIQF0du55uFR0/uVEe9asGTowOj5KpsrEkFWuBiKUYNeO7rXZmtp3WtvGefg//KdUKOzd07n7ncmTpixhVE7aAcA0zNheCsB7863XnykOl951v2p+4COEpBZDRdgIQRCGHgzLgghChH4AQgg8zwMXEuTj+jZsu4qElQDAsWjRojnHHn/s+GeefhblcomI3r147fXl+NqXv4w3ly1DfWMTwiBAV+de6IaJxsZGPPzAg5g+czpWLV/lW2lj84RJ7TvWrHobY8Y2w3U8+I6HZCqBUqmEIPAl6IjKjK4oHxgKaMQog3BVaHk0SeUCIQ9gmJaaPMjpElWmFEpJbJpnlMkpcdSNEyIe+Y+AqkYye0UYrcuyvJVp4uEoP4Dy3yIc9c+RT0VK+oiacnFFjyaMSgAwIUAoVFSKMmQrb5k8TdI7GSrpq6Yx8FDGmmiaBl3X49wyzjkc14ZpGPITEMDzXCQsE77vIZ3KwnNcDA4NoH3S+LYPn/LhKfc/cD9WrXobJ5x4CtonTkNjXa0Cco3c6HLWx5UXQ3oEdMOA7/nYuGl9ccumTZuGhwp9iZSpJs0EXugh5Fzi4FWkk+tJyE8YyIdVoCa1QRgAPqBRAzwIwHR5nKpeVZK51QIq/3sOpmvwXR8BCcF0CX5yHE/GtjB5LFzXA6UyY5oyDkdIAm4yl4PQBGwFlPL8CN4koOsGqtUqfM8Dh4BpWtANE1wAjmvLzQ/VIMRIcwWOB8etIpFIIPBd2H4IIcJ0a1tby0EHzR/TPzBU29c/kE2n0jUHzZ+f2rVjp+6HQe6II44YP6G9vWVwcCC/t3tPVtfMDCN6wkoawVCl4Lyx7C2tra87vXNbB+YfdBB2b+8AYwSBz+H4TtDd3av39Q9qhqEHmXQKpqEjYSVRLBXhug50ZsB3XQjC0TSmGXalgsDxsHdPL1pbxzF578j7QRCo/FESXzfxA0yFo0f+oJraOji2jXQm3ZTP5Gr2dnahv68/liaapgnP81CuuNANQ8mTuVxrAgmrABVgmtz46lQHKAUPAnAPSCXy0HUmC0H1noZuwnE8UDCIMESlWspffPGFXykUihNczw0WzJ+nAUAgfFBQAOqBq4p3RimgGhJU5WHL4ljANAzMnD5TRs5wWexE2ZdCyM1uNpOFgEBjc1NdfUNjwrZtgBDopg7P95QXlsL1HJi6CcopKnYZOjNgmIaU9GqGWlMDiMgzrSTOmiEni4wAti3l0XLyA0RYSUap/Hc8VJFlAgQc6XQaTtVGS2vT8V/72lc+AQDbduwURx5zFKEGg6np0vcrpCwMQh4HprrvG9duxIKFBwEAfnTBT17eum3bb3K53EA2l8HQ0DAIJSiVS+ChQCaTgV214foBOLiKFtLhBQEIJTJnWHEIKNMBweF7AQIumRGMSQ+8YeiSiB6EMC0DqUQaruuhWC4hn62RAD8AumGAEIGWtnH2b377u+uFj5nf/NY3TmCUIRDyfbo6ujB2fCuYxlC1XeRr8gh9jpdfeBFHH3csDI1h/kEHwQ9DTJgwHna5DEopmhsaG75yxte++cMfnL+mNFzotBImLGKNgAEhGQ2Cc/ihB6J82UxtJP+dP88+88xj9z5w91HfPOc7X9Y1XTZOfD+OiquprcHujp14/fU30DpuLCZOmJD9wfnnf3PRggVHvbHsraeOOfaYZ1avfnv5QH9f3/v9DOlMLrV40cJWn4ftbRPaZ/z5lj/Pzprp2blMforrevmqrqFUrKB/cAhDhSLKxQrschW7OwWaWhrkc1rTYBi6itST6QQhF3A9D7oqIg9dcsjwjb//45+ef/HZm4UQ76uTMDQ41PGTC39287x5866iGiE8VHNe1VDxvRA1tXnU1tWQEMBRRx+LynCRLTz4UDQ1tshIJB5Chx6DLiU8kcbGxRdeePHRr5/zzYs2blq34oOe31lzZ+Ubm5trpGRPA6GA60pYF1OASY3JycXNt9zywIoVy5//d11rM2fO4pMnTbVHe01lw1/+lekMazesF8Vyab80UV5+8aUXn3risRdO/fgnPsI5QcwXjQYEACZOnJiaOHHirMCXDcJjjz4OoRDI1eSAgMO1JcjNsCxwzgsXX3zRpbfc8pfrb7zpj+/pM/T07FkB4ENM1+B5HhKJFHRdR2dnF9auX4f58xecMK617W4A/1KqOnPGrGnZTD4fqdBG0Z3i9AYKgpCHKAwNQTd09PT2rNnf53HXjp27zj3vvDuvvuqqAxjVEtIHKyGahqlLdQ4j6asuv+Ksv95x++xnnnzyne9+6zv8P370H3t3du189M7b7vxv8Ug7d21/BsDZsc2Jjlj0IvGfGKl24/uGKh89DxUk0tAxXCjuOPfc8y+++aY/3/rjH17wz4vAwaGBn13406fnzp63xHFc5HJ56LqG1vFj4XkBHLsC3/fw+c9//iwzadVf/8c/PL9m5dsv//HPf9zzLz3J69Y/f/WVV/75kkt//lPTTFhcxAg6UBoltsi9o+PKYZpMVaAYLhXLf/vbXcsLheHVw4XBjkULF3ZtWLd+1br173yggvGFZ1/otjTzsvraZvK5z3/mbN3QLN2Q6+Kbry0rPvPss08sW7Hs2oceuv9fSo+DINwb7dFksSvbV1yxRnSmA5Tg4YceX/bQw4/cvWPHtrf27unc+396wbtt27bS18762vU3/vnGuYSQtBDSKktAFGiT4Pbb77j3gQcfeuT6P/zpXb+raRqDQQ24rqtsGrL9YlkJ6TEIORJJC45jwzRltijxOUQIOK4Xta9wwJx5s5LpJN3V1YkZ02diwcL5OOqIo5HL5NDVtQcQBK5bRX19HSA0gIZ4/Y3X0DJmLNomthduuunmdYXBSl9TfQMCz0epXFTFtPQIaqaBUPgoF8rQNB2MEmhMByiD5znS/6czCEHA+UjhKqduiIOPmZK9xhe3AIQIwUO8S9ceTYEEwYjBW9GdR8hukQRa0l2hMnnV/BM8lMWuxjTpC+HKFyJkNieo1J7zUBXhYYhQdQRlcU1i2TIh0hcKLnHwHAKmZoCSAEEos3F5KKcOpmnG2cJMbdYpZSBCyp+TKQumbiBlpNHc2IydO3aC6RQ12fzE+tr6MdOmT8X8g+eTeQcdhGQiIdfsSMKi/Lsyk5XGXlVCpbxjzeo1WLF8ld3Q0DgEAAkrDT/04FZtEApV7AKVahWGaUA3dZiGiVKpBCG4yhTWUSq6gCAwdB0UGsAIeODHCw4IpPdWFWGBAqxByGaBHVRBmfQVuq4DSjlEqKjdmqZuDhN+aKNcKkMzNWg6kzcOAZiuxZmpvu8jk81IsnIQKHqwgGs7I3m1jMHzXOTzNbnmhqYxjY2N9YKSZLlUyR12xNKJTY2Nsxhl49rGjavZsnVbrev62edefA6mbrFDFy8RmzZvDLkXauvefoccuOBA69lnnqPbt27H7DkHiI998uPaKTNnWY8/9jgECKa2T8PwwDDaxrRhw8Z1KBSHQAgbTqcyQTKdYExjgaHJpkdPfy+okssbmoa6hjpwIaf75UIRg94Qxo0bi7bxbWEQhKGsBSPquIiBL5GmlxKCatWG4ALJVBKZZA66wdDTvZcHvptMJWWX3jB0gFBUKiVomtw06lRDwjSh6zpsx5PXLVVdbypBWJxIaXfgeCBE/n8iFPB5AFO3YLsOUpkETN2UcnBCUCxXMWvW7FOLxdKR9yy7Fx/77Ce11knjEYDHhUjU3CJE3qfSVsDguT76BwZQW1erYmfkFN93fTlN5gFMQ657QRDKopAABpHdxMkTJjcFrmcNDQ0im8vCd2R2dDKZgEY0+L4HgMAwNIhAQazCaCNJYZgGhJDEeR5I9YmZkBJ9CdTj6gEsJUiEKe9ToHgFugEQpgBgMrIonUjDLduTvnHmN85ecuiS9t//4fe45ZZbyWW/+oXcKILLbOVQTlL9gCIUBG+99jqqJQdfP+ccNDTV4aUXXt367HNPX9a1t/O5sa2tGBouwOcC4DIWSz4jpMXDtAyVfywQBkLRp6X9hAqmpNYUBBqkZQKxV04WlFJeRSlF4IfwdanKMAwTYBwG1VGpVlEIfKSTSWStHLZu3bLlqquuuuawwxdPnzZp2nhKDaRzKXg8wM4duzB9xlS4cMFDjgkTp+Dt1avkhDiZQF1dDU466QSsWr0GTzz6GJYcsQT5/CH4wQXnHbdz19ZvXP/7P15qJRO2blKZDGBo4ODwXQeUMWhUQzKVhBACju0ooMq/7yfwg4FEMnFFWstM/NLXzjjcNAxVfMnrwnE95OvrMLxrF5587HEcffRRYvr0mWTK1Gkza+rqZp72sdNO797bve3ee+7ZtGnT5vVr1q7bPdDbN1guFUulcrE8PDxUpYx5rusJwzRY4AdaTU1NwjDM/PTpM9rmz5s/5+EHHjigvql+/PDA0Ni6hpZ830AvVq9azrOpQXLggoMwY9YM1OZqkavJYKhYQn1tCFPTUCgVwYVAJiulpzzg0HQNnhcg8OS+I5lIwA8CvPHWm6uffe6ZP994y81/F0J8oAnmNVf85oZZM2dM/dynP3sOqGQtUBr5g0VsUfC8AJZuEKQzmDtvTrzYMWgjCi4F7iOSwLr3nvvv/uMfrv/dDbu2794vG8SK7VkJQ5frklp7mcbAlFyPqI+xu3N34ZqrrrlHBKH777rWNm/d1v/www9vPPfc78yJ1x2V0sDDEDW5evzuut/N/vpZ3xwDYOsHfT/bcfoPW7L4xlM/ftoiSkmTiAoppf8VChZJGEN3T7dIJpOora2VYxzbA2UEuq6Dahr6hwZ2XnDeBb965NFHbw5C/z3LMx9/4olnDl646JNTp0yZ4VMqwZe6hnxNHuPa2jB1ypRJX/ry5z/6XgreebNnzbQShhn7YAiJZfVkRBCIocFBVCsVeL6zY+uWLWv+Hefymquvvql1zJgJ55533rcDDkIFBdGoArky5LIZ2NWqcfpnPnfEFz9/+hEA8MlPfwoAjjzs8MM//crLLxdGv96df7vr+S9+6csPHbJo0UeFmu4SpcqKcsGl3J/HkFhBZCM79ORQBJQEz73w4pO/u+53Vy9b9taL/+o73HLrbfd+93vf/URdTf3sIAzguT546AEUCPwQnR17xbSp0+p+9YtfnAngzBv+eMNZAG74l0qGoX5uJRO/9Th3L/j++d+rq69ttW0HpXIZdbUyySZUPB9LMRoCHvhPP/30K8+++OIDb69+Z/WYpuZyz97eyu663f133HH70P44Z07g9s6aOfPnby1/46V8rnbRwQcfNLO1rbVt87ZN61Yuf/O6rVu2vPVeXueO2/5233/+7MeHVyrVWtMwVWyo3G9puuSgXHHFtY888MCDf54zY+aaDRve2bt3794A/xf83HTDTXcbujZ80Oz5Xzntk589Jl+XyY2oAp5+8Iwvn3GRH3gD//X3ND8IoDO5YeeCww/kRi/wA4TK/kMElVmhoUAQyE4HFxzJZBK27QIAyeXqmssVG9NmTBZLDl1IkqmknBZs3Ix5B85FMmViuBDCrlbx7LPPgYcC3/j6N9HS3Iw3X18+7FadDbZfKdU21qJUKCKbyYJzgcGhAblKcA7PCVXmLgMFVVEugdpAhTLuR0gQkSBcTVJlYU5BYrkcEaPUyEJOTkAJCCdx1AeBpC2HIlASBtldlXmkso3F4wgFjJoGj3S4oixHIeSNEyqIESERSpurTreKR2EjEACuXogxOrJRVzExMjN5JLObECI3lup1fM+LN9SUURAhIEKOTDYDSgDTspBJpVEoFbFx80a0No+B6zk4/Mil85mhJ59/5gVv2oxpxoxps5BuGws/COREnEk/aEx/5spDq+lxUZRMJnH0UUeK3/zud3s45EQ9DEcKhTCUbeJ8TR6O44D7IQL4anqiNnAhh65piqAHhOBgQgMVkuJKQOINv2Va0lermTK6wtDhOi6CELAsU3a1KIVGNVimKaeEoQ+mGSoOyZfwI6ojn8uir78PNfk6DA8NI5PKwHN9VKpFlEpVOaX2PLgylhqZTCZXW9/YPmP69NnTpk2ZObZ1TNPObbvSRIhExa4a/f2D6W9+/esNVbc6hvs8vXrVatHb1x9SjZFDDj6EPf7ow7jjtlvx81/9HGNajsCqZavw4KMPYvLUKVi0cBEOP+IITJ0yhXR2duKtwlvo7+tDT183KCF47tmn0D9URn1tAyyLoTRcpqZlmTqjyYH+PmKaiSCdzYX19fUi9D2MaR6L3V2dCLlAwjTR1bEbmqEjnZQ++9def2vnxs0b31566CEHShmSvHcE5SrjWMS2gFKpDCthKXUFUZ0zRizLxITJE1Jbtso9ENXUrkWdC93Q4bk+qratKOhCTjK5nPpRTeacahpAdQoCCkaAkAfwfR+maajpEBAggO+5KFWKmL9w4ZJvnP2Ns2679a6m0z79UXzp9C/ANHQlnVI5ryGXvuPIc66MVJ17usRby5aLk088kWazabhulC3IYfsOwAGNmRBEUSKFJOVGLXvfC/PpTMYqlosI/RCO68E0LXAly9ZUUW2YJlKGhmKhJGOFOIfruWqaQRXhXYt96FGclmVZ8D1fFrpEZjNHBXwykZb3vs4UqI0jYSbQ1bUHHz715I+dd8G5J+zcuQOrVy7HBed+H8WBYazfuBYzpx8AP/RjmbeuMQyVi7jsil9jbHMrQHWk0pZ/4cU/u2lweOjpmnwtPMeB63jQNQ1hIOEyBBps25HnigF+6AEwZC43JeAikA08IfNUPV+yExKJBAwmvZuu64HzAOPHt6GluQVvv7MWINILDQGkUmm4ng2hBbASJjzXh2cH6Kn0YEzTGKQTmRd+9Ysrb7/plht+ks2l4HsBpk2fip7uHlSrVSRSCXi+h9a2McjX5vD08y9gzuzZaB8/Dl4QYHzrOBx2xJFgBsX2rTtQ31CnXX31tV97863l61YuW3FHLl8Dp2ojkUwAgoNQBh6oZonnqfMh5P3wb/6xq/b6pYcs+u3HP/3xaZlMrgmCSGuAqcMwGca1tqKleQza28bhlVdeID29fVh06KF4+eVXgkwmXZ/L1jS0t008JG2m+OJDDh0ihPh19bUAJ9zjvm8kE2G17Ih0OkEAYhimaaQSSYMRmureu1cvFIdw79/v8saMaRMz52h844b19KMfP422No+DRoHh0jB27tqJSdoEVEsVZDIZpFJJWEkTTEUE8kD6uJ2qGzduUqkktm/dsfua6357633333djz949u/7zx//5gY9XtVoo19Y3XlFf3zTm+GOO/oggFK7nyueLAgTSONYiRDqTQBjKphNjDL7rA5oGShH76zs6Ol/79Kc/+aNly5e/8sMLfrj/zm25PADABpDwA8kBMQxTQr2YDsE4/CDAjl07V5WKhbf+nddZT3dn4bSPf+oVcu53PxXtY6Di2zw3gKYDfZ29c5e9uey4/VHwAsArr772yHnnnfe7q6666qeEEoOLaLpGZV66Gg60tLQQAcD3Jb9B0zX5nAHw+BOPv3TJzy+96I1XX39xX9//jtvv+MfZ55x1zW9/d91lpmbWcQB+GCCRSmLW9OkAgCOPOPKTY5pbX6utr3lg7dp3/scOV9UuxlE/lIxY2WSig5x4er4HM5FAfX0D/nT9H9569rnn/y0FrxCiRAi9uKWlNfPZz336DICBQzXrIdWQrgKgen4A23Ywdmwznn78yZlbN21pAPCugnd4aHBofHvbBb/61eXDn/nMZ06jFGkgii+kSkFJ4v1wpLYEZaAWQ7Vc2fWrKy6/7uprfnNDuThcfC/foWPnzvVf+PIXr7jtlr9eoTGtiVoKYCo4GE0imU4R0zLVcCLY89Bjj+4485wz31txWbXLAK46eNHCN35z1TVfKg6XZlaqduPJp5w8LpE0Labu+57+/v7X3nj9tfvuv/fuZx9/+tmDFizoffrxx8S/6x5ct359P4AHADwwZ868zJKlSw90Ha90/8MPrnqvr/HzSy/6ezqdzB144MHnTpsxeWJzcyM6d+9BLp9BJpPh99zz9/uvvubqi7v3dK0FgD/hT/i/5Ucpfx5jlD79yiuvLTnxIx86tbGlZc6qZStfvvraq2/yA2/3P/s9jVKmIkJ4TMINuZzg6oacTBIKpDNZUEpRLhSQyqTheA40qqNcrAKA3tTSUOs4FQz1D6k4E1nshkKgsb4OruejpbkJL7/8ItavewdnnHEmGhqbsG3LRiRTeoEj3AUIDBcKKBWLIAoeoGs6wjCE7wdIJBMQXGZTBop4K4SUIHIup42chzANE4JIbzKUZJExgiAQEJyDMgZGiCKvyaiQKLqHaQpzrbJ55e8ycGXwJrEMWowoVQiJzez/7IfzkbWRKjlUqDIo5bRSFnkjNTOJ31/mdUbFrYgnuSOvIRfTkHMl0ZQTF53pMHRDRtsIAdf3oPkyBkjYDqpVB7l8Fr4CCxGK9OIliw/u7e/F2g3r6PTZ01HfUDfyJdSmgEUxPZSACoBQBkBuxF3bw/TpM1BfW8eGBge2AJCxK9IzASuZhOvaEKFUEPCQwwt8VG0Hus5AGYPjOnKqzKgCPMgC2TA1eAoKRoTM1RVEZlImEwlQSuF6PqpVW0ppGYXtOEglU0jo0stLGAPTKXQzJWU1OkMqbWFwcAiVShnVahkiDNA/0CcLu6IPw9BSjc0tNe3jx+fr62vNwaEhUa26NbV1NRPa29pmzJw564CJkyZNT6WStV27u8PGRU2kprY23dvXS3t7+8SsmQeQdevXoqG1EYxqRHCidfd1o7NzL2bOnIU58+agffw4BG6I0798OmbMnoFyuYq3316DxuZG/OPll/HiSy+gWq3AMA24jhPnMhuaAadaQhDoMAxzUrVSPcUwrdYzTv+aoDrVVq9d09mzt3dTLlfbU99Y65RKBaejs8eZMHG8U19XH1ZdG7ZdRiqVxsYN6ztuvuHGN5YeesiBlCrvtK5DEyzOf4SQEvuGhlrZ8Vdwh5Bz1NbXk9a2cRBAvlAYRr6mBnbVRjKZAAGB4zpwy56arjDopoFyuQTueTKGikr7gRCARnUQTU7ThSAwTA2ERNIoAc+xIQw9ctkbxx9z4hfXr1s3t7WliX3uU5+DaegIfKGgW3KzGnlyuPLJU04ACn7DjTduGR4ask/72Mdmc4Dpmo5CoQDbqaJSrWBc67h4TWBMNVwUxAUAautqEplcJuns9NDSVA/TcOC6LgqFYRBCkM6koOscjmPL6B8mC1QeUgS+CyrkBIdpuoxZc10pqlJxSdVqFZRSJM0kKpUKqM6QMBOwq1UYlsx9rlQq8FwJAaqUK6hUi7M/+clPfx6Aedutf8XYMeNw3LHHYtXKtdjT0YMpU6Yj5IDDPRjckF51N8AVV16J1cvXQCMUO3duf2PTpo1/J6Bc1wwEfgDfD1RUkiGVEAxImhZsx0WpWoZhGmBERnH5vg+dmTExnjKZ9e17niz01TQ9ksoP9A+gUqlIErymwa9WASFQrRLZkGQSgsaohOd5ro8wCJFIpLxNm7fesXrNuhOOWLp0QbFURk1dHoEfYsumLZh74Fy4/x97/x0gV3Vme8Nr731i5c5ROWcQCCEQOWPAgA3OAbDxjMc5e64Ttsf22OOccM4mY3LOICEJ5RxbLbVanSvXyXvv9499qiTfe+d7vxvG13Pffuw2Mi21qqtOnd7P86z1WxKIpEQqlYQf+sgXC5g+bQqEUL7ohQvno1KtwjYSKFVKAMm0ffhDH3/fu97xtnWMsEOWZSOKOHSdgugUgYzinEQFcjN0JU3/W9RrW7Y/+vGPfmLJj3/8k09rhm5xol4Xpqlc+GI5j6nTpsHeksNPb/8Z5syZi+vf8EatUCxg04bXxGCxLAVCkRKpzN59B8i5F5yjHenrh2Vb6OjqhBAEvT1dONo/gIefeAIzZ81EtVoTURTw5lyOLlq8xDj33AuhmQyZdAomNXBk4Ah6ujtx+HA/pvT0wLRNtNsqgo4CoFTRrgM/AmMMXEQYGhnGjBnTAEb4K6+8+uynPv3p723c/NrTPAz/t24Y8uOjfa1tnV+896677fMvPPcS2zQRBGFd8geqUQWB5BxBnIddj57STUX39t0A/UeO7Lrn3vv+cvvtP/ndsWNHD/7vfl337dx9eO3atY+dddZZb2CaYqZEYajOFgyoVBz4oY+nnnj2lXw+X/mPvs4mxifWFcvFQ0253KzYtKWsFroCbE6bMdP82r985aNvfcubcy+99Mr9xwaP7ftf/Tv/8Ic/fa+9pTn1sU984iO6YZqcSyUJJidlsBIAUhH3T67D/X1PfupTn/7nnTt2/E97KDds2HDHd7/z7Y5/+ocPfjKdSWe4lIiCCNAZGAhOXX5q75q1L/9w7fr1r3/DG27YNWfOTK2jq6vYd/DQPT/84Q8bwDISS1DRMPGSE489HpTWqg5KpTLSyRReWfvqBill+T+uORB5O2F/lurw3nTDm95JQZKabsTyZq7SWKRaJXi+B9f1cOqKFdXLrrzyvy+V7j96wE4l33/7j37yxFe+9OV/PPfi81eTODS2vhj662tpLCyXyvteemXNMz/7xc/vWvvKK+u+fNtt/0Pfw1133P2n8dGx2jf/9Vv/0NvTfZau68lUOg1dvUUxOjwUDY4MbX/mhRdu37Bl44v/w/fV9RvWdLS1r+/tmdqWzTVNX7N+7eLu7p5pxULBmjV3RvGuu+/ZuH3LtlePDx4r/a2bu+3bt1YA/A/nM3uhHwH48S3vvfXoG6+9/h2rzjz7nEQilXMc/+hfHnzggY9+6CM/n8hPHMJ/4uJChABeAPBCMp3RnGqFSyn/3UGERqmK9eBcQGMEpmEiiCKYtgnTNODU1I2WmRpSyRRCwVGpVmFZFqIgRCJhQTNkx6w5s6Ye2rcfuYyJcimPRx9fh+7ubqw6cxUcT20yCNVx+PBRMM1AS0uzmuxPn45Nm7fsONzXd6SntweO4wCSwPVUbIxumOBSQkYR/MCDrhtK+hj7/gghMbWUxlIKFYdBKFGEZUpBpEAY1sm+sd8AEqK+6q1DrOKNIiFq+ypJPQb6BJ2YSOVdUNEpdbkkA5UUEid+VhMQ9fWBE94GSeJJ5V+lsaGeySJjqg6pk2TjXMJ6gw0CWLqJiEYKssQj5RTWaSMHUovvADzi4Lpo5IVpjMHzfOSampDLZjA8Oqqo12GEA30H0NScXbR44cJT/NDBP3/uM9r0aTPVaxzLOCWAIOTQTNaAedV9nJ7vKzk4VZl9Va/qV2qVwwCFoesIggBWIqGGFvHXLBYKceOjQQNrbM4NU4cfBCCSgEOASAnDMhR5OYpUM2/q0Kitmo94AFFzajE1T2/k8UIE8DwPlmVBgENIDjthw/NVHE6xUIIaFEkASLQ0tXTPnb9wSmdXZ1d3V1dTJpXpsFJmr5Ww20ymJ8vlUpCfyLvtnZ25dC7T09Xe2ZLN5rLFiRI70ncU+/YfQkdXK6oVH3PnzkJ3Vwd58KGHoZkUju/Ai1Qzs33nNhw8dAhz58zDTTffgr79B1FzS9i8ZQtaW9vx4EMP4rkXnsf7/uEWrFq9CqevOgNJ08bunbvQ1t6K5mwOYRhi8dIlGB0dQSqXw+KFi5P/8N5br+vumfK6a669VhwbGRDXXH9NsW9/385X16/ZVpgo9C8//XTxzluWHv/Zj3/xgsaIQwF4IVfPkWmhWq1sU6qKIg4c3I/ZM2eirbXtJFPOietdXdexTYBSuJ4nHadGNKrNBhTFVnoBXM9DKpFELteEiYlxFb1DFeQLBEglU7F8jCEIg9hWoPy74BLM1Bs+YAGuVCUVB2HE4Xo1nL36vLdP6eq+4pe/+rn1yU99kqRSlsos1lT+MmFAKFS2IiBAJQWhBEEY4Ve/+PVrP/z+D75+ytJlqWKp8LO21tYklxKu54ALgSAIG1YIEsPlENsj6kM9Uzc0nbHOhJ0AKOB5PgzDQDqdVlFfMYmZUqr85HFmnyIwU+j1IUYkwEHirGu11YZQ0pGIRyiXy4p8TBTUyrZsiEjA4z6iSCCZslQcUc1r+f4Pf/DJ6699/Snf+86/YSI/IW++6SayY9c2nHPRudCZAccPlEeJcwgqUCkWoekJCE7Q33dQdja3unf8+c/3FQvF/ta2NriOgyjOQCSEIGknUXOqiMIQtZqvAGMxAVvlKQKRF8b3XwYQIIz5AnWioiSiIX8DoQhDDs8v1VO2FXDOV89TBA7uqXt50k7GHjQDoQixd/9eNDU37/nBt7/7W69cmbNwyZKslbAwZWoPJiZGsWf3bsxfuFDFslGGN153Hfbu24ctW7ZgwcKFSCVTyiMZChyfOI6ZM2bi6OAA3vn2N5+zccP6j/zyV7/67LSp06qjoyOIRAjPcSG4RDaTgRBAsVyEbdlI2vrf5Ae877sepewni5Yu7P3whz56i26bCqQkJIhO0N7eCs4lrrr6alx0/vlqUBF56Ghrge+5dKxQwJlnrmCtLW3INbdiau80ZDNNMHQNnu/Btm0ILtHV3YXLL79UBmFE2lpbqa4bIELCSiaQSiXxl788hEq5jJmzamjvaodtmZg3bw5EpCSAmqapNAQCjOcncHRgQM6ZO59kUmmYmo4ZM6Zh1849e370k5/+4a677v5zfmL4yH/UczY+Nrx16dLFH3//P37g/ddc8/o3dvd0tQJ1IrxEFHIQCBj6CTBUo5E6fGTXD3/0o9//7je/v28iP3Loc5/7zH9Mg5kfdxYtXvjNH//gp7nzLzzvIsM04bmeisYCkE6noHn64eGh44/+La6ztevWbvv+d797/5duu+2TNPb2R5wDVCKMIqRyabzj5pvmvP2d7/paEHoffPjR+7539eve8M3/lb9zdHS42tbS+q81L6x88P0f+EBbZ2tn45P/jke+Ui4Pf/s73/7DY489/rOdO3b8Lx3et2zeWu3o6Pz2xFihdNttt/1zIpHoZIYOLiQCxeHAjJkzOltb2t9+wxuuV/YsYPjLX/naywAaDW8YRMPxpkPZ4Op3NSkbUT4AYFoaAHhHB4+99jdQh4wwXf/sn++8e+0nPv6xm85csfIcyzT/6qaVAtDSnMXBQ0eHHnnkwV/u2LF94N9XJNQcAHf2dnVveefN7750+pTpK2fMnLng1NOW9CbshDU4OFTt6+/vK1Wq639++89eXPfKmnVVpzr2rne983/q8Qe+JwDcv3DRgpd7OrrPPOuscy688urXzd64YaNjmNrBRx99eNNDjz22ToTR8U9++GP/c8qGsdEIwFD88erJn7vpne/+T9sU/uoXP3/YspLPXHTxRYt6p/Q2r3t1/ZEDB/YecGo1gf+Lqlb5fwczalEYgVICy7LgBz54oCBIEBKe48HQdAgi4dZcBF4AIoAoCBBpDMygcCbK6G7rWJWixpyNmzdKUEla2o5ByAhDQ0M4fPgwfC9AS1sL9h/bj8eeeBztHR0YHB5FrVzFob4Dw3fdfc/ThJCa7/kI/EBR3TRdUSghYeo6okAdfhilkIw1DmCUqBzHMAxBqAI8IAYpUUZjurFAMpmEpmsoV8pqMypU1qeAUNvVWHrCeR0hL+P/yvjQq8BUkohG4ytlfBPjHDwGODUy1v5K3HwC+NCQtzQgQKLRINc/R+IuVzaAQSLeqAm4vgsphPKyMtbw1dSb5frWmGlK9k2IhNSU2d7xXFSqVXDO4Xs+IIFcNod82cP5F563or2rfer6desxb/Zi5HJNJ7bYFGCSwtKN+HuQDQRXGEXwAx8Jy1aSZwL0HT40unvXnnHTULAwGU9oKSFqm+yHCPxKTD1W3t8w4jB0HRozQMGVjJYoWRHnqinTiAYrkUAkOSKh5O2e58cRQQaiIFBwLqbBqVXjfLSk8ilWI+TH80hlklTTWFtzU/usJQs7Zy9euHjO6WetmJvNZDrGhkZSvdN7Eps3bopGhodlqUa6jZTV7LuhX3JK1a6uDjF95kxrIl9MUU7Yzu27sH3bdixcMAubtm1DIp0FECJq8/HIYzthGyk4nouOjhYkE2ksWbQU+XwJSxcvhR/42LDhNdScGqBJzJk3H/axYYQBx4c+8kF84hMfw/SZ07Fgwdw4n7Qu+Ubjeg0jgXKlAsM0kU7Z+N0ffqNFgmjHh4dwSs8pYETLPPvs8+2DI0Opo33H8qaVqNSqZY1p1KtbFjRdQxCp53NkZKxvdGhcJHMp2ju1F1YiGdtNlY9Kiw8+igLMFPgpvo5TtkVGR8dx/vnnnfH4o48ki/lCjVINhFH4YYBUJg3LsuA6roqQYOpzEhJB4EPXDOXviUEXEVeTZ0NXECgeCeSac7BtCzzkKE/kyaw5C1//5hvf/MGJyviUd930buzfux933nU33vymG08QmSHBYs4AjbfEruOikM8X77rnrh9kctkHR8dH5+7bty9oa21NOp6LVDIDO2khkbAb3t8GrjqW9tWlWtnWHM5YeUbb5i3bYPsBPN9FwENlO5AAJEUUN86WZYJCUwAMgwGCw6k5cZ6yhCQxAAlo3IMIJWBEh5UwG/cKLc4Oj6IIhmGgp7cbgMTIyBAuu+zit37oAx94S36iiL17D+EDH/xHMnvWPNx3/z1Y7gaglg4eCFhJA8xUWeXj4xMw9BryxQmsPHsVcaveK3v37XtEYxogBFzXAxcKmqMxNVAKo1B5WXUTPAwQcQ4qAc4jaIYex2ERFXMFQBIKQhk0SsEJRxRHlOlMgxf4MdhMZZCapqmy1UkIDmVBMTU14BKCI4zCGKyohrTFfB5PPPH4A6eedso551564ZucWgDP8dDc2opHH3kUHZ0daG5uQRAJGBoBozp27t6DmdNnIJlIwLRMGIaFMMpDMmDK1KmoVn184XNffOfmHdvW7N65+04KIPACWJaJiAsEnCvvvk7hxnnWf6sSgo9aZuKLzc3t5jve/ra3U0NDJAVCP1TEfyFAqURzcwsK+TzKxSIgBObMnokNGzbhnmMD+MSnPoxND70G13dxtL8PoeehuaUdy5Yvh2UlQClBtVojvb3NOHZsAPmJAqZPnQ5KKQ6PjcHQDFxyycXo7u5s2Fkq5SIO9x/BihVnxLRuCkoZKk4F5WqZZNMpEAL+5FPPbL7r7rvue+KJxx44fmxw309/8oO/wZZk5w5CyId/8MPv/eFd77jp2jPPPPuS01acujCVShpgABBbloTE6OjYsUceeOTVxx5/7IlNW157qVwtHyrkC/I/+jHu2rl7Qzqdfu9nPvWZ9737He96e8/03h4AkBHcxx557KWf/PT2n7z62qvrf/nLn/+HP19B4IZtbc0/f/0brjnt1KWnXRjFqiJ1LxXK184YqEZgaomuhYuWnTFl+hQ20D/wv2RmH5sYLxBC/vX+u+59+TOf+8zbV5119uqknehoamlOCc51zdCDsdGxoz/+wU82Shlt2L1316sPP/zINi6497/j+x4ZGXYvOP+C2z/5iY/vO2PFqndecOFFF0+d1tPBTA2ABt8PYdoGKKFiz96DO19dt/bn3/n2d/Z/4fP/3Pgazz/z7JbaZ6tDyVSqSyn0aGPZKzlX3Bk/hG1Y2LRp4zO7d+7Y+jfZhoVhCcAfNV17/PVXX7NiyaKlp3R2dc3pndbb293ZlT186OjQyNjwa3/+859fXLfh1U1RGP6/+sSPDR3fB2AfgB9adiK1cNGC6c3ZXGrw2ND4/kMHjvAoDG+8/vr/bd/D7l17xgA83JRueuKXv/ylMTo+4oRRKN9763sxWf8/tr1ezQWw8f/rz4NW394puRhDJCIomlsIxjSYlq2gPwxozjXDqbrgkiuJbxBCS+jmJz/3qctkJLLTpk3B7AXz0dnVgRUrVmLz5m149PEnce0114BpFMdHhrBpw2YsXroIQeihvaMdr2167fD2XTvWd7S1olqtKWgMo0gYNsrlKqIogm3Z0HUDkiiao6jHDEHFepA4nV0dCGmcnxoTZRkB56oxI5RAIxo4eB0rpTakhCpUd9xgmoapNqTgjUOujA+6UipElSKlktjLFvt5SbydJSfy1ggIZNwXEElOkjb/9aZXURDrodYxTZbIhk+YsBiOJYTyKEM9Jk1TMCwab4aiKFIkRU3JgyljjYgi27RgmgZ4vKFQIAqBKIywYsUZSwr5Mjw3kLnmLOFcRYpQAQgO9ZxxCUPXTvgy4q4imUzUU5QAAMNDo/2e57q5plYwncCIoRNhGKBYLMI0rLi3j0CZqWTpuoLe6IYBTVMHZsFDcKEylhOmrfJ8fReB7yORSCjlQRxlojFdZfRKCUSRiltBiEgKmk6mm1vb26bMmDFt8bnnnH/6smWnrBgdGZ+9ZMlCmwHm88+9oA/2H8WUqb145NEno2PHBpz21lb0TpuTzGUydOj4MTufz9tgEhPlAnZs2wOdAqetWI7ead1obW3DRz/yEbS0dcLSdeSLeezYvRshlzjvvPPAXQ++62HmjFmYPk29fgISy5cvh+M4MK0zkMs2NwjY/3VRQsCFRLWqtti2bcH1XEhJ0NKSUwcUzjFl+jSYuoH582bj6MAwHnzwIZQrVevc88479/jM49X9ew4+e8cf7x5auHC+8Dwf27fvUHRUQ4PkHHv37D566PD+gSXLlk7TmYah0RG0t7Uhm0o1lA5KWnyCVFrPo7MTSbS3M9x44w2nPfCXv8xeu27Dtjr1nRKC4eERta03TRimqQYVsZHeMhPK/yPDWKGhItGoTlW+qGVg1uzpOHZsEK7jolKpYvbceVd87KMf/dTY8NgpIed4yy3vwMaN62AmTFSqNaRTSYDKBgRGCA4eARpjGBsfx0MPPvj0yMjIEzWniqlTpoQd7R1KH63roBZTQCemqUi0wINtJ2HqBriQSqYvgURCyfLHRse557lwXReZOAbKcWsAU5aEhG3HEDkCZmhgPEQY+tB1A7qmQQiVwZtMJOF5HsIwVN5+SsA0HTzg6r1MKCzbhFOtYcqUqajVyiiVyljSvRhBEKBQKK5457vffQsAbd+ePfKd7343aWrqxGh+AnPmzINX82EnEkilLOXLB2CaOrp7uvHC8y/KqTOmknze7fvExz/+g6GR4UOpZArlUhmMKf++8uMTVKo+GKXQTAO1agWIoXiUqQEbAW3I+BRZnkDGfIS6jxcAmKHAfRQEfuiD8xCCS7g1D5RRJO0EQh5AcAJN1yCFUDYWIhTHgVGY1AQhBK7vD95zz30/v+rqa05tbW6dW3WqmDNnNi67+FKMj4/BNEwYVgJRJDF3zkzs2LkD99//AK677hpYCROWxaDpRPEreISBwWNYMG9W5u1vefP7/vF979uSSWX3NeVy8DwfAmEcowWYlonAC1CpVP62BxjfGUznsh/ft3/30Gc+819uSSUSzY6QIIJD09UAEFLRWG3bAmUapk2fiU9+4hPwIw9tzW14x7vfCR4I9Pb0Igx8dPf0IJFMN2jYTS3NGB4axtDxETS3tyCdzYBRoCvViRnTp0FKCdcLYFsqpimdzuDUZadAYxqCMIyJmcDsGXMwe8ac2kMPP/jKPffee9dTzzz32Mjg4Mjf+rAjpQwArAWwtqmlpePCCy5atGDRouWdHa3dfQf6CqVK9djQ4ODA8ZHjR44c7u8vFPLh3/oxViqVwzpl/3zXnXc9/KGPfuyKilPj99x1xws7d2zbWC7/bS+ysbH8wfkL5t329NPP5Kb0TlleHwgAyu5Wpy9t27Hz+Q9+5IPf/V9tdk96nSIALyWTqVeack2ttm23tHd22jW3ara3twuNakPPPvX8oB/W/kNIcc+/8HwI4KnWlpbnli9fseLSyy6/5vyLzj0zdML27p4u2Xekb+9tt9324IZX1z/puM7oze/+663l0PDo7vvuu/exN1x7wy3JbBLDQ8PQDB2tLS1g8XsimbLxwrMvPfft7333m2Oj43/T1zUKowkAT8QfmDZ1upbOppOHD/ZVa26Nv/+f/uF/7p7kOlUAO/8W30OhUggB/M3fn5P1n7zh5ULlczU2g3G+n6Eb4GEIPwxAdQoZb0VdL4CZ0JFK2hg4OoDZi+Z2nXfxRWcc238Ujucjk00hYSVRq3qYPnM6BOGwEmpi39nRjtXnnIX58xaCEQ0jo8fR09vuLly8oDgxNgY/8JC0U3AcJ47r4DCoiroRQsXN1Am5MXFK+TVBGxApUu80pVQ9qVC+gigIEPjqoEbjwxIXceNKAAgaU5ZV7FE9kEXTGHjIY3mz2hLVm2nGqMrSFPUtraxDq2MZdIz0l/VoqPrONm53ZT23F3GTTOoTfPX1yIkIII0xSC5BNQamUURh1ABYSS5ULi9TFDZKKSRX8T6UUkRBAC2RQiqVhqYrnx9lGrK5DFzXRcRl6+IFS5Yd6z+GJx55Uvb29JBpM2dCCAHOVfavphEQncQZxYhdPQp4ky8UYJom8uN5lColbN60ReXJUYnAj2AaFhIpC6Ojo9CoDk1jYJTBNC2EEYeuGeCcwzQtaJqSrHMeQgoBU9ORSGdRqVTguA6EFNCYDgLAMEwwqiHwXBiWAY97KBXzSKcz9uw5M+addsbypXNnz1vW2ztlDhFyTmdPVy/TTO2nP7mdHTl8WD/9jBWYPnWKJCLir6x9mVyeeR09/5xzNcM0Ms1tLdi9cw+OHDmC9vYm2EkTPT3tIExDc64VQ4PHwXQTU6ZNw+IlyzB/wULU3BoMZqCzqweLTzkFXAqkLBs0phYyTQc5KdCQAMhlM//tD3wRDz+IIo5zrlQXBBRUV+HtKstSYmxiAqahg0Ni/br1WLLoFBzq68Pw8Aha29owbepUlMsFLFm4cJlGtB3pbDJDGZtZrVaOtDa38DDyUSjmYRgmHL86UKoW+izDnLZz1y6MToyh7Zxz/mo0Q0DgugE0RpBIWieFbQGFUgGe47Zms82Le3q7t42OjoJXfQgiFWyOqqzocrEC3dBVXA2X0OMBQBhEMAwdmsUUxRwSEeHwfR9H+g9DMxjKpSJWn7v6+s//l6983nWCU6qVMq6/4jpkm3O48nWXI/JDdX+o3waEWt4EQahgSzaDYRjlBx54+P7A8/MpO4lquRIVikWuGkADY2PjyGazGJsYR1/fIZxxxkpEkaI1gwDHh45DowzJRApRFOLY8SFkMjkkEmoLyaMITZkc3MBBKplW2dh+oJQVvh8D7ADKBbg8sQHwfK9BgtUNveHhJ5qC/RCq7h/NzU0olYqwLBPtHa04eOAgOJetN998y61XXXnlskcfeRJ3/+mP5O3veCeGzOPo6GrH6StWoFqtqm0yJTB0ta2YGC/i6JEBVMsVkrCS/InH/vi7/ft2PdqUa4aAAon5QXgiL1wI2EkLURjBd10ARNGKhYDre8q+IZRElDAGPc5eDhyvjiVAHQrEBUcQKglsGHu5Aa4k6ZLCMCyAGHAjX8GxoJQrmqapLXNMZhdRhEQygT27dz73Xz7z2d986pMf+/Ipy5frTGNo7+rAnXf9EYlUAje88S2AVAfOC88/H/v274EXOACaIQXDww8+hsoFVaxceQZMw0C5VsP7br31nD17dr/nB9/7/hdzLU1OFKnXTFlQJBgzYGsJhNHfPr6wUiyNEkK+OHB8cMdXvvSVz03tnTK3/jnH8QEiQDUGXbcghQJruX4RHR3tkJBoyTYjCjlaW1vBIwWGk5IjYSdUzJymoVKtYNkpy9Da0qxo/3HUHQHgBTzueSQ4Bywr2ZD6G7qOMAwR8qi4cf3G57/9ne/e/cIrzz9ZmigU/h4OPoWJiZFYhvrc39uhLFSQjjXxBz76oX/6P/ZY9u7Z99LCJYs+8G/f+s4/rFx+1pUt7elWSpXM+vixoSO3fem2Pz70yEO/Gxo+fuB/u0SxVhUARuOPv3mNT0xEUNLWV3t7pySigCe7e7vkyNhIaXDg2L/bbLU2t1W//pWvPZGwM5dcesXlU3/8k58fr7m1I+esXuUWisVo2syZtfxYYduH3v+Be4ZGBnb/n77ejhztj/Bfwakma7L+r2x4JRSIhlFFZVXocA11j73gAowyZLNZMEpAmGxQT5PpFHggOgv5YtdEYRy1qoODBw/h5aMvYur0GZg9dw6m9HQhlUxAcoL71zwAz3Pwtre9HdlsDtmmJO574AFnaGjID+PDkh/4MA0TQuhwfQ9BGEBjGkzThh964JHK1SSUKPIblFxWN3UILuMoDxUfxMBAoZo0StTvVfCZGBMfw7nqh5f6cUwI3pAz05Nkm/WtaqOhrUOiYtpdnfxaFzWTBpWPxjlkAlzyhnxZxrB6te08QbRTECwaf231QvBIxA19HI8kVNq3jLcrUsp4E0+haSbCOD9UCuXBdV0XhmGiXFYbJKYxEEj4oYfVq1ctnz1zzoKnnnoKgoFMlIpYYNuqqaXKgygBFUcUB1eT+DFDSgR+gOamJgyHw/BcLxoeGdqhaRoMTUehUoubcCAIAmTSWRiGrqStVAOjErrG4n0hhZGwwaMINb8SS9FTMEwTwcQ4bD2JTDqnuhgKlAol+J4LQoBKrWzNmT13yQ03vumSKy+/dHVTU3Z2wKNeIYi9efOG2ob1r8qO9q5EW1cHfW3jevHmN90ISST6jxwlGgW7+JJLMHfebKQzGQweH0ZhooRatYpFpyyAbSUwNHgcA0eOo62rHT09vVh1xko0NbWguS2nmjbDQkd3ZxwpgThG6qQUZ8kaWncRE495/PpHXEAKtX2sD00IVx5L1fwwSAHYSQXPUVJOiny+iIGBIXR1t6GlpQ3z58zHz39xO44PHwcEAzU0XHvtdWAEYei4+Xyx7EREMBlw88De/RgYHEQqnYKQgG0bKFeKztq169ZfeflVF0zpno6ElUBTJqdyr5migEsAhs5iGe6JxpwAGBsdQ6lU5slk6tRDB/rvSKdSwjQNVJ0aCCg0EAS+D8KAwHdhmjrCSCAIIpiWDV3TwQgFZQS+76ucUYMh8EJ0dXWhe0o32GLtdTff9J7PvfLymlNGxodxzjmrkE6msG/PLuSaMmjJNte9VbHvVr0ePFKhCYwBzzzz3EP79u1/wjQ0UEIRhlFVCDEYcdFWLVdRLJVAKIVtmZg1fSayMTFeSLWt7mrvgJASnEtUKhUkkslpNddBMqV86iASVbcGXdMwMjKKbC6HplwTBo4dgabr0JkOolPI+F5gmhY8t4aIi7jpU3FDYRQpaTdhsAwLgEBLSwsMw8Dh/iOwTBO5TBau42HOwrlXf/ozn7h+fGICv/ndb+RVV15Glp12Cu66927s39+Hf/3GV5HM2KhVa8ikMgj8AGNjE2CUoaW1GedfcB5+//s/rPnZ7T/+U1NTE6JI2QgoJSoCyjTguDUQqcBxnudDShXXIIXa3EKo7GHO1T2JUQbBZRzNFOcYx2RuIonyKcfTQEYZGNMU2ItSBTSrKXm0FW9RJThkxGFaKYRRoGT9QYhUOgnbNhG4Sbzy8st/fs8tN527bu36K8rlEq645mpcc831KJVLGJ8YQ1d7F6o1B9lMGmeuPBMPPvgQHn34q/jq17+Ky6+8DGteeQld3V2YNmUKKk4FlVqNfej9H3nHU48+9cqhwwcfbGpqRjKZQBiECIIAnuPG2dX/Z+xQUkoXwB/mL1hw8Ne//d0H5syYc1VbW1MmYZuo1GpAJEERqgxJXUMioWwmDBqE5MpnDQpCqbKb1N/TGkVCt3Ha8uWIOEcQ8bjZVT9PIsFhGMrWoDgPDJ7nwHVdNDe3YN++/Yd/dvsvHnzx5Rf+smvnzo2e5zqTx63/nLV7x65XCSWb5s9btOwDH/ynS6f2TFs4np84/MMf/vCJLVtee01K6f/f/hwcOzbgAPj/6xoWEDLb1LLV86Jf3vKe92UO7N+zbnR4ZO/PfvzToebOptLA4SMcAG54w+snL67Jmqy/acMrJcIoQCQVjEYCSj4sBMxUAlyoiBgzYSH0QugsBj5B+eymTumZIYMo6QUepk2fgaZsG2rZMjzfAaMSuXQGGlN+seODgxgeHsH+/XvQNa0bXtSG7Vt2HaqWan4yYSHiDvwwUmCmKAIjGihl8EMfduwfNA1LAWDCQDWRQiISERDFTaRUTSGNSapSijieBI1MUc4FhKxDWNBodBHHBaGRKUbiQ1oMf6I0zvBUOZNcqEl/3ddax+jXjbyEEAgeA67ilg4kDoKOZb51eTKAWDItG55B9eu6f5c3IlUirmTcTFPZoIRItQmK14dqUq+aLt8PkM5kYRimkgybGjLZNHTNhBd4GBkewbLFS89JJhOZeYvm4u3vehuhYArmwYXyYYE0YlbU80X/Kky9rbUVYRiio7UdpmaO9B/u32MnEiCEIJ3OoLenB3t27UBTUxNACHzPRyqTjv23BrgEHM9FJp2D51QAojaYnKttT8WpgOlKXhoKAR764GFkt3Z0Lbzp5ptXnX32Wadu27J1zjvf8bZ5mWxT+8aNm1CsVOXm7Vu4TnUhIpGcMXsOuts7cc111+O617+BmoaFRNLE1s1b8eLzL2HO9Klozibx2uatePa5F+E7ITItaZyTOwflagXNrU0447TTcOppy5GIEfj/7iE0HgmQk4Ty9KShSf06pESpA0isFiCQsc9HyZg1XdHBeSig6wwH+o+gs60D6ZSFUqkKwjQsW7oYjCr41CNPPA47kQlnTrFL6XSycvTY4PgvfvTzvVwGWwYHj21nOj3Sd6h/fHx0qAIQnsu0oFoqQ9MZkokkCmEJTzz+xMsf/McPfay3t9PQdV3FrhAGUr+mAZiGDtAYDtYgUBJEEce61zYYK04/87y77rx7FhfigK4ZSCcZglBllVLKQHV17QohEEkOwzZUXrLngkiKmuOAEtVMMZ3BMCwU80WMDI/P/fo3vnFTV0fPqU889AQCHmLV2atQKZXw6po16OrtxuuufB0YU7nYCogEVKsVMJ0haSXw5JPPrPvSF2/7ajKVKOoag4TAyPBQYdOmTfuXLV16iuu4mDZtGsbGx5FKZsGIjsHB4+jo7mxETKSSqUaj35TL4OorrzjlpRdfyLmOX9RNDRAUvh8gk0oroFqtBo/56OrqRqlcQhhEIIxAAI2mA4Q2uAUaUyobLjh0XcVxmYYJEIlSqQwCglQiCUgFyWrpbl74j//43pvSqXTzho3P4z233ETOPfdiJBIM733Pe7B7314lBw65grkBGJsYg8Z0NDW3oFAoIvA98eqGtY9wEfSFoQ1AeXZBCNKpNPzQRxRGgFDwGiVtpDH0J0QYBtB1HYQwAKHitQiuQH7xPZmcJH/hIoIQccQZUePBMAhgGHpMy1dZ676r5OS6YSCKZc+WZUE4AoEXgGoMnueCSEDXTZT90tFvfutbP/jYRz85v729e8bWTVsxc9o0FIaLuPvue/CZT38KjDCEQsBkahDpuh5sy8SypUvAGMW+A/uRTKaRshIYL0xg1pzpHV/96r+8781vffOaMOLjUcQBSRCFHKlECl7ggFrG/9Ef5Hv37HlV07SNpyxdftYbrrv+bbe+/9Zrm3LZNiGU+ieSAgISyWQKUgoVmUfUJlYI9V6hLP7Zp1JgVFpDDF1jUmVI89h7TVRgNxzHQcQFMukUNKYH23ds3HjffX959NVX1z1+4MCB3aXiuD95zPrPX1LIAMBr8QcA4Kab3jH5xPx36tChQ8GsWXMG7r7vzl88/NCDnpS8OPmsTNZk/R00vBQETKPgQh22LdNG6CsgB+KtpG0lEPlcQYY0As9z1UTXcbB61TkrE3bC2rdrH1acvgrz5s3GvHmz1fTbcwCmmie/4iKTy+Kt73gnZs9diGw2gS2bt1QefvihjYyxkFKGZDKBSqWCaq0CSqgKE2cMoVAQKiIYJKGNXDgSQ5oAKIR/LOdV21J1shJSEZjr3wulamspI3VIpzGMCvVsTkkaXx+gKiqljqASdW1yLBuWvBHRI2O9Xr1JhVTSRBWeLhoyS8oUQCqSSiZdjzMiVH1NIYSK/JAntsT1LbAkqhGqN8kEJN5mKdqkGgAAjBAFxQGgmQZovJ2zTBPZpgxGRkcxpWeqkq+l06nzzjt/9eG+Pvzg374v3nDjtTSfr2LVqrOwaNECcCnVVjpupk8i6zdk26BApVBBc0szHn3s0W0bX9t42LRsFAslmKaO4eNDaG5pByBRq9UUdZvSeHNvolKrIplKQzMYNM0GjwlfpXIJPApgJCzYCTs1d+6cWVOmTV88b868Ja2tLUtOO33FqXPnzOuaOqUT2XQSrutjYGC73LZjk1x15rl04dzF2u7dO5Cwkzh78WpcecWVkEIiOSeBF599CTuHh6BbDKefsRxOrYajR4cwtWc6vvLF89DS0gJqMFjpJJoyGWj/zQEgHvvEr0k9hw5xI0TjV4/+V3+uvsWXQg0UKCOIZIRyqYyEnQQjGjSdwQ8DODUX6WwahFIUS2UQESGVNOG5PhhjyKYUKGdwaAylUhmcY/fLL73yQjE/uocAlZrjDI0MDe+p1MrHIi7k9BkzUKtWkUgmYNtJRD6HrusQkiPkHF3dXdi/Z//Wl1585cANb75+UWdXizr01oc5cdPLIeK0CDVUqv/79tY2NGUzeN3rrj5t/bpXrvjt739zINfUBsEj1d0LpmLGohAi3g4mNQbP99WGM4ig2xqkkEik05AQ0HQNvuuj5DrNV7zuyrcfOnDwnN3bd+Hjn/oouJTIpVvQ2dqB3uk9MHRTNbsxGVOLG9RisYIpU7oxOHj86Mc+9tGvH+o7sO+ss86CW3Og6wYq1TLGxyeO2rYFrV3J6ylhYIzAcR04joemXDMSKRux5qIh3QSAc849Z8m0qVOm7t69t5jJZFUkTwwSIozA910EYQAr0YPmXAu4iFCpVFBzHUACtUq5QbZVdyQKSoGkaSMSIWRMe6ZEXVWmlWjkHQ4OHsXcZfMvve66a8/+3vd/gFfXv4Y7//R7bNu8A/niKGbNmIXlS5c1HquhGahUXXi+j1kzenDwYD/K+SKeff75Z31fPHvq0tPl3oN7kW3KoFoqQ0oBN3BRKdeQTKUQhB48T11/BAQ8VHAxBc6TkIigLHhqSMY0DRQMURTG5Ow4zzgellBCYweKaiLDkIP7PighCEMJQlR+L2MMdtJCzXGQL+ZBoMjdtm2jWqvA9TykUykIpLF+42vPv7j2xbtfd8VVH+vMdeiGpaO9swlvuPZ6bH5tM6ZOn4KOjk5ISFz+uitx1sqV8OL3xeJFi5BrbkLNrUEnGlpaWsGFxNXXX3XJ6vNXv+WFZ5/7YS7brHLqBUcgQggQcD/4P/7DPIqiEMCLuabmVwaHB//c3NJ01erVq1fPmDlzwZzZszMn7kFKoSGEgFtzYRkWNF0D52q4Wh+21nOwS1X18zidTEJjgB8F4ILDkDbfsn3n8J7dOw9Jju133nHPC4f6DrzQ339wYvJoNVn/X61yuSgB+ACGJ5+NyZqsv6OGFyAQde1lI75IqAk9kWCUoZQvQlAJ07ZgmBYkCFzPh23bXacvP+3MMAhx2WWXIdekfqYGgYd8Pg+DGUgldRwfGsSRw8fw5JPP4NTTTsXy0yYgZYCDBw/uq7nVLUzTlFyXMli2jYRN4TqO8gl5jiK5hj4IYSARbcCcgAiEUBia3jiYE0riibWMPbkqP1NICR4pYBDBCWRyY9NbpxzXN8GIMT1102W9YaXqcw2YVHyoVod/9TVPeG8BSYmKjDipQ+SRgIz/vIB6nuuZs3UJtBLE1vN3hcrfjZthjSqwSiQi6ExXcm2i8olpvEXhgiOKOCzLhlOroSoqsCwboQiRTCRQLBUwPDSCOXNnzZ09Y9bidC6Dy696HXG8CAuXLkBXZweEhIqHklTlFTKmpNaN70/J210vaDTCDz700KtCylpTczMKxTwYYSiXy9BMJVfUdQMWY3B9F6ZpwbQs1DwHqXQavuehWCghCFzops5yTU29CxbMnztv/pwVZ5+1etXZq89etG3rtq5ZM2ZZre1tKFcqqFVLGDwuoWmaHDg6QAxLIz29PeTo0X6ctepM9PZ0QNN1eL6P5559BocOHkY+n4fjOSgWizj/4gtw9rnnYWpPDyABzdD+u28UBXKTCiylzoQQiD3jYPH2LyZ41ze58bNSl8JHodqancgY5pBQGXiVWhmmaakhiWDYd3A/ho8P47TTTodlWuBcoqu7GzU3iJswB8NjHPv37h3es3vvjr17965Z/9q6NQcOHNgahcF4FIakqalFOk4FQRCCMg0jw0PIZtOoVMrQCYMbuRAaBaMafN+HrumoOd7xPfv3rAewiEsJISLVhJETNgc/DFEoFNHV3qqo6HFRwjBt6gx4fo1ccP6Fb7333vse9XznUDqVQblWhkENUDAQyaAzBoDCqdYQRiqnNZXNghDApkkwqkPTNNTcKlzPbXrTW9/6gVUrz7rltfXr2n3Xx4zp02HaNkqlMlqaO8FDE4RRBcliBCx+7l0/wJQp3XjumRcPf+d73/6XQnHi8flz52F8bALJZAKWYQKSID+ePwoAYRiCc64yW30HxwYH0NbSraBL8VVPIFXuKiEIA4Fyudrd1t6+yDjYt920DIAQeK6LqqwgkUiguakVjuvArdUQMA2WbUBKxFAfgoioJlDTDYQI4PsekokUpJBwai6SiQRYHOlDGUUU+UgkksgX8iCaNut9t956g6nb9Lnnn8ZlF12Jnbv24bXNG9Da1I49/iFMmzEdXqgI0rl0Dlu3bsJTTzyNT332U2hqyuHAnr37v/Xtf/uR6zpbbdNAIpEAESeAdjxSJHDDMBQojjEwojy4QnCQiDbsG4pKymLAHhRXIKbX17Nrtfg+wqMohvBRteHWdaXW4XUlDIVG9XgbHMF3BTRqxGoWiYiHKJUDWJYFz/NQc9wYZqX7zz334l8uu/Tyi3s7u04jlODFl1/G9W94A7Zun8CRY8eRbWrGxNgoenp6sXXbdvzsJz/Cl/7lS1i46BR0tXfiwL6D0ImGTFMKpWIV2VxK++a3vvlPl15y8a7iRP655uYWWFQlGwR+oIYSfydVLOQ54mzCGdNn9jY3NZ96+RVXrL78istXJBLJOT1d3e2d3e0GYwx68kQySZ0C78eZwqZpwvM8DA+PorerB1EkQTVZuOOOuzbededda5tyTf3VijP4wgvP7S2XCwPvfe/NkyeqyZqsyZqsyfr7bHh1XY+bTYKIhxAyQiKVgOd68FwPmWQSmq0jkhw9vd0YHhqD6/lwXQc9XV1zdY3O4WGAObNnYGJiDC1tzShOFLBx40acvfpsUMZgGCZ279yHUrmEXCYHU2eIIoF9+/evGzhytD+dTaNQLMUgIh1gqulU3iAdCdtAEAWI/ACEx3vPGGojpYSM/a6UkthPKGN7qTpM8ViCx2I5nxRCSftiCbRG1cGTR1H89QBN0+NMwXrLEq8zmepF1YFVjyXSil9A69m5jMV5vVzRi2l9R1uXSPMGjbkuE+VCycUIFPlZQlGdJZEN0jKXvOHpJZQqcmokEPAQtm3HMm71V0VhpHy6RMK2rcZGxPU95HJZREEESYFZ82Yva+tsay2Vy7jhxjeRcqmIcqmCpqYmJWdnKiqFshPbGKX6lvA8D5AExUIJuaY0JKQ8cGj/q5RpkASqkQoCMIOBEvV4LcsEEVDbLUKQn8jD9Wqolkqws9nU3AXzlk7vnXr6slOWnXHmqpVzDIP2uLWgkxkmO7D/gBCCyyjyZeB6ZOb06QiDAJs2bgYEIS2tzejp7cHVV1+DsdFhPPTQo1iwdAEGBgewa/duuNUqujo7sezUpTj3vHPR3NTcAAadWFejQZEl9c296mPBYoMuIRRgElSqPyuk2qrXQWf1QUipUkKxVETKsqGbCvDEbBuCk5OkgQQRB3jAMTo6gtGRMZkwUzh48CA5/fRTEXoeJkbHnXXr1h549LEn+2bOmDlOdVbYvn1nvlIuH+vr27/z2MCxfYQQjwIwkhbS6TSSdlLWHEdlbBo6ytUqmptbUalWYNtJUF0DYxSe66KltRW2aSKMIlhJCxs2bXiuUKq8uSmbThBCG37y+pgjYZrwLQvVWhXJRFqRsgH0TO1COpvBhvXrkc1mTvv4pz/1ge9+9/v/HAnhJpNJQACe64IZKqpIBiGIkDBNG4TSOKPWheAcpqkj4gS1aiX15re87dZVZ6x87xMPP9Ld1tKG7//gO2hta8FEoYie7k5EkKC6UjHU35sgBDwSsC0Do2Oj41/88pe+8srLL/529qxZsqu7C0NDQ8hPTMAwNKSzGezfv79v4OgAcs3N8L0A2aY00qkE9u7vA5lvoL29FZrP4sclsHv3bqTSacyeNRtdnZ2GzvRzTNt4iIDUCIBkKgXDMFCr1tDV3QVSAsqlEtyag2IhgmUn0NbWjrGxMZiGDSEjBKGPIAhAiZIN8yiAqTMkEjY8xwMhgG5pYITBq7koFvKJCy666F1vfeObzjjc348bbngjbrj2Rvzp7jsxb+kC9HZMwczpUxFxwPMDuEGIpAhwuG8fsjkbpdIENGYHv/vTn+8az4881tnWLqpVD7quoebV1D1TY2BMB2MUo2NjMAwdCSsB3/OhGRokRHyv0RtvIMaYGhpGEQTn6r1P1O+VUsZQNg4QAkZYwxsdhKGi9BMGSjVoRtwYeyEgCALOYdsGeJwokE6nUSgVEEYROjo7USzmUXNraGppwYGDBzb+8Ac/uMu/5ea5CxYsSBcKVTzx6JO46JKL8MLLz4NBorW1A9VyBStWrMQLi1/Cs889hxnT5kASHQIE1WoZQAcIFARqxamnzfvVr3//6X+49dajlWLpoGGaICBIJ1PwXO/v8gf84f6+YwCOabrx6F133dVcKBTbZ8+cPf89t9587tw5885qaW9ry7ak0HfwsG9bqSiTTPDdO3d7VCNBKtPkrlu/bmJo5PgQI+T4nt17RzLZzOj2LdsPHD7UdziSgZw8Qk3WZE3WZE3Wf5INr4rsMeI4GBAFIWJEU15TEGSbsvC9AMPHRlAql2AlTHgBMGfe3NmJdKp50SmLkUwk0SLaEUUciXQG55x/Hgyq4djRAYAAy1csx3vYzbjqmqshI4mBIwO1p595ek17W3uNEgKRVNAlx3FO5NvEvCjJJXTKEHABAgldMwGhDkpSCgjBlc9WUEDyGOREQRhpyJvr1lopY04KV7+oN8Ei9hcCde+SrK/xGgRlSUScTRv/RygPm8QJ4JSUBETEHZSsE6RjSXOcA9oQB8eN44lWoi53jeXLLM77FUpGKmKiax1YRUFUTipRmylFNxbgkYqUklI2ZMM84so36SgYTaVYQei7WLh46ektLa147vnnIAEkTBtHDx1FZ3sHUpkkKNEb8s0G16v+fAi1tc6kMrDtBLbt3L7t2LHjuw3TQLlQBEBg2SZ4qDY7OmNgYBjLj8HzfISBTzPZdMv06fMWnnXW2StXnXX2+T09U1bOnDa1ee/+3TBMA45Tk9NmzIJGDIAJOnXqFDBCUa1UUCpMgFCCZCqJuQvmw9Q1PPP00zg+MIDjQ8fR1NKEpqZmtLa3Y9VZq9Gcbfpv/LdCiPg1lMqzCBnL+uoLPQLC6v9Hyfxk7GUWjW08QcTVIdxxauo9YCURBiEs04ZpJmEnLEQRx8RYHrquIZFOIz+aR61axcR4HprGMHR8tLz/4P4hQzcnDh3sK+7csbM0nh87unPHro179u7ZPjY6OmAapispEPhqyGLbNqZM6UGxVEY6mYIQQLFcRHNTM8qVMizTgm5YYNTD+OgYODiacjkU8nlAEjQ1tSIKI4RUQ75YRDKZxvq16597/tlnXrz++uuukJLGkVgnrk9CCJqbcgiDEHXZPRcSFEAmm0RzSzOGR4e1s89ZdeMvf/HzlwePHb2/tb0DEY/gRz5IpAZI6WwGka+iiITkUHw4is7uTpSrFRQnRpKvu+rqG89YsfKtr23Y1HPTe2/GFZdehlQmCT8M0NyUVQMgoQYMnus04Ds8kmAaRc2p4ku33fbnwWMDf5zSO1WOjIyhUCghYdnQDR1tbR1wvQhHjhw5Nj6eH4dkrdmmdOMeNG3GFPhRGfnCEFw/g56eHjDC0NrWDsuyAAC9U3rx3e9/9w0f/+jHtj7+xOM/b25ug52wEQQhJAjGRoYRxsM7K2PDDzyQGDQHETu9KUUUhjBNE4auoogkJZg6fTpkEMFzJ2CaBiIuFLiMarjqqquv+/znP3/T2Ni49utf/wbvePc7cXxkCJdddDGSuQzueeABvGf6uwAAaTuBXDqNv9z/IPbtPYxPfOpjePrRp/Haxs27tmze9JTBtCiSHIZpIPB8gACapiESAqZlgRICXdNBBODUHHDJkbASCIRUw5v41mCa1knEX1nXC4GQ+jSJgHNlE6FMi4GBXEH3KYVGNUCof+cHSjli6FZM7Vb3OUoIoijE2NgYLMuGpmkoFUswDAPVWhW6zgCAb9y86aE33vjGS19bv/His1etwPr16/Ch938Q8+bPw7krV6O1qx27du7Alq3bcPN7bsEPv/M9fPdb38FV11+H9q4O5NIZuI6LWs2FJQWkBlx79VWX/GnV2Tff/8B9/5JIJGte4DWGon/PFYWBADAef+wmhPwlkUrnurs6c8zS6OCxQd+AEZmGJitVJ9B0nXMRhTyK/JiWO1mTNVmTNVmT9Z+34SWMgFGCKAqgMR22lYDvBTAsE0xT/tJaVU37DdOAZScQxETl008/fa5l2Xj6yaewbMkSNLe3wEwk4dVcZNNZUFCM5ceRSWfQf/QgqtUiojCA53jYf3B/vlSs9Huug0q1AiMGZek6A6EEYcQhhZJWuzUXhqk1tpxCRIiiGBgVb0HJSdm0JG5UQGSDdIuYLI2GnFltY7kQqvmFhMEYuBSqeebKY0YYAyRXkA9Klbc29upGMmrk+Io6mAVqa1yXf9YPeScOfKrBVTLmvyY6N5pgEpNDZNxkCgFxUqNNZHz4JBShCAEJMENTj5OrKAqNKT9gwkzEHlwFQDJNA+VSBQRAJtfctHzpKQtdP8REoQjX8zFrxky0trYgjCIEUQiNaRCRUGGmUvlV60AgNSShKBUq2LN3D77z7e+uLRXLw7PmzsTE6AQo1RBGHsIggO95qFTKEEKirbNr2nvfduO5Ten0qlkzZy+ZOrVnaq4p17Rv76GU79YIJQwtLW0ykUyS9rYO4no+2tuaoWkaHNeDnjDQ2tmKUqEAjSmP5+4du9DZ3QnP99DS3o5ps+dg2pReBQ4DGl7aur+TxNFVUgBUo+o1qfe4J71BSGO/LxufUcMNicD3MTQ0DEZ1WJaFjo42JT3VdeV9N2zohoEwDFEYzaNQLKKrpwuSSBw+2I/D/UfgONWa7wfHS4X8+vvuv/+5waFj2zzPHXUdz/MD36861SoBlVEUoaW5WckMAw+GocMyEwgjH47nQdd1lKsVmLqFTDKD0dFxRCFHlVcR8CCGT0k0NWXBwwi6riGKJPzAQxSEEJGKB5JCYKKQH/r5z3521zmrzz63rb09CQBR7Nul5MSzwxiDjBt/2rBEEMyePROvvPKSWHLqku4//ul3n3jzDW8aGBkdeS2dycE2LRBCwCWH77jQmYFkJgEecUQ8RCKZxLFjx2DopP3Gt7zp7dOnz7ph/4H9c8895xxyyUUXI5VJKogZMxrudkbVe8d1fBimAdMCmKYe5+7du9c/+fhTv3ZcNzRNA7quwbItSEnQ2tIOL/BQrVUgRDRw7NjA/pbW1lYIoFwqo6W5Gfv37sZf7rsf3/j6v6CrqxeCC0gQ9Pb0YHR0HMViEblcDrl0tv0TH/v4J049dfnwn++88yHDMFEtVyFFhCACMpkMak5N3XQ1A0HgY2J8AprGEEYBAs8HZbGqxDAhEcIwDYxP5IFIQNMZmKYhcH10drXhcF9fy8WXXPaGM85Y0fsv//JllIslNDflQJmCc0URx2UXXwLP86HrGo4eOYbWtha0d7QjX8jjycefRO+Unmj48ZG1ZkLfl85mEPihoifXh4hSIJXMwKnVEPEAjJ4UCweJ0A8b74ooiuJ7s4jBRzEgi6uhpEoCiAeKUV3dIhskfCEBwSNolKrhnqjDBzVEoYpc1HQNQig/OKO6ikJy3ThCRweXFFYiAUggm84gnx/b9/jDjz9y7bVXn/qeW97XMnfeXMyZOxu7dm3HW97yVixasgSf/9IXMNf1wP0Avb1T8etf/RrMNHHxJZdiWBuCZduYP38OHMcFBUEYCvKhD3/ozYcOHXp51949jycTNgI/gK5r/6l+8Es1jSjEH5M1WZM1WZM1Wf93N7wiUvJdSqn6J6HKp0jU9ioIfZSGKzBNQ8XrUKZkgxGali0+ZQGlFBWnIr3AJ4MDx9HW2QERSpCUhGFrqJRriDyBzRs345xzVqEl2wTHCjFv/vxKR0db+cCBg0il0uBhiCBUm4XAU5mMEoCuaZBUHbR1nUCGAUIexXRkBaA6KTdIgTYYVfJfLk5Ih4G4MeUnfLlCQhIBQpScMhJR7ANGQwpN6lFAiKWuRH09RmhD8kcZU1nBUsaNbZ08KkHqYKsY7nOys1NI2YBTSUJO7HqlPGnjKyEIYvmf8hiLON6IQVGlmaYDsceU0Dj7UnBoRANA1UHSMEApRcLWwEUFVDJkmrPtS5YunGKbOpafuhxbNm2GqWuYM3sOwogjDEMYmo4IEiLiKoIijiHSDR1MU1RvK5lEJptDOpUe6Gxtkb7jARQYGR5GxH0k0gnr9OWnzZ4xbeYSXaMLZs2ZfeppK1cua2puao/CQDd1ne7cuRvz5i1ET3cvPNfFnDlzCQhgmRZAANMyoMVb6+HjxxFGantarZSRzmSwcMpUZJuyWLpk8UmnOoBLofzZlEKK+gCExA2bBhFv8imJZcZU0YOlkHB9D5TG+ZKEoFKuolQqKCKpZiKRsFHOF5FraoZpGqg5NURhCMM04TouSsUSUukUTNPA8aFBzJg1E6VS1d+xc9fRta+s7eMQB/bs2bV9957dm472H9llWoavBghl2LYNy7bQkexCyEOEfoBsNgNCKDRDRz6fRzKZgFMTyJeKmNo7DROFcSRTNnRNgzNeg51IxG18A7uGUqmE0A/AKEPCTqNSqYBSlaXqOB50nYFSYO2r6x7bvmP7M8uXrXh9JCJkm9MIwhCarsNxHCTsJAxdbxDFSXz9SgAhFzj99BU08iOcf+75q+65/97vX/f66z46MTGxvinTgs7ebniui3KpDAgO3/cQeBHK1QIAkJmz5p1/5sqz3rloyaKLqUk7rrj8Cn3lacsBwRThO5EApAJmCSnBoN6L6UwWmkFRLdfAKcerG9bt+/D7P/r1fD6/rb2zQ71HrDBuloBkMoGBgXFIEaFUzOdffWXt1pmzZp5lGyZMWykBqhUHzz33Al5esxannnI6pCTgMgJjKme0Ui4hl8thzcuvRlWv2jl3wcKLKSWPgkguhUAiYaPmuIgEBwjghz6EVJFhnuupQaJhQdN1cM7BiAbf88FFBI0AjCoFQTaZUbR2SIRBiO7uqRdectHF5z107yPgIRdf+NxnKZMEE4UCHl/zOLq6OnHeBeeDBxxUEpg6w8DRI3jq6eeQTWex9pVXvQsvvWjdls2b7t61Z+dYc2tr/P4QMAwNJH6OLMsC5xHCqg8wiXRWbT3DMITrOtA0HaZtKhI+R9woy4acpnFdCAlJSXw9ChBJ1esRqyTqg8qIc2i6Bg0aokhZbUic/RqGoYJeSQlKJZiuQ0QRwFS8WuQJtLQ2w9A0MJ0ilcjgmWcef/SKKy699Kprrrl8/eb19MWXnsfo8RG4VQ8H9x/G3Hnz8aa3vBGFkQraO6dg1vzZuPe+e7F46SI05XI4ePAAkraJKdOm4MCBfrS3t2LB/EUzujp6X7dtx7aXiLRq6h6sTZ4mJmuyJmuyJmuy/k6LSSFjIqkGLjhq1Vp8gBGoVmrIZnNIZ9KwTBNMowjDEEQChmYuuubq625JZxJtHCH6+48R26BwqzXMnD23sUnUdQ2apePpZ57GfXc/gFPPOAWz5szA3XffveXPf/zz71LptGtZJkqVKlpaWlTjGXtnwzBQfSk4opCjzgWq+yjrfWv9UIUYWoWYmktQ92HWF60xeIrUNwz1HSuNf4844cOMaceMaY1tA6EnAaxkfWOomiNCAEo1BXgitLElrB/Y1EY59hjHER1//c+TV8Lx4zopWokSAsYYLMsGY0yBiDQKy7YVzCqMGptnwUXDpywIYJkJ8ChCoViAaRkIwwBO1cHMWdNXfuhDH7z1T7//A+3u6iIzZkwHJEc226Ro0roeb7BJg/Rcl4vXBxKCR6hWK+hoa8PTTz3z6jNPPfFyoVgQZsqefuaZZ5x91TXXXnfGihU3v/eWWz505ZWvu6mnp/fCpcuWzSuWK9nZs2drU3unkWNHBpFKZzFtxgy0NDUjl8vBTJpI2DZMQwczGPqP9mN4ZATj4xOqORAcHV2d6O7qRldXJxJJW10rsbxdijh39SR5spQSVKPxawJwHsWxTgQT+Qkk7URj6y5BMDE+ETd3ytOeL+Th+x6qVQfJdAqmZcKybNRqLkZGj6NWqyGVyoJKAqfmQTKJgwf3y9179pcefvDRvgOHDjz6mU996hvf/e53vjVRmPjlmjVrHt648dXNiURyyLQsTggD09XhXzdNCCFgGSZKxZJ6b9YcDI+MoFatQQIoF4vwgwCmacL3AgjO4bouCqWiihkhQBSFcFwftmXBskylFBCKVi648mFnshm4rgtKVYyUgAAlcF59dV1lydIl50+fPj1NibI+RAFHza3BthMNOwBi/zJI7GOXElEUYmK8KJ0wIKefeuqUK6+88py9e/aGe/bt7g/8wHUqNQSBjyDwUa6U4Qde4qyVq887+7xzP/mmt779o60tXeff8Kbrs1dcfgmbOW0afC+E7/uwknZMxo59+/FrBRDlsSZAEHHcffd9u7/+tW98cf+e/ffnMmkUS3kUC1XYlo3mliYYpoGx8TG4ngPLspHPF3Dq6ad1ve3t77hm+7atqLkqP7qjvQugBFu3bodpmFiydDEIA1w3QEtzE1zXgRDA8tNPobt37qHPPvv0yOjI2FP58QlXSMCybUAAtmXB8z2kkknomoZyQWX9Eqoo+bphgIeBGsxwgeaWZliGysKmjMA0TEghVYQQD5f97re/+4rw+dx77rkb2XSWLFu2CKVSCfv378Om1zZh9tw56J3aDUhA1zVkshkcPtyHhx9+BI898thowrBffOLRJ360Y8+Op9s6O9CYsxECO2kilUqCRxyVcgUa1aAbBoIghBAcnu/A0HVoTEXxCCEASuLtrqLNE0pAhLq3UUqVJLmeVUuootzX35P1KDgpGoMoQmLps1QAvrqigBKq8sXrFGGqVAk8DGPVC0OlrBRDVKNwPC9/6GAf+8q/fPnM9a+uTfcf7IdhmGhua0FXbxv+cu8DOHjwIPL5Iq694WoUCmN4+sknsWHNOsyeNRfnX3gB8sUCxscn0DN1Kqo1F80tLUjYJnn5pTXPFkvlCUA1vJ/5zKcnTxSTNVmTNVmTNVl/jxteAnU4lRLQdR2WaalNjsaQTiYRhCHSto2EbaJYKkASwPc9nHba6fM6OzqnrX1pHVadv5J0dRjQNSCbTse0WqBcK4IyDbV8GStWrsSqs1aj/9BR2FYKu3ft2haEXt5zXbg1B6ZhoFpzUC2V4jxcCsMwQSiFyqwnIEJrgKgIUxs5tXSNychUndq4UFJcAOCcx00jGrJiBRlSmykpFZ0yElEsPa53nQKgShaMmJSs0ovUxkWAx7RdAhmTSWUctyHj30MpjRsrccLnJclJG9/6djeWWtedkvFhXnlLRSO6iEuBEH7cXCjIGAli6nPs10W8wUwkEzA0E47jg5sGAIFsNgXf99Ha0oqqWcGppy47c+/O3YZpanxkZJiJYeDiCy9WERWRkmVHQiiabJy1qul1WaIiR3s8wvDQEDwnwI4du8+69Oorbnvv+94ztam1bUk5X+leNG9B9snHH9OGh0dpe0cnps+aCc3Q0TNjCg4fOgw2Q8PsBXPQ2twC0zIUzTXkIFKi6lRRq6mGMwo4TNNCri2DttbWxgUsYh+kkBKCKB8oI2pLWx8g1HNv6/7piKuDfLlYREtbGygxUS4VkU1nFB1Yp2CSIGEnMD4+ijAIMDI6DI3p6Orqxf6DB1AqlmHqBlK5NIJIIOQBvDCQA8eO17Zt3TK0bfv2fLFYdPft2XW4u7Pn4Pj42K4f/3jtM17k1hjT0Xf4EJimIZFIY2JiQm2IRH3bTOE4NXAuUSyV4+tLDVwMzQDVmMrCNeIGnwsUyxOgGgMlDNlMFnbChlOtwY+38ZyHoCFBFEVIptOwDRsT4+MgjEA3NfAwRBiEkJBIJzMIPA87dmx/fPuObXecvfqsj/MYLgUhkMl2n3juY8I5iedAAkAyYWPu3LmYOW0mOTp4FFu3b8es2TPnPfrEY9/71W9/88a/3Hvf89lE6tDWbdtLs+bO0sqlavcpS5adecOb3nT5vCULu3TNgKVR5HJZ5W+VHLZlIJmyIQhA4/cxIQSI6cnKHz0BTSPYtWfP4R9874efP3Bg//3JtI2aU4Pn+khn0pBUouY6oBIIA9XsDw+NoKO1A1s2bdz00ksvHJ09c/bUluYWHDx0AM8/9zTecsObMXB8CC++sgbTpk3DyjNXQtMFwjCCbSRw6OAhLFm6GBedf4He2dm5bPeuPafuHtv5TC6Xg+PUQMHgOg40jaJYLMI0DBiWCapRRDxCrVYfIOgI/ACZbAaWZWN0aBiWacOwdTi+G2fGVlM33njLP5595plnffvb38Ut73sPWppbMTg0it279+CyK67A2Weeg2xTFmHIoesM997/AJpb2rBjyyY89sijR085ZekLpmk+0dfX93IynUKxXIKpGaBQ9hbP8VAulqBpGiAlqtUqdFtTPxs8T1kpouikGDaASfVa1JXthJyId2OMgVKKiPN4OEgbNgFSj4MjBHoMu4siFYunZPfqeyCEgEd1or6GMAxgmRosy0CxWGr87OIhRxhx1LwawtBHS0sL+voPPXL7j39y2vXXvfE91VItmWvO4ujAIMoVB5QD/Yf6EQYRtD9RXHrZVTiw5yD+cu99+OOf/4A58+fDtiw89eKz+PBHPozB0iC6O1sxf8H8VsM0u1vamvYFQYBqpTJ5mpisyZqsyZqsyfp7bXiT6QxCHqoelapmwNANME1tBUI/BJECTq0Kx3UQRiFCHrKOts55s2bPSHb2tqCjtwtJPa0aMEZANYqaVwEHUK3WcGzwOMZGC7jqqiswdHwQXAi4vr8PgAJjxcrkSqUSg0yEym2E2gqQeLup5HJogJtk7Ber+3ElVbFBREU6qm0wOUHOVc0kQASJsx/Vk6C2lyzO2a33nQRccCUdjuMaBOcAPeERlvW4oXjDLOIoIQoJIQEax9RIKUAYAyMqNiVutWMJc339fKI5o4QgBgCDi5jITBk4V4c5QG1FKGWIQhXtofyUyp9KQWK4jYcgDCBhw/MVAEZIiSgSsK1E+6qVq5bkmpqQyWbplClTkUykoRk6wqhOkVYNLxPxNj0eFlACEKoOq1EYIZPIwNANfP0bX72oZ0rvRaah4YWXXsDcmfMhAoG21g65cNFilCoVLJw/E6ACyUQKKTONVMZukJKlkCiVyzg+OoyOtnYYmo50KgXbsrFw/gIEgscePx77iRmkrMvvJXSi0DlKmmuA6QRcSjCivhdJgEN9fchls8jlmpHOpHHo0EEErmoKX3rxRbS0tSKZSMKpeGAGAxcRhoeGUSjmkcvlsGPHDsyaMwulYhV7Dh3Iv/LyK3tee23jzv6+/sOmZVYyyVRlw4bXCvPmzzJmz55Ny+XyQdd1hziPCulcKrCjBFzPB2VAFPowdRNcCvAwgIg4dN0EMwwwEcE0dIShIt0yxsDBoTMdpmnBCxxQUAhBkMtmYVkJeJ4L0zLBOUfgB0qm7PpIJRNwag4830c2l0UYhCjk89ANHUSj4BwA02BoGkYnxqFrDLl0Bp2dPeLfvvlvv1t15plXnLHqzIWu4yBh2XFep4yp4DK2EsTSU9WigosIuqWjpb0Vx7YMY8PaTXLGjKnW+25578XnrFp9cVdbtyhXSlGuqYnqpk4PHzxEh4ZH0N6UhWkqGFQUckRRCM1gYIYeZ2/HlgEp1HaXKDl6pVZGwH0EofS+etvX/m3Hju33L19+CgaPDcCXAZihK7CV46FULGHO3LnqeecqT5Uw4PDhI/u2btv2zAXnn38zACxeshgjQyPQLRNvf9ubcPRIP/58zx1YeeZKGJoOp1YDpRq6u7owNjaGnt5ujJcmZnR2tH/44gsvcnfu3LmGC4lkKolatQrf8xVojgsEUQiECqxlaAYs04LnuUgkkyCUolKqQNctQFOvsUYIJibymLdg/hXf+9633vCn3/8J69e9imuvvxaz587A/fduQv+RfnR0tmN0bAIjw6Po6GzHjp3bccef/4gli5YGf7n3vjXt7W27fS/Y8NrWjc+GMiqJUMDSNERRCD+KYBmGojITTVkkGIWdtAAqISLFEiCxWqbOKWBUawCqKFMgPzVwUkwFLjhEfahHiAIIShlveWXcyAKM6fGmOYKUFELQWGliIPBcCA7ougEeRUDcdEfVQG2XiRpkEKIsLZrGIKUOx3ERBlHh17/77e3LV57RPXf+witffPm5hGklSKlURUd3J0AF5s6cjXK+gK1btmD/oQPonNKJLVu24TOf+RRWrjoTgR/hti99GavOOgNHBvpx/333613d3TP7+g69UCnXpBSTXKfJmqzJmqzJmqy/12JUU81GEASKdsqUJFcKxD5NDTwKUa1UYVomJOcwdKv5ff/wD+9dvXr1/GTSgmFZGB4ehu/7SNgJcETY33cAs6bPwtEjR/DNb34T99/3IK57w3VYvXoV+g4eLf/pT3/66fDQYL+VtOODLQejyjNGGBCGPJYWSxim2aDiMsoUZpnLWGYcx5HQuo9XNmjMUqqcVHmim1TNpFSNKj0JZqWa2pPyc+MNBI3jUuoQLOXjBVjs+0XdR8virSJwgvBch1LFTTqNZX8NnmccL1Rv2Ov/TvmI6/43EkN51CaaMDQykzWmNzbOuqmyPYXggBTQqIIaMUbVICMMYOgGEqkk/DAgoyMj86+9+vW3ZLKZ9kOHD5PVZ5+N9s4O1TzHsnDP92AwLfY4x/FKRD1S1QAL6JqBTC6DRMJCT2830qkUxkYnMDIyJs9dvZoYlompU6eSltZW9PZ2IZmyYZgGCCWwbAMhD1GsFNUggRBEYYREwkQ2k4NhWjB1XUllCYHn+eq5plR1r0Ash1Svk+N6WL9uPYrFIrq7uxrDhno2seM6KJfLiuIrOGzbxsj4OEQUQnCBzrYO6JqO8YkJcBFh1649AAVmz56F3p6pME0bYyNjhb/c99ALv/7tb373m1/98pfPP//iHw4fOnx/MV98xalVdx3qO7h//rz5h4YHj+/auXPn3tHRsaH+/v7a2MQEz2WysEwbYRQoD6qAatY1giDwYRomGDNQrpYhIcEIRTqdUVm3REHTNKar7FNoME0Luq6jWC2BMZVzbFk2giiA57oIQr+xiYdU13gYBvA8P75eJXRdh+PUIIWi/woeIQwCeK6Hnt5euK43WimV7BWnnXJuW2ubRimFgEDEFTyIxo1ufYOuLmGCiEeQksMwTbS3d6C3vYvcd/+9KBSLmDNzHhJJm2g6Y77n06ZchrS0NcN1XDz20GNoampCc0sTIAmYrvJ6SQymqvs56++pKOAolcsYn5hAKpXC7bf/4vbf//53387lcmEYhXBqDnp7ukAAVKsODN0AAUUyncS0qb2o1VyAELUJN7Xo+PGhciaTXT5nzuyONWvWoau7B+l0Gvv3HcIZZ67EU08+Bs/zsWTxYnChBkClUgGHDvehta0DPb3deOtb3zL3+jdcf9a99927/8ixo32JVBJuzQGPVHwPFwK5XBaAAJcSpmXC95UnVjcMWFYCQRggm8uo69px4HoefBHO/Ma3/vXzZ61ctbRcLiKRTGBsbAwLl8xDtVJDyjbRM3UaKKOQkYCdtPDos0+gs73Hu/vOO361bce2Z88+5/xaKpHatnPnjn2mZcC2baSSadiWgdD3UXN9tLe2Ke+u4DANA0IKCC4QhGFj+If6PSC+zwqhCPKMshO2AgkwyhoKlTqVvj4gadyH4/t43fvLKAWEAptRxpRFgwvFDJASRrzNVfd3CsM04PseuBBxFJuS30uhlDW2nYDjOuPPP/388SuuvGK2bpuzUqk05syehXx+Ap0dHTjU3w+n6qC1pQ1CSGzatAmaroFpFIcOHMHChYsxa+4s7Nu3D7/6+S+hUyouv+SyQ888/cxW33ddRhk+/4XPT54oJmuyJmuyJmuy/h43vFEUglINuq6BUQ0a1eH7rsrDhUCpVAUFhWnYIJBI2hZ0LTF9wfzFi3VNw7PPvYJEJou5s+fCtBiSCQs1t4KZU6dDZxp27tqFvv5+XPX6S8EjgQcfeAScY//eAwf3t7R3IJPOYHRkBEHggzICGfjwAw+MagChqhmJBJimgRDeICArnyFr0D7jgNs4roc2gFZSqm0kpIxJxyetU086QPMoJjGDqsNXPYuVUUVxlurwRGMfmYiBLICMD3hxA17P4lVrELWFpIpUGoai0RAg3pDUPcGUMeiMIeIROK/vaYnaFscgGEpZ3OepRs4PAhiGAUM3FGCLSCVHDiPougEhBFpaW+CHHoIgRLYpB9dxkbRNbc6K0xedd/6500fHx9Hb24MXXnoRy089HV2dnUomDiUXV367Ez7oxrY8XpmSWEYuZV3JTjC1dwoy6QwpVcrI5jIAkn8F4zoZh1yqlOFHAVKpNBihyGYzjXFDffwghYBAhFTCbkC7ZDzYoAC4kGCQiMIAEgJtbW0KXFYfWwjl7bZ0C3Nmz8HxoUHVWFsJzOydCTthYuPGTaiUR+Qpy04hHR09SGZszJ+3CPmJifEXX3hx1+bN23Zt3LTpteGhge3btu/aD4qqaRqku7uHEkCUimVZc8r+xMQEyuUKKpUSWtvbQZkOy06AahT5YhF6DIbzw0DFy4AgYZhgGkMkOTTJwQiDZZrQNIZqpQo7YcHULLiOAxAJw7QQeH7sceRgTEMoQoR+iCAMQAiUt1RKmIap5MpRiCAMQQhgGiYEJILQR8gDhFEAnRqABBLpJHgUwnN9DI8MQdc0PPDQQ3eff+F5Z99w45uvq1RraGrOKoCYEAiFgKHpDdVCPQbM1E3U3BoYA1IJCz4N0NTejJGxcbihi45MC5LShuv60HQdOtFRrVbQ1N6EclBDvlRGczbTsADU1QlKdquGS2Nj4xChgCBAS0uL/NLnb7vzpz/5yXebmnK1VCqJSqUMyzZRKJbhOg50g4FpDOlMGrVKBXsKJbS1tcEzXARhgCCIsHnTlnUPP/zIt4ePj725XCmTF198YWB4ZPio6zkLbnnPrVcPDY6nP/uZf651tnckLrjwAuI7PpqyzQjCEOVSAbpGUSpVUS7n57/tXW99z69+/duN/X1HCobGoJs6NM2E4BFqbg2GZiIMIkiptqGtHe1qEBGq3PBCPg/TMpBIWBgZGcXyladfftXlV69+8eU1cDwHH/nYRxF6AZ564jFEETBl+iy4joOWlmawTAYbNm/Cvj19ONZ/bGzL1m2bp/ROH7N0K7V5x8Y+0zJBCEPNqaHm1CA4V8RsW0cylVb+dh6CQUOhUEAkFcHZ0E0QSsCDmFBPmYL8gQICiMIQHPG9ktCYDi9O3BdB6jDvxjCqrtghjYGlaoAZKKIgBKPKC8zDEAKAJAJB5AOSxER0Ao3pkESq933IYzk1kEml1VaYCxQr+TV33PmHn194wRXtXvX40kULFsCp1JDKpDB1Rhp+EOFg/yHMnjMDs2fPxaFDfQjCCLqm4a4774CgKnN42ZJlOHzgkPXU4081E0Y6TMuYiMLJDe9kTdZkTdZkTdbfbcPLmPJn8khAkhCpXBqazhBFytOnUw2O6yMSHJQJOI6LlSsXT+vpndrbf+gQsukseqZPR09PB4rlEgqlEpihI5lMoFIpY9bsmXjfP74PixfOx/HjRzB8bNipes6rbq0ymLRa4fsBGBhM3Wh4vCwjqbycPABhBEHkw9AM1eTEEl8CoXy1kjTIynGP2YgIajTAkijpaz22KIbsyHqTHPdglLE4AihSW9wYiKLOYRJUI9ANHaEfQfDYW4u4+eJq+8w0BbkSMfFZxRmRhvS6IetTnSIYpSoKSQhEMcWZMhY3eTz+3lRjzgVXX5+rEyNjKg6JBxFE7P80DAPJWOJaq1ZRLlWgmQymacNxXFiGCUjQSy++dFlHW0+y4jhYNmU5qrUa9HibGj8bSCcSJ7blcYPeAH79FWOLQDIA4sRz39ScVcqBKFT5tiQmVMs6SEy9FrlUFpqmNYYH9WaaAAiDQD0SSiEEEIYearUqMuk0dFMBcxR0TW2G0+kUzj33XAwNj+BQXz9mzpgORli8xZdw/QC60KBrBg4e6MMdd9yDRQvng1IGO5mAYVhix+5dlf6jRw8cGxrYuum1zev7+/o2rVu/7qAUogoAumairb0NIBKVSkn2HdzP1YZKg2EaSCZsWKYBKdIIvRCGYUKjDK7jgWk6akENhDJojMG2TQguEAUClGqwTBuEAHbCipf4iuwtOFcwNMpiqbtA1SmDaZqSJYNChgIaJXCcGkzDgmla8AMv9tz7CMMImqGBUJVlSuKttiRQXnlCEIYhHKcWD5uA8dERLDtlOcbHJga+8tVv/GjBwiVLTztt+axKqYJMNgUIirHCOFLJFOykHUPZTpKPEA2mYWJiooDR8TG85cY3QwJw3Bq8IICuGUjYVkO9cfZ554ABsZVAxMAiAcaIer9R9VrWYUpOrYqeKVNw4MBh9/nnn7njlTUvfrutvanPskyUK1WEXMAQEsVSQSlXGIFbKqlhExeIhITjOgiCCL7nI5mwkUzY3iMPP/DnNS+9+OIFF1+U2rZ9c35kZKxAGZ21ZfOGw7Nmz5jx9NOPD3zxS1+6eOasmaf19EyBU3UwdcpUTIxNID8+gfHCBIim4frr3rh4/76D3ceOHivUvelceDA0A5HPERFX5WZ7Pizbhq4xeK4PHnFoTIOmqSFEJp1FFAbT//mTH319KmElf/yd7+Oiiy7B8aER9HR3IfCB01aciukzZiCMggZM7JWXX0FhbAwbN6xJ2wmrY9HCxdWh40P9w6Mjo9lsBp4XxBt/DwBBb88UdHV3oVAsgVCBZEpdw7qmgwooO0vkgzIGQzPjYRJX5HOmtvCC8xgoRuJ/CgiphnH1AR+JFSqExH+mbk+pkw6IBK3bTYhqqAkBGNVB40Ekiwe0rucAvoRumGBUXcPKa64ikhzXg4yz3bu7u7B9+46HfdfPzZsz76ObN21bcPllr8Mf7/oDKtUqrrnyGqx5dS02rt+AK668En/68x04euQIdEqQy+Vg6BYq1TJqThmz5s229h48tCLXlF5aq5IBYcpJE+9kTdZkTdZkTdbfa8MbBBEMXQdlDJZpwwsc8IjDtEyEYYR0MoNICFAmQTSKqBQhncu1T5nea+3fuRWUSbS3NoNIQKcadMvAeL4AHgmIKEL/wFEwJrFnzwH4vgdDasGzzzy/x9A0cB6hWnYbcUKQypslIRWFmCq5m6BqcyCFACVa7P1ijbiLOLy2rjoGjxtFEKJyemXsqY2lrSoDN4arKF0xCCWgDOCQAAdoLM0DTvw5wSUCP1RxR3GDRqhq4oRQvjXCeQybAsCgaMFqLQEGCrA6CxoN6Avi5k/l5ZJG9BEhFDKGUKmcYR77jMUJqbVUXkpNp+Dxptmp1sAjJQf0/QACDCIUqAZVJJMJVKvVxJRpUxYRJkEFQSKdQktbGzRK4pgQ0sgArnv2wID/SrcKyMZMoeFHZoRCUiDkirRdh4edpIOOn1P1a53pUCiaeAtEJPKlImolF5amIZlLIBFna5pUg6FloBk6BOLHJgEtztEVACQHhkeH0dvdDUKAUrmCSr4oi+Uy+voPy2TCpgwaZs2eg6VLfZx62jLs3rlndNP619bv2LH9hUcff/yVfGliN4/CKiEsltWrw3gqnYFt2dAYQxAEIFKHaSYgpYRt2TAsE061Ai4EuJBwnDJ0XUd7a5vyFIJCCB1e4MM0DFiWhZBHaGlqQaVSBtUYwiCAzhhqVVeB1CAhpRpuGIalfNyh8hzrugHLMlGYKMY+aBl7UkMwTQPTGbgIAQH1fo4UYZ1RpiJueCzP1yiCmPLMOUfC0kApkEqncbjvEBjTMDh45Lmvff1r3/jD7//4vePHh5IEXUgmEzA0HX7gwUwYjUanrnawTBXtk8tlkMmkGpdN6AeohTW0t7UrP3AMe6ax/J8RFqsKBISMQKGpBkqqvFfPV5C9trYOjE+MT9zynpu+MTw4/Ntlpywe7zvYhzDg8HxXQaUsC3YyCdd1Y/+8VCA7SWCZFlzXhe97YJTC831ILhB4blSQ5MixY4PonToVlaoLXWO7duzY+cupU6bmOjp6qmteXjfy1a99I/uLn/10diaXQqXsIJvLwkoY0HQdxUqZf+Nr33ri5z/72dF0ukn5WiMOHoVwaw4SyTQoJCqBD9u2QSQwOjQK07JBAAShj1Qqg47WdoxPTGDRoiUXnnXaeWff/pOfY9qsKbjoovNw7NhRHBk4Aj9UgxUA8J0AxAQO9h3B/r0HMDE2jtamjqgp3WIePz50fKIwsSUUoXRcF2EQQGMabDMBK2kDlKBWdWBoDAGPUC5XMTE23gDVKXtLpKLpQBCFPohUwDgm0YhWUv5d0hiW1YnzJ5QbJ1Qw6v6MOO4uvps0It1i+FWs0GCMQoJDCECTBFJwEKGsKZILhJGSVktNbZ+jkCMMI5imCYCAhwIJ0/b279/38MxZs2e1dbf3LFm6JDNr/WysXfsy+vbvxebXNmHRovk43NcHwUN0dLTBcxx4oQtoGubPnY1qpYQdoxPo7OleOnfezDP37t27efj40GTDO1mTNVmTNVmT9XdarK2tDbWaA8qYiqIII1CmiJlRFMEwNBimioGxLRuVcgXXXf+G161efc75fX0HwHQdLS3N0DUdvu/BMk0MHRuFbZooV8tYv24DDGqhVvERRRGWLF00tmHDuj8ePLDvYMQj8Ejl74aIYFrK2+m6NSUhlkTl3NIY9iTjqB7BG55XQmjceMWTf8oaPjNCaNysxh5YTR3UFCk09gSCAjTeVEihSKOEqWxPGYNWKG10eOrwRmJP4YkNJ2lEa9S9w/VtV53GrOBcDR+wwIl835hkqukKrCO4anxVkxTn9RKqmsk4AokwdRCUUqjNHVGyQFEnnwoF5GEaBeeqoTYtA0yjSKYSU//x1vf904xZM1s0TR1SXd+DbdsxifpEQ1r//uhJMU71/rVBQY4PtZRScCEaQBoVR6IOngBtRC+ReDhRlzbWAduAyr6dyE8AnKj4j6StvHxxE0SZeg5kFEeYaETJeAHomsqQFRB4/NEnxaHDfZJQRnbs2ElS6SSZO3seMTVT1Jza8YOHD269/4F7H/vTnX++/be/+92//ulPv/vJlq1bXok4H8xkc4Fh2gjCCJRSpBIJEDDkcll4rotqtQopBJhGoDEFO+NCIBQqizkII2TSSVimBd/z0NHVDitpQUiJZNJGEAZIJZMwLCX7DcMQjDFEQYAoigAQhJwjCANwESnPLqUIggCu5yCKIggiEQYRXMcFjyLohoZIciXJJxJ+4DcGQTTOL67nooZhBEZpI7opCkJ1HWkGNKohkiE0nSLwIxiajkwqjda2Nqxdu2YLoSy6+MKLzzFNU6MMMEwdZtKGF/oNub+SH5+4PiilqDlVVKoxjVjTkElnlKSV0vj6IYgCjmq1Bss2G9c5j1T2qhYDjYaGx+B5NXR0tmP7rp2H33Pze/95zdo1Pwt8v7Zr507YyQTcQDX2OtPgel7D95nOpBAEQZzvqmSyge8hk82ChxEkoDyrUd2vrrbjvueCEopysVIcz+eHJUS+ubmt2tHeXnr66Wc8wzBbWjtbE8ODQyiVCnjqmWcq9933lz88+ujD362UyyNarJzQdBX9Vo/Vqt+XTNOE53rQNR2ZXAa6ocE0DIRhhIn8BIrF8emf/vQ//5fmjtZ5d9x9v/z8Fz5LKAEGB46hWCzgxjfdgFQqgSgMwQjD0PFR3HHn3agUyzh+dNh5903vOpRM2M8/+eRTz+umViWAAlLFW9fW9g6k0ilQQuBUq/BDH9VKBeVyGYzFlgaQhpe3oY7hHExTmd+UkrixpKCNHHMBCQmNMRiGcfKdI6Y4n/T/Y/WIRL0JPvH31EnQygsMtZ2PrwvKTuIfAEjaSURRCM/3oFsGNF1THAhDAwWBburwg6AaRKKwZPGC6Uf6j8ybv3A+GCN4+NGH4AUuIh5i/4G9uOiC87D/wAG4vqeuQVNHJpVC/5F++BGH63nRrt27jvKQb2eMHZuMJZqsyZqsyZqsyfo7bXibmppRLBagaQxRxKFpGhJWEmGgJKIa01GtVQEAgRcQQmlyyaIlry8VCmcEoYdLL7wUYRhgx45t6Omdgn179oPzCDNmTsNLL76Mz376s8hk0njjm67Dlo1b/AP7D2zYtHnL3bqmj+m6DsEFNKbBtGwEYahgOFIqKWo9ESg+qCtgVSyBqx+CoGTFhCpZJKEEMpbJkbj5rH9eivou8gQg6uRDF+oeMygpMq2DVGLfbP0xSCEbHl4hT2yZSbxlU5vl+omfKohVne4MlSdZ3+7WSaWUsEZL3dgox38PAGiaojwLIRuHUELVNyC5iA+X9dxZglQyhUQyBUIZwihoxDyFUYCe7p65H/rgh29OpVMJRgkMQ1d5t4w1Dp71frZ+8OeCNyBdjUY+frbqwwMhYooPlHwUABzPBYGKGKkTs+tq87iHxsDgEVRqFWTTORAQNOea0dyUhabTBrxJinhwUCfDamqwcfjoYfzlnr+gvb0F27bvwP69++SevftIEIZk4fyFZMasmejpnoJyuXJ07bq1z/z0Zz/70Tf+9WvfvPueu36yefPm+/ft2b2lVqmNJJJpnrCTIBJwPAeCc9imiUwmDdO0ILjaFoVRAF3XEUYRLMtEGKisaMs0kTBtJVemDGEQglIGXdfU5jBed42PjcRkaQKqMQR+gEK+AN/3EfO94fkevMCL3xsUggt4nq/kopRCxNL/KFQxQkzXIITyfZqGrt4XUtFqCVTTyAVvbIGVGkH54RFv4UzTVEAsHiHiArZtIZVMgWmaemyEwDBMbN2yZV3EubzksotXujXXGBg4BithImElQCQ9IXmPmxoOJTn3eIBdu7bDYCYy2QzK5QpMw4LrOciXikglUxgcHgQhEslkspGtXc9epZQijEIUCkX4foAXX3pl6z+8732f2bpl6909Pd2SEQLDPLEBJ5QiaVvQNA1NTU2oOQ4Yo9CZoitzGcE0tMbGPuIh/CCE63hIppMwDQtDx4+jWFRqlUQqAU2n0A0dlXIVfuAVLdPue/SRhx47OnCkb+nipb2WYXds27pz7+c/97nvbNny2g/HRscHTDuBMAwRhWozqgZFFDwMofgJDLqmQUogk8mAEArXcwEhkclkUCqVyCWXXHTrbZ//4i23ffnL9BMf/igJHB81z8cZq1ajtbUFqVQSUaSgg4Zt4YEHH8HaDRvK02fN2ucF3tp8fvThZ1947tEg8kaUakZJjSlTueqpVEqxBoRQcnIh0dreiomxsZgZQMFiny1o/GseQWOGiryKGQNRFMVKj3joEStk6kO9iPPG0PIkdN+JHPX6PTzOD5NxRBeJgX8ne/8Z1eIcYzRgV3WrShiq96hhmKCEwnVdaExDoVJSoDfNwPDw4NDA0aPHR0fHrFnz5nR0dXUlq24VR48cRbFQQk9XN7KZFPr7j8BxXTCqobO9A5pm4MjRAZRLBTS35Nitt76v4Dj+uiNHjvR/4fOfk5NHismarMmarMmarL+/0irlMlKpDIIggMYoNF0H1RiYFst8KUXoR3A9DzNnzkxpmpw6Onqsw+MLkDM7QTV1IOnp7IWh6WjpaELSVvLFfCGPW997MwLOsWvXDrhOxT3cd+SQH3hjueYcqpUqkon49xbziMKwsToU+GsfroQEF7LRgNbBVJKcICWDqEYVUSzJJQL17koQtX6lcc7tiQVmvcmNm1p2ov8l8WZDNXpKmsyFjCXRanumx345LrlqlePYHgl6ImMybpZBVSSSoZsIhQ8OKNKtiBsTrppzRqnyItdjj2JJt0DsR5USMuIAIWBMi6OMFME0EiEs04amG6CEQS27JYIohC50aNRArepmIi6MKOAYGxsFNIrmbDMMkL+SKtf/rigKQeMG7YR8OX5NuFBybU3lbGoslqPG2xkWx1TJOn26PjyIn30hOBilSCUy6oKkdb+viLf3PG6k6gdnJdXetm0rSqWCtOwEEVTKA4cPkyDw0dvZS84480wEvieqFW/wjj/c+doDD9z/wmuvbXi+WJzYn85kAh5GkAKwrKSKVIm/K41REGhg0OJNK+DUPICq+JgwjJBMpkAYRVCO4LkBbNtSwKmAQ0BlhkIycK7IyplUBpVKFfmJCaSTKSTsDPzAh+e5Kj9aKlIyjzh84gFEwPeC2NesXgvGNLU5FwJC1J9HCl0zAaK2XL4bKJgaV8RzRe9W/nBQClPTwaWApukQ0oOUUERnX0UjUabB83zwMICVSKJW8yBMwE4kUPN9eEGApG2jUq7wb33nmz8Ofc+89b3v+8jU6VNTI2MjKBTKmNLTozayUBJVdV1SSADZRAannXJ6o2GnVPmJdUNHmiQAAG1trTAMQ32vXDaktGBAsVBCKV+CW3Xw9PPPPfnt7/zbN44NHH6hta0NjuMg9ENICBi6AY1p0HUdhGlwqmV4vo90JoNavJlPZtQ2U9M1lCtlBEGEdCYJ2zRgaDrcmgNNM5S3204AVMJxFNiKQvk5s7lMsHXb5kHKNOzZtfs3H3j/B7fe+KYbr3z5pVd2DwweecwwDL+7uxeARKGQB4mbbe5FkERJxxV1mKNWrQEA7KSNfL4Az/OQsBMYHRuFZrL5X//W169/5PHHmGGaOPX0JXjg3gcwdcZUjIwMQddUwym4hGnZONJ/JHzxxWd3FMZGN60ZHes3LDawbdvGx/fvPzhu6DoII8ilc4AAipUy2jva0NzUhEKxiGw2h2KxCBF4qBQrIITFg9AInKt7kG0nVGMMFUHlh37DqkBi2QaXvBE1RjUGKVTcXUPRUic1x9c34qFjPebNMAwIojz8tH4/4VDD0Pogjqk/I3i9KVb3Px5f+4QS1JxarPjREEQclmVDCAmnWoXGdAweH365VvMLP/nRjzYm06lrE7Z95qrVq7Ujhw+jUqli3bqNmDZ9GsrlKgr5AgYGjoBQhmQyAd3Q8YUvfBG6xoI7/3RnWSN0klo1WZM1WZM1WZP199rwAhSGzpBIJMF5BJ3pirhJKPwgQtmrgvMImXQKxVKBT5vZ033Te981b9rU6WhONmPr1s3INuWgEQPjxQlMFCeQyaRxdOAo7rv7Prz5LTeiVKqgf+9RvO3Nb7WefemF0ppX19Ucoxav6ggsU+Us2oYNKQT80IeQAozo8ZZVQIQ8jj8RACiIRkGlihQSUkAIpoiuUqoYH0oVxZbEW99486gktFIRoDmv97wnNg1SSY9JDMzRYjmo5PxEzi1Vq2e1RZaqaYolmPWtcKOli8OANabovEHkIfQCCKjMSqK0wIh5wyq6qA67IjRuHICIh+CI4sdDIAVR0sFYmiliHzAFQRiE8F0PhmGAMhVtU66UEYUCkBynnrasOZVKWIVCAfmxIsqeg8ziTOOpUN+/jPfTSp5YB+GQk/4XsYdWxlt3pmlxFBDinFwCUzfVxjzertN4AMFjj2/EI7Q0tZ0UM4L4byUYHRtBKpGC5wXwAw+pZAp9Bw/Bsizs3btXFiYK8m1vexs5Y8XKOCQJ2Lhp69C999/75E9/8uOH9uw7sEln2mClUuG6riGRzIBCg2EZiHiEMOKwTC3eAOkqs1fXYRsahodGoOs6mlqawAjD2MQ4tDjKhwchRCgAJqDrKYRBGA9AKHw/gBQSuVwOnuegWCpBiAimYcJzXUhCoJkMnhuiVCrHm1MN0DQEfgiqEdh2AmGoYECS1ocyaERvSbUMA4sHCyImxGqaIpsDKrtWRLwR+QKqXq8G/1oKNWACIAiHX/NAQGAmLAViExKu68H3AyQSNihjCHmE7p4elEulwte/+Y2v1xyv/I1/+8YX2po7Uj73MTQ8gt/96te4+vVXYdGiJfD9AKZhwHM9ECqRSCQb11g6rcURWBp0S4OQHJZpxzJr1ex6no9tW7dh1uyZGDk+gZ27dw5u3rLljp/efvvtlUrpUE+vaiiDIESt4iCRtAACJCwLYchRKdeUNUA3Ysm22lZn0gqo5lZdGJoJShiiSCD0fSRTCXi+gJBqKw6qrlFNYzC0BFzPwUR+DNVqJfY5q+tz564dW3Z9YfsWpmtobWuH53kolvKwTBuWbSMMQ3i+C11TDAKmMYArSwInAqlkBp7rQwjE8VQMrluzXn/Djdd71Wj+l7/6r/5dd/3ZBIArr70KYyOjcJ0qembPguf5sAwTUkr84Pvf2/DKy2vuTSSS6zKZHDnzzPPLE+MTRR75gKFD1804Do0gk8lAowx9h/tgJxLQqlUll48EJiZGwTTaULsY8f2LRxGkBHTDAKVUkb+h7qd1iJ/gKpaocX+Dek1VdrkaZNYj2gCVOd5Qb8T3z/q2WAge20RO2EikFPH9I6Y0CzWsAiEIgkB513mkGmXBQYmm0qEFgee5kJAwLAuWZQnfc7YfG6gOpjLJPV2dPZe+7qqrVk7t7lm8e8fu1L4De3HlVVfDoBY+/6XPwbQNkEjFM3FEePqpZ0ar5eqzI6PDh9nJFpDJmqzJmqzJmqzJ+vtqeGtODYRQ9PR0wXVc1Ko1BavKZmDqJhgBpIigMYLx8RHnwkvO7b3ggv+nvfeOuuw6z/ue3c45996vTkcHAbCIEqsaKSqkJVmFVnUsK0ocJ7blRPHKshy6LCVrKZKsxLGUxI7tuNCyZLmosIkFJEFRpCiKHSJAEB0YTANmMMBg2vd9t5yy9353/njfve8dJf8kWcnCH3draQma+eq955zZ736e5/d8z2uUsfjQ+z+EX/31X8d3vv0tMNHh7le9ElcOruKv/uVX4MKFZ7G5vYPJxg6MMXjbW78Du7vH45NP/MvTbb9YjEa7GHyHcT1BXTeAVuiGDtYajCYjTA9mUGAbXYycd5MALasBMTLsSGvoxFZckkGTiGT4NEJ7zSoriuKbFPH8K/bS5RxAohqzzRiUZDCWwSFRUV65LzIhEOf/SKzMSlRnEnUNiXtwjbJoqhE637EFWza8WmkoyaIlkkE48jAJIhAgdOb8cyhYxQpgTJHtkooPKRIFWKfR+R6UEpyzGBYeQ9tD1TykN3V1WAEVcQwP5CMmMozwvjSDY1AsiDFGdH4AkigwMcI5B2MNumFA23bY2dxig7miMgCWeiadkKARIzBvW4AIo7qC91EGCgdrDSIRLl58AU1dcbacLL74pS+mO+65HYtFp/YOZthSCj/x539SKQ3V9x6PPPrEC7/5m7/15Qce/ONPPvz1r33+2tVrz2xu7wSjDDa3NrC9uYWD/QNow1291jLVeWt7B03TYNF1nGX1A4xt0PUDmroClMbBwR60NtiYjDGbzbG/t4et7W2M6hrB9+i7DoMPfFjkHPphQAwB2CcQuA/ZaMNwpKGDMUbI4lxFo5QBRb7GkopAsoghIlGEtTJgU2BoDzj3qDQPD0McQBRhjcNktIkhDHzNJA0/sBqmjUXwA4JnW2gYWv5zbRBD5F7YSEzGNfy9o5B2nbM8ZCuw+ksRSAmj0Rg7W7uLd7/7n/6Ds+effeGn/+pP/zdv+Y5ve+PHPvpxo6XH++y5szh67Biij5jPpyBEHG9G4oYgMb2qUlOjlAblDlYZih9+9Ov46lcfaB95+JHTF56/+NkPfeQjHzl//vyXkoqL4yeO4vr165hMNlDXDSJdwxCMvHYEZ5uSmZ+MGqSU0PcdXFXB9wNmsym89zh2/Bj29g+gk4KtKozGYyzaFov5HMYauMpiuneA0XiMFBMSKSEoW64Xmk8RQ8Lu7i6stQiRgUldy4OV957dGynyz1bXoCGhqSuYmsnc2RY/hICUAnZ3DmE2n+NVr/+m7/+FX/zv/+K/+7Vf2/6ut31LcCngIx/8ML7/ne/Eo488ikOHd3C3emWBmv3Sz/8Pe5//wpcefMXdr/ja1u6hr+xs7uCBrz6oHv76I6kZTWAd0/OHbsB0foCmcrjl1ldhNpuzWpr48DDEwKR+P8DHAJUSPCUh0AtcL8mASzdCqpRScFWFEPgQiEIqEDOG/DHITik+mFutKuK+aKAfBihIDVsifo6A30siknuIifDWGHSxRxg8nKuWZ3EE1DXXtdnKISVCO29RVzW7kgCEgWvMtFVX+77/9IXnzj76j//Xf/DKw0eOft+Rw0fe6Yfw6i99/ov1pauXMdncQAjidNgYAarBB3/3/Z9ytvpEirjslV/vJtZrvdZrvdZrvV6uAy/X/BDm8wV6qcfY2W0QKeJgtg+VktggWVk6dujYG1949kU3b3u8/Xu+G9/w+jdgY2MMkxQULHYPbaHWDdqW8Na3vhVf/9ojmM8O0oljNysf44UP3/uRrxqrEShAKY35Yo5FO0dVV9xLSgEmV1Ykps6SqD6KVBl8k2RbOe6qQInV0bxJigT5GlxdZKRbN4n8qOTvy2ZMQRQHViFzZSzlTKpmQqhU6CJPyFob/iHk5yzlsBk4qpV0BCeE5LExmsBUBovFnAnUSQNJgcSuB8krAok3i4mBRa6qEL3Ar0isxDojUJk87SoDa2oQEfqhL8NS09TY2b4Ji3aBa9euYmd391gz3sDBwSUcP3EcN7ubeLOJlVYiAcT0w8ADOBRiTHCWYTSz6QI7OzswGnDaQDeNqDEeMOBeV3Uj2DmGAIrAqHacQVYak5phRF3oceXKVdx33+9hMZ9jMtnAPa98JQ5td3jlq1+lNjY2MZlMsLtzGItZ73/tV//tQ2cunv78pz/1mT++9MLFRy5feuFU13Whqkc4fuIWbG5uYeg6zOZT+N7DWAMfAjY3NgEkzMIUfuAKGK2BQBGBCNPpFNFHVJXha5SAqIHxqELTJFD08N5jPBohOofed9BWYRginHagGEHgvGJKQO/nUk0F1E1TrOc+BMQQMGrYOjvrFzCGzfWD92hqJqe3ixbKcCbXU0TlKqSkGEhmjOTGFSIFeD+UvGsCoR6N+PNl8I3Ri2tAl3vGWgOlLRYLvn65VoZz3Vob9MOApmnQjGq08w4XLj6P8WSMzc0tEBF99CMf+s2vfOlLX/yOb3/LX/jRP/uj//Hf/tm/89q9a3u4cuUKfD/gxRdexGRzA9YZPP7447j7nldKbRMwnbXY2GikxotQVQ778xk+/0efx4uXLs1q506ePXPm0+973wfunS6mD3ofuso5OKMx25+BEtC2HRaLFs5Vov5FORQADBSUNtjb34PRFru7h9C3LRZtK4AlYDFvoZVC73tsjiZ4/sJFbG5uAOMxKBKmewegIWK/24NROQcfQKljuj2X0GI+n0NZjb5tMR6PUNc1QiSGtgW/tKYHdja0i56VyECoXA3nNEbjDdTOomsXuH7t8i3/+jd/4680xr36bW9/K378x/4j+8/+0f+O+z51H07cfBPe/va3w9UW8/kco9EEjzz6GJ489dTFm2+99eT21vbJo4eP44UXX8DVy5eTkuGwqSqAEtq2hYbCMHgcPXII5hu/Aeefu4Ch7xH8gIODKR/IUVralCmW4AeAAtbLZHZltBxMMm8g+AAWcMXWLoeEBIUQojAIxE6SMQnyfM5OZxRYFcmzXIPyQabY3ru+kwMSwuB7vs4F8pb/rej7DhpcR2aMQd2MMJ93iIioGgtlNLpFNyz6cB5Kne8pPro33f/s4aOHvvehrz/49ptvu/0Nb3rjG93ZM6dx/vwFdG0PY8zpytUfAnCqbhwU3Ho3sV7rtV7rtV7r9XIdeKvGYugHHOwfoKobAEw61krj1ptuwfVr10BgOmft6jvvvO2ub7/84mU8fvJJ/Id//sdx02tewxvHRYuXnr+Ekasx21vg4PoUn/30H+DEzTdje3cbN992Ox566Gun2/bg1ObmLltejQGFhMV8jqrhPlHfDQg903E9MeilMgY+MogGeaiEltocIKUghOS0JCGJtS7Tg5XSgCEZastoxxZoqSWCKKyUiKtbFA+dWvPXyx+fc7UxRskas2LgDA9JEHI079x4iE4AZz+jl37ZVDDFucvXWgMkzUOYUrBWwwvUK4aImH/3Yk1NQFKw1gnpmIfrGAKcstgYT7DoF+j7HqNmjK7rAQCvfOU37NS1wW133HzDxZCrnFIiaMkL930P5xzqusbmxkQ2uwkbGxPolcahvh/QjCooa3ioyxpeVlxA6IYOTteonGPboo9QjkFkja2hIjCfzfFD73wnzp59FrWuULkad9x+O55++ln/uc998fTpU8888uSTT3/uA+9/3++RptMpcq72xE23oO8G+OChTcLzF57DxmQCrQ0CdXDawnde7KRsKR0GD6K+XA4+RBghzBIUxpMai3mH6D3msxma0QiwCpEI+9N9GGNhjEG/aFlB6hc83GiFvmuhFBPGreV7jPwA61glq5sa0Wh4H2E02/CNMWIF5YOPYegBRXC6Qt2M0PYdD0yGld4odGettGTwheoNElhVkGHXgOu29fL+IO6N7vu+HPowJVchpojO97CKlbRF10OnxLniaDGdzTAeT3DzzbcCLygcXN87e+/H7/1lj/CAp+GH+vnwxu9829vuObx9+NjQdappaigNvHTlKiabmzhx/DgO9g8wnS5w+twB/uhznwMloptPnIj3f+X+BUV18vnzF/7g4Ycf+tip0ycftNZ2J266Cfv7B+j6BarKYd7OUVc1yEdoa7C1tY22baFUQFM5DEMPo1k910YjRI97XvVKjEcNHrj/ARjnUCVg0S+goGGUQt92AFgJHoYB2lgYY1FVFTbqCm3bwkcPP/QIyqNyDsZY9P0CdVUjBkJdN1BJo+1bhpv5ASlxFhoaiL0vh2SR2LbrKguAO5SrqsKVi5dxxx13ve0b73nNd73v/R/CK+68Ax947wfw2td9I/7cT/55bO1sYlQ3aBctNiYTXL56Fb/93vce3HzTzQ8/cP8ff/5gb+/F3e3DuHz5Ck6ePo1AAXXjQIkPDnd2ttEuOmztbGHRdtyHPB7h0otTBPJwtYWzDsMwoO8XABTG4zH6vmcrseJnGSixG0YsyjqJE6TtxDbNkZOSEYHmIRaESAy/gsAEM0U834tL+Bk7digt4yerxHEiEiI8P0cqV8N3A2IK8Ipfe6U5ktG4GvN2BuWNHOKx6h59RALgGgfrHBbz2eXZdP/TdVU/OW42P3vx+YvfOTs4+NPHjx9/c9cuMF/MX5gvuvdWVfXVEMK8amqMm2a9m1iv9Vqv9Vqv9Xq5DrxGW4wbi91DOyAktLMW58+fx8bWBrS1mIsa4n3AseNHX3nTzTfffez4Cdx8+20Yjcd4+LHHcezoMQydx/nzF7C5sYnHn34M5849g+3dHXzP9343FotBvfrVr8C/ePc/fQJAu7G1gXa6QB8GbG5soGsXUMnAqISmGiHEge3AApvSzkCn3IurJGsL3kQlBljlTXv+vOzHVZrrhZJ03PL+TOU5lJXHGADZT1nnOD+WIP2rCVrbJY1ZAFqKWMngsl2AElNykWRw0bmDl8ogaYyB7wfOFq9s7viQQb5HCqKmErQx5b8TBMaC0uFTNnPWOPhhQKBOlA1gY7zB71vwABJCDJC/QtfNLwIIp08/p5tRo6d7e7j9ztsxHjf8sSmBiA8d6qaCkZxw/p7aKNTGcQWSUK3bdoG6dmwDx/9Fni1xntdaixSTWB8t5rMWV/f2cPnSZbp+7XL6kR/+M+aO2+7AHXfciTOnzw0PPfTw6fs+9skvfujeD3/qiScfv392ML2wsTmJu4d3QDFhPKkxX7S4fJkztjEGzBfEiniMAmrSAiBqMPQ9/JCYvEwR/cDv9Wg0xggabbsAJcJ4NMZkY4y+9ahdBWNYeYtEIIoI0WMYerZ2ah4qlVIwVg5HVqqyElGh3JJY5IP3kh1leJlS4J5cyXMztZltxj4GmDDwJr+89wQjtVu5XxbS1azAcLTQeyYlExXoFVc7OZDAhXgAJ877WgtYAy0WU2jAKC3VYRHjkZB6Cbh+7Rr2cI0Px4zB4Z2j4cknnvq9B/74gU83rjrxnt/5zXte+cpXf8MtN9/yGmPtHZtb2yde+03ftPX+93xg9KrXvGrz8ccfH1tt1Lnnzito7F947rmn2649v5jPTr34wqU/euHii/cPYZjXVYNhGDA92Bc1egQkwubWJnzvESPBOofpdF+o7fx6NHWDunKYd63AvhS+8qUv86xPCXVfoapr9N2AhIjG1XB1A2sNmqZBjISu69A0DUOPfIAPPUIgOMmqL+YLbGxswlkLH3J2NCLFhFHdQGsetDU0+o77dgcidH2Pm2+5DfPZFPsHBwzGUnwAEWNAQjrxrnf9jf9se3t3c2d7C33X4fxLL+AHf+SHMBo1JbIxHo1w6cVLeM/73otrL11+8qVLlz/63HMXnqyqCuefewHPnT8HUhHGCbipH+CHgN3dHWxsjFE5i689+DWu8omxDPvW8jOw73sY6zhzLx23Cvm5iOJGSURlsM0kfaboU6kRgzwnJPTPlUiQmiGh6/Ntk7i7WwbbbJMutURIYqFeWqBzJRuQMMReDnmY1xC9VLMBaGNgRkTfwdWOIYSJuK+5HqGyBn3wfACCFHzvnz2IBy9Zox/RWn/9tjtu++tK67daa/+4qux9Xddeq+oGg2fXx3qt13qt13qt13q9TAde8D4Di0Ur9lWDo8eOYTqb4eKlixiPaqQYcW3vir7lttfffuzEiZ3R9gTHjh4BAHz84/fim17zOvzwD/8QbrnlOJ547An82r/+Ndx860141avvwcmnT+Kzn/ksff2hB6/P5vOHALb/+TBgc2MiKhYQfECgiPGogR906ValxPTiECJvnopQIL28maKce29l6ExFWWSqMvKAm2EpMm8aGVSCWA1BuTpHiYLAZOZceVH+TivODkZCPwwMR9G8VaJAiIiwOkOEOBcbBl+gT9wJDFFzeWiKPkJrw9TfEKSrM/GgogxPmyYVpUNprjIK3sNo3qiHFNC3PbqhZzCWVmjqBovFvFQcvf+97//IpcsvnX7oaw9XJ04ce01YDD/5d/7W37rnW976bfwt2EPLOV3rYOR1J6Es9yEiRUJdO1aorMWx48dYzYoJxqil9FvaRFiJ5h5N/pjTz5zGpz/9GWoXrd7Y2MQr7n6FObR9dP6hD3307LnnTn/l/e/73U889dTTX9zb27u0tb2DO269DfHIYVx56SVMD/ZRNyMc7A+AVvDewxreaDdVA6M128atRlM1GAYP67ivOMQBw9Bj1IyQKMFHzkCnyIMEISKEgPmsRV1VbOGeTxFCzgkqGGsRew9jpaM08kAwGo14IPYBVe1Q1RWrqBbouw4KOSKQkCiUQxgtFVNKsSVfQUFbKwc2UQYzVtZi8NjZ2gFRxGwx5/siKOkGNgXGxmc+nFXXWsHaGikRAsVCyA0hAMTuAD5k0ZIr5qGm7zsYbVE3NTs9KKAZNRwJ0FLyJbVbe9f3QDGEo4cOXbh+be/Cv/3Nf/9ZZyscPnToUF1VR44cO7axt7e/efTo0bsOHz322sO7hzbPnju7f/jw4YsXL7z47MbG6IW9vf3zZ86cemFjspEaXWNjMoaPA0JIaOc9QvS46aabYLTG8xefx3gygbMWXT9HU7OLISUmIO8dHHBPqwxVVhvYqgIRxweGoZfqJs00ciJQkjqwkFC7BjEQUvI8kBoHqCiOEQMfPSu5VQ1NHp309SrNw1aIfDigDF+fi8UCzWgEYx32r11DUgqHdg9h0oyw6BgQtnf9qv5P/rO/+FN/42/8zPfd+5GP4XOf+UP8+F/8cfz4f/TX0DQ19q7vYWd3B2dOncbTzzyF9773A/SaV7/yufls/tuf/tQf3Hv46GH/0tUrWLRTKKugCdylvLmJ2XSO2XyBo0cdvO8Rid0pe/t7OHL0CMaTMfbO7sMqh67roNkWgBiDWLEVbMVuksF7vkaIn08ELS6CFaU2qeUhpJDucwSFldu4rBpaOSRb1s7xX2qdHTh8aJhrucpnaiY1a8WHorYy8D4gBsJkPEYITC4fbXJeOpFC6AfuJh+P4OoK1HNWOPQBQwgY1RXqpkYffNv1w7Px2pVLX/nyXve6173+7xw9euhN93/pj7/dqPlCWfN0t+gW663Eeq3Xeq3Xeq3Xy3eZKOqTMQ5bG1twlUOKCZuTDdR1hbbtkGJCVdWj17/+DT961x13vWOyMcZ8toAbTXDr8ePYbEboux7T6RyLWYfbb7kVp089C+dGePHFF7C1OQ5Hjx79/UceffQ9Z86cumwdA4q00ZhNZ2w3zkrSwIqkrZyoDqIsyEZSKcm7ymCqDUpVDg8KovZqJfU4SuC2eSjmTFkeknPNrhZVgoQiyrMzlX4e5xybdJWCSgpErJrGEIR5lUoNUVKA1Zwl08bwz0gyxCi2LyrFgB5tDW+ySyYuVzGx4mO05UogzRUmbIDmnzdbnbl+iVW8TOBlsBZnf4ehx3Q2xaFDh7G1uYWnTz595cGvPvDEfDZ/9MzJs5+vazf50T/7Y3/q2PFjmjJtGhpJFJVSMSIqL+dEpS84se05kSrduPk15fomBoNRTGjnLYZuwIsvvYCXXnoRN990M3YP76qd7cNXY0xf/v1PffK3/t7f/3v/8Nd/7Vf/wR/+wR/+zuWXrjyxtbUxh1KwBti/fpXrmhIPpNmcbqzBeDzCqGkQKLLNkgjD0GMynsDLhtcPA3d0WgtrHZq6LiC0dtECOmE0HiGEgK7t0PUdIiX0fcs2YZ0HwVRqd/ggxsh2nu2VTvLCRtTTru2gkirXSd7oF+eBHMLw2x6gdEIzGiMGVtl1HhoUXyfWOlhj0A8923VD4N7j7GygBBJHgLFMGVfEToUQOReutSpDhYaCNjxoB8/DjdMWysi9ohSIglRUEUZNjd73GE82MBlNOOs6naFdLEAxYLFYoKpGqA07DLq+awcfrs4X7Qsx0bNPP/3E15+/cPHLp5555ovX965//uRTT33huYvnnnjuuWef398/mO7s7sIZi67t4SoLV9c4mM2xtbkFHwYQAXt717kWzFnMFzN+f2OAztVkSg6pknT5aoUYI7Y2uVvYBx7YMl23rkfwgwfljKvmgSxnTYeBIxWHdw9DJ67aqasG/dDzSx75uVG5ip0DfYdIAdoY1K6CtQbDMBT7bj8MAADnHEcSNHDl8iXsHjr09t/49X/9i8eOHj1y9epl3POqu3HmzBncduJmHD5yBMryff/CxYv4xH2fwDe/6Vum505d+PV77/3YP3nLd3zHnALh2vUrqEeOM7rHjmNjtIn9/T203QK7O4cQibC1vYOua3H48GFAAdf3rmExX8AHQtOwyyY/E4FUeAcU+XpV2nD9GhGMsSUKwTlqIbwrLTETdtqo7BDRCiqLxPmZJ6djRvHzIwFwljPSpdJMDoKIxNkiNWkUSR7vAk8w/HxORNjd2YE2Bl3XCROCn/GVOHkU+67RtS2GGKGURuUY5BbB75U1CgoqtO3inDNm79ixo2/aPXTo+0fjcer6/upstv8SFOgXfuHn1zuK9Vqv9Vqv9Vqvl6PCu7E54Sxqiuh9y7Ue9Qa01pjPriP4gHoywahuxt/9Pd979+bmJi48dx7nL1zAm7/1W/Atb34T3v/b78f2oS2cuOkW3HbnHTh27BCefPppXLm+h5cuvUSbGxtf/uSnfu83v/bQwyfr0ZhVtEjo2h51XUNry9kqzWqMDwEREIWTeNgjISAlHqCY7JmgkhG4SYJKeRxUPPgmVgK0lg2v2DpZVZPuW4qlaihb5pw1bCMmzjMDCtGH8nFJs2Kch2NrDRQppriC87/WsQJIFJbqA0jAV5ptpjHCWgtrLDxxhjdRQiRa2WxK7FK+LmfWAGVMUVCaUYMQI4a+hzGWu3Atb/6894hxQF03GI1G6LsBTdXA1Q7WaRw+djgc7M8+cOXK1e8D8A4j8Kq8tL6hiKjULWltyp+4qip5OsQMp+HP9T5i0bZAIoyaMarGYXN3A1evXWk/8clPfvaTn/m9Tz/y9Ufu7/v45N7etWtt3+HIsSOY7c8wasZYtAuACDFx/2k3DIgp4djxm2CUxrX9a2xpjBEHLedmiQKiIlhnEFNCN7SwxmDUjDDd9wJ9Srh87Rr3BGuDSAEICf1UhhLFSrSygJVKHhFhEYVQnSnhJMqwMQZ+GEDEhxpd20lnLitTigAvcDKtNddcEaC1RVIkBylYHiLEBEJgK7NVoowbOGvQdp04AQYhPptlh3IiKYPWYrNn1TIMQdRewyCt/D9aIYQAYzSqqkLwHjFFJJ9Y0ZZoPIHQ1BUWiwVCDLh27TJG9ZiBURpoRg1ACfN5B2MPMB41sK2DrixG4xH2rl3BeLKBphlhvjiYaW1mu24HQXm+R4xGiAHtYgFjHOqmwbVrexhNxrBWY7o4QNM00HJdO1vB+4BEqhxwkdhn66pG13UIwXNcQGywZTj2ARvjDXjfI2mg9x1i5OHOWH4d/OD5tYmB7cY+4GB/WtwmMXqJNeT3lWBIwxiNEPh6ICJEyf2zvZdgKwdjamxubCApYDafwhgN6+z23/rbf+s//8bXvvauhx/8Oh5/+CG8cPUKtg8dxaNPPIF7XvUqhsEB2N+/jrvvuhvz6fyL/+bf/fq/mHftfH/vKs6ePcuW3WQl31+haweMJ5uom4ZdCrXFlWuXMdufIsWI3g8Yev5fbQyms32OP4iTJZEWFp9ClOx9PgQjee4yXkHLsyrXxyX5/w0oxQJMywc4yyeLksOxJOLwsuebVvp583WcwGp9kqHWCOE7JuJnxUDs5kjA9esHAjTkLmAIEDEGQqSIieMavl4PsNbAe4+mmQA+wZNnNwdpbGxOUDd19+xz5z5lrdn+wR/60Xd99g//8NuOHT369GIxv+iDP7/eTqzXeq3Xeq3Xer1MFd7J5gQKGkPfIYSIIXLPbVU5zOdzGMs5y0OHDh37cz/2Z//To4eP3AkVsXf9Ko7uHsFDDz8O7Rx+8IfeCRBw6cVLOHvuFOp6hGdOPYO969eefPyRx/7Vk08+ea91rqXICpfSCk01YpLt0JcOYGczXEVJpi0yZMgYhOCRUmK1VWlRU3kw1EoLy0qooMUrx7ROAQ/Dmqw6cG8pk595JVEn2PKsyhAMgKthxJ6cB91MYdbKIEbe3FVVzb25IZTsWSJWB1mhFgK1UlJ/JENlAUYlGZ5YIc71NSHGUhHDGWRRChUTeLNaku2ECQpVXSESb+65GqfDdDbF4SO72No+hM2NTSwWc5x65tzVx08+efXb3/bWW5Bw/Pr1fTseb0AZtVRs5HtmxadAvwQwo4tartniS0AYuLKkriuMJ2PM284/8OCDz3zy9z/5wd957+/88i/+3V/6x1cvX/0MJTo/my/a3Z3DmO1NEULA9GCK6D1GowbGWcRIaLsOSIm7fRN3+87mM742fACIBxXjrOQHFfzA1ngeXjSsqziHmwgUA2drI1soSbo9tdIwol5XVcV51xBRVW7pBgDbOrVh+FDugCYKgFJcW5OBOop/1pzhZRCSKzZoJcCqGCOMsSv5cZTDHM7vSmUPJWhjpKuUAHAtlzGWbahqeahDMbL6q6XuKvGwbYwumUxtDbsqrGWrfZJ+X7H+xxj4AMcTvOd7cNSMoY1mSq5EEow2UIlJxlo6i4eh52owIvhuKIq8tVyr1XZtgcoZpVDXNWJIAjriOEPT1DCG89XBe7T9QuIMGtY5GPCzoaprPgSCWj5TXFXI00rxz0uJijXWB66TGvpBVGBCSuCIg/TV8mGAZQDa4Hk4M8sBLFKEUQqucoWAnTkAxlg0tSiGIbJLgAh10+D4iROwhg+KLl9+Cf/B2//Uj//qu//l39Raj168fDEtDqZqPuvwN//mu3D3q16F6cEMKUU4Z/DSlSu48/Y7T/3K//wrv/zcxef+eOfQNs5fuIBFu4BxFoDGZLyJ2f4Ui3aBZjLCZHMTIQzwPgjgi63WTdWgakYMPrN8XTQjziD3fb/yDNOSTZffHXHJSigP0MxEI8nmahjHzggtNW48tNLyKaKxtEEvZ2D+GsSDsMrPdwVUzpbX3hiLSkBw+XCQUkHmccWWBlxdyYFngjUG0Px+xRjLwSL3uUf46OGqCnXToF8wvK1U4yW0PvpLd9x5x/Mnnz753O7OziwlivPZ7OLP/dzPpfWWYr3Wa73Wa73W62Wo8M4PFjDKwFUjOGfhmgqz6YwhMc5gc2MD5BPqujry2JOPHd7d2YJrNDa3NjHdX+B973svfuq/+Cl88vc/iztuvwWBErYPH8YTTz2DZ8+ciwcH1x/0MXzx0O6h6fX966XytutadIsFrK24g5bAmTKjoQyAEJFSth9rxLRiHaUoKpyYmRN31XL+VCNpgAJv+jXk5D+hUGiTAIVirgKS/hytFJS2SzBKWubPtDLy+alYnpNYpBlCxQcFFJejdkpSSSQU05Q4I5iDa1r+M5OgKQ+48nWsdUWlBQqjizNz8nFasxqoUoKSIQYpwVjH1SApMr1XKRASRpMGSapBnK2ha4MTtxzFyWee/vhP//R/9Vhoh28Lw/ATv/w///KPfN/3fa9dKQnhXG8iVlfK6yqWcQIrW5F/F6sVlOUs46lTZy9+8AMf/sozp575+Fcf+Monzpw588LO7hHceuvtCH7AbNZiOt3HuTNn0TQNalehqceo6graGDgYuA0L7wMoEsIQcW16HVorVLVDO58jKSO9sTxkdV0LZy3atkXlamgYPsBxBinEUm3FBxOmWDZ1HgQTV/u0XVsOGWIMxYJJlFBXNXz0ywwuj3P8PgnN1hjABwISwWiLxtUY/IC+F2s05Pohfl8jFCpn4QePmIhtndqg9518TYUoBypOKorIsyMghiAXlUJKCuNRg67rCplcW8AngoXOTVliNVWwhvPVbd/C2RpWa4SVQbvrelgZqL0fCmBrtWonBI/JZCLuBY/ZdApjFEbVGMPgkRTQdh2apkblKrSRMB6PMfgOChrBe8k1M83X9x7WGMym0yW8iADnqjKctt0cRlkYaxG8L4dRWpniRojEZOumrmUQE4q12MQBoBmN0C4WsM5x76z3qEZjdoCkxFlfbQQQFuGHyPefYNuypbf3fGiytb2Jru0RQkTf+ZJln4zH8J5Jz6dPncTW5haj34y9+yd/8j/+KWvN7lNPn8LDX/8avue7/jS+f5vhbM5oTMYjOYDTeObMuSfu+8h9v/zAQw99dHfnEEKKnD2dVPJaynPDaIybEfq2BVLCfNEihoC6qtF2c66CC5zd5teUgXpD57mvVnM9HAS6xpAyLR+nYJ2BSqocEGity0FJtjXHwC4FayxiCiDpHl+eNMo7levm8ulkeZKqcvBIIFFqFazjw6HBhwK+Sklo9cRuCGsMjHNM3FcahCRd6C0fUAXCQH05MDXGwlWW/y0KEVbl7+GRfA+lFNpFf/GTn/j9jy+ms63ZbFb1fd8PfbcedtdrvdZrvdZrvV6uA28IHqQTDu8cQeUqXH7pshA0IxIp9H2Ltm9x9NiRO3/0P/yRW/tZi0svXcQ7/8yP4MKz5/Ez/83PYFyPMZ0dYDJuUNkKT52+iCMnjuIHfuCdlz/xiU98+bHHnjjnnOXTdDAp9vbbb8Pe3gEW84XYgi0oRQwhsrolA6rRlqt+JLObBEyVlNiYFStk2eKcTbdas60ZCTBalYwvkeTGtNjx8pZKqMEhBoEHySaLULp1cs6SLbs8HGmlEDwrc0hgWquRAYqkl9JYaK0RI9cecbaYe1ohii5IBqmkpMaXeHhUGtbYQnpWKUFpI3ZrUT2IVW/++ZSoFxY+BFjNqt3Q9yClpTO2R/SEswcH2NqcoKkq1JWjRx/6+lln67N3veL204v59C4Ab+T9JysjIXCOM1ke3pS8fkRJNv5KwFHAMITw8MMPf/Xd/+LdH/vCl7746fl0/vhtt98yv3btOqqqxtWrl7HZTzBbLJBUQu0qzhhvbaBb9Kicg60Mht5jd2cbV69dxXw+B8WI8XiMycYEi3YGpITRaIJFt4D3A7p+huiZ0hxIMt1CeFVKIfoB1jgACrbS8D4IiIzzqcnwhjtQZFUoRpBArWKIS9+A1iV7rUW1WxLEE3ewGn5/lDacH6Qonc8r16H0ixrDm/EYA/ok8DIYxLisHqIUi62dD2w8jLIM9FGqQMaQgDCEUjmEJNU8IXJtlajQSim22QfOYRZlTBEf5mgebJx2bEOlCFdVfG0GL1EBVsibUQPvOYPfDy2sla5la/i9GQY0rkaS33PezrnPFglKJThjYFWFKNl4zhwzYd06Hqozic5ahxA56681d3o7lenqCbayoEBleFJKwQ8BMSw4DiDwI0QCJVYfm8oBozG8H1htthX6MMBqC2sc15+RZ7eJtgxok7adGNkenoIq9Wgh5AEsiVK9BGVxhzJXHnVdj/lihu/9/h/44W9587e847HHT8Jpg4ceelwdv/lmfPs3fxu0VggxQpkEqy2+cP8Xn33Xz/zMz734wksf2trdRt2McfXiJUQC3LgGYoIPLaZti8nGBHXDtvT5fIah77C1tQOKQYjUI1Bk4rTSJDEShRAGbDSbMFqjX/SsaGt2JKSYK9HkaSvZ9KzKIjHDIHe3548L4g7Iwy2Qe86zQpxNzuIekY/LPek5by5niACAQF7uX7aYl89V2d5Och2LhVophgwCqCuHPg5omhGM1pjLv0WJGDDXKwWrDbsBwK89HyIGGobuKgyuaujiJlmv9Vqv9Vqv9Vqvl+nAO9nYAkWP6cE+EgG7hw9BKeDq1Stsmw0EpRNe/ZpX3v3m179h5+MfvQ+T8RbOnXsOn/rUp/Fd3/3d+MZvejUODg7wb37j3+Kuu+7GEyefhrX13uVLl9576cqlz3ZdN+96xZtQk+Csw8H+jAdaq9H3A5y2IAIqUyFqQt91MJUMepILXVb5qAKIUmDrMYfMiO3KYaWiCJylW+KdUbKOLAeoMggjJMljalGOpVpD25IPTJFk2GaqpzIG2lCh6WroUhuitOZNNcViz8sbN6U5s8h2WhmAtOFBx2jZpHtWHa0BpcDWYbG8qkRFfSGp+GC4E6uvIXCXrhLrN9N9A3Rq0HcDjGE4zZUrVxACYffwLt7w+jegXbS4cvXKw0+cPPmxHwNeRyGaYRiEUmvgDFfh+IGHQGs17Erud+/g2rV/+A//8acf+tpDnzh39txnz549e27n0A4UEp579hzafoC1FpubYzhjceTIYWit0bUdYoxoFy2aUYPZbI44i0gxYj6fYjHvsLExRtAa7WKBwbPCuAg9qiqxpVk6dLWRwwlheIUQ0Ag92VZjprzmS4AirBwOKDmoIMVqFQXOtjMHilUua7K9MQtR8mfEwwKr3/I+EyFGYlstRX6dEmfSY8oDMmRglS7cfJ3JQU4kwhCWXblKsSUYEUJgVuCxnv88hih/zDRqo6SDWmBuVVXxAYVA0ELkj0+K4XVB7Lh5iLDWSi8xW+izjVRbtksPvkflGiHhBtjGwVrLA5pSQITAnBys48xttknXoqRppRHCAK1cAcFxu43mryNUdqMdDznBizLP1mOtVYkBpERM4Y0BdVWxmyMxFZwowpgKWmm4yqFrO7iKs6D7+1M4x+6OkCKs1YghK4WaB2EZpPJAp61G8BEhLeML3AmrOIdsbVEZk3SZh+i5qgzA5uYmZtN9TCaTm//7n//5P//Gb36jfv78eVRVhb/wF/4ijt90HBub28w0iBEREfv9Pn7tV3/1fWEYPnR4d5fdA5RQWYtKV6CBEELA4D2qykARIQ4Rve8RIx9szGYHMJoBW5xzpgIO1JoZCRGcvWf3TIRKpoCjmN5skFTk5xfkGk6J1XAt9xF52GRRVw3b2/2A7H1etrLJA1nxwZpWmrPsKTIAD1J7JF3rWltoBcQUuRZMKRiJBxipREuJxGnN3yd6ti1H6Tsn8AGlUnyQlCgx7E6iMST3bAwBBEIfPKqq5h5r+Xeo7VpEebZba2Bttd5NrNd6rdd6rdd6vVwH3vGkRt8CQzfAVRWs1pgezJESsLm1AWMcDmYzc/zYsdtPnzmV7nrlXeqWm2/HZz7zGfjYwjjC/sEBunaOw4eP4PNf/CI+8P73n9y7uvcb24e3PhwpPWMc5/XYupmgk0EMxMRR59D3PQIFJA1WZ4ZBCLgBxjCpmGt3qSi1kEE3ZzmX2dJUsrYyBhZFLIlyC1pSQRnKIn8utFrI18zDdZKNExEPGMZocGMQD1rc/LIEYmX1A4rzkcUCmEnOFKG1g9Gq1H2wVTaxpRLA4AemL0sHptJKBtkg9Fip4LCsuDFtW35GpZFkKBuGnm3CTQM/9DBWI3Qe0Uf44KE1YKzG9GCKM6fPYndnG4tZ69/z2+/9l9/4Da+953ve8T0/OdmYcJ2IQqkDqSpbVBYk4ORTz5x//+9+4L4P3vvB333uufNfTT7tdd0Cd955O5JSaGct9vf3czwPSBqj8QTQABHYHhyY9J2tssF7WGMxDB4hBszbOfeBZvKuqJ6DZyKuSgZVU2OxmALg6hjrLAPS+lZyz3ItlGuFYTYEFEUzhiCgI1ZCjWzL2Q7LQxBvqBmCw9287BHO2W0G8RCMdQJHC9DKScetqPryuYX2rBSctUgmMeVZhumcD865RYi7Qct9QdHDVI5zvT1nFrM7IYo6r6SDlyJDlFhYE+upZkVbExWirga/FpChMiXunyWKrHpThDUWtav50GoYZBBYMMRI7nkKsRw+UeoEJ6e42zqKTT/xIGitFuuwBcXI9HhblWcBE7IV+n4orpC6sqDEALgon6MVMB6N+euGKEMKoJSBsQ5936HrB3ZFREIIkvP2A7QyaMYNnHWY+Rkr0KSkTkfDSmUXW1yZ6r2xtYn5dApCgrOVKLgJSDxIej8UIJY1Dsnw4cEwcJ720O6RI8eOHLpt6Du8cOECnnjsMbzyta/B7bfeUpwlzvEw99WvPPDU/V968D3OOVBI6PsBZ8+dgtIaW1s7mB4cwFiN7e1NAArd0CHEwBlnV2PhPVv1W1bjm2aEGBYFOsfXlZLDOL7+q4qruIa+59eSJFZSnrFMJs8Z2YQkBzrsahgGza6B5TGT3ANmmQuWexqJh9k8DiNRARFqLV+HVFGWlQzESPnAyDA/INe9KVaBkTjDbqzl62nwmPoDvs+DB3SCtkoy9VwjZ62BjwOsrVBVNeazBWfgLWfGtdISn2Da9nqt13qt13qt13q9PJdRyqCua1jnGFo1DNjcmsiAyhuJumnGP/ETP/GXv3r//XeGmOw9r74Lx285glfcdSdeePESjh07ht2NHZw4dgTvfve/eu6pk0/+45tOHP+dqqrOPvvss8k4LeqKwcZkUyiwAYuhRQwRWxubUFqjb1vJS/XQ0GXPA1FaoZZdsGxX1mW4hVQRZYoz53vlbyTXpVbriYDl4ADNuUBosSHKkKAZ/JRSZEsl6w2sXuRKF1EVVwolpUaICblKFA0FVvxWVepEQjhVBqREJY6RM8QpQWlWrQCNmKjU17CKZJcgpKwaicLE713eYPPAp0U17hc9gg9sUZSBuh5xb23btrh8+QpcZUExHtx3331fmWxsHv/2t3zr67MFMVuD5/NZ+vpjj5z99B985nP/6H/7R//qF//u3/3Fj3zkg7/xwsWLZ+56xd1d5Sos2gVSSvCef6eD/SkUFJqmwqLt0HUefd9iMZ+hbwcQCF23wGLRIpWBQAasxGqLcRZOhqAYA6AZKGW0KbU9xljOGmo+0MiAqqyQJlGYtGT+IkVAS/6boihMvEHXeXiVwuokBG2+rqS3l0gIxzWUOArye6UgirDkG/k65k26c44/LibOiMu1pJTirlywZT5ShFamWNgLPGwFZEWSa8xDPaUoTggjiptQsynwdZ9/TvkeuaIo26PrqmI6tZeMsuHhJFfTaMXxgnzVk8CAirWVeODg4ZigDA/bfJ2SAM7U8rDGWp5+ie/HGESVi6HYxVPg66iuaqnG0qxqE7+/SQ4QjDGoKq5Uy7lSrTLGSLLOkqVnC7PUFznHg56P6Acvr0lkkra1iD6U/mzI++C9Z0BXdnIQg720FkeF0Qy7il5U5iTPGn6vmrrGZKverOvxWz78ux+9641veh0uX7uEvYM9vPENbyoDr9Ya16/tdb/0C7/0Tx76+kMfbEajFFPE3sEebOVQVdKtGwNGoxFfc5p/10XbAgKxG4YBMRKqukHT1KCU0A0dUHKvVl4PKs8cZ53k3SOMEpjeSg3b8jkrR0lJQFNawhmJSfgqg6pWq4jE8q2NhrWOq9USCngwia/ZaAvnbAG1GaOXnueUoXASh0F26MgAr1R5/lkhZ1OUn08DznL1WxK1OqYIpkLw/ZuShh8GvjatRiQPZxy0NfCSa44h4OfXtUTrtV7rtV7rtV4vT4VXG4MQI7pFh8o5QAOzxQKL+QLjZoRAAYePHNl43Te97q7f+trX3B233Z6efvJJdfLpU/ju7/ounPjm23Dm7Dl89IP/HG9727dic3v86GjcfH68OblY2abU/LTeo6nGCJLzi8kDFojEVSGJeAOeYmRystGl5zGrtUgJKqEAYpawkyTKg9A2QVKvKr27WrodWZYtyiQPoazelY05uD9W9lGgwEpEVTu2uBFDU4zSkOINaGcQhoE3seBsLecjeVhTia2hCRFaW1hruT5D+oVzRyjXbMim3wiFmnjwtUJ5TnFJzs2KSBLQltJa4D2BrbNGw1QOfvBo5zMoZTAej5kYK2r7ELguZHdnF3v7B9DWoOt7aKUwnc6e//v/y9/7b3eObM5+7M/8uZ8Yb4x3277z16ZXH33Xz7zrw1/+whc+Pp8vHj/Y3++b0QhHjh1F8BHPnjsLYxycrbC3d8DU17pCM67hrBMAmUZdGQx+wNAN0Fpj8KxYUyIedENCoB6TZgRra3TBM2QHBBJidxIqtzIaiviwxFUOCopzlkkqp6CWm2S5pozmIWtJbc7VVnKNKMWbfsZ/L22rArZKOVMuf08x8nsqf8h5WyZBQxmBliVoTUIJd0hECL6HpLE5U6wUnGEytZfBOInyxcMulp2+McBaBwqRa5QynTnbqiOD4JjeDKjIA7IxYv9EFGsnE8/ZHswDd4o8PGZljinDcj/J/Rh8KIRyJt5SIaUbwzbYGEK+RaGFdjz0HeqmBpFGMoB1DsPQwXvOnTP9mmRIJDhrAKntyodNiQDvO3F8yGGT4WF5PpuXP4sUC2gMYoENA1//dVVnk4LUNbEaaquKr7l2wZnryIPN0PcSXyBUDQ/eXbuQnwsy1InrROzqueqrkKv7DnVd8TVpDfauXr/y5BNPPHn3XXe/40Mf/oD75m/5VvzYn/1xHBzMgZSwuTUBAPzCL/7dP/zIxz70gc3trXh9b59jH8ogRa7tggIm4w20i1YqqwLCwEN6jLkejKvWnLFIgVXtZjTiw00CmnpcYFZ8cCGdwdLXrrRCCuICkOdwthBn1lQ+QCipVpX4WZ6f1yS6sFbL52wihGEQKJ5lZ0FkgFn+Pn4gOHG0BHEf5PdVld5l/heA1WBILzKJM4YVcYY8yIwfA6IGH2YJN0Ipg9F4hL7vMPQDoPj6cc5Jx7OCjwQlEZyUKMeP12u91mu91mu91uvlOPD2bQdtNCaTMZpxg+t716EGriWq6woH8xmOHD60q6FvevO3fqsZjyYpEfCWt7wFDz74IL77B74Xve/Qti0uPPeCjz48FyNdni1a3H7rMVTWYdF20EpjsZhBK82bEBi4xmHoeoTBS942IbJEyspATKVeKAsJ3GnLimfCilIkamv+/7VAd5LAfHJ+FtnarLWoxWqpkOWyDKVQNTViiGWTX1RBpZcbZ8sZQ52IIT15+hHlw2gLSBbNaIWoDSrHMJ8+eN4kgzfK3N3LMKXoAw91opJVVYV+8IAMp0hJal3yUAcoo+CcQd+yWmOshTaKc6SBCde5f9UaJk7DAEg9/OBxcHAA7wfYyiIMAQfTGQ4dPgyVcOFdf/1dP/e77/nQ7+8c2r3npZcuX7xy5aWvPfjAA08RRTLWYmt7GzcfP4HLl6+i77jeJXdaTsYbYpWMZYiczzpYY+GsxWw6Rd/3mGxMEAaPuua8X9u3XJESgCH0PJQlVs1CinDWwlWVWFkDgvelkoYVPCU9xZqBZ/K+5e5ZFMWdBzidZA4WF4CV1y9GvgasVpCzCBk6WT2yxnGONkYEgUMl4sZla9gMbS0rU1w7ZOTwJaFddKwIKyZCsxwpFHEhiRvLedO+75ewNbFB53wq5yxZSdOKM+AaQCTu8c0HJyjOA6likeGZtKh5SoEgGW35flqb0tUbBe1sBEDHY34qKlq2iyMqmIpVLypDM0r1U/ADAIW27zl7qy3atgNA0gPMXmdtVFGiQ/DcfywDRkyR6fKmgjEave8AqQqKPkr2WBW1VWkFa/l+YDUwiEJcYQgMlLLWcP7f8L0X5TCsqRsMgxcbdcWgrMj3b0iD9DJXktdnp4bWCkZXSJGw6OfcDx2Xbo/K1aAYpVqr23v8sccf/Gt/7b/sPnHf77k3vOFNsMYwpVwO7WaLaffilec/bp17ZrY/Q91UoGDhg2eL9cAd3EEzY2A0ahAGD68CalF2fd+jbmq+9toFW8o1H/BFigAltP2i9ExzrVcoEEGjdbEbG62LfZsSH/RAQIEZ4oXSx5slYJTn+TIOkXkMJBBBzu/mSAlf28uvZW0DaAU/545ko7kbODs2mNmnoWDkGtKF6pzBaypX16UEaAutDFv6lSlOB995UEqo6goU5T6TQx2jVXHmRAoI0d9InV6v9Vqv9Vqv9Vqvl9fAq8TKNXiPOCf41mNndxfjzQmGtke7WGA+mx+9dPFSbZXBhQsvqq888CC6bo4/80M/iL7vcevNN+E7vvMteOrJp7pxMzlIFA+uXruMSy+8AOscdOK8qR+km5ECDwEDb2BhFNM2s6LGnSEoO6OU4Con2TFWLgms8GQClcp1QyrlohDeYImNeEn65Kymcw4hsL1PaaZwKpZ5kBLg276opimBN85KQVsDteKmAxHCwNTipA1bScHxSGuZxBqjl07dBB89EFmFtpUtm0DrlplVU2kmDVvOfBIlGMtWPKO0dIWmol6rpARKFUVRd6xGhQFIAQADf6x1GDqPGFtUtYNVDuPxBkIYMJ/PoDQwqUZATFi0C1CMGFUN9ubXr3zk3g990BiNlNh6eOLETZjNDqAUQ6SuXrkGW1lM7BjeR3TDAOcsrNOYTmdYLFrUdY0jR45gun+AWbsQuyhbb4kYGHb92lUorTCZbKLvOu5vpYgUB9TVCEnbAsqhlKTflLK+JF2yWmiqqeQDtebsIaQ+SCWwDRUEq6xY5LmCJjGmGYAt9koqBy6iDpEqFwHFuHzfE0qePKvxfhj4cs7k76Rg9LLf2GiNkBhwlS3NSms4y1U9i/kCALh/WCdEGmRs5985Bj78yYM8b/ATdwkrwzneyAOtdRZQhhVhJFF+U9mwJ+J+VSWW4SSKlhGokY8emjJ1Wn7efL+hcOA42544PxuJr1PnKgxDv/xe0nnM5F+CdQauquDjQqqDpOZLs2JXN7WQ3iGDf5Subjn4Sko+LxVaML9nqtirWf8juKYGhYB+GITobjB0HWewNV9HfhgKhTolQiC+t4giKleh7zskGV7zQYeyrKZTiIjewzmGePGhAw/i3nsZkgz6tkVV1zhz6vS5Rdu2f/1df31za2MbfvBwhvP/APDhD37kyw8/+NCnjGZFHPIsVAI5qxs+KEJiWNfe3h4f5FgD7wNiiNjY2ARSwqJfiIshATDcUc1nLUgpCJVdIUlMAMTqdFIKStwFHHfxTJuX6yZnxzWWfeHZMSEPXqgVu/HyopEBeKVnOivFlFHPAtNatHM5bLTgr0zl0DLb/Zn8HRETd+qyM0jL78v3n60MBh/4kDEBRB7GmXwDlyw+xxNY5eYedz7sUUhI5IV4jrXCu17rtV7rtV7r9XIeeCtXwTqLuq5xfW8PddPAGI3FdI75vIU1BuNRvTMeNfrkmWvY2prg7JfO4iv3fwGvedU9+PL99+M/+Qv/Kc4/9zwG74eNzcn10PnFoc0dHPQzdNQyPCd4VBVTWm1VI/qArltgMtlAUtytmVRC6AceFECo6optnSEUQEqkgCiuNKXUCmxZVDKC9MUm7o8U2myO75LYorM11Ci2GWoFKKPFhprYFi3KAdSS9Bwple8dQ2SFr3wf3vmQwFuI+HvlPLIy3I/KJFMHilEoykxVpsBKSxQysDIWXmpvxqMRuqEHDaFkG430olIkkA/FLqoU26BVBNfWVPwz9X0PYxi8EwPB+xbWGjhXQWmhJLcdRvUI48kEfhhwve9gnMWR8VE+jDAK0XvM5zO2gSqNuq4xW8xAlLC7u4OoI8IQ4H2P+XSKuqoxmYwxeI9Ll18CkWdVSRFGGxNg0YK8R0qEelSj7wf4MDBIBqK6aHnviam9MQWEzhdyax74KBFoEKWRiUhiMVU5Ds6kXZXfR1Y8eRCSzG7eaEtuO6v7maKc1VituBoIgByMUCFwl6FL8r+2yjb2CAPDE5skG7NCpYrylXhTTUBKumTCY4oF+kVJBtwE7q3OSrXWbAVNbK7NPbskvzxJ1lsJ3EkbgyAUW83UM6TI13tRghMQ5JrUSkvNF0chkgB+OGdqYHMemFJxGpCodyl4LFFyEAp1hFIJpjKgkDh3S3kQV7BykEMU4bSD9wFaWTmcIPRxQKIo8CGGViXrpDNWw9UGMS4znsg2Y8XuD446a841U0JlXekydq5C9KwI8rNrYGUXOVvMXdkJwDAMYr12IB9gZMgNkZXkPMiFENA0NbQ2DM6qK8xnM7zujW/2SHpx8/Fb+VpMSSB4wBOPP/n8//hL/+M/P/nMqZNN04CSwny+gHWqZNZH0iPMLoa0kg8nHvo0H5rNZzMGvGkFUpypNtoU1wvb9Tm3nAIP+sYKyTgGUfz5mcVQM/k8vULAV1nHpQxgLpA0xZOrnGUua5tSnppXVz6ozB2+im37JTJCVABySnH2W1kj9GSS2EluEueqLWsN08UH7k4fuk5+llQcHiSANySFtvOw1qKq+JqKMaKqa4AIXcdOFej1tLte67Ve67Ve6/VyXtoPbInd2NiQSheFfuDsUlU5tN0CIdBGRDRHTxzF29/+DvzV//qncfudr8C9934MrZ9ha9Lg4Ycext7V/TPnn7vwxHQxCyEFVOMKFAlty0Mvb+4ZQOQ9bzR87KGsYhXCR1ilC5HUe6GsSg6QsgImP7ySnVKGEeXNrCCqZGPF/0uJpC+W/y5bElnU1bCOh8dMF2VLtNTGqCXgSEsvY87caqPLhs86B2ccDzQrNS5cGaRLTQ7E2pkSDxZasrnGMIRHGys1K0Y2oImreNqOAUZGw1ZVAQhZZ/lzDSt43gcMg+dXyPDAFSiKVTAW6q5SGu28w2LeQiuNpqlhrEHnOxjDkBstOeHeD+i6nqtifEC3aBGGwCRt66Qv2GE+azGdTuH7TsirFrayhTCdiFDXNZxzWMwX2L++hzB4BBkGKTGoa+gGxCD0XaKyEVVGganfWsBFlknTslGPktMGeJjLsCWopQqpMwitXCJ8KKJFM1pmeCE9uapcY0QECiSSloxvYsEvLgIBm2WAWGJrAl+rpEq2lQ9EeLDRKZNn+Wsts7qshmVF03seOjKkC1quz3zgojIMKpX6LQUUayznxKkMpVn9VkBRgZXhyABRrqsR0nlipdX7AB+CDL8M/skQrVy+6ipb8r5so+aL3xon9lViAByEPC2dqQwi00UBzHUvKSV0bc/3nADr+BApFTWxshUqx5ZdJL7e2NJsYJyGc5ZhQ1CIPpYBLVIUay5nMWMgBO+LRTb/7kQEbS1G44YBaqKOe98jyeFAIXZDcU2S/CxIXG9knUOIkTtfJee6s72LM+fODE88+YTPKnmgkJ8zwy//yv/0T59+5ukPbkwmZZBUhr9e5WpY4zDdmyIFCFzKIwTupJ1MJuwW0BXm0xn6vhPVWKGqazSjBs7ZAo3KM6fWHAWw2kklDxXYHz8X83WvkOKywi0KPCxXAknApNwLSg4TShFvZjOoZQevUkv3BNv92Y2hkipW6CSHihD7ODsz8j8MSQ4XExTlrD4T+I2WaiGBzymtUdU1V14lBaMsH6ARS97GCsBLni2UIqIPUs9likuHCeLrtV7rtV7rtV7r9bJUeGOKmB1MoVTCzu4WNsdbmC4OsJgv4KyBNQ513Ry/9OJl98STT+IVt9+JV9x1O/67n/tZPPrgI6jGDZ49fwGnTp08uz3Z/vDp06e/urG5ie2tHTz15FNwlYNWQF038BSQKKLrxLJoGP4Suk6yf7z/aUYNlLXoFh0y/Gdp/+Rhc1XtSkgMmiKx0WkjgCrpT5U9VsodojpXrnDeTSlwn6XYpJWRQVo248V2KRu5TH0lcHZOW95EMfSY1WGu8mDlljf+Qt6VGpiUmNaaf3ZjNPzAuTHlDMgnkGPVWYWIFHnY1ppJwpRkrFGsBhq7rFhJ0CU32fuhqClG1D6lIXlnBnJFHzCejOCJlcHgPS5fvgKjOT/MWWR+rX3Xy8/uEIRMO/S+1OVQZMAQd1ayjXU2XSASZynJE9oQ4GquwKLIQwRFgcEMPZx1UNogJCFji82XZKCixMAYCOWX0nKjLNoRv0aUbiD05gxvqY2KuQuX880Jcl2JqqlkKIYCDJSo+3oJTZOvo27YwIuaqVlp08RfX1EqFO0YqSibSmtYZWFMhc638jW539hog0geUUXEOGTWFveNqoQUqJBwc11SPqBJCmK/pZKPV2WKTzLQcL7bOSdKOMOj2H6PG+q98k0UYpBDA10OYyLRiiiXRCFNEgUIS9hcLrFRRnKfyy5tVntRhiKV2GnRdwtEIlhXicU5IoQe2gj0SA4suHbGiNIauSYnZfWe7eIUI+qqRiKFylTwwwDrFGCVHOYogedZhMiANOPY8psz0CoB3FaloQygs8dXQSqLwNdxGIDEyqi2CkpbPkzTQOi5v1ZRgqsqzBczbG5v6Lf/qbdbvleByjgA6H72b/93//TDH/7oP7v11lvpyuWrYs32aFyFlPgAQWmNXg2gFAWuB1DkZ9LgPVKMqOoRw+i0LbZjpyySSujCIK4FsGJKbPXn2IhCEscEU8KpOFkKXwE5Pq2WzgOlSj5XqUJHkC7fG9XdPPiq7ITJLwJEbc1gKvDBFsPb8nkP388a/CyJ0v+8LJ5DUd4T5HrESqZfcz88K8ZgZoMcdmqluQZtxS1itIOR7C5SwtB7AHQDrXq91mu91mu91mu9XmYD72QyYXWkcYgxYjqfw7kaiVpY50yIvjp85MjtR44e1e6Zkzhz6hSOHjuKt77hO3D/H3wZh48cxeOPPIXPf+GLnxjX449sbW++ePTIUexd20NT12jGDWZEiJQQBq4D0VDQxrFNUobQRAHJ8i6l63sow4MZ9yzGYkwLMYodVfJ6WizLKoGUDDJYWjELZTZbW6NHIgaWaCvqVUylhkgbAQdJrlAbA6s5P6uTEjJtRKSAytbQpkYfe86aDh5VVUNrJvCGEDjdKARXY8QaJ/Af71m1VlohCWHZOYfB92iqmmtSRRmMiVDXDQYfQDHByrCREhCil1oYtjSz+sHFGnnzZpRhFU1raKnd0IaptPWoQiSx98nnW2tgDVOUm5EVOmlC13aiYCrpSGYLoXMO3dDza5i0UF8556a0htEWVuyzQIKzlnOg0l8cKSIpMAhGsrVIKAMnb35j6ZLN3a45Y5g3ySotN9JlUy1DMW9a1WqBFIr6H0k6P1EyppSzh2BBMa3UoOTgodYyaEqWkjtsk3y9PBBphEKiEnK4YstxFCdASC1fK0khpoBEpoB7tDGS7+XOZB+G0kNKFOFqB1tV6NoFotj1K9fwdROXduVSZwQ+1FHGIHrPeVtxQoToy+vLtV2ZYMxqbQjELgnF+VoecFaGY1GYtbFQkUAhyJAr8Dgh3jI0iLgGR97bRLm+K/dec85Um2XvqTGsC0fi/H9IfGCSKGHwA1fGWAtlNCrN9lW+x7jDtRsGPrAIkQ+LPB9UsUvDADEhBi/dr0bU2gTnLDIJfvADd7aGBFgDawE/eBhnBYokVGxikFmMJLVBAaFnZbtyDs7VoMA1RrfddodNSVUPfO1ruPMVr0C3GC7+7M/+7L/67d/69/98e2trOjuYA8TKb4bvhRDRdT3GGxNsbE4wnU4RBBg1nkww9D1a38NqjdniQFwOSg4TCG3bcXRDDr/6oeMBXQ7oZMZDpISqqUAxwg+RD0t0NqtkuNRSoc3mmmWtkMQFpDedh95lxAAqZ8WXVmesVBLxpcgUcYhHh1QUWn2Ua1dJDnnFWi13ekwJGg5KnrvMO6BsrOcIABSgk7zfBiYDroyGAUMNtbFQicnW+TrPBzbOrnt412u91mu91mu9XrYDr7EamxubeOmlK1BKo++vo6kbbG1uwrD3bVQ5d9Ndd92Jt3zHt+NLn/8Crl66hHvf9yH87gc/gL//y7+C5y9dPv9Nr3vj048/8fBZ0ymoTuFgOkVTj7GYLUCR0IcOxljU1ahYyaLvOVuXWP0zRiNIR2YKJKRTgwgFSgFJcUY32zMpK64GSKRL3UxKS+iJeEyRRQOtuCKIEm+yo2TgspqgpLomCRBGm9UqGpnAFKGuR6BEMM7AJgsfeiStEGNCinzyT4lgrIHRSiivDHsJwReLn7UWdVNj8AMoCf01ZuIpKychEtNotYGCZ6uzNVBCkdVgEinFIJZDC0pLgBWBJIPnYWDQjBu0i1bALEAig957tuHmgSKw+tmMx1jMZogxoq4b7jitG/ihR0pgu7pSMDGBfOCh1VreNFsLP3hYa6CSLhVQVvo027ZHUzWI5JkwLPlA3u8qUfFTgQ0VEGqG48jwmPO5WFHzs+rHA5RsfnM3c1p2Mhf7bx6SeaxZsT9rscprqBShZCjGCu2ZAOikGNJEqvS9sntSrfTw8kEKMhBKapCUUJ7zz66liiUDvbhvWiz2AtfSlt0RXGPF0YBsKVbKLC3IKtuTpaNZBsoYYzkQgmbgUoxBbM16qW7LEK6t4YMqodtSCmJWVTcA4fLQ0LUdv0f5vjGqdM8SEQeP5dBCJ1Ws+krspkmeEUazk8Lkmi5k+FEqpOmIBEVLtZAUQ8eodMLKcEKqZEIjBe6yRoJNWgZIX6BkKqlSi6MURw2GYShfw2jD9VpQ0NoiIi4vzqTK4YwT8rqXaiYNtsI66Zwdhp4/LdL1h7769S8bXb359z/5hw/f94l73/fFz3/uo5Vz8yH08G2Qyiiu66nrBloHaM11Pm40hjUOcYilCipRgtOWDzeUYhs2lhbz7JIB8bXFz9b8DJAcdpJrJvCAraSPulj35R7Rmk8rmbNAWE6zfA9oLK95kkK3VG5WcJWVKLz5EKVQ9YEST4lpGUNggje7WYKP/O9D/vjsKJAe5hCG8meKCMoIHAtMA6dAHEWxpnQox8gHf1ppkBwAUeJDHi054hT4gIOwVnjXa73Wa73Wa71etgMvEeHyS1cwGjXcwdp10Jr7TCfNJu649c7Jm9/0psMUIs6cPoUXX7qEY8eP4pbbj+Mv/9W/hNe89vX42B/8wxdecfddB08+/vBiMZ+jamo0TYWhawFjmILsAyB5u94PvFGylitQAhMwo3SJWmu5W1K6LI3WAHGlTu64zPVEKfGAmYVApZaqATSkBxcFehKJeMMjljbeoMUl5MhA8pZYko9JrJApgiiIksob6K7lHlCjOXubs2xVNWJbtVRZKHB+j7O/hPHmJsKQKbEGRlv07QKVtawkGOmmjAnaVVCJh1BrrAzqJFAuXSqMbCFZi52bGLKVqzuUEoulysRcD1DCEALnYoU4rKTWJoQItL2ouRbRBwTwIML0U1YKdR4Kqoo7gClBWYWqtqW7mPPSoVi3IZteQoSxFjAGIFrWyCgFa/k9DoEBRdZaHoRD5KFG8WCSu5lRNrrLuipkQFXu6MxDc/44tcyBJ5GmqABk1bL+Jya2T8pwKCJU+bm0Zms4W+Q1tAypCcvcuYJGUlyFxP3O/PWtMoh62f9MQQBSCtLrK3UtkYqqTZKRNMbywUciGOeEFs3U80SsxiaQqHXshrCOq4ai0IeTDzyEKM0DkVoBZClh4QZipUwvld+skOUKpVUqb8IyL6+UqPWJR2RrxWEBJkorzW4CKl+UB36Gd/EhlELuyF0qxDGmQtXN1m6lxZYKvXSAJA2KfglAsgakVOk3ztdc7SxiCoBWiJ77w5UQp4NnZZMkOuE9H8DFQcB1+bBObO62stDgWiSSa8BoCyIeopPWSBR4oKKEJx574pn/5Vd+5ee2tnZvf/zJx57qh8X5phlBW87QMxuP2IESgLaTTl3DQ+R0Oi0VQEYy0AzV0kIBT3zN6SSgqSTX6BKKRongKoeYOKNNKbFDQfLQEOs5A8mWnc+QOznXUil5/wh8vWa3TYas5Xy5Sktiekp5EM796RwxWLnQZNjm60trA63A9XSU5BBTMuDl/pZBXv5tsNZBgQ8MUh66Y+Y88L1mNPcaU6Sl20By9BR0iQNwLlkVen4Ifr2bWK/1Wq/1Wq/1erkOvPN5i43xBJPJBnwI2NzaAFLCfLZAXY2SSlRtbW9sPfnkU7h69SX8pZ/6Kzh35jy8J9x05DZMNrehtTl49Otfm/W+x3g0RjfvhLLK8lruuI0xn8hrhrtInQtvojWCH6AFrBOzWhBDDoHxppZIfK56CRiSvKHKm7Bs0BQQkFbZ/qyXm2bFg4PRVr6GbKSURlKArdiu23fcIRwploqakjuEErAPYJyFNZyZ9CqCwJAThr5YIBG0sfBirxt6zqpaozGfzZFAGNWNZDwjrKnQ9m2W/DAMA6y2AtfS8DEi+AANzpwZy5sv33tRBjUrq6JwliFNacwFUqVheMOGIAcMvGF0dSUdl6bYx7OF1xiLYfDQRsHVjpUkJHg/wDgD57h2xSqLkFXtrJYrUzbASmlWr4MHEbEV3FoeskWtTUkhSkbSCAU2W2yzgEQp15IIj1XlQVdIzSmnvOWqkMsnK3+FKCuk7UzlzlU7ZcOOXE+UrZecUVzNDuZrlJVHURghdS9Y0l81uH4rk5B9CLCO66vYsVqOb5aVKzHCGK7ESSuE6ZQATx5GW0QKxY6cBLzGFGEq1tyUSHpF88ucYUR5QDQrUCldfvj82vIn5fsx9+tSGRrSShUQHxDxwRGku1gLyIlp26YQdPOgU0jHyHZqdnWwY4FW1GQSN4Au4DCGX2kenqW6SsmhipZe1tXfufeDgMgitHJwlQMN3LtMKWGFf8b5WMcHOjFX8YChYjxAAVrlkY0PIqxkirXWcKaSgx/OyFtnkFLEMPRwzoF0CqfOPvO0Uvrpuqoxbsbw0tMbQoQx/NoESqikqzofuogNhGt3VH7P2KLro8cgj9CcvWULOwnRnZ+Ngzx7QwSzBvKAKa8t08JzFjfHDVSJbCwzrEpq29ISnJYPTmg57GaFGGml1Cor9EkI+ch57nx7LmnIMnIXm7eW+ji+LlccB1GVgTXGwIccEQVWmCj/2yF08UhISsNYh5T4foLmPurVnC5n8Fn9ZSeCWe8m1mu91mu91mu9XqZLj8cTzOZzXLlyDbPpFNZZNFWD8WiC4D2uXL0cjx+/2b3zB9+J55+/iE9/6tPYm03xT/7ZvwapgPe977fxyY9/srv5xAlvrEUInMnNp/9KadRVDW2U9CAua4SywseKrULV1NDOIIgympU50JICW+BEYndVWjZPaQmPycCUFJfWuJjrYlSmjGZqrWQttSq9ukzhhQwJgLFGamggSkjCEDwiWBGp6xoUE9q+Q0gB1jjJGzKd2FiDkLjLMUE6dVOCj6xu1nUltGehR4PzdUwgZiq0MQYhegyh59cnAdYY/vymgTUOw+AFKsR0ZrYm8jBGAnph27BYUZFAMYCEhJ2VSvIE7wNM3sgphcoxLZcoIIGHba6L4SxyJEJlKxlME/99ZJUpBq7YQf7vDH3SnNnVojwPfV9Uwyi1TjlbmhIhxCBqOeTAQ4mDlPPbma6cxHOpipqUlSQhxq4SkZMSpanolYXQjLTMKOaROl9n7KrkzXDK2VzwYKeguPIGAnBSS6iWNlqUXAKlUHpsvR/k8ESJWim1LznXKkNXUjnbyDA3mbrYoisHElpr1LbigVRsmDzg8w9DKQlxlge0nNmEZGMD5UOUXCnENWFFOV85gBCfbjmJKMo6lgr26uuYbaZKSNNMESepbnIMfIoRMXB/qnMOxigYeQ+12K2zZZvfe1aKiRispMHXra0qJJUtvLEMrz4ERJl62HpuQCDMZjMMg1/Ss/Nhh2Y1vB8GPqgTJVVDS9c2VzUZw5R2QKPvB7R9B9b1jRzgEJxjEvx8NudDKefYUWEMrK0w3pjAOoveD8L+SuVgTgGwmntgozwnCBEhBrjKYTQZo25qVHXN1WdCGLfWYGOyAWeqMjMqGKmw8pxZTjwAUyIkyX2X9wuZ7E3lGuaDRQVFqlDMUSjjWLnmVFGQy5gq95xKN9x1WPnhil06ibWe77cEaHkeyHWa7/mYhDyfB9eUDzFzppydMF6qsax1TGOW+9k6s+xpV4DRrDIX273k7vl6YXU3xlXi/XozsV7rtV7rtV7r9XJdFkQYjxo09RgJhCsvXYarHCYbG9ja3kLvPQ0h4srl6/jWb3srbr/9DvS+xzu+662omxEqNcW4ctvXrh9oo6xYvKJkQ0XV0Qrj0QSUCItFK8OqcDmNhnUVQ1+0XvYtEkN6uNdUVK7EVjbeuDJBOBIPQQQStQbSSZo32Ss7EUqwtmYgSd7MKumxlZoWrTVM5cownAfOEAJyq2pKPPBVzQgqEfp+gDEOlWSBFRSstiDNdkmkhMbVDONSgDYMkVKKLZOmshhmrNKFISCmhNrV0Faja1veyENDOVeGopQi6rrGMHh0XStWvITKVWUjS4EVJQUFIyoFioU7FGqqXhmwMp0UkTD0Pat/SsEnv6KsMbAqeh7AALZRtos52wLldRiGXjbHCSkxvMhaC20Uhi4iIZYBj+FKktWFZtUrxjJ05I2p/ApIFIXAbJFSFGsyfyyDa/i9TfIzp5Xqk7RSYbIi1pb/zrbLVT1J6p2loordBCHbIWUvXzbbYg/WhgFgAMTWKtcakQxhCcmgdMAaw9U5iST3m/h1VtIvqjSWdVqkEMGdxEkOBhRMOQQZ/MD3gHTQZphQAh+UZPJ4ydPHIEOvvHTayJDIh1Ep52FNbh6iP1kuU9TsXHvDAh7fLzkHHbOiLF3Sq1nq4INk5wUgBbbSKr0cXDL76wYAksCMrHRlhzhAGy31MgwgiqJK6jz8xCg/x7I6SiuzPEyz4n0XGzgpgk5c/RUiyuAXV4bDKJlpaw1iDIieD7dUVn61grEaOvJr6LRFTDyA86FDwtD25dVMiq8lY/g9C0GOEsRWS1FquJQGkUEYInzgjH/lKiRK8IGvF+/Z+WGsgfcexnAFHXziSAHEzUBU1GjK3da0zNsqIWlro5Gi/M7lCljeO5CDBFVqneJKTEBD5TgBVkjdQCFhp5V7qlTP3VAbxh9gjWboVfTLzC+z+ZDtHEoZASCyVdmuRGmsYyCcH9i5keS5H6I8UzQfE5FUyeUDG+R/l4QOnunl67Ve67Ve67Ve6/XyW1oZ0Sq0QghcT2ONQTf06LpBWWPiEPp4fX8fh44cxtbmFvau7aE7mOL4LTfhwvPP40d++Ie2br/9Nj/4Hs4JXEktoVB932PeLtAPA1fj8NQgEB7OJiImOTFfql6JeDNR1RWM0qWWJ9fCcN9kKBAU2S+VXlYt6mQSOx/FiOA9fPBiTVVF7c1fm5XJKB2eA+fEwpIIap3DeDyBcxWP7NrB2gp15aAVKyEheAyDh3MO1hr0/YCu7+CchbUWVVVjMpmgqZh86lyF3c0dBM924tGkxqJbIFLExuYElWOKciSGZXFNEwOwcg2T0mJhVkrULpXPBZAQiyU0BvFpiqKt5X0gks7byATqnAUl6RctROQ8KEpXawhewD2GrcvQEs/NPaS8CVXGcPVMjBiGoRwM3MAVk/eKac1/YlAtAlASRTCJVzuVHtdsaUwEUFI8mNGSFLv0oaYbfpcy5ckhjIhMK7ZO+TlFTWbwGJWPzo5erVYGRoWisCWBneUBTSvDCpPSQnNOXNFECYPnDlWKDKZi1T+wFT9yt6pzlVCMxUArnc0kpN1h6EsXrNIKVuyYUV7PECLfV1XFfy52bB6kmSCsJaupZNOfLaDG2JKbhQK0KMpLsi4t+0qJs+V5SCnW5/xzS9du7gamGFcqpKhU32RXgDGu5EEFuy3/yW86iWoNMOgt+ogUuJIoq8wh8dfVypTsaMrXtljWY3YIaMP5+BhFxCb4yDndGJnWnnOrpaJHhkYmOztYa/ljYwDFiL4bAGg0zRhdz24Na6WeyziOBwjUjn8ujZQUFu0CQMIQBqa515UcPDAhWEGJ9ZkH2iW9mF/fYegRUhAQF7+3wQ9gMjfn7DliQpxT1vlQMLswDIwyYg3m50hMkR8j4g7QagmPK8wqQoG7KbVEvaWEGyFzKpX7I63Mz7nHt+Da5f9qnVuU1BImiJXsPTQKVB3E/07Ia0L5sEUeKvyckd8Vy/hLznwncRRY6/gQSwrVM0U9U8bXa73Wa73Wa73W6+W5bDvn3soQPOqGrXDaGAy+h49Bz2azrlsMs3tedRfOnDmFT3/qU3juwos4cdNtePe/eDfOnTvnf+BPv/P5M2dOPeeshR96aKsK5MUotnDmQVLLTqUZjeC955ynwIQYpBM5g6cUCMt8WYxMw0xRqkpWMls51Jkk10YgpJWqId5siSKkiPs+SUHpVDYqla2htS1KSAZRUYywjrOzxkc46zB4z9CnEFDVBvVkjKEfYHSNSD1/HhH6vsd4PEJVV1jM50gEzBdzzGZTFCkRQNd1MMag61s41Ljjlttx1VzD/vQAMREm4xE8PGhgJWg+70rHKoNXCJ4irLVwrkboW4bjSJZP50qdRDDWFiWXpyYwodRaBmIlpphCMoPGOBhRYBW4ogQy1PAhASvg2hgQWbanizqWhzIGUFnJbftiMTTayCBAJR/NlVCR3wfJaZZNL/cscTWRlmOOFFeYyiXEV2qo8iZcJb6eCCQW5jz0ZgVpacflTPfSHcB/pwpkhyWt5WBscmYSKBZeCDwspcRQI6Hr5oE7hCjKLMOmrHXoxdasleIDBYpIWpS2xLCsph6ViiHjWGUnQukgTmqZWfSeYA3nxKMM3loGGe/58Cn/QgpsMSfiSqVIedhRK3CqBApMAs8b/0RRYFis2t5gExf3QBI1T8nhBx9A6XJfKj6vyLyqMviQ1BYlFcswLc1S8vFJhnnOqOd8tdJGrhoNCNCtdA+nlXwp0srAm6AkI2yUQa4gQmS7vJKaHiBHmPnzM7Ct3Eulk1UcFXKIoIUmHKN0Q2uNlCJiICRwjZKzDtEzcIvk8wzH/7n2Rq6hGDy8HEY0dcNDfZIB1HC1WSTOIgtjqxCeY4wwSu5no+CqWrprNZJJiF6AckZDJ7O85rOdHzkOIoOt4cNNRBn01eowyxpxPizJ/PMM17ohk5vSir35Rg76sg1spe+Z2FLOZyax/ExJ4inFFSK3q5ZAsMp/l5VqZMJ0dvRoROLDoQytUnJ/WGehtEPfdit934mZBuVeWq/1Wq/1Wq/1Wq+X3cDbNAxK6vqOeyJjRIoexjjUtdNd13WPPfXotccefQTtbI6uW2Bv/wpedc89+NSnLuD1r3vDuc994Y/ed/L0qSe2NzcRAlOMh26ANgZaJXgfBZqiS1fq0HXc32pZTeJaHj5ZTxDLnGREXVUBmSrLgd7St6hloM6boQQlG3AmCJusbsXIypoQaNmWqqAV01TZ0mmKDa9yXMEzXyzgqophTIrrQKAU5osFNje2EaLHfD4HJR5Gbrn5Flzb32Nro2Ewzmw+xdD1/7dUgFtvuRUawPXpPnrPm2qmV3PfrnFs7Q4xADpBC4wmp02VYls1ZxDBnagpwYqqm0VxnQmuiaB5LuCqFiNdugKYUoBsxmXjmO3mSiEEggokSq8ulS6UmGBLYvtOYBAS98pGQIZooxlixpZYyfOlVZgMFYIyDxZ6pbKk0JdkE63lawjBVTKn2UZ7w0b6BgtzBvvkAxRdNvkqLb9X6enVEHsylq+FzNzZOp2xSSSqZpIuUq34WtZawYAp1Pn355oXg0iB1TGlYR0PuFGB3QlerJxJVHqTq4KWNCruY+bcbyAZJaRLVyf+ehQTjHNS05NEDVZL8jGWxHMt8LKYe2a15utB5ZcwreTiU3EXMBDLQFGS1yPDwRgMlXt2kdKS9qwBnXLPtMQNpF9Way1WYgGDxTxgljbWosrFXCEl9V/5QC0fFCmtYZRCAluQk0pwcr1yZRdnc5EPy4jz+EkJVCnxwLXaH5trtVhJDzcAvaLY2Zfd0PzfFPlgZj6bARqom5pV1MTVQipxZRK0FlCSFJZrrvjq/IIhaJqjF3VdieUWcFUlpPRUqpKU0nLYR9Ar93ciKnVvJDVKWI0B5FiB8BkCxaKMIkct8sGTRqHCl7c9S76rADQsnyNYAcYtk+B8gGW4jYs/xPBBmhFSc74Hl4org6QqgZexfV0OWCQOUVRkUuU+11ohhiCQNcm223w4ZtB3LfeYa6kci2L3Vsu+7vVar/Var/Var/V6GQ68bTuHsw4cu0wYjUbofQ8DhZ3t7XR1cxRevHhx/73veQ+c0jh8+DD2r1/FI4+3+OZv++aDD3/ww7955tlTH67rUZjNF7CGN/A5FwiBMWXfKqt6krOCRpCNPStGqVgPYwZOyTBKuYJEICU5B6kKWVcth6U81CEV6i9nFQU6FXhzx3UtBrZxSJJ1c3bZyWuchXEWMUXQIDa+RUJd19jZ3kEzajCdBjQbm4gxYGtjC8Zq9F2LfuhhNbj65//BuvD8hbKJ7qYLbGxtgRDgvZcKKYvpdCq/t2FVIxIiBalxUoUMnIgJztGHYic2QmglUTcpMlma876sUGtkAJUHwBCjXAXCKhSVihIGJ1HpKOXvscwGll5MDUQKUkOCFagRlUMNBkABK75GKJWBVGIbXc3YqhtVKBKKrip/hhtU4ITVbPeNvZ3l26obP2rZ2cv2x+KiV7ihgbN01yqmTGu1zEZCDnLYjSBOA2ix21NxOVCKnI2UvlSjWfk2yAFm7joNoZMBhjOKiApWOl6zvTWGiEBcyaMF4JR7rNu+BYjBWEywlqysAKvy/aNTGSX5dyR+hbVk0EFpdZQtOWaVllVL+dBASRcw5bMGSlxXlmvBxOIMtaxEgmYAER9ukdDX85vDXddKK7GZs8qoqLz7hSdAefgs7tiEkCJb0eWkw8dQri8th3R5MM3kdz5cSKXyKfd+L/0BQhqmEkQt0L0l/7ucFEBrViBjIhkkQ4YRFMdLtvs7ZxGi53hqJMzjwL2+iqFyKeZ7XMGa/B4G6dhmxVnpFWU9A/pkANda1Pk8RUIOKjXdQCnOL3+KtARWrbhWOD67hFat3Gmrky5KXKDcbMXus9IFHJEylV8qwiCRGbYkp+VwnBRfI7S8ZpPm50e2yEPAZ5BebI7O8PtBSKgtO3q6dmDQHgUYy0M0ESFphRRXXA7pRvV5vdZrvdZrvdZrvV5eSw/DAGUUYkxwrkbtagxdjxADXnzxBT+fz8Oh7d1n77n7nvTss8/hE/d9HCoBf+U//0u4+aabPv/8C8+/B8A+SKywiuFHdVXBWoOUFKq65oxZJN5sabb3FaInRVCMkvlMha6stEblnGRslWQLdYE9LUcNse4aKzlWyJAcy0CUwHY+70Ohv1rnAJXQ913JyBIi13mEgLZtpV6FN6NV7QSUFdG1HQ729qGVxWSygbvuuQu2Mjhz5hS6dg6SHO//25WEqHuwvwciVlai5P6MZuUMom64ysqekQcWlYdhLPtRtTasmGve5EYKUIbriay1UJZrmRIxA1YbA0CzOqdz7Q6rTybDjyRLm22vucLJGIPlKCT1JrnDVV5XEitqzoAW+FOhJC8HnxuspNBQmn+25ViqJGu5pKmWr7vqfVcrO3ZgSRPOmb5VElP50LSstcm54DINr9pjl32jy00+D0S5ciuJoqcKVVwqt+TnjrkHWgYloyxHA2ipRKlMoaZMXWZAkhbrePSBFT3DyhbnbzVC8PBhEOVaI0VanTZKb3SM3MOqtFCjFYq6nW2hOXdJOg8Vks3Pv5vWMkgv/cp5WEwrROoonbGr70mSvuelar60DaeIokKT3COKxFZOfNijtII2pti2s0KbCvEdhRwuTK1iay7OEUoIFOXal4E7UclOk6IbKOEE7iqO8hxUCrCZI0D5GoDUrfHIbx3n3EMMfMiQgOAjAMPPT8WvL4yS+DPnbZVRUFYoz0LeDqJe5yhHjAldO3C+3/HwG4kYfKZynzNBmews4H5Zkv7ibEMmiiUTnl9HvqhW7qoVe3I+WCmHErk3OgOfsnWgwNCWH1funYSSIS8HI0kJjEwVC7GSQ1TQUl1XK4o6oOG0k69HBYClDVfcpYTSpUuJJM7j0S167lGXj+eoAT9z+fCEv36OJSiztjSv13qt13qt13q9XJd1FVv4iBJm8yk0FCpbwXuPa9evxmY8wn33ffz3965ef8e1a5e/ezrfwzve/p349//m3535rff+1q/3Q3vS1SMeSmTTl5DYwqpYHfTDwBsoAIMPQEwIKsEaqadJXOMCSmKBZbAKj5+R87hitU3cBCObZ1pueGXI5VN+sbUqHowo5d7MJcE3RoKxGvVohKFrQSmhHtXcndkNUMagqh2SgFyUSvAhYnM05kyx9Ao3kwoJEWdOn8H1K5f/P3ujsu1vc3MbxhgMQxT1hPPQQz/AKLYnR0RYrWCMhiePBN4M8/DAeVAllT6IaZmfBaCIgS4ZHBZjhDMOPhD8MCAoXTasIQbORqplf62wjKQSiTfeRujE2e7Ke1uDhFgykDH3BOcCoJQ53mwdVdBATMVOnGT4kRdnqQ7mDW/Scs3wxl5DY7V3JMnHq/R/UYeS86ZqZYBdHbzkc5eBRXn9ct8zvwLQ5a+XmUcS5Yyru3gjH7NdV6ziWgYESAY5hAwdS6LA88FGzHpiAgDu1w2D58OLykpueUlDLkMfgCEFHpoyCGiVvq1iyWEmsdOq1dxtbs8lWjkQkKEnpkL+Lq9xLsLKFUTZvZFVdbHVlsx9VlzLcKWW9VDSPVxIwFBA0ohyCeRhnBLBCGwr0YrSqFZfs3TDYQUEXpd7Zvkpo8q1mdKSFG+0wRAHycirFUdrKod1Oim53FgJJrEZ53nPSkVYBNu6lQYQUOy/ORtNMa7kzgUGJ4qzhkGgAGc0ok5I0IU4jxSXVVgy0FW1g/e+HJ4wkElBW4b2xRCKCE4rVuN8gJQEEpfEHp3k8KUI2HL/GGXArvNUWrCVVlwPl5aTsM4ZYBBiSCVakA+6VAbZyWuiBDgGJMRMkpP7K6vtUUBb+ZonqQ0qHdkrFvTcw55ru7TijmyAyiHIxsYmhmGA771k2nnwzfZ+Y5ZVYuu1Xuu1Xuu1Xuv1Mhx4m7rBdDZDVVdoqhqLdgFjrdjRuPri/PPnH//qg/f/s/Fk/NJsf/aqb37zt+5+9L77/s1LVy5/crKxASiNvusZIOR55GUVtSp2PIpB9piKoSopAoqgk+EMqja8sZb8Vd6ERk9SB8O50JzP5OFCFVVAa83DNqXVWlBoDVSmYmW3iHhs/+0DYTy2cHUNDAPIE3ofUVXcYWqUBmmNwQ+icml0/QA/9BjVDY4cPYwLF57HlUuL/5Pd7/+r1bYdRqMRhs6jqi20smi7lnOzSQstOXCnrVWy2ebBzlUVA4uCKM+Zkh0CklYlR6mUgTHLjXOkbNvU5bVVRrOqJrbobEleKqiSYZQhTWmuQcnEU84ZL9V6LZtQKlncTPJdITnTUklKMu3m2ZNV4WXPs1rJ22aLap7MFPJAi7IZXwJ1pIO1DLjyuiCr0rlLVHbmq+VFksMFSFTi5WuqxZYM6TONQRTwFasvMrFcpRX6sAIlL0qXKJxFUcoQKh4EjDaIisQtwfCdPHzGEKTWiSFkIQzso02inGow6MgnHiLl986vRVqph+FKIzmQ0PlQQMvPlnPKupCWs+amEt2Qg1blMCAr7FQOMVLO3+LGOhoeQfnzSQZXfg85opBIlUEnUoSSAUvloTTTuKUKqpyxyFTFZGmSAwwwsCpfTepPKJnF0gyoxKR0Svyc0UkXC7XVBlHLfUTLAyaKAuIS54SXjLxWutj+rTGIgW7ItiZAhi0F73uAgAiIQqmhSTqcNcc4whCLUm+Mk+5sz12zAqSLOWce2Qqf6efMkVPFLpxjJUkI0UDut04lSECJf6BUXi9aPoeK/irqrDJMqQYhhL4cYCkOAReXR3ZJ8HPGCGFf8y9e3sMEZZYDOt+TrNCrwqnL9WXLCrFYDuMI2rpCRlfiWui7TqrrovAljKjOzCiw2mKIfr2bWK/1Wq/1Wq/1erkOvMMwwBoLqzRCDNz3GAN3FYJ7QTXMYr5ovwRtTjfjyd3v/cD7j5x//vk/ArAwxoBiQvA9tNawrkYMnhUNyqf9GjziJCgZuLRY7vL2USueTnmTKgqfKHBZrWULqGarGfEQoa0q3aY5u5soSW6MN70U6f8U0XSuQqUtfDcgacJkMkHbdYWQ6qxC3/echdQKm5MtVE2Dtm1BwWNU1zh37hy8ZGL//1iZ+Dt0Heqm5nwhsQpWNzW6rocPA7Y2d6A0sL+/B2XAncBixcw1TEmqXbRAvbTSCEm6WMXWyh3KtkB+mGjKGcMkakzJpCpAJc49FluwqPacxYvQ2kIZBZ0YHKZE2c8gnyX4SDbGlIeT/L4loT7LHlf9SVbMkr5MaakOr7B3CpW3ZC7VarIwLQt5M2snLTfLaeUiylndPDDFlVqstPJDJ40bfkilwVnZRDyQyucTEYwMWTElhiWJCp+QVUf+s0ABTjupIqICnXKW62O6EBCDHCwImRu59zdFdhhLxp4d66r0iqZIBRqmNXf6BtnMK6l8ikVaV2WE4ez0Uu3PALr8u5ZDh6zaZaX9TwDBlFrhXyvcACVLomQrpUArf6cSlc7UrKgqJaTttLSOU1oenqmUVgT61Q7ZZZ+yysO24nyzCPcMvgokarE8p3SCMgk6ivMkLTOvmXidlV29UnlDKZbvkwd9JfdOpp+H0JeO4EgELSRipRnsl5Dg82GEvHT5AFApDe1MUWz7vuPDkXwgAT7g0kaX52ShbishicsPnqTrXCMr50sMWb5A1Mr7j6SWijuxm8MoKyRrrj/yYQCRXaqucrCkjCn3v9FyeJEHYCI53FLLA4+VuAH765fKrpXKNMjro5RlCn2klQFbLTP0GWqm+EDKDwFGc8d1Els4NMqz0we/zvCu13qt13qt13q9jJcajyYgSoghoB5VSESoRyMopdG3Lba3dtHOW9SjerS1va2HfkHPPnfeJyDYypbhMkVWicwKHVYZVnr8MIBSlA5PtvZpgSY569C2HZwzICG3Oue44zJSyTrGtNIfS/x53PUZoJWRLFUqypKSGg5trAzeDFjJw1nTNPC9F0XDQlcOfuhgbC2bfkJlKyitsLO7wzkxBbjK4dTJk/+/Kbp/cjXNBE1Vs3ITIrRx6Lo5JpMJhr7Douuwvb0FEDCbzQqAKRNvM2VUSQ0HUeQsrGYVnvO/Qs0leT1XlfNsay31HmllyOOaEtwwWGfldmkTzZtvo6T7OPJ7q3SuBFJLoBbLgTyHlv7WG5i8ZWgspxnFcrz8C23YLhyJJFOqVkbkPOiWqRi5PgcQTVG+SVoZkBXSDTMyq1hpORyqbMtebsxZVccNNGNtlNh8dVGS871FkW39SEznRgJCYIq61oa7og1bMUlyoTGJSgfOfGYVvaoqQCn0XQ9jtNyzMpBKZVESAm+K8h5qI4TzJBlSGZKk64oSyeujQErBWS2HJQnWVtzFLWolH2yxHXW1XzkJrTmPmBDYlVoKiqUaqkDrZEhh4ngqTgOUgZWW/52dr5L1VSvD8lJ1TCX/vvoOL/uFc2c1xwMgB3ECiy+W/WKRL6CuTNEGQvSw1vBzsMD4ROFVplTsZEcBMpSPcu2OkaqutHx/Y4LVFgEekTh+EKQ3XBslNWScyc5nL0ZzdzKJvbfcf2lJj8r3d3YyaLMckFNKK6+cQNdEzdaZaL2KPke2NetlVZTYuzUUEqklXCxxhZMyhonJKZcC8fdkWNgKmDABgULpi84HZVoiMEYbmMogROLvHFipzRb9bBknAHVVQSmDfuhhLLubknx/rTQiAoxzHJ0Jqdih8wprlXe91mu91mu91utluf4PBYESAVsZNmgAAAAASUVORK5CYII=", + "lastWidth": 330, + "lastHeight": 65.24058532714844 + }, + "color": "#00000000", + "bgcolor": "#00000000", + "shape": 1, + "lastWidth": 330, + "lastHeight": 65.24058532714844, + "imageBase64": "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Y0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALEwAACxMBAJqcGAAABoJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDkuMS1jMDAyIDc5LmI3YzY0Y2MsIDIwMjQvMDcvMTYtMDc6NTk6NDAgICAgICAgICI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiB4bWxuczpwaG90b3Nob3A9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGhvdG9zaG9wLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCAyNi4xICgyMDI0MTAxOS5tLjI4MTUgYTI0OWQwNCkgIChXaW5kb3dzKSIgeG1wOkNyZWF0ZURhdGU9IjIwMjQtMTAtMjNUMTg6NTQ6NDQrMTE6MDAiIHhtcDpNb2RpZnlEYXRlPSIyMDI0LTEwLTIzVDE5OjIzOjMzKzExOjAwIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDI0LTEwLTIzVDE5OjIzOjMzKzExOjAwIiBkYzpmb3JtYXQ9ImltYWdlL3BuZyIgcGhvdG9zaG9wOkNvbG9yTW9kZT0iMyIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDoyYzZmNjdjNy02NTI1LTdjNDctYmU3MC01NmFmYWQ0Y2YzMmQiIHhtcE1NOkRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmNmNTZlYi03NTZhLWY3NGMtYmYwYS1lM2JlZmY1YWMxMWYiIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo5MmE5MDI5Ni1jOTE2LWUwNDgtYTM0My1jNjgwYmVjYWNkNTEiPiA8eG1wTU06SGlzdG9yeT4gPHJkZjpTZXE+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJjcmVhdGVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjkyYTkwMjk2LWM5MTYtZTA0OC1hMzQzLWM2ODBiZWNhY2Q1MSIgc3RFdnQ6d2hlbj0iMjAyNC0xMC0yM1QxODo1NDo0NCsxMTowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIDI2LjEgKDIwMjQxMDE5Lm0uMjgxNSBhMjQ5ZDA0KSAgKFdpbmRvd3MpIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJjb252ZXJ0ZWQiIHN0RXZ0OnBhcmFtZXRlcnM9ImZyb20gYXBwbGljYXRpb24vdm5kLmFkb2JlLnBob3Rvc2hvcCB0byBpbWFnZS9wbmciLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjJjNmY2N2M3LTY1MjUtN2M0Ny1iZTcwLTU2YWZhZDRjZjMyZCIgc3RFdnQ6d2hlbj0iMjAyNC0xMC0yM1QxOToyMzozMysxMTowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIDI2LjEgKDIwMjQxMDE5Lm0uMjgxNSBhMjQ5ZDA0KSAgKFdpbmRvd3MpIiBzdEV2dDpjaGFuZ2VkPSIvIi8+IDwvcmRmOlNlcT4gPC94bXBNTTpIaXN0b3J5PiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PpGGSOYAA3j5SURBVHja7P13uK5nWSYOn9ddnvLWtfZau+8kO72TBJJACiUUg4iAUgVEBAfEBiM4Kli+0XEcHXUc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" + }, + { + "id": 2427, + "type": "ResolutionPicker", + "pos": [ + 480, + 1330 + ], + "size": [ + 310, + 60 + ], + "flags": { + "pinned": true + }, + "order": 140, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "resolution", + "type": "COMBO", + "links": [ + 3447 + ], + "slot_index": 0 + } + ], + "title": "Latent Resolution", + "properties": { + "Node name for S&R": "ResolutionPicker", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "1024x1024 (1.0)" + ] + }, + { + "id": 2435, + "type": "SamplerParameterPacker", + "pos": [ + 480, + 620 + ], + "size": [ + 310, + 80 + ], + "flags": { + "pinned": true + }, + "order": 141, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "sampler_params", + "type": "SAMPLER_PARAMS", + "links": [ + 3460 + ], + "slot_index": 0 + } + ], + "title": "Sampler Parameters", + "properties": { + "Node name for S&R": "SamplerParameterPacker", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "deis", + "beta" + ], + "tabContents": [ + { + "sampler": "deis", + "scheduler": "beta" + }, + { + "sampler": "ddim", + "scheduler": "simple" + }, + { + "sampler": "dpmpp_sde", + "scheduler": "karras" + } + ], + "activeTab": 0 + }, + { + "id": 2436, + "type": "SamplerParameterUnpacker", + "pos": [ + -3049.044921875, + 306.6080322265625 + ], + "size": [ + 370, + 90 + ], + "flags": { + "collapsed": true + }, + "order": 200, + "mode": 0, + "inputs": [ + { + "name": "sampler_params", + "type": "SAMPLER_PARAMS", + "link": 3461 + } + ], + "outputs": [ + { + "name": "sampler", + "type": "COMBO", + "links": [ + 3463 + ], + "slot_index": 0 + }, + { + "name": "sampler_name", + "type": "STRING", + "links": [ + 3465 + ], + "slot_index": 1 + }, + { + "name": "scheduler", + "type": "COMBO", + "links": [ + 3464 + ], + "slot_index": 2 + }, + { + "name": "scheduler_name", + "type": "STRING", + "links": [ + 3466 + ], + "slot_index": 3 + } + ], + "properties": { + "Node name for S&R": "SamplerParameterUnpacker", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 2476, + "type": "Reroute", + "pos": [ + 3696.249755859375, + 399.36273193359375 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 310, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5319 + } + ], + "outputs": [ + { + "name": "", + "type": "CLIP", + "links": [ + 3509, + 5325 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 2600, + "type": "Reroute", + "pos": [ + 7944.74609375, + 484.0147705078125 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 379, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 3717 + } + ], + "outputs": [ + { + "name": "", + "type": "SIGMAS", + "links": [ + 3718 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 3000, + "type": "PreviewImage", + "pos": [ + 840, + 150 + ], + "size": [ + 870, + 920 + ], + "flags": { + "collapsed": false, + "pinned": true + }, + "order": 179, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 4414 + } + ], + "outputs": [], + "title": "Img Preview", + "properties": { + "Node name for S&R": "PreviewImage", + "enableTabs": true, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": true, + "secondTabText": "Img Compare", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [], + "color": "#222", + "bgcolor": "#000" + }, + { + "id": 3055, + "type": "ImagePadForOutpaintMasked", + "pos": [ + 1759.6929931640625, + 999.8751220703125 + ], + "size": [ + 310, + 250 + ], + "flags": { + "pinned": true + }, + "order": 362, + "mode": 4, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 4606 + }, + { + "name": "mask", + "type": "MASK", + "link": null, + "shape": 7 + }, + { + "name": "feathering", + "type": "INT", + "link": 4977, + "widget": { + "name": "feathering" + } + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 4607 + ], + "slot_index": 0 + }, + { + "name": "MASK", + "type": "MASK", + "links": [ + 4608 + ] + } + ], + "title": "Pad", + "properties": { + "Node name for S&R": "ImagePadForOutpaintMasked", + "enableTabs": true, + "tabWidth": 50, + "tabXOffset": 230, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 0, + 0, + 0, + 256, + 120 + ] + }, + { + "id": 3127, + "type": "Note", + "pos": [ + 7590, + -320 + ], + "size": [ + 210, + 80 + ], + "flags": {}, + "order": 142, + "mode": 0, + "inputs": [], + "outputs": [], + "properties": {}, + "widgets_values": [ + "optional mask for details.\nuse remap range to guide where you want more detail." + ], + "color": "#432", + "bgcolor": "#653" + }, + { + "id": 3132, + "type": "RepeatImageBatch", + "pos": [ + 4547.443359375, + 3295.350341796875 + ], + "size": [ + 210, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 348, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 4667 + }, + { + "name": "amount", + "type": "INT", + "link": 4666, + "widget": { + "name": "amount" + } + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 4668 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "RepeatImageBatch", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 2 + ] + }, + { + "id": 3135, + "type": "Note", + "pos": [ + -4210, + 370 + ], + "size": [ + 360, + 60 + ], + "flags": {}, + "order": 143, + "mode": 0, + "inputs": [], + "outputs": [], + "properties": {}, + "widgets_values": [ + "here you can modify the final image that is sent to the preview node. these nodes just pass it though" + ], + "color": "#432", + "bgcolor": "#653" + }, + { + "id": 3158, + "type": "Bookmark (rgthree)", + "pos": [ + 370, + 40 + ], + "size": [ + 210, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 144, + "mode": 0, + "inputs": [], + "outputs": [], + "title": "🔖", + "properties": {}, + "widgets_values": [ + "1", + 1 + ] + }, + { + "id": 3159, + "type": "Bookmark (rgthree)", + "pos": [ + 2290, + -240 + ], + "size": [ + 210, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 145, + "mode": 0, + "inputs": [], + "outputs": [], + "title": "🔖", + "properties": {}, + "widgets_values": [ + "2", + 1 + ] + }, + { + "id": 3164, + "type": "OutputGet", + "pos": [ + 480, + 190 + ], + "size": [ + 310, + 70 + ], + "flags": { + "collapsed": false, + "pinned": true + }, + "order": 146, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 4941 + ], + "slot_index": 0 + } + ], + "title": "Output - imgload_prep", + "properties": { + "showOutputText": true + }, + "widgets_values": [ + "Output - imgload_prep" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3169, + "type": "SomethingToString", + "pos": [ + 4107.07861328125, + 1136.7099609375 + ], + "size": [ + 210, + 80 + ], + "flags": { + "collapsed": true + }, + "order": 183, + "mode": 0, + "inputs": [ + { + "name": "input", + "type": "*", + "link": 4689 + } + ], + "outputs": [ + { + "name": "STRING", + "type": "STRING", + "links": [ + 4690 + ], + "slot_index": 0, + "shape": 3 + } + ], + "title": "To String", + "properties": { + "Node name for S&R": "SomethingToString", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "", + "" + ] + }, + { + "id": 3170, + "type": "SomethingToString", + "pos": [ + 4117.0771484375, + 1086.7099609375 + ], + "size": [ + 210, + 80 + ], + "flags": { + "collapsed": true + }, + "order": 185, + "mode": 0, + "inputs": [ + { + "name": "input", + "type": "*", + "link": 4691 + } + ], + "outputs": [ + { + "name": "STRING", + "type": "STRING", + "links": [ + 4692 + ], + "slot_index": 0, + "shape": 3 + } + ], + "title": "To String", + "properties": { + "Node name for S&R": "SomethingToString", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "", + "" + ] + }, + { + "id": 3178, + "type": "SimpleMath+", + "pos": [ + 4083.55810546875, + 3403.4365234375 + ], + "size": [ + 320, + 100 + ], + "flags": { + "collapsed": true + }, + "order": 269, + "mode": 0, + "inputs": [ + { + "name": "a", + "type": "*", + "link": 4716, + "shape": 7 + }, + { + "name": "b", + "type": "*", + "link": 4714, + "shape": 7 + }, + { + "name": "c", + "type": "*", + "link": null, + "shape": 7 + } + ], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 4718 + ], + "slot_index": 0 + }, + { + "name": "FLOAT", + "type": "FLOAT", + "links": null + } + ], + "properties": { + "Node name for S&R": "SimpleMath+", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "a*b" + ] + }, + { + "id": 3182, + "type": "SimpleMath+", + "pos": [ + 4083.55810546875, + 3613.435791015625 + ], + "size": [ + 320, + 100 + ], + "flags": { + "collapsed": true + }, + "order": 270, + "mode": 0, + "inputs": [ + { + "name": "a", + "type": "*", + "link": 4717, + "shape": 7 + }, + { + "name": "b", + "type": "*", + "link": 4715, + "shape": 7 + }, + { + "name": "c", + "type": "*", + "link": null, + "shape": 7 + } + ], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 4719 + ], + "slot_index": 0 + }, + { + "name": "FLOAT", + "type": "FLOAT", + "links": null + } + ], + "properties": { + "Node name for S&R": "SimpleMath+", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "a*b" + ] + }, + { + "id": 3210, + "type": "PlaySound|pysssss", + "pos": [ + -3690, + 270 + ], + "size": [ + 310, + 110 + ], + "flags": {}, + "order": 317, + "mode": 0, + "inputs": [ + { + "name": "any", + "type": "*", + "link": 4779 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null, + "slot_index": 0, + "shape": 6 + } + ], + "properties": { + "Node name for S&R": "PlaySound|pysssss", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "always", + 0.5, + "notify.mp3" + ] + }, + { + "id": 3211, + "type": "Note", + "pos": [ + -3690, + 440 + ], + "size": [ + 320, + 60 + ], + "flags": {}, + "order": 147, + "mode": 0, + "inputs": [], + "outputs": [], + "properties": {}, + "widgets_values": [ + "enable/disable the sound notification" + ], + "color": "#432", + "bgcolor": "#653" + }, + { + "id": 3212, + "type": "SimpleTextTruncate", + "pos": [ + -5018.82275390625, + 322.3243103027344 + ], + "size": [ + 230, + 70 + ], + "flags": {}, + "order": 196, + "mode": 4, + "inputs": [ + { + "name": "text", + "type": "STRING", + "link": 4780, + "widget": { + "name": "text" + } + } + ], + "outputs": [ + { + "name": "TEXT", + "type": "STRING", + "links": [ + 4781 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "SimpleTextTruncate", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "", + 12 + ] + }, + { + "id": 3213, + "type": "CLIPTextEncode", + "pos": [ + 3850, + 2740 + ], + "size": [ + 430, + 180 + ], + "flags": { + "collapsed": true + }, + "order": 203, + "mode": 0, + "inputs": [ + { + "name": "clip", + "type": "CLIP", + "link": 4782 + } + ], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [ + 4784 + ], + "slot_index": 0 + } + ], + "title": "CLIP Text Encode (Negative Prompt)", + "properties": { + "Node name for S&R": "CLIPTextEncode", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 3214, + "type": "InpaintModelConditioning", + "pos": [ + 4220, + 2620 + ], + "size": [ + 300, + 140 + ], + "flags": {}, + "order": 284, + "mode": 0, + "inputs": [ + { + "name": "positive", + "type": "CONDITIONING", + "link": 5039 + }, + { + "name": "negative", + "type": "CONDITIONING", + "link": 4784 + }, + { + "name": "vae", + "type": "VAE", + "link": 4785 + }, + { + "name": "pixels", + "type": "IMAGE", + "link": 4786 + }, + { + "name": "mask", + "type": "MASK", + "link": 4787 + } + ], + "outputs": [ + { + "name": "positive", + "type": "CONDITIONING", + "links": [ + 4790 + ], + "slot_index": 0 + }, + { + "name": "negative", + "type": "CONDITIONING", + "links": [ + 4982 + ], + "slot_index": 1 + }, + { + "name": "latent", + "type": "LATENT", + "links": [ + 4981 + ], + "slot_index": 2 + } + ], + "properties": { + "Node name for S&R": "InpaintModelConditioning", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + false + ] + }, + { + "id": 3215, + "type": "DifferentialDiffusion", + "pos": [ + 4750, + 2570 + ], + "size": [ + 180, + 30 + ], + "flags": { + "collapsed": true + }, + "order": 202, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 4788 + } + ], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "links": [ + 4789 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "DifferentialDiffusion", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 3216, + "type": "KSampler", + "pos": [ + 4970, + 2580 + ], + "size": [ + 280, + 220 + ], + "flags": {}, + "order": 353, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 4789 + }, + { + "name": "positive", + "type": "CONDITIONING", + "link": 4790 + }, + { + "name": "negative", + "type": "CONDITIONING", + "link": 4982 + }, + { + "name": "latent_image", + "type": "LATENT", + "link": 4983 + }, + { + "name": "seed", + "type": "INT", + "link": 4793, + "widget": { + "name": "seed" + } + }, + { + "name": "steps", + "type": "INT", + "link": 4794, + "widget": { + "name": "steps" + } + }, + { + "name": "scheduler", + "type": "COMBO", + "link": 4801, + "widget": { + "name": "scheduler" + } + }, + { + "name": "sampler_name", + "type": "COMBO", + "link": 4803, + "widget": { + "name": "sampler_name" + } + } + ], + "outputs": [ + { + "name": "LATENT", + "type": "LATENT", + "links": [ + 4795 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "KSampler", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 393990749201380, + "randomize", + 20, + 1, + "euler", + "normal", + 1 + ] + }, + { + "id": 3219, + "type": "VAEDecode", + "pos": [ + 5450, + 2480 + ], + "size": [ + 170, + 50 + ], + "flags": { + "collapsed": true + }, + "order": 368, + "mode": 0, + "inputs": [ + { + "name": "samples", + "type": "LATENT", + "link": 4795 + }, + { + "name": "vae", + "type": "VAE", + "link": 4796 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 4807 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "VAEDecode", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 3240, + "type": "ImageCompositeMasked", + "pos": [ + 5650, + 2690 + ], + "size": [ + 290, + 150 + ], + "flags": {}, + "order": 382, + "mode": 0, + "inputs": [ + { + "name": "destination", + "type": "IMAGE", + "link": 4818 + }, + { + "name": "source", + "type": "IMAGE", + "link": 4807 + }, + { + "name": "mask", + "type": "MASK", + "link": 4973, + "shape": 7 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 4819 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "ImageCompositeMasked", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 0, + 0, + false + ] + }, + { + "id": 3241, + "type": "Reroute", + "pos": [ + 4070, + 2490 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 205, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 4809 + } + ], + "outputs": [ + { + "name": "", + "type": "MASK", + "links": [ + 4815 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 3242, + "type": "Reroute", + "pos": [ + 4060, + 2410 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 204, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 4810 + } + ], + "outputs": [ + { + "name": "", + "type": "IMAGE", + "links": [ + 4814 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 3244, + "type": "Reroute", + "pos": [ + 5170, + 2490 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 286, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 4815 + } + ], + "outputs": [ + { + "name": "", + "type": "MASK", + "links": [ + 4974 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 3245, + "type": "Reroute", + "pos": [ + 5150, + 2420 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 285, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 4814 + } + ], + "outputs": [ + { + "name": "", + "type": "IMAGE", + "links": [ + 4818 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 3246, + "type": "CLIPTextEncode", + "pos": [ + 3940, + 1980 + ], + "size": [ + 430, + 180 + ], + "flags": { + "collapsed": true + }, + "order": 206, + "mode": 0, + "inputs": [ + { + "name": "clip", + "type": "CLIP", + "link": 4827 + } + ], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [ + 4829 + ], + "slot_index": 0 + } + ], + "title": "CLIP Text Encode (Negative Prompt)", + "properties": { + "Node name for S&R": "CLIPTextEncode", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 3247, + "type": "InpaintModelConditioning", + "pos": [ + 4380, + 1790 + ], + "size": [ + 300, + 140 + ], + "flags": {}, + "order": 316, + "mode": 0, + "inputs": [ + { + "name": "positive", + "type": "CONDITIONING", + "link": 4992 + }, + { + "name": "negative", + "type": "CONDITIONING", + "link": 4829 + }, + { + "name": "vae", + "type": "VAE", + "link": 4913 + }, + { + "name": "pixels", + "type": "IMAGE", + "link": 4914 + }, + { + "name": "mask", + "type": "MASK", + "link": 4882 + } + ], + "outputs": [ + { + "name": "positive", + "type": "CONDITIONING", + "links": [ + 4835 + ], + "slot_index": 0 + }, + { + "name": "negative", + "type": "CONDITIONING", + "links": [ + 4836 + ], + "slot_index": 1 + }, + { + "name": "latent", + "type": "LATENT", + "links": [ + 4919 + ], + "slot_index": 2 + } + ], + "properties": { + "Node name for S&R": "InpaintModelConditioning", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + true + ] + }, + { + "id": 3248, + "type": "DifferentialDiffusion", + "pos": [ + 4950, + 1770 + ], + "size": [ + 180, + 30 + ], + "flags": { + "collapsed": true + }, + "order": 209, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 4945 + } + ], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "links": [ + 4834 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "DifferentialDiffusion", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 3249, + "type": "KSampler", + "pos": [ + 5180, + 1780 + ], + "size": [ + 260, + 220 + ], + "flags": {}, + "order": 360, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 4834 + }, + { + "name": "positive", + "type": "CONDITIONING", + "link": 4835 + }, + { + "name": "negative", + "type": "CONDITIONING", + "link": 4836 + }, + { + "name": "latent_image", + "type": "LATENT", + "link": 4920 + }, + { + "name": "seed", + "type": "INT", + "link": 4917, + "widget": { + "name": "seed" + } + }, + { + "name": "steps", + "type": "INT", + "link": 4839, + "widget": { + "name": "steps" + } + }, + { + "name": "scheduler", + "type": "COMBO", + "link": 4852, + "widget": { + "name": "scheduler" + } + }, + { + "name": "sampler_name", + "type": "COMBO", + "link": 4853, + "widget": { + "name": "sampler_name" + } + }, + { + "name": "denoise", + "type": "FLOAT", + "link": 4921, + "widget": { + "name": "denoise" + } + } + ], + "outputs": [ + { + "name": "LATENT", + "type": "LATENT", + "links": [ + 4916 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "KSampler", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 705272531889048, + "randomize", + 20, + 1, + "euler", + "normal", + 1 + ] + }, + { + "id": 3263, + "type": "ImageCompositeMasked", + "pos": [ + 6030, + 1780 + ], + "size": [ + 270, + 150 + ], + "flags": {}, + "order": 387, + "mode": 0, + "inputs": [ + { + "name": "destination", + "type": "IMAGE", + "link": 4845 + }, + { + "name": "source", + "type": "IMAGE", + "link": 4896 + }, + { + "name": "mask", + "type": "MASK", + "link": 5591, + "shape": 7 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 4854 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "ImageCompositeMasked", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 0, + 0, + false + ] + }, + { + "id": 3266, + "type": "Reroute", + "pos": [ + 5670, + 1680 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 283, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 4850 + } + ], + "outputs": [ + { + "name": "", + "type": "MASK", + "links": [ + 5590 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 3267, + "type": "Reroute", + "pos": [ + 5920, + 1640 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 287, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 4851 + } + ], + "outputs": [ + { + "name": "", + "type": "IMAGE", + "links": [ + 4845 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 3279, + "type": "VAEDecode", + "pos": [ + 5560, + 1820 + ], + "size": [ + 170, + 50 + ], + "flags": { + "collapsed": true + }, + "order": 374, + "mode": 0, + "inputs": [ + { + "name": "samples", + "type": "LATENT", + "link": 4916 + }, + { + "name": "vae", + "type": "VAE", + "link": 4904 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 4896 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "VAEDecode", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 3284, + "type": "Reroute", + "pos": [ + 4180, + 1580 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 263, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 4912 + } + ], + "outputs": [ + { + "name": "", + "type": "VAE", + "links": [ + 4911, + 4913 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 3323, + "type": "ImpactDilateMask", + "pos": [ + 5360, + 2730 + ], + "size": [ + 210, + 60 + ], + "flags": { + "collapsed": false + }, + "order": 328, + "mode": 0, + "inputs": [ + { + "name": "mask", + "type": "MASK", + "link": 4974 + }, + { + "name": "dilation", + "type": "INT", + "link": 4979, + "widget": { + "name": "dilation" + } + } + ], + "outputs": [ + { + "name": "MASK", + "type": "MASK", + "links": [ + 4973 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "ImpactDilateMask", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 120 + ] + }, + { + "id": 3332, + "type": "RepeatLatentBatch", + "pos": [ + 4670, + 2740 + ], + "size": [ + 210, + 50 + ], + "flags": { + "collapsed": true + }, + "order": 327, + "mode": 0, + "inputs": [ + { + "name": "samples", + "type": "LATENT", + "link": 4981 + }, + { + "name": "amount", + "type": "INT", + "link": 4980, + "widget": { + "name": "amount" + } + } + ], + "outputs": [ + { + "name": "LATENT", + "type": "LATENT", + "links": [ + 4983 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "RepeatLatentBatch", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 1 + ] + }, + { + "id": 3343, + "type": "InstructPixToPixConditioning", + "pos": [ + 4830, + 4820 + ], + "size": [ + 240, + 90 + ], + "flags": { + "collapsed": false + }, + "order": 329, + "mode": 0, + "inputs": [ + { + "name": "positive", + "type": "CONDITIONING", + "link": 5015 + }, + { + "name": "negative", + "type": "CONDITIONING", + "link": 4995 + }, + { + "name": "vae", + "type": "VAE", + "link": 4996 + }, + { + "name": "pixels", + "type": "IMAGE", + "link": 5110 + } + ], + "outputs": [ + { + "name": "positive", + "type": "CONDITIONING", + "links": [ + 5004 + ], + "slot_index": 0 + }, + { + "name": "negative", + "type": "CONDITIONING", + "links": [ + 5005 + ], + "slot_index": 1 + }, + { + "name": "latent", + "type": "LATENT", + "links": [ + 4998 + ], + "slot_index": 2 + } + ], + "properties": { + "Node name for S&R": "InstructPixToPixConditioning", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 3345, + "type": "RepeatLatentBatch", + "pos": [ + 5166.32666015625, + 4894.1142578125 + ], + "size": [ + 230, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 354, + "mode": 0, + "inputs": [ + { + "name": "samples", + "type": "LATENT", + "link": 4998 + }, + { + "name": "amount", + "type": "INT", + "link": 4999, + "widget": { + "name": "amount" + } + } + ], + "outputs": [ + { + "name": "LATENT", + "type": "LATENT", + "links": [ + 5006 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "RepeatLatentBatch", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 1 + ] + }, + { + "id": 3346, + "type": "VAEDecode", + "pos": [ + 5746.32666015625, + 4704.11474609375 + ], + "size": [ + 170, + 50 + ], + "flags": { + "collapsed": true + }, + "order": 383, + "mode": 0, + "inputs": [ + { + "name": "samples", + "type": "LATENT", + "link": 5000 + }, + { + "name": "vae", + "type": "VAE", + "link": 5001 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 5002 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "VAEDecode", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 3352, + "type": "KSampler", + "pos": [ + 5480, + 4810 + ], + "size": [ + 250, + 220 + ], + "flags": {}, + "order": 369, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 5003 + }, + { + "name": "positive", + "type": "CONDITIONING", + "link": 5004 + }, + { + "name": "negative", + "type": "CONDITIONING", + "link": 5005 + }, + { + "name": "latent_image", + "type": "LATENT", + "link": 5006 + }, + { + "name": "seed", + "type": "INT", + "link": 5007, + "widget": { + "name": "seed" + } + }, + { + "name": "steps", + "type": "INT", + "link": 5008, + "widget": { + "name": "steps" + } + }, + { + "name": "scheduler", + "type": "COMBO", + "link": 5020, + "widget": { + "name": "scheduler" + } + }, + { + "name": "sampler_name", + "type": "COMBO", + "link": 5021, + "widget": { + "name": "sampler_name" + } + } + ], + "outputs": [ + { + "name": "LATENT", + "type": "LATENT", + "links": [ + 5000 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "KSampler", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 229054628919595, + "randomize", + 20, + 1, + "euler", + "normal", + 1 + ] + }, + { + "id": 3360, + "type": "CLIPTextEncode", + "pos": [ + 4540, + 4830 + ], + "size": [ + 400, + 200 + ], + "flags": { + "collapsed": true + }, + "order": 212, + "mode": 0, + "inputs": [ + { + "name": "clip", + "type": "CLIP", + "link": 5012 + } + ], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [ + 4995 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "CLIPTextEncode", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 3372, + "type": "DepthAnythingV2Preprocessor", + "pos": [ + 4026.32470703125, + 4794.1142578125 + ], + "size": [ + 310, + 80 + ], + "flags": {}, + "order": 210, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 5023 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 5109 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "DepthAnythingV2Preprocessor", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "depth_anything_v2_vitl.pth", + 1024 + ] + }, + { + "id": 3375, + "type": "CLIPVisionLoader", + "pos": [ + 2997.352294921875, + 1027.170166015625 + ], + "size": [ + 320, + 60 + ], + "flags": {}, + "order": 148, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "CLIP_VISION", + "type": "CLIP_VISION", + "links": [ + 5034 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "CLIPVisionLoader", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "sigclip_vision_patch14_384.safetensors" + ] + }, + { + "id": 3383, + "type": "Reroute", + "pos": [ + 5170, + 210 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 184, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5046 + } + ], + "outputs": [ + { + "name": "", + "type": "MODEL", + "links": [ + 5045 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 3386, + "type": "Reroute", + "pos": [ + 4963.34765625, + 6211.7451171875 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 213, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5051 + } + ], + "outputs": [ + { + "name": "", + "type": "CLIP_VISION", + "links": [ + 5054, + 5702 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 3388, + "type": "Reroute", + "pos": [ + 4953.34765625, + 6161.7451171875 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 214, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5055 + } + ], + "outputs": [ + { + "name": "", + "type": "STYLE_MODEL", + "links": [ + 5058, + 5700 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 3390, + "type": "Reroute", + "pos": [ + 5070, + 6500 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 309, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5060 + } + ], + "outputs": [ + { + "name": "", + "type": "CONDITIONING", + "links": [ + 5644, + 5699 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 3402, + "type": "SplitVec3", + "pos": [ + 4460.998046875, + 6293.8974609375 + ], + "size": [ + 210, + 70 + ], + "flags": { + "collapsed": false + }, + "order": 215, + "mode": 0, + "inputs": [ + { + "name": "a", + "type": "VEC3", + "link": 5082 + } + ], + "outputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "links": [ + 5661 + ], + "slot_index": 0 + }, + { + "name": "FLOAT", + "type": "FLOAT", + "links": [ + 5366 + ], + "slot_index": 1 + }, + { + "name": "FLOAT", + "type": "FLOAT", + "links": [ + 5362 + ], + "slot_index": 2 + } + ], + "properties": { + "Node name for S&R": "SplitVec3", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 3408, + "type": "GetImageSize+", + "pos": [ + 4012.0634765625, + 5082.7001953125 + ], + "size": [ + 210, + 70 + ], + "flags": { + "collapsed": true + }, + "order": 211, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 5106 + } + ], + "outputs": [ + { + "name": "width", + "type": "INT", + "links": [ + 5107 + ], + "slot_index": 0 + }, + { + "name": "height", + "type": "INT", + "links": [ + 5108 + ], + "slot_index": 1 + }, + { + "name": "count", + "type": "INT", + "links": null + } + ], + "properties": { + "Node name for S&R": "GetImageSize+", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 3409, + "type": "ImageResize+", + "pos": [ + 4410.46533203125, + 5019.71240234375 + ], + "size": [ + 300, + 170 + ], + "flags": { + "collapsed": false + }, + "order": 289, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 5109 + }, + { + "name": "width", + "type": "INT", + "link": 5107, + "widget": { + "name": "width" + } + }, + { + "name": "height", + "type": "INT", + "link": 5108, + "widget": { + "name": "height" + } + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 5110, + 5478, + 5616 + ], + "slot_index": 0 + }, + { + "name": "width", + "type": "INT", + "links": null + }, + { + "name": "height", + "type": "INT", + "links": null + } + ], + "properties": { + "Node name for S&R": "ImageResize+", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 512, + 512, + "lanczos", + "keep proportion", + "always", + 0 + ] + }, + { + "id": 3450, + "type": "InstructPixToPixConditioning", + "pos": [ + 4110.0888671875, + 5573.4619140625 + ], + "size": [ + 240, + 90 + ], + "flags": { + "collapsed": false + }, + "order": 297, + "mode": 0, + "inputs": [ + { + "name": "positive", + "type": "CONDITIONING", + "link": 5166 + }, + { + "name": "negative", + "type": "CONDITIONING", + "link": 5167 + }, + { + "name": "vae", + "type": "VAE", + "link": 5168 + }, + { + "name": "pixels", + "type": "IMAGE", + "link": 5452 + } + ], + "outputs": [ + { + "name": "positive", + "type": "CONDITIONING", + "links": [ + 5176 + ], + "slot_index": 0 + }, + { + "name": "negative", + "type": "CONDITIONING", + "links": [ + 5177 + ], + "slot_index": 1 + }, + { + "name": "latent", + "type": "LATENT", + "links": [ + 5170 + ], + "slot_index": 2 + } + ], + "properties": { + "Node name for S&R": "InstructPixToPixConditioning", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 3452, + "type": "RepeatLatentBatch", + "pos": [ + 4380.0888671875, + 5753.4619140625 + ], + "size": [ + 230, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 339, + "mode": 0, + "inputs": [ + { + "name": "samples", + "type": "LATENT", + "link": 5170 + }, + { + "name": "amount", + "type": "INT", + "link": 5171, + "widget": { + "name": "amount" + } + } + ], + "outputs": [ + { + "name": "LATENT", + "type": "LATENT", + "links": [ + 5178 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "RepeatLatentBatch", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 1 + ] + }, + { + "id": 3453, + "type": "VAEDecode", + "pos": [ + 4990.0888671875, + 5483.4619140625 + ], + "size": [ + 170, + 50 + ], + "flags": { + "collapsed": true + }, + "order": 370, + "mode": 0, + "inputs": [ + { + "name": "samples", + "type": "LATENT", + "link": 5172 + }, + { + "name": "vae", + "type": "VAE", + "link": 5173 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 5174 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "VAEDecode", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 3459, + "type": "KSampler", + "pos": [ + 4740.0888671875, + 5563.4619140625 + ], + "size": [ + 220, + 220 + ], + "flags": {}, + "order": 356, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 5175 + }, + { + "name": "positive", + "type": "CONDITIONING", + "link": 5176 + }, + { + "name": "negative", + "type": "CONDITIONING", + "link": 5177 + }, + { + "name": "latent_image", + "type": "LATENT", + "link": 5178 + }, + { + "name": "seed", + "type": "INT", + "link": 5179, + "widget": { + "name": "seed" + } + }, + { + "name": "steps", + "type": "INT", + "link": 5180, + "widget": { + "name": "steps" + } + }, + { + "name": "scheduler", + "type": "COMBO", + "link": 5211, + "widget": { + "name": "scheduler" + } + }, + { + "name": "sampler_name", + "type": "COMBO", + "link": 5210, + "widget": { + "name": "sampler_name" + } + } + ], + "outputs": [ + { + "name": "LATENT", + "type": "LATENT", + "links": [ + 5172 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "KSampler", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 539021121832864, + "randomize", + 20, + 1, + "euler", + "normal", + 1 + ] + }, + { + "id": 3462, + "type": "CLIPTextEncode", + "pos": [ + 3830.090087890625, + 5683.4619140625 + ], + "size": [ + 400, + 200 + ], + "flags": { + "collapsed": true + }, + "order": 218, + "mode": 0, + "inputs": [ + { + "name": "clip", + "type": "CLIP", + "link": 5181 + } + ], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [ + 5167 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "CLIPTextEncode", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 3515, + "type": "Reroute", + "pos": [ + 5737.9697265625, + 263.603271484375 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 262, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5384 + } + ], + "outputs": [ + { + "name": "", + "type": "CONDITIONING", + "links": [ + 5237, + 5238 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 3548, + "type": "Reroute", + "pos": [ + 4896.2509765625, + 159.36273193359375 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 275, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5327 + } + ], + "outputs": [ + { + "name": "", + "type": "LATENT", + "links": [ + 5328 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 3549, + "type": "Reroute", + "pos": [ + 6050, + 160 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 322, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5328 + } + ], + "outputs": [ + { + "name": "", + "type": "LATENT", + "links": [ + 5329 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 3551, + "type": "MaskToSEGS", + "pos": [ + 4239.0615234375, + 4072.495361328125 + ], + "size": [ + 260, + 150 + ], + "flags": { + "collapsed": true + }, + "order": 298, + "mode": 0, + "inputs": [ + { + "name": "mask", + "type": "MASK", + "link": 5594 + } + ], + "outputs": [ + { + "name": "SEGS", + "type": "SEGS", + "links": [ + 5335 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "MaskToSEGS", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + false, + 1, + false, + 10, + false + ] + }, + { + "id": 3566, + "type": "SimpleComparison+", + "pos": [ + 5270, + 6320 + ], + "size": [ + 210, + 80 + ], + "flags": { + "collapsed": true + }, + "order": 335, + "mode": 0, + "inputs": [ + { + "name": "a", + "type": "*", + "link": 5713 + }, + { + "name": "b", + "type": "*", + "link": 5346 + } + ], + "outputs": [ + { + "name": "BOOLEAN", + "type": "BOOLEAN", + "links": [ + 5642 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "SimpleComparison+", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "!=" + ] + }, + { + "id": 3569, + "type": "SimpleMathFloat+", + "pos": [ + 5140, + 6290 + ], + "size": [ + 320, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 149, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "links": [ + 5346 + ], + "slot_index": 0 + } + ], + "title": "Float", + "properties": { + "Node name for S&R": "SimpleMathFloat+", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 0 + ] + }, + { + "id": 3571, + "type": "SimpleComparison+", + "pos": [ + 6520, + 6340 + ], + "size": [ + 210, + 80 + ], + "flags": { + "collapsed": true + }, + "order": 336, + "mode": 0, + "inputs": [ + { + "name": "a", + "type": "*", + "link": 5368 + }, + { + "name": "b", + "type": "*", + "link": 5350 + } + ], + "outputs": [ + { + "name": "BOOLEAN", + "type": "BOOLEAN", + "links": [ + 5656 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "SimpleComparison+", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "!=" + ] + }, + { + "id": 3572, + "type": "SimpleMathFloat+", + "pos": [ + 6400, + 6290 + ], + "size": [ + 320, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 150, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "links": [ + 5350 + ], + "slot_index": 0 + } + ], + "title": "Float", + "properties": { + "Node name for S&R": "SimpleMathFloat+", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 0 + ] + }, + { + "id": 3577, + "type": "SimpleComparison+", + "pos": [ + 7740, + 6370 + ], + "size": [ + 210, + 80 + ], + "flags": { + "collapsed": true + }, + "order": 337, + "mode": 0, + "inputs": [ + { + "name": "a", + "type": "*", + "link": 5363 + }, + { + "name": "b", + "type": "*", + "link": 5359 + } + ], + "outputs": [ + { + "name": "BOOLEAN", + "type": "BOOLEAN", + "links": [ + 5651 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "SimpleComparison+", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "!=" + ] + }, + { + "id": 3578, + "type": "SimpleMathFloat+", + "pos": [ + 7600, + 6310 + ], + "size": [ + 320, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 151, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "links": [ + 5359 + ], + "slot_index": 0 + } + ], + "title": "Float", + "properties": { + "Node name for S&R": "SimpleMathFloat+", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 0 + ] + }, + { + "id": 3585, + "type": "ReActorFaceSwap", + "pos": [ + 3860.952880859375, + 7133.40185546875 + ], + "size": [ + 330, + 360 + ], + "flags": {}, + "order": 220, + "mode": 0, + "inputs": [ + { + "name": "input_image", + "type": "IMAGE", + "link": 5382 + }, + { + "name": "source_image", + "type": "IMAGE", + "link": 5383, + "shape": 7 + }, + { + "name": "face_model", + "type": "FACE_MODEL", + "link": null, + "shape": 7 + }, + { + "name": "face_boost", + "type": "FACE_BOOST", + "link": null, + "shape": 7 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 5376 + ], + "slot_index": 0 + }, + { + "name": "FACE_MODEL", + "type": "FACE_MODEL", + "links": null + } + ], + "properties": { + "Node name for S&R": "ReActorFaceSwap", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + true, + "inswapper_128.onnx", + "retinaface_resnet50", + "codeformer-v0.1.0.pth", + 0.5, + 0.5, + "no", + "no", + "0", + "0", + 1 + ] + }, + { + "id": 3603, + "type": "ImageBatchMultiple+", + "pos": [ + -3090, + 1440 + ], + "size": [ + 320, + 140 + ], + "flags": {}, + "order": 393, + "mode": 0, + "inputs": [ + { + "name": "image_1", + "type": "IMAGE", + "link": 5568 + }, + { + "name": "image_2", + "type": "IMAGE", + "link": 5569, + "shape": 7 + }, + { + "name": "image_3", + "type": "IMAGE", + "link": 5571, + "shape": 7 + }, + { + "name": "image_4", + "type": "IMAGE", + "link": 5585, + "shape": 7 + }, + { + "name": "image_5", + "type": "IMAGE", + "link": 5578, + "shape": 7 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 5519 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "ImageBatchMultiple+", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "lanczos" + ] + }, + { + "id": 3606, + "type": "MaskToImage", + "pos": [ + -4868.875, + 1100.03125 + ], + "size": [ + 260, + 30 + ], + "flags": { + "collapsed": true + }, + "order": 308, + "mode": 0, + "inputs": [ + { + "name": "mask", + "type": "MASK", + "link": 5587 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 5415 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "MaskToImage", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 3618, + "type": "ImageResize+", + "pos": [ + -4618.87451171875, + 2060.03125 + ], + "size": [ + 270, + 220 + ], + "flags": { + "collapsed": false + }, + "order": 226, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 5465 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 5581 + ], + "slot_index": 0 + }, + { + "name": "width", + "type": "INT", + "links": null + }, + { + "name": "height", + "type": "INT", + "links": null + } + ], + "properties": { + "Node name for S&R": "ImageResize+", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 512, + 512, + "lanczos", + "pad", + "always", + 0 + ] + }, + { + "id": 3620, + "type": "ImageResize+", + "pos": [ + -4618.87451171875, + 750.03125 + ], + "size": [ + 270, + 220 + ], + "flags": { + "collapsed": false + }, + "order": 227, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 5468 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 5557, + 5595 + ], + "slot_index": 0 + }, + { + "name": "width", + "type": "INT", + "links": null + }, + { + "name": "height", + "type": "INT", + "links": null + } + ], + "properties": { + "Node name for S&R": "ImageResize+", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 512, + 512, + "lanczos", + "pad", + "always", + 0 + ] + }, + { + "id": 3622, + "type": "ImageResize+", + "pos": [ + -4618.87451171875, + 1060 + ], + "size": [ + 270, + 220 + ], + "flags": { + "collapsed": false + }, + "order": 341, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 5415 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 5598 + ], + "slot_index": 0 + }, + { + "name": "width", + "type": "INT", + "links": null + }, + { + "name": "height", + "type": "INT", + "links": null + } + ], + "properties": { + "Node name for S&R": "ImageResize+", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 512, + 512, + "lanczos", + "pad", + "always", + 0 + ] + }, + { + "id": 3624, + "type": "ImageResize+", + "pos": [ + -4618.87451171875, + 1690.03125 + ], + "size": [ + 270, + 220 + ], + "flags": { + "collapsed": false + }, + "order": 225, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 5463 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 5584 + ], + "slot_index": 0 + }, + { + "name": "width", + "type": "INT", + "links": null + }, + { + "name": "height", + "type": "INT", + "links": null + } + ], + "properties": { + "Node name for S&R": "ImageResize+", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 512, + 512, + "lanczos", + "pad", + "always", + 0 + ] + }, + { + "id": 3626, + "type": "ImageResize+", + "pos": [ + -4618.87451171875, + 1380.03125 + ], + "size": [ + 280, + 220 + ], + "flags": { + "collapsed": false + }, + "order": 224, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 5464 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 5570 + ], + "slot_index": 0 + }, + { + "name": "width", + "type": "INT", + "links": null + }, + { + "name": "height", + "type": "INT", + "links": null + } + ], + "properties": { + "Node name for S&R": "ImageResize+", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 512, + 512, + "lanczos", + "pad", + "always", + 0 + ] + }, + { + "id": 3633, + "type": "SimpleComparison+", + "pos": [ + -2810, + 2470 + ], + "size": [ + 210, + 80 + ], + "flags": { + "collapsed": false + }, + "order": 244, + "mode": 0, + "inputs": [ + { + "name": "a", + "type": "*", + "link": 5623 + }, + { + "name": "b", + "type": "*", + "link": 5461 + } + ], + "outputs": [ + { + "name": "BOOLEAN", + "type": "BOOLEAN", + "links": [ + 5520 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "SimpleComparison+", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "==" + ] + }, + { + "id": 3645, + "type": "SimpleComparison+", + "pos": [ + -2830, + 2810 + ], + "size": [ + 210, + 80 + ], + "flags": { + "collapsed": false + }, + "order": 245, + "mode": 0, + "inputs": [ + { + "name": "a", + "type": "*", + "link": 5624 + }, + { + "name": "b", + "type": "*", + "link": 5462 + } + ], + "outputs": [ + { + "name": "BOOLEAN", + "type": "BOOLEAN", + "links": [ + 5523 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "SimpleComparison+", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "==" + ] + }, + { + "id": 3661, + "type": "ImageResize+", + "pos": [ + -4618.87451171875, + 2420.03125 + ], + "size": [ + 280, + 220 + ], + "flags": { + "collapsed": false + }, + "order": 221, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 5453 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 5583 + ], + "slot_index": 0 + }, + { + "name": "width", + "type": "INT", + "links": null + }, + { + "name": "height", + "type": "INT", + "links": null + } + ], + "properties": { + "Node name for S&R": "ImageResize+", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 512, + 512, + "lanczos", + "pad", + "always", + 0 + ] + }, + { + "id": 3662, + "type": "ImageResize+", + "pos": [ + -4618.87451171875, + 2770.03125 + ], + "size": [ + 280, + 220 + ], + "flags": { + "collapsed": false + }, + "order": 223, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 5454 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 5572 + ], + "slot_index": 0 + }, + { + "name": "width", + "type": "INT", + "links": null + }, + { + "name": "height", + "type": "INT", + "links": null + } + ], + "properties": { + "Node name for S&R": "ImageResize+", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 512, + 512, + "lanczos", + "pad", + "always", + 0 + ] + }, + { + "id": 3665, + "type": "StringConstant", + "pos": [ + -3218.8740234375, + 2500.03125 + ], + "size": [ + 210, + 60 + ], + "flags": {}, + "order": 152, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "STRING", + "type": "STRING", + "links": [ + 5461 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "StringConstant", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "canny" + ] + }, + { + "id": 3666, + "type": "StringConstant", + "pos": [ + -3210, + 2830 + ], + "size": [ + 210, + 60 + ], + "flags": {}, + "order": 153, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "STRING", + "type": "STRING", + "links": [ + 5462 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "StringConstant", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "depth" + ] + }, + { + "id": 3679, + "type": "GetImageSize+", + "pos": [ + 1878.7926025390625, + 834.1670532226562 + ], + "size": [ + 210, + 70 + ], + "flags": { + "collapsed": true + }, + "order": 217, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 5482 + } + ], + "outputs": [ + { + "name": "width", + "type": "INT", + "links": [ + 5479 + ], + "slot_index": 0 + }, + { + "name": "height", + "type": "INT", + "links": [ + 5480 + ], + "slot_index": 1 + }, + { + "name": "count", + "type": "INT", + "links": null + } + ], + "properties": { + "Node name for S&R": "GetImageSize+", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 3680, + "type": "ImageResize+", + "pos": [ + 1900, + 809.1294555664062 + ], + "size": [ + 300, + 170 + ], + "flags": { + "collapsed": true + }, + "order": 296, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 5483 + }, + { + "name": "width", + "type": "INT", + "link": 5479, + "widget": { + "name": "width" + } + }, + { + "name": "height", + "type": "INT", + "link": 5480, + "widget": { + "name": "height" + } + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 5484 + ], + "slot_index": 0 + }, + { + "name": "width", + "type": "INT", + "links": null + }, + { + "name": "height", + "type": "INT", + "links": null + } + ], + "properties": { + "Node name for S&R": "ImageResize+", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 512, + 512, + "lanczos", + "keep proportion", + "always", + 0 + ] + }, + { + "id": 3692, + "type": "ImageBatchBoolean", + "pos": [ + -2490, + 2400 + ], + "size": [ + 270, + 80 + ], + "flags": {}, + "order": 397, + "mode": 0, + "inputs": [ + { + "name": "image1", + "type": "IMAGE", + "link": 5519 + }, + { + "name": "image2", + "type": "IMAGE", + "link": 5579 + }, + { + "name": "batch_enabled", + "type": "BOOLEAN", + "link": 5520, + "widget": { + "name": "batch_enabled" + } + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 5522 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "ImageBatchBoolean", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + true + ] + }, + { + "id": 3693, + "type": "ImageBatchBoolean", + "pos": [ + -2130, + 2740 + ], + "size": [ + 250, + 70 + ], + "flags": {}, + "order": 400, + "mode": 0, + "inputs": [ + { + "name": "image1", + "type": "IMAGE", + "link": 5522 + }, + { + "name": "image2", + "type": "IMAGE", + "link": 5580 + }, + { + "name": "batch_enabled", + "type": "BOOLEAN", + "link": 5523, + "widget": { + "name": "batch_enabled" + } + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 5525 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "ImageBatchBoolean", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + true + ] + }, + { + "id": 3711, + "type": "DrawTextConfig", + "pos": [ + -4200, + 1680 + ], + "size": [ + 270, + 350 + ], + "flags": { + "collapsed": false + }, + "order": 154, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "TEXT_STYLE", + "type": "TEXT_STYLE", + "links": [ + 5554, + 5558, + 5573, + 5574, + 5575, + 5576, + 5577 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "DrawTextConfig", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "Inter_24pt-Medium.ttf", + 34, + "#FFFFFFBF", + "#00000080", + 8, + 0, + 0, + "#000000", + "center", + "bottom", + 0, + -15, + "ltr" + ] + }, + { + "id": 3712, + "type": "ConfigurableDrawText", + "pos": [ + -3690, + 750 + ], + "size": [ + 330, + 100 + ], + "flags": {}, + "order": 307, + "mode": 0, + "inputs": [ + { + "name": "TEXT_STYLE", + "type": "TEXT_STYLE", + "link": 5554 + }, + { + "name": "IMAGE", + "type": "IMAGE", + "link": 5557 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 5568 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "ConfigurableDrawText", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "Img Load" + ] + }, + { + "id": 3713, + "type": "ConfigurableDrawText", + "pos": [ + -3690, + 1080 + ], + "size": [ + 330, + 100 + ], + "flags": {}, + "order": 385, + "mode": 0, + "inputs": [ + { + "name": "TEXT_STYLE", + "type": "TEXT_STYLE", + "link": 5558 + }, + { + "name": "IMAGE", + "type": "IMAGE", + "link": 5597 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 5569 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "ConfigurableDrawText", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "Img Mask" + ] + }, + { + "id": 3715, + "type": "ConfigurableDrawText", + "pos": [ + -3690, + 1410 + ], + "size": [ + 320, + 100 + ], + "flags": {}, + "order": 304, + "mode": 0, + "inputs": [ + { + "name": "TEXT_STYLE", + "type": "TEXT_STYLE", + "link": 5573 + }, + { + "name": "IMAGE", + "type": "IMAGE", + "link": 5570 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 5571 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "ConfigurableDrawText", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "IP1" + ] + }, + { + "id": 3716, + "type": "ConfigurableDrawText", + "pos": [ + -3690, + 1750 + ], + "size": [ + 320, + 100 + ], + "flags": {}, + "order": 305, + "mode": 0, + "inputs": [ + { + "name": "TEXT_STYLE", + "type": "TEXT_STYLE", + "link": 5574 + }, + { + "name": "IMAGE", + "type": "IMAGE", + "link": 5584 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 5585 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "ConfigurableDrawText", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "IP2" + ] + }, + { + "id": 3717, + "type": "ConfigurableDrawText", + "pos": [ + -3690, + 2090 + ], + "size": [ + 320, + 100 + ], + "flags": {}, + "order": 306, + "mode": 0, + "inputs": [ + { + "name": "TEXT_STYLE", + "type": "TEXT_STYLE", + "link": 5575 + }, + { + "name": "IMAGE", + "type": "IMAGE", + "link": 5581 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 5578 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "ConfigurableDrawText", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "IP3 / Face" + ] + }, + { + "id": 3718, + "type": "ConfigurableDrawText", + "pos": [ + -3690, + 2430 + ], + "size": [ + 330, + 100 + ], + "flags": {}, + "order": 301, + "mode": 0, + "inputs": [ + { + "name": "TEXT_STYLE", + "type": "TEXT_STYLE", + "link": 5576 + }, + { + "name": "IMAGE", + "type": "IMAGE", + "link": 5583 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 5579 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "ConfigurableDrawText", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "Canny" + ] + }, + { + "id": 3719, + "type": "ConfigurableDrawText", + "pos": [ + -3690, + 2750 + ], + "size": [ + 340, + 100 + ], + "flags": {}, + "order": 303, + "mode": 0, + "inputs": [ + { + "name": "TEXT_STYLE", + "type": "TEXT_STYLE", + "link": 5577 + }, + { + "name": "IMAGE", + "type": "IMAGE", + "link": 5572 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 5580 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "ConfigurableDrawText", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "Depth" + ] + }, + { + "id": 3720, + "type": "MaskBlur+", + "pos": [ + -5028.875, + 1100.03125 + ], + "size": [ + 320, + 80 + ], + "flags": { + "collapsed": true + }, + "order": 229, + "mode": 0, + "inputs": [ + { + "name": "mask", + "type": "MASK", + "link": 5588 + }, + { + "name": "amount", + "type": "INT", + "link": 5586, + "widget": { + "name": "amount" + } + } + ], + "outputs": [ + { + "name": "MASK", + "type": "MASK", + "links": [ + 5587 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "MaskBlur+", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 6, + "gpu" + ] + }, + { + "id": 3722, + "type": "MaskBlur+", + "pos": [ + 5750, + 1880 + ], + "size": [ + 260, + 80 + ], + "flags": { + "collapsed": false + }, + "order": 326, + "mode": 0, + "inputs": [ + { + "name": "mask", + "type": "MASK", + "link": 5590 + }, + { + "name": "amount", + "type": "INT", + "link": 5589, + "widget": { + "name": "amount" + } + } + ], + "outputs": [ + { + "name": "MASK", + "type": "MASK", + "links": [ + 5591 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "MaskBlur+", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 6, + "gpu" + ] + }, + { + "id": 3723, + "type": "MaskBlur+", + "pos": [ + 3939.0615234375, + 4172.4921875 + ], + "size": [ + 320, + 80 + ], + "flags": { + "collapsed": true + }, + "order": 219, + "mode": 0, + "inputs": [ + { + "name": "mask", + "type": "MASK", + "link": 5592 + }, + { + "name": "amount", + "type": "INT", + "link": 5593, + "widget": { + "name": "amount" + } + } + ], + "outputs": [ + { + "name": "MASK", + "type": "MASK", + "links": [ + 5594, + 5634 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "MaskBlur+", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 6, + "gpu" + ] + }, + { + "id": 3756, + "type": "OutputGetString", + "pos": [ + -3140, + 2670 + ], + "size": [ + 260, + 30 + ], + "flags": { + "collapsed": true + }, + "order": 155, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "STRING", + "type": "STRING", + "links": [ + 5623, + 5624 + ], + "slot_index": 0 + } + ], + "title": "GetString_Output - imgload_prep", + "properties": { + "Node name for S&R": "OutputGetString", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "Output - imgload_prep" + ] + }, + { + "id": 3757, + "type": "FluxContinuumModelRouter", + "pos": [ + -2090, + 260 + ], + "size": [ + 240, + 110 + ], + "flags": {}, + "order": 246, + "mode": 0, + "inputs": [ + { + "name": "flux_fill", + "type": "MODEL", + "link": 5611 + }, + { + "name": "flux_depth", + "type": "MODEL", + "link": 5612 + }, + { + "name": "flux_canny", + "type": "MODEL", + "link": 5613 + }, + { + "name": "flux_dev", + "type": "MODEL", + "link": 5614 + }, + { + "name": "condition", + "type": "STRING", + "link": 5610, + "widget": { + "name": "condition" + } + } + ], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "links": [ + 5615 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "FluxContinuumModelRouter", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "" + ] + }, + { + "id": 3758, + "type": "OutputGetString", + "pos": [ + -2410, + 490 + ], + "size": [ + 260, + 30 + ], + "flags": {}, + "order": 156, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "STRING", + "type": "STRING", + "links": [ + 5610 + ], + "slot_index": 0 + } + ], + "title": "GetString_Output - imgload_prep", + "properties": { + "Node name for S&R": "OutputGetString", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "Output - imgload_prep" + ] + }, + { + "id": 3773, + "type": "ImageCompositeMasked", + "pos": [ + 5379.0615234375, + 4012.4970703125 + ], + "size": [ + 270, + 150 + ], + "flags": {}, + "order": 364, + "mode": 0, + "inputs": [ + { + "name": "destination", + "type": "IMAGE", + "link": 5639 + }, + { + "name": "source", + "type": "IMAGE", + "link": 5630 + }, + { + "name": "mask", + "type": "MASK", + "link": 5636, + "shape": 7 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 5633 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "ImageCompositeMasked", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 0, + 0, + false + ] + }, + { + "id": 3778, + "type": "Reroute", + "pos": [ + 4299.0615234375, + 3942.49755859375 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 299, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5634 + } + ], + "outputs": [ + { + "name": "", + "type": "MASK", + "links": [ + 5635 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 3779, + "type": "Reroute", + "pos": [ + 5229.0615234375, + 3942.49755859375 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 340, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5635 + } + ], + "outputs": [ + { + "name": "", + "type": "MASK", + "links": [ + 5636 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 3780, + "type": "Reroute", + "pos": [ + 4299.0615234375, + 3902.49755859375 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 189, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5638 + } + ], + "outputs": [ + { + "name": "", + "type": "IMAGE", + "links": [ + 5637 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 3781, + "type": "Reroute", + "pos": [ + 5229.0615234375, + 3902.49755859375 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 267, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5637 + } + ], + "outputs": [ + { + "name": "", + "type": "IMAGE", + "links": [ + 5639 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 3785, + "type": "SimpleCondition+", + "pos": [ + 7990, + 6390 + ], + "size": [ + 240, + 70 + ], + "flags": { + "collapsed": false + }, + "order": 404, + "mode": 0, + "inputs": [ + { + "name": "evaluate", + "type": "*", + "link": 5651 + }, + { + "name": "on_true", + "type": "*", + "link": 5725 + }, + { + "name": "on_false", + "type": "*", + "link": 5743, + "shape": 7 + } + ], + "outputs": [ + { + "name": "result", + "type": "*", + "links": [ + 5658 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "SimpleCondition+", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 3787, + "type": "Reroute", + "pos": [ + 4870, + 6290 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 293, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5661, + "widget": { + "name": "value" + } + } + ], + "outputs": [ + { + "name": "", + "type": "FLOAT", + "links": [ + 5713, + 5720 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 3790, + "type": "Bookmark (rgthree)", + "pos": [ + 2940, + 6760 + ], + "size": [ + 210, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 157, + "mode": 0, + "inputs": [], + "outputs": [], + "title": "🔖", + "properties": {}, + "widgets_values": [ + "3", + 1 + ] + }, + { + "id": 3809, + "type": "StyleModelApplyAdvanced", + "pos": [ + 5200, + 6620 + ], + "size": [ + 300, + 100 + ], + "flags": {}, + "order": 342, + "mode": 0, + "inputs": [ + { + "name": "conditioning", + "type": "CONDITIONING", + "link": 5699 + }, + { + "name": "style_model", + "type": "STYLE_MODEL", + "link": 5700 + }, + { + "name": "clip_vision_output", + "type": "CLIP_VISION_OUTPUT", + "link": 5701 + }, + { + "name": "strength", + "type": "FLOAT", + "link": 5720, + "widget": { + "name": "strength" + } + } + ], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [ + 5719 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "StyleModelApplyAdvanced", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 0.864 + ] + }, + { + "id": 3582, + "type": "Reroute", + "pos": [ + 5970, + 6310 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 294, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5366, + "widget": { + "name": "value" + } + } + ], + "outputs": [ + { + "name": "", + "type": "FLOAT", + "links": [ + 5368, + 5727 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 3396, + "type": "Reroute", + "pos": [ + 7400, + 6170 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 334, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5072 + } + ], + "outputs": [ + { + "name": "", + "type": "STYLE_MODEL", + "links": [ + 5733 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 3783, + "type": "SimpleCondition+", + "pos": [ + 5540, + 6460 + ], + "size": [ + 240, + 70 + ], + "flags": { + "collapsed": false + }, + "order": 358, + "mode": 0, + "inputs": [ + { + "name": "evaluate", + "type": "*", + "link": 5642 + }, + { + "name": "on_true", + "type": "*", + "link": 5719 + }, + { + "name": "on_false", + "type": "*", + "link": 5644, + "shape": 7 + } + ], + "outputs": [ + { + "name": "result", + "type": "*", + "links": [ + 5738 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "SimpleCondition+", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 3387, + "type": "Reroute", + "pos": [ + 5780, + 6210 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 290, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5054 + } + ], + "outputs": [ + { + "name": "", + "type": "CLIP_VISION", + "links": [ + 5071, + 5731 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 3385, + "type": "Reroute", + "pos": [ + 6110, + 6170 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 292, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5058 + } + ], + "outputs": [ + { + "name": "", + "type": "STYLE_MODEL", + "links": [ + 5072, + 5732 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 3397, + "type": "Reroute", + "pos": [ + 7090, + 6220 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 332, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5071 + } + ], + "outputs": [ + { + "name": "", + "type": "CLIP_VISION", + "links": [ + 5734 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 3407, + "type": "Reroute", + "pos": [ + 7360, + 6340 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 295, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5362, + "widget": { + "name": "value" + } + } + ], + "outputs": [ + { + "name": "", + "type": "FLOAT", + "links": [ + 5363, + 5728 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 3811, + "type": "StyleModelApplyAdvanced", + "pos": [ + 6380, + 6620 + ], + "size": [ + 300, + 100 + ], + "flags": {}, + "order": 386, + "mode": 0, + "inputs": [ + { + "name": "conditioning", + "type": "CONDITIONING", + "link": 5740 + }, + { + "name": "style_model", + "type": "STYLE_MODEL", + "link": 5732 + }, + { + "name": "clip_vision_output", + "type": "CLIP_VISION_OUTPUT", + "link": 5722 + }, + { + "name": "strength", + "type": "FLOAT", + "link": 5727, + "widget": { + "name": "strength" + } + } + ], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [ + 5726 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "StyleModelApplyAdvanced", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 0.864 + ] + }, + { + "id": 3813, + "type": "StyleModelApplyAdvanced", + "pos": [ + 7690, + 6620 + ], + "size": [ + 300, + 100 + ], + "flags": {}, + "order": 401, + "mode": 0, + "inputs": [ + { + "name": "conditioning", + "type": "CONDITIONING", + "link": 5742 + }, + { + "name": "style_model", + "type": "STYLE_MODEL", + "link": 5733 + }, + { + "name": "clip_vision_output", + "type": "CLIP_VISION_OUTPUT", + "link": 5724 + }, + { + "name": "strength", + "type": "FLOAT", + "link": 5728, + "widget": { + "name": "strength" + } + } + ], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [ + 5725 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "StyleModelApplyAdvanced", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 0.864 + ] + }, + { + "id": 3816, + "type": "Reroute", + "pos": [ + 6240, + 6470 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 372, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5738 + } + ], + "outputs": [ + { + "name": "", + "type": "*", + "links": [ + 5739, + 5740 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 3784, + "type": "SimpleCondition+", + "pos": [ + 6780, + 6430 + ], + "size": [ + 240, + 70 + ], + "flags": { + "collapsed": false + }, + "order": 394, + "mode": 0, + "inputs": [ + { + "name": "evaluate", + "type": "*", + "link": 5656 + }, + { + "name": "on_true", + "type": "*", + "link": 5726 + }, + { + "name": "on_false", + "type": "*", + "link": 5739, + "shape": 7 + } + ], + "outputs": [ + { + "name": "result", + "type": "*", + "links": [ + 5741 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "SimpleCondition+", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 3817, + "type": "Reroute", + "pos": [ + 7510, + 6430 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 398, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5741 + } + ], + "outputs": [ + { + "name": "", + "type": "*", + "links": [ + 5742, + 5743 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 3814, + "type": "CLIPVisionEncode", + "pos": [ + 7360, + 6660 + ], + "size": [ + 250, + 50 + ], + "flags": { + "collapsed": false + }, + "order": 355, + "mode": 0, + "inputs": [ + { + "name": "clip_vision", + "type": "CLIP_VISION", + "link": 5734 + }, + { + "name": "image", + "type": "IMAGE", + "link": 5729 + } + ], + "outputs": [ + { + "name": "CLIP_VISION_OUTPUT", + "type": "CLIP_VISION_OUTPUT", + "links": [ + 5724 + ] + } + ], + "properties": { + "Node name for S&R": "CLIPVisionEncode", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 3812, + "type": "CLIPVisionEncode", + "pos": [ + 6030, + 6650 + ], + "size": [ + 250, + 50 + ], + "flags": { + "collapsed": false + }, + "order": 333, + "mode": 0, + "inputs": [ + { + "name": "clip_vision", + "type": "CLIP_VISION", + "link": 5731 + }, + { + "name": "image", + "type": "IMAGE", + "link": 5730 + } + ], + "outputs": [ + { + "name": "CLIP_VISION_OUTPUT", + "type": "CLIP_VISION_OUTPUT", + "links": [ + 5722 + ] + } + ], + "properties": { + "Node name for S&R": "CLIPVisionEncode", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 3810, + "type": "CLIPVisionEncode", + "pos": [ + 4880, + 6660 + ], + "size": [ + 250, + 50 + ], + "flags": { + "collapsed": false + }, + "order": 291, + "mode": 0, + "inputs": [ + { + "name": "clip_vision", + "type": "CLIP_VISION", + "link": 5702 + }, + { + "name": "image", + "type": "IMAGE", + "link": 5703 + } + ], + "outputs": [ + { + "name": "CLIP_VISION_OUTPUT", + "type": "CLIP_VISION_OUTPUT", + "links": [ + 5701 + ] + } + ], + "properties": { + "Node name for S&R": "CLIPVisionEncode", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 3556, + "type": "CondPassThrough", + "pos": [ + 8350, + 6420 + ], + "size": [ + 220, + 50 + ], + "flags": { + "collapsed": true + }, + "order": 408, + "mode": 0, + "inputs": [ + { + "name": "positive", + "type": "CONDITIONING", + "link": 5658, + "shape": 7 + }, + { + "name": "negative", + "type": "CONDITIONING", + "link": null, + "shape": 7 + } + ], + "outputs": [ + { + "name": "positive", + "type": "CONDITIONING", + "links": [ + 5337 + ], + "slot_index": 0 + }, + { + "name": "negative", + "type": "CONDITIONING", + "links": null + } + ], + "properties": { + "Node name for S&R": "CondPassThrough", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 777, + "type": "CLIPTextEncodeFlux", + "pos": [ + 3840, + 6510 + ], + "size": [ + 210, + 110 + ], + "flags": { + "collapsed": false + }, + "order": 230, + "mode": 0, + "inputs": [ + { + "name": "clip", + "type": "CLIP", + "link": 5019 + }, + { + "name": "clip_l", + "type": "STRING", + "link": 1443, + "widget": { + "name": "clip_l" + } + }, + { + "name": "t5xxl", + "type": "STRING", + "link": 1442, + "widget": { + "name": "t5xxl" + } + }, + { + "name": "guidance", + "type": "FLOAT", + "link": 4993, + "widget": { + "name": "guidance" + } + } + ], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [ + 5060 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "CLIPTextEncodeFlux", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "close up, marketing material, professional lighting, advertising", + "A photograph featuring a 34-year-old rbw1990 with blonde hair and beard wearing a red polo shirt and green apron, working at Bunnings as a cashier", + 30 + ] + }, + { + "id": 3493, + "type": "Canny", + "pos": [ + 1760, + 800 + ], + "size": [ + 310, + 120 + ], + "flags": { + "collapsed": false, + "pinned": true + }, + "order": 216, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 5212 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 5483 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "Canny", + "enableTabs": true, + "tabWidth": 65, + "tabXOffset": 80, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 0.01, + 0.5 + ] + }, + { + "id": 3691, + "type": "IPAdapterSlider", + "pos": [ + 1760, + 800 + ], + "size": [ + 310, + 120 + ], + "flags": { + "collapsed": false, + "pinned": true + }, + "order": 158, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "VEC3", + "type": "VEC3", + "links": [ + 5518 + ] + } + ], + "title": "IPAdapter", + "properties": { + "Node name for S&R": "IPAdapterSlider", + "enableTabs": true, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 0, + 0, + 0 + ] + }, + { + "id": 3327, + "type": "SimpleMathInt+", + "pos": [ + 1760, + 660 + ], + "size": [ + 310, + 60 + ], + "flags": { + "pinned": true + }, + "order": 159, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 4976 + ], + "slot_index": 0 + } + ], + "title": "Mask Feather", + "properties": { + "Node name for S&R": "SimpleMathInt+", + "enableTabs": true, + "tabWidth": 70, + "tabXOffset": 80, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 100 + ] + }, + { + "id": 1573, + "type": "Fast Groups Bypasser (rgthree)", + "pos": [ + 480, + 1430 + ], + "size": [ + 310, + 80 + ], + "flags": { + "collapsed": false, + "pinned": true + }, + "order": 160, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "OPT_CONNECTION", + "type": "*", + "links": null + } + ], + "title": "Options", + "properties": { + "matchColors": "", + "matchTitle": "Save|Play", + "showNav": true, + "sort": "position", + "customSortAlphabet": "", + "toggleRestriction": "default" + } + }, + { + "id": 3128, + "type": "Note", + "pos": [ + 3000, + 10 + ], + "size": [ + 310, + 70 + ], + "flags": {}, + "order": 161, + "mode": 0, + "inputs": [], + "outputs": [], + "properties": {}, + "widgets_values": [ + "setup your models here.\nfeel free to replace with GGUF models" + ], + "color": "#432", + "bgcolor": "#653" + }, + { + "id": 3362, + "type": "UNETLoader", + "pos": [ + 3000, + 800 + ], + "size": [ + 320, + 80 + ], + "flags": { + "collapsed": false + }, + "order": 162, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "links": [ + 5014 + ], + "slot_index": 0, + "shape": 3 + } + ], + "title": "Load Flux Canny Model", + "properties": { + "Node name for S&R": "UNETLoader", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "flux1-canny-dev.safetensors", + "default" + ] + }, + { + "id": 3374, + "type": "StyleModelLoader", + "pos": [ + 3000, + 920 + ], + "size": [ + 320, + 60 + ], + "flags": {}, + "order": 163, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "STYLE_MODEL", + "type": "STYLE_MODEL", + "links": [ + 5033 + ], + "slot_index": 0 + } + ], + "title": "Load Redux Model", + "properties": { + "Node name for S&R": "StyleModelLoader", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "flux1-redux-dev.safetensors" + ] + }, + { + "id": 3361, + "type": "UNETLoader", + "pos": [ + 3000, + 680 + ], + "size": [ + 320, + 80 + ], + "flags": { + "collapsed": false + }, + "order": 164, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "links": [ + 5013 + ], + "slot_index": 0, + "shape": 3 + } + ], + "title": "Load Flux Depth Model", + "properties": { + "Node name for S&R": "UNETLoader", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "flux1-depth-dev.safetensors", + "default" + ] + }, + { + "id": 3234, + "type": "UNETLoader", + "pos": [ + 3000, + 550 + ], + "size": [ + 320, + 80 + ], + "flags": { + "collapsed": false + }, + "order": 165, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "links": [ + 4805 + ], + "slot_index": 0, + "shape": 3 + } + ], + "title": "Load Flux Fill Model", + "properties": { + "Node name for S&R": "UNETLoader", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "flux1-fill-dev.safetensors", + "default" + ] + }, + { + "id": 2469, + "type": "UNETLoader", + "pos": [ + 3000, + 170 + ], + "size": [ + 320, + 80 + ], + "flags": {}, + "order": 166, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "links": [ + 3494 + ], + "slot_index": 0, + "shape": 3 + } + ], + "title": "Load Flux Model", + "properties": { + "Node name for S&R": "UNETLoader", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "flux1-dev.sft", + "fp8_e4m3fn" + ] + }, + { + "id": 2464, + "type": "TextVersions", + "pos": [ + 840, + 1130 + ], + "size": [ + 870, + 150 + ], + "flags": { + "collapsed": false, + "pinned": true + }, + "order": 167, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "text", + "type": "STRING", + "links": [ + 3492 + ], + "slot_index": 0 + } + ], + "title": "Prompt", + "properties": { + "Node name for S&R": "TextVersions", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "versionAmount": 8 + }, + "widgets_values": [ + "a sea turtle" + ], + "color": "#232", + "bgcolor": "#353", + "tabContents": [ + "a sea turtle", + "", + "", + "", + "", + "", + "", + "" + ], + "activeTab": 0 + }, + { + "id": 3725, + "type": "ImageInvert", + "pos": [ + -4300, + 1090 + ], + "size": [ + 210, + 30 + ], + "flags": { + "collapsed": true + }, + "order": 357, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 5598 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 5599 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "ImageInvert", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 3724, + "type": "ImageBlend", + "pos": [ + -4110, + 1040 + ], + "size": [ + 210, + 100 + ], + "flags": {}, + "order": 371, + "mode": 0, + "inputs": [ + { + "name": "image1", + "type": "IMAGE", + "link": 5595 + }, + { + "name": "image2", + "type": "IMAGE", + "link": 5599 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 5597 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "ImageBlend", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 1, + "multiply" + ] + }, + { + "id": 3743, + "type": "PreviewBridge", + "pos": [ + 1760, + 170 + ], + "size": [ + 310, + 410 + ], + "flags": {}, + "order": 259, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 5606 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": null + }, + { + "name": "MASK", + "type": "MASK", + "links": [ + 5605 + ], + "slot_index": 1 + } + ], + "title": "Img Mask", + "properties": { + "Node name for S&R": "PreviewBridge", + "enableTabs": true, + "tabWidth": 50, + "tabXOffset": 65, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "$3743-0", + false, + "if_same_size" + ], + "color": "#222", + "bgcolor": "#000" + }, + { + "id": 2774, + "type": "LoadImage", + "pos": [ + 1760, + 170 + ], + "size": [ + 310, + 410 + ], + "flags": { + "collapsed": false, + "pinned": true + }, + "order": 168, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 5371 + ], + "slot_index": 0 + }, + { + "name": "MASK", + "type": "MASK", + "links": null + } + ], + "title": "IP1", + "properties": { + "Node name for S&R": "LoadImage", + "enableTabs": true, + "tabWidth": 40, + "tabXOffset": 120, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "example.png", + "image" + ], + "color": "#432", + "bgcolor": "#653" + }, + { + "id": 3557, + "type": "LoadImage", + "pos": [ + 1760, + 170 + ], + "size": [ + 310, + 410 + ], + "flags": { + "collapsed": false, + "pinned": true + }, + "order": 169, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 5370 + ], + "slot_index": 0 + }, + { + "name": "MASK", + "type": "MASK", + "links": null + } + ], + "title": "IP2", + "properties": { + "Node name for S&R": "LoadImage", + "enableTabs": true, + "tabWidth": 40, + "tabXOffset": 165, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "example.png", + "image" + ], + "color": "#323", + "bgcolor": "#535" + }, + { + "id": 3337, + "type": "LoadImage", + "pos": [ + 1760, + 170 + ], + "size": [ + 310, + 410 + ], + "flags": { + "collapsed": false, + "pinned": true + }, + "order": 170, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 5374 + ], + "slot_index": 0 + }, + { + "name": "MASK", + "type": "MASK", + "links": null + } + ], + "title": "IP3/Face", + "properties": { + "Node name for S&R": "LoadImage", + "enableTabs": true, + "tabWidth": 50, + "tabXOffset": 210, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "example.png", + "image" + ], + "color": "#223", + "bgcolor": "#335" + }, + { + "id": 3604, + "type": "PreviewImage", + "pos": [ + 1760, + 170 + ], + "size": [ + 310, + 410 + ], + "flags": { + "collapsed": false, + "pinned": true + }, + "order": 228, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 5472 + } + ], + "outputs": [], + "title": "Preview", + "properties": { + "Node name for S&R": "PreviewImage", + "enableTabs": true, + "tabWidth": 40, + "tabXOffset": 265, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 2219, + "type": "LoadImage", + "pos": [ + 1760, + 170 + ], + "size": [ + 310, + 410 + ], + "flags": { + "collapsed": false, + "pinned": true + }, + "order": 171, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 4446, + 5606 + ], + "slot_index": 0, + "label": "IMAGE" + }, + { + "name": "MASK", + "type": "MASK", + "links": [], + "slot_index": 1 + } + ], + "title": "Img Load", + "properties": { + "Node name for S&R": "LoadImage", + "enableTabs": true, + "tabWidth": 50, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "example.png", + "image" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1274, + "type": "DenoiseSlider", + "pos": [ + 1760, + 660 + ], + "size": [ + 310, + 60 + ], + "flags": { + "collapsed": false, + "pinned": true + }, + "order": 172, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "links": [ + 2000 + ], + "slot_index": 0, + "shape": 3 + } + ], + "title": "Denoise", + "properties": { + "Node name for S&R": "DenoiseSlider", + "enableTabs": true, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Feather Mask\n", + "secondTabOffset": 80, + "secondTabWidth": 70 + }, + "widgets_values": [ + 0.35100000000000003 + ] + }, + { + "id": 2468, + "type": "TextVersions", + "pos": [ + 840, + 1320 + ], + "size": [ + 870, + 80 + ], + "flags": { + "pinned": true + }, + "order": 173, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "text", + "type": "STRING", + "links": [ + 3493 + ], + "slot_index": 0 + } + ], + "title": "Tags", + "properties": { + "Node name for S&R": "TextVersions", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "versionAmount": 5 + }, + "widgets_values": [ + "cinematic, nature photography, wide angle" + ], + "color": "#2a363b", + "bgcolor": "#3f5159", + "tabContents": [ + "cinematic, nature photography, wide angle", + "", + "", + "", + "" + ], + "activeTab": 0 + }, + { + "id": 1343, + "type": "ImageCrop+", + "pos": [ + 1759.6929931640625, + 999.8751220703125 + ], + "size": [ + 310, + 250 + ], + "flags": { + "collapsed": false, + "pinned": true + }, + "order": 268, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 2793 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 3481 + ], + "slot_index": 0, + "shape": 3 + }, + { + "name": "x", + "type": "INT", + "links": null, + "shape": 3 + }, + { + "name": "y", + "type": "INT", + "links": null, + "shape": 3 + } + ], + "title": "Crop", + "properties": { + "Node name for S&R": "ImageCrop+", + "enableTabs": true, + "tabWidth": 50, + "tabXOffset": 65, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 2560, + 2560, + "center", + 0, + 0 + ] + }, + { + "id": 2453, + "type": "ImageSmartSharpen+", + "pos": [ + 1759.6929931640625, + 999.8751220703125 + ], + "size": [ + 310, + 250 + ], + "flags": { + "collapsed": false, + "pinned": true + }, + "order": 319, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 3481 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 3482 + ], + "slot_index": 0 + } + ], + "title": "Sharpen", + "properties": { + "Node name for S&R": "ImageSmartSharpen+", + "enableTabs": true, + "tabWidth": 50, + "tabXOffset": 120, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 1, + 0.75, + 0, + 0.5 + ] + }, + { + "id": 2454, + "type": "Color Correct (mtb)", + "pos": [ + 1759.6929931640625, + 999.8751220703125 + ], + "size": [ + 310, + 250 + ], + "flags": { + "collapsed": false, + "pinned": true + }, + "order": 346, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 3482 + }, + { + "name": "mask", + "type": "MASK", + "link": null, + "shape": 7 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 4606 + ], + "slot_index": 0 + } + ], + "title": "CC", + "properties": { + "Node name for S&R": "Color Correct (mtb)", + "enableTabs": true, + "tabWidth": 50, + "tabXOffset": 175, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + false, + 1, + 1, + 0, + 0, + 0, + 1, + 1 + ] + }, + { + "id": 1342, + "type": "ImageResize+", + "pos": [ + 1759.6929931640625, + 999.8751220703125 + ], + "size": [ + 310, + 250 + ], + "flags": { + "collapsed": false, + "pinned": true + }, + "order": 191, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 2792 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 2793 + ], + "slot_index": 0, + "shape": 3 + }, + { + "name": "width", + "type": "INT", + "links": null, + "shape": 3 + }, + { + "name": "height", + "type": "INT", + "links": null, + "shape": 3 + } + ], + "title": "Resize", + "properties": { + "Node name for S&R": "ImageResize+", + "enableTabs": true, + "tabWidth": 50, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 1024, + 1024, + "lanczos", + "keep proportion", + "always", + 8 + ] + }, + { + "id": 3367, + "type": "GetNode", + "pos": [ + 3780, + 290 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 174, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [ + 5017, + 5384 + ], + "slot_index": 0 + } + ], + "title": "Get_conditioning", + "properties": {}, + "widgets_values": [ + "conditioning" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1291, + "type": "GetNode", + "pos": [ + 3640, + 1610 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 175, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "VAE", + "type": "VAE", + "links": [ + 4912 + ], + "slot_index": 0 + } + ], + "title": "Get_vae", + "properties": {}, + "widgets_values": [ + "vae" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3283, + "type": "Reroute", + "pos": [ + 5430, + 1590 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 315, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 4911 + } + ], + "outputs": [ + { + "name": "", + "type": "VAE", + "links": [ + 4904 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 3264, + "type": "Reroute", + "pos": [ + 4170, + 1670 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 201, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 4966 + } + ], + "outputs": [ + { + "name": "", + "type": "MASK", + "links": [ + 4850, + 4882 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 3265, + "type": "Reroute", + "pos": [ + 4170, + 1620 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 207, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 4849 + } + ], + "outputs": [ + { + "name": "", + "type": "IMAGE", + "links": [ + 4851, + 4914 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 3333, + "type": "GetNode", + "pos": [ + 4460, + 2860 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 176, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 4980 + ], + "slot_index": 0 + } + ], + "title": "Get_batch", + "properties": {}, + "widgets_values": [ + "batch" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3731, + "type": "OutputTextDisplay", + "pos": [ + 1100, + 120 + ], + "size": [ + 340, + 30 + ], + "flags": {}, + "order": 177, + "mode": 0, + "inputs": [], + "outputs": [], + "title": "Unnamed", + "properties": { + "fontSize": 16, + "fontFamily": "'Inter', Arial", + "fontColor": "#9c9c9c", + "textAlign": "center", + "bgColor": "#00000000", + "padding": 0 + }, + "bgcolor": "#00000000", + "shape": 1 + } + ], + "links": [ + [ + 1118, + 589, + 0, + 590, + 1, + "GUIDER" + ], + [ + 1120, + 593, + 0, + 590, + 3, + "SIGMAS" + ], + [ + 1123, + 586, + 0, + 593, + 0, + "MODEL" + ], + [ + 1187, + 641, + 0, + 644, + 0, + "*" + ], + [ + 1360, + 596, + 0, + 591, + 0, + "INT" + ], + [ + 1371, + 591, + 0, + 590, + 0, + "NOISE" + ], + [ + 1424, + 586, + 0, + 589, + 0, + "MODEL" + ], + [ + 1442, + 724, + 0, + 777, + 2, + "STRING" + ], + [ + 1443, + 793, + 0, + 777, + 1, + "STRING" + ], + [ + 1474, + 590, + 1, + 609, + 0, + "LATENT" + ], + [ + 1489, + 586, + 0, + 837, + 0, + "*" + ], + [ + 1490, + 837, + 0, + 834, + 0, + "*" + ], + [ + 1538, + 609, + 0, + 715, + 0, + "IMAGE" + ], + [ + 1589, + 922, + 0, + 925, + 0, + "*" + ], + [ + 1599, + 933, + 0, + 932, + 0, + "BASIC_PIPE" + ], + [ + 1608, + 932, + 1, + 697, + 0, + "MODEL" + ], + [ + 1680, + 965, + 0, + 963, + 1, + "VAE" + ], + [ + 1745, + 1026, + 0, + 1023, + 0, + "IMAGE" + ], + [ + 1769, + 1052, + 0, + 1051, + 3, + "SIGMAS" + ], + [ + 1770, + 1054, + 0, + 1053, + 0, + "NOISE" + ], + [ + 1772, + 1055, + 0, + 1053, + 4, + "LATENT" + ], + [ + 1773, + 1051, + 0, + 1055, + 0, + "LATENT" + ], + [ + 1775, + 1057, + 0, + 1056, + 0, + "INT" + ], + [ + 1776, + 1056, + 0, + 1051, + 0, + "NOISE" + ], + [ + 1783, + 1060, + 0, + 1061, + 0, + "*" + ], + [ + 1786, + 1064, + 0, + 1060, + 1, + "VAE" + ], + [ + 1787, + 1053, + 1, + 1060, + 0, + "LATENT" + ], + [ + 1798, + 963, + 0, + 1073, + 0, + "LATENT" + ], + [ + 1800, + 1073, + 0, + 1072, + 2, + "LATENT" + ], + [ + 1802, + 1074, + 0, + 1075, + 0, + "*" + ], + [ + 1803, + 1072, + 0, + 1074, + 0, + "LATENT" + ], + [ + 1804, + 965, + 0, + 1074, + 1, + "VAE" + ], + [ + 1859, + 1113, + 0, + 716, + 0, + "IMAGE" + ], + [ + 1863, + 1103, + 0, + 1116, + 0, + "*" + ], + [ + 1867, + 1128, + 0, + 1129, + 0, + "IMAGE" + ], + [ + 1868, + 1129, + 0, + 1130, + 0, + "IMAGE" + ], + [ + 1871, + 1129, + 0, + 1131, + 0, + "IMAGE" + ], + [ + 1879, + 1136, + 0, + 1134, + 1, + "VAE" + ], + [ + 1920, + 1162, + 0, + 1073, + 1, + "INT" + ], + [ + 1923, + 1134, + 0, + 1128, + 0, + "IMAGE" + ], + [ + 2000, + 1274, + 0, + 1217, + 0, + "FLOAT" + ], + [ + 2001, + 1279, + 0, + 1281, + 0, + "*" + ], + [ + 2002, + 1278, + 0, + 1280, + 0, + "*" + ], + [ + 2003, + 1282, + 0, + 1285, + 0, + "*" + ], + [ + 2004, + 1285, + 0, + 1072, + 7, + "STRING" + ], + [ + 2005, + 1286, + 0, + 1072, + 6, + "STRING" + ], + [ + 2006, + 1287, + 0, + 1288, + 0, + "*" + ], + [ + 2007, + 1288, + 0, + 1072, + 8, + "STRING" + ], + [ + 2018, + 1300, + 0, + 1293, + 1, + "INT" + ], + [ + 2034, + 1312, + 0, + 429, + 9, + "FLOAT" + ], + [ + 2035, + 1313, + 0, + 429, + 7, + "INT" + ], + [ + 2037, + 1317, + 0, + 593, + 1, + "COMBO" + ], + [ + 2038, + 1318, + 0, + 593, + 2, + "INT" + ], + [ + 2055, + 1328, + 0, + 1262, + 0, + "COMBO" + ], + [ + 2071, + 1323, + 0, + 963, + 0, + "IMAGE" + ], + [ + 2073, + 1346, + 0, + 1345, + 0, + "IMAGE" + ], + [ + 2087, + 834, + 0, + 1358, + 0, + "MODEL" + ], + [ + 2088, + 921, + 0, + 1358, + 1, + "CONDITIONING" + ], + [ + 2089, + 1358, + 0, + 1051, + 1, + "GUIDER" + ], + [ + 2090, + 1358, + 0, + 1053, + 1, + "GUIDER" + ], + [ + 2092, + 1359, + 0, + 1052, + 0, + "SIGMAS" + ], + [ + 2105, + 1099, + 0, + 1051, + 4, + "LATENT" + ], + [ + 2163, + 1339, + 0, + 1387, + 0, + "UPSCALE_MODEL" + ], + [ + 2165, + 1388, + 0, + 1387, + 1, + "IMAGE" + ], + [ + 2166, + 1388, + 0, + 703, + 0, + "IMAGE" + ], + [ + 2169, + 697, + 0, + 1389, + 1, + "MODEL" + ], + [ + 2171, + 932, + 5, + 1389, + 3, + "CONDITIONING" + ], + [ + 2172, + 932, + 3, + 1389, + 4, + "VAE" + ], + [ + 2173, + 708, + 0, + 1389, + 5, + "INT" + ], + [ + 2174, + 1218, + 0, + 1389, + 8, + "FLOAT" + ], + [ + 2175, + 1308, + 0, + 1389, + 6, + "INT" + ], + [ + 2176, + 1311, + 0, + 1389, + 7, + "COMBO" + ], + [ + 2177, + 1389, + 0, + 729, + 0, + "IMAGE" + ], + [ + 2180, + 1387, + 0, + 418, + 0, + "IMAGE" + ], + [ + 2202, + 1325, + 0, + 1404, + 0, + "IMAGE" + ], + [ + 2206, + 1408, + 0, + 873, + 0, + "IMAGE" + ], + [ + 2209, + 1404, + 0, + 1411, + 0, + "IMAGE" + ], + [ + 2210, + 1411, + 0, + 1405, + 0, + "*" + ], + [ + 2211, + 1411, + 0, + 429, + 0, + "IMAGE" + ], + [ + 2212, + 1410, + 0, + 1404, + 1, + "INT" + ], + [ + 2231, + 1406, + 0, + 1405, + 1, + "INT" + ], + [ + 2243, + 1405, + 0, + 429, + 6, + "INT" + ], + [ + 2278, + 1470, + 0, + 1134, + 0, + "LATENT" + ], + [ + 2305, + 1488, + 0, + 1095, + 0, + "INT" + ], + [ + 2313, + 1262, + 0, + 429, + 8, + "COMBO" + ], + [ + 2333, + 1515, + 0, + 1500, + 0, + "COMBO" + ], + [ + 2334, + 1500, + 0, + 590, + 2, + "SAMPLER" + ], + [ + 2335, + 1500, + 0, + 1518, + 0, + "*" + ], + [ + 2337, + 1520, + 0, + 1051, + 2, + "SAMPLER" + ], + [ + 2338, + 1520, + 0, + 1053, + 2, + "SAMPLER" + ], + [ + 2341, + 1523, + 0, + 429, + 10, + "COMBO" + ], + [ + 2342, + 1524, + 0, + 1389, + 9, + "COMBO" + ], + [ + 2344, + 1526, + 0, + 1072, + 9, + "STRING" + ], + [ + 2361, + 1534, + 0, + 1330, + 0, + "*" + ], + [ + 2380, + 726, + 0, + 624, + 0, + "IMAGE" + ], + [ + 2404, + 1618, + 0, + 586, + 3, + "FLOAT" + ], + [ + 2406, + 1620, + 0, + 697, + 1, + "FLOAT" + ], + [ + 2409, + 1623, + 0, + 1624, + 0, + "*" + ], + [ + 2410, + 1624, + 0, + 1072, + 10, + "STRING" + ], + [ + 2412, + 1627, + 0, + 1055, + 1, + "MASK" + ], + [ + 2418, + 1629, + 0, + 1617, + 0, + "FLOAT" + ], + [ + 2792, + 1344, + 0, + 1342, + 0, + "IMAGE" + ], + [ + 2793, + 1342, + 0, + 1343, + 0, + "IMAGE" + ], + [ + 3152, + 645, + 0, + 429, + 2, + "BASIC_PIPE" + ], + [ + 3212, + 2211, + 0, + 641, + 4, + "CONDITIONING" + ], + [ + 3214, + 2217, + 0, + 1090, + 0, + "INT" + ], + [ + 3215, + 2218, + 0, + 1331, + 0, + "INT" + ], + [ + 3362, + 2328, + 0, + 1072, + 1, + "CONDITIONING" + ], + [ + 3363, + 1079, + 0, + 1072, + 0, + "MODEL" + ], + [ + 3425, + 2364, + 0, + 2334, + 1, + "IMAGE" + ], + [ + 3426, + 717, + 0, + 2334, + 0, + "IMAGE" + ], + [ + 3432, + 1115, + 0, + 1103, + 1, + "CLIP" + ], + [ + 3433, + 418, + 0, + 1392, + 0, + "IMAGE" + ], + [ + 3447, + 2427, + 0, + 2428, + 0, + "*" + ], + [ + 3448, + 2429, + 0, + 1090, + 1, + "COMBO" + ], + [ + 3449, + 1090, + 1, + 586, + 1, + "INT" + ], + [ + 3450, + 1090, + 2, + 586, + 2, + "INT" + ], + [ + 3460, + 2435, + 0, + 2437, + 0, + "*" + ], + [ + 3461, + 2438, + 0, + 2436, + 0, + "SAMPLER_PARAMS" + ], + [ + 3463, + 2436, + 0, + 1508, + 0, + "COMBO" + ], + [ + 3464, + 2436, + 2, + 1271, + 0, + "COMBO" + ], + [ + 3465, + 2436, + 1, + 1510, + 0, + "STRING" + ], + [ + 3466, + 2436, + 3, + 1272, + 0, + "STRING" + ], + [ + 3481, + 1343, + 0, + 2453, + 0, + "IMAGE" + ], + [ + 3482, + 2453, + 0, + 2454, + 0, + "IMAGE" + ], + [ + 3492, + 2464, + 0, + 723, + 0, + "STRING" + ], + [ + 3493, + 2468, + 0, + 788, + 0, + "STRING" + ], + [ + 3494, + 2469, + 0, + 1105, + 0, + "MODEL" + ], + [ + 3499, + 2472, + 0, + 609, + 1, + "VAE" + ], + [ + 3509, + 2476, + 0, + 2211, + 0, + "CLIP" + ], + [ + 3543, + 1090, + 1, + 2507, + 0, + "*" + ], + [ + 3544, + 1090, + 2, + 2508, + 0, + "*" + ], + [ + 3717, + 1052, + 1, + 2600, + 0, + "*" + ], + [ + 3718, + 2600, + 0, + 1053, + 3, + "SIGMAS" + ], + [ + 3722, + 1051, + 1, + 1470, + 0, + "*" + ], + [ + 3723, + 1130, + 0, + 1627, + 0, + "*" + ], + [ + 4414, + 717, + 0, + 3000, + 0, + "IMAGE" + ], + [ + 4424, + 583, + 0, + 1114, + 0, + "CLIP" + ], + [ + 4425, + 594, + 0, + 832, + 0, + "VAE" + ], + [ + 4446, + 2219, + 0, + 1320, + 0, + "IMAGE" + ], + [ + 4511, + 1022, + 0, + 1113, + 0, + "IMAGE" + ], + [ + 4514, + 1090, + 0, + 3032, + 0, + "*" + ], + [ + 4606, + 2454, + 0, + 3055, + 0, + "IMAGE" + ], + [ + 4607, + 3055, + 0, + 1346, + 0, + "IMAGE" + ], + [ + 4608, + 3055, + 1, + 3103, + 0, + "*" + ], + [ + 4666, + 3133, + 0, + 3132, + 1, + "INT" + ], + [ + 4667, + 418, + 0, + 3132, + 0, + "IMAGE" + ], + [ + 4668, + 3132, + 0, + 1389, + 0, + "IMAGE" + ], + [ + 4689, + 1086, + 0, + 3169, + 0, + "*" + ], + [ + 4690, + 3169, + 0, + 1072, + 5, + "STRING" + ], + [ + 4691, + 1219, + 0, + 3170, + 0, + "*" + ], + [ + 4692, + 3170, + 0, + 1072, + 4, + "STRING" + ], + [ + 4714, + 1340, + 0, + 3178, + 1, + "*" + ], + [ + 4715, + 1340, + 0, + 3182, + 1, + "*" + ], + [ + 4716, + 703, + 0, + 3178, + 0, + "*" + ], + [ + 4717, + 703, + 1, + 3182, + 0, + "*" + ], + [ + 4718, + 3178, + 0, + 418, + 2, + "INT" + ], + [ + 4719, + 3182, + 0, + 418, + 3, + "INT" + ], + [ + 4779, + 716, + 0, + 3210, + 0, + "*" + ], + [ + 4780, + 1602, + 0, + 3212, + 0, + "STRING" + ], + [ + 4781, + 3212, + 0, + 624, + 1, + "STRING" + ], + [ + 4782, + 3224, + 0, + 3213, + 0, + "CLIP" + ], + [ + 4784, + 3213, + 0, + 3214, + 1, + "CONDITIONING" + ], + [ + 4785, + 3218, + 0, + 3214, + 2, + "VAE" + ], + [ + 4786, + 3225, + 0, + 3214, + 3, + "IMAGE" + ], + [ + 4787, + 3226, + 0, + 3214, + 4, + "MASK" + ], + [ + 4788, + 3217, + 0, + 3215, + 0, + "MODEL" + ], + [ + 4789, + 3215, + 0, + 3216, + 0, + "MODEL" + ], + [ + 4790, + 3214, + 0, + 3216, + 1, + "CONDITIONING" + ], + [ + 4793, + 3227, + 0, + 3216, + 4, + "INT" + ], + [ + 4794, + 3228, + 0, + 3216, + 5, + "INT" + ], + [ + 4795, + 3216, + 0, + 3219, + 0, + "LATENT" + ], + [ + 4796, + 3218, + 0, + 3219, + 1, + "VAE" + ], + [ + 4801, + 3231, + 0, + 3216, + 6, + "COMBO" + ], + [ + 4803, + 3233, + 0, + 3216, + 7, + "COMBO" + ], + [ + 4805, + 3234, + 0, + 3238, + 0, + "*" + ], + [ + 4807, + 3219, + 0, + 3240, + 1, + "IMAGE" + ], + [ + 4809, + 3226, + 0, + 3241, + 0, + "*" + ], + [ + 4810, + 3225, + 0, + 3242, + 0, + "*" + ], + [ + 4814, + 3242, + 0, + 3245, + 0, + "*" + ], + [ + 4815, + 3241, + 0, + 3244, + 0, + "*" + ], + [ + 4818, + 3245, + 0, + 3240, + 0, + "IMAGE" + ], + [ + 4819, + 3240, + 0, + 3220, + 0, + "IMAGE" + ], + [ + 4827, + 3256, + 0, + 3246, + 0, + "CLIP" + ], + [ + 4829, + 3246, + 0, + 3247, + 1, + "CONDITIONING" + ], + [ + 4834, + 3248, + 0, + 3249, + 0, + "MODEL" + ], + [ + 4835, + 3247, + 0, + 3249, + 1, + "CONDITIONING" + ], + [ + 4836, + 3247, + 1, + 3249, + 2, + "CONDITIONING" + ], + [ + 4839, + 3260, + 0, + 3249, + 5, + "INT" + ], + [ + 4845, + 3267, + 0, + 3263, + 0, + "IMAGE" + ], + [ + 4849, + 3257, + 0, + 3265, + 0, + "*" + ], + [ + 4850, + 3264, + 0, + 3266, + 0, + "*" + ], + [ + 4851, + 3265, + 0, + 3267, + 0, + "*" + ], + [ + 4852, + 3268, + 0, + 3249, + 6, + "COMBO" + ], + [ + 4853, + 3269, + 0, + 3249, + 7, + "COMBO" + ], + [ + 4854, + 3263, + 0, + 712, + 0, + "*" + ], + [ + 4882, + 3264, + 0, + 3247, + 4, + "MASK" + ], + [ + 4896, + 3279, + 0, + 3263, + 1, + "IMAGE" + ], + [ + 4904, + 3283, + 0, + 3279, + 1, + "VAE" + ], + [ + 4911, + 3284, + 0, + 3283, + 0, + "*" + ], + [ + 4912, + 1291, + 0, + 3284, + 0, + "*" + ], + [ + 4913, + 3284, + 0, + 3247, + 2, + "VAE" + ], + [ + 4914, + 3265, + 0, + 3247, + 3, + "IMAGE" + ], + [ + 4916, + 3249, + 0, + 3279, + 0, + "LATENT" + ], + [ + 4917, + 1298, + 0, + 3249, + 4, + "INT" + ], + [ + 4919, + 3247, + 2, + 1293, + 0, + "LATENT" + ], + [ + 4920, + 1293, + 0, + 3249, + 3, + "LATENT" + ], + [ + 4921, + 3285, + 0, + 3249, + 8, + "FLOAT" + ], + [ + 4940, + 3302, + 0, + 1103, + 0, + "MODEL" + ], + [ + 4941, + 3164, + 0, + 1026, + 0, + "IMAGE" + ], + [ + 4945, + 3303, + 0, + 3248, + 0, + "MODEL" + ], + [ + 4966, + 3121, + 0, + 3264, + 0, + "*" + ], + [ + 4973, + 3323, + 0, + 3240, + 2, + "MASK" + ], + [ + 4974, + 3244, + 0, + 3323, + 0, + "MASK" + ], + [ + 4976, + 3327, + 0, + 3328, + 0, + "*" + ], + [ + 4977, + 3329, + 0, + 3055, + 2, + "INT" + ], + [ + 4979, + 3331, + 0, + 3323, + 1, + "INT" + ], + [ + 4980, + 3333, + 0, + 3332, + 1, + "INT" + ], + [ + 4981, + 3214, + 2, + 3332, + 0, + "LATENT" + ], + [ + 4982, + 3214, + 1, + 3216, + 2, + "CONDITIONING" + ], + [ + 4983, + 3332, + 0, + 3216, + 3, + "LATENT" + ], + [ + 4992, + 3342, + 0, + 3247, + 0, + "CONDITIONING" + ], + [ + 4993, + 1319, + 0, + 777, + 3, + "FLOAT" + ], + [ + 4995, + 3360, + 0, + 3343, + 1, + "CONDITIONING" + ], + [ + 4996, + 3344, + 0, + 3343, + 2, + "VAE" + ], + [ + 4998, + 3343, + 2, + 3345, + 0, + "LATENT" + ], + [ + 4999, + 3349, + 0, + 3345, + 1, + "INT" + ], + [ + 5000, + 3352, + 0, + 3346, + 0, + "LATENT" + ], + [ + 5001, + 3344, + 0, + 3346, + 1, + "VAE" + ], + [ + 5002, + 3346, + 0, + 3347, + 0, + "*" + ], + [ + 5003, + 3355, + 0, + 3352, + 0, + "MODEL" + ], + [ + 5004, + 3343, + 0, + 3352, + 1, + "CONDITIONING" + ], + [ + 5005, + 3343, + 1, + 3352, + 2, + "CONDITIONING" + ], + [ + 5006, + 3345, + 0, + 3352, + 3, + "LATENT" + ], + [ + 5007, + 3348, + 0, + 3352, + 4, + "INT" + ], + [ + 5008, + 3350, + 0, + 3352, + 5, + "INT" + ], + [ + 5012, + 3359, + 0, + 3360, + 0, + "CLIP" + ], + [ + 5013, + 3361, + 0, + 3363, + 0, + "*" + ], + [ + 5014, + 3362, + 0, + 3364, + 0, + "*" + ], + [ + 5015, + 3365, + 0, + 3343, + 0, + "CONDITIONING" + ], + [ + 5017, + 3367, + 0, + 641, + 3, + "CONDITIONING" + ], + [ + 5019, + 3368, + 0, + 777, + 0, + "CLIP" + ], + [ + 5020, + 3369, + 0, + 3352, + 6, + "COMBO" + ], + [ + 5021, + 3370, + 0, + 3352, + 7, + "COMBO" + ], + [ + 5023, + 3351, + 0, + 3372, + 0, + "IMAGE" + ], + [ + 5033, + 3374, + 0, + 3376, + 0, + "*" + ], + [ + 5034, + 3375, + 0, + 3377, + 0, + "*" + ], + [ + 5039, + 3380, + 0, + 3214, + 0, + "CONDITIONING" + ], + [ + 5045, + 3383, + 0, + 586, + 0, + "MODEL" + ], + [ + 5046, + 1117, + 0, + 3383, + 0, + "*" + ], + [ + 5051, + 3378, + 0, + 3386, + 0, + "*" + ], + [ + 5054, + 3386, + 0, + 3387, + 0, + "*" + ], + [ + 5055, + 3379, + 0, + 3388, + 0, + "*" + ], + [ + 5058, + 3388, + 0, + 3385, + 0, + "*" + ], + [ + 5060, + 777, + 0, + 3390, + 0, + "*" + ], + [ + 5071, + 3387, + 0, + 3397, + 0, + "*" + ], + [ + 5072, + 3385, + 0, + 3396, + 0, + "*" + ], + [ + 5082, + 3403, + 0, + 3402, + 0, + "VEC3" + ], + [ + 5106, + 3351, + 0, + 3408, + 0, + "IMAGE" + ], + [ + 5107, + 3408, + 0, + 3409, + 1, + "INT" + ], + [ + 5108, + 3408, + 1, + 3409, + 2, + "INT" + ], + [ + 5109, + 3372, + 0, + 3409, + 0, + "IMAGE" + ], + [ + 5110, + 3409, + 0, + 3343, + 3, + "IMAGE" + ], + [ + 5166, + 3463, + 0, + 3450, + 0, + "CONDITIONING" + ], + [ + 5167, + 3462, + 0, + 3450, + 1, + "CONDITIONING" + ], + [ + 5168, + 3451, + 0, + 3450, + 2, + "VAE" + ], + [ + 5170, + 3450, + 2, + 3452, + 0, + "LATENT" + ], + [ + 5171, + 3456, + 0, + 3452, + 1, + "INT" + ], + [ + 5172, + 3459, + 0, + 3453, + 0, + "LATENT" + ], + [ + 5173, + 3451, + 0, + 3453, + 1, + "VAE" + ], + [ + 5174, + 3453, + 0, + 3454, + 0, + "*" + ], + [ + 5175, + 3460, + 0, + 3459, + 0, + "MODEL" + ], + [ + 5176, + 3450, + 0, + 3459, + 1, + "CONDITIONING" + ], + [ + 5177, + 3450, + 1, + 3459, + 2, + "CONDITIONING" + ], + [ + 5178, + 3452, + 0, + 3459, + 3, + "LATENT" + ], + [ + 5179, + 3455, + 0, + 3459, + 4, + "INT" + ], + [ + 5180, + 3457, + 0, + 3459, + 5, + "INT" + ], + [ + 5181, + 3461, + 0, + 3462, + 0, + "CLIP" + ], + [ + 5210, + 3490, + 0, + 3459, + 7, + "COMBO" + ], + [ + 5211, + 3488, + 0, + 3459, + 6, + "COMBO" + ], + [ + 5212, + 3458, + 0, + 3493, + 0, + "IMAGE" + ], + [ + 5237, + 3515, + 0, + 589, + 1, + "CONDITIONING" + ], + [ + 5238, + 3515, + 0, + 921, + 0, + "*" + ], + [ + 5319, + 1114, + 0, + 2476, + 0, + "*" + ], + [ + 5324, + 832, + 0, + 641, + 2, + "VAE" + ], + [ + 5325, + 2476, + 0, + 641, + 1, + "CLIP" + ], + [ + 5326, + 1117, + 0, + 641, + 0, + "MODEL" + ], + [ + 5327, + 1090, + 0, + 3548, + 0, + "*" + ], + [ + 5328, + 3548, + 0, + 3549, + 0, + "*" + ], + [ + 5329, + 3549, + 0, + 590, + 4, + "LATENT" + ], + [ + 5330, + 593, + 0, + 1359, + 0, + "*" + ], + [ + 5335, + 3551, + 0, + 429, + 1, + "SEGS" + ], + [ + 5337, + 3556, + 0, + 3340, + 0, + "CONDITIONING" + ], + [ + 5346, + 3569, + 0, + 3566, + 1, + "*" + ], + [ + 5350, + 3572, + 0, + 3571, + 1, + "*" + ], + [ + 5359, + 3578, + 0, + 3577, + 1, + "*" + ], + [ + 5362, + 3402, + 2, + 3407, + 0, + "*" + ], + [ + 5363, + 3407, + 0, + 3577, + 0, + "*" + ], + [ + 5366, + 3402, + 1, + 3582, + 0, + "*" + ], + [ + 5368, + 3582, + 0, + 3571, + 0, + "*" + ], + [ + 5369, + 932, + 4, + 1389, + 2, + "CONDITIONING" + ], + [ + 5370, + 3557, + 0, + 3338, + 0, + "IMAGE" + ], + [ + 5371, + 2774, + 0, + 3559, + 0, + "IMAGE" + ], + [ + 5374, + 3337, + 0, + 3584, + 0, + "*" + ], + [ + 5376, + 3585, + 0, + 3587, + 0, + "*" + ], + [ + 5382, + 3589, + 0, + 3585, + 0, + "IMAGE" + ], + [ + 5383, + 3592, + 0, + 3585, + 1, + "IMAGE" + ], + [ + 5384, + 3367, + 0, + 3515, + 0, + "*" + ], + [ + 5415, + 3606, + 0, + 3622, + 0, + "IMAGE" + ], + [ + 5452, + 3658, + 0, + 3450, + 3, + "IMAGE" + ], + [ + 5453, + 3659, + 0, + 3661, + 0, + "IMAGE" + ], + [ + 5454, + 3660, + 0, + 3662, + 0, + "IMAGE" + ], + [ + 5461, + 3665, + 0, + 3633, + 1, + "*" + ], + [ + 5462, + 3666, + 0, + 3645, + 1, + "*" + ], + [ + 5463, + 3668, + 0, + 3624, + 0, + "IMAGE" + ], + [ + 5464, + 3667, + 0, + 3626, + 0, + "IMAGE" + ], + [ + 5465, + 3669, + 0, + 3618, + 0, + "IMAGE" + ], + [ + 5468, + 3671, + 0, + 3620, + 0, + "IMAGE" + ], + [ + 5472, + 3675, + 0, + 3604, + 0, + "IMAGE" + ], + [ + 5474, + 3676, + 0, + 3673, + 0, + "IMAGE" + ], + [ + 5478, + 3409, + 0, + 3653, + 0, + "IMAGE" + ], + [ + 5479, + 3679, + 0, + 3680, + 1, + "INT" + ], + [ + 5480, + 3679, + 1, + 3680, + 2, + "INT" + ], + [ + 5482, + 3458, + 0, + 3679, + 0, + "IMAGE" + ], + [ + 5483, + 3493, + 0, + 3680, + 0, + "IMAGE" + ], + [ + 5484, + 3680, + 0, + 3654, + 0, + "IMAGE" + ], + [ + 5518, + 3691, + 0, + 3401, + 0, + "VEC3" + ], + [ + 5519, + 3603, + 0, + 3692, + 0, + "IMAGE" + ], + [ + 5520, + 3633, + 0, + 3692, + 2, + "BOOLEAN" + ], + [ + 5522, + 3692, + 0, + 3693, + 0, + "IMAGE" + ], + [ + 5523, + 3645, + 0, + 3693, + 2, + "BOOLEAN" + ], + [ + 5525, + 3693, + 0, + 3676, + 0, + "IMAGE" + ], + [ + 5537, + 3659, + 0, + 3699, + 0, + "IMAGE" + ], + [ + 5538, + 3699, + 0, + 3697, + 0, + "IMAGE" + ], + [ + 5554, + 3711, + 0, + 3712, + 0, + "TEXT_STYLE" + ], + [ + 5557, + 3620, + 0, + 3712, + 1, + "IMAGE" + ], + [ + 5558, + 3711, + 0, + 3713, + 0, + "TEXT_STYLE" + ], + [ + 5568, + 3712, + 0, + 3603, + 0, + "IMAGE" + ], + [ + 5569, + 3713, + 0, + 3603, + 1, + "IMAGE" + ], + [ + 5570, + 3626, + 0, + 3715, + 1, + "IMAGE" + ], + [ + 5571, + 3715, + 0, + 3603, + 2, + "IMAGE" + ], + [ + 5572, + 3662, + 0, + 3719, + 1, + "IMAGE" + ], + [ + 5573, + 3711, + 0, + 3715, + 0, + "TEXT_STYLE" + ], + [ + 5574, + 3711, + 0, + 3716, + 0, + "TEXT_STYLE" + ], + [ + 5575, + 3711, + 0, + 3717, + 0, + "TEXT_STYLE" + ], + [ + 5576, + 3711, + 0, + 3718, + 0, + "TEXT_STYLE" + ], + [ + 5577, + 3711, + 0, + 3719, + 0, + "TEXT_STYLE" + ], + [ + 5578, + 3717, + 0, + 3603, + 4, + "IMAGE" + ], + [ + 5579, + 3718, + 0, + 3692, + 1, + "IMAGE" + ], + [ + 5580, + 3719, + 0, + 3693, + 1, + "IMAGE" + ], + [ + 5581, + 3618, + 0, + 3717, + 1, + "IMAGE" + ], + [ + 5583, + 3661, + 0, + 3718, + 1, + "IMAGE" + ], + [ + 5584, + 3624, + 0, + 3716, + 1, + "IMAGE" + ], + [ + 5585, + 3716, + 0, + 3603, + 3, + "IMAGE" + ], + [ + 5586, + 3684, + 0, + 3720, + 1, + "INT" + ], + [ + 5587, + 3720, + 0, + 3606, + 0, + "MASK" + ], + [ + 5588, + 3670, + 0, + 3720, + 0, + "MASK" + ], + [ + 5589, + 3330, + 0, + 3722, + 1, + "INT" + ], + [ + 5590, + 3266, + 0, + 3722, + 0, + "MASK" + ], + [ + 5591, + 3722, + 0, + 3263, + 2, + "MASK" + ], + [ + 5592, + 3555, + 0, + 3723, + 0, + "MASK" + ], + [ + 5593, + 3553, + 0, + 3723, + 1, + "INT" + ], + [ + 5594, + 3723, + 0, + 3551, + 0, + "MASK" + ], + [ + 5595, + 3620, + 0, + 3724, + 0, + "IMAGE" + ], + [ + 5597, + 3724, + 0, + 3713, + 1, + "IMAGE" + ], + [ + 5598, + 3622, + 0, + 3725, + 0, + "IMAGE" + ], + [ + 5599, + 3725, + 0, + 3724, + 1, + "IMAGE" + ], + [ + 5605, + 3743, + 1, + 1321, + 0, + "MASK" + ], + [ + 5606, + 2219, + 0, + 3743, + 0, + "IMAGE" + ], + [ + 5610, + 3758, + 0, + 3757, + 4, + "STRING" + ], + [ + 5611, + 3291, + 0, + 3757, + 0, + "MODEL" + ], + [ + 5612, + 3506, + 0, + 3757, + 1, + "MODEL" + ], + [ + 5613, + 3507, + 0, + 3757, + 2, + "MODEL" + ], + [ + 5614, + 1106, + 0, + 3757, + 3, + "MODEL" + ], + [ + 5615, + 3757, + 0, + 3301, + 0, + "MODEL" + ], + [ + 5616, + 3409, + 0, + 3767, + 0, + "*" + ], + [ + 5623, + 3756, + 0, + 3633, + 0, + "*" + ], + [ + 5624, + 3756, + 0, + 3645, + 0, + "*" + ], + [ + 5630, + 429, + 0, + 3773, + 1, + "IMAGE" + ], + [ + 5633, + 3773, + 0, + 1408, + 0, + "IMAGE" + ], + [ + 5634, + 3723, + 0, + 3778, + 0, + "*" + ], + [ + 5635, + 3778, + 0, + 3779, + 0, + "*" + ], + [ + 5636, + 3779, + 0, + 3773, + 2, + "MASK" + ], + [ + 5637, + 3780, + 0, + 3781, + 0, + "*" + ], + [ + 5638, + 1325, + 0, + 3780, + 0, + "*" + ], + [ + 5639, + 3781, + 0, + 3773, + 0, + "IMAGE" + ], + [ + 5642, + 3566, + 0, + 3783, + 0, + "*" + ], + [ + 5644, + 3390, + 0, + 3783, + 2, + "*" + ], + [ + 5651, + 3577, + 0, + 3785, + 0, + "*" + ], + [ + 5656, + 3571, + 0, + 3784, + 0, + "*" + ], + [ + 5658, + 3785, + 0, + 3556, + 0, + "CONDITIONING" + ], + [ + 5661, + 3402, + 0, + 3787, + 0, + "*" + ], + [ + 5699, + 3390, + 0, + 3809, + 0, + "CONDITIONING" + ], + [ + 5700, + 3388, + 0, + 3809, + 1, + "STYLE_MODEL" + ], + [ + 5701, + 3810, + 0, + 3809, + 2, + "CLIP_VISION_OUTPUT" + ], + [ + 5702, + 3386, + 0, + 3810, + 0, + "CLIP_VISION" + ], + [ + 5703, + 3336, + 0, + 3810, + 1, + "IMAGE" + ], + [ + 5713, + 3787, + 0, + 3566, + 0, + "*" + ], + [ + 5719, + 3809, + 0, + 3783, + 1, + "*" + ], + [ + 5720, + 3787, + 0, + 3809, + 3, + "FLOAT" + ], + [ + 5722, + 3812, + 0, + 3811, + 2, + "CLIP_VISION_OUTPUT" + ], + [ + 5724, + 3814, + 0, + 3813, + 2, + "CLIP_VISION_OUTPUT" + ], + [ + 5725, + 3813, + 0, + 3785, + 1, + "*" + ], + [ + 5726, + 3811, + 0, + 3784, + 1, + "*" + ], + [ + 5727, + 3582, + 0, + 3811, + 3, + "FLOAT" + ], + [ + 5728, + 3407, + 0, + 3813, + 3, + "FLOAT" + ], + [ + 5729, + 3395, + 0, + 3814, + 1, + "IMAGE" + ], + [ + 5730, + 3339, + 0, + 3812, + 1, + "IMAGE" + ], + [ + 5731, + 3387, + 0, + 3812, + 0, + "CLIP_VISION" + ], + [ + 5732, + 3385, + 0, + 3811, + 1, + "STYLE_MODEL" + ], + [ + 5733, + 3396, + 0, + 3813, + 1, + "STYLE_MODEL" + ], + [ + 5734, + 3397, + 0, + 3814, + 0, + "CLIP_VISION" + ], + [ + 5738, + 3783, + 0, + 3816, + 0, + "*" + ], + [ + 5739, + 3816, + 0, + 3784, + 2, + "*" + ], + [ + 5740, + 3816, + 0, + 3811, + 0, + "CONDITIONING" + ], + [ + 5741, + 3784, + 0, + 3817, + 0, + "*" + ], + [ + 5742, + 3817, + 0, + 3813, + 0, + "CONDITIONING" + ], + [ + 5743, + 3817, + 0, + 3785, + 2, + "*" + ] + ], + "groups": [ + { + "id": 37, + "title": "Depth Mask", + "bounding": [ + 7319.8505859375, + -223.7106475830078, + 835, + 289 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + }, + { + "id": 43, + "title": "", + "bounding": [ + 830.17724609375, + 90.28895568847656, + 890.865966796875, + 989.3416748046875 + ], + "font_size": 12, + "flags": { + "pinned": true + } + }, + { + "id": 33, + "title": "Basic Pipe Setup + Empty Latent", + "bounding": [ + 3602.74951171875, + 96.62616729736328, + 1421.6837158203125, + 650.072265625 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + }, + { + "id": 32, + "title": "Text to Image", + "bounding": [ + 5050.24951171875, + 97.04791259765625, + 1882.51953125, + 654.6351318359375 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + }, + { + "id": 30, + "title": "Noise Injection", + "bounding": [ + 6991.9658203125, + 101.09626770019531, + 1852.53662109375, + 647.7285766601562 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + }, + { + "id": 42, + "title": "", + "bounding": [ + 1749.915771484375, + 120.41236114501953, + 330, + 470 + ], + "font_size": 12, + "flags": { + "pinned": true + } + }, + { + "id": 31, + "title": "FLUX Config", + "bounding": [ + 2987.352294921875, + 99.06340026855469, + 576.2850341796875, + 1006.0545654296875 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + }, + { + "id": 41, + "title": "Output Selector", + "bounding": [ + 470, + 140, + 330, + 130 + ], + "font_size": 12, + "flags": {} + }, + { + "id": 39, + "title": "", + "bounding": [ + 470, + 270, + 330, + 300 + ], + "font_size": 12, + "flags": { + "pinned": true + } + }, + { + "id": 36, + "title": "", + "bounding": [ + 470, + 570, + 330, + 440 + ], + "font_size": 12, + "flags": { + "pinned": true + } + }, + { + "id": 35, + "title": "", + "bounding": [ + 1749.76123046875, + 591.859375, + 330.59259033203125, + 137.2823944091797 + ], + "font_size": 12, + "flags": { + "pinned": true + } + }, + { + "id": 34, + "title": "", + "bounding": [ + 1750.4066162109375, + 730.0758056640625, + 329.8945617675781, + 200.3811492919922 + ], + "font_size": 12, + "flags": { + "pinned": true + } + }, + { + "id": 20, + "title": "img2img", + "bounding": [ + 3603.3486328125, + 782.247314453125, + 1390.4423828125, + 643.8358154296875 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + }, + { + "id": 29, + "title": "", + "bounding": [ + 1750.8255615234375, + 931.1278686523438, + 329.2669677734375, + 329.1338806152344 + ], + "font_size": 12, + "flags": { + "pinned": true + } + }, + { + "id": 27, + "title": "", + "bounding": [ + 470, + 1010, + 330.96514892578125, + 511.4422302246094 + ], + "font_size": 12, + "flags": { + "pinned": true + } + }, + { + "id": 28, + "title": "", + "bounding": [ + 831.2684326171875, + 1080.7266845703125, + 889.65869140625, + 328.6146240234375 + ], + "font_size": 12, + "flags": { + "pinned": true + } + }, + { + "id": 25, + "title": "", + "bounding": [ + 1750.8250732421875, + 1261.177001953125, + 329.5889587402344, + 228.2154541015625 + ], + "font_size": 12, + "flags": { + "pinned": true + } + }, + { + "id": 17, + "title": "Inpainting", + "bounding": [ + 3601.84619140625, + 1441.670166015625, + 3131.747314453125, + 880.1497192382812 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + }, + { + "id": 14, + "title": "Ultimate Upscaler", + "bounding": [ + 3601.821044921875, + 3148.9150390625, + 2080.63916015625, + 664.80419921875 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + }, + { + "id": 11, + "title": "Detailer", + "bounding": [ + 3601.34912109375, + 3828.51220703125, + 2578.261962890625, + 773.4797973632812 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + }, + { + "id": 10, + "title": "Save Output", + "bounding": [ + -5287.486328125, + 159.13824462890625, + 866.1715698242188, + 305.7850341796875 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + }, + { + "id": 9, + "title": "Sampler Params Split", + "bounding": [ + -3256.125732421875, + 161.08169555664062, + 684.7925415039062, + 222.1497802734375 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + }, + { + "id": 8, + "title": "Final image", + "bounding": [ + -4320.19580078125, + 157.35574340820312, + 1000.2138061523438, + 367.3245849609375 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + }, + { + "id": 45, + "title": "Outpainting", + "bounding": [ + 3601.319091796875, + 2340.32763671875, + 2736.0078125, + 794.3147583007812 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + }, + { + "id": 46, + "title": "Conditioning", + "bounding": [ + 3601.37646484375, + 6011.4736328125, + 5387.58447265625, + 1043.3763427734375 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + }, + { + "id": 48, + "title": "Depth", + "bounding": [ + 3601.923828125, + 4613.5400390625, + 2568.850341796875, + 720.0126342773438 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + }, + { + "id": 49, + "title": "Canny", + "bounding": [ + 3601.64794921875, + 5343.5732421875, + 1775.20654296875, + 652.8306274414062 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + }, + { + "id": 50, + "title": "Model Router", + "bounding": [ + -2466.04150390625, + 3.9253714084625244, + 906.1168823242188, + 554.1303100585938 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + }, + { + "id": 51, + "title": "IP Adapter", + "bounding": [ + 4090.17333984375, + 6122.5576171875, + 4181.77490234375, + 763.366455078125 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + }, + { + "id": 52, + "title": "Face Swap", + "bounding": [ + 3600.95361328125, + 7059.80224609375, + 857.3869018554688, + 464.93743896484375 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + }, + { + "id": 53, + "title": "Preview Inputs", + "bounding": [ + -5299.7626953125, + 622.754638671875, + 4219.9541015625, + 2449.222900390625 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + }, + { + "id": 55, + "title": "Play Sound Notification", + "bounding": [ + -3700, + 196.39999389648438, + 330, + 193.60000610351562 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + } + ], + "config": {}, + "extra": { + "ds": { + "scale": 0.4665073802097341, + "offset": [ + 736.0718995915756, + 342.95998101578925 + ] + }, + "linkExtensions": [ + { + "id": 5600, + "parentId": 1 + } + ], + "reroutes": [ + { + "id": 1, + "pos": [ + -1372.1390380859375, + 274.1617431640625 + ], + "linkIds": [ + 5600 + ] + } + ], + "groupNodes": {} + }, + "version": 0.4 +} \ No newline at end of file diff --git a/comfyui-flux-continuum/workflow/Flux+ 1.4.5_release.json b/comfyui-flux-continuum/workflow/Flux+ 1.4.5_release.json new file mode 100644 index 0000000000000000000000000000000000000000..4eaf0d0c36b23d5025ea317e3cc00fd2005fb571 --- /dev/null +++ b/comfyui-flux-continuum/workflow/Flux+ 1.4.5_release.json @@ -0,0 +1,22405 @@ +{ + "last_node_id": 3829, + "last_link_id": 5773, + "nodes": [ + { + "id": 1026, + "type": "ImagePass", + "pos": [ + 530, + 230 + ], + "size": [ + 210, + 30 + ], + "flags": { + "collapsed": true + }, + "order": 242, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 4941, + "shape": 7 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 1745 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "ImagePass", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 1113, + "type": "ImagePass", + "pos": [ + -4080, + 300 + ], + "size": [ + 210, + 30 + ], + "flags": { + "collapsed": true + }, + "order": 181, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 4511, + "shape": 7 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 1859 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "ImagePass", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 1346, + "type": "ImagePass", + "pos": [ + 1789.6929931640625, + 1029.87646484375 + ], + "size": [ + 140, + 30 + ], + "flags": { + "collapsed": true + }, + "order": 375, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 4607, + "shape": 7 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 2073 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "ImagePass", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 3676, + "type": "ImagePass", + "pos": [ + -1800, + 2770 + ], + "size": [ + 210, + 30 + ], + "flags": { + "collapsed": true + }, + "order": 403, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 5525, + "shape": 7 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 5474 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "ImagePass", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 3699, + "type": "ImagePass", + "pos": [ + -5058.875, + 2580.03125 + ], + "size": [ + 210, + 30 + ], + "flags": { + "collapsed": true + }, + "order": 221, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 5537, + "shape": 7 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 5538 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "ImagePass", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 644, + "type": "SetNode", + "pos": [ + 4186.2509765625, + 329.36273193359375 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 374, + "mode": 0, + "inputs": [ + { + "name": "BASIC_PIPE", + "type": "BASIC_PIPE", + "link": 1187 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_pipe", + "properties": { + "previousName": "pipe" + }, + "widgets_values": [ + "pipe" + ], + "color": "#322", + "bgcolor": "hsla(0, 25%, 26.7%, 1)" + }, + { + "id": 712, + "type": "SetNode", + "pos": [ + 6340, + 1780 + ], + "size": [ + 210, + 60 + ], + "flags": { + "collapsed": false + }, + "order": 395, + "mode": 0, + "inputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "link": 4854 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_Output - inpainting", + "properties": { + "previousName": "Output - inpainting" + }, + "widgets_values": [ + "Output - inpainting" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 715, + "type": "SetNode", + "pos": [ + 6650, + 440 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 380, + "mode": 0, + "inputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "link": 1538 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_Output - txt2img", + "properties": { + "previousName": "Output - txt2img" + }, + "widgets_values": [ + "Output - txt2img" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 716, + "type": "SetNode", + "pos": [ + -3890, + 300 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 265, + "mode": 0, + "inputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "link": 1859 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 4779 + ], + "slot_index": 0 + } + ], + "title": "Set_final", + "properties": { + "previousName": "final" + }, + "widgets_values": [ + "final" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 723, + "type": "SetNode", + "pos": [ + 1431.1396484375, + 1160.7176513671875 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 251, + "mode": 0, + "inputs": [ + { + "name": "STRING", + "type": "STRING", + "link": 3492 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_prompt", + "properties": { + "previousName": "prompt" + }, + "widgets_values": [ + "prompt" + ] + }, + { + "id": 729, + "type": "SetNode", + "pos": [ + 5413.5576171875, + 3283.437255859375 + ], + "size": [ + 252, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 377, + "mode": 0, + "inputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "link": 2177 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_Output - ultimate upscaler", + "properties": { + "previousName": "Output - ultimate upscaler" + }, + "widgets_values": [ + "Output - ultimate upscaler" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 788, + "type": "SetNode", + "pos": [ + 1590.7579345703125, + 1348.9764404296875 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 252, + "mode": 0, + "inputs": [ + { + "name": "STRING", + "type": "STRING", + "link": 3493 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": [], + "slot_index": 0 + } + ], + "title": "Set_tags", + "properties": { + "previousName": "tags" + }, + "widgets_values": [ + "tags" + ] + }, + { + "id": 832, + "type": "SetNode", + "pos": [ + 3371.815673828125, + 318.3890380859375 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 234, + "mode": 0, + "inputs": [ + { + "name": "VAE", + "type": "VAE", + "link": 4425 + } + ], + "outputs": [ + { + "name": "VAE", + "type": "VAE", + "links": [ + 5324 + ], + "slot_index": 0 + } + ], + "title": "Set_vae", + "properties": { + "previousName": "vae" + }, + "widgets_values": [ + "vae" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 873, + "type": "SetNode", + "pos": [ + 5929.0615234375, + 4052.4970703125 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 389, + "mode": 0, + "inputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "link": 2206 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_Output - detailer", + "properties": { + "previousName": "Output - detailer" + }, + "widgets_values": [ + "Output - detailer" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 1023, + "type": "SetNode", + "pos": [ + 670, + 210 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 314, + "mode": 0, + "inputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "link": 1745 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_send", + "properties": { + "previousName": "send" + }, + "widgets_values": [ + "send" + ] + }, + { + "id": 1061, + "type": "SetNode", + "pos": [ + 8560, + 250 + ], + "size": [ + 302.3999938964844, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 414, + "mode": 0, + "inputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "link": 1783 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_Output - txt2img noise injection", + "properties": { + "previousName": "Output - txt2img noise injection" + }, + "widgets_values": [ + "Output - txt2img noise injection" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 1075, + "type": "SetNode", + "pos": [ + 4777.0771484375, + 876.7098999023438 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 361, + "mode": 0, + "inputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "link": 1802 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_Output - img2img", + "properties": { + "previousName": "Output - img2img" + }, + "widgets_values": [ + "Output - img2img" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 1105, + "type": "SetNode", + "pos": [ + 3371.815673828125, + 203.81993103027344 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 250, + "mode": 0, + "inputs": [ + { + "name": "MODEL", + "type": "MODEL", + "link": 3494 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": [], + "slot_index": 0 + } + ], + "title": "Set_model", + "properties": { + "previousName": "model" + }, + "widgets_values": [ + "model" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 1114, + "type": "SetNode", + "pos": [ + 3371.815673828125, + 428.3890380859375 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 233, + "mode": 0, + "inputs": [ + { + "name": "CLIP", + "type": "CLIP", + "link": 4424 + } + ], + "outputs": [ + { + "name": "CLIP", + "type": "CLIP", + "links": [ + 5319 + ], + "slot_index": 0 + } + ], + "title": "Set_clip", + "properties": { + "previousName": "clip" + }, + "widgets_values": [ + "clip" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 1116, + "type": "SetNode", + "pos": [ + 560, + 470 + ], + "size": [ + 285.375, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 284, + "mode": 0, + "inputs": [ + { + "name": "MODEL", + "type": "MODEL", + "link": 1863 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_modelWithLoRAs", + "properties": { + "previousName": "modelWithLoRAs" + }, + "widgets_values": [ + "modelWithLoRAs" + ] + }, + { + "id": 1217, + "type": "SetNode", + "pos": [ + 1938.784423828125, + 667.22509765625 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 255, + "mode": 0, + "inputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "link": 2000 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_denoise", + "properties": { + "previousName": "denoise" + }, + "widgets_values": [ + "denoise" + ] + }, + { + "id": 1271, + "type": "SetNode", + "pos": [ + -2766.130859375, + 241.08197021484375 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 311, + "mode": 0, + "inputs": [ + { + "name": "COMBO", + "type": "COMBO", + "link": 3464 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_scheduler", + "properties": { + "previousName": "scheduler" + }, + "widgets_values": [ + "scheduler" + ] + }, + { + "id": 1272, + "type": "SetNode", + "pos": [ + -2773.01416015625, + 363.06768798828125 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 312, + "mode": 0, + "inputs": [ + { + "name": "STRING", + "type": "STRING", + "link": 3466 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_scheduler_name", + "properties": { + "previousName": "scheduler_name" + }, + "widgets_values": [ + "scheduler_name" + ] + }, + { + "id": 1280, + "type": "SetNode", + "pos": [ + 670, + 750 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 235, + "mode": 0, + "inputs": [ + { + "name": "INT", + "type": "INT", + "link": 2002 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_steps", + "properties": { + "previousName": "steps" + }, + "widgets_values": [ + "steps" + ] + }, + { + "id": 1281, + "type": "SetNode", + "pos": [ + 650, + 860 + ], + "size": [ + 210, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 236, + "mode": 0, + "inputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "link": 2001 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_guidance", + "properties": { + "previousName": "guidance" + }, + "widgets_values": [ + "guidance" + ] + }, + { + "id": 1320, + "type": "SetNode", + "pos": [ + 1890, + 340 + ], + "size": [ + 210, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 262, + "mode": 0, + "inputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "link": 4446 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": [], + "slot_index": 0 + } + ], + "title": "Set_loadImage", + "properties": { + "previousName": "loadImage" + }, + "widgets_values": [ + "loadImage" + ] + }, + { + "id": 1321, + "type": "SetNode", + "pos": [ + 1950, + 180 + ], + "size": [ + 210, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 316, + "mode": 0, + "inputs": [ + { + "name": "MASK", + "type": "MASK", + "link": 5605 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_mask", + "properties": { + "previousName": "mask" + }, + "widgets_values": [ + "mask" + ] + }, + { + "id": 1330, + "type": "SetNode", + "pos": [ + 1881.1695556640625, + 1443.02587890625 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true, + "pinned": true + }, + "order": 237, + "mode": 0, + "inputs": [ + { + "name": "UPSCALE_MODEL", + "type": "UPSCALE_MODEL", + "link": 2361 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_upscale_model", + "properties": { + "previousName": "" + }, + "widgets_values": [ + "upscale_model" + ] + }, + { + "id": 1331, + "type": "SetNode", + "pos": [ + 1919.8201904296875, + 1329.295166015625 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 239, + "mode": 0, + "inputs": [ + { + "name": "INT", + "type": "INT", + "link": 3215 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_res multiply", + "properties": { + "previousName": "res multiply" + }, + "widgets_values": [ + "res multiply" + ] + }, + { + "id": 1345, + "type": "SetNode", + "pos": [ + 1799.6929931640625, + 1079.8760986328125 + ], + "size": [ + 268.79998779296875, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 388, + "mode": 0, + "inputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "link": 2073 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_Output - imgload_prep", + "properties": { + "previousName": "Output - imgload_prep" + }, + "widgets_values": [ + "Output - imgload_prep" + ] + }, + { + "id": 1392, + "type": "SetNode", + "pos": [ + 4466.86669921875, + 3450.522705078125 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 347, + "mode": 0, + "inputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "link": 3433 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_Output - upscaler", + "properties": { + "previousName": "Output - upscaler" + }, + "widgets_values": [ + "Output - upscaler" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 1508, + "type": "SetNode", + "pos": [ + -2766.130859375, + 281.0810241699219 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 309, + "mode": 0, + "inputs": [ + { + "name": "COMBO", + "type": "COMBO", + "link": 3463 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_sampler", + "properties": { + "previousName": "sampler" + }, + "widgets_values": [ + "sampler" + ] + }, + { + "id": 1510, + "type": "SetNode", + "pos": [ + -2771.3779296875, + 320.59674072265625 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 310, + "mode": 0, + "inputs": [ + { + "name": "STRING", + "type": "STRING", + "link": 3465 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_sampler_name", + "properties": { + "previousName": "sampler_name" + }, + "widgets_values": [ + "sampler_name" + ] + }, + { + "id": 1518, + "type": "SetNode", + "pos": [ + 6250, + 650 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 272, + "mode": 0, + "inputs": [ + { + "name": "SAMPLER", + "type": "SAMPLER", + "link": 2335 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_sampler_convert", + "properties": { + "previousName": "sampler_convert" + }, + "widgets_values": [ + "sampler_convert" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 1617, + "type": "SetNode", + "pos": [ + 650, + 940 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 238, + "mode": 0, + "inputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "link": 2418 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_max shift", + "properties": { + "previousName": "max shift" + }, + "widgets_values": [ + "max shift" + ] + }, + { + "id": 2428, + "type": "SetNode", + "pos": [ + 650, + 1350 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 240, + "mode": 0, + "inputs": [ + { + "name": "COMBO", + "type": "COMBO", + "link": 3447 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_resolution", + "properties": { + "previousName": "resolution" + }, + "widgets_values": [ + "resolution" + ] + }, + { + "id": 2437, + "type": "SetNode", + "pos": [ + 610, + 620 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 241, + "mode": 0, + "inputs": [ + { + "name": "SAMPLER_PARAMS", + "type": "SAMPLER_PARAMS", + "link": 3460 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_sampler params", + "properties": { + "previousName": "sampler params" + }, + "widgets_values": [ + "sampler params" + ] + }, + { + "id": 2507, + "type": "SetNode", + "pos": [ + 4839.5029296875, + 425.84979248046875 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 276, + "mode": 0, + "inputs": [ + { + "name": "INT", + "type": "INT", + "link": 3543 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_width", + "properties": { + "previousName": "width" + }, + "widgets_values": [ + "width" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 2508, + "type": "SetNode", + "pos": [ + 4839.5029296875, + 475.849853515625 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 278, + "mode": 0, + "inputs": [ + { + "name": "INT", + "type": "INT", + "link": 3544 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_height", + "properties": { + "previousName": "height" + }, + "widgets_values": [ + "height" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 3032, + "type": "SetNode", + "pos": [ + 4839.5029296875, + 375.8497619628906 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 274, + "mode": 0, + "inputs": [ + { + "name": "LATENT", + "type": "LATENT", + "link": 4514 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_latent", + "properties": { + "previousName": "latent" + }, + "widgets_values": [ + "latent" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 3103, + "type": "SetNode", + "pos": [ + 1829.6929931640625, + 1149.8760986328125 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 376, + "mode": 0, + "inputs": [ + { + "name": "MASK", + "type": "MASK", + "link": 4608 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_mask_outpainting", + "properties": { + "previousName": "mask_outpainting" + }, + "widgets_values": [ + "mask_outpainting" + ] + }, + { + "id": 3220, + "type": "SetNode", + "pos": [ + 5970, + 2720 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 391, + "mode": 0, + "inputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "link": 4819 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_Output - outpainting", + "properties": { + "previousName": "Output - outpainting" + }, + "widgets_values": [ + "Output - outpainting" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 3238, + "type": "SetNode", + "pos": [ + 3376.16357421875, + 580 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 249, + "mode": 0, + "inputs": [ + { + "name": "MODEL", + "type": "MODEL", + "link": 4805 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null, + "slot_index": 0 + } + ], + "title": "Set_model_fill", + "properties": { + "previousName": "model_fill" + }, + "widgets_values": [ + "model_fill" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 3301, + "type": "SetNode", + "pos": [ + -1800, + 270 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": false + }, + "order": 315, + "mode": 0, + "inputs": [ + { + "name": "MODEL", + "type": "MODEL", + "link": 5773 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": [], + "slot_index": 0 + } + ], + "title": "Set_sendModel", + "properties": { + "previousName": "sendModel" + }, + "widgets_values": [ + "sendModel" + ] + }, + { + "id": 3328, + "type": "SetNode", + "pos": [ + 1898.784423828125, + 667.22509765625 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 256, + "mode": 0, + "inputs": [ + { + "name": "INT", + "type": "INT", + "link": 4976 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_mask_feather", + "properties": { + "previousName": "mask_feather" + }, + "widgets_values": [ + "mask_feather" + ] + }, + { + "id": 3338, + "type": "SetNode", + "pos": [ + 1880, + 260 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 260, + "mode": 0, + "inputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "link": 5370 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_loadImage_IP2", + "properties": { + "previousName": "loadImage_IP2" + }, + "widgets_values": [ + "loadImage_IP2" + ] + }, + { + "id": 3340, + "type": "SetNode", + "pos": [ + 8620, + 6390 + ], + "size": [ + 260, + 60 + ], + "flags": {}, + "order": 410, + "mode": 0, + "inputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "link": 5337 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_conditioning", + "properties": { + "previousName": "conditioning" + }, + "widgets_values": [ + "conditioning" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 3347, + "type": "SetNode", + "pos": [ + 5926.3271484375, + 4704.11474609375 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 392, + "mode": 0, + "inputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "link": 5002 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_Output - depth", + "properties": { + "previousName": "" + }, + "widgets_values": [ + "Output - depth" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 3363, + "type": "SetNode", + "pos": [ + 3371.815673828125, + 708.38916015625 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 248, + "mode": 0, + "inputs": [ + { + "name": "MODEL", + "type": "MODEL", + "link": 5013 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_model_depth", + "properties": { + "previousName": "model_depth" + }, + "widgets_values": [ + "model_depth" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 3364, + "type": "SetNode", + "pos": [ + 3371.815673828125, + 828.38916015625 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 246, + "mode": 0, + "inputs": [ + { + "name": "MODEL", + "type": "MODEL", + "link": 5014 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_model_canny", + "properties": { + "previousName": "model_canny" + }, + "widgets_values": [ + "model_canny" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 3376, + "type": "SetNode", + "pos": [ + 3371.815673828125, + 948.38916015625 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 247, + "mode": 0, + "inputs": [ + { + "name": "STYLE_MODEL", + "type": "STYLE_MODEL", + "link": 5033 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_model_redux", + "properties": { + "previousName": "model_redux" + }, + "widgets_values": [ + "model_redux" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 3377, + "type": "SetNode", + "pos": [ + 3371.815673828125, + 1058.38916015625 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 243, + "mode": 0, + "inputs": [ + { + "name": "CLIP_VISION", + "type": "CLIP_VISION", + "link": 5034 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_model_clipVision", + "properties": { + "previousName": "model_clipVision" + }, + "widgets_values": [ + "model_clipVision" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 3401, + "type": "SetNode", + "pos": [ + 1778.7926025390625, + 854.1670532226562 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 254, + "mode": 0, + "inputs": [ + { + "name": "VEC3", + "type": "VEC3", + "link": 5518 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_ipadapter_strenght", + "properties": { + "previousName": "ipadapter_strenght" + }, + "widgets_values": [ + "ipadapter_strenght" + ] + }, + { + "id": 3454, + "type": "SetNode", + "pos": [ + 5160.0888671875, + 5483.4619140625 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 384, + "mode": 0, + "inputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "link": 5174 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_Output - canny", + "properties": { + "previousName": "Output - canny" + }, + "widgets_values": [ + "Output - canny" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 3559, + "type": "SetNode", + "pos": [ + 1880, + 220 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 259, + "mode": 0, + "inputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "link": 5371 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_loadImage_IP1", + "properties": { + "previousName": "loadImage_IP1" + }, + "widgets_values": [ + "loadImage_IP1" + ] + }, + { + "id": 3584, + "type": "SetNode", + "pos": [ + 1880, + 300 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 261, + "mode": 0, + "inputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "link": 5374 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_loadImage_IP3", + "properties": { + "previousName": "loadImage_IP3" + }, + "widgets_values": [ + "loadImage_IP3" + ] + }, + { + "id": 3587, + "type": "SetNode", + "pos": [ + 4230, + 7160 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 296, + "mode": 0, + "inputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "link": 5376 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_Output - face swap", + "properties": { + "previousName": "Output - face swap" + }, + "widgets_values": [ + "Output - face swap" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 3653, + "type": "SetNode", + "pos": [ + 4770, + 5040 + ], + "size": [ + 250, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 330, + "mode": 0, + "inputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "link": 5478 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_preprocessor_depth", + "properties": { + "previousName": "preprocessor_depth" + }, + "widgets_values": [ + "preprocessor_depth" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3654, + "type": "SetNode", + "pos": [ + 1860, + 870 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true, + "pinned": true + }, + "order": 338, + "mode": 0, + "inputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "link": 5484 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_preprocessor canny", + "properties": { + "previousName": "preprocessor canny" + }, + "widgets_values": [ + "preprocessor canny" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3673, + "type": "SetNode", + "pos": [ + -1600, + 2770 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 407, + "mode": 0, + "inputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "link": 5474 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_previewOutputs", + "properties": { + "previousName": "previewOutputs" + }, + "widgets_values": [ + "previewOutputs" + ] + }, + { + "id": 3697, + "type": "SetNode", + "pos": [ + -4900, + 2580 + ], + "size": [ + 260.3999938964844, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 298, + "mode": 0, + "inputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "link": 5538 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_Output - canny preprocessor", + "properties": { + "previousName": "Output - canny preprocessor" + }, + "widgets_values": [ + "Output - canny preprocessor" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3767, + "type": "SetNode", + "pos": [ + 4762.06591796875, + 5092.7001953125 + ], + "size": [ + 260.3999938964844, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 331, + "mode": 0, + "inputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "link": 5616 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_Output - depth preprocessor", + "properties": { + "previousName": "Output - depth preprocessor" + }, + "widgets_values": [ + "Output - depth preprocessor" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 596, + "type": "GetNode", + "pos": [ + 5870, + 340 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 0, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 1360 + ], + "slot_index": 0 + } + ], + "title": "Get_seed", + "properties": {}, + "widgets_values": [ + "seed" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 645, + "type": "GetNode", + "pos": [ + 4709.0615234375, + 4102.4921875 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 1, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "BASIC_PIPE", + "type": "BASIC_PIPE", + "links": [ + 3152 + ], + "slot_index": 0 + } + ], + "title": "Get_pipe", + "properties": {}, + "widgets_values": [ + "pipe" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 708, + "type": "GetNode", + "pos": [ + 4911.81689453125, + 3398.91357421875 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 2, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 2173 + ], + "slot_index": 0 + } + ], + "title": "Get_seed", + "properties": {}, + "widgets_values": [ + "seed" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 717, + "type": "GetNode", + "pos": [ + 1000.17724609375, + 150.2889404296875 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 3, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 3426, + 4414 + ], + "slot_index": 0 + } + ], + "title": "Get_final", + "properties": {}, + "widgets_values": [ + "final" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 724, + "type": "GetNode", + "pos": [ + 3660, + 6590 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 4, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "STRING", + "type": "STRING", + "links": [ + 1442 + ], + "slot_index": 0 + } + ], + "title": "Get_prompt", + "properties": {}, + "widgets_values": [ + "prompt" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 726, + "type": "GetNode", + "pos": [ + -4847.85595703125, + 249.03724670410156 + ], + "size": [ + 313.42822265625, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 5, + "mode": 4, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 2380 + ], + "slot_index": 0 + } + ], + "title": "Get_final", + "properties": {}, + "widgets_values": [ + "final" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 793, + "type": "GetNode", + "pos": [ + 3670, + 6550 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 6, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "STRING", + "type": "STRING", + "links": [ + 1443 + ], + "slot_index": 0 + } + ], + "title": "Get_tags", + "properties": {}, + "widgets_values": [ + "tags" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 933, + "type": "GetNode", + "pos": [ + 4526.86669921875, + 3370.522705078125 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 7, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "BASIC_PIPE", + "type": "BASIC_PIPE", + "links": [ + 1599 + ] + } + ], + "title": "Get_pipe", + "properties": {}, + "widgets_values": [ + "pipe" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 965, + "type": "GetNode", + "pos": [ + 3712.240234375, + 880.7233276367188 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 8, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "VAE", + "type": "VAE", + "links": [ + 1680, + 1804 + ], + "slot_index": 0 + } + ], + "title": "Get_vae", + "properties": {}, + "widgets_values": [ + "vae" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1022, + "type": "GetNode", + "pos": [ + -4250, + 300 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 9, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 4511 + ], + "slot_index": 0 + } + ], + "title": "Get_send", + "properties": {}, + "widgets_values": [ + "send" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1057, + "type": "GetNode", + "pos": [ + 7001.9658203125, + 267.23828125 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 10, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 1775 + ], + "slot_index": 0 + } + ], + "title": "Get_seed", + "properties": {}, + "widgets_values": [ + "seed" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1064, + "type": "GetNode", + "pos": [ + 8234.751953125, + 204.01480102539062 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 11, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "VAE", + "type": "VAE", + "links": [ + 1786 + ] + } + ], + "title": "Get_vae", + "properties": {}, + "widgets_values": [ + "vae" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1079, + "type": "GetNode", + "pos": [ + 4077.0810546875, + 926.7098999023438 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 12, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "links": [ + 3363 + ], + "slot_index": 0 + } + ], + "title": "Get_modelWithLoRAs", + "properties": {}, + "widgets_values": [ + "modelWithLoRAs" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1086, + "type": "GetNode", + "pos": [ + 3967.0810546875, + 1136.7099609375 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 13, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 4689 + ], + "slot_index": 0 + } + ], + "title": "Get_seed", + "properties": {}, + "widgets_values": [ + "seed" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1099, + "type": "GetNode", + "pos": [ + 7071.9658203125, + 397.2384338378906 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 14, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "LATENT", + "type": "LATENT", + "links": [ + 2105 + ], + "slot_index": 0 + } + ], + "title": "Get_latent", + "properties": {}, + "widgets_values": [ + "latent" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1106, + "type": "GetNode", + "pos": [ + -2386.878173828125, + 382.2384033203125 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": false + }, + "order": 15, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "links": [ + 5771 + ], + "slot_index": 0 + } + ], + "title": "Get_model", + "properties": {}, + "widgets_values": [ + "model" + ] + }, + { + "id": 1115, + "type": "GetNode", + "pos": [ + 550, + 400 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 16, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "CLIP", + "type": "CLIP", + "links": [ + 3432 + ], + "slot_index": 0 + } + ], + "title": "Get_clip", + "properties": {}, + "widgets_values": [ + "clip" + ] + }, + { + "id": 1117, + "type": "GetNode", + "pos": [ + 3776.249755859375, + 239.36273193359375 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 17, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "links": [ + 5046, + 5326 + ], + "slot_index": 0 + } + ], + "title": "Get_modelWithLoRAs", + "properties": {}, + "widgets_values": [ + "modelWithLoRAs" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1136, + "type": "GetNode", + "pos": [ + 7364.07373046875, + -7.376744747161865 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 18, + "mode": 4, + "inputs": [], + "outputs": [ + { + "name": "VAE", + "type": "VAE", + "links": [ + 1879 + ], + "slot_index": 0 + } + ], + "title": "Get_vae", + "properties": {}, + "widgets_values": [ + "vae" + ] + }, + { + "id": 1162, + "type": "GetNode", + "pos": [ + 3853.34716796875, + 1022.2464599609375 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 19, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 1920 + ], + "slot_index": 0 + } + ], + "title": "Get_batch", + "properties": {}, + "widgets_values": [ + "batch" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1218, + "type": "GetNode", + "pos": [ + 4901.81689453125, + 3528.91357421875 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 20, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "links": [ + 2174 + ], + "slot_index": 0 + } + ], + "title": "Get_denoise", + "properties": {}, + "widgets_values": [ + "denoise" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1219, + "type": "GetNode", + "pos": [ + 3957.0810546875, + 1086.7099609375 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 21, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "links": [ + 4691 + ], + "slot_index": 0 + } + ], + "title": "Get_denoise", + "properties": {}, + "widgets_values": [ + "denoise" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1282, + "type": "GetNode", + "pos": [ + 3977.0810546875, + 1266.7099609375 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 22, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 2003 + ], + "slot_index": 0 + } + ], + "title": "Get_steps", + "properties": {}, + "widgets_values": [ + "steps" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1286, + "type": "GetNode", + "pos": [ + 4037.0810546875, + 1206.7099609375 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 23, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "STRING", + "type": "STRING", + "links": [ + 2005 + ] + } + ], + "title": "Get_scheduler_name", + "properties": {}, + "widgets_values": [ + "scheduler_name" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1287, + "type": "GetNode", + "pos": [ + 3957.0810546875, + 1306.7099609375 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 24, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "links": [ + 2006 + ], + "slot_index": 0 + } + ], + "title": "Get_guidance", + "properties": {}, + "widgets_values": [ + "guidance" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1298, + "type": "GetNode", + "pos": [ + 4830, + 2040 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 25, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 4917 + ], + "slot_index": 0 + } + ], + "title": "Get_seed", + "properties": {}, + "widgets_values": [ + "seed" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1300, + "type": "GetNode", + "pos": [ + 4550, + 2110 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 26, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 2018 + ], + "slot_index": 0 + } + ], + "title": "Get_batch", + "properties": {}, + "widgets_values": [ + "batch" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1308, + "type": "GetNode", + "pos": [ + 4911.81689453125, + 3438.913818359375 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 27, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 2175 + ], + "slot_index": 0 + } + ], + "title": "Get_steps", + "properties": {}, + "widgets_values": [ + "steps" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1311, + "type": "GetNode", + "pos": [ + 4901.81689453125, + 3488.91357421875 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 28, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "COMBO", + "type": "COMBO", + "links": [ + 2176 + ] + } + ], + "title": "Get_scheduler", + "properties": {}, + "widgets_values": [ + "scheduler" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1312, + "type": "GetNode", + "pos": [ + 4669.0615234375, + 4322.4921875 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 29, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "links": [ + 2034 + ], + "slot_index": 0 + } + ], + "title": "Get_denoise", + "properties": {}, + "widgets_values": [ + "denoise" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1313, + "type": "GetNode", + "pos": [ + 4679.0615234375, + 4212.4921875 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 30, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 2035 + ], + "slot_index": 0 + } + ], + "title": "Get_steps", + "properties": {}, + "widgets_values": [ + "steps" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1317, + "type": "GetNode", + "pos": [ + 5670, + 520 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 31, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "COMBO", + "type": "COMBO", + "links": [ + 2037 + ] + } + ], + "title": "Get_scheduler", + "properties": {}, + "widgets_values": [ + "scheduler" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1318, + "type": "GetNode", + "pos": [ + 5690, + 560 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 32, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 2038 + ] + } + ], + "title": "Get_steps", + "properties": {}, + "widgets_values": [ + "steps" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1319, + "type": "GetNode", + "pos": [ + 3650, + 6640 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 33, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "links": [ + 4993 + ], + "slot_index": 0 + } + ], + "title": "Get_guidance", + "properties": {}, + "widgets_values": [ + "guidance" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1323, + "type": "GetNode", + "pos": [ + 3633.3486328125, + 1092.24658203125 + ], + "size": [ + 280, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 34, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 2071 + ], + "slot_index": 0 + } + ], + "title": "Get_Output - imgload_prep", + "properties": {}, + "widgets_values": [ + "Output - imgload_prep" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1325, + "type": "GetNode", + "pos": [ + 3629.0615234375, + 4002.4970703125 + ], + "size": [ + 268.79998779296875, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 35, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 2202, + 5638 + ], + "slot_index": 0 + } + ], + "title": "Get_Output - imgload_prep", + "properties": {}, + "widgets_values": [ + "Output - imgload_prep" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1328, + "type": "GetNode", + "pos": [ + 4529.0615234375, + 4272.4921875 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 36, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "COMBO", + "type": "COMBO", + "links": [ + 2055 + ] + } + ], + "title": "Get_scheduler", + "properties": {}, + "widgets_values": [ + "scheduler" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1339, + "type": "GetNode", + "pos": [ + 3631.819091796875, + 3288.913818359375 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 37, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "UPSCALE_MODEL", + "type": "UPSCALE_MODEL", + "links": [ + 2163 + ], + "slot_index": 0 + } + ], + "title": "Get_upscale_model", + "properties": {}, + "widgets_values": [ + "upscale_model" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1340, + "type": "GetNode", + "pos": [ + 3653.55810546875, + 3513.43603515625 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 38, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 4714, + 4715 + ], + "slot_index": 0 + } + ], + "title": "Get_res multiply", + "properties": {}, + "widgets_values": [ + "res multiply" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1344, + "type": "GetNode", + "pos": [ + 1769.6929931640625, + 1209.8760986328125 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 39, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 2792 + ], + "slot_index": 0 + } + ], + "title": "Get_loadImage", + "properties": {}, + "widgets_values": [ + "loadImage" + ] + }, + { + "id": 1388, + "type": "GetNode", + "pos": [ + 3631.819091796875, + 3408.91357421875 + ], + "size": [ + 268.79998779296875, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 40, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 2165, + 2166 + ], + "slot_index": 0 + } + ], + "title": "Get_Output - imgload_prep", + "properties": {}, + "widgets_values": [ + "Output - imgload_prep" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1406, + "type": "GetNode", + "pos": [ + 4469.0615234375, + 4192.4921875 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 41, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 2231 + ], + "slot_index": 0 + } + ], + "title": "Get_seed", + "properties": {}, + "widgets_values": [ + "seed" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1410, + "type": "GetNode", + "pos": [ + 3629.0615234375, + 4072.495361328125 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 42, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 2212 + ], + "slot_index": 0 + } + ], + "title": "Get_batch", + "properties": {}, + "widgets_values": [ + "batch" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1515, + "type": "GetNode", + "pos": [ + 5860, + 650 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 43, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "COMBO", + "type": "COMBO", + "links": [ + 2333 + ] + } + ], + "title": "Get_sampler", + "properties": {}, + "widgets_values": [ + "sampler" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1520, + "type": "GetNode", + "pos": [ + 7021.9658203125, + 357.2383117675781 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 44, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "SAMPLER", + "type": "SAMPLER", + "links": [ + 2337, + 2338 + ], + "slot_index": 0 + } + ], + "title": "Get_sampler_convert", + "properties": {}, + "widgets_values": [ + "sampler_convert" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1523, + "type": "GetNode", + "pos": [ + 4669.0615234375, + 4362.4921875 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 45, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "COMBO", + "type": "COMBO", + "links": [ + 2341 + ] + } + ], + "title": "Get_sampler", + "properties": {}, + "widgets_values": [ + "sampler" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1524, + "type": "GetNode", + "pos": [ + 4901.81689453125, + 3578.911376953125 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 46, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "COMBO", + "type": "COMBO", + "links": [ + 2342 + ] + } + ], + "title": "Get_sampler", + "properties": {}, + "widgets_values": [ + "sampler" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1526, + "type": "GetNode", + "pos": [ + 4047.0810546875, + 1346.7099609375 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 47, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "STRING", + "type": "STRING", + "links": [ + 2344 + ], + "slot_index": 0 + } + ], + "title": "Get_sampler_name", + "properties": {}, + "widgets_values": [ + "sampler_name" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1602, + "type": "GetNode", + "pos": [ + -5269.3134765625, + 322.1641540527344 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": false + }, + "order": 48, + "mode": 4, + "inputs": [], + "outputs": [ + { + "name": "STRING", + "type": "STRING", + "links": [ + 4780 + ], + "slot_index": 0 + } + ], + "title": "Get_prompt", + "properties": {}, + "widgets_values": [ + "prompt" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1618, + "type": "GetNode", + "pos": [ + 5120, + 510 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 49, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "links": [ + 2404 + ], + "slot_index": 0 + } + ], + "title": "Get_max shift", + "properties": {}, + "widgets_values": [ + "max shift" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1620, + "type": "GetNode", + "pos": [ + 4686.86669921875, + 3230.522705078125 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 50, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "links": [ + 2406 + ], + "slot_index": 0 + } + ], + "title": "Get_max shift", + "properties": {}, + "widgets_values": [ + "max shift" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1623, + "type": "GetNode", + "pos": [ + 3947.0810546875, + 1386.7099609375 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 51, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "links": [ + 2409 + ], + "slot_index": 0 + } + ], + "title": "Get_max shift", + "properties": {}, + "widgets_values": [ + "max shift" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 2217, + "type": "GetNode", + "pos": [ + 4356.2509765625, + 399.36273193359375 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 52, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 3214 + ], + "slot_index": 0 + } + ], + "title": "Get_batch", + "properties": {}, + "widgets_values": [ + "batch" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 2328, + "type": "GetNode", + "pos": [ + 4077.0810546875, + 966.7098999023438 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 53, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [ + 3362 + ], + "slot_index": 0 + } + ], + "title": "Get_conditioning", + "properties": {}, + "widgets_values": [ + "conditioning" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 2364, + "type": "GetNode", + "pos": [ + 1150, + 150 + ], + "size": [ + 268.79998779296875, + 58 + ], + "flags": { + "collapsed": true, + "pinned": true + }, + "order": 54, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 3425 + ], + "slot_index": 0 + } + ], + "title": "Get_loadImage", + "properties": {}, + "widgets_values": [ + "loadImage" + ] + }, + { + "id": 2429, + "type": "GetNode", + "pos": [ + 4326.2509765625, + 449.36273193359375 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 55, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "COMBO", + "type": "COMBO", + "links": [ + 3448 + ], + "slot_index": 0 + } + ], + "title": "Get_resolution", + "properties": {}, + "widgets_values": [ + "resolution" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 2472, + "type": "GetNode", + "pos": [ + 6300, + 460 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 56, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "VAE", + "type": "VAE", + "links": [ + 3499 + ], + "slot_index": 0 + } + ], + "title": "Get_vae", + "properties": {}, + "widgets_values": [ + "vae" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3121, + "type": "GetNode", + "pos": [ + 3640, + 1700 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 57, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "MASK", + "type": "MASK", + "links": [ + 4966 + ], + "slot_index": 0 + } + ], + "title": "Get_mask", + "properties": {}, + "widgets_values": [ + "mask" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3133, + "type": "GetNode", + "pos": [ + 4396.86669921875, + 3230.522705078125 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 58, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 4666 + ], + "slot_index": 0 + } + ], + "title": "Get_batch", + "properties": {}, + "widgets_values": [ + "batch" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3217, + "type": "GetNode", + "pos": [ + 4540, + 2570 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 59, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "links": [ + 4788 + ] + } + ], + "title": "Get_modelWithLoRAs", + "properties": {}, + "widgets_values": [ + "modelWithLoRAs" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3218, + "type": "GetNode", + "pos": [ + 3640, + 2480 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 60, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "VAE", + "type": "VAE", + "links": [ + 4785, + 4796 + ], + "slot_index": 0 + } + ], + "title": "Get_vae", + "properties": {}, + "widgets_values": [ + "vae" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3224, + "type": "GetNode", + "pos": [ + 3680, + 2740 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 61, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "CLIP", + "type": "CLIP", + "links": [ + 4782 + ], + "slot_index": 0 + } + ], + "title": "Get_clip", + "properties": {}, + "widgets_values": [ + "clip" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3225, + "type": "GetNode", + "pos": [ + 3630, + 2520 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 62, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 4786, + 4810 + ], + "slot_index": 0 + } + ], + "title": "Get_Output - imgload_prep", + "properties": {}, + "widgets_values": [ + "Output - imgload_prep" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3226, + "type": "GetNode", + "pos": [ + 3650, + 2590 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 63, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "MASK", + "type": "MASK", + "links": [ + 4787, + 4809 + ], + "slot_index": 0 + } + ], + "title": "Get_mask_outpainting", + "properties": {}, + "widgets_values": [ + "mask_outpainting" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3227, + "type": "GetNode", + "pos": [ + 4460, + 2910 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 64, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 4793 + ], + "slot_index": 0 + } + ], + "title": "Get_seed", + "properties": {}, + "widgets_values": [ + "seed" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3228, + "type": "GetNode", + "pos": [ + 4460, + 2960 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 65, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 4794 + ], + "slot_index": 0 + } + ], + "title": "Get_steps", + "properties": {}, + "widgets_values": [ + "steps" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3231, + "type": "GetNode", + "pos": [ + 4440, + 3000 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 66, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "COMBO", + "type": "COMBO", + "links": [ + 4801 + ] + } + ], + "title": "Get_scheduler", + "properties": {}, + "widgets_values": [ + "scheduler" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3233, + "type": "GetNode", + "pos": [ + 4450, + 3040 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 67, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "COMBO", + "type": "COMBO", + "links": [ + 4803 + ] + } + ], + "title": "Get_sampler", + "properties": {}, + "widgets_values": [ + "sampler" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3256, + "type": "GetNode", + "pos": [ + 3790, + 1980 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 68, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "CLIP", + "type": "CLIP", + "links": [ + 4827 + ], + "slot_index": 0 + } + ], + "title": "Get_clip", + "properties": {}, + "widgets_values": [ + "clip" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3257, + "type": "GetNode", + "pos": [ + 3640, + 1650 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 69, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 4849 + ], + "slot_index": 0 + } + ], + "title": "Get_Output - imgload_prep", + "properties": {}, + "widgets_values": [ + "Output - imgload_prep" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3260, + "type": "GetNode", + "pos": [ + 4830, + 2080 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 70, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 4839 + ], + "slot_index": 0 + } + ], + "title": "Get_steps", + "properties": {}, + "widgets_values": [ + "steps" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3268, + "type": "GetNode", + "pos": [ + 4810, + 2120 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 71, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "COMBO", + "type": "COMBO", + "links": [ + 4852 + ] + } + ], + "title": "Get_scheduler", + "properties": {}, + "widgets_values": [ + "scheduler" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3269, + "type": "GetNode", + "pos": [ + 4820, + 2160 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 72, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "COMBO", + "type": "COMBO", + "links": [ + 4853 + ] + } + ], + "title": "Get_sampler", + "properties": {}, + "widgets_values": [ + "sampler" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3285, + "type": "GetNode", + "pos": [ + 4820, + 2200 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 73, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "links": [ + 4921 + ], + "slot_index": 0 + } + ], + "title": "Get_denoise", + "properties": {}, + "widgets_values": [ + "denoise" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3291, + "type": "GetNode", + "pos": [ + -2406.878173828125, + 72.23831939697266 + ], + "size": [ + 230, + 60 + ], + "flags": { + "collapsed": false + }, + "order": 74, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "links": [ + 5768 + ], + "slot_index": 0 + } + ], + "title": "Get_model_fill", + "properties": {}, + "widgets_values": [ + "model_fill" + ] + }, + { + "id": 3302, + "type": "GetNode", + "pos": [ + 510, + 350 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 75, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "links": [ + 4940 + ], + "slot_index": 0 + } + ], + "title": "Get_sendModel", + "properties": {}, + "widgets_values": [ + "sendModel" + ] + }, + { + "id": 3303, + "type": "GetNode", + "pos": [ + 4730, + 1770 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 76, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "links": [ + 4945 + ], + "slot_index": 0 + } + ], + "title": "Get_modelWithLoRAs", + "properties": {}, + "widgets_values": [ + "modelWithLoRAs" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3329, + "type": "GetNode", + "pos": [ + 1839.6929931640625, + 1049.8760986328125 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 77, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 4977 + ] + } + ], + "title": "Get_mask_feather", + "properties": {}, + "widgets_values": [ + "mask_feather" + ] + }, + { + "id": 3330, + "type": "GetNode", + "pos": [ + 5540, + 1930 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 78, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 5589 + ], + "slot_index": 0 + } + ], + "title": "Get_mask_feather", + "properties": {}, + "widgets_values": [ + "mask_feather" + ] + }, + { + "id": 3331, + "type": "GetNode", + "pos": [ + 5160, + 2940 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 79, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 4979 + ], + "slot_index": 0 + } + ], + "title": "Get_mask_feather", + "properties": {}, + "widgets_values": [ + "mask_feather" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3342, + "type": "GetNode", + "pos": [ + 4090, + 1840 + ], + "size": [ + 250, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 80, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [ + 4992 + ] + } + ], + "title": "Get_conditioning", + "properties": {}, + "widgets_values": [ + "conditioning" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3344, + "type": "GetNode", + "pos": [ + 4630.46533203125, + 4699.712890625 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 81, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "VAE", + "type": "VAE", + "links": [ + 4996, + 5001 + ], + "slot_index": 0 + } + ], + "title": "Get_vae", + "properties": {}, + "widgets_values": [ + "vae" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3348, + "type": "GetNode", + "pos": [ + 5246.32666015625, + 4994.1142578125 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 82, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 5007 + ], + "slot_index": 0 + } + ], + "title": "Get_seed", + "properties": {}, + "widgets_values": [ + "seed" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3349, + "type": "GetNode", + "pos": [ + 4981.232421875, + 4995.3798828125 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 83, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 4999 + ], + "slot_index": 0 + } + ], + "title": "Get_batch", + "properties": {}, + "widgets_values": [ + "batch" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3350, + "type": "GetNode", + "pos": [ + 5236.32666015625, + 5054.1142578125 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 84, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 5008 + ], + "slot_index": 0 + } + ], + "title": "Get_steps", + "properties": {}, + "widgets_values": [ + "steps" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3351, + "type": "GetNode", + "pos": [ + 3692.0634765625, + 4822.7001953125 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 85, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 5023, + 5106 + ], + "slot_index": 0 + } + ], + "title": "Get_Output - imgload_prep", + "properties": {}, + "widgets_values": [ + "Output - imgload_prep" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3355, + "type": "GetNode", + "pos": [ + 5262.06591796875, + 4782.7001953125 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 86, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "links": [ + 5003 + ], + "slot_index": 0 + } + ], + "title": "Get_modelWithLoRAs", + "properties": {}, + "widgets_values": [ + "modelWithLoRAs" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3359, + "type": "GetNode", + "pos": [ + 4410, + 4830 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 87, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "CLIP", + "type": "CLIP", + "links": [ + 5012 + ], + "slot_index": 0 + } + ], + "title": "Get_clip", + "properties": {}, + "widgets_values": [ + "clip" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3365, + "type": "GetNode", + "pos": [ + 4580, + 4780 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 88, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [ + 5015 + ], + "slot_index": 0 + } + ], + "title": "Get_conditioning", + "properties": {}, + "widgets_values": [ + "conditioning" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3369, + "type": "GetNode", + "pos": [ + 5226.32666015625, + 5104.1142578125 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 89, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "COMBO", + "type": "COMBO", + "links": [ + 5020 + ] + } + ], + "title": "Get_scheduler", + "properties": {}, + "widgets_values": [ + "scheduler" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3370, + "type": "GetNode", + "pos": [ + 5226.32666015625, + 5164.1142578125 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 90, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "COMBO", + "type": "COMBO", + "links": [ + 5021 + ] + } + ], + "title": "Get_sampler", + "properties": {}, + "widgets_values": [ + "sampler" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3378, + "type": "GetNode", + "pos": [ + 4450, + 6240 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 91, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "CLIP_VISION", + "type": "CLIP_VISION", + "links": [ + 5051 + ], + "slot_index": 0 + } + ], + "title": "Get_model_clipVision", + "properties": {}, + "widgets_values": [ + "model_clipVision" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3379, + "type": "GetNode", + "pos": [ + 4473.34765625, + 6191.7451171875 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 92, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "STYLE_MODEL", + "type": "STYLE_MODEL", + "links": [ + 5055 + ], + "slot_index": 0 + } + ], + "title": "Get_model_redux", + "properties": {}, + "widgets_values": [ + "model_redux" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3380, + "type": "GetNode", + "pos": [ + 3680, + 2640 + ], + "size": [ + 240, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 93, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [ + 5039 + ], + "slot_index": 0 + } + ], + "title": "Get_conditioning", + "properties": {}, + "widgets_values": [ + "conditioning" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3403, + "type": "GetNode", + "pos": [ + 4230.998046875, + 6323.8974609375 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 94, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "VEC3", + "type": "VEC3", + "links": [ + 5082 + ] + } + ], + "title": "Get_ipadapter_strenght", + "properties": {}, + "widgets_values": [ + "ipadapter_strenght" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3451, + "type": "GetNode", + "pos": [ + 3900.090087890625, + 5473.4619140625 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 95, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "VAE", + "type": "VAE", + "links": [ + 5168, + 5173 + ], + "slot_index": 0 + } + ], + "title": "Get_vae", + "properties": {}, + "widgets_values": [ + "vae" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3455, + "type": "GetNode", + "pos": [ + 4470.0888671875, + 5833.4619140625 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 96, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 5179 + ], + "slot_index": 0 + } + ], + "title": "Get_seed", + "properties": {}, + "widgets_values": [ + "seed" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3456, + "type": "GetNode", + "pos": [ + 4200.0888671875, + 5753.4619140625 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 97, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 5171 + ], + "slot_index": 0 + } + ], + "title": "Get_batch", + "properties": {}, + "widgets_values": [ + "batch" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3457, + "type": "GetNode", + "pos": [ + 4470.0888671875, + 5873.4619140625 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 98, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 5180 + ], + "slot_index": 0 + } + ], + "title": "Get_steps", + "properties": {}, + "widgets_values": [ + "steps" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3458, + "type": "GetNode", + "pos": [ + 1828.7926025390625, + 824.1670532226562 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 99, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 5212, + 5482 + ], + "slot_index": 0 + } + ], + "title": "Get_Output - imgload_prep", + "properties": {}, + "widgets_values": [ + "Output - imgload_prep" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3460, + "type": "GetNode", + "pos": [ + 4530.0888671875, + 5563.4619140625 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 100, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "links": [ + 5175 + ], + "slot_index": 0 + } + ], + "title": "Get_modelWithLoRAs", + "properties": {}, + "widgets_values": [ + "modelWithLoRAs" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3461, + "type": "GetNode", + "pos": [ + 3660.090087890625, + 5683.4619140625 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 101, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "CLIP", + "type": "CLIP", + "links": [ + 5181 + ], + "slot_index": 0 + } + ], + "title": "Get_clip", + "properties": {}, + "widgets_values": [ + "clip" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3463, + "type": "GetNode", + "pos": [ + 3810.090087890625, + 5593.4619140625 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 102, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [ + 5166 + ], + "slot_index": 0 + } + ], + "title": "Get_conditioning", + "properties": {}, + "widgets_values": [ + "conditioning" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3488, + "type": "GetNode", + "pos": [ + 4450.0888671875, + 5913.4619140625 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 103, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "COMBO", + "type": "COMBO", + "links": [ + 5211 + ] + } + ], + "title": "Get_scheduler", + "properties": {}, + "widgets_values": [ + "scheduler" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3490, + "type": "GetNode", + "pos": [ + 4460.0888671875, + 5953.4619140625 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 104, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "COMBO", + "type": "COMBO", + "links": [ + 5210 + ], + "slot_index": 0 + } + ], + "title": "Get_sampler", + "properties": {}, + "widgets_values": [ + "sampler" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3506, + "type": "GetNode", + "pos": [ + -2416.878173828125, + 182.2382354736328 + ], + "size": [ + 240, + 60 + ], + "flags": { + "collapsed": false + }, + "order": 105, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "links": [ + 5769 + ], + "slot_index": 0 + } + ], + "title": "Get_model_depth", + "properties": {}, + "widgets_values": [ + "model_depth" + ] + }, + { + "id": 3507, + "type": "GetNode", + "pos": [ + -2398.478515625, + 280.7325134277344 + ], + "size": [ + 220, + 60 + ], + "flags": { + "collapsed": false + }, + "order": 106, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "links": [ + 5770 + ], + "slot_index": 0 + } + ], + "title": "Get_model_canny", + "properties": {}, + "widgets_values": [ + "model_canny" + ] + }, + { + "id": 3553, + "type": "GetNode", + "pos": [ + 3629.0615234375, + 4212.4921875 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 107, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 5593 + ], + "slot_index": 0 + } + ], + "title": "Get_mask_feather", + "properties": {}, + "widgets_values": [ + "mask_feather" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3555, + "type": "GetNode", + "pos": [ + 3629.0615234375, + 4162.4921875 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 108, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "MASK", + "type": "MASK", + "links": [ + 5592 + ], + "slot_index": 0 + } + ], + "title": "Get_mask", + "properties": {}, + "widgets_values": [ + "mask" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3589, + "type": "GetNode", + "pos": [ + 3620.95361328125, + 7143.40185546875 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 109, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 5382 + ], + "slot_index": 0 + } + ], + "title": "Get_Output - imgload_prep", + "properties": {}, + "widgets_values": [ + "Output - imgload_prep" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3592, + "type": "GetNode", + "pos": [ + 3650, + 7200 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 110, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 5383 + ], + "slot_index": 0 + } + ], + "title": "Get_loadImage_IP3", + "properties": {}, + "widgets_values": [ + "loadImage_IP3" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3658, + "type": "GetNode", + "pos": [ + 3830.090087890625, + 5743.4619140625 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 111, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 5452 + ] + } + ], + "title": "Get_preprocessor canny", + "properties": {}, + "widgets_values": [ + "preprocessor canny" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3659, + "type": "GetNode", + "pos": [ + -5268.875, + 2440.03125 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 112, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 5453, + 5537 + ], + "slot_index": 0 + } + ], + "title": "Get_preprocessor canny", + "properties": {}, + "widgets_values": [ + "preprocessor canny" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3660, + "type": "GetNode", + "pos": [ + -5218.875, + 2790.03125 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 113, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 5454 + ], + "slot_index": 0 + } + ], + "title": "Get_preprocessor_depth", + "properties": {}, + "widgets_values": [ + "preprocessor_depth" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3667, + "type": "GetNode", + "pos": [ + -5218.875, + 1410.03125 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 114, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 5464 + ], + "slot_index": 0 + } + ], + "title": "Get_loadImage_IP1", + "properties": {}, + "widgets_values": [ + "loadImage_IP1" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3668, + "type": "GetNode", + "pos": [ + -5238.875, + 1720.03125 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 115, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 5463 + ], + "slot_index": 0 + } + ], + "title": "Get_loadImage_IP2", + "properties": {}, + "widgets_values": [ + "loadImage_IP2" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3669, + "type": "GetNode", + "pos": [ + -5198.875, + 2080.03125 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 116, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 5465 + ], + "slot_index": 0 + } + ], + "title": "Get_loadImage_IP3", + "properties": {}, + "widgets_values": [ + "loadImage_IP3" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3670, + "type": "GetNode", + "pos": [ + -5258.875, + 1070.03125 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 117, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "MASK", + "type": "MASK", + "links": [ + 5588 + ], + "slot_index": 0 + } + ], + "title": "Get_mask", + "properties": {}, + "widgets_values": [ + "mask" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3671, + "type": "GetNode", + "pos": [ + -5278.875, + 770.03125 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 118, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 5468 + ], + "slot_index": 0 + } + ], + "title": "Get_Output - imgload_prep", + "properties": {}, + "widgets_values": [ + "Output - imgload_prep" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3675, + "type": "GetNode", + "pos": [ + 1880, + 170 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 119, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 5472 + ] + } + ], + "title": "Get_previewOutputs", + "properties": {}, + "widgets_values": [ + "previewOutputs" + ] + }, + { + "id": 3684, + "type": "GetNode", + "pos": [ + -5258.875, + 1150.03125 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 120, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 5586 + ], + "slot_index": 0 + } + ], + "title": "Get_mask_feather", + "properties": {}, + "widgets_values": [ + "mask_feather" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3395, + "type": "GetNode", + "pos": [ + 7130, + 6710 + ], + "size": [ + 240, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 121, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 5729 + ], + "slot_index": 0 + } + ], + "title": "Get_loadImage_IP3", + "properties": {}, + "widgets_values": [ + "loadImage_IP3" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3339, + "type": "GetNode", + "pos": [ + 5820, + 6700 + ], + "size": [ + 250, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 122, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 5730 + ], + "slot_index": 0 + } + ], + "title": "Get_loadImage_IP2", + "properties": {}, + "widgets_values": [ + "loadImage_IP2" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3336, + "type": "GetNode", + "pos": [ + 4630, + 6710 + ], + "size": [ + 260, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 123, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 5703 + ], + "slot_index": 0 + } + ], + "title": "Get_loadImage_IP1", + "properties": {}, + "widgets_values": [ + "loadImage_IP1" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3368, + "type": "GetNode", + "pos": [ + 3670, + 6510 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 124, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "CLIP", + "type": "CLIP", + "links": [ + 5019 + ], + "slot_index": 0 + } + ], + "title": "Get_clip", + "properties": {}, + "widgets_values": [ + "clip" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3367, + "type": "GetNode", + "pos": [ + 3780, + 290 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 125, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [ + 5017, + 5384 + ], + "slot_index": 0 + } + ], + "title": "Get_conditioning", + "properties": {}, + "widgets_values": [ + "conditioning" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1291, + "type": "GetNode", + "pos": [ + 3640, + 1610 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 126, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "VAE", + "type": "VAE", + "links": [ + 4912 + ], + "slot_index": 0 + } + ], + "title": "Get_vae", + "properties": {}, + "widgets_values": [ + "vae" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3333, + "type": "GetNode", + "pos": [ + 4460, + 2860 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 127, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 4980 + ], + "slot_index": 0 + } + ], + "title": "Get_batch", + "properties": {}, + "widgets_values": [ + "batch" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 2438, + "type": "GetNode", + "pos": [ + -3250, + 310 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 128, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "SAMPLER_PARAMS", + "type": "SAMPLER_PARAMS", + "links": [ + 3461 + ], + "slot_index": 0 + } + ], + "title": "Get_sampler params", + "properties": {}, + "widgets_values": [ + "sampler params" + ] + }, + { + "id": 3000, + "type": "PreviewImage", + "pos": [ + 840, + 150 + ], + "size": [ + 870, + 920 + ], + "flags": { + "collapsed": false, + "pinned": true + }, + "order": 179, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 4414 + } + ], + "outputs": [], + "title": "Img Preview", + "properties": { + "Node name for S&R": "PreviewImage", + "enableTabs": true, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": true, + "secondTabText": "Img Compare", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [], + "color": "#222", + "bgcolor": "#000" + }, + { + "id": 418, + "type": "ImageResizeKJ", + "pos": [ + 4273.5576171875, + 3293.437255859375 + ], + "size": [ + 320, + 240 + ], + "flags": { + "collapsed": true + }, + "order": 320, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 2180 + }, + { + "name": "get_image_size", + "type": "IMAGE", + "link": null, + "shape": 7 + }, + { + "name": "width_input", + "type": "INT", + "link": 4718, + "widget": { + "name": "width_input" + } + }, + { + "name": "height_input", + "type": "INT", + "link": 4719, + "widget": { + "name": "height_input" + } + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 3433, + 4667 + ], + "slot_index": 0, + "shape": 3 + }, + { + "name": "width", + "type": "INT", + "links": [], + "slot_index": 1, + "shape": 3 + }, + { + "name": "height", + "type": "INT", + "links": [], + "slot_index": 2, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "ImageResizeKJ", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 2048, + 2048, + "lanczos", + true, + 2, + 0, + 0, + "disabled" + ] + }, + { + "id": 429, + "type": "DetailerForEachPipe", + "pos": [ + 4889.0615234375, + 4022.4970703125 + ], + "size": [ + 320, + 540 + ], + "flags": {}, + "order": 349, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 2211 + }, + { + "name": "segs", + "type": "SEGS", + "link": 5335, + "slot_index": 1 + }, + { + "name": "basic_pipe", + "type": "BASIC_PIPE", + "link": 3152, + "slot_index": 2 + }, + { + "name": "detailer_hook", + "type": "DETAILER_HOOK", + "link": null, + "slot_index": 3, + "shape": 7 + }, + { + "name": "refiner_basic_pipe_opt", + "type": "BASIC_PIPE", + "link": null, + "shape": 7 + }, + { + "name": "scheduler_func_opt", + "type": "SCHEDULER_FUNC", + "link": null, + "shape": 7 + }, + { + "name": "seed", + "type": "INT", + "link": 2243, + "widget": { + "name": "seed" + } + }, + { + "name": "steps", + "type": "INT", + "link": 2035, + "widget": { + "name": "steps" + } + }, + { + "name": "scheduler", + "type": "COMBO", + "link": 2313, + "widget": { + "name": "scheduler" + } + }, + { + "name": "denoise", + "type": "FLOAT", + "link": 2034, + "widget": { + "name": "denoise" + } + }, + { + "name": "sampler_name", + "type": "COMBO", + "link": 2341, + "widget": { + "name": "sampler_name" + } + } + ], + "outputs": [ + { + "name": "image", + "type": "IMAGE", + "links": [ + 5630 + ], + "slot_index": 0, + "shape": 3 + }, + { + "name": "segs", + "type": "SEGS", + "links": [], + "slot_index": 1, + "shape": 3 + }, + { + "name": "basic_pipe", + "type": "BASIC_PIPE", + "links": null, + "shape": 3 + }, + { + "name": "cnet_images", + "type": "IMAGE", + "links": [], + "slot_index": 3, + "shape": 6 + } + ], + "properties": { + "Node name for S&R": "DetailerForEachPipe", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 1024, + true, + 1024, + 703091795492300, + "randomize", + 20, + 1, + "euler", + "beta", + 0.74, + 5, + true, + true, + "", + 0.2, + 1, + false, + 20 + ] + }, + { + "id": 583, + "type": "DualCLIPLoader", + "pos": [ + 2997.352294921875, + 397.0935974121094 + ], + "size": [ + 320, + 110 + ], + "flags": {}, + "order": 129, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "CLIP", + "type": "CLIP", + "links": [ + 4424 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "DualCLIPLoader", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "t5xxl_fp16.safetensors", + "clip_l.safetensors", + "flux" + ] + }, + { + "id": 586, + "type": "ModelSamplingFlux", + "pos": [ + 5300, + 370 + ], + "size": [ + 250, + 120 + ], + "flags": { + "collapsed": false + }, + "order": 277, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 5045 + }, + { + "name": "width", + "type": "INT", + "link": 3449, + "widget": { + "name": "width" + } + }, + { + "name": "height", + "type": "INT", + "link": 3450, + "widget": { + "name": "height" + } + }, + { + "name": "max_shift", + "type": "FLOAT", + "link": 2404, + "widget": { + "name": "max_shift" + } + } + ], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "links": [ + 1123, + 1424, + 1489 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "ModelSamplingFlux", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 1.1500000000000001, + 0.5, + 16, + 704 + ] + }, + { + "id": 589, + "type": "BasicGuider", + "pos": [ + 5940, + 410 + ], + "size": [ + 161.1999969482422, + 50 + ], + "flags": { + "collapsed": true + }, + "order": 324, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 1424 + }, + { + "name": "conditioning", + "type": "CONDITIONING", + "link": 5237 + } + ], + "outputs": [ + { + "name": "GUIDER", + "type": "GUIDER", + "links": [ + 1118 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "BasicGuider", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 590, + "type": "SamplerCustomAdvanced", + "pos": [ + 6280, + 410 + ], + "size": [ + 240, + 110 + ], + "flags": { + "collapsed": true + }, + "order": 351, + "mode": 0, + "inputs": [ + { + "name": "noise", + "type": "NOISE", + "link": 1371 + }, + { + "name": "guider", + "type": "GUIDER", + "link": 1118 + }, + { + "name": "sampler", + "type": "SAMPLER", + "link": 2334 + }, + { + "name": "sigmas", + "type": "SIGMAS", + "link": 1120 + }, + { + "name": "latent_image", + "type": "LATENT", + "link": 5329 + } + ], + "outputs": [ + { + "name": "output", + "type": "LATENT", + "links": [], + "slot_index": 0, + "shape": 3 + }, + { + "name": "denoised_output", + "type": "LATENT", + "links": [ + 1474 + ], + "slot_index": 1, + "shape": 3 + } + ], + "title": "Sampler", + "properties": { + "Node name for S&R": "SamplerCustomAdvanced", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 591, + "type": "RandomNoise", + "pos": [ + 6030, + 340 + ], + "size": [ + 210, + 34 + ], + "flags": { + "collapsed": true + }, + "order": 178, + "mode": 0, + "inputs": [ + { + "name": "noise_seed", + "type": "INT", + "link": 1360, + "widget": { + "name": "noise_seed" + } + } + ], + "outputs": [ + { + "name": "NOISE", + "type": "NOISE", + "links": [ + 1371 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "RandomNoise", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 1, + "fixed" + ] + }, + { + "id": 593, + "type": "BasicScheduler", + "pos": [ + 5860, + 460 + ], + "size": [ + 220, + 100 + ], + "flags": { + "collapsed": false + }, + "order": 323, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 1123 + }, + { + "name": "scheduler", + "type": "COMBO", + "link": 2037, + "widget": { + "name": "scheduler" + } + }, + { + "name": "steps", + "type": "INT", + "link": 2038, + "widget": { + "name": "steps" + } + } + ], + "outputs": [ + { + "name": "SIGMAS", + "type": "SIGMAS", + "links": [ + 1120, + 5330 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "BasicScheduler", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "beta", + 20, + 1 + ] + }, + { + "id": 594, + "type": "VAELoader", + "pos": [ + 2997.352294921875, + 293.0782775878906 + ], + "size": [ + 320, + 60 + ], + "flags": { + "collapsed": false + }, + "order": 130, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "VAE", + "type": "VAE", + "links": [ + 4425 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "VAELoader", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "ae.sft" + ] + }, + { + "id": 609, + "type": "VAEDecode", + "pos": [ + 6480, + 440 + ], + "size": [ + 170, + 50 + ], + "flags": { + "collapsed": true + }, + "order": 366, + "mode": 0, + "inputs": [ + { + "name": "samples", + "type": "LATENT", + "link": 1474 + }, + { + "name": "vae", + "type": "VAE", + "link": 3499 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 1538 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "VAEDecode", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 624, + "type": "Save Image Grid (mtb)", + "pos": [ + -4697.18603515625, + 239.85467529296875 + ], + "size": [ + 240, + 190 + ], + "flags": { + "collapsed": false + }, + "order": 273, + "mode": 4, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 2380 + }, + { + "name": "filename_prefix", + "type": "STRING", + "link": 4781, + "widget": { + "name": "filename_prefix" + } + } + ], + "outputs": [], + "properties": { + "Node name for S&R": "Save Image Grid (mtb)", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "stickFigures", + false + ] + }, + { + "id": 641, + "type": "ToBasicPipe", + "pos": [ + 4016.249755859375, + 329.36273193359375 + ], + "size": [ + 240, + 110 + ], + "flags": { + "collapsed": true + }, + "order": 360, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 5326 + }, + { + "name": "clip", + "type": "CLIP", + "link": 5325 + }, + { + "name": "vae", + "type": "VAE", + "link": 5324 + }, + { + "name": "positive", + "type": "CONDITIONING", + "link": 5017 + }, + { + "name": "negative", + "type": "CONDITIONING", + "link": 3212 + } + ], + "outputs": [ + { + "name": "basic_pipe", + "type": "BASIC_PIPE", + "links": [ + 1187 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "ToBasicPipe", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 697, + "type": "ModelSamplingFlux", + "pos": [ + 4870, + 3310 + ], + "size": [ + 210, + 130 + ], + "flags": { + "collapsed": true + }, + "order": 264, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 1608 + }, + { + "name": "max_shift", + "type": "FLOAT", + "link": 2406, + "widget": { + "name": "max_shift" + } + } + ], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "links": [ + 2169 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "ModelSamplingFlux", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 1.1500000000000001, + 0.5, + 1024, + 1024 + ] + }, + { + "id": 703, + "type": "GetImageSize+", + "pos": [ + 3883.55810546875, + 3513.43603515625 + ], + "size": [ + 200, + 70 + ], + "flags": { + "collapsed": true + }, + "order": 193, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 2166 + } + ], + "outputs": [ + { + "name": "width", + "type": "INT", + "links": [ + 4716 + ], + "slot_index": 0, + "shape": 3 + }, + { + "name": "height", + "type": "INT", + "links": [ + 4717 + ], + "slot_index": 1, + "shape": 3 + }, + { + "name": "count", + "type": "INT", + "links": null, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "GetImageSize+", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 834, + "type": "Reroute", + "pos": [ + 6850, + 240 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 352, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 1490 + } + ], + "outputs": [ + { + "name": "", + "type": "MODEL", + "links": [ + 2087 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 837, + "type": "Reroute", + "pos": [ + 5737.9697265625, + 223.6033172607422 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 325, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 1489 + } + ], + "outputs": [ + { + "name": "", + "type": "MODEL", + "links": [ + 1490 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 921, + "type": "Reroute", + "pos": [ + 6850, + 280 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 306, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5238 + } + ], + "outputs": [ + { + "name": "", + "type": "CONDITIONING", + "links": [ + 2088 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 932, + "type": "FromBasicPipe_v2", + "pos": [ + 4696.86669921875, + 3370.522705078125 + ], + "size": [ + 270, + 130 + ], + "flags": { + "collapsed": true + }, + "order": 180, + "mode": 0, + "inputs": [ + { + "name": "basic_pipe", + "type": "BASIC_PIPE", + "link": 1599 + } + ], + "outputs": [ + { + "name": "basic_pipe", + "type": "BASIC_PIPE", + "links": [], + "slot_index": 0, + "shape": 3 + }, + { + "name": "model", + "type": "MODEL", + "links": [ + 1608 + ], + "slot_index": 1, + "shape": 3 + }, + { + "name": "clip", + "type": "CLIP", + "links": null, + "shape": 3 + }, + { + "name": "vae", + "type": "VAE", + "links": [ + 2172 + ], + "slot_index": 3, + "shape": 3 + }, + { + "name": "positive", + "type": "CONDITIONING", + "links": [ + 5369 + ], + "slot_index": 4, + "shape": 3 + }, + { + "name": "negative", + "type": "CONDITIONING", + "links": [ + 2171 + ], + "slot_index": 5, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "FromBasicPipe_v2", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 963, + "type": "VAEEncode", + "pos": [ + 3843.34716796875, + 972.2465209960938 + ], + "size": [ + 210, + 50 + ], + "flags": { + "collapsed": true + }, + "order": 188, + "mode": 0, + "inputs": [ + { + "name": "pixels", + "type": "IMAGE", + "link": 2071 + }, + { + "name": "vae", + "type": "VAE", + "link": 1680 + } + ], + "outputs": [ + { + "name": "LATENT", + "type": "LATENT", + "links": [ + 1798 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "VAEEncode", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 1051, + "type": "SamplerCustomAdvanced", + "pos": [ + 7311.9658203125, + 267.23828125 + ], + "size": [ + 240, + 110 + ], + "flags": { + "collapsed": false + }, + "order": 381, + "mode": 0, + "inputs": [ + { + "name": "noise", + "type": "NOISE", + "link": 1776, + "slot_index": 0 + }, + { + "name": "guider", + "type": "GUIDER", + "link": 2089, + "slot_index": 1 + }, + { + "name": "sampler", + "type": "SAMPLER", + "link": 2337, + "slot_index": 2 + }, + { + "name": "sigmas", + "type": "SIGMAS", + "link": 1769, + "slot_index": 3 + }, + { + "name": "latent_image", + "type": "LATENT", + "link": 2105, + "slot_index": 4 + } + ], + "outputs": [ + { + "name": "output", + "type": "LATENT", + "links": [ + 1773 + ], + "slot_index": 0, + "shape": 3 + }, + { + "name": "denoised_output", + "type": "LATENT", + "links": [ + 3722 + ], + "slot_index": 1, + "shape": 3 + } + ], + "title": "Sampler", + "properties": { + "Node name for S&R": "SamplerCustomAdvanced", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 1052, + "type": "SplitSigmasDenoise", + "pos": [ + 7064.74609375, + 454.0147705078125 + ], + "size": [ + 210, + 80 + ], + "flags": { + "collapsed": false + }, + "order": 365, + "mode": 0, + "inputs": [ + { + "name": "sigmas", + "type": "SIGMAS", + "link": 2092 + } + ], + "outputs": [ + { + "name": "high_sigmas", + "type": "SIGMAS", + "links": [ + 1769 + ], + "slot_index": 0, + "shape": 3 + }, + { + "name": "low_sigmas", + "type": "SIGMAS", + "links": [ + 3717 + ], + "slot_index": 1, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "SplitSigmasDenoise", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 0.45 + ] + }, + { + "id": 1053, + "type": "SamplerCustomAdvanced", + "pos": [ + 8094.74609375, + 294.0147705078125 + ], + "size": [ + 240, + 110 + ], + "flags": { + "collapsed": false + }, + "order": 412, + "mode": 0, + "inputs": [ + { + "name": "noise", + "type": "NOISE", + "link": 1770, + "slot_index": 0 + }, + { + "name": "guider", + "type": "GUIDER", + "link": 2090, + "slot_index": 1 + }, + { + "name": "sampler", + "type": "SAMPLER", + "link": 2338, + "slot_index": 2 + }, + { + "name": "sigmas", + "type": "SIGMAS", + "link": 3718, + "slot_index": 3 + }, + { + "name": "latent_image", + "type": "LATENT", + "link": 1772, + "slot_index": 4 + } + ], + "outputs": [ + { + "name": "output", + "type": "LATENT", + "links": [], + "slot_index": 0, + "shape": 3 + }, + { + "name": "denoised_output", + "type": "LATENT", + "links": [ + 1787 + ], + "slot_index": 1, + "shape": 3 + } + ], + "title": "Sampler", + "properties": { + "Node name for S&R": "SamplerCustomAdvanced", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1054, + "type": "DisableNoise", + "pos": [ + 7904.74609375, + 204.01480102539062 + ], + "size": [ + 210, + 30 + ], + "flags": { + "collapsed": true + }, + "order": 131, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "NOISE", + "type": "NOISE", + "links": [ + 1770 + ], + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "DisableNoise", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1055, + "type": "InjectLatentNoise+", + "pos": [ + 7674.74609375, + 264.0147705078125 + ], + "size": [ + 260, + 150 + ], + "flags": {}, + "order": 411, + "mode": 0, + "inputs": [ + { + "name": "latent", + "type": "LATENT", + "link": 1773 + }, + { + "name": "mask", + "type": "MASK", + "link": 2412, + "shape": 7 + } + ], + "outputs": [ + { + "name": "LATENT", + "type": "LATENT", + "links": [ + 1772 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "InjectLatentNoise+", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 333332620158964, + "randomize", + 2.5, + "false" + ] + }, + { + "id": 1056, + "type": "RandomNoise", + "pos": [ + 7131.9658203125, + 267.23828125 + ], + "size": [ + 210, + 34 + ], + "flags": { + "collapsed": true + }, + "order": 182, + "mode": 0, + "inputs": [ + { + "name": "noise_seed", + "type": "INT", + "link": 1775, + "widget": { + "name": "noise_seed" + } + } + ], + "outputs": [ + { + "name": "NOISE", + "type": "NOISE", + "links": [ + 1776 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "RandomNoise", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 1, + "fixed" + ] + }, + { + "id": 1060, + "type": "VAEDecode", + "pos": [ + 8384.751953125, + 254.0147705078125 + ], + "size": [ + 170, + 50 + ], + "flags": { + "collapsed": true + }, + "order": 413, + "mode": 0, + "inputs": [ + { + "name": "samples", + "type": "LATENT", + "link": 1787 + }, + { + "name": "vae", + "type": "VAE", + "link": 1786 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 1783 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "VAEDecode", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 1072, + "type": "FluxSamplerParams+", + "pos": [ + 4297.0771484375, + 936.7098999023438 + ], + "size": [ + 230, + 260 + ], + "flags": {}, + "order": 318, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 3363 + }, + { + "name": "conditioning", + "type": "CONDITIONING", + "link": 3362 + }, + { + "name": "latent_image", + "type": "LATENT", + "link": 1800 + }, + { + "name": "loras", + "type": "LORA_PARAMS", + "link": null, + "shape": 7 + }, + { + "name": "denoise", + "type": "STRING", + "link": 4692, + "widget": { + "name": "denoise" + } + }, + { + "name": "seed", + "type": "STRING", + "link": 4690, + "widget": { + "name": "seed" + } + }, + { + "name": "scheduler", + "type": "STRING", + "link": 2005, + "widget": { + "name": "scheduler" + } + }, + { + "name": "steps", + "type": "STRING", + "link": 2004, + "widget": { + "name": "steps" + } + }, + { + "name": "guidance", + "type": "STRING", + "link": 2007, + "widget": { + "name": "guidance" + } + }, + { + "name": "sampler", + "type": "STRING", + "link": 2344, + "widget": { + "name": "sampler" + } + }, + { + "name": "max_shift", + "type": "STRING", + "link": 2410, + "widget": { + "name": "max_shift" + } + } + ], + "outputs": [ + { + "name": "latent", + "type": "LATENT", + "links": [ + 1803 + ], + "slot_index": 0, + "shape": 3 + }, + { + "name": "params", + "type": "SAMPLER_PARAMS", + "links": null, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "FluxSamplerParams+", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "?", + "euler", + "beta", + "20", + "2.5", + "1.15", + "0.5", + "1.0" + ] + }, + { + "id": 1073, + "type": "RepeatLatentBatch", + "pos": [ + 4013.34716796875, + 1012.2463989257812 + ], + "size": [ + 230, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 266, + "mode": 0, + "inputs": [ + { + "name": "samples", + "type": "LATENT", + "link": 1798 + }, + { + "name": "amount", + "type": "INT", + "link": 1920, + "widget": { + "name": "amount" + } + } + ], + "outputs": [ + { + "name": "LATENT", + "type": "LATENT", + "links": [ + 1800 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "RepeatLatentBatch", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 1 + ] + }, + { + "id": 1074, + "type": "VAEDecode", + "pos": [ + 4617.0771484375, + 876.7098999023438 + ], + "size": [ + 170, + 50 + ], + "flags": { + "collapsed": true + }, + "order": 345, + "mode": 0, + "inputs": [ + { + "name": "samples", + "type": "LATENT", + "link": 1803 + }, + { + "name": "vae", + "type": "VAE", + "link": 1804 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 1802 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "VAEDecode", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 1090, + "type": "SDXLEmptyLatentSizePicker+", + "pos": [ + 4526.2509765625, + 379.36273193359375 + ], + "size": [ + 230, + 122 + ], + "flags": { + "collapsed": false + }, + "order": 199, + "mode": 0, + "inputs": [ + { + "name": "batch_size", + "type": "INT", + "link": 3214, + "widget": { + "name": "batch_size" + } + }, + { + "name": "resolution", + "type": "COMBO", + "link": 3448, + "widget": { + "name": "resolution" + } + } + ], + "outputs": [ + { + "name": "LATENT", + "type": "LATENT", + "links": [ + 4514, + 5327 + ], + "slot_index": 0, + "shape": 3 + }, + { + "name": "width", + "type": "INT", + "links": [ + 3449, + 3543 + ], + "slot_index": 1, + "shape": 3 + }, + { + "name": "height", + "type": "INT", + "links": [ + 3450, + 3544 + ], + "slot_index": 2, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "SDXLEmptyLatentSizePicker+", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "1024x1024 (1.0)", + 2, + 0, + 0 + ] + }, + { + "id": 1103, + "type": "Power Lora Loader (rgthree)", + "pos": [ + 480, + 320 + ], + "size": [ + 310, + 240 + ], + "flags": { + "collapsed": false, + "pinned": true + }, + "order": 207, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 4940, + "dir": 3 + }, + { + "name": "clip", + "type": "CLIP", + "link": 3432, + "dir": 3 + } + ], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "links": [ + 1863 + ], + "slot_index": 0, + "shape": 3, + "dir": 4 + }, + { + "name": "CLIP", + "type": "CLIP", + "links": [], + "slot_index": 1, + "shape": 3, + "dir": 4 + } + ], + "title": "Lora Loader", + "properties": { + "Show Strengths": "Single Strength" + }, + "widgets_values": [ + null, + { + "type": "PowerLoraLoaderHeaderWidget" + }, + { + "on": false, + "lora": "FLUX\\Kodak_MC3_Style_F1D-000019.safetensors", + "strength": 0.8, + "strengthTwo": null + }, + { + "on": false, + "lora": "FLUX\\CrayonDrawing_v1.safetensors", + "strength": 1, + "strengthTwo": null + }, + { + "on": false, + "lora": "FLUX\\FLUX-dev-lora-add_details.safetensors", + "strength": 1, + "strengthTwo": null + }, + { + "on": false, + "lora": "FLUX\\CinematicStyleFlux_v1.safetensors", + "strength": 1, + "strengthTwo": null + }, + { + "on": false, + "lora": "FLUX\\olympusd450_lora.safetensors", + "strength": 1, + "strengthTwo": null + }, + null, + "" + ] + }, + { + "id": 1128, + "type": "DepthAnythingV2Preprocessor", + "pos": [ + 7334.07373046875, + -147.37660217285156 + ], + "size": [ + 310, + 82 + ], + "flags": {}, + "order": 399, + "mode": 4, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 1923 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 1867 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "DepthAnythingV2Preprocessor", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "depth_anything_v2_vitl.pth", + 512 + ] + }, + { + "id": 1129, + "type": "RemapImageRange", + "pos": [ + 7674.07373046875, + -147.37660217285156 + ], + "size": [ + 220, + 110 + ], + "flags": {}, + "order": 402, + "mode": 4, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 1867 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 1868, + 1871 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "RemapImageRange", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + -1, + 5, + true + ] + }, + { + "id": 1130, + "type": "ImageToMask", + "pos": [ + 7684.07373046875, + 2.623236656188965 + ], + "size": [ + 230, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 405, + "mode": 4, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 1868 + } + ], + "outputs": [ + { + "name": "MASK", + "type": "MASK", + "links": [ + 3723 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "ImageToMask", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "red" + ] + }, + { + "id": 1131, + "type": "PreviewImage", + "pos": [ + 7904.07373046875, + -157.37660217285156 + ], + "size": [ + 220, + 210 + ], + "flags": {}, + "order": 406, + "mode": 4, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 1871 + } + ], + "outputs": [], + "properties": { + "Node name for S&R": "PreviewImage", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 1134, + "type": "VAEDecode", + "pos": [ + 7504.07373046875, + -7.376744747161865 + ], + "size": [ + 140, + 50 + ], + "flags": { + "collapsed": true + }, + "order": 396, + "mode": 4, + "inputs": [ + { + "name": "samples", + "type": "LATENT", + "link": 2278 + }, + { + "name": "vae", + "type": "VAE", + "link": 1879 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 1923 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "VAEDecode", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 1262, + "type": "ImpactSchedulerAdapter", + "pos": [ + 4689.0615234375, + 4272.4921875 + ], + "size": [ + 260, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 190, + "mode": 0, + "inputs": [ + { + "name": "scheduler", + "type": "COMBO", + "link": 2055, + "widget": { + "name": "scheduler" + } + } + ], + "outputs": [ + { + "name": "scheduler", + "type": "COMBO", + "links": [ + 2313 + ], + "slot_index": 0, + "shape": 3 + } + ], + "title": "Adapter", + "properties": { + "Node name for S&R": "ImpactSchedulerAdapter", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "simple", + "None" + ] + }, + { + "id": 1278, + "type": "StepSlider", + "pos": [ + 480, + 740 + ], + "size": [ + 310, + 60 + ], + "flags": { + "collapsed": false, + "pinned": true + }, + "order": 132, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 2002 + ], + "slot_index": 0, + "shape": 3 + } + ], + "title": "Steps", + "properties": { + "Node name for S&R": "StepSlider", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 20 + ] + }, + { + "id": 1279, + "type": "GuidanceSlider", + "pos": [ + 480, + 840 + ], + "size": [ + 310, + 60 + ], + "flags": { + "pinned": true + }, + "order": 133, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "links": [ + 2001 + ], + "slot_index": 0, + "shape": 3 + } + ], + "title": "Guidance", + "properties": { + "Node name for S&R": "GuidanceSlider", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 2.5167946835645574 + ], + "tabContents": [ + { + "value": 2.5167946835645574 + }, + { + "value": 2.9933584474977253 + }, + { + "value": 30 + } + ], + "activeTab": 0 + }, + { + "id": 1285, + "type": "SomethingToString", + "pos": [ + 4117.0771484375, + 1266.7099609375 + ], + "size": [ + 210, + 82 + ], + "flags": { + "collapsed": true + }, + "order": 186, + "mode": 0, + "inputs": [ + { + "name": "input", + "type": "*", + "link": 2003 + } + ], + "outputs": [ + { + "name": "STRING", + "type": "STRING", + "links": [ + 2004 + ], + "slot_index": 0, + "shape": 3 + } + ], + "title": "To String", + "properties": { + "Node name for S&R": "SomethingToString", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "", + "" + ] + }, + { + "id": 1288, + "type": "SomethingToString", + "pos": [ + 4127.0771484375, + 1306.7099609375 + ], + "size": [ + 210, + 82 + ], + "flags": { + "collapsed": true + }, + "order": 187, + "mode": 0, + "inputs": [ + { + "name": "input", + "type": "*", + "link": 2006 + } + ], + "outputs": [ + { + "name": "STRING", + "type": "STRING", + "links": [ + 2007 + ], + "slot_index": 0, + "shape": 3 + } + ], + "title": "To String", + "properties": { + "Node name for S&R": "SomethingToString", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "", + "" + ] + }, + { + "id": 1293, + "type": "RepeatLatentBatch", + "pos": [ + 4760, + 1920 + ], + "size": [ + 210, + 54 + ], + "flags": { + "collapsed": true + }, + "order": 343, + "mode": 0, + "inputs": [ + { + "name": "samples", + "type": "LATENT", + "link": 4919 + }, + { + "name": "amount", + "type": "INT", + "link": 2018, + "widget": { + "name": "amount" + } + } + ], + "outputs": [ + { + "name": "LATENT", + "type": "LATENT", + "links": [ + 4920 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "RepeatLatentBatch", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 1 + ] + }, + { + "id": 1358, + "type": "BasicGuider", + "pos": [ + 7014.74609375, + 314.0147705078125 + ], + "size": [ + 240, + 50 + ], + "flags": { + "collapsed": true + }, + "order": 367, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 2087 + }, + { + "name": "conditioning", + "type": "CONDITIONING", + "link": 2088 + } + ], + "outputs": [ + { + "name": "GUIDER", + "type": "GUIDER", + "links": [ + 2089, + 2090 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "BasicGuider", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 1359, + "type": "Reroute", + "pos": [ + 6860, + 460 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 350, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5330 + } + ], + "outputs": [ + { + "name": "", + "type": "SIGMAS", + "links": [ + 2092 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 1387, + "type": "ImageUpscaleWithModel", + "pos": [ + 3921.8154296875, + 3298.913818359375 + ], + "size": [ + 200, + 70 + ], + "flags": { + "collapsed": true + }, + "order": 192, + "mode": 0, + "inputs": [ + { + "name": "upscale_model", + "type": "UPSCALE_MODEL", + "link": 2163 + }, + { + "name": "image", + "type": "IMAGE", + "link": 2165 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 2180 + ], + "slot_index": 0, + "shape": 3 + } + ], + "title": "Upscale", + "properties": { + "Node name for S&R": "ImageUpscaleWithModel", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 1389, + "type": "UltimateSDUpscaleNoUpscale", + "pos": [ + 5081.81689453125, + 3258.913818359375 + ], + "size": [ + 310, + 530 + ], + "flags": {}, + "order": 363, + "mode": 0, + "inputs": [ + { + "name": "upscaled_image", + "type": "IMAGE", + "link": 4668 + }, + { + "name": "model", + "type": "MODEL", + "link": 2169 + }, + { + "name": "positive", + "type": "CONDITIONING", + "link": 5369 + }, + { + "name": "negative", + "type": "CONDITIONING", + "link": 2171 + }, + { + "name": "vae", + "type": "VAE", + "link": 2172 + }, + { + "name": "seed", + "type": "INT", + "link": 2173, + "widget": { + "name": "seed" + } + }, + { + "name": "steps", + "type": "INT", + "link": 2175, + "widget": { + "name": "steps" + } + }, + { + "name": "scheduler", + "type": "COMBO", + "link": 2176, + "widget": { + "name": "scheduler" + } + }, + { + "name": "denoise", + "type": "FLOAT", + "link": 2174, + "widget": { + "name": "denoise" + } + }, + { + "name": "sampler_name", + "type": "COMBO", + "link": 2342, + "widget": { + "name": "sampler_name" + } + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 2177 + ], + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "UltimateSDUpscaleNoUpscale", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 863930340837887, + "randomize", + 20, + 1, + "euler", + "normal", + 0.2, + "Linear", + 1024, + 1024, + 20, + 20, + "None", + 1, + 20, + 20, + 20, + true, + false + ] + }, + { + "id": 1404, + "type": "RepeatImageBatch", + "pos": [ + 3909.0615234375, + 4042.49658203125 + ], + "size": [ + 210, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 194, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 2202 + }, + { + "name": "amount", + "type": "INT", + "link": 2212, + "widget": { + "name": "amount" + } + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 2209 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "RepeatImageBatch", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 2 + ] + }, + { + "id": 1405, + "type": "ListCounter //Inspire", + "pos": [ + 4629.0615234375, + 4152.4921875 + ], + "size": [ + 210, + 54 + ], + "flags": { + "collapsed": true + }, + "order": 321, + "mode": 0, + "inputs": [ + { + "name": "signal", + "type": "*", + "link": 2210 + }, + { + "name": "base_value", + "type": "INT", + "link": 2231, + "widget": { + "name": "base_value" + } + } + ], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 2243 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "ListCounter //Inspire", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 0 + ] + }, + { + "id": 1408, + "type": "ImageListToBatch+", + "pos": [ + 5709.0615234375, + 4052.4970703125 + ], + "size": [ + 184.8000030517578, + 30 + ], + "flags": { + "collapsed": true + }, + "order": 378, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 5633 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 2206 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "ImageListToBatch+", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 1411, + "type": "RebatchImages", + "pos": [ + 4409.0615234375, + 4042.49658203125 + ], + "size": [ + 270, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 271, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 2209 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 2210, + 2211 + ], + "slot_index": 0, + "shape": 6 + } + ], + "properties": { + "Node name for S&R": "RebatchImages", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 1 + ] + }, + { + "id": 1470, + "type": "Reroute (rgthree)", + "pos": [ + 7584.07373046875, + 32.6232795715332 + ], + "size": [ + 40, + 30 + ], + "flags": {}, + "order": 390, + "mode": 4, + "inputs": [ + { + "name": "", + "type": "*", + "link": 3722, + "dir": 2, + "has_old_label": true, + "label": " " + } + ], + "outputs": [ + { + "name": "denoised_output", + "type": "LATENT", + "links": [ + 2278 + ], + "slot_index": 0, + "dir": 1, + "has_old_label": true, + "label": " " + } + ], + "properties": { + "resizable": true, + "size": [ + 40, + 30 + ], + "connections_layout": [ + "Bottom", + "Top" + ] + } + }, + { + "id": 1500, + "type": "KSamplerSelect", + "pos": [ + 6040, + 650 + ], + "size": [ + 210, + 34 + ], + "flags": { + "collapsed": true + }, + "order": 195, + "mode": 0, + "inputs": [ + { + "name": "sampler_name", + "type": "COMBO", + "link": 2333, + "widget": { + "name": "sampler_name" + } + } + ], + "outputs": [ + { + "name": "SAMPLER", + "type": "SAMPLER", + "links": [ + 2334, + 2335 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "KSamplerSelect", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "euler" + ] + }, + { + "id": 1534, + "type": "UpscaleModelLoader", + "pos": [ + 1760, + 1420 + ], + "size": [ + 310, + 60 + ], + "flags": { + "pinned": true + }, + "order": 134, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "UPSCALE_MODEL", + "type": "UPSCALE_MODEL", + "links": [ + 2361 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "UpscaleModelLoader", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "4xNomos8kDAT.pth" + ] + }, + { + "id": 1624, + "type": "SomethingToString", + "pos": [ + 4127.0771484375, + 1386.7099609375 + ], + "size": [ + 210, + 82 + ], + "flags": { + "collapsed": true + }, + "order": 197, + "mode": 0, + "inputs": [ + { + "name": "input", + "type": "*", + "link": 2409 + } + ], + "outputs": [ + { + "name": "STRING", + "type": "STRING", + "links": [ + 2410 + ], + "slot_index": 0, + "shape": 3 + } + ], + "title": "To String", + "properties": { + "Node name for S&R": "SomethingToString", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "", + "" + ] + }, + { + "id": 1627, + "type": "Reroute (rgthree)", + "pos": [ + 7634.07373046875, + 32.6232795715332 + ], + "size": [ + 40, + 30 + ], + "flags": {}, + "order": 409, + "mode": 4, + "inputs": [ + { + "name": "", + "type": "*", + "link": 3723, + "dir": 1, + "has_old_label": true, + "label": " " + } + ], + "outputs": [ + { + "name": "MASK", + "type": "MASK", + "links": [ + 2412 + ], + "slot_index": 0, + "dir": 2, + "has_old_label": true, + "label": " " + } + ], + "properties": { + "resizable": true, + "size": [ + 40, + 30 + ], + "connections_layout": [ + "Top", + "Bottom" + ] + } + }, + { + "id": 1629, + "type": "MaxShiftSlider", + "pos": [ + 480, + 940 + ], + "size": [ + 310, + 60 + ], + "flags": { + "collapsed": false, + "pinned": true + }, + "order": 135, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "links": [ + 2418 + ], + "slot_index": 0, + "shape": 3 + } + ], + "title": "Max Shift", + "properties": { + "Node name for S&R": "MaxShiftSlider", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 1.1500000000000001 + ] + }, + { + "id": 1630, + "type": "Label (rgthree)", + "pos": [ + 770, + 100 + ], + "size": [ + 25, + 36 + ], + "flags": { + "allow_interaction": true + }, + "order": 136, + "mode": 0, + "inputs": [], + "outputs": [], + "title": "v 1.4", + "properties": { + "fontSize": 36, + "fontFamily": "\n", + "fontColor": "#ffffff", + "textAlign": "left", + "backgroundColor": "transparent", + "padding": 0, + "borderRadius": 0 + }, + "color": "#fff0", + "bgcolor": "#fff0" + }, + { + "id": 2205, + "type": "Label (rgthree)", + "pos": [ + 1950, + 100 + ], + "size": [ + 96.79166412353516, + 16 + ], + "flags": { + "allow_interaction": true + }, + "order": 137, + "mode": 0, + "inputs": [], + "outputs": [], + "title": "by WorldObserver", + "properties": { + "fontSize": 16, + "fontFamily": "\n", + "fontColor": "#ffffff", + "textAlign": "left", + "backgroundColor": "transparent", + "padding": 0, + "borderRadius": 0 + }, + "color": "#fff0", + "bgcolor": "#fff0" + }, + { + "id": 2211, + "type": "CLIPTextEncode", + "pos": [ + 3846.249755859375, + 429.36273193359375 + ], + "size": [ + 210, + 80 + ], + "flags": { + "collapsed": true + }, + "order": 344, + "mode": 0, + "inputs": [ + { + "name": "clip", + "type": "CLIP", + "link": 3509 + } + ], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [ + 3212 + ], + "slot_index": 0 + } + ], + "title": "Negative", + "properties": { + "Node name for S&R": "CLIPTextEncode", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "" + ] + }, + { + "id": 2218, + "type": "BatchSlider", + "pos": [ + 1760, + 1320 + ], + "size": [ + 310, + 60 + ], + "flags": { + "pinned": true + }, + "order": 138, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 3215 + ], + "slot_index": 0, + "shape": 3 + } + ], + "title": "Resolution Multipy", + "properties": { + "Node name for S&R": "BatchSlider", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 2 + ] + }, + { + "id": 2334, + "type": "Image Comparer (rgthree)", + "pos": [ + 840, + 150 + ], + "size": [ + 870, + 920 + ], + "flags": { + "collapsed": false, + "pinned": true + }, + "order": 198, + "mode": 0, + "inputs": [ + { + "name": "image_a", + "type": "IMAGE", + "link": 3426, + "dir": 3 + }, + { + "name": "image_b", + "type": "IMAGE", + "link": 3425, + "dir": 3 + } + ], + "outputs": [], + "title": "Img Compare", + "properties": { + "comparer_mode": "Slide" + }, + "widgets_values": [ + [ + { + "name": "A", + "selected": true, + "url": "/api/view?filename=rgthree.compare._temp_pbbah_00001_.png&type=temp&subfolder=&rand=0.7446024807073257" + }, + { + "name": "B", + "selected": true, + "url": "/api/view?filename=rgthree.compare._temp_pbbah_00002_.png&type=temp&subfolder=&rand=0.8518365145701537" + } + ] + ], + "color": "#222", + "bgcolor": "#000" + }, + { + "id": 2397, + "type": "ImageDisplay", + "pos": [ + 2050, + 90 + ], + "size": [ + 26.399999618530273, + 30 + ], + "flags": { + "collapsed": false + }, + "order": 139, + "mode": 0, + "inputs": [], + "outputs": [], + "title": "Unnamed", + "properties": { + "originalWidth": 44, + "originalHeight": 50, + "maintainAspectRatio": true, + "imageBase64": "iVBORw0KGgoAAAANSUhEUgAAACwAAAAyCAYAAAAnWDnqAAAACXBIWXMAAAsTAAALEwEAmpwYAAAGGmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgOS4xLWMwMDIgNzkuYjdjNjRjYywgMjAyNC8wNy8xNi0wNzo1OTo0MCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDI2LjEgKDIwMjQxMDE5Lm0uMjgxNSBhMjQ5ZDA0KSAgKFdpbmRvd3MpIiB4bXA6Q3JlYXRlRGF0ZT0iMjAyNC0wNC0xOVQxMToyMDo1NSsxMDowMCIgeG1wOk1vZGlmeURhdGU9IjIwMjQtMTAtMjNUMTk6MzM6MDArMTE6MDAiIHhtcDpNZXRhZGF0YURhdGU9IjIwMjQtMTAtMjNUMTk6MzM6MDArMTE6MDAiIGRjOmZvcm1hdD0iaW1hZ2UvcG5nIiBwaG90b3Nob3A6Q29sb3JNb2RlPSIzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjQyYjIxNGY1LTFkN2UtNzY0NC1hMzYyLWM2ZjE0YzA1NzE3YiIgeG1wTU06RG9jdW1lbnRJRD0iYWRvYmU6ZG9jaWQ6cGhvdG9zaG9wOjhiYTk0MTFkLTI2YjYtZDM0Ni1hZjFkLTVmZjdkZmNmMzhhMyIgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjUwMTM1MDM0LWQ2NWYtMjk0YS04YjMyLWY4ZDZiNjI0OGMzMiI+IDx4bXBNTTpIaXN0b3J5PiA8cmRmOlNlcT4gPHJkZjpsaSBzdEV2dDphY3Rpb249ImNyZWF0ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6NTAxMzUwMzQtZDY1Zi0yOTRhLThiMzItZjhkNmI2MjQ4YzMyIiBzdEV2dDp3aGVuPSIyMDI0LTA0LTE5VDExOjIwOjU1KzEwOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgMjYuMSAoMjAyNDEwMTkubS4yODE1IGEyNDlkMDQpICAoV2luZG93cykiLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjQyYjIxNGY1LTFkN2UtNzY0NC1hMzYyLWM2ZjE0YzA1NzE3YiIgc3RFdnQ6d2hlbj0iMjAyNC0xMC0yM1QxOTozMzowMCsxMTowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIDI2LjEgKDIwMjQxMDE5Lm0uMjgxNSBhMjQ5ZDA0KSAgKFdpbmRvd3MpIiBzdEV2dDpjaGFuZ2VkPSIvIi8+IDwvcmRmOlNlcT4gPC94bXBNTTpIaXN0b3J5PiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pg8rrwEAABT4SURBVGjendlpjCXXddjx/721v1dv37v7dfdMz/Tswxnui0RSC9eIogxFlhyQUSDFSSBZMBBESmDICWzFieNYCQgYChzHhuXYUOQYpijJokTRJDXkiOTs+/Ss3T3dPb2+fatXaz6MYYTmNmIBv4+FOlV16p5zT4nxSoUPeihSMru0xD/99NPf+OUnnvq6FJ36aCWBpqsgBI3WkJXVgeU4ofqNZ/79/TOX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", + "lastWidth": 26.399999618530273, + "lastHeight": 30 + }, + "color": "#00000000", + "bgcolor": "#00000000", + "shape": 1, + "lastWidth": 26.399999618530273, + "lastHeight": 30, + "imageBase64": "iVBORw0KGgoAAAANSUhEUgAAACwAAAAyCAYAAAAnWDnqAAAACXBIWXMAAAsTAAALEwEAmpwYAAAGGmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgOS4xLWMwMDIgNzkuYjdjNjRjYywgMjAyNC8wNy8xNi0wNzo1OTo0MCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDI2LjEgKDIwMjQxMDE5Lm0uMjgxNSBhMjQ5ZDA0KSAgKFdpbmRvd3MpIiB4bXA6Q3JlYXRlRGF0ZT0iMjAyNC0wNC0xOVQxMToyMDo1NSsxMDowMCIgeG1wOk1vZGlmeURhdGU9IjIwMjQtMTAtMjNUMTk6MzM6MDArMTE6MDAiIHhtcDpNZXRhZGF0YURhdGU9IjIwMjQtMTAtMjNUMTk6MzM6MDArMTE6MDAiIGRjOmZvcm1hdD0iaW1hZ2UvcG5nIiBwaG90b3Nob3A6Q29sb3JNb2RlPSIzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjQyYjIxNGY1LTFkN2UtNzY0NC1hMzYyLWM2ZjE0YzA1NzE3YiIgeG1wTU06RG9jdW1lbnRJRD0iYWRvYmU6ZG9jaWQ6cGhvdG9zaG9wOjhiYTk0MTFkLTI2YjYtZDM0Ni1hZjFkLTVmZjdkZmNmMzhhMyIgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjUwMTM1MDM0LWQ2NWYtMjk0YS04YjMyLWY4ZDZiNjI0OGMzMiI+IDx4bXBNTTpIaXN0b3J5PiA8cmRmOlNlcT4gPHJkZjpsaSBzdEV2dDphY3Rpb249ImNyZWF0ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6NTAxMzUwMzQtZDY1Zi0yOTRhLThiMzItZjhkNmI2MjQ4YzMyIiBzdEV2dDp3aGVuPSIyMDI0LTA0LTE5VDExOjIwOjU1KzEwOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgMjYuMSAoMjAyNDEwMTkubS4yODE1IGEyNDlkMDQpICAoV2luZG93cykiLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjQyYjIxNGY1LTFkN2UtNzY0NC1hMzYyLWM2ZjE0YzA1NzE3YiIgc3RFdnQ6d2hlbj0iMjAyNC0xMC0yM1QxOTozMzowMCsxMTowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIDI2LjEgKDIwMjQxMDE5Lm0uMjgxNSBhMjQ5ZDA0KSAgKFdpbmRvd3MpIiBzdEV2dDpjaGFuZ2VkPSIvIi8+IDwvcmRmOlNlcT4gPC94bXBNTTpIaXN0b3J5PiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pg8rrwEAABT4SURBVGjendlpjCXXddjx/721v1dv37v7dfdMz/Tswxnui0RSC9eIogxFlhyQUSDFSSBZMBBESmDICWzFieNYCQgYChzHhuXYUOQYpijJokTRJDXkiOTs+/Ss3T3dPb2+fatXaz6MYYTmNmIBv4+FOlV16p5zT4nxSoUPeihSMru0xD/99NPf+OUnnvq6FJ36aCWBpqsgBI3WkJXVgeU4ofqNZ/79/TOX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" + }, + { + "id": 2427, + "type": "ResolutionPicker", + "pos": [ + 480, + 1330 + ], + "size": [ + 310, + 60 + ], + "flags": { + "pinned": true + }, + "order": 140, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "resolution", + "type": "COMBO", + "links": [ + 3447 + ], + "slot_index": 0 + } + ], + "title": "Latent Resolution", + "properties": { + "Node name for S&R": "ResolutionPicker", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "1024x1024 (1.0)" + ] + }, + { + "id": 2435, + "type": "SamplerParameterPacker", + "pos": [ + 480, + 620 + ], + "size": [ + 310, + 82 + ], + "flags": { + "pinned": true + }, + "order": 141, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "sampler_params", + "type": "SAMPLER_PARAMS", + "links": [ + 3460 + ], + "slot_index": 0 + } + ], + "title": "Sampler Parameters", + "properties": { + "Node name for S&R": "SamplerParameterPacker", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "deis", + "beta" + ], + "tabContents": [ + { + "sampler": "deis", + "scheduler": "beta" + }, + { + "sampler": "ddim", + "scheduler": "simple" + }, + { + "sampler": "dpmpp_sde", + "scheduler": "karras" + } + ], + "activeTab": 0 + }, + { + "id": 2436, + "type": "SamplerParameterUnpacker", + "pos": [ + -3049.044921875, + 306.6080322265625 + ], + "size": [ + 370, + 90 + ], + "flags": { + "collapsed": true + }, + "order": 232, + "mode": 0, + "inputs": [ + { + "name": "sampler_params", + "type": "SAMPLER_PARAMS", + "link": 3461 + } + ], + "outputs": [ + { + "name": "sampler", + "type": "COMBO", + "links": [ + 3463 + ], + "slot_index": 0 + }, + { + "name": "sampler_name", + "type": "STRING", + "links": [ + 3465 + ], + "slot_index": 1 + }, + { + "name": "scheduler", + "type": "COMBO", + "links": [ + 3464 + ], + "slot_index": 2 + }, + { + "name": "scheduler_name", + "type": "STRING", + "links": [ + 3466 + ], + "slot_index": 3 + } + ], + "properties": { + "Node name for S&R": "SamplerParameterUnpacker", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 2476, + "type": "Reroute", + "pos": [ + 3696.249755859375, + 399.36273193359375 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 313, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5319 + } + ], + "outputs": [ + { + "name": "", + "type": "CLIP", + "links": [ + 3509, + 5325 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 2600, + "type": "Reroute", + "pos": [ + 7944.74609375, + 484.0147705078125 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 379, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 3717 + } + ], + "outputs": [ + { + "name": "", + "type": "SIGMAS", + "links": [ + 3718 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 3055, + "type": "ImagePadForOutpaintMasked", + "pos": [ + 1759.6929931640625, + 999.8751220703125 + ], + "size": [ + 310, + 250 + ], + "flags": { + "pinned": true + }, + "order": 362, + "mode": 4, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 4606 + }, + { + "name": "mask", + "type": "MASK", + "link": null, + "shape": 7 + }, + { + "name": "feathering", + "type": "INT", + "link": 4977, + "widget": { + "name": "feathering" + } + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 4607 + ], + "slot_index": 0 + }, + { + "name": "MASK", + "type": "MASK", + "links": [ + 4608 + ] + } + ], + "title": "Pad", + "properties": { + "Node name for S&R": "ImagePadForOutpaintMasked", + "enableTabs": true, + "tabWidth": 50, + "tabXOffset": 230, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 0, + 0, + 0, + 256, + 120 + ] + }, + { + "id": 3127, + "type": "Note", + "pos": [ + 7590, + -320 + ], + "size": [ + 210, + 80 + ], + "flags": {}, + "order": 142, + "mode": 0, + "inputs": [], + "outputs": [], + "properties": {}, + "widgets_values": [ + "optional mask for details.\nuse remap range to guide where you want more detail." + ], + "color": "#432", + "bgcolor": "#653" + }, + { + "id": 3132, + "type": "RepeatImageBatch", + "pos": [ + 4547.443359375, + 3295.350341796875 + ], + "size": [ + 210, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 348, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 4667 + }, + { + "name": "amount", + "type": "INT", + "link": 4666, + "widget": { + "name": "amount" + } + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 4668 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "RepeatImageBatch", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 2 + ] + }, + { + "id": 3135, + "type": "Note", + "pos": [ + -4210, + 370 + ], + "size": [ + 360, + 60 + ], + "flags": {}, + "order": 143, + "mode": 0, + "inputs": [], + "outputs": [], + "properties": {}, + "widgets_values": [ + "here you can modify the final image that is sent to the preview node. these nodes just pass it though" + ], + "color": "#432", + "bgcolor": "#653" + }, + { + "id": 3158, + "type": "Bookmark (rgthree)", + "pos": [ + 370, + 40 + ], + "size": [ + 210, + 62 + ], + "flags": { + "collapsed": true + }, + "order": 144, + "mode": 0, + "inputs": [], + "outputs": [], + "title": "🔖", + "properties": {}, + "widgets_values": [ + "1", + 1 + ] + }, + { + "id": 3159, + "type": "Bookmark (rgthree)", + "pos": [ + 2290, + -240 + ], + "size": [ + 210, + 62 + ], + "flags": { + "collapsed": true + }, + "order": 145, + "mode": 0, + "inputs": [], + "outputs": [], + "title": "🔖", + "properties": {}, + "widgets_values": [ + "2", + 1 + ] + }, + { + "id": 3164, + "type": "OutputGet", + "pos": [ + 480, + 190 + ], + "size": [ + 310, + 70 + ], + "flags": { + "collapsed": false, + "pinned": true + }, + "order": 146, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 4941 + ], + "slot_index": 0 + } + ], + "title": "Output - txt2img", + "properties": { + "showOutputText": true + }, + "widgets_values": [ + "Output - txt2img" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3169, + "type": "SomethingToString", + "pos": [ + 4107.07861328125, + 1136.7099609375 + ], + "size": [ + 210, + 82 + ], + "flags": { + "collapsed": true + }, + "order": 183, + "mode": 0, + "inputs": [ + { + "name": "input", + "type": "*", + "link": 4689 + } + ], + "outputs": [ + { + "name": "STRING", + "type": "STRING", + "links": [ + 4690 + ], + "slot_index": 0, + "shape": 3 + } + ], + "title": "To String", + "properties": { + "Node name for S&R": "SomethingToString", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "", + "" + ] + }, + { + "id": 3170, + "type": "SomethingToString", + "pos": [ + 4117.0771484375, + 1086.7099609375 + ], + "size": [ + 210, + 82 + ], + "flags": { + "collapsed": true + }, + "order": 185, + "mode": 0, + "inputs": [ + { + "name": "input", + "type": "*", + "link": 4691 + } + ], + "outputs": [ + { + "name": "STRING", + "type": "STRING", + "links": [ + 4692 + ], + "slot_index": 0, + "shape": 3 + } + ], + "title": "To String", + "properties": { + "Node name for S&R": "SomethingToString", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "", + "" + ] + }, + { + "id": 3178, + "type": "SimpleMath+", + "pos": [ + 4083.55810546875, + 3403.4365234375 + ], + "size": [ + 320, + 100 + ], + "flags": { + "collapsed": true + }, + "order": 269, + "mode": 0, + "inputs": [ + { + "name": "a", + "type": "*", + "link": 4716, + "shape": 7 + }, + { + "name": "b", + "type": "*", + "link": 4714, + "shape": 7 + }, + { + "name": "c", + "type": "*", + "link": null, + "shape": 7 + } + ], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 4718 + ], + "slot_index": 0 + }, + { + "name": "FLOAT", + "type": "FLOAT", + "links": null + } + ], + "properties": { + "Node name for S&R": "SimpleMath+", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "a*b" + ] + }, + { + "id": 3182, + "type": "SimpleMath+", + "pos": [ + 4083.55810546875, + 3613.435791015625 + ], + "size": [ + 320, + 100 + ], + "flags": { + "collapsed": true + }, + "order": 270, + "mode": 0, + "inputs": [ + { + "name": "a", + "type": "*", + "link": 4717, + "shape": 7 + }, + { + "name": "b", + "type": "*", + "link": 4715, + "shape": 7 + }, + { + "name": "c", + "type": "*", + "link": null, + "shape": 7 + } + ], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 4719 + ], + "slot_index": 0 + }, + { + "name": "FLOAT", + "type": "FLOAT", + "links": null + } + ], + "properties": { + "Node name for S&R": "SimpleMath+", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "a*b" + ] + }, + { + "id": 3210, + "type": "PlaySound|pysssss", + "pos": [ + -3690, + 270 + ], + "size": [ + 310, + 110 + ], + "flags": {}, + "order": 317, + "mode": 0, + "inputs": [ + { + "name": "any", + "type": "*", + "link": 4779 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null, + "slot_index": 0, + "shape": 6 + } + ], + "properties": { + "Node name for S&R": "PlaySound|pysssss", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "always", + 0.5, + "notify.mp3" + ] + }, + { + "id": 3211, + "type": "Note", + "pos": [ + -3690, + 440 + ], + "size": [ + 320, + 60 + ], + "flags": {}, + "order": 147, + "mode": 0, + "inputs": [], + "outputs": [], + "properties": {}, + "widgets_values": [ + "enable/disable the sound notification" + ], + "color": "#432", + "bgcolor": "#653" + }, + { + "id": 3212, + "type": "SimpleTextTruncate", + "pos": [ + -5018.82275390625, + 322.3243103027344 + ], + "size": [ + 230, + 70 + ], + "flags": {}, + "order": 196, + "mode": 4, + "inputs": [ + { + "name": "text", + "type": "STRING", + "link": 4780, + "widget": { + "name": "text" + } + } + ], + "outputs": [ + { + "name": "TEXT", + "type": "STRING", + "links": [ + 4781 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "SimpleTextTruncate", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "", + 12 + ] + }, + { + "id": 3213, + "type": "CLIPTextEncode", + "pos": [ + 3850, + 2740 + ], + "size": [ + 430, + 180 + ], + "flags": { + "collapsed": true + }, + "order": 202, + "mode": 0, + "inputs": [ + { + "name": "clip", + "type": "CLIP", + "link": 4782 + } + ], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [ + 4784 + ], + "slot_index": 0 + } + ], + "title": "CLIP Text Encode (Negative Prompt)", + "properties": { + "Node name for S&R": "CLIPTextEncode", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 3214, + "type": "InpaintModelConditioning", + "pos": [ + 4220, + 2620 + ], + "size": [ + 300, + 140 + ], + "flags": {}, + "order": 280, + "mode": 0, + "inputs": [ + { + "name": "positive", + "type": "CONDITIONING", + "link": 5039 + }, + { + "name": "negative", + "type": "CONDITIONING", + "link": 4784 + }, + { + "name": "vae", + "type": "VAE", + "link": 4785 + }, + { + "name": "pixels", + "type": "IMAGE", + "link": 4786 + }, + { + "name": "mask", + "type": "MASK", + "link": 4787 + } + ], + "outputs": [ + { + "name": "positive", + "type": "CONDITIONING", + "links": [ + 4790 + ], + "slot_index": 0 + }, + { + "name": "negative", + "type": "CONDITIONING", + "links": [ + 4982 + ], + "slot_index": 1 + }, + { + "name": "latent", + "type": "LATENT", + "links": [ + 4981 + ], + "slot_index": 2 + } + ], + "properties": { + "Node name for S&R": "InpaintModelConditioning", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + false + ] + }, + { + "id": 3215, + "type": "DifferentialDiffusion", + "pos": [ + 4750, + 2570 + ], + "size": [ + 184.8000030517578, + 30 + ], + "flags": { + "collapsed": true + }, + "order": 201, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 4788 + } + ], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "links": [ + 4789 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "DifferentialDiffusion", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 3216, + "type": "KSampler", + "pos": [ + 4970, + 2580 + ], + "size": [ + 280, + 222 + ], + "flags": {}, + "order": 353, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 4789 + }, + { + "name": "positive", + "type": "CONDITIONING", + "link": 4790 + }, + { + "name": "negative", + "type": "CONDITIONING", + "link": 4982 + }, + { + "name": "latent_image", + "type": "LATENT", + "link": 4983 + }, + { + "name": "seed", + "type": "INT", + "link": 4793, + "widget": { + "name": "seed" + } + }, + { + "name": "steps", + "type": "INT", + "link": 4794, + "widget": { + "name": "steps" + } + }, + { + "name": "scheduler", + "type": "COMBO", + "link": 4801, + "widget": { + "name": "scheduler" + } + }, + { + "name": "sampler_name", + "type": "COMBO", + "link": 4803, + "widget": { + "name": "sampler_name" + } + } + ], + "outputs": [ + { + "name": "LATENT", + "type": "LATENT", + "links": [ + 4795 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "KSampler", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 1064603812517424, + "randomize", + 20, + 1, + "euler", + "normal", + 1 + ] + }, + { + "id": 3219, + "type": "VAEDecode", + "pos": [ + 5450, + 2480 + ], + "size": [ + 170, + 50 + ], + "flags": { + "collapsed": true + }, + "order": 368, + "mode": 0, + "inputs": [ + { + "name": "samples", + "type": "LATENT", + "link": 4795 + }, + { + "name": "vae", + "type": "VAE", + "link": 4796 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 4807 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "VAEDecode", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 3240, + "type": "ImageCompositeMasked", + "pos": [ + 5650, + 2690 + ], + "size": [ + 290, + 150 + ], + "flags": {}, + "order": 382, + "mode": 0, + "inputs": [ + { + "name": "destination", + "type": "IMAGE", + "link": 4818 + }, + { + "name": "source", + "type": "IMAGE", + "link": 4807 + }, + { + "name": "mask", + "type": "MASK", + "link": 4973, + "shape": 7 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 4819 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "ImageCompositeMasked", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 0, + 0, + false + ] + }, + { + "id": 3241, + "type": "Reroute", + "pos": [ + 4070, + 2490 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 204, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 4809 + } + ], + "outputs": [ + { + "name": "", + "type": "MASK", + "links": [ + 4815 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 3242, + "type": "Reroute", + "pos": [ + 4060, + 2410 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 203, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 4810 + } + ], + "outputs": [ + { + "name": "", + "type": "IMAGE", + "links": [ + 4814 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 3244, + "type": "Reroute", + "pos": [ + 5170, + 2490 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 282, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 4815 + } + ], + "outputs": [ + { + "name": "", + "type": "MASK", + "links": [ + 4974 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 3245, + "type": "Reroute", + "pos": [ + 5150, + 2420 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 281, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 4814 + } + ], + "outputs": [ + { + "name": "", + "type": "IMAGE", + "links": [ + 4818 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 3246, + "type": "CLIPTextEncode", + "pos": [ + 3940, + 1980 + ], + "size": [ + 430, + 180 + ], + "flags": { + "collapsed": true + }, + "order": 205, + "mode": 0, + "inputs": [ + { + "name": "clip", + "type": "CLIP", + "link": 4827 + } + ], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [ + 4829 + ], + "slot_index": 0 + } + ], + "title": "CLIP Text Encode (Negative Prompt)", + "properties": { + "Node name for S&R": "CLIPTextEncode", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 3247, + "type": "InpaintModelConditioning", + "pos": [ + 4380, + 1790 + ], + "size": [ + 300, + 140 + ], + "flags": {}, + "order": 308, + "mode": 0, + "inputs": [ + { + "name": "positive", + "type": "CONDITIONING", + "link": 4992 + }, + { + "name": "negative", + "type": "CONDITIONING", + "link": 4829 + }, + { + "name": "vae", + "type": "VAE", + "link": 4913 + }, + { + "name": "pixels", + "type": "IMAGE", + "link": 4914 + }, + { + "name": "mask", + "type": "MASK", + "link": 4882 + } + ], + "outputs": [ + { + "name": "positive", + "type": "CONDITIONING", + "links": [ + 4835 + ], + "slot_index": 0 + }, + { + "name": "negative", + "type": "CONDITIONING", + "links": [ + 4836 + ], + "slot_index": 1 + }, + { + "name": "latent", + "type": "LATENT", + "links": [ + 4919 + ], + "slot_index": 2 + } + ], + "properties": { + "Node name for S&R": "InpaintModelConditioning", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + true + ] + }, + { + "id": 3248, + "type": "DifferentialDiffusion", + "pos": [ + 4950, + 1770 + ], + "size": [ + 184.8000030517578, + 30 + ], + "flags": { + "collapsed": true + }, + "order": 208, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 4945 + } + ], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "links": [ + 4834 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "DifferentialDiffusion", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 3249, + "type": "KSampler", + "pos": [ + 5180, + 1780 + ], + "size": [ + 260, + 220 + ], + "flags": {}, + "order": 359, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 4834 + }, + { + "name": "positive", + "type": "CONDITIONING", + "link": 4835 + }, + { + "name": "negative", + "type": "CONDITIONING", + "link": 4836 + }, + { + "name": "latent_image", + "type": "LATENT", + "link": 4920 + }, + { + "name": "seed", + "type": "INT", + "link": 4917, + "widget": { + "name": "seed" + } + }, + { + "name": "steps", + "type": "INT", + "link": 4839, + "widget": { + "name": "steps" + } + }, + { + "name": "scheduler", + "type": "COMBO", + "link": 4852, + "widget": { + "name": "scheduler" + } + }, + { + "name": "sampler_name", + "type": "COMBO", + "link": 4853, + "widget": { + "name": "sampler_name" + } + }, + { + "name": "denoise", + "type": "FLOAT", + "link": 4921, + "widget": { + "name": "denoise" + } + } + ], + "outputs": [ + { + "name": "LATENT", + "type": "LATENT", + "links": [ + 4916 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "KSampler", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 908244948717747, + "randomize", + 20, + 1, + "euler", + "normal", + 1 + ] + }, + { + "id": 3263, + "type": "ImageCompositeMasked", + "pos": [ + 6030, + 1780 + ], + "size": [ + 270, + 150 + ], + "flags": {}, + "order": 387, + "mode": 0, + "inputs": [ + { + "name": "destination", + "type": "IMAGE", + "link": 4845 + }, + { + "name": "source", + "type": "IMAGE", + "link": 4896 + }, + { + "name": "mask", + "type": "MASK", + "link": 5591, + "shape": 7 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 4854 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "ImageCompositeMasked", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 0, + 0, + false + ] + }, + { + "id": 3266, + "type": "Reroute", + "pos": [ + 5670, + 1680 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 279, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 4850 + } + ], + "outputs": [ + { + "name": "", + "type": "MASK", + "links": [ + 5590 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 3267, + "type": "Reroute", + "pos": [ + 5920, + 1640 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 283, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 4851 + } + ], + "outputs": [ + { + "name": "", + "type": "IMAGE", + "links": [ + 4845 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 3279, + "type": "VAEDecode", + "pos": [ + 5560, + 1820 + ], + "size": [ + 170, + 50 + ], + "flags": { + "collapsed": true + }, + "order": 373, + "mode": 0, + "inputs": [ + { + "name": "samples", + "type": "LATENT", + "link": 4916 + }, + { + "name": "vae", + "type": "VAE", + "link": 4904 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 4896 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "VAEDecode", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 3284, + "type": "Reroute", + "pos": [ + 4180, + 1580 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 231, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 4912 + } + ], + "outputs": [ + { + "name": "", + "type": "VAE", + "links": [ + 4911, + 4913 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 3323, + "type": "ImpactDilateMask", + "pos": [ + 5360, + 2730 + ], + "size": [ + 210, + 60 + ], + "flags": { + "collapsed": false + }, + "order": 328, + "mode": 0, + "inputs": [ + { + "name": "mask", + "type": "MASK", + "link": 4974 + }, + { + "name": "dilation", + "type": "INT", + "link": 4979, + "widget": { + "name": "dilation" + } + } + ], + "outputs": [ + { + "name": "MASK", + "type": "MASK", + "links": [ + 4973 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "ImpactDilateMask", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 120 + ] + }, + { + "id": 3332, + "type": "RepeatLatentBatch", + "pos": [ + 4670, + 2740 + ], + "size": [ + 210, + 54 + ], + "flags": { + "collapsed": true + }, + "order": 327, + "mode": 0, + "inputs": [ + { + "name": "samples", + "type": "LATENT", + "link": 4981 + }, + { + "name": "amount", + "type": "INT", + "link": 4980, + "widget": { + "name": "amount" + } + } + ], + "outputs": [ + { + "name": "LATENT", + "type": "LATENT", + "links": [ + 4983 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "RepeatLatentBatch", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 1 + ] + }, + { + "id": 3343, + "type": "InstructPixToPixConditioning", + "pos": [ + 4830, + 4820 + ], + "size": [ + 240, + 90 + ], + "flags": { + "collapsed": false + }, + "order": 329, + "mode": 0, + "inputs": [ + { + "name": "positive", + "type": "CONDITIONING", + "link": 5015 + }, + { + "name": "negative", + "type": "CONDITIONING", + "link": 4995 + }, + { + "name": "vae", + "type": "VAE", + "link": 4996 + }, + { + "name": "pixels", + "type": "IMAGE", + "link": 5110 + } + ], + "outputs": [ + { + "name": "positive", + "type": "CONDITIONING", + "links": [ + 5004 + ], + "slot_index": 0 + }, + { + "name": "negative", + "type": "CONDITIONING", + "links": [ + 5005 + ], + "slot_index": 1 + }, + { + "name": "latent", + "type": "LATENT", + "links": [ + 4998 + ], + "slot_index": 2 + } + ], + "properties": { + "Node name for S&R": "InstructPixToPixConditioning", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 3345, + "type": "RepeatLatentBatch", + "pos": [ + 5166.32666015625, + 4894.1142578125 + ], + "size": [ + 230, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 354, + "mode": 0, + "inputs": [ + { + "name": "samples", + "type": "LATENT", + "link": 4998 + }, + { + "name": "amount", + "type": "INT", + "link": 4999, + "widget": { + "name": "amount" + } + } + ], + "outputs": [ + { + "name": "LATENT", + "type": "LATENT", + "links": [ + 5006 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "RepeatLatentBatch", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 1 + ] + }, + { + "id": 3346, + "type": "VAEDecode", + "pos": [ + 5746.32666015625, + 4704.11474609375 + ], + "size": [ + 170, + 50 + ], + "flags": { + "collapsed": true + }, + "order": 383, + "mode": 0, + "inputs": [ + { + "name": "samples", + "type": "LATENT", + "link": 5000 + }, + { + "name": "vae", + "type": "VAE", + "link": 5001 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 5002 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "VAEDecode", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 3352, + "type": "KSampler", + "pos": [ + 5480, + 4810 + ], + "size": [ + 250, + 222 + ], + "flags": {}, + "order": 369, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 5003 + }, + { + "name": "positive", + "type": "CONDITIONING", + "link": 5004 + }, + { + "name": "negative", + "type": "CONDITIONING", + "link": 5005 + }, + { + "name": "latent_image", + "type": "LATENT", + "link": 5006 + }, + { + "name": "seed", + "type": "INT", + "link": 5007, + "widget": { + "name": "seed" + } + }, + { + "name": "steps", + "type": "INT", + "link": 5008, + "widget": { + "name": "steps" + } + }, + { + "name": "scheduler", + "type": "COMBO", + "link": 5020, + "widget": { + "name": "scheduler" + } + }, + { + "name": "sampler_name", + "type": "COMBO", + "link": 5021, + "widget": { + "name": "sampler_name" + } + } + ], + "outputs": [ + { + "name": "LATENT", + "type": "LATENT", + "links": [ + 5000 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "KSampler", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 409119934324505, + "randomize", + 20, + 1, + "euler", + "normal", + 1 + ] + }, + { + "id": 3360, + "type": "CLIPTextEncode", + "pos": [ + 4540, + 4830 + ], + "size": [ + 400, + 200 + ], + "flags": { + "collapsed": true + }, + "order": 211, + "mode": 0, + "inputs": [ + { + "name": "clip", + "type": "CLIP", + "link": 5012 + } + ], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [ + 4995 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "CLIPTextEncode", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 3372, + "type": "DepthAnythingV2Preprocessor", + "pos": [ + 4026.32470703125, + 4794.1142578125 + ], + "size": [ + 310, + 82 + ], + "flags": {}, + "order": 209, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 5023 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 5109 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "DepthAnythingV2Preprocessor", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "depth_anything_v2_vitl.pth", + 1024 + ] + }, + { + "id": 3375, + "type": "CLIPVisionLoader", + "pos": [ + 2997.352294921875, + 1027.170166015625 + ], + "size": [ + 320, + 60 + ], + "flags": {}, + "order": 148, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "CLIP_VISION", + "type": "CLIP_VISION", + "links": [ + 5034 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "CLIPVisionLoader", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "sigclip_vision_patch14_384.safetensors" + ] + }, + { + "id": 3383, + "type": "Reroute", + "pos": [ + 5170, + 210 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 184, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5046 + } + ], + "outputs": [ + { + "name": "", + "type": "MODEL", + "links": [ + 5045 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 3386, + "type": "Reroute", + "pos": [ + 4963.34765625, + 6211.7451171875 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 212, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5051 + } + ], + "outputs": [ + { + "name": "", + "type": "CLIP_VISION", + "links": [ + 5054, + 5702 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 3388, + "type": "Reroute", + "pos": [ + 4953.34765625, + 6161.7451171875 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 213, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5055 + } + ], + "outputs": [ + { + "name": "", + "type": "STYLE_MODEL", + "links": [ + 5058, + 5700 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 3390, + "type": "Reroute", + "pos": [ + 5070, + 6500 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 305, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5060 + } + ], + "outputs": [ + { + "name": "", + "type": "CONDITIONING", + "links": [ + 5644, + 5699 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 3408, + "type": "GetImageSize+", + "pos": [ + 4012.0634765625, + 5082.7001953125 + ], + "size": [ + 210, + 70 + ], + "flags": { + "collapsed": true + }, + "order": 210, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 5106 + } + ], + "outputs": [ + { + "name": "width", + "type": "INT", + "links": [ + 5107 + ], + "slot_index": 0 + }, + { + "name": "height", + "type": "INT", + "links": [ + 5108 + ], + "slot_index": 1 + }, + { + "name": "count", + "type": "INT", + "links": null + } + ], + "properties": { + "Node name for S&R": "GetImageSize+", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 3409, + "type": "ImageResize+", + "pos": [ + 4410.46533203125, + 5019.71240234375 + ], + "size": [ + 300, + 170 + ], + "flags": { + "collapsed": false + }, + "order": 285, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 5109 + }, + { + "name": "width", + "type": "INT", + "link": 5107, + "widget": { + "name": "width" + } + }, + { + "name": "height", + "type": "INT", + "link": 5108, + "widget": { + "name": "height" + } + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 5110, + 5478, + 5616 + ], + "slot_index": 0 + }, + { + "name": "width", + "type": "INT", + "links": null + }, + { + "name": "height", + "type": "INT", + "links": null + } + ], + "properties": { + "Node name for S&R": "ImageResize+", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 512, + 512, + "lanczos", + "keep proportion", + "always", + 0 + ] + }, + { + "id": 3450, + "type": "InstructPixToPixConditioning", + "pos": [ + 4110.0888671875, + 5573.4619140625 + ], + "size": [ + 240, + 90 + ], + "flags": { + "collapsed": false + }, + "order": 293, + "mode": 0, + "inputs": [ + { + "name": "positive", + "type": "CONDITIONING", + "link": 5166 + }, + { + "name": "negative", + "type": "CONDITIONING", + "link": 5167 + }, + { + "name": "vae", + "type": "VAE", + "link": 5168 + }, + { + "name": "pixels", + "type": "IMAGE", + "link": 5452 + } + ], + "outputs": [ + { + "name": "positive", + "type": "CONDITIONING", + "links": [ + 5176 + ], + "slot_index": 0 + }, + { + "name": "negative", + "type": "CONDITIONING", + "links": [ + 5177 + ], + "slot_index": 1 + }, + { + "name": "latent", + "type": "LATENT", + "links": [ + 5170 + ], + "slot_index": 2 + } + ], + "properties": { + "Node name for S&R": "InstructPixToPixConditioning", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 3452, + "type": "RepeatLatentBatch", + "pos": [ + 4380.0888671875, + 5753.4619140625 + ], + "size": [ + 230, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 339, + "mode": 0, + "inputs": [ + { + "name": "samples", + "type": "LATENT", + "link": 5170 + }, + { + "name": "amount", + "type": "INT", + "link": 5171, + "widget": { + "name": "amount" + } + } + ], + "outputs": [ + { + "name": "LATENT", + "type": "LATENT", + "links": [ + 5178 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "RepeatLatentBatch", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 1 + ] + }, + { + "id": 3453, + "type": "VAEDecode", + "pos": [ + 4990.0888671875, + 5483.4619140625 + ], + "size": [ + 170, + 50 + ], + "flags": { + "collapsed": true + }, + "order": 370, + "mode": 0, + "inputs": [ + { + "name": "samples", + "type": "LATENT", + "link": 5172 + }, + { + "name": "vae", + "type": "VAE", + "link": 5173 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 5174 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "VAEDecode", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 3459, + "type": "KSampler", + "pos": [ + 4740.0888671875, + 5563.4619140625 + ], + "size": [ + 220, + 222 + ], + "flags": {}, + "order": 356, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 5175 + }, + { + "name": "positive", + "type": "CONDITIONING", + "link": 5176 + }, + { + "name": "negative", + "type": "CONDITIONING", + "link": 5177 + }, + { + "name": "latent_image", + "type": "LATENT", + "link": 5178 + }, + { + "name": "seed", + "type": "INT", + "link": 5179, + "widget": { + "name": "seed" + } + }, + { + "name": "steps", + "type": "INT", + "link": 5180, + "widget": { + "name": "steps" + } + }, + { + "name": "scheduler", + "type": "COMBO", + "link": 5211, + "widget": { + "name": "scheduler" + } + }, + { + "name": "sampler_name", + "type": "COMBO", + "link": 5210, + "widget": { + "name": "sampler_name" + } + } + ], + "outputs": [ + { + "name": "LATENT", + "type": "LATENT", + "links": [ + 5172 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "KSampler", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 403083535337148, + "randomize", + 20, + 1, + "euler", + "normal", + 1 + ] + }, + { + "id": 3462, + "type": "CLIPTextEncode", + "pos": [ + 3830.090087890625, + 5683.4619140625 + ], + "size": [ + 400, + 200 + ], + "flags": { + "collapsed": true + }, + "order": 217, + "mode": 0, + "inputs": [ + { + "name": "clip", + "type": "CLIP", + "link": 5181 + } + ], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [ + 5167 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "CLIPTextEncode", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 3515, + "type": "Reroute", + "pos": [ + 5737.9697265625, + 263.603271484375 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 230, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5384 + } + ], + "outputs": [ + { + "name": "", + "type": "CONDITIONING", + "links": [ + 5237, + 5238 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 3548, + "type": "Reroute", + "pos": [ + 4896.2509765625, + 159.36273193359375 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 275, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5327 + } + ], + "outputs": [ + { + "name": "", + "type": "LATENT", + "links": [ + 5328 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 3549, + "type": "Reroute", + "pos": [ + 6050, + 160 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 322, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5328 + } + ], + "outputs": [ + { + "name": "", + "type": "LATENT", + "links": [ + 5329 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 3551, + "type": "MaskToSEGS", + "pos": [ + 4239.0615234375, + 4072.495361328125 + ], + "size": [ + 260, + 154 + ], + "flags": { + "collapsed": true + }, + "order": 294, + "mode": 0, + "inputs": [ + { + "name": "mask", + "type": "MASK", + "link": 5594 + } + ], + "outputs": [ + { + "name": "SEGS", + "type": "SEGS", + "links": [ + 5335 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "MaskToSEGS", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + false, + 1, + false, + 10, + false + ] + }, + { + "id": 3569, + "type": "SimpleMathFloat+", + "pos": [ + 5140, + 6290 + ], + "size": [ + 320, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 149, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "links": [ + 5346 + ], + "slot_index": 0 + } + ], + "title": "Float", + "properties": { + "Node name for S&R": "SimpleMathFloat+", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 0 + ] + }, + { + "id": 3571, + "type": "SimpleComparison+", + "pos": [ + 6520, + 6340 + ], + "size": [ + 210, + 80 + ], + "flags": { + "collapsed": true + }, + "order": 336, + "mode": 0, + "inputs": [ + { + "name": "a", + "type": "*", + "link": 5368 + }, + { + "name": "b", + "type": "*", + "link": 5350 + } + ], + "outputs": [ + { + "name": "BOOLEAN", + "type": "BOOLEAN", + "links": [ + 5656 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "SimpleComparison+", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "!=" + ] + }, + { + "id": 3572, + "type": "SimpleMathFloat+", + "pos": [ + 6400, + 6290 + ], + "size": [ + 320, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 150, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "links": [ + 5350 + ], + "slot_index": 0 + } + ], + "title": "Float", + "properties": { + "Node name for S&R": "SimpleMathFloat+", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 0 + ] + }, + { + "id": 3577, + "type": "SimpleComparison+", + "pos": [ + 7740, + 6370 + ], + "size": [ + 210, + 80 + ], + "flags": { + "collapsed": true + }, + "order": 337, + "mode": 0, + "inputs": [ + { + "name": "a", + "type": "*", + "link": 5363 + }, + { + "name": "b", + "type": "*", + "link": 5359 + } + ], + "outputs": [ + { + "name": "BOOLEAN", + "type": "BOOLEAN", + "links": [ + 5651 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "SimpleComparison+", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "!=" + ] + }, + { + "id": 3578, + "type": "SimpleMathFloat+", + "pos": [ + 7600, + 6310 + ], + "size": [ + 320, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 151, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "links": [ + 5359 + ], + "slot_index": 0 + } + ], + "title": "Float", + "properties": { + "Node name for S&R": "SimpleMathFloat+", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 0 + ] + }, + { + "id": 3585, + "type": "ReActorFaceSwap", + "pos": [ + 3860.952880859375, + 7133.40185546875 + ], + "size": [ + 330, + 360 + ], + "flags": {}, + "order": 219, + "mode": 0, + "inputs": [ + { + "name": "input_image", + "type": "IMAGE", + "link": 5382 + }, + { + "name": "source_image", + "type": "IMAGE", + "link": 5383, + "shape": 7 + }, + { + "name": "face_model", + "type": "FACE_MODEL", + "link": null, + "shape": 7 + }, + { + "name": "face_boost", + "type": "FACE_BOOST", + "link": null, + "shape": 7 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 5376 + ], + "slot_index": 0 + }, + { + "name": "FACE_MODEL", + "type": "FACE_MODEL", + "links": null + } + ], + "properties": { + "Node name for S&R": "ReActorFaceSwap", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + true, + "inswapper_128.onnx", + "retinaface_resnet50", + "codeformer-v0.1.0.pth", + 0.5, + 0.5, + "no", + "no", + "0", + "0", + 1 + ] + }, + { + "id": 3603, + "type": "ImageBatchMultiple+", + "pos": [ + -3090, + 1440 + ], + "size": [ + 320, + 140 + ], + "flags": {}, + "order": 393, + "mode": 0, + "inputs": [ + { + "name": "image_1", + "type": "IMAGE", + "link": 5568 + }, + { + "name": "image_2", + "type": "IMAGE", + "link": 5569, + "shape": 7 + }, + { + "name": "image_3", + "type": "IMAGE", + "link": 5571, + "shape": 7 + }, + { + "name": "image_4", + "type": "IMAGE", + "link": 5585, + "shape": 7 + }, + { + "name": "image_5", + "type": "IMAGE", + "link": 5578, + "shape": 7 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 5519 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "ImageBatchMultiple+", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "lanczos" + ] + }, + { + "id": 3606, + "type": "MaskToImage", + "pos": [ + -4868.875, + 1100.03125 + ], + "size": [ + 260, + 30 + ], + "flags": { + "collapsed": true + }, + "order": 304, + "mode": 0, + "inputs": [ + { + "name": "mask", + "type": "MASK", + "link": 5587 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 5415 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "MaskToImage", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 3618, + "type": "ImageResize+", + "pos": [ + -4618.87451171875, + 2060.03125 + ], + "size": [ + 270, + 220 + ], + "flags": { + "collapsed": false + }, + "order": 225, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 5465 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 5581 + ], + "slot_index": 0 + }, + { + "name": "width", + "type": "INT", + "links": null + }, + { + "name": "height", + "type": "INT", + "links": null + } + ], + "properties": { + "Node name for S&R": "ImageResize+", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 512, + 512, + "lanczos", + "pad", + "always", + 0 + ] + }, + { + "id": 3620, + "type": "ImageResize+", + "pos": [ + -4618.87451171875, + 750.03125 + ], + "size": [ + 270, + 220 + ], + "flags": { + "collapsed": false + }, + "order": 226, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 5468 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 5557, + 5595 + ], + "slot_index": 0 + }, + { + "name": "width", + "type": "INT", + "links": null + }, + { + "name": "height", + "type": "INT", + "links": null + } + ], + "properties": { + "Node name for S&R": "ImageResize+", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 512, + 512, + "lanczos", + "pad", + "always", + 0 + ] + }, + { + "id": 3622, + "type": "ImageResize+", + "pos": [ + -4618.87451171875, + 1060 + ], + "size": [ + 270, + 220 + ], + "flags": { + "collapsed": false + }, + "order": 341, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 5415 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 5598 + ], + "slot_index": 0 + }, + { + "name": "width", + "type": "INT", + "links": null + }, + { + "name": "height", + "type": "INT", + "links": null + } + ], + "properties": { + "Node name for S&R": "ImageResize+", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 512, + 512, + "lanczos", + "pad", + "always", + 0 + ] + }, + { + "id": 3624, + "type": "ImageResize+", + "pos": [ + -4618.87451171875, + 1690.03125 + ], + "size": [ + 270, + 220 + ], + "flags": { + "collapsed": false + }, + "order": 224, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 5463 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 5584 + ], + "slot_index": 0 + }, + { + "name": "width", + "type": "INT", + "links": null + }, + { + "name": "height", + "type": "INT", + "links": null + } + ], + "properties": { + "Node name for S&R": "ImageResize+", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 512, + 512, + "lanczos", + "pad", + "always", + 0 + ] + }, + { + "id": 3626, + "type": "ImageResize+", + "pos": [ + -4618.87451171875, + 1380.03125 + ], + "size": [ + 280, + 220 + ], + "flags": { + "collapsed": false + }, + "order": 223, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 5464 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 5570 + ], + "slot_index": 0 + }, + { + "name": "width", + "type": "INT", + "links": null + }, + { + "name": "height", + "type": "INT", + "links": null + } + ], + "properties": { + "Node name for S&R": "ImageResize+", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 512, + 512, + "lanczos", + "pad", + "always", + 0 + ] + }, + { + "id": 3633, + "type": "SimpleComparison+", + "pos": [ + -2810, + 2470 + ], + "size": [ + 210, + 80 + ], + "flags": { + "collapsed": false + }, + "order": 244, + "mode": 0, + "inputs": [ + { + "name": "a", + "type": "*", + "link": 5623 + }, + { + "name": "b", + "type": "*", + "link": 5461 + } + ], + "outputs": [ + { + "name": "BOOLEAN", + "type": "BOOLEAN", + "links": [ + 5520 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "SimpleComparison+", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "==" + ] + }, + { + "id": 3645, + "type": "SimpleComparison+", + "pos": [ + -2830, + 2810 + ], + "size": [ + 210, + 80 + ], + "flags": { + "collapsed": false + }, + "order": 245, + "mode": 0, + "inputs": [ + { + "name": "a", + "type": "*", + "link": 5624 + }, + { + "name": "b", + "type": "*", + "link": 5462 + } + ], + "outputs": [ + { + "name": "BOOLEAN", + "type": "BOOLEAN", + "links": [ + 5523 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "SimpleComparison+", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "==" + ] + }, + { + "id": 3661, + "type": "ImageResize+", + "pos": [ + -4618.87451171875, + 2420.03125 + ], + "size": [ + 280, + 220 + ], + "flags": { + "collapsed": false + }, + "order": 220, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 5453 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 5583 + ], + "slot_index": 0 + }, + { + "name": "width", + "type": "INT", + "links": null + }, + { + "name": "height", + "type": "INT", + "links": null + } + ], + "properties": { + "Node name for S&R": "ImageResize+", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 512, + 512, + "lanczos", + "pad", + "always", + 0 + ] + }, + { + "id": 3662, + "type": "ImageResize+", + "pos": [ + -4618.87451171875, + 2770.03125 + ], + "size": [ + 280, + 220 + ], + "flags": { + "collapsed": false + }, + "order": 222, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 5454 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 5572 + ], + "slot_index": 0 + }, + { + "name": "width", + "type": "INT", + "links": null + }, + { + "name": "height", + "type": "INT", + "links": null + } + ], + "properties": { + "Node name for S&R": "ImageResize+", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 512, + 512, + "lanczos", + "pad", + "always", + 0 + ] + }, + { + "id": 3665, + "type": "StringConstant", + "pos": [ + -3218.8740234375, + 2500.03125 + ], + "size": [ + 210, + 60 + ], + "flags": {}, + "order": 152, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "STRING", + "type": "STRING", + "links": [ + 5461 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "StringConstant", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "canny" + ] + }, + { + "id": 3666, + "type": "StringConstant", + "pos": [ + -3210, + 2830 + ], + "size": [ + 210, + 60 + ], + "flags": {}, + "order": 153, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "STRING", + "type": "STRING", + "links": [ + 5462 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "StringConstant", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "depth" + ] + }, + { + "id": 3679, + "type": "GetImageSize+", + "pos": [ + 1878.7926025390625, + 834.1670532226562 + ], + "size": [ + 210, + 70 + ], + "flags": { + "collapsed": true + }, + "order": 216, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 5482 + } + ], + "outputs": [ + { + "name": "width", + "type": "INT", + "links": [ + 5479 + ], + "slot_index": 0 + }, + { + "name": "height", + "type": "INT", + "links": [ + 5480 + ], + "slot_index": 1 + }, + { + "name": "count", + "type": "INT", + "links": null + } + ], + "properties": { + "Node name for S&R": "GetImageSize+", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 3680, + "type": "ImageResize+", + "pos": [ + 1900, + 809.1294555664062 + ], + "size": [ + 300, + 170 + ], + "flags": { + "collapsed": true + }, + "order": 292, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 5483 + }, + { + "name": "width", + "type": "INT", + "link": 5479, + "widget": { + "name": "width" + } + }, + { + "name": "height", + "type": "INT", + "link": 5480, + "widget": { + "name": "height" + } + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 5484 + ], + "slot_index": 0 + }, + { + "name": "width", + "type": "INT", + "links": null + }, + { + "name": "height", + "type": "INT", + "links": null + } + ], + "properties": { + "Node name for S&R": "ImageResize+", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 512, + 512, + "lanczos", + "keep proportion", + "always", + 0 + ] + }, + { + "id": 3692, + "type": "ImageBatchBoolean", + "pos": [ + -2490, + 2400 + ], + "size": [ + 270, + 80 + ], + "flags": {}, + "order": 397, + "mode": 0, + "inputs": [ + { + "name": "image1", + "type": "IMAGE", + "link": 5519 + }, + { + "name": "image2", + "type": "IMAGE", + "link": 5579 + }, + { + "name": "batch_enabled", + "type": "BOOLEAN", + "link": 5520, + "widget": { + "name": "batch_enabled" + } + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 5522 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "ImageBatchBoolean", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + true + ] + }, + { + "id": 3693, + "type": "ImageBatchBoolean", + "pos": [ + -2130, + 2740 + ], + "size": [ + 250, + 74 + ], + "flags": {}, + "order": 400, + "mode": 0, + "inputs": [ + { + "name": "image1", + "type": "IMAGE", + "link": 5522 + }, + { + "name": "image2", + "type": "IMAGE", + "link": 5580 + }, + { + "name": "batch_enabled", + "type": "BOOLEAN", + "link": 5523, + "widget": { + "name": "batch_enabled" + } + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 5525 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "ImageBatchBoolean", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + true + ] + }, + { + "id": 3711, + "type": "DrawTextConfig", + "pos": [ + -4200, + 1680 + ], + "size": [ + 270, + 350 + ], + "flags": { + "collapsed": false + }, + "order": 154, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "TEXT_STYLE", + "type": "TEXT_STYLE", + "links": [ + 5554, + 5558, + 5573, + 5574, + 5575, + 5576, + 5577 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "DrawTextConfig", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "Inter_24pt-Medium.ttf", + 34, + "#FFFFFFBF", + "#00000080", + 8, + 0, + 0, + "#000000", + "center", + "bottom", + 0, + -15, + "ltr" + ] + }, + { + "id": 3712, + "type": "ConfigurableDrawText", + "pos": [ + -3690, + 750 + ], + "size": [ + 330, + 100 + ], + "flags": {}, + "order": 303, + "mode": 0, + "inputs": [ + { + "name": "TEXT_STYLE", + "type": "TEXT_STYLE", + "link": 5554 + }, + { + "name": "IMAGE", + "type": "IMAGE", + "link": 5557 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 5568 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "ConfigurableDrawText", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "Img Load" + ] + }, + { + "id": 3713, + "type": "ConfigurableDrawText", + "pos": [ + -3690, + 1080 + ], + "size": [ + 330, + 100 + ], + "flags": {}, + "order": 385, + "mode": 0, + "inputs": [ + { + "name": "TEXT_STYLE", + "type": "TEXT_STYLE", + "link": 5558 + }, + { + "name": "IMAGE", + "type": "IMAGE", + "link": 5597 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 5569 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "ConfigurableDrawText", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "Img Mask" + ] + }, + { + "id": 3715, + "type": "ConfigurableDrawText", + "pos": [ + -3690, + 1410 + ], + "size": [ + 320, + 100 + ], + "flags": {}, + "order": 300, + "mode": 0, + "inputs": [ + { + "name": "TEXT_STYLE", + "type": "TEXT_STYLE", + "link": 5573 + }, + { + "name": "IMAGE", + "type": "IMAGE", + "link": 5570 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 5571 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "ConfigurableDrawText", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "IP1" + ] + }, + { + "id": 3716, + "type": "ConfigurableDrawText", + "pos": [ + -3690, + 1750 + ], + "size": [ + 320, + 100 + ], + "flags": {}, + "order": 301, + "mode": 0, + "inputs": [ + { + "name": "TEXT_STYLE", + "type": "TEXT_STYLE", + "link": 5574 + }, + { + "name": "IMAGE", + "type": "IMAGE", + "link": 5584 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 5585 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "ConfigurableDrawText", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "IP2" + ] + }, + { + "id": 3717, + "type": "ConfigurableDrawText", + "pos": [ + -3690, + 2090 + ], + "size": [ + 320, + 100 + ], + "flags": {}, + "order": 302, + "mode": 0, + "inputs": [ + { + "name": "TEXT_STYLE", + "type": "TEXT_STYLE", + "link": 5575 + }, + { + "name": "IMAGE", + "type": "IMAGE", + "link": 5581 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 5578 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "ConfigurableDrawText", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "IP3 / Face" + ] + }, + { + "id": 3718, + "type": "ConfigurableDrawText", + "pos": [ + -3690, + 2430 + ], + "size": [ + 330, + 100 + ], + "flags": {}, + "order": 297, + "mode": 0, + "inputs": [ + { + "name": "TEXT_STYLE", + "type": "TEXT_STYLE", + "link": 5576 + }, + { + "name": "IMAGE", + "type": "IMAGE", + "link": 5583 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 5579 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "ConfigurableDrawText", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "Canny" + ] + }, + { + "id": 3719, + "type": "ConfigurableDrawText", + "pos": [ + -3690, + 2750 + ], + "size": [ + 340, + 100 + ], + "flags": {}, + "order": 299, + "mode": 0, + "inputs": [ + { + "name": "TEXT_STYLE", + "type": "TEXT_STYLE", + "link": 5577 + }, + { + "name": "IMAGE", + "type": "IMAGE", + "link": 5572 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 5580 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "ConfigurableDrawText", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "Depth" + ] + }, + { + "id": 3720, + "type": "MaskBlur+", + "pos": [ + -5028.875, + 1100.03125 + ], + "size": [ + 320, + 80 + ], + "flags": { + "collapsed": true + }, + "order": 228, + "mode": 0, + "inputs": [ + { + "name": "mask", + "type": "MASK", + "link": 5588 + }, + { + "name": "amount", + "type": "INT", + "link": 5586, + "widget": { + "name": "amount" + } + } + ], + "outputs": [ + { + "name": "MASK", + "type": "MASK", + "links": [ + 5587 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "MaskBlur+", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 6, + "gpu" + ] + }, + { + "id": 3722, + "type": "MaskBlur+", + "pos": [ + 5750, + 1880 + ], + "size": [ + 260, + 80 + ], + "flags": { + "collapsed": false + }, + "order": 326, + "mode": 0, + "inputs": [ + { + "name": "mask", + "type": "MASK", + "link": 5590 + }, + { + "name": "amount", + "type": "INT", + "link": 5589, + "widget": { + "name": "amount" + } + } + ], + "outputs": [ + { + "name": "MASK", + "type": "MASK", + "links": [ + 5591 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "MaskBlur+", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 6, + "gpu" + ] + }, + { + "id": 3723, + "type": "MaskBlur+", + "pos": [ + 3939.0615234375, + 4172.4921875 + ], + "size": [ + 320, + 80 + ], + "flags": { + "collapsed": true + }, + "order": 218, + "mode": 0, + "inputs": [ + { + "name": "mask", + "type": "MASK", + "link": 5592 + }, + { + "name": "amount", + "type": "INT", + "link": 5593, + "widget": { + "name": "amount" + } + } + ], + "outputs": [ + { + "name": "MASK", + "type": "MASK", + "links": [ + 5594, + 5634 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "MaskBlur+", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 6, + "gpu" + ] + }, + { + "id": 3756, + "type": "OutputGetString", + "pos": [ + -3140, + 2670 + ], + "size": [ + 260, + 34 + ], + "flags": { + "collapsed": true + }, + "order": 155, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "STRING", + "type": "STRING", + "links": [ + 5623, + 5624 + ], + "slot_index": 0 + } + ], + "title": "GetString_Output - txt2img", + "properties": { + "Node name for S&R": "OutputGetString", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "Output - txt2img" + ] + }, + { + "id": 3773, + "type": "ImageCompositeMasked", + "pos": [ + 5379.0615234375, + 4012.4970703125 + ], + "size": [ + 270, + 150 + ], + "flags": {}, + "order": 364, + "mode": 0, + "inputs": [ + { + "name": "destination", + "type": "IMAGE", + "link": 5639 + }, + { + "name": "source", + "type": "IMAGE", + "link": 5630 + }, + { + "name": "mask", + "type": "MASK", + "link": 5636, + "shape": 7 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 5633 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "ImageCompositeMasked", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 0, + 0, + false + ] + }, + { + "id": 3778, + "type": "Reroute", + "pos": [ + 4299.0615234375, + 3942.49755859375 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 295, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5634 + } + ], + "outputs": [ + { + "name": "", + "type": "MASK", + "links": [ + 5635 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 3779, + "type": "Reroute", + "pos": [ + 5229.0615234375, + 3942.49755859375 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 340, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5635 + } + ], + "outputs": [ + { + "name": "", + "type": "MASK", + "links": [ + 5636 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 3780, + "type": "Reroute", + "pos": [ + 4299.0615234375, + 3902.49755859375 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 189, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5638 + } + ], + "outputs": [ + { + "name": "", + "type": "IMAGE", + "links": [ + 5637 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 3781, + "type": "Reroute", + "pos": [ + 5229.0615234375, + 3902.49755859375 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 267, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5637 + } + ], + "outputs": [ + { + "name": "", + "type": "IMAGE", + "links": [ + 5639 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 3785, + "type": "SimpleCondition+", + "pos": [ + 7990, + 6390 + ], + "size": [ + 240, + 70 + ], + "flags": { + "collapsed": false + }, + "order": 404, + "mode": 0, + "inputs": [ + { + "name": "evaluate", + "type": "*", + "link": 5651 + }, + { + "name": "on_true", + "type": "*", + "link": 5725 + }, + { + "name": "on_false", + "type": "*", + "link": 5743, + "shape": 7 + } + ], + "outputs": [ + { + "name": "result", + "type": "*", + "links": [ + 5658 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "SimpleCondition+", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 3790, + "type": "Bookmark (rgthree)", + "pos": [ + 2940, + 6760 + ], + "size": [ + 210, + 62 + ], + "flags": { + "collapsed": true + }, + "order": 156, + "mode": 0, + "inputs": [], + "outputs": [], + "title": "🔖", + "properties": {}, + "widgets_values": [ + "3", + 1 + ] + }, + { + "id": 3809, + "type": "StyleModelApplyAdvanced", + "pos": [ + 5200, + 6620 + ], + "size": [ + 300, + 100 + ], + "flags": {}, + "order": 342, + "mode": 0, + "inputs": [ + { + "name": "conditioning", + "type": "CONDITIONING", + "link": 5699 + }, + { + "name": "style_model", + "type": "STYLE_MODEL", + "link": 5700 + }, + { + "name": "clip_vision_output", + "type": "CLIP_VISION_OUTPUT", + "link": 5701 + }, + { + "name": "strength", + "type": "FLOAT", + "link": 5720, + "widget": { + "name": "strength" + } + } + ], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [ + 5719 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "StyleModelApplyAdvanced", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 0.864 + ] + }, + { + "id": 3582, + "type": "Reroute", + "pos": [ + 5970, + 6310 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 290, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5366, + "widget": { + "name": "value" + } + } + ], + "outputs": [ + { + "name": "", + "type": "FLOAT", + "links": [ + 5368, + 5727 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 3396, + "type": "Reroute", + "pos": [ + 7400, + 6170 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 334, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5072 + } + ], + "outputs": [ + { + "name": "", + "type": "STYLE_MODEL", + "links": [ + 5733 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 3783, + "type": "SimpleCondition+", + "pos": [ + 5540, + 6460 + ], + "size": [ + 240, + 70 + ], + "flags": { + "collapsed": false + }, + "order": 358, + "mode": 0, + "inputs": [ + { + "name": "evaluate", + "type": "*", + "link": 5642 + }, + { + "name": "on_true", + "type": "*", + "link": 5719 + }, + { + "name": "on_false", + "type": "*", + "link": 5644, + "shape": 7 + } + ], + "outputs": [ + { + "name": "result", + "type": "*", + "links": [ + 5738 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "SimpleCondition+", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 3387, + "type": "Reroute", + "pos": [ + 5780, + 6210 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 286, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5054 + } + ], + "outputs": [ + { + "name": "", + "type": "CLIP_VISION", + "links": [ + 5071, + 5731 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 3385, + "type": "Reroute", + "pos": [ + 6110, + 6170 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 288, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5058 + } + ], + "outputs": [ + { + "name": "", + "type": "STYLE_MODEL", + "links": [ + 5072, + 5732 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 3397, + "type": "Reroute", + "pos": [ + 7090, + 6220 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 332, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5071 + } + ], + "outputs": [ + { + "name": "", + "type": "CLIP_VISION", + "links": [ + 5734 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 3407, + "type": "Reroute", + "pos": [ + 7360, + 6340 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 291, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5362, + "widget": { + "name": "value" + } + } + ], + "outputs": [ + { + "name": "", + "type": "FLOAT", + "links": [ + 5363, + 5728 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 3811, + "type": "StyleModelApplyAdvanced", + "pos": [ + 6380, + 6620 + ], + "size": [ + 300, + 100 + ], + "flags": {}, + "order": 386, + "mode": 0, + "inputs": [ + { + "name": "conditioning", + "type": "CONDITIONING", + "link": 5740 + }, + { + "name": "style_model", + "type": "STYLE_MODEL", + "link": 5732 + }, + { + "name": "clip_vision_output", + "type": "CLIP_VISION_OUTPUT", + "link": 5722 + }, + { + "name": "strength", + "type": "FLOAT", + "link": 5727, + "widget": { + "name": "strength" + } + } + ], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [ + 5726 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "StyleModelApplyAdvanced", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 0.864 + ] + }, + { + "id": 3813, + "type": "StyleModelApplyAdvanced", + "pos": [ + 7690, + 6620 + ], + "size": [ + 300, + 100 + ], + "flags": {}, + "order": 401, + "mode": 0, + "inputs": [ + { + "name": "conditioning", + "type": "CONDITIONING", + "link": 5742 + }, + { + "name": "style_model", + "type": "STYLE_MODEL", + "link": 5733 + }, + { + "name": "clip_vision_output", + "type": "CLIP_VISION_OUTPUT", + "link": 5724 + }, + { + "name": "strength", + "type": "FLOAT", + "link": 5728, + "widget": { + "name": "strength" + } + } + ], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [ + 5725 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "StyleModelApplyAdvanced", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 0.864 + ] + }, + { + "id": 3816, + "type": "Reroute", + "pos": [ + 6240, + 6470 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 372, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5738 + } + ], + "outputs": [ + { + "name": "", + "type": "*", + "links": [ + 5739, + 5740 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 3784, + "type": "SimpleCondition+", + "pos": [ + 6780, + 6430 + ], + "size": [ + 240, + 70 + ], + "flags": { + "collapsed": false + }, + "order": 394, + "mode": 0, + "inputs": [ + { + "name": "evaluate", + "type": "*", + "link": 5656 + }, + { + "name": "on_true", + "type": "*", + "link": 5726 + }, + { + "name": "on_false", + "type": "*", + "link": 5739, + "shape": 7 + } + ], + "outputs": [ + { + "name": "result", + "type": "*", + "links": [ + 5741 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "SimpleCondition+", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 3817, + "type": "Reroute", + "pos": [ + 7510, + 6430 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 398, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5741 + } + ], + "outputs": [ + { + "name": "", + "type": "*", + "links": [ + 5742, + 5743 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 3814, + "type": "CLIPVisionEncode", + "pos": [ + 7360, + 6660 + ], + "size": [ + 253.60000610351562, + 78 + ], + "flags": { + "collapsed": false + }, + "order": 355, + "mode": 0, + "inputs": [ + { + "name": "clip_vision", + "type": "CLIP_VISION", + "link": 5734 + }, + { + "name": "image", + "type": "IMAGE", + "link": 5729 + } + ], + "outputs": [ + { + "name": "CLIP_VISION_OUTPUT", + "type": "CLIP_VISION_OUTPUT", + "links": [ + 5724 + ] + } + ], + "properties": { + "Node name for S&R": "CLIPVisionEncode", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "center" + ] + }, + { + "id": 3812, + "type": "CLIPVisionEncode", + "pos": [ + 6030, + 6650 + ], + "size": [ + 253.60000610351562, + 78 + ], + "flags": { + "collapsed": false + }, + "order": 333, + "mode": 0, + "inputs": [ + { + "name": "clip_vision", + "type": "CLIP_VISION", + "link": 5731 + }, + { + "name": "image", + "type": "IMAGE", + "link": 5730 + } + ], + "outputs": [ + { + "name": "CLIP_VISION_OUTPUT", + "type": "CLIP_VISION_OUTPUT", + "links": [ + 5722 + ] + } + ], + "properties": { + "Node name for S&R": "CLIPVisionEncode", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "center" + ] + }, + { + "id": 3810, + "type": "CLIPVisionEncode", + "pos": [ + 4880, + 6660 + ], + "size": [ + 253.60000610351562, + 78 + ], + "flags": { + "collapsed": false + }, + "order": 287, + "mode": 0, + "inputs": [ + { + "name": "clip_vision", + "type": "CLIP_VISION", + "link": 5702 + }, + { + "name": "image", + "type": "IMAGE", + "link": 5703 + } + ], + "outputs": [ + { + "name": "CLIP_VISION_OUTPUT", + "type": "CLIP_VISION_OUTPUT", + "links": [ + 5701 + ] + } + ], + "properties": { + "Node name for S&R": "CLIPVisionEncode", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "center" + ] + }, + { + "id": 3556, + "type": "CondPassThrough", + "pos": [ + 8350, + 6420 + ], + "size": [ + 220, + 50 + ], + "flags": { + "collapsed": true + }, + "order": 408, + "mode": 0, + "inputs": [ + { + "name": "positive", + "type": "CONDITIONING", + "link": 5658, + "shape": 7 + }, + { + "name": "negative", + "type": "CONDITIONING", + "link": null, + "shape": 7 + } + ], + "outputs": [ + { + "name": "positive", + "type": "CONDITIONING", + "links": [ + 5337 + ], + "slot_index": 0 + }, + { + "name": "negative", + "type": "CONDITIONING", + "links": null + } + ], + "properties": { + "Node name for S&R": "CondPassThrough", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 777, + "type": "CLIPTextEncodeFlux", + "pos": [ + 3840, + 6510 + ], + "size": [ + 210, + 110 + ], + "flags": { + "collapsed": false + }, + "order": 229, + "mode": 0, + "inputs": [ + { + "name": "clip", + "type": "CLIP", + "link": 5019 + }, + { + "name": "clip_l", + "type": "STRING", + "link": 1443, + "widget": { + "name": "clip_l" + } + }, + { + "name": "t5xxl", + "type": "STRING", + "link": 1442, + "widget": { + "name": "t5xxl" + } + }, + { + "name": "guidance", + "type": "FLOAT", + "link": 4993, + "widget": { + "name": "guidance" + } + } + ], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [ + 5060 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "CLIPTextEncodeFlux", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "close up, marketing material, professional lighting, advertising", + "A photograph featuring a 34-year-old rbw1990 with blonde hair and beard wearing a red polo shirt and green apron, working at Bunnings as a cashier", + 30 + ] + }, + { + "id": 1573, + "type": "Fast Groups Bypasser (rgthree)", + "pos": [ + 480, + 1430 + ], + "size": [ + 310, + 82 + ], + "flags": { + "collapsed": false, + "pinned": true + }, + "order": 157, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "OPT_CONNECTION", + "type": "*", + "links": null + } + ], + "title": "Options", + "properties": { + "matchColors": "", + "matchTitle": "Save|Play", + "showNav": true, + "sort": "position", + "customSortAlphabet": "", + "toggleRestriction": "default" + } + }, + { + "id": 3128, + "type": "Note", + "pos": [ + 3000, + 10 + ], + "size": [ + 310, + 70 + ], + "flags": {}, + "order": 158, + "mode": 0, + "inputs": [], + "outputs": [], + "properties": {}, + "widgets_values": [ + "setup your models here.\nfeel free to replace with GGUF models" + ], + "color": "#432", + "bgcolor": "#653" + }, + { + "id": 3362, + "type": "UNETLoader", + "pos": [ + 3000, + 800 + ], + "size": [ + 320, + 82 + ], + "flags": { + "collapsed": false + }, + "order": 159, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "links": [ + 5014 + ], + "slot_index": 0, + "shape": 3 + } + ], + "title": "Load Flux Canny Model", + "properties": { + "Node name for S&R": "UNETLoader", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "flux1-canny-dev.safetensors", + "default" + ] + }, + { + "id": 3374, + "type": "StyleModelLoader", + "pos": [ + 3000, + 920 + ], + "size": [ + 320, + 60 + ], + "flags": {}, + "order": 160, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "STYLE_MODEL", + "type": "STYLE_MODEL", + "links": [ + 5033 + ], + "slot_index": 0 + } + ], + "title": "Load Redux Model", + "properties": { + "Node name for S&R": "StyleModelLoader", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "flux1-redux-dev.safetensors" + ] + }, + { + "id": 3361, + "type": "UNETLoader", + "pos": [ + 3000, + 680 + ], + "size": [ + 320, + 82 + ], + "flags": { + "collapsed": false + }, + "order": 161, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "links": [ + 5013 + ], + "slot_index": 0, + "shape": 3 + } + ], + "title": "Load Flux Depth Model", + "properties": { + "Node name for S&R": "UNETLoader", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "flux1-depth-dev.safetensors", + "default" + ] + }, + { + "id": 3234, + "type": "UNETLoader", + "pos": [ + 3000, + 550 + ], + "size": [ + 320, + 82 + ], + "flags": { + "collapsed": false + }, + "order": 162, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "links": [ + 4805 + ], + "slot_index": 0, + "shape": 3 + } + ], + "title": "Load Flux Fill Model", + "properties": { + "Node name for S&R": "UNETLoader", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "flux1-fill-dev.safetensors", + "default" + ] + }, + { + "id": 2469, + "type": "UNETLoader", + "pos": [ + 3000, + 170 + ], + "size": [ + 320, + 82 + ], + "flags": {}, + "order": 163, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "links": [ + 3494 + ], + "slot_index": 0, + "shape": 3 + } + ], + "title": "Load Flux Model", + "properties": { + "Node name for S&R": "UNETLoader", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "flux1-dev.sft", + "fp8_e4m3fn" + ] + }, + { + "id": 2464, + "type": "TextVersions", + "pos": [ + 840, + 1130 + ], + "size": [ + 870, + 150 + ], + "flags": { + "collapsed": false, + "pinned": true + }, + "order": 164, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "text", + "type": "STRING", + "links": [ + 3492 + ], + "slot_index": 0 + } + ], + "title": "Prompt", + "properties": { + "Node name for S&R": "TextVersions", + "versionAmount": 8, + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "a sea turtle" + ], + "color": "#232", + "bgcolor": "#353", + "tabContents": [ + "a sea turtle", + "", + "", + "", + "", + "", + "", + "" + ], + "activeTab": 0 + }, + { + "id": 3725, + "type": "ImageInvert", + "pos": [ + -4300, + 1090 + ], + "size": [ + 210, + 30 + ], + "flags": { + "collapsed": true + }, + "order": 357, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 5598 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 5599 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "ImageInvert", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 3724, + "type": "ImageBlend", + "pos": [ + -4110, + 1040 + ], + "size": [ + 210, + 102 + ], + "flags": {}, + "order": 371, + "mode": 0, + "inputs": [ + { + "name": "image1", + "type": "IMAGE", + "link": 5595 + }, + { + "name": "image2", + "type": "IMAGE", + "link": 5599 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 5597 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "ImageBlend", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 1, + "multiply" + ] + }, + { + "id": 2468, + "type": "TextVersions", + "pos": [ + 840, + 1320 + ], + "size": [ + 870, + 80 + ], + "flags": { + "pinned": true + }, + "order": 165, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "text", + "type": "STRING", + "links": [ + 3493 + ], + "slot_index": 0 + } + ], + "title": "Tags", + "properties": { + "Node name for S&R": "TextVersions", + "versionAmount": 5, + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "cinematic, nature photography, wide angle" + ], + "color": "#2a363b", + "bgcolor": "#3f5159", + "tabContents": [ + "cinematic, nature photography, wide angle", + "", + "", + "", + "" + ], + "activeTab": 0 + }, + { + "id": 2453, + "type": "ImageSmartSharpen+", + "pos": [ + 1759.6929931640625, + 999.8751220703125 + ], + "size": [ + 310, + 250 + ], + "flags": { + "collapsed": false, + "pinned": true + }, + "order": 319, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 3481 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 3482 + ], + "slot_index": 0 + } + ], + "title": "Sharpen", + "properties": { + "Node name for S&R": "ImageSmartSharpen+", + "enableTabs": true, + "tabWidth": 50, + "tabXOffset": 120, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 1, + 0.75, + 0, + 0.5 + ] + }, + { + "id": 2454, + "type": "Color Correct (mtb)", + "pos": [ + 1759.6929931640625, + 999.8751220703125 + ], + "size": [ + 310, + 250 + ], + "flags": { + "collapsed": false, + "pinned": true + }, + "order": 346, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 3482 + }, + { + "name": "mask", + "type": "MASK", + "link": null, + "shape": 7 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 4606 + ], + "slot_index": 0 + } + ], + "title": "CC", + "properties": { + "Node name for S&R": "Color Correct (mtb)", + "enableTabs": true, + "tabWidth": 50, + "tabXOffset": 175, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + false, + 1, + 1, + 0, + 0, + 0, + 1, + 1 + ] + }, + { + "id": 3283, + "type": "Reroute", + "pos": [ + 5430, + 1590 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 307, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 4911 + } + ], + "outputs": [ + { + "name": "", + "type": "VAE", + "links": [ + 4904 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 3264, + "type": "Reroute", + "pos": [ + 4170, + 1670 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 200, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 4966 + } + ], + "outputs": [ + { + "name": "", + "type": "MASK", + "links": [ + 4850, + 4882 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 3265, + "type": "Reroute", + "pos": [ + 4170, + 1620 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 206, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 4849 + } + ], + "outputs": [ + { + "name": "", + "type": "IMAGE", + "links": [ + 4851, + 4914 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 2413, + "type": "ImageDisplay", + "pos": [ + 470, + 90 + ], + "size": [ + 330, + 65.24058532714844 + ], + "flags": {}, + "order": 166, + "mode": 0, + "inputs": [], + "outputs": [], + "title": "Unnamed", + "properties": { + "originalWidth": 956, + "originalHeight": 189, + "maintainAspectRatio": true, + "imageBase64": "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Y0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALEwAACxMBAJqcGAAABoJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDkuMS1jMDAyIDc5LmI3YzY0Y2MsIDIwMjQvMDcvMTYtMDc6NTk6NDAgICAgICAgICI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiB4bWxuczpwaG90b3Nob3A9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGhvdG9zaG9wLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCAyNi4xICgyMDI0MTAxOS5tLjI4MTUgYTI0OWQwNCkgIChXaW5kb3dzKSIgeG1wOkNyZWF0ZURhdGU9IjIwMjQtMTAtMjNUMTg6NTQ6NDQrMTE6MDAiIHhtcDpNb2RpZnlEYXRlPSIyMDI0LTEwLTIzVDE5OjIzOjMzKzExOjAwIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDI0LTEwLTIzVDE5OjIzOjMzKzExOjAwIiBkYzpmb3JtYXQ9ImltYWdlL3BuZyIgcGhvdG9zaG9wOkNvbG9yTW9kZT0iMyIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDoyYzZmNjdjNy02NTI1LTdjNDctYmU3MC01NmFmYWQ0Y2YzMmQiIHhtcE1NOkRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmNmNTZlYi03NTZhLWY3NGMtYmYwYS1lM2JlZmY1YWMxMWYiIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo5MmE5MDI5Ni1jOTE2LWUwNDgtYTM0My1jNjgwYmVjYWNkNTEiPiA8eG1wTU06SGlzdG9yeT4gPHJkZjpTZXE+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJjcmVhdGVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjkyYTkwMjk2LWM5MTYtZTA0OC1hMzQzLWM2ODBiZWNhY2Q1MSIgc3RFdnQ6d2hlbj0iMjAyNC0xMC0yM1QxODo1NDo0NCsxMTowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIDI2LjEgKDIwMjQxMDE5Lm0uMjgxNSBhMjQ5ZDA0KSAgKFdpbmRvd3MpIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJjb252ZXJ0ZWQiIHN0RXZ0OnBhcmFtZXRlcnM9ImZyb20gYXBwbGljYXRpb24vdm5kLmFkb2JlLnBob3Rvc2hvcCB0byBpbWFnZS9wbmciLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjJjNmY2N2M3LTY1MjUtN2M0Ny1iZTcwLTU2YWZhZDRjZjMyZCIgc3RFdnQ6d2hlbj0iMjAyNC0xMC0yM1QxOToyMzozMysxMTowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIDI2LjEgKDIwMjQxMDE5Lm0uMjgxNSBhMjQ5ZDA0KSAgKFdpbmRvd3MpIiBzdEV2dDpjaGFuZ2VkPSIvIi8+IDwvcmRmOlNlcT4gPC94bXBNTTpIaXN0b3J5PiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PpGGSOYAA3j5SURBVHja7P13uK5nWSYOn9ddnvLWtfZau+8kO72TBJJACiUUg4iAUgVEBAfEBiM4Kli+0XEcHXUc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", + "lastWidth": 330, + "lastHeight": 65.24058532714844 + }, + "color": "#00000000", + "bgcolor": "#00000000", + "shape": 1, + "lastWidth": 330, + "lastHeight": 65.24058532714844, + "imageBase64": "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Y0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALEwAACxMBAJqcGAAABoJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDkuMS1jMDAyIDc5LmI3YzY0Y2MsIDIwMjQvMDcvMTYtMDc6NTk6NDAgICAgICAgICI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiB4bWxuczpwaG90b3Nob3A9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGhvdG9zaG9wLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCAyNi4xICgyMDI0MTAxOS5tLjI4MTUgYTI0OWQwNCkgIChXaW5kb3dzKSIgeG1wOkNyZWF0ZURhdGU9IjIwMjQtMTAtMjNUMTg6NTQ6NDQrMTE6MDAiIHhtcDpNb2RpZnlEYXRlPSIyMDI0LTEwLTIzVDE5OjIzOjMzKzExOjAwIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDI0LTEwLTIzVDE5OjIzOjMzKzExOjAwIiBkYzpmb3JtYXQ9ImltYWdlL3BuZyIgcGhvdG9zaG9wOkNvbG9yTW9kZT0iMyIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDoyYzZmNjdjNy02NTI1LTdjNDctYmU3MC01NmFmYWQ0Y2YzMmQiIHhtcE1NOkRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmNmNTZlYi03NTZhLWY3NGMtYmYwYS1lM2JlZmY1YWMxMWYiIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo5MmE5MDI5Ni1jOTE2LWUwNDgtYTM0My1jNjgwYmVjYWNkNTEiPiA8eG1wTU06SGlzdG9yeT4gPHJkZjpTZXE+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJjcmVhdGVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjkyYTkwMjk2LWM5MTYtZTA0OC1hMzQzLWM2ODBiZWNhY2Q1MSIgc3RFdnQ6d2hlbj0iMjAyNC0xMC0yM1QxODo1NDo0NCsxMTowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIDI2LjEgKDIwMjQxMDE5Lm0uMjgxNSBhMjQ5ZDA0KSAgKFdpbmRvd3MpIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJjb252ZXJ0ZWQiIHN0RXZ0OnBhcmFtZXRlcnM9ImZyb20gYXBwbGljYXRpb24vdm5kLmFkb2JlLnBob3Rvc2hvcCB0byBpbWFnZS9wbmciLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjJjNmY2N2M3LTY1MjUtN2M0Ny1iZTcwLTU2YWZhZDRjZjMyZCIgc3RFdnQ6d2hlbj0iMjAyNC0xMC0yM1QxOToyMzozMysxMTowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIDI2LjEgKDIwMjQxMDE5Lm0uMjgxNSBhMjQ5ZDA0KSAgKFdpbmRvd3MpIiBzdEV2dDpjaGFuZ2VkPSIvIi8+IDwvcmRmOlNlcT4gPC94bXBNTTpIaXN0b3J5PiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PpGGSOYAA3j5SURBVHja7P13uK5nWSYOn9ddnvLWtfZau+8kO72TBJJACiUUg4iAUgVEBAfEBiM4Kli+0XEcHXUc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" + }, + { + "id": 1343, + "type": "ImageCrop+", + "pos": [ + 1759.6929931640625, + 999.8751220703125 + ], + "size": [ + 310, + 250 + ], + "flags": { + "collapsed": false, + "pinned": true + }, + "order": 268, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 2793 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 3481 + ], + "slot_index": 0, + "shape": 3 + }, + { + "name": "x", + "type": "INT", + "links": null, + "shape": 3 + }, + { + "name": "y", + "type": "INT", + "links": null, + "shape": 3 + } + ], + "title": "Crop", + "properties": { + "Node name for S&R": "ImageCrop+", + "enableTabs": true, + "tabWidth": 50, + "tabXOffset": 65, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 1024, + 1024, + "center", + 0, + 0 + ] + }, + { + "id": 3758, + "type": "OutputGetString", + "pos": [ + -2430, + 500 + ], + "size": [ + 260, + 34 + ], + "flags": {}, + "order": 167, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "STRING", + "type": "STRING", + "links": [ + 5772 + ], + "slot_index": 0 + } + ], + "title": "GetString_Output - txt2img", + "properties": { + "Node name for S&R": "OutputGetString", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "Output - txt2img" + ] + }, + { + "id": 3566, + "type": "SimpleComparison+", + "pos": [ + 5270, + 6320 + ], + "size": [ + 210, + 80 + ], + "flags": { + "collapsed": true + }, + "order": 335, + "mode": 0, + "inputs": [ + { + "name": "a", + "type": "*", + "link": 5713 + }, + { + "name": "b", + "type": "*", + "link": 5346 + } + ], + "outputs": [ + { + "name": "BOOLEAN", + "type": "BOOLEAN", + "links": [ + 5642 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "SimpleComparison+", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "!=" + ] + }, + { + "id": 3402, + "type": "SplitVec3", + "pos": [ + 4460, + 6290 + ], + "size": [ + 210, + 70 + ], + "flags": { + "collapsed": false + }, + "order": 214, + "mode": 0, + "inputs": [ + { + "name": "a", + "type": "VEC3", + "link": 5082 + } + ], + "outputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "links": [ + 5661 + ], + "slot_index": 0 + }, + { + "name": "FLOAT", + "type": "FLOAT", + "links": [ + 5366 + ], + "slot_index": 1 + }, + { + "name": "FLOAT", + "type": "FLOAT", + "links": [ + 5362 + ], + "slot_index": 2 + } + ], + "properties": { + "Node name for S&R": "SplitVec3", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 3787, + "type": "Reroute", + "pos": [ + 4870, + 6290 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 289, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5661, + "widget": { + "name": "value" + } + } + ], + "outputs": [ + { + "name": "", + "type": "FLOAT", + "links": [ + 5713, + 5720 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 3829, + "type": "FluxContinuumModelRouter", + "pos": [ + -2120, + 240 + ], + "size": [ + 315, + 118 + ], + "flags": {}, + "order": 253, + "mode": 0, + "inputs": [ + { + "name": "flux_fill", + "type": "MODEL", + "link": 5768 + }, + { + "name": "flux_depth", + "type": "MODEL", + "link": 5769 + }, + { + "name": "flux_canny", + "type": "MODEL", + "link": 5770 + }, + { + "name": "flux_dev", + "type": "MODEL", + "link": 5771 + }, + { + "name": "condition", + "type": "STRING", + "link": 5772, + "widget": { + "name": "condition" + } + } + ], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "links": [ + 5773 + ] + } + ], + "properties": { + "Node name for S&R": "FluxContinuumModelRouter", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "" + ] + }, + { + "id": 3493, + "type": "Canny", + "pos": [ + 1760, + 800 + ], + "size": [ + 310, + 120 + ], + "flags": { + "collapsed": false, + "pinned": true + }, + "order": 215, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 5212 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 5483 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "Canny", + "enableTabs": true, + "tabWidth": 65, + "tabXOffset": 80, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 0.01, + 0.5 + ] + }, + { + "id": 3691, + "type": "IPAdapterSlider", + "pos": [ + 1760, + 800 + ], + "size": [ + 310, + 120 + ], + "flags": { + "collapsed": false, + "pinned": true + }, + "order": 168, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "VEC3", + "type": "VEC3", + "links": [ + 5518 + ] + } + ], + "title": "IPAdapter", + "properties": { + "Node name for S&R": "IPAdapterSlider", + "enableTabs": true, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 0, + 0, + 0 + ] + }, + { + "id": 1342, + "type": "ImageResize+", + "pos": [ + 1759.6929931640625, + 999.8751220703125 + ], + "size": [ + 310, + 250 + ], + "flags": { + "collapsed": false, + "pinned": true + }, + "order": 191, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 2792 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 2793 + ], + "slot_index": 0, + "shape": 3 + }, + { + "name": "width", + "type": "INT", + "links": null, + "shape": 3 + }, + { + "name": "height", + "type": "INT", + "links": null, + "shape": 3 + } + ], + "title": "Resize", + "properties": { + "Node name for S&R": "ImageResize+", + "enableTabs": true, + "tabWidth": 50, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 1024, + 1024, + "lanczos", + "fill / crop", + "always", + 8 + ] + }, + { + "id": 1274, + "type": "DenoiseSlider", + "pos": [ + 1760, + 660 + ], + "size": [ + 310, + 60 + ], + "flags": { + "collapsed": false, + "pinned": true + }, + "order": 169, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "links": [ + 2000 + ], + "slot_index": 0, + "shape": 3 + } + ], + "title": "Denoise", + "properties": { + "Node name for S&R": "DenoiseSlider", + "enableTabs": true, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Feather Mask\n", + "secondTabOffset": 80, + "secondTabWidth": 70 + }, + "widgets_values": [ + 0.35100000000000003 + ] + }, + { + "id": 3327, + "type": "SimpleMathInt+", + "pos": [ + 1760, + 660 + ], + "size": [ + 310, + 60 + ], + "flags": { + "pinned": true + }, + "order": 170, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 4976 + ], + "slot_index": 0 + } + ], + "title": "Mask Feather", + "properties": { + "Node name for S&R": "SimpleMathInt+", + "enableTabs": true, + "tabWidth": 70, + "tabXOffset": 80, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 100 + ] + }, + { + "id": 1095, + "type": "SetNode", + "pos": [ + 670, + 1070 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 257, + "mode": 0, + "inputs": [ + { + "name": "INT", + "type": "INT", + "link": 2305 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_batch", + "properties": { + "previousName": "batch" + }, + "widgets_values": [ + "batch" + ] + }, + { + "id": 1488, + "type": "BatchSlider", + "pos": [ + 480, + 1060 + ], + "size": [ + 310, + 60 + ], + "flags": { + "pinned": true + }, + "order": 171, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 2305 + ], + "slot_index": 0, + "shape": 3 + } + ], + "title": "Batch", + "properties": { + "Node name for S&R": "BatchSlider", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 1 + ] + }, + { + "id": 925, + "type": "SetNode", + "pos": [ + 660, + 1170 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 258, + "mode": 0, + "inputs": [ + { + "name": "INT", + "type": "INT", + "link": 1589 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_seed", + "properties": { + "previousName": "seed" + }, + "widgets_values": [ + "seed" + ] + }, + { + "id": 922, + "type": "Seed (rgthree)", + "pos": [ + 480, + 1160 + ], + "size": [ + 310, + 130 + ], + "flags": { + "collapsed": false, + "pinned": true + }, + "order": 172, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "SEED", + "type": "INT", + "links": [ + 1589 + ], + "slot_index": 0, + "shape": 3, + "dir": 4 + } + ], + "title": "Seed", + "properties": {}, + "widgets_values": [ + -1, + null, + null, + null + ] + }, + { + "id": 3743, + "type": "PreviewBridge", + "pos": [ + 1760, + 170 + ], + "size": [ + 310, + 410 + ], + "flags": {}, + "order": 263, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 5606 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": null + }, + { + "name": "MASK", + "type": "MASK", + "links": [ + 5605 + ], + "slot_index": 1 + } + ], + "title": "Img Mask", + "properties": { + "Node name for S&R": "PreviewBridge", + "enableTabs": true, + "tabWidth": 50, + "tabXOffset": 65, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "$3743-0", + false, + "if_same_size" + ], + "color": "#222", + "bgcolor": "#000" + }, + { + "id": 2774, + "type": "LoadImage", + "pos": [ + 1760, + 170 + ], + "size": [ + 310, + 410 + ], + "flags": { + "collapsed": false, + "pinned": true + }, + "order": 173, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 5371 + ], + "slot_index": 0 + }, + { + "name": "MASK", + "type": "MASK", + "links": null + } + ], + "title": "IP1", + "properties": { + "Node name for S&R": "LoadImage", + "enableTabs": true, + "tabWidth": 40, + "tabXOffset": 120, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "example.png", + "image" + ], + "color": "#432", + "bgcolor": "#653" + }, + { + "id": 3557, + "type": "LoadImage", + "pos": [ + 1760, + 170 + ], + "size": [ + 310, + 410 + ], + "flags": { + "collapsed": false, + "pinned": true + }, + "order": 174, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 5370 + ], + "slot_index": 0 + }, + { + "name": "MASK", + "type": "MASK", + "links": null + } + ], + "title": "IP2", + "properties": { + "Node name for S&R": "LoadImage", + "enableTabs": true, + "tabWidth": 40, + "tabXOffset": 165, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "example.png", + "image" + ], + "color": "#323", + "bgcolor": "#535" + }, + { + "id": 3337, + "type": "LoadImage", + "pos": [ + 1760, + 170 + ], + "size": [ + 310, + 410 + ], + "flags": { + "collapsed": false, + "pinned": true + }, + "order": 175, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 5374 + ], + "slot_index": 0 + }, + { + "name": "MASK", + "type": "MASK", + "links": null + } + ], + "title": "IP3/Face", + "properties": { + "Node name for S&R": "LoadImage", + "enableTabs": true, + "tabWidth": 50, + "tabXOffset": 210, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "example.png", + "image" + ], + "color": "#223", + "bgcolor": "#335" + }, + { + "id": 3604, + "type": "PreviewImage", + "pos": [ + 1760, + 170 + ], + "size": [ + 310, + 410 + ], + "flags": { + "collapsed": false, + "pinned": true + }, + "order": 227, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 5472 + } + ], + "outputs": [], + "title": "Preview", + "properties": { + "Node name for S&R": "PreviewImage", + "enableTabs": true, + "tabWidth": 40, + "tabXOffset": 265, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 2219, + "type": "LoadImage", + "pos": [ + 1760, + 170 + ], + "size": [ + 310, + 410 + ], + "flags": { + "collapsed": false, + "pinned": true + }, + "order": 176, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 4446, + 5606 + ], + "slot_index": 0, + "label": "IMAGE" + }, + { + "name": "MASK", + "type": "MASK", + "links": [], + "slot_index": 1 + } + ], + "title": "Img Load", + "properties": { + "Node name for S&R": "LoadImage", + "enableTabs": true, + "tabWidth": 50, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "example.png", + "image" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3731, + "type": "OutputTextDisplay", + "pos": [ + 1100, + 120 + ], + "size": [ + 340, + 30 + ], + "flags": {}, + "order": 177, + "mode": 0, + "inputs": [], + "outputs": [], + "title": "Unnamed", + "properties": { + "fontSize": 16, + "fontFamily": "'Inter', Arial", + "fontColor": "#9c9c9c", + "textAlign": "center", + "bgColor": "#00000000", + "padding": 0 + }, + "bgcolor": "#00000000", + "shape": 1 + } + ], + "links": [ + [ + 1118, + 589, + 0, + 590, + 1, + "GUIDER" + ], + [ + 1120, + 593, + 0, + 590, + 3, + "SIGMAS" + ], + [ + 1123, + 586, + 0, + 593, + 0, + "MODEL" + ], + [ + 1187, + 641, + 0, + 644, + 0, + "*" + ], + [ + 1360, + 596, + 0, + 591, + 0, + "INT" + ], + [ + 1371, + 591, + 0, + 590, + 0, + "NOISE" + ], + [ + 1424, + 586, + 0, + 589, + 0, + "MODEL" + ], + [ + 1442, + 724, + 0, + 777, + 2, + "STRING" + ], + [ + 1443, + 793, + 0, + 777, + 1, + "STRING" + ], + [ + 1474, + 590, + 1, + 609, + 0, + "LATENT" + ], + [ + 1489, + 586, + 0, + 837, + 0, + "*" + ], + [ + 1490, + 837, + 0, + 834, + 0, + "*" + ], + [ + 1538, + 609, + 0, + 715, + 0, + "IMAGE" + ], + [ + 1589, + 922, + 0, + 925, + 0, + "*" + ], + [ + 1599, + 933, + 0, + 932, + 0, + "BASIC_PIPE" + ], + [ + 1608, + 932, + 1, + 697, + 0, + "MODEL" + ], + [ + 1680, + 965, + 0, + 963, + 1, + "VAE" + ], + [ + 1745, + 1026, + 0, + 1023, + 0, + "IMAGE" + ], + [ + 1769, + 1052, + 0, + 1051, + 3, + "SIGMAS" + ], + [ + 1770, + 1054, + 0, + 1053, + 0, + "NOISE" + ], + [ + 1772, + 1055, + 0, + 1053, + 4, + "LATENT" + ], + [ + 1773, + 1051, + 0, + 1055, + 0, + "LATENT" + ], + [ + 1775, + 1057, + 0, + 1056, + 0, + "INT" + ], + [ + 1776, + 1056, + 0, + 1051, + 0, + "NOISE" + ], + [ + 1783, + 1060, + 0, + 1061, + 0, + "*" + ], + [ + 1786, + 1064, + 0, + 1060, + 1, + "VAE" + ], + [ + 1787, + 1053, + 1, + 1060, + 0, + "LATENT" + ], + [ + 1798, + 963, + 0, + 1073, + 0, + "LATENT" + ], + [ + 1800, + 1073, + 0, + 1072, + 2, + "LATENT" + ], + [ + 1802, + 1074, + 0, + 1075, + 0, + "*" + ], + [ + 1803, + 1072, + 0, + 1074, + 0, + "LATENT" + ], + [ + 1804, + 965, + 0, + 1074, + 1, + "VAE" + ], + [ + 1859, + 1113, + 0, + 716, + 0, + "IMAGE" + ], + [ + 1863, + 1103, + 0, + 1116, + 0, + "*" + ], + [ + 1867, + 1128, + 0, + 1129, + 0, + "IMAGE" + ], + [ + 1868, + 1129, + 0, + 1130, + 0, + "IMAGE" + ], + [ + 1871, + 1129, + 0, + 1131, + 0, + "IMAGE" + ], + [ + 1879, + 1136, + 0, + 1134, + 1, + "VAE" + ], + [ + 1920, + 1162, + 0, + 1073, + 1, + "INT" + ], + [ + 1923, + 1134, + 0, + 1128, + 0, + "IMAGE" + ], + [ + 2000, + 1274, + 0, + 1217, + 0, + "FLOAT" + ], + [ + 2001, + 1279, + 0, + 1281, + 0, + "*" + ], + [ + 2002, + 1278, + 0, + 1280, + 0, + "*" + ], + [ + 2003, + 1282, + 0, + 1285, + 0, + "*" + ], + [ + 2004, + 1285, + 0, + 1072, + 7, + "STRING" + ], + [ + 2005, + 1286, + 0, + 1072, + 6, + "STRING" + ], + [ + 2006, + 1287, + 0, + 1288, + 0, + "*" + ], + [ + 2007, + 1288, + 0, + 1072, + 8, + "STRING" + ], + [ + 2018, + 1300, + 0, + 1293, + 1, + "INT" + ], + [ + 2034, + 1312, + 0, + 429, + 9, + "FLOAT" + ], + [ + 2035, + 1313, + 0, + 429, + 7, + "INT" + ], + [ + 2037, + 1317, + 0, + 593, + 1, + "COMBO" + ], + [ + 2038, + 1318, + 0, + 593, + 2, + "INT" + ], + [ + 2055, + 1328, + 0, + 1262, + 0, + "COMBO" + ], + [ + 2071, + 1323, + 0, + 963, + 0, + "IMAGE" + ], + [ + 2073, + 1346, + 0, + 1345, + 0, + "IMAGE" + ], + [ + 2087, + 834, + 0, + 1358, + 0, + "MODEL" + ], + [ + 2088, + 921, + 0, + 1358, + 1, + "CONDITIONING" + ], + [ + 2089, + 1358, + 0, + 1051, + 1, + "GUIDER" + ], + [ + 2090, + 1358, + 0, + 1053, + 1, + "GUIDER" + ], + [ + 2092, + 1359, + 0, + 1052, + 0, + "SIGMAS" + ], + [ + 2105, + 1099, + 0, + 1051, + 4, + "LATENT" + ], + [ + 2163, + 1339, + 0, + 1387, + 0, + "UPSCALE_MODEL" + ], + [ + 2165, + 1388, + 0, + 1387, + 1, + "IMAGE" + ], + [ + 2166, + 1388, + 0, + 703, + 0, + "IMAGE" + ], + [ + 2169, + 697, + 0, + 1389, + 1, + "MODEL" + ], + [ + 2171, + 932, + 5, + 1389, + 3, + "CONDITIONING" + ], + [ + 2172, + 932, + 3, + 1389, + 4, + "VAE" + ], + [ + 2173, + 708, + 0, + 1389, + 5, + "INT" + ], + [ + 2174, + 1218, + 0, + 1389, + 8, + "FLOAT" + ], + [ + 2175, + 1308, + 0, + 1389, + 6, + "INT" + ], + [ + 2176, + 1311, + 0, + 1389, + 7, + "COMBO" + ], + [ + 2177, + 1389, + 0, + 729, + 0, + "IMAGE" + ], + [ + 2180, + 1387, + 0, + 418, + 0, + "IMAGE" + ], + [ + 2202, + 1325, + 0, + 1404, + 0, + "IMAGE" + ], + [ + 2206, + 1408, + 0, + 873, + 0, + "IMAGE" + ], + [ + 2209, + 1404, + 0, + 1411, + 0, + "IMAGE" + ], + [ + 2210, + 1411, + 0, + 1405, + 0, + "*" + ], + [ + 2211, + 1411, + 0, + 429, + 0, + "IMAGE" + ], + [ + 2212, + 1410, + 0, + 1404, + 1, + "INT" + ], + [ + 2231, + 1406, + 0, + 1405, + 1, + "INT" + ], + [ + 2243, + 1405, + 0, + 429, + 6, + "INT" + ], + [ + 2278, + 1470, + 0, + 1134, + 0, + "LATENT" + ], + [ + 2305, + 1488, + 0, + 1095, + 0, + "INT" + ], + [ + 2313, + 1262, + 0, + 429, + 8, + "COMBO" + ], + [ + 2333, + 1515, + 0, + 1500, + 0, + "COMBO" + ], + [ + 2334, + 1500, + 0, + 590, + 2, + "SAMPLER" + ], + [ + 2335, + 1500, + 0, + 1518, + 0, + "*" + ], + [ + 2337, + 1520, + 0, + 1051, + 2, + "SAMPLER" + ], + [ + 2338, + 1520, + 0, + 1053, + 2, + "SAMPLER" + ], + [ + 2341, + 1523, + 0, + 429, + 10, + "COMBO" + ], + [ + 2342, + 1524, + 0, + 1389, + 9, + "COMBO" + ], + [ + 2344, + 1526, + 0, + 1072, + 9, + "STRING" + ], + [ + 2361, + 1534, + 0, + 1330, + 0, + "*" + ], + [ + 2380, + 726, + 0, + 624, + 0, + "IMAGE" + ], + [ + 2404, + 1618, + 0, + 586, + 3, + "FLOAT" + ], + [ + 2406, + 1620, + 0, + 697, + 1, + "FLOAT" + ], + [ + 2409, + 1623, + 0, + 1624, + 0, + "*" + ], + [ + 2410, + 1624, + 0, + 1072, + 10, + "STRING" + ], + [ + 2412, + 1627, + 0, + 1055, + 1, + "MASK" + ], + [ + 2418, + 1629, + 0, + 1617, + 0, + "FLOAT" + ], + [ + 2792, + 1344, + 0, + 1342, + 0, + "IMAGE" + ], + [ + 2793, + 1342, + 0, + 1343, + 0, + "IMAGE" + ], + [ + 3152, + 645, + 0, + 429, + 2, + "BASIC_PIPE" + ], + [ + 3212, + 2211, + 0, + 641, + 4, + "CONDITIONING" + ], + [ + 3214, + 2217, + 0, + 1090, + 0, + "INT" + ], + [ + 3215, + 2218, + 0, + 1331, + 0, + "INT" + ], + [ + 3362, + 2328, + 0, + 1072, + 1, + "CONDITIONING" + ], + [ + 3363, + 1079, + 0, + 1072, + 0, + "MODEL" + ], + [ + 3425, + 2364, + 0, + 2334, + 1, + "IMAGE" + ], + [ + 3426, + 717, + 0, + 2334, + 0, + "IMAGE" + ], + [ + 3432, + 1115, + 0, + 1103, + 1, + "CLIP" + ], + [ + 3433, + 418, + 0, + 1392, + 0, + "IMAGE" + ], + [ + 3447, + 2427, + 0, + 2428, + 0, + "*" + ], + [ + 3448, + 2429, + 0, + 1090, + 1, + "COMBO" + ], + [ + 3449, + 1090, + 1, + 586, + 1, + "INT" + ], + [ + 3450, + 1090, + 2, + 586, + 2, + "INT" + ], + [ + 3460, + 2435, + 0, + 2437, + 0, + "*" + ], + [ + 3461, + 2438, + 0, + 2436, + 0, + "SAMPLER_PARAMS" + ], + [ + 3463, + 2436, + 0, + 1508, + 0, + "COMBO" + ], + [ + 3464, + 2436, + 2, + 1271, + 0, + "COMBO" + ], + [ + 3465, + 2436, + 1, + 1510, + 0, + "STRING" + ], + [ + 3466, + 2436, + 3, + 1272, + 0, + "STRING" + ], + [ + 3481, + 1343, + 0, + 2453, + 0, + "IMAGE" + ], + [ + 3482, + 2453, + 0, + 2454, + 0, + "IMAGE" + ], + [ + 3492, + 2464, + 0, + 723, + 0, + "STRING" + ], + [ + 3493, + 2468, + 0, + 788, + 0, + "STRING" + ], + [ + 3494, + 2469, + 0, + 1105, + 0, + "MODEL" + ], + [ + 3499, + 2472, + 0, + 609, + 1, + "VAE" + ], + [ + 3509, + 2476, + 0, + 2211, + 0, + "CLIP" + ], + [ + 3543, + 1090, + 1, + 2507, + 0, + "*" + ], + [ + 3544, + 1090, + 2, + 2508, + 0, + "*" + ], + [ + 3717, + 1052, + 1, + 2600, + 0, + "*" + ], + [ + 3718, + 2600, + 0, + 1053, + 3, + "SIGMAS" + ], + [ + 3722, + 1051, + 1, + 1470, + 0, + "*" + ], + [ + 3723, + 1130, + 0, + 1627, + 0, + "*" + ], + [ + 4414, + 717, + 0, + 3000, + 0, + "IMAGE" + ], + [ + 4424, + 583, + 0, + 1114, + 0, + "CLIP" + ], + [ + 4425, + 594, + 0, + 832, + 0, + "VAE" + ], + [ + 4446, + 2219, + 0, + 1320, + 0, + "IMAGE" + ], + [ + 4511, + 1022, + 0, + 1113, + 0, + "IMAGE" + ], + [ + 4514, + 1090, + 0, + 3032, + 0, + "*" + ], + [ + 4606, + 2454, + 0, + 3055, + 0, + "IMAGE" + ], + [ + 4607, + 3055, + 0, + 1346, + 0, + "IMAGE" + ], + [ + 4608, + 3055, + 1, + 3103, + 0, + "*" + ], + [ + 4666, + 3133, + 0, + 3132, + 1, + "INT" + ], + [ + 4667, + 418, + 0, + 3132, + 0, + "IMAGE" + ], + [ + 4668, + 3132, + 0, + 1389, + 0, + "IMAGE" + ], + [ + 4689, + 1086, + 0, + 3169, + 0, + "*" + ], + [ + 4690, + 3169, + 0, + 1072, + 5, + "STRING" + ], + [ + 4691, + 1219, + 0, + 3170, + 0, + "*" + ], + [ + 4692, + 3170, + 0, + 1072, + 4, + "STRING" + ], + [ + 4714, + 1340, + 0, + 3178, + 1, + "*" + ], + [ + 4715, + 1340, + 0, + 3182, + 1, + "*" + ], + [ + 4716, + 703, + 0, + 3178, + 0, + "*" + ], + [ + 4717, + 703, + 1, + 3182, + 0, + "*" + ], + [ + 4718, + 3178, + 0, + 418, + 2, + "INT" + ], + [ + 4719, + 3182, + 0, + 418, + 3, + "INT" + ], + [ + 4779, + 716, + 0, + 3210, + 0, + "*" + ], + [ + 4780, + 1602, + 0, + 3212, + 0, + "STRING" + ], + [ + 4781, + 3212, + 0, + 624, + 1, + "STRING" + ], + [ + 4782, + 3224, + 0, + 3213, + 0, + "CLIP" + ], + [ + 4784, + 3213, + 0, + 3214, + 1, + "CONDITIONING" + ], + [ + 4785, + 3218, + 0, + 3214, + 2, + "VAE" + ], + [ + 4786, + 3225, + 0, + 3214, + 3, + "IMAGE" + ], + [ + 4787, + 3226, + 0, + 3214, + 4, + "MASK" + ], + [ + 4788, + 3217, + 0, + 3215, + 0, + "MODEL" + ], + [ + 4789, + 3215, + 0, + 3216, + 0, + "MODEL" + ], + [ + 4790, + 3214, + 0, + 3216, + 1, + "CONDITIONING" + ], + [ + 4793, + 3227, + 0, + 3216, + 4, + "INT" + ], + [ + 4794, + 3228, + 0, + 3216, + 5, + "INT" + ], + [ + 4795, + 3216, + 0, + 3219, + 0, + "LATENT" + ], + [ + 4796, + 3218, + 0, + 3219, + 1, + "VAE" + ], + [ + 4801, + 3231, + 0, + 3216, + 6, + "COMBO" + ], + [ + 4803, + 3233, + 0, + 3216, + 7, + "COMBO" + ], + [ + 4805, + 3234, + 0, + 3238, + 0, + "*" + ], + [ + 4807, + 3219, + 0, + 3240, + 1, + "IMAGE" + ], + [ + 4809, + 3226, + 0, + 3241, + 0, + "*" + ], + [ + 4810, + 3225, + 0, + 3242, + 0, + "*" + ], + [ + 4814, + 3242, + 0, + 3245, + 0, + "*" + ], + [ + 4815, + 3241, + 0, + 3244, + 0, + "*" + ], + [ + 4818, + 3245, + 0, + 3240, + 0, + "IMAGE" + ], + [ + 4819, + 3240, + 0, + 3220, + 0, + "IMAGE" + ], + [ + 4827, + 3256, + 0, + 3246, + 0, + "CLIP" + ], + [ + 4829, + 3246, + 0, + 3247, + 1, + "CONDITIONING" + ], + [ + 4834, + 3248, + 0, + 3249, + 0, + "MODEL" + ], + [ + 4835, + 3247, + 0, + 3249, + 1, + "CONDITIONING" + ], + [ + 4836, + 3247, + 1, + 3249, + 2, + "CONDITIONING" + ], + [ + 4839, + 3260, + 0, + 3249, + 5, + "INT" + ], + [ + 4845, + 3267, + 0, + 3263, + 0, + "IMAGE" + ], + [ + 4849, + 3257, + 0, + 3265, + 0, + "*" + ], + [ + 4850, + 3264, + 0, + 3266, + 0, + "*" + ], + [ + 4851, + 3265, + 0, + 3267, + 0, + "*" + ], + [ + 4852, + 3268, + 0, + 3249, + 6, + "COMBO" + ], + [ + 4853, + 3269, + 0, + 3249, + 7, + "COMBO" + ], + [ + 4854, + 3263, + 0, + 712, + 0, + "*" + ], + [ + 4882, + 3264, + 0, + 3247, + 4, + "MASK" + ], + [ + 4896, + 3279, + 0, + 3263, + 1, + "IMAGE" + ], + [ + 4904, + 3283, + 0, + 3279, + 1, + "VAE" + ], + [ + 4911, + 3284, + 0, + 3283, + 0, + "*" + ], + [ + 4912, + 1291, + 0, + 3284, + 0, + "*" + ], + [ + 4913, + 3284, + 0, + 3247, + 2, + "VAE" + ], + [ + 4914, + 3265, + 0, + 3247, + 3, + "IMAGE" + ], + [ + 4916, + 3249, + 0, + 3279, + 0, + "LATENT" + ], + [ + 4917, + 1298, + 0, + 3249, + 4, + "INT" + ], + [ + 4919, + 3247, + 2, + 1293, + 0, + "LATENT" + ], + [ + 4920, + 1293, + 0, + 3249, + 3, + "LATENT" + ], + [ + 4921, + 3285, + 0, + 3249, + 8, + "FLOAT" + ], + [ + 4940, + 3302, + 0, + 1103, + 0, + "MODEL" + ], + [ + 4941, + 3164, + 0, + 1026, + 0, + "IMAGE" + ], + [ + 4945, + 3303, + 0, + 3248, + 0, + "MODEL" + ], + [ + 4966, + 3121, + 0, + 3264, + 0, + "*" + ], + [ + 4973, + 3323, + 0, + 3240, + 2, + "MASK" + ], + [ + 4974, + 3244, + 0, + 3323, + 0, + "MASK" + ], + [ + 4976, + 3327, + 0, + 3328, + 0, + "*" + ], + [ + 4977, + 3329, + 0, + 3055, + 2, + "INT" + ], + [ + 4979, + 3331, + 0, + 3323, + 1, + "INT" + ], + [ + 4980, + 3333, + 0, + 3332, + 1, + "INT" + ], + [ + 4981, + 3214, + 2, + 3332, + 0, + "LATENT" + ], + [ + 4982, + 3214, + 1, + 3216, + 2, + "CONDITIONING" + ], + [ + 4983, + 3332, + 0, + 3216, + 3, + "LATENT" + ], + [ + 4992, + 3342, + 0, + 3247, + 0, + "CONDITIONING" + ], + [ + 4993, + 1319, + 0, + 777, + 3, + "FLOAT" + ], + [ + 4995, + 3360, + 0, + 3343, + 1, + "CONDITIONING" + ], + [ + 4996, + 3344, + 0, + 3343, + 2, + "VAE" + ], + [ + 4998, + 3343, + 2, + 3345, + 0, + "LATENT" + ], + [ + 4999, + 3349, + 0, + 3345, + 1, + "INT" + ], + [ + 5000, + 3352, + 0, + 3346, + 0, + "LATENT" + ], + [ + 5001, + 3344, + 0, + 3346, + 1, + "VAE" + ], + [ + 5002, + 3346, + 0, + 3347, + 0, + "*" + ], + [ + 5003, + 3355, + 0, + 3352, + 0, + "MODEL" + ], + [ + 5004, + 3343, + 0, + 3352, + 1, + "CONDITIONING" + ], + [ + 5005, + 3343, + 1, + 3352, + 2, + "CONDITIONING" + ], + [ + 5006, + 3345, + 0, + 3352, + 3, + "LATENT" + ], + [ + 5007, + 3348, + 0, + 3352, + 4, + "INT" + ], + [ + 5008, + 3350, + 0, + 3352, + 5, + "INT" + ], + [ + 5012, + 3359, + 0, + 3360, + 0, + "CLIP" + ], + [ + 5013, + 3361, + 0, + 3363, + 0, + "*" + ], + [ + 5014, + 3362, + 0, + 3364, + 0, + "*" + ], + [ + 5015, + 3365, + 0, + 3343, + 0, + "CONDITIONING" + ], + [ + 5017, + 3367, + 0, + 641, + 3, + "CONDITIONING" + ], + [ + 5019, + 3368, + 0, + 777, + 0, + "CLIP" + ], + [ + 5020, + 3369, + 0, + 3352, + 6, + "COMBO" + ], + [ + 5021, + 3370, + 0, + 3352, + 7, + "COMBO" + ], + [ + 5023, + 3351, + 0, + 3372, + 0, + "IMAGE" + ], + [ + 5033, + 3374, + 0, + 3376, + 0, + "*" + ], + [ + 5034, + 3375, + 0, + 3377, + 0, + "*" + ], + [ + 5039, + 3380, + 0, + 3214, + 0, + "CONDITIONING" + ], + [ + 5045, + 3383, + 0, + 586, + 0, + "MODEL" + ], + [ + 5046, + 1117, + 0, + 3383, + 0, + "*" + ], + [ + 5051, + 3378, + 0, + 3386, + 0, + "*" + ], + [ + 5054, + 3386, + 0, + 3387, + 0, + "*" + ], + [ + 5055, + 3379, + 0, + 3388, + 0, + "*" + ], + [ + 5058, + 3388, + 0, + 3385, + 0, + "*" + ], + [ + 5060, + 777, + 0, + 3390, + 0, + "*" + ], + [ + 5071, + 3387, + 0, + 3397, + 0, + "*" + ], + [ + 5072, + 3385, + 0, + 3396, + 0, + "*" + ], + [ + 5082, + 3403, + 0, + 3402, + 0, + "VEC3" + ], + [ + 5106, + 3351, + 0, + 3408, + 0, + "IMAGE" + ], + [ + 5107, + 3408, + 0, + 3409, + 1, + "INT" + ], + [ + 5108, + 3408, + 1, + 3409, + 2, + "INT" + ], + [ + 5109, + 3372, + 0, + 3409, + 0, + "IMAGE" + ], + [ + 5110, + 3409, + 0, + 3343, + 3, + "IMAGE" + ], + [ + 5166, + 3463, + 0, + 3450, + 0, + "CONDITIONING" + ], + [ + 5167, + 3462, + 0, + 3450, + 1, + "CONDITIONING" + ], + [ + 5168, + 3451, + 0, + 3450, + 2, + "VAE" + ], + [ + 5170, + 3450, + 2, + 3452, + 0, + "LATENT" + ], + [ + 5171, + 3456, + 0, + 3452, + 1, + "INT" + ], + [ + 5172, + 3459, + 0, + 3453, + 0, + "LATENT" + ], + [ + 5173, + 3451, + 0, + 3453, + 1, + "VAE" + ], + [ + 5174, + 3453, + 0, + 3454, + 0, + "*" + ], + [ + 5175, + 3460, + 0, + 3459, + 0, + "MODEL" + ], + [ + 5176, + 3450, + 0, + 3459, + 1, + "CONDITIONING" + ], + [ + 5177, + 3450, + 1, + 3459, + 2, + "CONDITIONING" + ], + [ + 5178, + 3452, + 0, + 3459, + 3, + "LATENT" + ], + [ + 5179, + 3455, + 0, + 3459, + 4, + "INT" + ], + [ + 5180, + 3457, + 0, + 3459, + 5, + "INT" + ], + [ + 5181, + 3461, + 0, + 3462, + 0, + "CLIP" + ], + [ + 5210, + 3490, + 0, + 3459, + 7, + "COMBO" + ], + [ + 5211, + 3488, + 0, + 3459, + 6, + "COMBO" + ], + [ + 5212, + 3458, + 0, + 3493, + 0, + "IMAGE" + ], + [ + 5237, + 3515, + 0, + 589, + 1, + "CONDITIONING" + ], + [ + 5238, + 3515, + 0, + 921, + 0, + "*" + ], + [ + 5319, + 1114, + 0, + 2476, + 0, + "*" + ], + [ + 5324, + 832, + 0, + 641, + 2, + "VAE" + ], + [ + 5325, + 2476, + 0, + 641, + 1, + "CLIP" + ], + [ + 5326, + 1117, + 0, + 641, + 0, + "MODEL" + ], + [ + 5327, + 1090, + 0, + 3548, + 0, + "*" + ], + [ + 5328, + 3548, + 0, + 3549, + 0, + "*" + ], + [ + 5329, + 3549, + 0, + 590, + 4, + "LATENT" + ], + [ + 5330, + 593, + 0, + 1359, + 0, + "*" + ], + [ + 5335, + 3551, + 0, + 429, + 1, + "SEGS" + ], + [ + 5337, + 3556, + 0, + 3340, + 0, + "CONDITIONING" + ], + [ + 5346, + 3569, + 0, + 3566, + 1, + "*" + ], + [ + 5350, + 3572, + 0, + 3571, + 1, + "*" + ], + [ + 5359, + 3578, + 0, + 3577, + 1, + "*" + ], + [ + 5362, + 3402, + 2, + 3407, + 0, + "*" + ], + [ + 5363, + 3407, + 0, + 3577, + 0, + "*" + ], + [ + 5366, + 3402, + 1, + 3582, + 0, + "*" + ], + [ + 5368, + 3582, + 0, + 3571, + 0, + "*" + ], + [ + 5369, + 932, + 4, + 1389, + 2, + "CONDITIONING" + ], + [ + 5370, + 3557, + 0, + 3338, + 0, + "IMAGE" + ], + [ + 5371, + 2774, + 0, + 3559, + 0, + "IMAGE" + ], + [ + 5374, + 3337, + 0, + 3584, + 0, + "*" + ], + [ + 5376, + 3585, + 0, + 3587, + 0, + "*" + ], + [ + 5382, + 3589, + 0, + 3585, + 0, + "IMAGE" + ], + [ + 5383, + 3592, + 0, + 3585, + 1, + "IMAGE" + ], + [ + 5384, + 3367, + 0, + 3515, + 0, + "*" + ], + [ + 5415, + 3606, + 0, + 3622, + 0, + "IMAGE" + ], + [ + 5452, + 3658, + 0, + 3450, + 3, + "IMAGE" + ], + [ + 5453, + 3659, + 0, + 3661, + 0, + "IMAGE" + ], + [ + 5454, + 3660, + 0, + 3662, + 0, + "IMAGE" + ], + [ + 5461, + 3665, + 0, + 3633, + 1, + "*" + ], + [ + 5462, + 3666, + 0, + 3645, + 1, + "*" + ], + [ + 5463, + 3668, + 0, + 3624, + 0, + "IMAGE" + ], + [ + 5464, + 3667, + 0, + 3626, + 0, + "IMAGE" + ], + [ + 5465, + 3669, + 0, + 3618, + 0, + "IMAGE" + ], + [ + 5468, + 3671, + 0, + 3620, + 0, + "IMAGE" + ], + [ + 5472, + 3675, + 0, + 3604, + 0, + "IMAGE" + ], + [ + 5474, + 3676, + 0, + 3673, + 0, + "IMAGE" + ], + [ + 5478, + 3409, + 0, + 3653, + 0, + "IMAGE" + ], + [ + 5479, + 3679, + 0, + 3680, + 1, + "INT" + ], + [ + 5480, + 3679, + 1, + 3680, + 2, + "INT" + ], + [ + 5482, + 3458, + 0, + 3679, + 0, + "IMAGE" + ], + [ + 5483, + 3493, + 0, + 3680, + 0, + "IMAGE" + ], + [ + 5484, + 3680, + 0, + 3654, + 0, + "IMAGE" + ], + [ + 5518, + 3691, + 0, + 3401, + 0, + "VEC3" + ], + [ + 5519, + 3603, + 0, + 3692, + 0, + "IMAGE" + ], + [ + 5520, + 3633, + 0, + 3692, + 2, + "BOOLEAN" + ], + [ + 5522, + 3692, + 0, + 3693, + 0, + "IMAGE" + ], + [ + 5523, + 3645, + 0, + 3693, + 2, + "BOOLEAN" + ], + [ + 5525, + 3693, + 0, + 3676, + 0, + "IMAGE" + ], + [ + 5537, + 3659, + 0, + 3699, + 0, + "IMAGE" + ], + [ + 5538, + 3699, + 0, + 3697, + 0, + "IMAGE" + ], + [ + 5554, + 3711, + 0, + 3712, + 0, + "TEXT_STYLE" + ], + [ + 5557, + 3620, + 0, + 3712, + 1, + "IMAGE" + ], + [ + 5558, + 3711, + 0, + 3713, + 0, + "TEXT_STYLE" + ], + [ + 5568, + 3712, + 0, + 3603, + 0, + "IMAGE" + ], + [ + 5569, + 3713, + 0, + 3603, + 1, + "IMAGE" + ], + [ + 5570, + 3626, + 0, + 3715, + 1, + "IMAGE" + ], + [ + 5571, + 3715, + 0, + 3603, + 2, + "IMAGE" + ], + [ + 5572, + 3662, + 0, + 3719, + 1, + "IMAGE" + ], + [ + 5573, + 3711, + 0, + 3715, + 0, + "TEXT_STYLE" + ], + [ + 5574, + 3711, + 0, + 3716, + 0, + "TEXT_STYLE" + ], + [ + 5575, + 3711, + 0, + 3717, + 0, + "TEXT_STYLE" + ], + [ + 5576, + 3711, + 0, + 3718, + 0, + "TEXT_STYLE" + ], + [ + 5577, + 3711, + 0, + 3719, + 0, + "TEXT_STYLE" + ], + [ + 5578, + 3717, + 0, + 3603, + 4, + "IMAGE" + ], + [ + 5579, + 3718, + 0, + 3692, + 1, + "IMAGE" + ], + [ + 5580, + 3719, + 0, + 3693, + 1, + "IMAGE" + ], + [ + 5581, + 3618, + 0, + 3717, + 1, + "IMAGE" + ], + [ + 5583, + 3661, + 0, + 3718, + 1, + "IMAGE" + ], + [ + 5584, + 3624, + 0, + 3716, + 1, + "IMAGE" + ], + [ + 5585, + 3716, + 0, + 3603, + 3, + "IMAGE" + ], + [ + 5586, + 3684, + 0, + 3720, + 1, + "INT" + ], + [ + 5587, + 3720, + 0, + 3606, + 0, + "MASK" + ], + [ + 5588, + 3670, + 0, + 3720, + 0, + "MASK" + ], + [ + 5589, + 3330, + 0, + 3722, + 1, + "INT" + ], + [ + 5590, + 3266, + 0, + 3722, + 0, + "MASK" + ], + [ + 5591, + 3722, + 0, + 3263, + 2, + "MASK" + ], + [ + 5592, + 3555, + 0, + 3723, + 0, + "MASK" + ], + [ + 5593, + 3553, + 0, + 3723, + 1, + "INT" + ], + [ + 5594, + 3723, + 0, + 3551, + 0, + "MASK" + ], + [ + 5595, + 3620, + 0, + 3724, + 0, + "IMAGE" + ], + [ + 5597, + 3724, + 0, + 3713, + 1, + "IMAGE" + ], + [ + 5598, + 3622, + 0, + 3725, + 0, + "IMAGE" + ], + [ + 5599, + 3725, + 0, + 3724, + 1, + "IMAGE" + ], + [ + 5605, + 3743, + 1, + 1321, + 0, + "MASK" + ], + [ + 5606, + 2219, + 0, + 3743, + 0, + "IMAGE" + ], + [ + 5616, + 3409, + 0, + 3767, + 0, + "*" + ], + [ + 5623, + 3756, + 0, + 3633, + 0, + "*" + ], + [ + 5624, + 3756, + 0, + 3645, + 0, + "*" + ], + [ + 5630, + 429, + 0, + 3773, + 1, + "IMAGE" + ], + [ + 5633, + 3773, + 0, + 1408, + 0, + "IMAGE" + ], + [ + 5634, + 3723, + 0, + 3778, + 0, + "*" + ], + [ + 5635, + 3778, + 0, + 3779, + 0, + "*" + ], + [ + 5636, + 3779, + 0, + 3773, + 2, + "MASK" + ], + [ + 5637, + 3780, + 0, + 3781, + 0, + "*" + ], + [ + 5638, + 1325, + 0, + 3780, + 0, + "*" + ], + [ + 5639, + 3781, + 0, + 3773, + 0, + "IMAGE" + ], + [ + 5642, + 3566, + 0, + 3783, + 0, + "*" + ], + [ + 5644, + 3390, + 0, + 3783, + 2, + "*" + ], + [ + 5651, + 3577, + 0, + 3785, + 0, + "*" + ], + [ + 5656, + 3571, + 0, + 3784, + 0, + "*" + ], + [ + 5658, + 3785, + 0, + 3556, + 0, + "CONDITIONING" + ], + [ + 5661, + 3402, + 0, + 3787, + 0, + "*" + ], + [ + 5699, + 3390, + 0, + 3809, + 0, + "CONDITIONING" + ], + [ + 5700, + 3388, + 0, + 3809, + 1, + "STYLE_MODEL" + ], + [ + 5701, + 3810, + 0, + 3809, + 2, + "CLIP_VISION_OUTPUT" + ], + [ + 5702, + 3386, + 0, + 3810, + 0, + "CLIP_VISION" + ], + [ + 5703, + 3336, + 0, + 3810, + 1, + "IMAGE" + ], + [ + 5713, + 3787, + 0, + 3566, + 0, + "*" + ], + [ + 5719, + 3809, + 0, + 3783, + 1, + "*" + ], + [ + 5720, + 3787, + 0, + 3809, + 3, + "FLOAT" + ], + [ + 5722, + 3812, + 0, + 3811, + 2, + "CLIP_VISION_OUTPUT" + ], + [ + 5724, + 3814, + 0, + 3813, + 2, + "CLIP_VISION_OUTPUT" + ], + [ + 5725, + 3813, + 0, + 3785, + 1, + "*" + ], + [ + 5726, + 3811, + 0, + 3784, + 1, + "*" + ], + [ + 5727, + 3582, + 0, + 3811, + 3, + "FLOAT" + ], + [ + 5728, + 3407, + 0, + 3813, + 3, + "FLOAT" + ], + [ + 5729, + 3395, + 0, + 3814, + 1, + "IMAGE" + ], + [ + 5730, + 3339, + 0, + 3812, + 1, + "IMAGE" + ], + [ + 5731, + 3387, + 0, + 3812, + 0, + "CLIP_VISION" + ], + [ + 5732, + 3385, + 0, + 3811, + 1, + "STYLE_MODEL" + ], + [ + 5733, + 3396, + 0, + 3813, + 1, + "STYLE_MODEL" + ], + [ + 5734, + 3397, + 0, + 3814, + 0, + "CLIP_VISION" + ], + [ + 5738, + 3783, + 0, + 3816, + 0, + "*" + ], + [ + 5739, + 3816, + 0, + 3784, + 2, + "*" + ], + [ + 5740, + 3816, + 0, + 3811, + 0, + "CONDITIONING" + ], + [ + 5741, + 3784, + 0, + 3817, + 0, + "*" + ], + [ + 5742, + 3817, + 0, + 3813, + 0, + "CONDITIONING" + ], + [ + 5743, + 3817, + 0, + 3785, + 2, + "*" + ], + [ + 5768, + 3291, + 0, + 3829, + 0, + "MODEL" + ], + [ + 5769, + 3506, + 0, + 3829, + 1, + "MODEL" + ], + [ + 5770, + 3507, + 0, + 3829, + 2, + "MODEL" + ], + [ + 5771, + 1106, + 0, + 3829, + 3, + "MODEL" + ], + [ + 5772, + 3758, + 0, + 3829, + 4, + "STRING" + ], + [ + 5773, + 3829, + 0, + 3301, + 0, + "MODEL" + ] + ], + "groups": [ + { + "id": 37, + "title": "Depth Mask", + "bounding": [ + 7320, + -220, + 835, + 289 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + }, + { + "id": 43, + "title": "", + "bounding": [ + 830.17724609375, + 90.28895568847656, + 890.865966796875, + 989.3416748046875 + ], + "font_size": 12, + "flags": { + "pinned": true + } + }, + { + "id": 33, + "title": "Basic Pipe Setup + Empty Latent", + "bounding": [ + 3600, + 100, + 1421.6837158203125, + 650.072265625 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + }, + { + "id": 32, + "title": "Text to Image", + "bounding": [ + 5050, + 100, + 1882.51953125, + 654.6351318359375 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + }, + { + "id": 30, + "title": "Noise Injection", + "bounding": [ + 6990, + 100, + 1852.53662109375, + 647.7285766601562 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + }, + { + "id": 42, + "title": "", + "bounding": [ + 1749.915771484375, + 120.41236114501953, + 330, + 470 + ], + "font_size": 12, + "flags": { + "pinned": true + } + }, + { + "id": 31, + "title": "FLUX Config", + "bounding": [ + 2990, + 100, + 576.2850341796875, + 1006.0545654296875 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + }, + { + "id": 41, + "title": "Output Selector", + "bounding": [ + 470, + 140, + 330, + 130 + ], + "font_size": 12, + "flags": {} + }, + { + "id": 39, + "title": "", + "bounding": [ + 470, + 270, + 330, + 300 + ], + "font_size": 12, + "flags": { + "pinned": true + } + }, + { + "id": 36, + "title": "", + "bounding": [ + 470, + 570, + 330, + 440 + ], + "font_size": 12, + "flags": { + "pinned": true + } + }, + { + "id": 35, + "title": "", + "bounding": [ + 1749.76123046875, + 591.859375, + 330.59259033203125, + 137.2823944091797 + ], + "font_size": 12, + "flags": { + "pinned": true + } + }, + { + "id": 34, + "title": "", + "bounding": [ + 1750.4066162109375, + 730.0758056640625, + 329.8945617675781, + 200.3811492919922 + ], + "font_size": 12, + "flags": { + "pinned": true + } + }, + { + "id": 20, + "title": "img2img", + "bounding": [ + 3600, + 780, + 1390.4423828125, + 643.8358154296875 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + }, + { + "id": 29, + "title": "", + "bounding": [ + 1750.8255615234375, + 931.1278686523438, + 329.2669677734375, + 329.1338806152344 + ], + "font_size": 12, + "flags": { + "pinned": true + } + }, + { + "id": 27, + "title": "", + "bounding": [ + 470, + 1010, + 330.96514892578125, + 511.4422302246094 + ], + "font_size": 12, + "flags": { + "pinned": true + } + }, + { + "id": 28, + "title": "", + "bounding": [ + 831.2684326171875, + 1080.7266845703125, + 889.65869140625, + 328.6146240234375 + ], + "font_size": 12, + "flags": { + "pinned": true + } + }, + { + "id": 25, + "title": "", + "bounding": [ + 1750.8250732421875, + 1261.177001953125, + 329.5889587402344, + 228.2154541015625 + ], + "font_size": 12, + "flags": { + "pinned": true + } + }, + { + "id": 17, + "title": "Inpainting", + "bounding": [ + 3600, + 1440, + 3131.747314453125, + 880.1497192382812 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + }, + { + "id": 14, + "title": "Ultimate Upscaler", + "bounding": [ + 3600, + 3150, + 2080.63916015625, + 664.80419921875 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + }, + { + "id": 11, + "title": "Detailer", + "bounding": [ + 3600, + 3830, + 2578.261962890625, + 773.4797973632812 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + }, + { + "id": 10, + "title": "Save Output", + "bounding": [ + -5290, + 160, + 866.1715698242188, + 305.7850341796875 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + }, + { + "id": 9, + "title": "Sampler Params Split", + "bounding": [ + -3260, + 160, + 684.7925415039062, + 222.1497802734375 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + }, + { + "id": 8, + "title": "Final image", + "bounding": [ + -4320, + 160, + 1000.2138061523438, + 367.3245849609375 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + }, + { + "id": 45, + "title": "Outpainting", + "bounding": [ + 3600, + 2340, + 2736.0078125, + 794.3147583007812 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + }, + { + "id": 46, + "title": "Conditioning", + "bounding": [ + 3600, + 6010, + 5387.58447265625, + 1043.3763427734375 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + }, + { + "id": 48, + "title": "Depth", + "bounding": [ + 3600, + 4610, + 2568.850341796875, + 720.0126342773438 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + }, + { + "id": 49, + "title": "Canny", + "bounding": [ + 3600, + 5340, + 1775.20654296875, + 652.8306274414062 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + }, + { + "id": 50, + "title": "Model Router", + "bounding": [ + -2470, + 0, + 906.1168823242188, + 554.1303100585938 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + }, + { + "id": 51, + "title": "IP Adapter", + "bounding": [ + 4090, + 6120, + 4181.77490234375, + 763.366455078125 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + }, + { + "id": 52, + "title": "Face Swap", + "bounding": [ + 3600, + 7060, + 857.3869018554688, + 464.93743896484375 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + }, + { + "id": 53, + "title": "Preview Inputs", + "bounding": [ + -5300, + 620, + 4219.9541015625, + 2449.222900390625 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + }, + { + "id": 55, + "title": "Play Sound Notification", + "bounding": [ + -3700, + 200, + 330, + 193.60000610351562 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + } + ], + "config": {}, + "extra": { + "ds": { + "scale": 0.6830134553650707, + "offset": [ + 342.1153197844885, + 238.68881108255943 + ] + }, + "linkExtensions": [ + { + "id": 5600, + "parentId": 1 + } + ], + "reroutes": [ + { + "id": 1, + "pos": [ + -1372.1390380859375, + 274.1617431640625 + ], + "linkIds": [ + 5600 + ] + } + ], + "groupNodes": {} + }, + "version": 0.4 +} \ No newline at end of file diff --git a/comfyui-flux-continuum/workflow/Flux+ 1.6.4_release.json b/comfyui-flux-continuum/workflow/Flux+ 1.6.4_release.json new file mode 100644 index 0000000000000000000000000000000000000000..841a363d37bf22097732817b290a2bbb76d233d8 --- /dev/null +++ b/comfyui-flux-continuum/workflow/Flux+ 1.6.4_release.json @@ -0,0 +1,24076 @@ +{ + "id": "58bb46b3-6af0-4368-8562-5b29e4c07d28", + "revision": 0, + "last_node_id": 4106, + "last_link_id": 6239, + "nodes": [ + { + "id": 1026, + "type": "ImagePass", + "pos": [ + 530, + 230 + ], + "size": [ + 210, + 30 + ], + "flags": { + "collapsed": true + }, + "order": 241, + "mode": 0, + "inputs": [ + { + "name": "image", + "shape": 7, + "type": "IMAGE", + "link": 4941 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 1745 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui-kjnodes", + "ver": "d835ac96042394299f76793544ee3643fd4b0457", + "Node name for S&R": "ImagePass" + }, + "widgets_values": [] + }, + { + "id": 1346, + "type": "ImagePass", + "pos": [ + 1789.6929931640625, + 1029.87646484375 + ], + "size": [ + 140, + 30 + ], + "flags": { + "collapsed": true + }, + "order": 393, + "mode": 0, + "inputs": [ + { + "name": "image", + "shape": 7, + "type": "IMAGE", + "link": 4607 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 2073 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui-kjnodes", + "ver": "d835ac96042394299f76793544ee3643fd4b0457", + "Node name for S&R": "ImagePass" + }, + "widgets_values": [] + }, + { + "id": 3829, + "type": "ImagePass", + "pos": [ + -3640, + 290 + ], + "size": [ + 210, + 30 + ], + "flags": { + "collapsed": true + }, + "order": 233, + "mode": 0, + "inputs": [ + { + "name": "image", + "shape": 7, + "type": "IMAGE", + "link": 6223 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 5896 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui-kjnodes", + "ver": "c19ad3491691dde7219bc0dab17acefb81bd0be0", + "Node name for S&R": "ImagePass" + }, + "widgets_values": [] + }, + { + "id": 644, + "type": "SetNode", + "pos": [ + 4186.2509765625, + 329.36273193359375 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 392, + "mode": 0, + "inputs": [ + { + "name": "BASIC_PIPE", + "type": "BASIC_PIPE", + "link": 1187 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_pipe", + "properties": { + "previousName": "pipe" + }, + "widgets_values": [ + "pipe" + ], + "color": "#322", + "bgcolor": "hsla(0, 25%, 26.7%, 1)" + }, + { + "id": 715, + "type": "SetNode", + "pos": [ + 6650, + 440 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 397, + "mode": 0, + "inputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "link": 1538 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_Output - txt2img", + "properties": { + "previousName": "Output - txt2img" + }, + "widgets_values": [ + "Output - txt2img" + ], + "color": "#2a363b", + "bgcolor": "#3f5159" + }, + { + "id": 723, + "type": "SetNode", + "pos": [ + 1431.1396484375, + 1160.7176513671875 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 267, + "mode": 0, + "inputs": [ + { + "name": "STRING", + "type": "STRING", + "link": 3492 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_prompt", + "properties": { + "previousName": "prompt" + }, + "widgets_values": [ + "prompt" + ] + }, + { + "id": 788, + "type": "SetNode", + "pos": [ + 1590.7579345703125, + 1348.9764404296875 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 263, + "mode": 0, + "inputs": [ + { + "name": "STRING", + "type": "STRING", + "link": 3493 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "slot_index": 0, + "links": [] + } + ], + "title": "Set_tags", + "properties": { + "previousName": "tags" + }, + "widgets_values": [ + "tags" + ] + }, + { + "id": 873, + "type": "SetNode", + "pos": [ + 6020, + 4050 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 414, + "mode": 0, + "inputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "link": 2206 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_Output - detailer", + "properties": { + "previousName": "Output - detailer" + }, + "widgets_values": [ + "Output - detailer" + ], + "color": "#2a363b", + "bgcolor": "#3f5159" + }, + { + "id": 1023, + "type": "SetNode", + "pos": [ + 670, + 210 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 320, + "mode": 0, + "inputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "link": 1745 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_send", + "properties": { + "previousName": "send" + }, + "widgets_values": [ + "send" + ], + "color": "#2a363b", + "bgcolor": "#3f5159" + }, + { + "id": 1061, + "type": "SetNode", + "pos": [ + 8560, + 250 + ], + "size": [ + 302.3999938964844, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 431, + "mode": 0, + "inputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "link": 1783 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_Output - txt2img noise injection", + "properties": { + "previousName": "Output - txt2img noise injection" + }, + "widgets_values": [ + "Output - txt2img noise injection" + ], + "color": "#2a363b", + "bgcolor": "#3f5159" + }, + { + "id": 1075, + "type": "SetNode", + "pos": [ + 4777.0771484375, + 876.7098999023438 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 376, + "mode": 0, + "inputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "link": 1802 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_Output - img2img", + "properties": { + "previousName": "Output - img2img" + }, + "widgets_values": [ + "Output - img2img" + ], + "color": "#2a363b", + "bgcolor": "#3f5159" + }, + { + "id": 1105, + "type": "SetNode", + "pos": [ + 3371.815673828125, + 203.81993103027344 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 250, + "mode": 0, + "inputs": [ + { + "name": "MODEL", + "type": "MODEL", + "link": 3494 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "slot_index": 0, + "links": [] + } + ], + "title": "Set_model", + "properties": { + "previousName": "model" + }, + "widgets_values": [ + "model" + ], + "color": "#223", + "bgcolor": "#335" + }, + { + "id": 1217, + "type": "SetNode", + "pos": [ + 1938.784423828125, + 667.22509765625 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 249, + "mode": 0, + "inputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "link": 2000 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_denoise", + "properties": { + "previousName": "denoise" + }, + "widgets_values": [ + "denoise" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1271, + "type": "SetNode", + "pos": [ + -1540, + 240 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 286, + "mode": 0, + "inputs": [ + { + "name": "COMBO", + "type": "COMBO", + "link": 3464 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_scheduler", + "properties": { + "previousName": "scheduler" + }, + "widgets_values": [ + "scheduler" + ] + }, + { + "id": 1272, + "type": "SetNode", + "pos": [ + -1540, + 360 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 287, + "mode": 0, + "inputs": [ + { + "name": "STRING", + "type": "STRING", + "link": 3466 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_scheduler_name", + "properties": { + "previousName": "scheduler_name" + }, + "widgets_values": [ + "scheduler_name" + ] + }, + { + "id": 1280, + "type": "SetNode", + "pos": [ + 670, + 750 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 246, + "mode": 0, + "inputs": [ + { + "name": "INT", + "type": "INT", + "link": 2002 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_steps", + "properties": { + "previousName": "steps" + }, + "widgets_values": [ + "steps" + ], + "color": "#1b4669", + "bgcolor": "#29699c" + }, + { + "id": 1281, + "type": "SetNode", + "pos": [ + 650, + 860 + ], + "size": [ + 210, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 237, + "mode": 0, + "inputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "link": 2001 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_guidance", + "properties": { + "previousName": "guidance" + }, + "widgets_values": [ + "guidance" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1345, + "type": "SetNode", + "pos": [ + 1799.6929931640625, + 1079.8760986328125 + ], + "size": [ + 268.79998779296875, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 407, + "mode": 0, + "inputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "link": 2073 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_Output - imgload_prep", + "properties": { + "previousName": "Output - imgload_prep" + }, + "widgets_values": [ + "Output - imgload_prep" + ], + "color": "#2a363b", + "bgcolor": "#3f5159" + }, + { + "id": 1508, + "type": "SetNode", + "pos": [ + -1540, + 280 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 284, + "mode": 0, + "inputs": [ + { + "name": "COMBO", + "type": "COMBO", + "link": 3463 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_sampler", + "properties": { + "previousName": "sampler" + }, + "widgets_values": [ + "sampler" + ] + }, + { + "id": 1510, + "type": "SetNode", + "pos": [ + -1540, + 320 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 285, + "mode": 0, + "inputs": [ + { + "name": "STRING", + "type": "STRING", + "link": 3465 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_sampler_name", + "properties": { + "previousName": "sampler_name" + }, + "widgets_values": [ + "sampler_name" + ] + }, + { + "id": 1518, + "type": "SetNode", + "pos": [ + 6250, + 650 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 277, + "mode": 0, + "inputs": [ + { + "name": "SAMPLER", + "type": "SAMPLER", + "link": 2335 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_sampler_convert", + "properties": { + "previousName": "sampler_convert" + }, + "widgets_values": [ + "sampler_convert" + ], + "color": "#614a4a", + "bgcolor": "#3b2c2c" + }, + { + "id": 1617, + "type": "SetNode", + "pos": [ + 650, + 940 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 238, + "mode": 0, + "inputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "link": 2418 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_max shift", + "properties": { + "previousName": "max shift" + }, + "widgets_values": [ + "max shift" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 2428, + "type": "SetNode", + "pos": [ + 650, + 1350 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 239, + "mode": 0, + "inputs": [ + { + "name": "COMBO", + "type": "COMBO", + "link": 3447 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_resolution", + "properties": { + "previousName": "resolution" + }, + "widgets_values": [ + "resolution" + ] + }, + { + "id": 2437, + "type": "SetNode", + "pos": [ + 610, + 620 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 240, + "mode": 0, + "inputs": [ + { + "name": "SAMPLER_PARAMS", + "type": "SAMPLER_PARAMS", + "link": 3460 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_sampler params", + "properties": { + "previousName": "sampler params" + }, + "widgets_values": [ + "sampler params" + ] + }, + { + "id": 2507, + "type": "SetNode", + "pos": [ + 4839.5029296875, + 425.84979248046875 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 281, + "mode": 0, + "inputs": [ + { + "name": "INT", + "type": "INT", + "link": 3543 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_width", + "properties": { + "previousName": "width" + }, + "widgets_values": [ + "width" + ], + "color": "#1b4669", + "bgcolor": "#29699c" + }, + { + "id": 2508, + "type": "SetNode", + "pos": [ + 4839.5029296875, + 475.849853515625 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 283, + "mode": 0, + "inputs": [ + { + "name": "INT", + "type": "INT", + "link": 3544 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_height", + "properties": { + "previousName": "height" + }, + "widgets_values": [ + "height" + ], + "color": "#1b4669", + "bgcolor": "#29699c" + }, + { + "id": 3032, + "type": "SetNode", + "pos": [ + 4839.5029296875, + 375.8497619628906 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 279, + "mode": 0, + "inputs": [ + { + "name": "LATENT", + "type": "LATENT", + "link": 4514 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_latent", + "properties": { + "previousName": "latent" + }, + "widgets_values": [ + "latent" + ], + "color": "#323", + "bgcolor": "#535" + }, + { + "id": 3103, + "type": "SetNode", + "pos": [ + 1829.6929931640625, + 1149.8760986328125 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 394, + "mode": 0, + "inputs": [ + { + "name": "MASK", + "type": "MASK", + "link": 4608 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_mask_outpainting", + "properties": { + "previousName": "mask_outpainting" + }, + "widgets_values": [ + "mask_outpainting" + ], + "color": "#1c5715", + "bgcolor": "#1f401b" + }, + { + "id": 3220, + "type": "SetNode", + "pos": [ + 5970, + 2720 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 409, + "mode": 0, + "inputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "link": 4819 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_Output - outpainting", + "properties": { + "previousName": "Output - outpainting" + }, + "widgets_values": [ + "Output - outpainting" + ], + "color": "#2a363b", + "bgcolor": "#3f5159" + }, + { + "id": 3328, + "type": "SetNode", + "pos": [ + 1898.784423828125, + 667.22509765625 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 248, + "mode": 0, + "inputs": [ + { + "name": "INT", + "type": "INT", + "link": 4976 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_mask_feather", + "properties": { + "previousName": "mask_feather" + }, + "widgets_values": [ + "mask_feather" + ], + "color": "#1b4669", + "bgcolor": "#29699c" + }, + { + "id": 3347, + "type": "SetNode", + "pos": [ + 5160, + 4820 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 401, + "mode": 0, + "inputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "link": 5002 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_Output - depth", + "properties": { + "previousName": "" + }, + "widgets_values": [ + "Output - depth" + ], + "color": "#2a363b", + "bgcolor": "#3f5159" + }, + { + "id": 3454, + "type": "SetNode", + "pos": [ + 5160, + 5590 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 402, + "mode": 0, + "inputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "link": 5174 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_Output - canny", + "properties": { + "previousName": "Output - canny" + }, + "widgets_values": [ + "Output - canny" + ], + "color": "#2a363b", + "bgcolor": "#3f5159" + }, + { + "id": 3559, + "type": "SetNode", + "pos": [ + 1880, + 220 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true, + "pinned": true + }, + "order": 261, + "mode": 0, + "inputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "link": 5371 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_loadImage_IP1", + "properties": { + "previousName": "loadImage_IP1" + }, + "widgets_values": [ + "loadImage_IP1" + ], + "color": "#2a363b", + "bgcolor": "#3f5159" + }, + { + "id": 3584, + "type": "SetNode", + "pos": [ + 1880, + 300 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true, + "pinned": true + }, + "order": 259, + "mode": 0, + "inputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "link": 5374 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_loadImage_IP3", + "properties": { + "previousName": "loadImage_IP3" + }, + "widgets_values": [ + "loadImage_IP3" + ], + "color": "#2a363b", + "bgcolor": "#3f5159" + }, + { + "id": 3301, + "type": "SetNode", + "pos": [ + -670, + 410 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": false + }, + "order": 322, + "mode": 0, + "inputs": [ + { + "name": "MODEL", + "type": "MODEL", + "link": 5615 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "slot_index": 0, + "links": [] + } + ], + "title": "Set_sendModel", + "properties": { + "previousName": "sendModel" + }, + "widgets_values": [ + "sendModel" + ], + "color": "#223", + "bgcolor": "#335" + }, + { + "id": 712, + "type": "SetNode", + "pos": [ + 6390, + 1780 + ], + "size": [ + 210, + 60 + ], + "flags": { + "collapsed": false + }, + "order": 410, + "mode": 0, + "inputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "link": 4854 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_Output - inpainting", + "properties": { + "previousName": "Output - inpainting" + }, + "widgets_values": [ + "Output - inpainting" + ], + "color": "#2a363b", + "bgcolor": "#3f5159" + }, + { + "id": 3338, + "type": "SetNode", + "pos": [ + 1880, + 260 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true, + "pinned": true + }, + "order": 260, + "mode": 0, + "inputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "link": 5370 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_loadImage_IP2", + "properties": { + "previousName": "loadImage_IP2" + }, + "widgets_values": [ + "loadImage_IP2" + ], + "color": "#2a363b", + "bgcolor": "#3f5159" + }, + { + "id": 1320, + "type": "SetNode", + "pos": [ + 1890, + 350 + ], + "size": [ + 210, + 60 + ], + "flags": { + "collapsed": true, + "pinned": true + }, + "order": 265, + "mode": 0, + "inputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "link": 4446 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "slot_index": 0, + "links": [] + } + ], + "title": "Set_loadImage", + "properties": { + "previousName": "loadImage" + }, + "widgets_values": [ + "loadImage" + ], + "color": "#2a363b", + "bgcolor": "#3f5159" + }, + { + "id": 1095, + "type": "SetNode", + "pos": [ + 520, + 1060 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 247, + "mode": 0, + "inputs": [ + { + "name": "INT", + "type": "INT", + "link": 2305 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_batch", + "properties": { + "previousName": "batch" + }, + "widgets_values": [ + "batch" + ], + "color": "#1b4669", + "bgcolor": "#29699c" + }, + { + "id": 729, + "type": "SetNode", + "pos": [ + 5410, + 3290 + ], + "size": [ + 252, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 395, + "mode": 0, + "inputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "link": 2177 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_Output - ultimate upscaler", + "properties": { + "previousName": "Output - ultimate upscaler" + }, + "widgets_values": [ + "Output - ultimate upscaler" + ], + "color": "#2a363b", + "bgcolor": "#3f5159" + }, + { + "id": 1116, + "type": "SetNode", + "pos": [ + 540, + 500 + ], + "size": [ + 285.375, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 305, + "mode": 0, + "inputs": [ + { + "name": "MODEL", + "type": "MODEL", + "link": 1863 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_modelWithLoRAs", + "properties": { + "previousName": "modelWithLoRAs" + }, + "widgets_values": [ + "modelWithLoRAs" + ], + "color": "#223", + "bgcolor": "#335" + }, + { + "id": 3950, + "type": "SetNode", + "pos": [ + 1840, + 180 + ], + "size": [ + 210, + 60 + ], + "flags": { + "collapsed": true, + "pinned": true + }, + "order": 262, + "mode": 0, + "inputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "link": 5947 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_loadImage_ControlNet", + "properties": { + "previousName": "loadImage_ControlNet" + }, + "widgets_values": [ + "loadImage_ControlNet" + ], + "color": "#2a363b", + "bgcolor": "#3f5159" + }, + { + "id": 3976, + "type": "SetNode", + "pos": [ + 3371.815673828125, + 1170 + ], + "size": [ + 210, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 253, + "mode": 0, + "inputs": [ + { + "name": "CONTROL_NET", + "type": "CONTROL_NET", + "link": 5982 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_model_controlnet", + "properties": { + "previousName": "model_controlnet" + }, + "widgets_values": [ + "model_controlnet" + ], + "color": "#156653", + "bgcolor": "#1c453b" + }, + { + "id": 3943, + "type": "SetNode", + "pos": [ + 1830, + 820 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 270, + "mode": 0, + "inputs": [ + { + "name": "VEC3", + "type": "VEC3", + "link": 5986 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_cn_control_line", + "properties": { + "previousName": "cn_control_line" + }, + "widgets_values": [ + "cn_control_line" + ] + }, + { + "id": 3401, + "type": "SetNode", + "pos": [ + 1810, + 850 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 264, + "mode": 0, + "inputs": [ + { + "name": "VEC3", + "type": "VEC3", + "link": 5989 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_ipadapter_strenght", + "properties": { + "previousName": "ipadapter_strenght" + }, + "widgets_values": [ + "ipadapter_strenght" + ] + }, + { + "id": 3945, + "type": "SetNode", + "pos": [ + 1820, + 880 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 268, + "mode": 0, + "inputs": [ + { + "name": "VEC3", + "type": "VEC3", + "link": 5988 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_cn_control_pose", + "properties": { + "previousName": "cn_control_pose" + }, + "widgets_values": [ + "cn_control_pose" + ] + }, + { + "id": 3987, + "type": "SetNode", + "pos": [ + 8070, + 7410 + ], + "size": [ + 210, + 34 + ], + "flags": { + "collapsed": true + }, + "order": 417, + "mode": 0, + "inputs": [ + { + "name": "SEGS", + "type": "SEGS", + "link": 5997 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_segs_cnApplied", + "properties": { + "previousName": "" + }, + "widgets_values": [ + "segs_cnApplied" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 3986, + "type": "SetNode", + "pos": [ + 8610, + 6450 + ], + "size": [ + 210, + 50 + ], + "flags": { + "collapsed": true + }, + "order": 427, + "mode": 0, + "inputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "link": 6117 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_cond_redux", + "properties": { + "previousName": "cond_redux" + }, + "widgets_values": [ + "cond_redux" + ], + "color": "#332922", + "bgcolor": "#593930" + }, + { + "id": 4050, + "type": "SetNode", + "pos": [ + 4190, + 4170 + ], + "size": [ + 210, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 304, + "mode": 0, + "inputs": [ + { + "name": "MASK", + "type": "MASK", + "link": 6120 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_mask_processed", + "properties": { + "previousName": "mask_processed" + }, + "widgets_values": [ + "mask_processed" + ], + "color": "#1c5715", + "bgcolor": "#1f401b" + }, + { + "id": 1321, + "type": "SetNode", + "pos": [ + 1930, + 390 + ], + "size": [ + 210, + 60 + ], + "flags": { + "collapsed": true, + "pinned": true + }, + "order": 266, + "mode": 0, + "inputs": [ + { + "name": "MASK", + "type": "MASK", + "link": 5877 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_mask", + "properties": { + "previousName": "mask" + }, + "widgets_values": [ + "mask" + ], + "color": "#1c5715", + "bgcolor": "#1f401b" + }, + { + "id": 3941, + "type": "SetNode", + "pos": [ + 1820, + 810 + ], + "size": [ + 210, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 269, + "mode": 0, + "inputs": [ + { + "name": "VEC3", + "type": "VEC3", + "link": 5987 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_cn_control_depth", + "properties": { + "previousName": "cn_control_depth" + }, + "widgets_values": [ + "cn_control_depth" + ] + }, + { + "id": 3340, + "type": "SetNode", + "pos": [ + 8110, + 7160 + ], + "size": [ + 260, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 416, + "mode": 0, + "inputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "link": 6116 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_conditioning", + "properties": { + "previousName": "conditioning" + }, + "widgets_values": [ + "conditioning" + ], + "color": "#332922", + "bgcolor": "#593930" + }, + { + "id": 1392, + "type": "SetNode", + "pos": [ + 4560, + 3420 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 357, + "mode": 0, + "inputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "link": 6182 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_Output - upscaler", + "properties": { + "previousName": "Output - upscaler" + }, + "widgets_values": [ + "Output - upscaler" + ], + "color": "#2a363b", + "bgcolor": "#3f5159" + }, + { + "id": 1331, + "type": "SetNode", + "pos": [ + 1870, + 1330 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 257, + "mode": 0, + "inputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "link": 6178 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_res multiply", + "properties": { + "previousName": "res multiply" + }, + "widgets_values": [ + "res multiply" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 4080, + "type": "SetNode", + "pos": [ + 1890, + 1470 + ], + "size": [ + 210, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 255, + "mode": 0, + "inputs": [ + { + "name": "VEC2", + "type": "VEC2", + "link": 6184 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_canny_slider", + "properties": { + "previousName": "canny_slider" + }, + "widgets_values": [ + "canny_slider" + ] + }, + { + "id": 4087, + "type": "SetNode", + "pos": [ + 4370, + 7730 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 349, + "mode": 0, + "inputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "link": 6193 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_canny_prep_cn", + "properties": { + "previousName": "canny_prep_cn" + }, + "widgets_values": [ + "canny_prep_cn" + ], + "color": "#2a363b", + "bgcolor": "#3f5159" + }, + { + "id": 4086, + "type": "SetNode", + "pos": [ + 4630, + 7940 + ], + "size": [ + 210, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 371, + "mode": 0, + "inputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "link": 6196 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_canny_prep", + "properties": { + "previousName": "canny_prep" + }, + "widgets_values": [ + "canny_prep" + ], + "color": "#2a363b", + "bgcolor": "#3f5159" + }, + { + "id": 1330, + "type": "SetNode", + "pos": [ + 1890, + 1330 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 256, + "mode": 0, + "inputs": [ + { + "name": "UPSCALE_MODEL", + "type": "UPSCALE_MODEL", + "link": 2361 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_upscale_model", + "properties": { + "previousName": "" + }, + "widgets_values": [ + "upscale_model" + ] + }, + { + "id": 4098, + "type": "SetNode", + "pos": [ + 6210, + 7960 + ], + "size": [ + 210, + 50 + ], + "flags": { + "collapsed": true + }, + "order": 372, + "mode": 0, + "inputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "link": 6206 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_depth_prep", + "properties": { + "previousName": "depth_prep" + }, + "widgets_values": [ + "depth_prep" + ], + "color": "#2a363b", + "bgcolor": "#3f5159" + }, + { + "id": 4095, + "type": "SetNode", + "pos": [ + 5810, + 7760 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 315, + "mode": 0, + "inputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "link": 6215 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_depth_prep_cn", + "properties": { + "previousName": "depth_prep_cn" + }, + "widgets_values": [ + "depth_prep_cn" + ], + "color": "#2a363b", + "bgcolor": "#3f5159" + }, + { + "id": 4090, + "type": "SetNode", + "pos": [ + 6990, + 7470 + ], + "size": [ + 275.17083740234375, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 309, + "mode": 0, + "inputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "link": 6197 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_Output - preprocessor openpose", + "properties": { + "previousName": "Output - preprocessor openpose" + }, + "widgets_values": [ + "Output - preprocessor openpose" + ], + "color": "#2a363b", + "bgcolor": "#3f5159" + }, + { + "id": 3654, + "type": "SetNode", + "pos": [ + 4860, + 7680 + ], + "size": [ + 320, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 389, + "mode": 0, + "inputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "link": 6174 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_Output - preprocessor canny", + "properties": { + "previousName": "Output - preprocessor canny" + }, + "widgets_values": [ + "Output - preprocessor canny" + ], + "color": "#2a363b", + "bgcolor": "#3f5159" + }, + { + "id": 4102, + "type": "SetNode", + "pos": [ + 6460, + 7700 + ], + "size": [ + 320, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 390, + "mode": 0, + "inputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "link": 6213 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_Output - preprocessor depth", + "properties": { + "previousName": "Output - preprocessor depth" + }, + "widgets_values": [ + "Output - preprocessor depth" + ], + "color": "#2a363b", + "bgcolor": "#3f5159" + }, + { + "id": 3831, + "type": "SetNode", + "pos": [ + -3430, + 290 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 319, + "mode": 0, + "inputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "link": 5896 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 5804 + ] + } + ], + "title": "Set_final", + "properties": { + "previousName": "final" + }, + "widgets_values": [ + "final" + ], + "color": "#2a363b", + "bgcolor": "#3f5159" + }, + { + "id": 3830, + "type": "SetNode", + "pos": [ + 640, + 1200 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 258, + "mode": 0, + "inputs": [ + { + "name": "INT", + "type": "INT", + "link": 6239 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_seed", + "properties": { + "previousName": "seed" + }, + "widgets_values": [ + "seed" + ], + "color": "#1b4669", + "bgcolor": "#29699c" + }, + { + "id": 726, + "type": "GetNode", + "pos": [ + -2470, + 240 + ], + "size": [ + 313.42822265625, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 0, + "mode": 4, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 2380 + ] + } + ], + "title": "Get_final", + "properties": {}, + "widgets_values": [ + "final" + ], + "color": "#2a363b", + "bgcolor": "#3f5159" + }, + { + "id": 933, + "type": "GetNode", + "pos": [ + 4526.86669921875, + 3370.522705078125 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 1, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "BASIC_PIPE", + "type": "BASIC_PIPE", + "links": [ + 1599 + ] + } + ], + "title": "Get_pipe", + "properties": {}, + "widgets_values": [ + "pipe" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 965, + "type": "GetNode", + "pos": [ + 3712.240234375, + 880.7233276367188 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 2, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "VAE", + "type": "VAE", + "slot_index": 0, + "links": [ + 1680, + 1804 + ] + } + ], + "title": "Get_vae", + "properties": {}, + "widgets_values": [ + "vae" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 1064, + "type": "GetNode", + "pos": [ + 8234.751953125, + 204.01480102539062 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 3, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "VAE", + "type": "VAE", + "links": [ + 1786 + ] + } + ], + "title": "Get_vae", + "properties": {}, + "widgets_values": [ + "vae" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 1079, + "type": "GetNode", + "pos": [ + 4077.0810546875, + 926.7098999023438 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 4, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "slot_index": 0, + "links": [ + 3363 + ] + } + ], + "title": "Get_modelWithLoRAs", + "properties": {}, + "widgets_values": [ + "modelWithLoRAs" + ], + "color": "#223", + "bgcolor": "#335" + }, + { + "id": 1099, + "type": "GetNode", + "pos": [ + 7071.9658203125, + 397.2384338378906 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 5, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "LATENT", + "type": "LATENT", + "slot_index": 0, + "links": [ + 2105 + ] + } + ], + "title": "Get_latent", + "properties": {}, + "widgets_values": [ + "latent" + ], + "color": "#323", + "bgcolor": "#535" + }, + { + "id": 1117, + "type": "GetNode", + "pos": [ + 3776.249755859375, + 239.36273193359375 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 6, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "slot_index": 0, + "links": [ + 5046, + 5326 + ] + } + ], + "title": "Get_modelWithLoRAs", + "properties": {}, + "widgets_values": [ + "modelWithLoRAs" + ], + "color": "#223", + "bgcolor": "#335" + }, + { + "id": 1136, + "type": "GetNode", + "pos": [ + 7364.07373046875, + -7.376744747161865 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 7, + "mode": 4, + "inputs": [], + "outputs": [ + { + "name": "VAE", + "type": "VAE", + "slot_index": 0, + "links": [ + 1879 + ] + } + ], + "title": "Get_vae", + "properties": {}, + "widgets_values": [ + "vae" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 1162, + "type": "GetNode", + "pos": [ + 3853.34716796875, + 1022.2464599609375 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 8, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "slot_index": 0, + "links": [ + 1920 + ] + } + ], + "title": "Get_batch", + "properties": {}, + "widgets_values": [ + "batch" + ], + "color": "#1b4669", + "bgcolor": "#29699c" + }, + { + "id": 1218, + "type": "GetNode", + "pos": [ + 4901.81689453125, + 3528.91357421875 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 9, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "slot_index": 0, + "links": [ + 2174 + ] + } + ], + "title": "Get_denoise", + "properties": {}, + "widgets_values": [ + "denoise" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1219, + "type": "GetNode", + "pos": [ + 3957.0810546875, + 1086.7099609375 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 10, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "slot_index": 0, + "links": [ + 4691 + ] + } + ], + "title": "Get_denoise", + "properties": {}, + "widgets_values": [ + "denoise" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1282, + "type": "GetNode", + "pos": [ + 3977.0810546875, + 1266.7099609375 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 11, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "slot_index": 0, + "links": [ + 2003 + ] + } + ], + "title": "Get_steps", + "properties": {}, + "widgets_values": [ + "steps" + ], + "color": "#1b4669", + "bgcolor": "#29699c" + }, + { + "id": 1286, + "type": "GetNode", + "pos": [ + 4037.0810546875, + 1206.7099609375 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 12, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "STRING", + "type": "STRING", + "links": [ + 2005 + ] + } + ], + "title": "Get_scheduler_name", + "properties": {}, + "widgets_values": [ + "scheduler_name" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1287, + "type": "GetNode", + "pos": [ + 3957.0810546875, + 1306.7099609375 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 13, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "slot_index": 0, + "links": [ + 2006 + ] + } + ], + "title": "Get_guidance", + "properties": {}, + "widgets_values": [ + "guidance" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1291, + "type": "GetNode", + "pos": [ + 3640, + 1610 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 14, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "VAE", + "type": "VAE", + "slot_index": 0, + "links": [ + 4912 + ] + } + ], + "title": "Get_vae", + "properties": {}, + "widgets_values": [ + "vae" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 1308, + "type": "GetNode", + "pos": [ + 4911.81689453125, + 3438.913818359375 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 15, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "slot_index": 0, + "links": [ + 2175 + ] + } + ], + "title": "Get_steps", + "properties": {}, + "widgets_values": [ + "steps" + ], + "color": "#1b4669", + "bgcolor": "#29699c" + }, + { + "id": 1311, + "type": "GetNode", + "pos": [ + 4901.81689453125, + 3488.91357421875 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 16, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "COMBO", + "type": "COMBO", + "links": [ + 2176 + ] + } + ], + "title": "Get_scheduler", + "properties": {}, + "widgets_values": [ + "scheduler" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1313, + "type": "GetNode", + "pos": [ + 4679.0615234375, + 4212.4921875 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 17, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "slot_index": 0, + "links": [ + 2035 + ] + } + ], + "title": "Get_steps", + "properties": {}, + "widgets_values": [ + "steps" + ], + "color": "#1b4669", + "bgcolor": "#29699c" + }, + { + "id": 1317, + "type": "GetNode", + "pos": [ + 5670, + 520 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 18, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "COMBO", + "type": "COMBO", + "links": [ + 2037 + ] + } + ], + "title": "Get_scheduler", + "properties": {}, + "widgets_values": [ + "scheduler" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1318, + "type": "GetNode", + "pos": [ + 5690, + 560 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 19, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 2038 + ] + } + ], + "title": "Get_steps", + "properties": {}, + "widgets_values": [ + "steps" + ], + "color": "#1b4669", + "bgcolor": "#29699c" + }, + { + "id": 1323, + "type": "GetNode", + "pos": [ + 3633.3486328125, + 1092.24658203125 + ], + "size": [ + 280, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 20, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 2071 + ] + } + ], + "title": "Get_Output - imgload_prep", + "properties": {}, + "widgets_values": [ + "Output - imgload_prep" + ], + "color": "#2a363b", + "bgcolor": "#3f5159" + }, + { + "id": 1344, + "type": "GetNode", + "pos": [ + 1769.6929931640625, + 1209.8760986328125 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 21, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 2792 + ] + } + ], + "title": "Get_loadImage", + "properties": {}, + "widgets_values": [ + "loadImage" + ], + "color": "#2a363b", + "bgcolor": "#3f5159" + }, + { + "id": 1388, + "type": "GetNode", + "pos": [ + 3631.819091796875, + 3408.91357421875 + ], + "size": [ + 268.79998779296875, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 22, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 2165, + 2166 + ] + } + ], + "title": "Get_Output - imgload_prep", + "properties": {}, + "widgets_values": [ + "Output - imgload_prep" + ], + "color": "#2a363b", + "bgcolor": "#3f5159" + }, + { + "id": 1515, + "type": "GetNode", + "pos": [ + 5860, + 650 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 23, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "COMBO", + "type": "COMBO", + "links": [ + 2333 + ] + } + ], + "title": "Get_sampler", + "properties": {}, + "widgets_values": [ + "sampler" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1520, + "type": "GetNode", + "pos": [ + 7021.9658203125, + 357.2383117675781 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 24, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "SAMPLER", + "type": "SAMPLER", + "slot_index": 0, + "links": [ + 2337, + 2338 + ] + } + ], + "title": "Get_sampler_convert", + "properties": {}, + "widgets_values": [ + "sampler_convert" + ], + "color": "#614a4a", + "bgcolor": "#3b2c2c" + }, + { + "id": 1524, + "type": "GetNode", + "pos": [ + 4901.81689453125, + 3578.911376953125 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 25, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "COMBO", + "type": "COMBO", + "links": [ + 2342 + ] + } + ], + "title": "Get_sampler", + "properties": {}, + "widgets_values": [ + "sampler" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1526, + "type": "GetNode", + "pos": [ + 4047.0810546875, + 1346.7099609375 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 26, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "STRING", + "type": "STRING", + "slot_index": 0, + "links": [ + 2344 + ] + } + ], + "title": "Get_sampler_name", + "properties": {}, + "widgets_values": [ + "sampler_name" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1602, + "type": "GetNode", + "pos": [ + -2890, + 310 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": false + }, + "order": 27, + "mode": 4, + "inputs": [], + "outputs": [ + { + "name": "STRING", + "type": "STRING", + "slot_index": 0, + "links": [ + 4780 + ] + } + ], + "title": "Get_prompt", + "properties": {}, + "widgets_values": [ + "prompt" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1618, + "type": "GetNode", + "pos": [ + 5120, + 510 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 28, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "slot_index": 0, + "links": [ + 2404 + ] + } + ], + "title": "Get_max shift", + "properties": {}, + "widgets_values": [ + "max shift" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1620, + "type": "GetNode", + "pos": [ + 4686.86669921875, + 3230.522705078125 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 29, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "slot_index": 0, + "links": [ + 2406 + ] + } + ], + "title": "Get_max shift", + "properties": {}, + "widgets_values": [ + "max shift" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1623, + "type": "GetNode", + "pos": [ + 3947.0810546875, + 1386.7099609375 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 30, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "slot_index": 0, + "links": [ + 2409 + ] + } + ], + "title": "Get_max shift", + "properties": {}, + "widgets_values": [ + "max shift" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 2217, + "type": "GetNode", + "pos": [ + 4356.2509765625, + 399.36273193359375 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 31, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "slot_index": 0, + "links": [ + 3214 + ] + } + ], + "title": "Get_batch", + "properties": {}, + "widgets_values": [ + "batch" + ], + "color": "#1b4669", + "bgcolor": "#29699c" + }, + { + "id": 2328, + "type": "GetNode", + "pos": [ + 4077.0810546875, + 966.7098999023438 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 32, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "slot_index": 0, + "links": [ + 3362 + ] + } + ], + "title": "Get_conditioning", + "properties": {}, + "widgets_values": [ + "conditioning" + ], + "color": "#332922", + "bgcolor": "#593930" + }, + { + "id": 2364, + "type": "GetNode", + "pos": [ + 1150, + 150 + ], + "size": [ + 268.79998779296875, + 58 + ], + "flags": { + "collapsed": true, + "pinned": true + }, + "order": 33, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 3425 + ] + } + ], + "title": "Get_loadImage", + "properties": {}, + "widgets_values": [ + "loadImage" + ], + "color": "#2a363b", + "bgcolor": "#3f5159" + }, + { + "id": 2429, + "type": "GetNode", + "pos": [ + 4326.2509765625, + 449.36273193359375 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 34, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "COMBO", + "type": "COMBO", + "slot_index": 0, + "links": [ + 3448 + ] + } + ], + "title": "Get_resolution", + "properties": {}, + "widgets_values": [ + "resolution" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 2438, + "type": "GetNode", + "pos": [ + -2020, + 300 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 35, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "SAMPLER_PARAMS", + "type": "SAMPLER_PARAMS", + "slot_index": 0, + "links": [ + 3461 + ] + } + ], + "title": "Get_sampler params", + "properties": {}, + "widgets_values": [ + "sampler params" + ] + }, + { + "id": 2472, + "type": "GetNode", + "pos": [ + 6300, + 460 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 36, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "VAE", + "type": "VAE", + "slot_index": 0, + "links": [ + 3499 + ] + } + ], + "title": "Get_vae", + "properties": {}, + "widgets_values": [ + "vae" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 3121, + "type": "GetNode", + "pos": [ + 3640, + 1700 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 37, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "MASK", + "type": "MASK", + "slot_index": 0, + "links": [ + 4966 + ] + } + ], + "title": "Get_mask", + "properties": {}, + "widgets_values": [ + "mask" + ], + "color": "#1c5715", + "bgcolor": "#1f401b" + }, + { + "id": 3133, + "type": "GetNode", + "pos": [ + 4396.86669921875, + 3230.522705078125 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 38, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "slot_index": 0, + "links": [ + 4666 + ] + } + ], + "title": "Get_batch", + "properties": {}, + "widgets_values": [ + "batch" + ], + "color": "#1b4669", + "bgcolor": "#29699c" + }, + { + "id": 3217, + "type": "GetNode", + "pos": [ + 4540, + 2570 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 39, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "links": [ + 4788 + ] + } + ], + "title": "Get_modelWithLoRAs", + "properties": {}, + "widgets_values": [ + "modelWithLoRAs" + ], + "color": "#223", + "bgcolor": "#335" + }, + { + "id": 3218, + "type": "GetNode", + "pos": [ + 3640, + 2480 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 40, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "VAE", + "type": "VAE", + "slot_index": 0, + "links": [ + 4785, + 4796 + ] + } + ], + "title": "Get_vae", + "properties": {}, + "widgets_values": [ + "vae" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 3224, + "type": "GetNode", + "pos": [ + 3680, + 2740 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 41, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "CLIP", + "type": "CLIP", + "slot_index": 0, + "links": [ + 4782 + ] + } + ], + "title": "Get_clip", + "properties": {}, + "widgets_values": [ + "clip" + ], + "color": "#432", + "bgcolor": "#653" + }, + { + "id": 3225, + "type": "GetNode", + "pos": [ + 3630, + 2520 + ], + "size": [ + 210.25416564941406, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 42, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 4786, + 4810 + ] + } + ], + "title": "Get_Output - imgload_prep", + "properties": {}, + "widgets_values": [ + "Output - imgload_prep" + ], + "color": "#2a363b", + "bgcolor": "#3f5159" + }, + { + "id": 3226, + "type": "GetNode", + "pos": [ + 3650, + 2590 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 43, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "MASK", + "type": "MASK", + "slot_index": 0, + "links": [ + 4787, + 4809 + ] + } + ], + "title": "Get_mask_outpainting", + "properties": {}, + "widgets_values": [ + "mask_outpainting" + ], + "color": "#1c5715", + "bgcolor": "#1f401b" + }, + { + "id": 3228, + "type": "GetNode", + "pos": [ + 4460, + 2960 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 44, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "slot_index": 0, + "links": [ + 4794 + ] + } + ], + "title": "Get_steps", + "properties": {}, + "widgets_values": [ + "steps" + ], + "color": "#1b4669", + "bgcolor": "#29699c" + }, + { + "id": 3231, + "type": "GetNode", + "pos": [ + 4440, + 3000 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 45, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "COMBO", + "type": "COMBO", + "links": [ + 4801 + ] + } + ], + "title": "Get_scheduler", + "properties": {}, + "widgets_values": [ + "scheduler" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3233, + "type": "GetNode", + "pos": [ + 4450, + 3040 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 46, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "COMBO", + "type": "COMBO", + "links": [ + 4803 + ] + } + ], + "title": "Get_sampler", + "properties": {}, + "widgets_values": [ + "sampler" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3256, + "type": "GetNode", + "pos": [ + 3830, + 1870 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 47, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "CLIP", + "type": "CLIP", + "slot_index": 0, + "links": [ + 4827 + ] + } + ], + "title": "Get_clip", + "properties": {}, + "widgets_values": [ + "clip" + ], + "color": "#432", + "bgcolor": "#653" + }, + { + "id": 3257, + "type": "GetNode", + "pos": [ + 3640, + 1650 + ], + "size": [ + 210.25416564941406, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 48, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 4849 + ] + } + ], + "title": "Get_Output - imgload_prep", + "properties": {}, + "widgets_values": [ + "Output - imgload_prep" + ], + "color": "#2a363b", + "bgcolor": "#3f5159" + }, + { + "id": 3260, + "type": "GetNode", + "pos": [ + 4830, + 2080 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 49, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "slot_index": 0, + "links": [ + 4839 + ] + } + ], + "title": "Get_steps", + "properties": {}, + "widgets_values": [ + "steps" + ], + "color": "#1b4669", + "bgcolor": "#29699c" + }, + { + "id": 3268, + "type": "GetNode", + "pos": [ + 4810, + 2120 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 50, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "COMBO", + "type": "COMBO", + "links": [ + 4852 + ] + } + ], + "title": "Get_scheduler", + "properties": {}, + "widgets_values": [ + "scheduler" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3269, + "type": "GetNode", + "pos": [ + 4820, + 2160 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 51, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "COMBO", + "type": "COMBO", + "links": [ + 4853 + ] + } + ], + "title": "Get_sampler", + "properties": {}, + "widgets_values": [ + "sampler" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3285, + "type": "GetNode", + "pos": [ + 4820, + 2200 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 52, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "slot_index": 0, + "links": [ + 4921 + ] + } + ], + "title": "Get_denoise", + "properties": {}, + "widgets_values": [ + "denoise" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3291, + "type": "GetNode", + "pos": [ + -1260, + 230 + ], + "size": [ + 230, + 60 + ], + "flags": { + "collapsed": false + }, + "order": 53, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "slot_index": 0, + "links": [ + 5611 + ] + } + ], + "title": "Get_model_fill", + "properties": {}, + "widgets_values": [ + "model_fill" + ], + "color": "#223", + "bgcolor": "#335" + }, + { + "id": 3303, + "type": "GetNode", + "pos": [ + 4730, + 1770 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 54, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "slot_index": 0, + "links": [ + 4945 + ] + } + ], + "title": "Get_modelWithLoRAs", + "properties": {}, + "widgets_values": [ + "modelWithLoRAs" + ], + "color": "#223", + "bgcolor": "#335" + }, + { + "id": 3329, + "type": "GetNode", + "pos": [ + 1839.6929931640625, + 1049.8760986328125 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 55, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 4977 + ] + } + ], + "title": "Get_mask_feather", + "properties": {}, + "widgets_values": [ + "mask_feather" + ], + "color": "#1b4669", + "bgcolor": "#29699c" + }, + { + "id": 3330, + "type": "GetNode", + "pos": [ + 5540, + 1930 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 56, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "slot_index": 0, + "links": [ + 5589 + ] + } + ], + "title": "Get_mask_feather", + "properties": {}, + "widgets_values": [ + "mask_feather" + ], + "color": "#1b4669", + "bgcolor": "#29699c" + }, + { + "id": 3331, + "type": "GetNode", + "pos": [ + 5160, + 2940 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 57, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "slot_index": 0, + "links": [ + 4979 + ] + } + ], + "title": "Get_mask_feather", + "properties": {}, + "widgets_values": [ + "mask_feather" + ], + "color": "#1b4669", + "bgcolor": "#29699c" + }, + { + "id": 3333, + "type": "GetNode", + "pos": [ + 4460, + 2860 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 58, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "slot_index": 0, + "links": [ + 4980 + ] + } + ], + "title": "Get_batch", + "properties": {}, + "widgets_values": [ + "batch" + ], + "color": "#1b4669", + "bgcolor": "#29699c" + }, + { + "id": 3336, + "type": "GetNode", + "pos": [ + 4670, + 6740 + ], + "size": [ + 260, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 59, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 5703 + ] + } + ], + "title": "Get_loadImage_IP1", + "properties": {}, + "widgets_values": [ + "loadImage_IP1" + ], + "color": "#2a363b", + "bgcolor": "#3f5159" + }, + { + "id": 3339, + "type": "GetNode", + "pos": [ + 5860, + 6730 + ], + "size": [ + 250, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 60, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 5730 + ] + } + ], + "title": "Get_loadImage_IP2", + "properties": {}, + "widgets_values": [ + "loadImage_IP2" + ], + "color": "#2a363b", + "bgcolor": "#3f5159" + }, + { + "id": 3349, + "type": "GetNode", + "pos": [ + 4210, + 5110 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 61, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "slot_index": 0, + "links": [ + 4999 + ] + } + ], + "title": "Get_batch", + "properties": {}, + "widgets_values": [ + "batch" + ], + "color": "#1b4669", + "bgcolor": "#29699c" + }, + { + "id": 3359, + "type": "GetNode", + "pos": [ + 3640, + 4940 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 62, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "CLIP", + "type": "CLIP", + "slot_index": 0, + "links": [ + 5012 + ] + } + ], + "title": "Get_clip", + "properties": {}, + "widgets_values": [ + "clip" + ], + "color": "#432", + "bgcolor": "#653" + }, + { + "id": 3365, + "type": "GetNode", + "pos": [ + 3810, + 4890 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 63, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "slot_index": 0, + "links": [ + 5015 + ] + } + ], + "title": "Get_conditioning", + "properties": {}, + "widgets_values": [ + "conditioning" + ], + "color": "#332922", + "bgcolor": "#593930" + }, + { + "id": 3367, + "type": "GetNode", + "pos": [ + 3780, + 290 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 64, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "slot_index": 0, + "links": [ + 5017, + 5384 + ] + } + ], + "title": "Get_conditioning", + "properties": {}, + "widgets_values": [ + "conditioning" + ], + "color": "#332922", + "bgcolor": "#593930" + }, + { + "id": 3378, + "type": "GetNode", + "pos": [ + 4490, + 6270 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 65, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "CLIP_VISION", + "type": "CLIP_VISION", + "slot_index": 0, + "links": [ + 5051 + ] + } + ], + "title": "Get_model_clipVision", + "properties": {}, + "widgets_values": [ + "model_clipVision" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3379, + "type": "GetNode", + "pos": [ + 4510, + 6220 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 66, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "STYLE_MODEL", + "type": "STYLE_MODEL", + "slot_index": 0, + "links": [ + 5055 + ] + } + ], + "title": "Get_model_redux", + "properties": {}, + "widgets_values": [ + "model_redux" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3380, + "type": "GetNode", + "pos": [ + 3680, + 2640 + ], + "size": [ + 240, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 67, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "slot_index": 0, + "links": [ + 5039 + ] + } + ], + "title": "Get_conditioning", + "properties": {}, + "widgets_values": [ + "conditioning" + ], + "color": "#332922", + "bgcolor": "#593930" + }, + { + "id": 3395, + "type": "GetNode", + "pos": [ + 7170, + 6740 + ], + "size": [ + 240, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 68, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 5729 + ] + } + ], + "title": "Get_loadImage_IP3", + "properties": {}, + "widgets_values": [ + "loadImage_IP3" + ], + "color": "#2a363b", + "bgcolor": "#3f5159" + }, + { + "id": 3403, + "type": "GetNode", + "pos": [ + 4270, + 6350 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 69, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "VEC3", + "type": "VEC3", + "links": [ + 5082 + ] + } + ], + "title": "Get_ipadapter_strenght", + "properties": {}, + "widgets_values": [ + "ipadapter_strenght" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3456, + "type": "GetNode", + "pos": [ + 4200, + 5860 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 70, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "slot_index": 0, + "links": [ + 5171 + ] + } + ], + "title": "Get_batch", + "properties": {}, + "widgets_values": [ + "batch" + ], + "color": "#1b4669", + "bgcolor": "#29699c" + }, + { + "id": 3460, + "type": "GetNode", + "pos": [ + 4530, + 5670 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 71, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "slot_index": 0, + "links": [ + 5175 + ] + } + ], + "title": "Get_modelWithLoRAs", + "properties": {}, + "widgets_values": [ + "modelWithLoRAs" + ], + "color": "#223", + "bgcolor": "#335" + }, + { + "id": 3461, + "type": "GetNode", + "pos": [ + 3660, + 5790 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 72, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "CLIP", + "type": "CLIP", + "slot_index": 0, + "links": [ + 5181 + ] + } + ], + "title": "Get_clip", + "properties": {}, + "widgets_values": [ + "clip" + ], + "color": "#432", + "bgcolor": "#653" + }, + { + "id": 3463, + "type": "GetNode", + "pos": [ + 3810, + 5700 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 73, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "slot_index": 0, + "links": [ + 5166 + ] + } + ], + "title": "Get_conditioning", + "properties": {}, + "widgets_values": [ + "conditioning" + ], + "color": "#332922", + "bgcolor": "#593930" + }, + { + "id": 3488, + "type": "GetNode", + "pos": [ + 4450, + 6020 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 74, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "COMBO", + "type": "COMBO", + "links": [ + 5211 + ] + } + ], + "title": "Get_scheduler", + "properties": {}, + "widgets_values": [ + "scheduler" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3490, + "type": "GetNode", + "pos": [ + 4460, + 6060 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 75, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "COMBO", + "type": "COMBO", + "slot_index": 0, + "links": [ + 5210 + ] + } + ], + "title": "Get_sampler", + "properties": {}, + "widgets_values": [ + "sampler" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3506, + "type": "GetNode", + "pos": [ + -1260, + 340 + ], + "size": [ + 240, + 60 + ], + "flags": { + "collapsed": false + }, + "order": 76, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "slot_index": 0, + "links": [ + 5612 + ] + } + ], + "title": "Get_model_depth", + "properties": {}, + "widgets_values": [ + "model_depth" + ], + "color": "#223", + "bgcolor": "#335" + }, + { + "id": 3507, + "type": "GetNode", + "pos": [ + -1260, + 450 + ], + "size": [ + 220, + 60 + ], + "flags": { + "collapsed": false + }, + "order": 77, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "slot_index": 0, + "links": [ + 5613 + ] + } + ], + "title": "Get_model_canny", + "properties": {}, + "widgets_values": [ + "model_canny" + ], + "color": "#223", + "bgcolor": "#335" + }, + { + "id": 3553, + "type": "GetNode", + "pos": [ + 3629.0615234375, + 4212.4921875 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 78, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "slot_index": 0, + "links": [ + 5593 + ] + } + ], + "title": "Get_mask_feather", + "properties": {}, + "widgets_values": [ + "mask_feather" + ], + "color": "#1b4669", + "bgcolor": "#29699c" + }, + { + "id": 596, + "type": "GetNode", + "pos": [ + 5870, + 340 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 79, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "slot_index": 0, + "links": [ + 1360 + ] + } + ], + "title": "Get_seed", + "properties": {}, + "widgets_values": [ + "seed" + ], + "color": "#1b4669", + "bgcolor": "#29699c" + }, + { + "id": 1057, + "type": "GetNode", + "pos": [ + 7000, + 270 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 80, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "slot_index": 0, + "links": [ + 1775 + ] + } + ], + "title": "Get_seed", + "properties": {}, + "widgets_values": [ + "seed" + ], + "color": "#1b4669", + "bgcolor": "#29699c" + }, + { + "id": 1086, + "type": "GetNode", + "pos": [ + 3930, + 1140 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 81, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "slot_index": 0, + "links": [ + 4689 + ] + } + ], + "title": "Get_seed", + "properties": {}, + "widgets_values": [ + "seed" + ], + "color": "#1b4669", + "bgcolor": "#29699c" + }, + { + "id": 1300, + "type": "GetNode", + "pos": [ + 4560, + 2000 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 82, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "slot_index": 0, + "links": [ + 2018 + ] + } + ], + "title": "Get_batch", + "properties": {}, + "widgets_values": [ + "batch" + ], + "color": "#1b4669", + "bgcolor": "#29699c" + }, + { + "id": 1298, + "type": "GetNode", + "pos": [ + 4830, + 2040 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 83, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "slot_index": 0, + "links": [ + 4917 + ] + } + ], + "title": "Get_seed", + "properties": {}, + "widgets_values": [ + "seed" + ], + "color": "#1b4669", + "bgcolor": "#29699c" + }, + { + "id": 3227, + "type": "GetNode", + "pos": [ + 4460, + 2910 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 84, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "slot_index": 0, + "links": [ + 4793 + ] + } + ], + "title": "Get_seed", + "properties": {}, + "widgets_values": [ + "seed" + ], + "color": "#1b4669", + "bgcolor": "#29699c" + }, + { + "id": 708, + "type": "GetNode", + "pos": [ + 4911.81689453125, + 3398.91357421875 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 85, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "slot_index": 0, + "links": [ + 2173 + ] + } + ], + "title": "Get_seed", + "properties": {}, + "widgets_values": [ + "seed" + ], + "color": "#1b4669", + "bgcolor": "#29699c" + }, + { + "id": 1406, + "type": "GetNode", + "pos": [ + 4469.0615234375, + 4192.4921875 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 86, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "slot_index": 0, + "links": [ + 2231 + ] + } + ], + "title": "Get_seed", + "properties": {}, + "widgets_values": [ + "seed" + ], + "color": "#1b4669", + "bgcolor": "#29699c" + }, + { + "id": 3344, + "type": "GetNode", + "pos": [ + 3860, + 4810 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 87, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "VAE", + "type": "VAE", + "slot_index": 0, + "links": [ + 4996, + 5001 + ] + } + ], + "title": "Get_vae", + "properties": {}, + "widgets_values": [ + "vae" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 3370, + "type": "GetNode", + "pos": [ + 4460, + 5320 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 88, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "COMBO", + "type": "COMBO", + "links": [ + 5021 + ] + } + ], + "title": "Get_sampler", + "properties": {}, + "widgets_values": [ + "sampler" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3369, + "type": "GetNode", + "pos": [ + 4460, + 5260 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 89, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "COMBO", + "type": "COMBO", + "slot_index": 0, + "links": [ + 5020 + ] + } + ], + "title": "Get_scheduler", + "properties": {}, + "widgets_values": [ + "scheduler" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3348, + "type": "GetNode", + "pos": [ + 4480, + 5040 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 90, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "slot_index": 0, + "links": [ + 5007 + ] + } + ], + "title": "Get_seed", + "properties": {}, + "widgets_values": [ + "seed" + ], + "color": "#1b4669", + "bgcolor": "#29699c" + }, + { + "id": 3350, + "type": "GetNode", + "pos": [ + 4480, + 5090 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 91, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "slot_index": 0, + "links": [ + 5008 + ] + } + ], + "title": "Get_steps", + "properties": {}, + "widgets_values": [ + "steps" + ], + "color": "#1b4669", + "bgcolor": "#29699c" + }, + { + "id": 3355, + "type": "GetNode", + "pos": [ + 4450, + 4860 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 92, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "slot_index": 0, + "links": [ + 5003 + ] + } + ], + "title": "Get_modelWithLoRAs", + "properties": {}, + "widgets_values": [ + "modelWithLoRAs" + ], + "color": "#223", + "bgcolor": "#335" + }, + { + "id": 3455, + "type": "GetNode", + "pos": [ + 4450, + 5850 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 93, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "slot_index": 0, + "links": [ + 5179 + ] + } + ], + "title": "Get_seed", + "properties": {}, + "widgets_values": [ + "seed" + ], + "color": "#1b4669", + "bgcolor": "#29699c" + }, + { + "id": 3457, + "type": "GetNode", + "pos": [ + 4440, + 5900 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 94, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "slot_index": 0, + "links": [ + 5180 + ] + } + ], + "title": "Get_steps", + "properties": {}, + "widgets_values": [ + "steps" + ], + "color": "#1b4669", + "bgcolor": "#29699c" + }, + { + "id": 3342, + "type": "GetNode", + "pos": [ + 4090, + 1820 + ], + "size": [ + 250, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 95, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [ + 4992 + ] + } + ], + "title": "Get_conditioning", + "properties": {}, + "widgets_values": [ + "conditioning" + ], + "color": "#332922", + "bgcolor": "#593930" + }, + { + "id": 3555, + "type": "GetNode", + "pos": [ + 3629.0615234375, + 4162.4921875 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 96, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "MASK", + "type": "MASK", + "slot_index": 0, + "links": [ + 5592 + ] + } + ], + "title": "Get_mask", + "properties": {}, + "widgets_values": [ + "mask" + ], + "color": "#1c5715", + "bgcolor": "#1f401b" + }, + { + "id": 1106, + "type": "GetNode", + "pos": [ + -1260, + 550 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": false + }, + "order": 97, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "slot_index": 0, + "links": [ + 5614 + ] + } + ], + "title": "Get_model", + "properties": {}, + "widgets_values": [ + "model" + ], + "color": "#223", + "bgcolor": "#335" + }, + { + "id": 1115, + "type": "GetNode", + "pos": [ + 520, + 380 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 98, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "CLIP", + "type": "CLIP", + "slot_index": 0, + "links": [ + 3432 + ] + } + ], + "title": "Get_clip", + "properties": {}, + "widgets_values": [ + "clip" + ], + "color": "#432", + "bgcolor": "#653" + }, + { + "id": 3302, + "type": "GetNode", + "pos": [ + 600, + 360 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 99, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "slot_index": 0, + "links": [ + 4940 + ] + } + ], + "title": "Get_sendModel", + "properties": {}, + "widgets_values": [ + "sendModel" + ], + "color": "#223", + "bgcolor": "#335" + }, + { + "id": 1312, + "type": "GetNode", + "pos": [ + 4670, + 4400 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 100, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "slot_index": 0, + "links": [ + 2034 + ] + } + ], + "title": "Get_denoise", + "properties": {}, + "widgets_values": [ + "denoise" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1523, + "type": "GetNode", + "pos": [ + 4650, + 4270 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 101, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "COMBO", + "type": "COMBO", + "links": [ + 2341 + ] + } + ], + "title": "Get_sampler", + "properties": {}, + "widgets_values": [ + "sampler" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1328, + "type": "GetNode", + "pos": [ + 4520, + 4340 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 102, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "COMBO", + "type": "COMBO", + "links": [ + 2055 + ] + } + ], + "title": "Get_scheduler", + "properties": {}, + "widgets_values": [ + "scheduler" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3998, + "type": "GetNode", + "pos": [ + 3620, + 7070 + ], + "size": [ + 250, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 103, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "CONTROL_NET", + "type": "CONTROL_NET", + "slot_index": 0, + "links": [ + 6076 + ] + } + ], + "title": "Get_model_controlnet", + "properties": {}, + "widgets_values": [ + "model_controlnet" + ], + "color": "#156653", + "bgcolor": "#1c453b" + }, + { + "id": 3451, + "type": "GetNode", + "pos": [ + 3900, + 5580 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 104, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "VAE", + "type": "VAE", + "slot_index": 0, + "links": [ + 5168, + 5173 + ] + } + ], + "title": "Get_vae", + "properties": {}, + "widgets_values": [ + "vae" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 4044, + "type": "GetNode", + "pos": [ + 3620, + 7120 + ], + "size": [ + 210, + 50 + ], + "flags": { + "collapsed": true + }, + "order": 105, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "VAE", + "type": "VAE", + "slot_index": 0, + "links": [ + 6151 + ] + } + ], + "title": "Get_vae", + "properties": {}, + "widgets_values": [ + "vae" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 4047, + "type": "GetNode", + "pos": [ + 3620, + 7170 + ], + "size": [ + 210, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 106, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [ + 6114, + 6115 + ] + } + ], + "title": "Get_cond_redux", + "properties": {}, + "widgets_values": [ + "cond_redux" + ], + "color": "#332922", + "bgcolor": "#593930" + }, + { + "id": 4049, + "type": "GetNode", + "pos": [ + 4660, + 4070 + ], + "size": [ + 210, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 107, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "SEGS", + "type": "SEGS", + "links": [ + 6119 + ] + } + ], + "title": "Get_segs_cnApplied", + "properties": {}, + "widgets_values": [ + "segs_cnApplied" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3997, + "type": "GetNode", + "pos": [ + 3620, + 7410 + ], + "size": [ + 210, + 50 + ], + "flags": { + "collapsed": true + }, + "order": 108, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "MASK", + "type": "MASK", + "slot_index": 0, + "links": [ + 6121 + ] + } + ], + "title": "Get_mask_processed", + "properties": {}, + "widgets_values": [ + "mask_processed" + ], + "color": "#1c5715", + "bgcolor": "#1f401b" + }, + { + "id": 3990, + "type": "GetNode", + "pos": [ + 4130, + 7270 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 109, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "VEC3", + "type": "VEC3", + "slot_index": 0, + "links": [ + 6118 + ] + } + ], + "title": "Get_cn_control_line", + "properties": {}, + "widgets_values": [ + "cn_control_line" + ] + }, + { + "id": 4057, + "type": "GetNode", + "pos": [ + 6420, + 7230 + ], + "size": [ + 246.25416564941406, + 50 + ], + "flags": { + "collapsed": true + }, + "order": 110, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 6128 + ] + } + ], + "title": "Get_loadImage_ControlNet", + "properties": {}, + "widgets_values": [ + "loadImage_ControlNet" + ], + "color": "#2a363b", + "bgcolor": "#3f5159" + }, + { + "id": 3993, + "type": "GetNode", + "pos": [ + 5290, + 7260 + ], + "size": [ + 210, + 50 + ], + "flags": { + "collapsed": true + }, + "order": 111, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "VEC3", + "type": "VEC3", + "slot_index": 0, + "links": [ + 6137 + ] + } + ], + "title": "Get_cn_control_depth", + "properties": {}, + "widgets_values": [ + "cn_control_depth" + ] + }, + { + "id": 3994, + "type": "GetNode", + "pos": [ + 6960, + 7260 + ], + "size": [ + 210, + 50 + ], + "flags": { + "collapsed": true + }, + "order": 112, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "VEC3", + "type": "VEC3", + "slot_index": 0, + "links": [ + 6150 + ] + } + ], + "title": "Get_cn_control_pose", + "properties": {}, + "widgets_values": [ + "cn_control_pose" + ] + }, + { + "id": 3368, + "type": "GetNode", + "pos": [ + 3630, + 6560 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 113, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "CLIP", + "type": "CLIP", + "slot_index": 0, + "links": [ + 5752 + ] + } + ], + "title": "Get_clip", + "properties": {}, + "widgets_values": [ + "clip" + ], + "color": "#432", + "bgcolor": "#653" + }, + { + "id": 793, + "type": "GetNode", + "pos": [ + 3630, + 6600 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 114, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "STRING", + "type": "STRING", + "slot_index": 0, + "links": [ + 5753 + ] + } + ], + "title": "Get_tags", + "properties": {}, + "widgets_values": [ + "tags" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1319, + "type": "GetNode", + "pos": [ + 3630, + 6700 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 115, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "slot_index": 0, + "links": [ + 5755 + ] + } + ], + "title": "Get_guidance", + "properties": {}, + "widgets_values": [ + "guidance" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 724, + "type": "GetNode", + "pos": [ + 3630, + 6650 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 116, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "STRING", + "type": "STRING", + "slot_index": 0, + "links": [ + 5754 + ] + } + ], + "title": "Get_prompt", + "properties": {}, + "widgets_values": [ + "prompt" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1340, + "type": "GetNode", + "pos": [ + 3620, + 3510 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 117, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "slot_index": 0, + "links": [ + 4714, + 4715 + ] + } + ], + "title": "Get_res multiply", + "properties": {}, + "widgets_values": [ + "res multiply" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1339, + "type": "GetNode", + "pos": [ + 3630, + 3300 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 118, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "UPSCALE_MODEL", + "type": "UPSCALE_MODEL", + "slot_index": 0, + "links": [ + 2163 + ] + } + ], + "title": "Get_upscale_model", + "properties": {}, + "widgets_values": [ + "upscale_model" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 4081, + "type": "GetNode", + "pos": [ + 3610, + 7810 + ], + "size": [ + 210, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 119, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "VEC2", + "type": "VEC2", + "links": [ + 6185 + ] + } + ], + "title": "Get_canny_slider", + "properties": {}, + "widgets_values": [ + "canny_slider" + ] + }, + { + "id": 3458, + "type": "GetNode", + "pos": [ + 3620, + 7940 + ], + "size": [ + 211.00416564941406, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 120, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 5212, + 5482 + ] + } + ], + "title": "Get_Output - imgload_prep", + "properties": {}, + "widgets_values": [ + "Output - imgload_prep" + ], + "color": "#2a363b", + "bgcolor": "#3f5159" + }, + { + "id": 4067, + "type": "GetNode", + "pos": [ + 3610, + 7690 + ], + "size": [ + 211.00416564941406, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 121, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 6161 + ] + } + ], + "title": "Get_loadImage_ControlNet", + "properties": {}, + "widgets_values": [ + "loadImage_ControlNet" + ], + "color": "#2a363b", + "bgcolor": "#3f5159" + }, + { + "id": 3658, + "type": "GetNode", + "pos": [ + 3890, + 5850 + ], + "size": [ + 330, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 122, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 5452 + ] + } + ], + "title": "Get_canny_prep", + "properties": {}, + "widgets_values": [ + "canny_prep" + ], + "color": "#2a363b", + "bgcolor": "#3f5159" + }, + { + "id": 4105, + "type": "GetNode", + "pos": [ + 3840, + 5020 + ], + "size": [ + 210, + 50 + ], + "flags": { + "collapsed": true + }, + "order": 123, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 6220 + ] + } + ], + "title": "Get_depth_prep", + "properties": {}, + "widgets_values": [ + "depth_prep" + ], + "color": "#2a363b", + "bgcolor": "#3f5159" + }, + { + "id": 4088, + "type": "GetNode", + "pos": [ + 4700, + 7360 + ], + "size": [ + 210, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 124, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 6194, + 6195 + ] + } + ], + "title": "Get_canny_prep_cn", + "properties": {}, + "widgets_values": [ + "canny_prep_cn" + ], + "color": "#2a363b", + "bgcolor": "#3f5159" + }, + { + "id": 4106, + "type": "GetNode", + "pos": [ + 5530, + 7200 + ], + "size": [ + 210, + 50 + ], + "flags": { + "collapsed": true + }, + "order": 125, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 6221, + 6222 + ] + } + ], + "title": "Get_depth_prep_cn", + "properties": {}, + "widgets_values": [ + "depth_prep_cn" + ], + "color": "#2a363b", + "bgcolor": "#3f5159" + }, + { + "id": 4094, + "type": "GetNode", + "pos": [ + 5190, + 7680 + ], + "size": [ + 211.00416564941406, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 126, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 6214 + ] + } + ], + "title": "Get_loadImage_ControlNet", + "properties": {}, + "widgets_values": [ + "loadImage_ControlNet" + ], + "color": "#2a363b", + "bgcolor": "#3f5159" + }, + { + "id": 4093, + "type": "GetNode", + "pos": [ + 5180, + 7950 + ], + "size": [ + 210.25416564941406, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 127, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 6217 + ] + } + ], + "title": "Get_Output - imgload_prep", + "properties": {}, + "widgets_values": [ + "Output - imgload_prep" + ], + "color": "#2a363b", + "bgcolor": "#3f5159" + }, + { + "id": 645, + "type": "GetNode", + "pos": [ + 4720, + 4110 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 128, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "BASIC_PIPE", + "type": "BASIC_PIPE", + "slot_index": 0, + "links": [ + 3152 + ] + } + ], + "title": "Get_pipe", + "properties": {}, + "widgets_values": [ + "pipe" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1410, + "type": "GetNode", + "pos": [ + 3630, + 4040 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 129, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "slot_index": 0, + "links": [ + 2212 + ] + } + ], + "title": "Get_batch", + "properties": {}, + "widgets_values": [ + "batch" + ], + "color": "#1b4669", + "bgcolor": "#29699c" + }, + { + "id": 1325, + "type": "GetNode", + "pos": [ + 3620, + 3940 + ], + "size": [ + 268.79998779296875, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 130, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 2202, + 5638 + ] + } + ], + "title": "Get_Output - imgload_prep", + "properties": {}, + "widgets_values": [ + "Output - imgload_prep" + ], + "color": "#2a363b", + "bgcolor": "#3f5159" + }, + { + "id": 3833, + "type": "GetNode", + "pos": [ + -3820, + 290 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 131, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 6223 + ] + } + ], + "title": "Get_send", + "properties": {}, + "widgets_values": [ + "send" + ], + "color": "#2a363b", + "bgcolor": "#3f5159" + }, + { + "id": 717, + "type": "GetNode", + "pos": [ + 840, + 180 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 132, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 3426, + 4414 + ] + } + ], + "title": "Get_final", + "properties": {}, + "widgets_values": [ + "final" + ], + "color": "#2a363b", + "bgcolor": "#3f5159" + }, + { + "id": 586, + "type": "ModelSamplingFlux", + "pos": [ + 5300, + 370 + ], + "size": [ + 250, + 190 + ], + "flags": { + "collapsed": false + }, + "order": 282, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 5045 + }, + { + "name": "max_shift", + "type": "FLOAT", + "widget": { + "name": "max_shift" + }, + "link": 2404 + }, + { + "name": "width", + "type": "INT", + "widget": { + "name": "width" + }, + "link": 3449 + }, + { + "name": "height", + "type": "INT", + "widget": { + "name": "height" + }, + "link": 3450 + } + ], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "slot_index": 0, + "links": [ + 1123, + 1424, + 1489 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "ModelSamplingFlux" + }, + "widgets_values": [ + 1.1500000000000001, + 0.5, + 16, + 704 + ] + }, + { + "id": 589, + "type": "BasicGuider", + "pos": [ + 5940, + 410 + ], + "size": [ + 161.1999969482422, + 50 + ], + "flags": { + "collapsed": true + }, + "order": 328, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 1424 + }, + { + "name": "conditioning", + "type": "CONDITIONING", + "link": 5237 + } + ], + "outputs": [ + { + "name": "GUIDER", + "type": "GUIDER", + "slot_index": 0, + "links": [ + 1118 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "BasicGuider" + }, + "widgets_values": [] + }, + { + "id": 590, + "type": "SamplerCustomAdvanced", + "pos": [ + 6280, + 410 + ], + "size": [ + 240, + 110 + ], + "flags": { + "collapsed": true + }, + "order": 360, + "mode": 0, + "inputs": [ + { + "name": "noise", + "type": "NOISE", + "link": 1371 + }, + { + "name": "guider", + "type": "GUIDER", + "link": 1118 + }, + { + "name": "sampler", + "type": "SAMPLER", + "link": 2334 + }, + { + "name": "sigmas", + "type": "SIGMAS", + "link": 1120 + }, + { + "name": "latent_image", + "type": "LATENT", + "link": 5329 + } + ], + "outputs": [ + { + "name": "output", + "type": "LATENT", + "slot_index": 0, + "links": [] + }, + { + "name": "denoised_output", + "type": "LATENT", + "slot_index": 1, + "links": [ + 1474 + ] + } + ], + "title": "Sampler", + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "SamplerCustomAdvanced" + }, + "widgets_values": [] + }, + { + "id": 591, + "type": "RandomNoise", + "pos": [ + 6030, + 340 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 211, + "mode": 0, + "inputs": [ + { + "name": "noise_seed", + "type": "INT", + "widget": { + "name": "noise_seed" + }, + "link": 1360 + } + ], + "outputs": [ + { + "name": "NOISE", + "type": "NOISE", + "slot_index": 0, + "links": [ + 1371 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "RandomNoise" + }, + "widgets_values": [ + 1, + "fixed" + ] + }, + { + "id": 593, + "type": "BasicScheduler", + "pos": [ + 5860, + 460 + ], + "size": [ + 220, + 146 + ], + "flags": { + "collapsed": false + }, + "order": 327, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 1123 + }, + { + "name": "scheduler", + "type": "COMBO", + "widget": { + "name": "scheduler" + }, + "link": 2037 + }, + { + "name": "steps", + "type": "INT", + "widget": { + "name": "steps" + }, + "link": 2038 + } + ], + "outputs": [ + { + "name": "SIGMAS", + "type": "SIGMAS", + "slot_index": 0, + "links": [ + 1120, + 5330 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "BasicScheduler" + }, + "widgets_values": [ + "beta", + 20, + 1 + ] + }, + { + "id": 594, + "type": "VAELoader", + "pos": [ + 2997.352294921875, + 293.5 + ], + "size": [ + 320, + 60 + ], + "flags": { + "collapsed": false + }, + "order": 133, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "VAE", + "type": "VAE", + "slot_index": 0, + "links": [ + 4425 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "VAELoader" + }, + "widgets_values": [ + "ae.sft" + ] + }, + { + "id": 609, + "type": "VAEDecode", + "pos": [ + 6480, + 440 + ], + "size": [ + 170, + 50 + ], + "flags": { + "collapsed": true + }, + "order": 380, + "mode": 0, + "inputs": [ + { + "name": "samples", + "type": "LATENT", + "link": 1474 + }, + { + "name": "vae", + "type": "VAE", + "link": 3499 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 1538 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "VAEDecode" + }, + "widgets_values": [] + }, + { + "id": 624, + "type": "Save Image Grid (mtb)", + "pos": [ + -2320, + 230 + ], + "size": [ + 240, + 190 + ], + "flags": { + "collapsed": false + }, + "order": 278, + "mode": 4, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 2380 + }, + { + "name": "filename_prefix", + "type": "STRING", + "widget": { + "name": "filename_prefix" + }, + "link": 4781 + } + ], + "outputs": [], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-mtb", + "ver": "8bf3545fec5b2a180607d40394b025a1e09c14b6", + "Node name for S&R": "Save Image Grid (mtb)" + }, + "widgets_values": [ + "stickFigures", + false + ] + }, + { + "id": 641, + "type": "ToBasicPipe", + "pos": [ + 4016.249755859375, + 329.36273193359375 + ], + "size": [ + 240, + 110 + ], + "flags": { + "collapsed": true + }, + "order": 375, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 5326 + }, + { + "name": "clip", + "type": "CLIP", + "link": 5325 + }, + { + "name": "vae", + "type": "VAE", + "link": 5324 + }, + { + "name": "positive", + "type": "CONDITIONING", + "link": 5017 + }, + { + "name": "negative", + "type": "CONDITIONING", + "link": 3212 + } + ], + "outputs": [ + { + "name": "basic_pipe", + "type": "BASIC_PIPE", + "slot_index": 0, + "links": [ + 1187 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui-impact-pack", + "ver": "0e3e6a193a68748b5e68cfd19fb6c7d92b2fac57", + "Node name for S&R": "ToBasicPipe" + }, + "widgets_values": [] + }, + { + "id": 697, + "type": "ModelSamplingFlux", + "pos": [ + 4870, + 3310 + ], + "size": [ + 210, + 150 + ], + "flags": { + "collapsed": true + }, + "order": 271, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 1608 + }, + { + "name": "max_shift", + "type": "FLOAT", + "widget": { + "name": "max_shift" + }, + "link": 2406 + } + ], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "slot_index": 0, + "links": [ + 2169 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "ModelSamplingFlux" + }, + "widgets_values": [ + 1.1500000000000001, + 0.5, + 1024, + 1024 + ] + }, + { + "id": 834, + "type": "Reroute", + "pos": [ + 6850, + 240 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 361, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 1490 + } + ], + "outputs": [ + { + "name": "", + "type": "MODEL", + "slot_index": 0, + "links": [ + 2087 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 837, + "type": "Reroute", + "pos": [ + 5737.9697265625, + 223.6033172607422 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 329, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 1489 + } + ], + "outputs": [ + { + "name": "", + "type": "MODEL", + "slot_index": 0, + "links": [ + 1490 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 921, + "type": "Reroute", + "pos": [ + 6850, + 280 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 295, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5238 + } + ], + "outputs": [ + { + "name": "", + "type": "CONDITIONING", + "slot_index": 0, + "links": [ + 2088 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 932, + "type": "FromBasicPipe_v2", + "pos": [ + 4696.86669921875, + 3370.522705078125 + ], + "size": [ + 270, + 130 + ], + "flags": { + "collapsed": true + }, + "order": 183, + "mode": 0, + "inputs": [ + { + "name": "basic_pipe", + "type": "BASIC_PIPE", + "link": 1599 + } + ], + "outputs": [ + { + "name": "basic_pipe", + "type": "BASIC_PIPE", + "slot_index": 0, + "links": [] + }, + { + "name": "model", + "type": "MODEL", + "slot_index": 1, + "links": [ + 1608 + ] + }, + { + "name": "clip", + "type": "CLIP", + "links": null + }, + { + "name": "vae", + "type": "VAE", + "slot_index": 3, + "links": [ + 2172 + ] + }, + { + "name": "positive", + "type": "CONDITIONING", + "slot_index": 4, + "links": [ + 5369 + ] + }, + { + "name": "negative", + "type": "CONDITIONING", + "slot_index": 5, + "links": [ + 2171 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui-impact-pack", + "ver": "0e3e6a193a68748b5e68cfd19fb6c7d92b2fac57", + "Node name for S&R": "FromBasicPipe_v2" + }, + "widgets_values": [] + }, + { + "id": 963, + "type": "VAEEncode", + "pos": [ + 3843.34716796875, + 972.2465209960938 + ], + "size": [ + 210, + 50 + ], + "flags": { + "collapsed": true + }, + "order": 189, + "mode": 0, + "inputs": [ + { + "name": "pixels", + "type": "IMAGE", + "link": 2071 + }, + { + "name": "vae", + "type": "VAE", + "link": 1680 + } + ], + "outputs": [ + { + "name": "LATENT", + "type": "LATENT", + "slot_index": 0, + "links": [ + 1798 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "VAEEncode" + }, + "widgets_values": [] + }, + { + "id": 1051, + "type": "SamplerCustomAdvanced", + "pos": [ + 7311.9658203125, + 267.23828125 + ], + "size": [ + 240, + 110 + ], + "flags": { + "collapsed": false + }, + "order": 398, + "mode": 0, + "inputs": [ + { + "name": "noise", + "type": "NOISE", + "link": 1776 + }, + { + "name": "guider", + "type": "GUIDER", + "link": 2089 + }, + { + "name": "sampler", + "type": "SAMPLER", + "link": 2337 + }, + { + "name": "sigmas", + "type": "SIGMAS", + "link": 1769 + }, + { + "name": "latent_image", + "type": "LATENT", + "link": 2105 + } + ], + "outputs": [ + { + "name": "output", + "type": "LATENT", + "slot_index": 0, + "links": [ + 1773 + ] + }, + { + "name": "denoised_output", + "type": "LATENT", + "slot_index": 1, + "links": [ + 3722 + ] + } + ], + "title": "Sampler", + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "SamplerCustomAdvanced" + }, + "widgets_values": [], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 1052, + "type": "SplitSigmasDenoise", + "pos": [ + 7064.74609375, + 454.0147705078125 + ], + "size": [ + 210, + 80 + ], + "flags": { + "collapsed": false + }, + "order": 379, + "mode": 0, + "inputs": [ + { + "name": "sigmas", + "type": "SIGMAS", + "link": 2092 + } + ], + "outputs": [ + { + "name": "high_sigmas", + "type": "SIGMAS", + "slot_index": 0, + "links": [ + 1769 + ] + }, + { + "name": "low_sigmas", + "type": "SIGMAS", + "slot_index": 1, + "links": [ + 3717 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "SplitSigmasDenoise" + }, + "widgets_values": [ + 0.45 + ] + }, + { + "id": 1053, + "type": "SamplerCustomAdvanced", + "pos": [ + 8094.74609375, + 294.0147705078125 + ], + "size": [ + 240, + 110 + ], + "flags": { + "collapsed": false + }, + "order": 429, + "mode": 0, + "inputs": [ + { + "name": "noise", + "type": "NOISE", + "link": 1770 + }, + { + "name": "guider", + "type": "GUIDER", + "link": 2090 + }, + { + "name": "sampler", + "type": "SAMPLER", + "link": 2338 + }, + { + "name": "sigmas", + "type": "SIGMAS", + "link": 3718 + }, + { + "name": "latent_image", + "type": "LATENT", + "link": 1772 + } + ], + "outputs": [ + { + "name": "output", + "type": "LATENT", + "slot_index": 0, + "links": [] + }, + { + "name": "denoised_output", + "type": "LATENT", + "slot_index": 1, + "links": [ + 1787 + ] + } + ], + "title": "Sampler", + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "SamplerCustomAdvanced" + }, + "widgets_values": [], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1054, + "type": "DisableNoise", + "pos": [ + 7904.74609375, + 204.01480102539062 + ], + "size": [ + 210, + 30 + ], + "flags": { + "collapsed": true + }, + "order": 134, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "NOISE", + "type": "NOISE", + "links": [ + 1770 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "DisableNoise" + }, + "widgets_values": [], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1055, + "type": "InjectLatentNoise+", + "pos": [ + 7674.74609375, + 264.0147705078125 + ], + "size": [ + 260, + 150 + ], + "flags": {}, + "order": 428, + "mode": 0, + "inputs": [ + { + "name": "latent", + "type": "LATENT", + "link": 1773 + }, + { + "name": "mask", + "shape": 7, + "type": "MASK", + "link": 2412 + } + ], + "outputs": [ + { + "name": "LATENT", + "type": "LATENT", + "slot_index": 0, + "links": [ + 1772 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui_essentials", + "ver": "33ff89fd354d8ec3ab6affb605a79a931b445d99", + "Node name for S&R": "InjectLatentNoise+" + }, + "widgets_values": [ + 239901217163557, + "randomize", + 2.5, + "false" + ] + }, + { + "id": 1056, + "type": "RandomNoise", + "pos": [ + 7131.9658203125, + 267.23828125 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 212, + "mode": 0, + "inputs": [ + { + "name": "noise_seed", + "type": "INT", + "widget": { + "name": "noise_seed" + }, + "link": 1775 + } + ], + "outputs": [ + { + "name": "NOISE", + "type": "NOISE", + "slot_index": 0, + "links": [ + 1776 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "RandomNoise" + }, + "widgets_values": [ + 1, + "fixed" + ] + }, + { + "id": 1060, + "type": "VAEDecode", + "pos": [ + 8384.751953125, + 254.0147705078125 + ], + "size": [ + 170, + 50 + ], + "flags": { + "collapsed": true + }, + "order": 430, + "mode": 0, + "inputs": [ + { + "name": "samples", + "type": "LATENT", + "link": 1787 + }, + { + "name": "vae", + "type": "VAE", + "link": 1786 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 1783 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "VAEDecode" + }, + "widgets_values": [] + }, + { + "id": 1073, + "type": "RepeatLatentBatch", + "pos": [ + 4013.34716796875, + 1012.2463989257812 + ], + "size": [ + 230, + 78 + ], + "flags": { + "collapsed": true + }, + "order": 273, + "mode": 0, + "inputs": [ + { + "name": "samples", + "type": "LATENT", + "link": 1798 + }, + { + "name": "amount", + "type": "INT", + "widget": { + "name": "amount" + }, + "link": 1920 + } + ], + "outputs": [ + { + "name": "LATENT", + "type": "LATENT", + "slot_index": 0, + "links": [ + 1800 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "RepeatLatentBatch" + }, + "widgets_values": [ + 1 + ] + }, + { + "id": 1074, + "type": "VAEDecode", + "pos": [ + 4617.0771484375, + 876.7098999023438 + ], + "size": [ + 170, + 50 + ], + "flags": { + "collapsed": true + }, + "order": 355, + "mode": 0, + "inputs": [ + { + "name": "samples", + "type": "LATENT", + "link": 1803 + }, + { + "name": "vae", + "type": "VAE", + "link": 1804 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 1802 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "VAEDecode" + }, + "widgets_values": [] + }, + { + "id": 1090, + "type": "SDXLEmptyLatentSizePicker+", + "pos": [ + 4526.2509765625, + 379.36273193359375 + ], + "size": [ + 230, + 170 + ], + "flags": { + "collapsed": false + }, + "order": 195, + "mode": 0, + "inputs": [ + { + "name": "resolution", + "type": "COMBO", + "widget": { + "name": "resolution" + }, + "link": 3448 + }, + { + "name": "batch_size", + "type": "INT", + "widget": { + "name": "batch_size" + }, + "link": 3214 + } + ], + "outputs": [ + { + "name": "LATENT", + "type": "LATENT", + "slot_index": 0, + "links": [ + 4514, + 5327 + ] + }, + { + "name": "width", + "type": "INT", + "slot_index": 1, + "links": [ + 3449, + 3543 + ] + }, + { + "name": "height", + "type": "INT", + "slot_index": 2, + "links": [ + 3450, + 3544 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui_essentials", + "ver": "33ff89fd354d8ec3ab6affb605a79a931b445d99", + "Node name for S&R": "SDXLEmptyLatentSizePicker+" + }, + "widgets_values": [ + "1024x1024 (1.0)", + 2, + 0, + 0 + ] + }, + { + "id": 1128, + "type": "DepthAnythingV2Preprocessor", + "pos": [ + 7334.07373046875, + -147.37660217285156 + ], + "size": [ + 310, + 82 + ], + "flags": {}, + "order": 419, + "mode": 4, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 1923 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 1867 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui_controlnet_aux", + "ver": "1e9eac6377c882da8bb360c7544607036904362c", + "Node name for S&R": "DepthAnythingV2Preprocessor" + }, + "widgets_values": [ + "depth_anything_v2_vitl.pth", + 512 + ] + }, + { + "id": 1129, + "type": "RemapImageRange", + "pos": [ + 7674.07373046875, + -147.37660217285156 + ], + "size": [ + 220, + 110 + ], + "flags": {}, + "order": 421, + "mode": 4, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 1867 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 1868, + 1871 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui-kjnodes", + "ver": "d835ac96042394299f76793544ee3643fd4b0457", + "Node name for S&R": "RemapImageRange" + }, + "widgets_values": [ + -1, + 5, + true + ] + }, + { + "id": 1130, + "type": "ImageToMask", + "pos": [ + 7684.07373046875, + 2.623236656188965 + ], + "size": [ + 230, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 423, + "mode": 4, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 1868 + } + ], + "outputs": [ + { + "name": "MASK", + "type": "MASK", + "slot_index": 0, + "links": [ + 3723 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "ImageToMask" + }, + "widgets_values": [ + "red" + ] + }, + { + "id": 1131, + "type": "PreviewImage", + "pos": [ + 7904.07373046875, + -157.37660217285156 + ], + "size": [ + 220, + 210 + ], + "flags": {}, + "order": 424, + "mode": 4, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 1871 + } + ], + "outputs": [], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "PreviewImage" + }, + "widgets_values": [] + }, + { + "id": 1134, + "type": "VAEDecode", + "pos": [ + 7504.07373046875, + -7.376744747161865 + ], + "size": [ + 140, + 50 + ], + "flags": { + "collapsed": true + }, + "order": 415, + "mode": 4, + "inputs": [ + { + "name": "samples", + "type": "LATENT", + "link": 2278 + }, + { + "name": "vae", + "type": "VAE", + "link": 1879 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 1923 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "VAEDecode" + }, + "widgets_values": [] + }, + { + "id": 1279, + "type": "GuidanceSlider", + "pos": [ + 480, + 840 + ], + "size": [ + 310, + 60 + ], + "flags": { + "pinned": true + }, + "order": 135, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "slot_index": 0, + "links": [ + 2001 + ] + } + ], + "title": "Guidance", + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "aux_id": "robertvoy/Comfyui-Flux-Continuum", + "ver": "19b70c33f872fe4e57dea291bbdd0f5559258a14", + "Node name for S&R": "GuidanceSlider" + }, + "widgets_values": [ + 2.4632880742680037 + ], + "tabContents": [ + { + "value": 2.4632880742680037 + }, + { + "value": 3.0086776144413783 + }, + { + "value": 30 + } + ], + "activeTab": 0 + }, + { + "id": 1285, + "type": "SomethingToString", + "pos": [ + 4117.0771484375, + 1266.7099609375 + ], + "size": [ + 210, + 82 + ], + "flags": { + "collapsed": true + }, + "order": 186, + "mode": 0, + "inputs": [ + { + "name": "input", + "type": "*", + "link": 2003 + } + ], + "outputs": [ + { + "name": "STRING", + "type": "STRING", + "slot_index": 0, + "links": [ + 2004 + ] + } + ], + "title": "To String", + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui-kjnodes", + "ver": "d835ac96042394299f76793544ee3643fd4b0457", + "Node name for S&R": "SomethingToString" + }, + "widgets_values": [ + "", + "" + ] + }, + { + "id": 1288, + "type": "SomethingToString", + "pos": [ + 4127.0771484375, + 1306.7099609375 + ], + "size": [ + 210, + 82 + ], + "flags": { + "collapsed": true + }, + "order": 187, + "mode": 0, + "inputs": [ + { + "name": "input", + "type": "*", + "link": 2006 + } + ], + "outputs": [ + { + "name": "STRING", + "type": "STRING", + "slot_index": 0, + "links": [ + 2007 + ] + } + ], + "title": "To String", + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui-kjnodes", + "ver": "d835ac96042394299f76793544ee3643fd4b0457", + "Node name for S&R": "SomethingToString" + }, + "widgets_values": [ + "", + "" + ] + }, + { + "id": 1293, + "type": "RepeatLatentBatch", + "pos": [ + 4760, + 1920 + ], + "size": [ + 210, + 78 + ], + "flags": { + "collapsed": true + }, + "order": 333, + "mode": 0, + "inputs": [ + { + "name": "samples", + "type": "LATENT", + "link": 4919 + }, + { + "name": "amount", + "type": "INT", + "widget": { + "name": "amount" + }, + "link": 2018 + } + ], + "outputs": [ + { + "name": "LATENT", + "type": "LATENT", + "slot_index": 0, + "links": [ + 4920 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "RepeatLatentBatch" + }, + "widgets_values": [ + 1 + ] + }, + { + "id": 1358, + "type": "BasicGuider", + "pos": [ + 7014.74609375, + 314.0147705078125 + ], + "size": [ + 240, + 50 + ], + "flags": { + "collapsed": true + }, + "order": 381, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 2087 + }, + { + "name": "conditioning", + "type": "CONDITIONING", + "link": 2088 + } + ], + "outputs": [ + { + "name": "GUIDER", + "type": "GUIDER", + "slot_index": 0, + "links": [ + 2089, + 2090 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "BasicGuider" + }, + "widgets_values": [] + }, + { + "id": 1359, + "type": "Reroute", + "pos": [ + 6860, + 460 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 359, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5330 + } + ], + "outputs": [ + { + "name": "", + "type": "SIGMAS", + "slot_index": 0, + "links": [ + 2092 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 1404, + "type": "RepeatImageBatch", + "pos": [ + 3909.0615234375, + 4042.49658203125 + ], + "size": [ + 210, + 78 + ], + "flags": { + "collapsed": true + }, + "order": 231, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 2202 + }, + { + "name": "amount", + "type": "INT", + "widget": { + "name": "amount" + }, + "link": 2212 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 2209 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "RepeatImageBatch" + }, + "widgets_values": [ + 2 + ] + }, + { + "id": 1405, + "type": "ListCounter //Inspire", + "pos": [ + 4629.0615234375, + 4152.4921875 + ], + "size": [ + 210, + 78 + ], + "flags": { + "collapsed": true + }, + "order": 352, + "mode": 0, + "inputs": [ + { + "name": "signal", + "type": "*", + "link": 2210 + }, + { + "name": "base_value", + "type": "INT", + "widget": { + "name": "base_value" + }, + "link": 2231 + } + ], + "outputs": [ + { + "name": "INT", + "type": "INT", + "slot_index": 0, + "links": [ + 2243 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui-inspire-pack", + "ver": "ca5d942cefa0f75e3c4e778f75f71811f4abb65f", + "Node name for S&R": "ListCounter //Inspire" + }, + "widgets_values": [ + 0 + ] + }, + { + "id": 1408, + "type": "ImageListToBatch+", + "pos": [ + 5800, + 4050 + ], + "size": [ + 186.64999389648438, + 30 + ], + "flags": { + "collapsed": true + }, + "order": 406, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 5633 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 2206 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui_essentials", + "ver": "33ff89fd354d8ec3ab6affb605a79a931b445d99", + "Node name for S&R": "ImageListToBatch+" + }, + "widgets_values": [] + }, + { + "id": 1411, + "type": "RebatchImages", + "pos": [ + 4409.0615234375, + 4042.49658203125 + ], + "size": [ + 270, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 317, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 2209 + } + ], + "outputs": [ + { + "name": "IMAGE", + "shape": 6, + "type": "IMAGE", + "slot_index": 0, + "links": [ + 2210, + 2211 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "RebatchImages" + }, + "widgets_values": [ + 1 + ] + }, + { + "id": 1470, + "type": "Reroute (rgthree)", + "pos": [ + 7584.07373046875, + 32.6232795715332 + ], + "size": [ + 40, + 30 + ], + "flags": {}, + "order": 408, + "mode": 4, + "inputs": [ + { + "dir": 2, + "label": " ", + "name": "", + "type": "*", + "link": 3722 + } + ], + "outputs": [ + { + "dir": 1, + "label": " ", + "name": "denoised_output", + "type": "LATENT", + "slot_index": 0, + "links": [ + 2278 + ] + } + ], + "properties": { + "resizable": true, + "size": [ + 40, + 30 + ], + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "connections_layout": [ + "Bottom", + "Top" + ] + } + }, + { + "id": 1500, + "type": "KSamplerSelect", + "pos": [ + 6040, + 650 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 192, + "mode": 0, + "inputs": [ + { + "name": "sampler_name", + "type": "COMBO", + "widget": { + "name": "sampler_name" + }, + "link": 2333 + } + ], + "outputs": [ + { + "name": "SAMPLER", + "type": "SAMPLER", + "slot_index": 0, + "links": [ + 2334, + 2335 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "KSamplerSelect" + }, + "widgets_values": [ + "euler" + ] + }, + { + "id": 1624, + "type": "SomethingToString", + "pos": [ + 4127.0771484375, + 1386.7099609375 + ], + "size": [ + 210, + 82 + ], + "flags": { + "collapsed": true + }, + "order": 194, + "mode": 0, + "inputs": [ + { + "name": "input", + "type": "*", + "link": 2409 + } + ], + "outputs": [ + { + "name": "STRING", + "type": "STRING", + "slot_index": 0, + "links": [ + 2410 + ] + } + ], + "title": "To String", + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui-kjnodes", + "ver": "d835ac96042394299f76793544ee3643fd4b0457", + "Node name for S&R": "SomethingToString" + }, + "widgets_values": [ + "", + "" + ] + }, + { + "id": 1627, + "type": "Reroute (rgthree)", + "pos": [ + 7634.07373046875, + 32.6232795715332 + ], + "size": [ + 40, + 30 + ], + "flags": {}, + "order": 426, + "mode": 4, + "inputs": [ + { + "dir": 1, + "label": " ", + "name": "", + "type": "*", + "link": 3723 + } + ], + "outputs": [ + { + "dir": 2, + "label": " ", + "name": "MASK", + "type": "MASK", + "slot_index": 0, + "links": [ + 2412 + ] + } + ], + "properties": { + "resizable": true, + "size": [ + 40, + 30 + ], + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "connections_layout": [ + "Top", + "Bottom" + ] + } + }, + { + "id": 1629, + "type": "MaxShiftSlider", + "pos": [ + 480, + 940 + ], + "size": [ + 310, + 60 + ], + "flags": { + "collapsed": false, + "pinned": true + }, + "order": 136, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "slot_index": 0, + "links": [ + 2418 + ] + } + ], + "title": "Max Shift", + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "aux_id": "robertvoy/Comfyui-Flux-Continuum", + "ver": "19b70c33f872fe4e57dea291bbdd0f5559258a14", + "Node name for S&R": "MaxShiftSlider" + }, + "widgets_values": [ + 1.1500000000000001 + ] + }, + { + "id": 2211, + "type": "CLIPTextEncode", + "pos": [ + 3846.249755859375, + 429.36273193359375 + ], + "size": [ + 210, + 88 + ], + "flags": { + "collapsed": true + }, + "order": 354, + "mode": 0, + "inputs": [ + { + "name": "clip", + "type": "CLIP", + "link": 3509 + } + ], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "slot_index": 0, + "links": [ + 3212 + ] + } + ], + "title": "Negative", + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "CLIPTextEncode" + }, + "widgets_values": [ + "" + ] + }, + { + "id": 2427, + "type": "ResolutionPicker", + "pos": [ + 480, + 1330 + ], + "size": [ + 310, + 60 + ], + "flags": { + "pinned": true + }, + "order": 137, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "resolution", + "type": "COMBO", + "slot_index": 0, + "links": [ + 3447 + ] + } + ], + "title": "Latent Resolution", + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "aux_id": "robertvoy/Comfyui-Flux-Continuum", + "ver": "19b70c33f872fe4e57dea291bbdd0f5559258a14", + "Node name for S&R": "ResolutionPicker" + }, + "widgets_values": [ + "1344x768 (1.75)" + ] + }, + { + "id": 2435, + "type": "SamplerParameterPacker", + "pos": [ + 480, + 620 + ], + "size": [ + 310, + 82 + ], + "flags": { + "pinned": true + }, + "order": 138, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "sampler_params", + "type": "SAMPLER_PARAMS", + "slot_index": 0, + "links": [ + 3460 + ] + } + ], + "title": "Sampler Parameters", + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "aux_id": "robertvoy/Comfyui-Flux-Continuum", + "ver": "19b70c33f872fe4e57dea291bbdd0f5559258a14", + "Node name for S&R": "SamplerParameterPacker" + }, + "widgets_values": [ + "deis", + "beta" + ], + "tabContents": [ + { + "sampler": "deis", + "scheduler": "beta" + }, + { + "sampler": "ddim", + "scheduler": "simple" + }, + { + "sampler": "deis", + "scheduler": "ddim_uniform" + } + ], + "activeTab": 0 + }, + { + "id": 2436, + "type": "SamplerParameterUnpacker", + "pos": [ + -1820, + 300 + ], + "size": [ + 370, + 90 + ], + "flags": { + "collapsed": true + }, + "order": 196, + "mode": 0, + "inputs": [ + { + "name": "sampler_params", + "type": "SAMPLER_PARAMS", + "link": 3461 + } + ], + "outputs": [ + { + "name": "sampler", + "type": "COMBO", + "slot_index": 0, + "links": [ + 3463 + ] + }, + { + "name": "sampler_name", + "type": "STRING", + "slot_index": 1, + "links": [ + 3465 + ] + }, + { + "name": "scheduler", + "type": "COMBO", + "slot_index": 2, + "links": [ + 3464 + ] + }, + { + "name": "scheduler_name", + "type": "STRING", + "slot_index": 3, + "links": [ + 3466 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "aux_id": "robertvoy/Comfyui-Flux-Continuum", + "ver": "19b70c33f872fe4e57dea291bbdd0f5559258a14", + "Node name for S&R": "SamplerParameterUnpacker" + }, + "widgets_values": [] + }, + { + "id": 2476, + "type": "Reroute", + "pos": [ + 3696.249755859375, + 399.36273193359375 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 321, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5319 + } + ], + "outputs": [ + { + "name": "", + "type": "CLIP", + "slot_index": 0, + "links": [ + 3509, + 5325 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 2600, + "type": "Reroute", + "pos": [ + 7944.74609375, + 484.0147705078125 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 396, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 3717 + } + ], + "outputs": [ + { + "name": "", + "type": "SIGMAS", + "slot_index": 0, + "links": [ + 3718 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 3127, + "type": "Note", + "pos": [ + 7590, + -320 + ], + "size": [ + 210, + 88 + ], + "flags": {}, + "order": 139, + "mode": 0, + "inputs": [], + "outputs": [], + "properties": {}, + "widgets_values": [ + "optional mask for details.\nuse remap range to guide where you want more detail." + ], + "color": "#432", + "bgcolor": "#653" + }, + { + "id": 3164, + "type": "OutputGet", + "pos": [ + 480, + 190 + ], + "size": [ + 310, + 70 + ], + "flags": { + "collapsed": false, + "pinned": true + }, + "order": 140, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 4941 + ] + } + ], + "title": "Output - txt2img", + "properties": { + "showOutputText": true + }, + "widgets_values": [ + "Output - txt2img" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3169, + "type": "SomethingToString", + "pos": [ + 4107.07861328125, + 1136.7099609375 + ], + "size": [ + 210, + 82 + ], + "flags": { + "collapsed": true + }, + "order": 213, + "mode": 0, + "inputs": [ + { + "name": "input", + "type": "*", + "link": 4689 + } + ], + "outputs": [ + { + "name": "STRING", + "type": "STRING", + "slot_index": 0, + "links": [ + 4690 + ] + } + ], + "title": "To String", + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui-kjnodes", + "ver": "d835ac96042394299f76793544ee3643fd4b0457", + "Node name for S&R": "SomethingToString" + }, + "widgets_values": [ + "", + "" + ] + }, + { + "id": 3170, + "type": "SomethingToString", + "pos": [ + 4117.0771484375, + 1086.7099609375 + ], + "size": [ + 210, + 82 + ], + "flags": { + "collapsed": true + }, + "order": 185, + "mode": 0, + "inputs": [ + { + "name": "input", + "type": "*", + "link": 4691 + } + ], + "outputs": [ + { + "name": "STRING", + "type": "STRING", + "slot_index": 0, + "links": [ + 4692 + ] + } + ], + "title": "To String", + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui-kjnodes", + "ver": "d835ac96042394299f76793544ee3643fd4b0457", + "Node name for S&R": "SomethingToString" + }, + "widgets_values": [ + "", + "" + ] + }, + { + "id": 3210, + "type": "PlaySound|pysssss", + "pos": [ + -3250, + 260 + ], + "size": [ + 310, + 110 + ], + "flags": {}, + "order": 353, + "mode": 0, + "inputs": [ + { + "name": "any", + "type": "*", + "link": 5804 + } + ], + "outputs": [ + { + "name": "*", + "shape": 6, + "type": "*", + "slot_index": 0, + "links": null + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui-custom-scripts", + "ver": "bbda5e52ad580c13ceaa53136d9c2bed9137bd2e", + "Node name for S&R": "PlaySound|pysssss" + }, + "widgets_values": [ + "always", + 0.5, + "notify.mp3" + ] + }, + { + "id": 3212, + "type": "SimpleTextTruncate", + "pos": [ + -2640, + 310 + ], + "size": [ + 230, + 82 + ], + "flags": {}, + "order": 193, + "mode": 4, + "inputs": [ + { + "name": "text", + "type": "STRING", + "link": 4780 + } + ], + "outputs": [ + { + "name": "TEXT", + "type": "STRING", + "slot_index": 0, + "links": [ + 4781 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "aux_id": "robertvoy/Comfyui-Flux-Continuum", + "ver": "19b70c33f872fe4e57dea291bbdd0f5559258a14", + "Node name for S&R": "SimpleTextTruncate" + }, + "widgets_values": [ + 12 + ] + }, + { + "id": 3213, + "type": "CLIPTextEncode", + "pos": [ + 3850, + 2740 + ], + "size": [ + 430, + 180 + ], + "flags": { + "collapsed": true + }, + "order": 199, + "mode": 0, + "inputs": [ + { + "name": "clip", + "type": "CLIP", + "link": 4782 + } + ], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "slot_index": 0, + "links": [ + 4784 + ] + } + ], + "title": "CLIP Text Encode (Negative Prompt)", + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "CLIPTextEncode" + }, + "widgets_values": [ + "" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 3214, + "type": "InpaintModelConditioning", + "pos": [ + 4220, + 2620 + ], + "size": [ + 300, + 140 + ], + "flags": {}, + "order": 289, + "mode": 0, + "inputs": [ + { + "name": "positive", + "type": "CONDITIONING", + "link": 5039 + }, + { + "name": "negative", + "type": "CONDITIONING", + "link": 4784 + }, + { + "name": "vae", + "type": "VAE", + "link": 4785 + }, + { + "name": "pixels", + "type": "IMAGE", + "link": 4786 + }, + { + "name": "mask", + "type": "MASK", + "link": 4787 + } + ], + "outputs": [ + { + "name": "positive", + "type": "CONDITIONING", + "slot_index": 0, + "links": [ + 4790 + ] + }, + { + "name": "negative", + "type": "CONDITIONING", + "slot_index": 1, + "links": [ + 4982 + ] + }, + { + "name": "latent", + "type": "LATENT", + "slot_index": 2, + "links": [ + 4981 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "InpaintModelConditioning" + }, + "widgets_values": [ + false + ] + }, + { + "id": 3215, + "type": "DifferentialDiffusion", + "pos": [ + 4750, + 2570 + ], + "size": [ + 184.8000030517578, + 30 + ], + "flags": { + "collapsed": true + }, + "order": 198, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 4788 + } + ], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "slot_index": 0, + "links": [ + 4789 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "DifferentialDiffusion" + }, + "widgets_values": [] + }, + { + "id": 3219, + "type": "VAEDecode", + "pos": [ + 5450, + 2480 + ], + "size": [ + 170, + 50 + ], + "flags": { + "collapsed": true + }, + "order": 382, + "mode": 0, + "inputs": [ + { + "name": "samples", + "type": "LATENT", + "link": 4795 + }, + { + "name": "vae", + "type": "VAE", + "link": 4796 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 4807 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "VAEDecode" + }, + "widgets_values": [] + }, + { + "id": 3241, + "type": "Reroute", + "pos": [ + 4070, + 2490 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 201, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 4809 + } + ], + "outputs": [ + { + "name": "", + "type": "MASK", + "slot_index": 0, + "links": [ + 4815 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 3242, + "type": "Reroute", + "pos": [ + 4060, + 2410 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 200, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 4810 + } + ], + "outputs": [ + { + "name": "", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 4814 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 3244, + "type": "Reroute", + "pos": [ + 5170, + 2490 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 291, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 4815 + } + ], + "outputs": [ + { + "name": "", + "type": "MASK", + "slot_index": 0, + "links": [ + 4974 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 3245, + "type": "Reroute", + "pos": [ + 5150, + 2420 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 290, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 4814 + } + ], + "outputs": [ + { + "name": "", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 4818 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 3247, + "type": "InpaintModelConditioning", + "pos": [ + 4380, + 1790 + ], + "size": [ + 300, + 140 + ], + "flags": {}, + "order": 293, + "mode": 0, + "inputs": [ + { + "name": "positive", + "type": "CONDITIONING", + "link": 4992 + }, + { + "name": "negative", + "type": "CONDITIONING", + "link": 4829 + }, + { + "name": "vae", + "type": "VAE", + "link": 4913 + }, + { + "name": "pixels", + "type": "IMAGE", + "link": 4914 + }, + { + "name": "mask", + "type": "MASK", + "link": 4882 + } + ], + "outputs": [ + { + "name": "positive", + "type": "CONDITIONING", + "slot_index": 0, + "links": [ + 4835 + ] + }, + { + "name": "negative", + "type": "CONDITIONING", + "slot_index": 1, + "links": [ + 4836 + ] + }, + { + "name": "latent", + "type": "LATENT", + "slot_index": 2, + "links": [ + 4919 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "InpaintModelConditioning" + }, + "widgets_values": [ + true + ] + }, + { + "id": 3248, + "type": "DifferentialDiffusion", + "pos": [ + 4950, + 1770 + ], + "size": [ + 184.8000030517578, + 30 + ], + "flags": { + "collapsed": true + }, + "order": 204, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 4945 + } + ], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "slot_index": 0, + "links": [ + 4834 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "DifferentialDiffusion" + }, + "widgets_values": [] + }, + { + "id": 3264, + "type": "Reroute", + "pos": [ + 4170, + 1670 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 197, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 4966 + } + ], + "outputs": [ + { + "name": "", + "type": "MASK", + "slot_index": 0, + "links": [ + 4850, + 4882 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 3265, + "type": "Reroute", + "pos": [ + 4170, + 1620 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 203, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 4849 + } + ], + "outputs": [ + { + "name": "", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 4851, + 4914 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 3266, + "type": "Reroute", + "pos": [ + 5670, + 1680 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 288, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 4850 + } + ], + "outputs": [ + { + "name": "", + "type": "MASK", + "slot_index": 0, + "links": [ + 5590 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 3267, + "type": "Reroute", + "pos": [ + 5920, + 1640 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 292, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 4851 + } + ], + "outputs": [ + { + "name": "", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 4845 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 3283, + "type": "Reroute", + "pos": [ + 5430, + 1590 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 272, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 4911 + } + ], + "outputs": [ + { + "name": "", + "type": "VAE", + "slot_index": 0, + "links": [ + 4904 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 3284, + "type": "Reroute", + "pos": [ + 4180, + 1580 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 188, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 4912 + } + ], + "outputs": [ + { + "name": "", + "type": "VAE", + "slot_index": 0, + "links": [ + 4911, + 4913 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 3323, + "type": "ImpactDilateMask", + "pos": [ + 5360, + 2730 + ], + "size": [ + 210, + 78 + ], + "flags": { + "collapsed": false + }, + "order": 332, + "mode": 0, + "inputs": [ + { + "name": "mask", + "type": "MASK", + "link": 4974 + }, + { + "name": "dilation", + "type": "INT", + "widget": { + "name": "dilation" + }, + "link": 4979 + } + ], + "outputs": [ + { + "name": "MASK", + "type": "MASK", + "slot_index": 0, + "links": [ + 4973 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui-impact-pack", + "ver": "0e3e6a193a68748b5e68cfd19fb6c7d92b2fac57", + "Node name for S&R": "ImpactDilateMask" + }, + "widgets_values": [ + 120 + ] + }, + { + "id": 3332, + "type": "RepeatLatentBatch", + "pos": [ + 4670, + 2740 + ], + "size": [ + 210, + 78 + ], + "flags": { + "collapsed": true + }, + "order": 331, + "mode": 0, + "inputs": [ + { + "name": "samples", + "type": "LATENT", + "link": 4981 + }, + { + "name": "amount", + "type": "INT", + "widget": { + "name": "amount" + }, + "link": 4980 + } + ], + "outputs": [ + { + "name": "LATENT", + "type": "LATENT", + "slot_index": 0, + "links": [ + 4983 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "RepeatLatentBatch" + }, + "widgets_values": [ + 1 + ] + }, + { + "id": 3346, + "type": "VAEDecode", + "pos": [ + 4980, + 4820 + ], + "size": [ + 170, + 50 + ], + "flags": { + "collapsed": true + }, + "order": 384, + "mode": 0, + "inputs": [ + { + "name": "samples", + "type": "LATENT", + "link": 5000 + }, + { + "name": "vae", + "type": "VAE", + "link": 5001 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 5002 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "VAEDecode" + }, + "widgets_values": [] + }, + { + "id": 3361, + "type": "UNETLoader", + "pos": [ + 3000, + 690 + ], + "size": [ + 320, + 82 + ], + "flags": { + "collapsed": false + }, + "order": 141, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "slot_index": 0, + "links": [ + 5013 + ] + } + ], + "title": "Load Flux Depth Model", + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "UNETLoader" + }, + "widgets_values": [ + "flux1-depth-dev.safetensors", + "default" + ] + }, + { + "id": 3362, + "type": "UNETLoader", + "pos": [ + 3000, + 813.5 + ], + "size": [ + 320, + 82 + ], + "flags": { + "collapsed": false + }, + "order": 142, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "slot_index": 0, + "links": [ + 5014 + ] + } + ], + "title": "Load Flux Canny Model", + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "UNETLoader" + }, + "widgets_values": [ + "flux1-canny-dev.safetensors", + "default" + ] + }, + { + "id": 3374, + "type": "StyleModelLoader", + "pos": [ + 3000, + 937 + ], + "size": [ + 320, + 60 + ], + "flags": {}, + "order": 143, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "STYLE_MODEL", + "type": "STYLE_MODEL", + "slot_index": 0, + "links": [ + 5033 + ] + } + ], + "title": "Load Redux Model", + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "StyleModelLoader" + }, + "widgets_values": [ + "flux1-redux-dev.safetensors" + ] + }, + { + "id": 3375, + "type": "CLIPVisionLoader", + "pos": [ + 2997.352294921875, + 1038.5 + ], + "size": [ + 320, + 60 + ], + "flags": {}, + "order": 144, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "CLIP_VISION", + "type": "CLIP_VISION", + "slot_index": 0, + "links": [ + 5034 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "CLIPVisionLoader" + }, + "widgets_values": [ + "sigclip_vision_patch14_384.safetensors" + ] + }, + { + "id": 3383, + "type": "Reroute", + "pos": [ + 5170, + 210 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 184, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5046 + } + ], + "outputs": [ + { + "name": "", + "type": "MODEL", + "slot_index": 0, + "links": [ + 5045 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 3387, + "type": "Reroute", + "pos": [ + 5820, + 6240 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 296, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5054 + } + ], + "outputs": [ + { + "name": "", + "type": "CLIP_VISION", + "slot_index": 0, + "links": [ + 5071, + 5731 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 3397, + "type": "Reroute", + "pos": [ + 7130, + 6250 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 335, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5071 + } + ], + "outputs": [ + { + "name": "", + "type": "CLIP_VISION", + "slot_index": 0, + "links": [ + 5734 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 3453, + "type": "VAEDecode", + "pos": [ + 4990, + 5590 + ], + "size": [ + 170, + 50 + ], + "flags": { + "collapsed": true + }, + "order": 385, + "mode": 0, + "inputs": [ + { + "name": "samples", + "type": "LATENT", + "link": 5172 + }, + { + "name": "vae", + "type": "VAE", + "link": 5173 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 5174 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "VAEDecode" + }, + "widgets_values": [] + }, + { + "id": 3459, + "type": "KSampler", + "pos": [ + 4740, + 5670 + ], + "size": [ + 220, + 318 + ], + "flags": {}, + "order": 366, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 5175 + }, + { + "name": "positive", + "type": "CONDITIONING", + "link": 5176 + }, + { + "name": "negative", + "type": "CONDITIONING", + "link": 5177 + }, + { + "name": "latent_image", + "type": "LATENT", + "link": 5178 + }, + { + "name": "seed", + "type": "INT", + "widget": { + "name": "seed" + }, + "link": 5179 + }, + { + "name": "steps", + "type": "INT", + "widget": { + "name": "steps" + }, + "link": 5180 + }, + { + "name": "sampler_name", + "type": "COMBO", + "widget": { + "name": "sampler_name" + }, + "link": 5210 + }, + { + "name": "scheduler", + "type": "COMBO", + "widget": { + "name": "scheduler" + }, + "link": 5211 + } + ], + "outputs": [ + { + "name": "LATENT", + "type": "LATENT", + "slot_index": 0, + "links": [ + 5172 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "KSampler" + }, + "widgets_values": [ + 397628798413709, + "randomize", + 20, + 1, + "euler", + "normal", + 1 + ] + }, + { + "id": 3462, + "type": "CLIPTextEncode", + "pos": [ + 3830, + 5790 + ], + "size": [ + 400, + 200 + ], + "flags": { + "collapsed": true + }, + "order": 210, + "mode": 0, + "inputs": [ + { + "name": "clip", + "type": "CLIP", + "link": 5181 + } + ], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "slot_index": 0, + "links": [ + 5167 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "CLIPTextEncode" + }, + "widgets_values": [ + "" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 3515, + "type": "Reroute", + "pos": [ + 5737.9697265625, + 263.603271484375 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 206, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5384 + } + ], + "outputs": [ + { + "name": "", + "type": "CONDITIONING", + "slot_index": 0, + "links": [ + 5237, + 5238 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 3548, + "type": "Reroute", + "pos": [ + 4896.2509765625, + 159.36273193359375 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 280, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5327 + } + ], + "outputs": [ + { + "name": "", + "type": "LATENT", + "slot_index": 0, + "links": [ + 5328 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 3549, + "type": "Reroute", + "pos": [ + 6050, + 160 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 326, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5328 + } + ], + "outputs": [ + { + "name": "", + "type": "LATENT", + "slot_index": 0, + "links": [ + 5329 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 3566, + "type": "SimpleComparison+", + "pos": [ + 5310, + 6350 + ], + "size": [ + 210, + 80 + ], + "flags": { + "collapsed": true + }, + "order": 338, + "mode": 0, + "inputs": [ + { + "name": "a", + "type": "*", + "link": 5713 + }, + { + "name": "b", + "type": "*", + "link": 5346 + } + ], + "outputs": [ + { + "name": "BOOLEAN", + "type": "BOOLEAN", + "slot_index": 0, + "links": [ + 5642 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui_essentials", + "ver": "33ff89fd354d8ec3ab6affb605a79a931b445d99", + "Node name for S&R": "SimpleComparison+" + }, + "widgets_values": [ + "!=" + ] + }, + { + "id": 3571, + "type": "SimpleComparison+", + "pos": [ + 6560, + 6370 + ], + "size": [ + 210, + 80 + ], + "flags": { + "collapsed": true + }, + "order": 339, + "mode": 0, + "inputs": [ + { + "name": "a", + "type": "*", + "link": 5368 + }, + { + "name": "b", + "type": "*", + "link": 5350 + } + ], + "outputs": [ + { + "name": "BOOLEAN", + "type": "BOOLEAN", + "slot_index": 0, + "links": [ + 5656 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui_essentials", + "ver": "33ff89fd354d8ec3ab6affb605a79a931b445d99", + "Node name for S&R": "SimpleComparison+" + }, + "widgets_values": [ + "!=" + ] + }, + { + "id": 3572, + "type": "SimpleMathFloat+", + "pos": [ + 6440, + 6320 + ], + "size": [ + 320, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 145, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "slot_index": 0, + "links": [ + 5350 + ] + } + ], + "title": "Float", + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui_essentials", + "ver": "33ff89fd354d8ec3ab6affb605a79a931b445d99", + "Node name for S&R": "SimpleMathFloat+" + }, + "widgets_values": [ + 0 + ] + }, + { + "id": 3577, + "type": "SimpleComparison+", + "pos": [ + 7780, + 6400 + ], + "size": [ + 210, + 80 + ], + "flags": { + "collapsed": true + }, + "order": 340, + "mode": 0, + "inputs": [ + { + "name": "a", + "type": "*", + "link": 5363 + }, + { + "name": "b", + "type": "*", + "link": 5359 + } + ], + "outputs": [ + { + "name": "BOOLEAN", + "type": "BOOLEAN", + "slot_index": 0, + "links": [ + 5651 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui_essentials", + "ver": "33ff89fd354d8ec3ab6affb605a79a931b445d99", + "Node name for S&R": "SimpleComparison+" + }, + "widgets_values": [ + "!=" + ] + }, + { + "id": 3578, + "type": "SimpleMathFloat+", + "pos": [ + 7640, + 6340 + ], + "size": [ + 320, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 146, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "slot_index": 0, + "links": [ + 5359 + ] + } + ], + "title": "Float", + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui_essentials", + "ver": "33ff89fd354d8ec3ab6affb605a79a931b445d99", + "Node name for S&R": "SimpleMathFloat+" + }, + "widgets_values": [ + 0 + ] + }, + { + "id": 3722, + "type": "MaskBlur+", + "pos": [ + 5750, + 1880 + ], + "size": [ + 260, + 102 + ], + "flags": { + "collapsed": false + }, + "order": 330, + "mode": 0, + "inputs": [ + { + "name": "mask", + "type": "MASK", + "link": 5590 + }, + { + "name": "amount", + "type": "INT", + "widget": { + "name": "amount" + }, + "link": 5589 + } + ], + "outputs": [ + { + "name": "MASK", + "type": "MASK", + "slot_index": 0, + "links": [ + 5591 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui_essentials", + "ver": "33ff89fd354d8ec3ab6affb605a79a931b445d99", + "Node name for S&R": "MaskBlur+" + }, + "widgets_values": [ + 6, + "gpu" + ] + }, + { + "id": 3757, + "type": "FluxContinuumModelRouter", + "pos": [ + -940, + 410 + ], + "size": [ + 240, + 138 + ], + "flags": {}, + "order": 254, + "mode": 0, + "inputs": [ + { + "name": "flux_fill", + "shape": 7, + "type": "MODEL", + "link": 5611 + }, + { + "name": "flux_depth", + "shape": 7, + "type": "MODEL", + "link": 5612 + }, + { + "name": "flux_canny", + "shape": 7, + "type": "MODEL", + "link": 5613 + }, + { + "name": "flux_dev", + "shape": 7, + "type": "MODEL", + "link": 5614 + }, + { + "name": "condition", + "type": "STRING", + "widget": { + "name": "condition" + }, + "link": 5610 + } + ], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "slot_index": 0, + "links": [ + 5615 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "aux_id": "robertvoy/Comfyui-Flux-Continuum", + "ver": "19b70c33f872fe4e57dea291bbdd0f5559258a14", + "Node name for S&R": "FluxContinuumModelRouter" + }, + "widgets_values": [ + "" + ] + }, + { + "id": 3778, + "type": "Reroute", + "pos": [ + 4299.0615234375, + 3942.49755859375 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 303, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5634 + } + ], + "outputs": [ + { + "name": "", + "type": "MASK", + "slot_index": 0, + "links": [ + 5635 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 3779, + "type": "Reroute", + "pos": [ + 5320, + 3940 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 342, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5635 + } + ], + "outputs": [ + { + "name": "", + "type": "MASK", + "slot_index": 0, + "links": [ + 5636 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 3780, + "type": "Reroute", + "pos": [ + 4299.0615234375, + 3902.49755859375 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 232, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5638 + } + ], + "outputs": [ + { + "name": "", + "type": "IMAGE", + "links": [ + 5637 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 3781, + "type": "Reroute", + "pos": [ + 5320, + 3900 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 318, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5637 + } + ], + "outputs": [ + { + "name": "", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 5639 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 3783, + "type": "SimpleCondition+", + "pos": [ + 5580, + 6490 + ], + "size": [ + 240, + 70 + ], + "flags": { + "collapsed": false + }, + "order": 369, + "mode": 0, + "inputs": [ + { + "name": "evaluate", + "type": "*", + "link": 5642 + }, + { + "name": "on_true", + "type": "*", + "link": 5901 + }, + { + "name": "on_false", + "shape": 7, + "type": "*", + "link": 5644 + } + ], + "outputs": [ + { + "name": "result", + "type": "*", + "slot_index": 0, + "links": [ + 5738 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui_essentials", + "ver": "33ff89fd354d8ec3ab6affb605a79a931b445d99", + "Node name for S&R": "SimpleCondition+" + }, + "widgets_values": [] + }, + { + "id": 3784, + "type": "SimpleCondition+", + "pos": [ + 6820, + 6460 + ], + "size": [ + 240, + 70 + ], + "flags": { + "collapsed": false + }, + "order": 413, + "mode": 0, + "inputs": [ + { + "name": "evaluate", + "type": "*", + "link": 5656 + }, + { + "name": "on_true", + "type": "*", + "link": 5892 + }, + { + "name": "on_false", + "shape": 7, + "type": "*", + "link": 5900 + } + ], + "outputs": [ + { + "name": "result", + "type": "*", + "slot_index": 0, + "links": [ + 5741 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui_essentials", + "ver": "33ff89fd354d8ec3ab6affb605a79a931b445d99", + "Node name for S&R": "SimpleCondition+" + }, + "widgets_values": [] + }, + { + "id": 2205, + "type": "Label (rgthree)", + "pos": [ + 1980, + 100 + ], + "size": [ + 96.72916412353516, + 16 + ], + "flags": { + "allow_interaction": true + }, + "order": 147, + "mode": 0, + "inputs": [], + "outputs": [], + "title": "by WorldObserver", + "properties": { + "fontSize": 16, + "fontFamily": "\n", + "fontColor": "#ffffff", + "textAlign": "left", + "backgroundColor": "transparent", + "padding": 0, + "borderRadius": 0, + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "color": "#fff0", + "bgcolor": "#fff0" + }, + { + "id": 1072, + "type": "FluxSamplerParams+", + "pos": [ + 4297.0771484375, + 936.7098999023438 + ], + "size": [ + 250, + 426 + ], + "flags": {}, + "order": 323, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 3363 + }, + { + "name": "conditioning", + "type": "CONDITIONING", + "link": 3362 + }, + { + "name": "latent_image", + "type": "LATENT", + "link": 1800 + }, + { + "name": "loras", + "shape": 7, + "type": "LORA_PARAMS", + "link": null + }, + { + "name": "seed", + "type": "STRING", + "widget": { + "name": "seed" + }, + "link": 4690 + }, + { + "name": "sampler", + "type": "STRING", + "widget": { + "name": "sampler" + }, + "link": 2344 + }, + { + "name": "scheduler", + "type": "STRING", + "widget": { + "name": "scheduler" + }, + "link": 2005 + }, + { + "name": "steps", + "type": "STRING", + "widget": { + "name": "steps" + }, + "link": 2004 + }, + { + "name": "guidance", + "type": "STRING", + "widget": { + "name": "guidance" + }, + "link": 2007 + }, + { + "name": "max_shift", + "type": "STRING", + "widget": { + "name": "max_shift" + }, + "link": 2410 + }, + { + "name": "denoise", + "type": "STRING", + "widget": { + "name": "denoise" + }, + "link": 4692 + } + ], + "outputs": [ + { + "name": "latent", + "type": "LATENT", + "slot_index": 0, + "links": [ + 1803 + ] + }, + { + "name": "params", + "type": "SAMPLER_PARAMS", + "links": null + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui_essentials", + "ver": "33ff89fd354d8ec3ab6affb605a79a931b445d99", + "Node name for S&R": "FluxSamplerParams+" + }, + "widgets_values": [ + "?", + "euler", + "beta", + "20", + "2.5", + "1.15", + "0.5", + "1.0" + ] + }, + { + "id": 1389, + "type": "UltimateSDUpscaleNoUpscale", + "pos": [ + 5110, + 3290 + ], + "size": [ + 310, + 646 + ], + "flags": { + "collapsed": true + }, + "order": 378, + "mode": 0, + "inputs": [ + { + "name": "upscaled_image", + "type": "IMAGE", + "link": 4668 + }, + { + "name": "model", + "type": "MODEL", + "link": 2169 + }, + { + "name": "positive", + "type": "CONDITIONING", + "link": 5369 + }, + { + "name": "negative", + "type": "CONDITIONING", + "link": 2171 + }, + { + "name": "vae", + "type": "VAE", + "link": 2172 + }, + { + "name": "seed", + "type": "INT", + "widget": { + "name": "seed" + }, + "link": 2173 + }, + { + "name": "steps", + "type": "INT", + "widget": { + "name": "steps" + }, + "link": 2175 + }, + { + "name": "sampler_name", + "type": "COMBO", + "widget": { + "name": "sampler_name" + }, + "link": 2342 + }, + { + "name": "scheduler", + "type": "COMBO", + "widget": { + "name": "scheduler" + }, + "link": 2176 + }, + { + "name": "denoise", + "type": "FLOAT", + "widget": { + "name": "denoise" + }, + "link": 2174 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 2177 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui_ultimatesdupscale", + "ver": "778a475dde8116a2066fe07f6c9ca15554e0b5be", + "Node name for S&R": "UltimateSDUpscaleNoUpscale" + }, + "widgets_values": [ + 35749123011568, + "randomize", + 20, + 1, + "euler", + "normal", + 0.2, + "Linear", + 1024, + 1024, + 20, + 20, + "None", + 1, + 20, + 20, + 20, + true, + false + ] + }, + { + "id": 1278, + "type": "StepSlider", + "pos": [ + 480, + 740 + ], + "size": [ + 310, + 60 + ], + "flags": { + "collapsed": false, + "pinned": true + }, + "order": 148, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "slot_index": 0, + "links": [ + 2002 + ] + } + ], + "title": "Steps", + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "aux_id": "robertvoy/Comfyui-Flux-Continuum", + "ver": "19b70c33f872fe4e57dea291bbdd0f5559258a14", + "Node name for S&R": "StepSlider" + }, + "widgets_values": [ + 20 + ] + }, + { + "id": 3452, + "type": "RepeatLatentBatch", + "pos": [ + 4410, + 5780 + ], + "size": [ + 230, + 78 + ], + "flags": { + "collapsed": true + }, + "order": 341, + "mode": 0, + "inputs": [ + { + "name": "samples", + "type": "LATENT", + "link": 5170 + }, + { + "name": "amount", + "type": "INT", + "widget": { + "name": "amount" + }, + "link": 5171 + } + ], + "outputs": [ + { + "name": "LATENT", + "type": "LATENT", + "slot_index": 0, + "links": [ + 5178 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "RepeatLatentBatch" + }, + "widgets_values": [ + 1 + ] + }, + { + "id": 3450, + "type": "InstructPixToPixConditioning", + "pos": [ + 4110, + 5670 + ], + "size": [ + 240, + 90 + ], + "flags": { + "collapsed": false + }, + "order": 302, + "mode": 0, + "inputs": [ + { + "name": "positive", + "type": "CONDITIONING", + "link": 5166 + }, + { + "name": "negative", + "type": "CONDITIONING", + "link": 5167 + }, + { + "name": "vae", + "type": "VAE", + "link": 5168 + }, + { + "name": "pixels", + "type": "IMAGE", + "link": 5452 + } + ], + "outputs": [ + { + "name": "positive", + "type": "CONDITIONING", + "slot_index": 0, + "links": [ + 5176 + ] + }, + { + "name": "negative", + "type": "CONDITIONING", + "slot_index": 1, + "links": [ + 5177 + ] + }, + { + "name": "latent", + "type": "LATENT", + "slot_index": 2, + "links": [ + 5170 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "InstructPixToPixConditioning" + }, + "widgets_values": [] + }, + { + "id": 3249, + "type": "KSampler", + "pos": [ + 5180, + 1780 + ], + "size": [ + 260, + 262 + ], + "flags": {}, + "order": 363, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 4834 + }, + { + "name": "positive", + "type": "CONDITIONING", + "link": 4835 + }, + { + "name": "negative", + "type": "CONDITIONING", + "link": 4836 + }, + { + "name": "latent_image", + "type": "LATENT", + "link": 4920 + }, + { + "name": "seed", + "type": "INT", + "widget": { + "name": "seed" + }, + "link": 4917 + }, + { + "name": "steps", + "type": "INT", + "widget": { + "name": "steps" + }, + "link": 4839 + }, + { + "name": "sampler_name", + "type": "COMBO", + "widget": { + "name": "sampler_name" + }, + "link": 4853 + }, + { + "name": "scheduler", + "type": "COMBO", + "widget": { + "name": "scheduler" + }, + "link": 4852 + }, + { + "name": "denoise", + "type": "FLOAT", + "widget": { + "name": "denoise" + }, + "link": 4921 + } + ], + "outputs": [ + { + "name": "LATENT", + "type": "LATENT", + "slot_index": 0, + "links": [ + 4916 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "KSampler" + }, + "widgets_values": [ + 290917739403327, + "randomize", + 20, + 1, + "euler", + "normal", + 1 + ] + }, + { + "id": 3279, + "type": "VAEDecode", + "pos": [ + 5550, + 1810 + ], + "size": [ + 170, + 50 + ], + "flags": { + "collapsed": true + }, + "order": 383, + "mode": 0, + "inputs": [ + { + "name": "samples", + "type": "LATENT", + "link": 4916 + }, + { + "name": "vae", + "type": "VAE", + "link": 4904 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 4896 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "VAEDecode" + }, + "widgets_values": [] + }, + { + "id": 3263, + "type": "ImageCompositeMasked", + "pos": [ + 6060, + 1760 + ], + "size": [ + 270, + 150 + ], + "flags": {}, + "order": 400, + "mode": 0, + "inputs": [ + { + "name": "destination", + "type": "IMAGE", + "link": 4845 + }, + { + "name": "source", + "type": "IMAGE", + "link": 4896 + }, + { + "name": "mask", + "shape": 7, + "type": "MASK", + "link": 5591 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 4854 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "ImageCompositeMasked" + }, + "widgets_values": [ + 0, + 0, + false + ] + }, + { + "id": 3246, + "type": "CLIPTextEncode", + "pos": [ + 3980, + 1870 + ], + "size": [ + 430, + 180 + ], + "flags": { + "collapsed": true + }, + "order": 202, + "mode": 0, + "inputs": [ + { + "name": "clip", + "type": "CLIP", + "link": 4827 + } + ], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "slot_index": 0, + "links": [ + 4829 + ] + } + ], + "title": "CLIP Text Encode (Negative Prompt)", + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "CLIPTextEncode" + }, + "widgets_values": [ + "" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 1488, + "type": "BatchSlider", + "pos": [ + 480, + 1060 + ], + "size": [ + 310, + 60 + ], + "flags": { + "collapsed": false, + "pinned": true + }, + "order": 149, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "slot_index": 0, + "links": [ + 2305 + ] + } + ], + "title": "Batch", + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "aux_id": "robertvoy/Comfyui-Flux-Continuum", + "ver": "19b70c33f872fe4e57dea291bbdd0f5559258a14", + "Node name for S&R": "BatchSlider" + }, + "widgets_values": [ + 1 + ] + }, + { + "id": 3240, + "type": "ImageCompositeMasked", + "pos": [ + 5650, + 2690 + ], + "size": [ + 290, + 150 + ], + "flags": {}, + "order": 399, + "mode": 0, + "inputs": [ + { + "name": "destination", + "type": "IMAGE", + "link": 4818 + }, + { + "name": "source", + "type": "IMAGE", + "link": 4807 + }, + { + "name": "mask", + "shape": 7, + "type": "MASK", + "link": 4973 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 4819 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "ImageCompositeMasked" + }, + "widgets_values": [ + 0, + 0, + false + ] + }, + { + "id": 3810, + "type": "CLIPVisionEncode", + "pos": [ + 4920, + 6690 + ], + "size": [ + 253.60000610351562, + 78 + ], + "flags": { + "collapsed": false + }, + "order": 297, + "mode": 0, + "inputs": [ + { + "name": "clip_vision", + "type": "CLIP_VISION", + "link": 5702 + }, + { + "name": "image", + "type": "IMAGE", + "link": 5703 + } + ], + "outputs": [ + { + "name": "CLIP_VISION_OUTPUT", + "type": "CLIP_VISION_OUTPUT", + "links": [ + 5882 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "CLIPVisionEncode" + }, + "widgets_values": [ + "center" + ] + }, + { + "id": 3388, + "type": "Reroute", + "pos": [ + 4990, + 6190 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 208, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5055 + } + ], + "outputs": [ + { + "name": "", + "type": "STYLE_MODEL", + "slot_index": 0, + "links": [ + 5058, + 5883 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 3390, + "type": "Reroute", + "pos": [ + 5110, + 6530 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 312, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5756 + } + ], + "outputs": [ + { + "name": "", + "type": "CONDITIONING", + "slot_index": 0, + "links": [ + 5644, + 5884 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 3787, + "type": "Reroute", + "pos": [ + 4910, + 6320 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 299, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "widget": { + "name": "value" + }, + "link": 5661 + } + ], + "outputs": [ + { + "name": "", + "type": "FLOAT", + "slot_index": 0, + "links": [ + 5713, + 5885 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 3812, + "type": "CLIPVisionEncode", + "pos": [ + 6070, + 6680 + ], + "size": [ + 253.60000610351562, + 78 + ], + "flags": { + "collapsed": false + }, + "order": 336, + "mode": 0, + "inputs": [ + { + "name": "clip_vision", + "type": "CLIP_VISION", + "link": 5731 + }, + { + "name": "image", + "type": "IMAGE", + "link": 5730 + } + ], + "outputs": [ + { + "name": "CLIP_VISION_OUTPUT", + "type": "CLIP_VISION_OUTPUT", + "links": [ + 5887 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "CLIPVisionEncode" + }, + "widgets_values": [ + "center" + ] + }, + { + "id": 3582, + "type": "Reroute", + "pos": [ + 6010, + 6340 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 300, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "widget": { + "name": "value" + }, + "link": 5366 + } + ], + "outputs": [ + { + "name": "", + "type": "FLOAT", + "slot_index": 0, + "links": [ + 5368, + 5889 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 3385, + "type": "Reroute", + "pos": [ + 6150, + 6200 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 298, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5058 + } + ], + "outputs": [ + { + "name": "", + "type": "STYLE_MODEL", + "slot_index": 0, + "links": [ + 5072, + 5890 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 3327, + "type": "SimpleMathInt+", + "pos": [ + 1760, + 660 + ], + "size": [ + 310, + 60 + ], + "flags": { + "pinned": true + }, + "order": 150, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "slot_index": 0, + "links": [ + 4976 + ] + } + ], + "title": "Mask Feather", + "properties": { + "enableTabs": true, + "tabWidth": 70, + "tabXOffset": 80, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui_essentials", + "ver": "33ff89fd354d8ec3ab6affb605a79a931b445d99", + "Node name for S&R": "SimpleMathInt+" + }, + "widgets_values": [ + 100 + ] + }, + { + "id": 1274, + "type": "DenoiseSlider", + "pos": [ + 1760, + 660 + ], + "size": [ + 310, + 60 + ], + "flags": { + "collapsed": false, + "pinned": true + }, + "order": 151, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "slot_index": 0, + "links": [ + 2000 + ] + } + ], + "title": "Denoise", + "properties": { + "enableTabs": true, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Feather Mask\n", + "secondTabOffset": 80, + "secondTabWidth": 70, + "aux_id": "robertvoy/Comfyui-Flux-Continuum", + "ver": "19b70c33f872fe4e57dea291bbdd0f5559258a14", + "Node name for S&R": "DenoiseSlider" + }, + "widgets_values": [ + 0.5990000000000001 + ] + }, + { + "id": 1103, + "type": "Power Lora Loader (rgthree)", + "pos": [ + 480, + 320 + ], + "size": [ + 310, + 240 + ], + "flags": { + "collapsed": false, + "pinned": true + }, + "order": 215, + "mode": 0, + "inputs": [ + { + "dir": 3, + "name": "model", + "type": "MODEL", + "link": 4940 + }, + { + "dir": 3, + "name": "clip", + "type": "CLIP", + "link": 3432 + } + ], + "outputs": [ + { + "dir": 4, + "name": "MODEL", + "shape": 3, + "type": "MODEL", + "slot_index": 0, + "links": [ + 1863 + ] + }, + { + "dir": 4, + "name": "CLIP", + "shape": 3, + "type": "CLIP", + "slot_index": 1, + "links": [] + } + ], + "title": "Lora Loader", + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "rgthree-comfy", + "ver": "32142fe476878a354dda6e2d4b5ea98960de3ced", + "Show Strengths": "Single Strength" + }, + "widgets_values": [ + {}, + { + "type": "PowerLoraLoaderHeaderWidget" + }, + { + "on": false, + "lora": "FLUX\\CinematicStyleFlux_v1.safetensors", + "strength": 1, + "strengthTwo": null + }, + { + "on": false, + "lora": "FLUX\\Kodak Motion Picture Film style v1.safetensors", + "strength": 0.8, + "strengthTwo": null + }, + { + "on": false, + "lora": "FLUX\\In Super Panavision 70 Technicolor Film style v2b.safetensors", + "strength": 0.32, + "strengthTwo": null + }, + { + "on": false, + "lora": "FLUX\\olympusd450_lora.safetensors", + "strength": 0.83, + "strengthTwo": null + }, + { + "on": false, + "lora": "FLUX\\Kodak_MC3_Style_F1D-000019.safetensors", + "strength": 0.8, + "strengthTwo": null + }, + {}, + "" + ] + }, + { + "id": 3816, + "type": "Reroute", + "pos": [ + 6280, + 6500 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 388, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5738 + } + ], + "outputs": [ + { + "name": "", + "type": "*", + "slot_index": 0, + "links": [ + 5891, + 5900 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 3922, + "type": "StyleModelApply", + "pos": [ + 6470, + 6610 + ], + "size": [ + 270, + 122 + ], + "flags": {}, + "order": 405, + "mode": 0, + "inputs": [ + { + "name": "conditioning", + "type": "CONDITIONING", + "link": 5891 + }, + { + "name": "style_model", + "type": "STYLE_MODEL", + "link": 5890 + }, + { + "name": "clip_vision_output", + "type": "CLIP_VISION_OUTPUT", + "link": 5887 + }, + { + "name": "strength", + "type": "FLOAT", + "widget": { + "name": "strength" + }, + "link": 5889 + } + ], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [ + 5892 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.28", + "Node name for S&R": "StyleModelApply" + }, + "widgets_values": [ + 1, + "attn_bias" + ] + }, + { + "id": 3814, + "type": "CLIPVisionEncode", + "pos": [ + 7400, + 6690 + ], + "size": [ + 253.60000610351562, + 78 + ], + "flags": { + "collapsed": false + }, + "order": 365, + "mode": 0, + "inputs": [ + { + "name": "clip_vision", + "type": "CLIP_VISION", + "link": 5734 + }, + { + "name": "image", + "type": "IMAGE", + "link": 5729 + } + ], + "outputs": [ + { + "name": "CLIP_VISION_OUTPUT", + "type": "CLIP_VISION_OUTPUT", + "links": [ + 5902 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "CLIPVisionEncode" + }, + "widgets_values": [ + "center" + ] + }, + { + "id": 3817, + "type": "Reroute", + "pos": [ + 7550, + 6460 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 418, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5741 + } + ], + "outputs": [ + { + "name": "", + "type": "*", + "slot_index": 0, + "links": [ + 5743, + 5903 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 3396, + "type": "Reroute", + "pos": [ + 7440, + 6200 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 337, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5072 + } + ], + "outputs": [ + { + "name": "", + "type": "STYLE_MODEL", + "slot_index": 0, + "links": [ + 5904 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 3407, + "type": "Reroute", + "pos": [ + 7400, + 6370 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 301, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "widget": { + "name": "value" + }, + "link": 5362 + } + ], + "outputs": [ + { + "name": "", + "type": "FLOAT", + "slot_index": 0, + "links": [ + 5363, + 5905 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 3924, + "type": "StyleModelApply", + "pos": [ + 7730, + 6630 + ], + "size": [ + 270, + 122 + ], + "flags": {}, + "order": 420, + "mode": 0, + "inputs": [ + { + "name": "conditioning", + "type": "CONDITIONING", + "link": 5903 + }, + { + "name": "style_model", + "type": "STYLE_MODEL", + "link": 5904 + }, + { + "name": "clip_vision_output", + "type": "CLIP_VISION_OUTPUT", + "link": 5902 + }, + { + "name": "strength", + "type": "FLOAT", + "widget": { + "name": "strength" + }, + "link": 5905 + } + ], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [ + 5906 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.28", + "Node name for S&R": "StyleModelApply" + }, + "widgets_values": [ + 1, + "attn_bias" + ] + }, + { + "id": 3216, + "type": "KSampler", + "pos": [ + 4970, + 2580 + ], + "size": [ + 270, + 262 + ], + "flags": {}, + "order": 362, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 4789 + }, + { + "name": "positive", + "type": "CONDITIONING", + "link": 4790 + }, + { + "name": "negative", + "type": "CONDITIONING", + "link": 4982 + }, + { + "name": "latent_image", + "type": "LATENT", + "link": 4983 + }, + { + "name": "seed", + "type": "INT", + "widget": { + "name": "seed" + }, + "link": 4793 + }, + { + "name": "steps", + "type": "INT", + "widget": { + "name": "steps" + }, + "link": 4794 + }, + { + "name": "sampler_name", + "type": "COMBO", + "widget": { + "name": "sampler_name" + }, + "link": 4803 + }, + { + "name": "scheduler", + "type": "COMBO", + "widget": { + "name": "scheduler" + }, + "link": 4801 + } + ], + "outputs": [ + { + "name": "LATENT", + "type": "LATENT", + "slot_index": 0, + "links": [ + 4795 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "KSampler" + }, + "widgets_values": [ + 1082101420502744, + "randomize", + 20, + 1, + "euler", + "normal", + 1 + ] + }, + { + "id": 2469, + "type": "UNETLoader", + "pos": [ + 3000, + 170 + ], + "size": [ + 320, + 82 + ], + "flags": {}, + "order": 152, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "slot_index": 0, + "links": [ + 3494 + ] + } + ], + "title": "Load Flux Model", + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "UNETLoader" + }, + "widgets_values": [ + "flux1-dev.sft", + "fp8_e4m3fn" + ] + }, + { + "id": 3352, + "type": "KSampler", + "pos": [ + 4710, + 4920 + ], + "size": [ + 270, + 262 + ], + "flags": {}, + "order": 364, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 5003 + }, + { + "name": "positive", + "type": "CONDITIONING", + "link": 5004 + }, + { + "name": "negative", + "type": "CONDITIONING", + "link": 5005 + }, + { + "name": "latent_image", + "type": "LATENT", + "link": 5006 + }, + { + "name": "seed", + "type": "INT", + "widget": { + "name": "seed" + }, + "link": 5007 + }, + { + "name": "steps", + "type": "INT", + "widget": { + "name": "steps" + }, + "link": 5008 + }, + { + "name": "sampler_name", + "type": "COMBO", + "widget": { + "name": "sampler_name" + }, + "link": 5021 + }, + { + "name": "scheduler", + "type": "COMBO", + "widget": { + "name": "scheduler" + }, + "link": 5020 + } + ], + "outputs": [ + { + "name": "LATENT", + "type": "LATENT", + "slot_index": 0, + "links": [ + 5000 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "KSampler" + }, + "widgets_values": [ + 722887729226251, + "randomize", + 20, + 1, + "euler", + "normal", + 1 + ] + }, + { + "id": 3343, + "type": "InstructPixToPixConditioning", + "pos": [ + 4060, + 4930 + ], + "size": [ + 240, + 90 + ], + "flags": { + "collapsed": false + }, + "order": 294, + "mode": 0, + "inputs": [ + { + "name": "positive", + "type": "CONDITIONING", + "link": 5015 + }, + { + "name": "negative", + "type": "CONDITIONING", + "link": 4995 + }, + { + "name": "vae", + "type": "VAE", + "link": 4996 + }, + { + "name": "pixels", + "type": "IMAGE", + "link": 6220 + } + ], + "outputs": [ + { + "name": "positive", + "type": "CONDITIONING", + "slot_index": 0, + "links": [ + 5004 + ] + }, + { + "name": "negative", + "type": "CONDITIONING", + "slot_index": 1, + "links": [ + 5005 + ] + }, + { + "name": "latent", + "type": "LATENT", + "slot_index": 2, + "links": [ + 4998 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "InstructPixToPixConditioning" + }, + "widgets_values": [] + }, + { + "id": 583, + "type": "DualCLIPLoader", + "pos": [ + 2997.352294921875, + 395 + ], + "size": [ + 320, + 130 + ], + "flags": {}, + "order": 153, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "CLIP", + "type": "CLIP", + "slot_index": 0, + "links": [ + 4424 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "DualCLIPLoader" + }, + "widgets_values": [ + "t5xxl_fp16.safetensors", + "clip_l.safetensors", + "flux", + "default" + ] + }, + { + "id": 3234, + "type": "UNETLoader", + "pos": [ + 3000, + 566.5 + ], + "size": [ + 320, + 82 + ], + "flags": { + "collapsed": false + }, + "order": 154, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "slot_index": 0, + "links": [ + 4805 + ] + } + ], + "title": "Load Flux Fill Model", + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "UNETLoader" + }, + "widgets_values": [ + "flux1-fill-dev.safetensors", + "default" + ] + }, + { + "id": 3386, + "type": "Reroute", + "pos": [ + 4750, + 6240 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 207, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5051 + } + ], + "outputs": [ + { + "name": "", + "type": "CLIP_VISION", + "slot_index": 0, + "links": [ + 5054, + 5702 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 3933, + "type": "ControlNetLoader", + "pos": [ + 3000, + 1140 + ], + "size": [ + 320, + 60 + ], + "flags": { + "collapsed": false + }, + "order": 155, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "CONTROL_NET", + "type": "CONTROL_NET", + "links": [ + 5982 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.28", + "Node name for S&R": "ControlNetLoader" + }, + "widgets_values": [ + "FLUX\\FLUX.1-dev-ControlNet-Union-Pro-2.0.safetensors" + ] + }, + { + "id": 3758, + "type": "OutputGetString", + "pos": [ + -1260, + 660 + ], + "size": [ + 352.79998779296875, + 50.000030517578125 + ], + "flags": { + "collapsed": true + }, + "order": 156, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "STRING", + "type": "STRING", + "slot_index": 0, + "links": [ + 5610 + ] + } + ], + "title": "GetString_Output - txt2img", + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "aux_id": "robertvoy/Comfyui-Flux-Continuum", + "ver": "19b70c33f872fe4e57dea291bbdd0f5559258a14", + "Node name for S&R": "OutputGetString" + }, + "widgets_values": [ + "Output - txt2img" + ] + }, + { + "id": 3983, + "type": "Bookmark (rgthree)", + "pos": [ + 370, + 10 + ], + "size": [ + 210, + 62 + ], + "flags": { + "collapsed": true + }, + "order": 157, + "mode": 0, + "inputs": [], + "outputs": [], + "title": "🔖", + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "1", + 1 + ] + }, + { + "id": 3984, + "type": "Bookmark (rgthree)", + "pos": [ + 2460, + -200 + ], + "size": [ + 210, + 62 + ], + "flags": { + "collapsed": true + }, + "order": 158, + "mode": 0, + "inputs": [], + "outputs": [], + "title": "🔖", + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "2", + 1 + ] + }, + { + "id": 3773, + "type": "ImageCompositeMasked", + "pos": [ + 5470, + 4010 + ], + "size": [ + 270, + 150 + ], + "flags": {}, + "order": 391, + "mode": 0, + "inputs": [ + { + "name": "destination", + "type": "IMAGE", + "link": 5639 + }, + { + "name": "source", + "type": "IMAGE", + "link": 5630 + }, + { + "name": "mask", + "shape": 7, + "type": "MASK", + "link": 5636 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 5633 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "ImageCompositeMasked" + }, + "widgets_values": [ + 0, + 0, + false + ] + }, + { + "id": 1262, + "type": "ImpactSchedulerAdapter", + "pos": [ + 4690, + 4340 + ], + "size": [ + 260, + 82 + ], + "flags": { + "collapsed": true + }, + "order": 216, + "mode": 0, + "inputs": [ + { + "name": "scheduler", + "type": "COMBO", + "widget": { + "name": "scheduler" + }, + "link": 2055 + } + ], + "outputs": [ + { + "name": "scheduler", + "type": "COMBO", + "slot_index": 0, + "links": [ + 2313 + ] + } + ], + "title": "Adapter", + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui-impact-pack", + "ver": "0e3e6a193a68748b5e68cfd19fb6c7d92b2fac57", + "Node name for S&R": "ImpactSchedulerAdapter" + }, + "widgets_values": [ + "simple", + "None" + ] + }, + { + "id": 4022, + "type": "Reroute", + "pos": [ + 4780, + 7080 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 218, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 6151 + } + ], + "outputs": [ + { + "name": "", + "type": "VAE", + "links": [ + 6002, + 6067, + 6073 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 4023, + "type": "Reroute", + "pos": [ + 5930, + 7080 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 307, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 6073 + } + ], + "outputs": [ + { + "name": "", + "type": "VAE", + "links": [ + 6013, + 6060, + 6074 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 4024, + "type": "Reroute", + "pos": [ + 7470, + 7080 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 344, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 6074 + } + ], + "outputs": [ + { + "name": "", + "type": "VAE", + "links": [ + 6021, + 6053 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 4028, + "type": "Reroute", + "pos": [ + 7470, + 7040 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 343, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 6078 + } + ], + "outputs": [ + { + "name": "", + "type": "CONTROL_NET", + "links": [ + 6103, + 6104 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 4027, + "type": "Reroute", + "pos": [ + 5920, + 7030 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 306, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 6077 + } + ], + "outputs": [ + { + "name": "", + "type": "CONTROL_NET", + "links": [ + 6078, + 6105, + 6106 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 4026, + "type": "Reroute", + "pos": [ + 4780, + 7040 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 217, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 6076 + } + ], + "outputs": [ + { + "name": "", + "type": "CONTROL_NET", + "links": [ + 6077, + 6107, + 6108 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 3785, + "type": "SimpleCondition+", + "pos": [ + 8030, + 6420 + ], + "size": [ + 240, + 70 + ], + "flags": { + "collapsed": false + }, + "order": 422, + "mode": 0, + "inputs": [ + { + "name": "evaluate", + "type": "*", + "link": 5651 + }, + { + "name": "on_true", + "type": "*", + "link": 5906 + }, + { + "name": "on_false", + "shape": 7, + "type": "*", + "link": 5743 + } + ], + "outputs": [ + { + "name": "result", + "type": "*", + "slot_index": 0, + "links": [ + 6112 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui_essentials", + "ver": "33ff89fd354d8ec3ab6affb605a79a931b445d99", + "Node name for S&R": "SimpleCondition+" + }, + "widgets_values": [] + }, + { + "id": 429, + "type": "DetailerForEachPipe", + "pos": [ + 4900, + 4020 + ], + "size": [ + 390, + 644 + ], + "flags": { + "collapsed": false + }, + "order": 374, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 2211 + }, + { + "name": "segs", + "type": "SEGS", + "link": 6119 + }, + { + "name": "basic_pipe", + "type": "BASIC_PIPE", + "link": 3152 + }, + { + "name": "detailer_hook", + "shape": 7, + "type": "DETAILER_HOOK", + "link": null + }, + { + "name": "refiner_basic_pipe_opt", + "shape": 7, + "type": "BASIC_PIPE", + "link": null + }, + { + "name": "scheduler_func_opt", + "shape": 7, + "type": "SCHEDULER_FUNC", + "link": null + }, + { + "name": "seed", + "type": "INT", + "widget": { + "name": "seed" + }, + "link": 2243 + }, + { + "name": "steps", + "type": "INT", + "widget": { + "name": "steps" + }, + "link": 2035 + }, + { + "name": "sampler_name", + "type": "COMBO", + "widget": { + "name": "sampler_name" + }, + "link": 2341 + }, + { + "name": "scheduler", + "type": "COMBO", + "widget": { + "name": "scheduler" + }, + "link": 2313 + }, + { + "name": "denoise", + "type": "FLOAT", + "widget": { + "name": "denoise" + }, + "link": 2034 + } + ], + "outputs": [ + { + "name": "image", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 5630 + ] + }, + { + "name": "segs", + "type": "SEGS", + "slot_index": 1, + "links": [] + }, + { + "name": "basic_pipe", + "type": "BASIC_PIPE", + "links": null + }, + { + "name": "cnet_images", + "shape": 6, + "type": "IMAGE", + "slot_index": 3, + "links": [] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui-impact-pack", + "ver": "0e3e6a193a68748b5e68cfd19fb6c7d92b2fac57", + "Node name for S&R": "DetailerForEachPipe" + }, + "widgets_values": [ + 1024, + true, + 1024, + 588454211606234, + "randomize", + 20, + 1, + "euler", + "beta", + 0.74, + 5, + true, + true, + "", + 0.2, + 1, + false, + 20, + false, + false + ] + }, + { + "id": 3345, + "type": "RepeatLatentBatch", + "pos": [ + 4440, + 5010 + ], + "size": [ + 230, + 78 + ], + "flags": { + "collapsed": true + }, + "order": 334, + "mode": 0, + "inputs": [ + { + "name": "samples", + "type": "LATENT", + "link": 4998 + }, + { + "name": "amount", + "type": "INT", + "widget": { + "name": "amount" + }, + "link": 4999 + } + ], + "outputs": [ + { + "name": "LATENT", + "type": "LATENT", + "slot_index": 0, + "links": [ + 5006 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "RepeatLatentBatch" + }, + "widgets_values": [ + 1 + ] + }, + { + "id": 3556, + "type": "CondPassThrough", + "pos": [ + 8350, + 6420 + ], + "size": [ + 220, + 50 + ], + "flags": { + "collapsed": false + }, + "order": 425, + "mode": 0, + "inputs": [ + { + "name": "positive", + "shape": 7, + "type": "CONDITIONING", + "link": 6112 + }, + { + "name": "negative", + "shape": 7, + "type": "CONDITIONING", + "link": null + } + ], + "outputs": [ + { + "name": "positive", + "type": "CONDITIONING", + "slot_index": 0, + "links": [ + 6117 + ] + }, + { + "name": "negative", + "type": "CONDITIONING", + "links": null + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui-kjnodes", + "ver": "d835ac96042394299f76793544ee3643fd4b0457", + "Node name for S&R": "CondPassThrough" + }, + "widgets_values": [] + }, + { + "id": 3723, + "type": "MaskBlur+", + "pos": [ + 3939.0615234375, + 4172.4921875 + ], + "size": [ + 320, + 102 + ], + "flags": { + "collapsed": true + }, + "order": 214, + "mode": 0, + "inputs": [ + { + "name": "mask", + "type": "MASK", + "link": 5592 + }, + { + "name": "amount", + "type": "INT", + "widget": { + "name": "amount" + }, + "link": 5593 + } + ], + "outputs": [ + { + "name": "MASK", + "type": "MASK", + "slot_index": 0, + "links": [ + 5634, + 6120 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui_essentials", + "ver": "33ff89fd354d8ec3ab6affb605a79a931b445d99", + "Node name for S&R": "MaskBlur+" + }, + "widgets_values": [ + 6, + "gpu" + ] + }, + { + "id": 3569, + "type": "SimpleMathFloat+", + "pos": [ + 5180, + 6320 + ], + "size": [ + 320, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 159, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "slot_index": 0, + "links": [ + 5346 + ] + } + ], + "title": "Float", + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui_essentials", + "ver": "33ff89fd354d8ec3ab6affb605a79a931b445d99", + "Node name for S&R": "SimpleMathFloat+" + }, + "widgets_values": [ + 0 + ] + }, + { + "id": 3828, + "type": "CLIPTextEncodeFlux", + "pos": [ + 3810, + 6540 + ], + "size": [ + 280, + 166 + ], + "flags": { + "collapsed": false + }, + "order": 225, + "mode": 0, + "inputs": [ + { + "name": "clip", + "type": "CLIP", + "link": 5752 + }, + { + "name": "clip_l", + "type": "STRING", + "widget": { + "name": "clip_l" + }, + "link": 5753 + }, + { + "name": "t5xxl", + "type": "STRING", + "widget": { + "name": "t5xxl" + }, + "link": 5754 + }, + { + "name": "guidance", + "type": "FLOAT", + "widget": { + "name": "guidance" + }, + "link": 5755 + } + ], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "slot_index": 0, + "links": [ + 5756 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.26", + "Node name for S&R": "CLIPTextEncodeFlux" + }, + "widgets_values": [ + "", + "", + 3.5 + ] + }, + { + "id": 3402, + "type": "SplitVec3", + "pos": [ + 4500, + 6320 + ], + "size": [ + 210, + 70 + ], + "flags": { + "collapsed": false + }, + "order": 209, + "mode": 0, + "inputs": [ + { + "name": "a", + "type": "VEC3", + "link": 5082 + } + ], + "outputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "slot_index": 0, + "links": [ + 5661 + ] + }, + { + "name": "FLOAT", + "type": "FLOAT", + "slot_index": 1, + "links": [ + 5366 + ] + }, + { + "name": "FLOAT", + "type": "FLOAT", + "slot_index": 2, + "links": [ + 5362 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "aux_id": "robertvoy/Comfyui-Flux-Continuum", + "ver": "19b70c33f872fe4e57dea291bbdd0f5559258a14", + "Node name for S&R": "SplitVec3" + }, + "widgets_values": [] + }, + { + "id": 4045, + "type": "ConditioningZeroOut", + "pos": [ + 3830, + 7200 + ], + "size": [ + 211.60000610351562, + 26 + ], + "flags": { + "collapsed": true + }, + "order": 219, + "mode": 0, + "inputs": [ + { + "name": "conditioning", + "type": "CONDITIONING", + "link": 6114 + } + ], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [ + 6110 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.28", + "Node name for S&R": "ConditioningZeroOut" + }, + "widgets_values": [] + }, + { + "id": 4016, + "type": "MaskToSEGS", + "pos": [ + 3840, + 7410 + ], + "size": [ + 260, + 150 + ], + "flags": { + "collapsed": true + }, + "order": 220, + "mode": 0, + "inputs": [ + { + "name": "mask", + "type": "MASK", + "link": 6121 + } + ], + "outputs": [ + { + "name": "SEGS", + "type": "SEGS", + "slot_index": 0, + "links": [ + 6064 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui-impact-pack", + "ver": "cd34cfdd638a996fd011be1b490c70a7e0fb505f", + "Node name for S&R": "MaskToSEGS" + }, + "widgets_values": [ + false, + 1, + false, + 10, + false + ] + }, + { + "id": 4048, + "type": "SplitVec3", + "pos": [ + 4350, + 7270 + ], + "size": [ + 200, + 70 + ], + "flags": { + "collapsed": true + }, + "order": 221, + "mode": 0, + "inputs": [ + { + "name": "a", + "type": "VEC3", + "link": 6118 + } + ], + "outputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "links": [ + 6135, + 6136 + ] + }, + { + "name": "FLOAT", + "type": "FLOAT", + "links": [ + 6131, + 6133 + ] + }, + { + "name": "FLOAT", + "type": "FLOAT", + "links": [ + 6132, + 6134 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "aux_id": "robertvoy/Comfyui-Flux-Continuum", + "ver": "0524a071ad9f1b6a4012f083a610a7a7d5f2991a", + "Node name for S&R": "SplitVec3" + }, + "widgets_values": [] + }, + { + "id": 4031, + "type": "ImpactControlBridgeFix", + "pos": [ + 4720, + 7270 + ], + "size": [ + 230, + 80 + ], + "flags": { + "collapsed": true + }, + "order": 345, + "mode": 0, + "inputs": [ + { + "name": "value", + "type": "*", + "link": 6136 + }, + { + "name": "mode", + "type": "BOOLEAN", + "widget": { + "name": "mode" + }, + "link": 6082 + } + ], + "outputs": [ + { + "name": "value", + "type": "*", + "slot_index": 0, + "links": [ + 6003, + 6068 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "aux_id": "robertvoy/Comfyui-Flux-Continuum", + "ver": "0524a071ad9f1b6a4012f083a610a7a7d5f2991a", + "Node name for S&R": "ImpactControlBridgeFix" + }, + "widgets_values": [ + true, + "Bypass" + ] + }, + { + "id": 4034, + "type": "ImpactControlBridgeFix", + "pos": [ + 5840, + 7270 + ], + "size": [ + 230, + 80 + ], + "flags": { + "collapsed": true + }, + "order": 346, + "mode": 0, + "inputs": [ + { + "name": "value", + "type": "*", + "link": 6142 + }, + { + "name": "mode", + "type": "BOOLEAN", + "widget": { + "name": "mode" + }, + "link": 6086 + } + ], + "outputs": [ + { + "name": "value", + "type": "*", + "slot_index": 0, + "links": [ + 6014, + 6061 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "aux_id": "robertvoy/Comfyui-Flux-Continuum", + "ver": "0524a071ad9f1b6a4012f083a610a7a7d5f2991a", + "Node name for S&R": "ImpactControlBridgeFix" + }, + "widgets_values": [ + true, + "Bypass" + ] + }, + { + "id": 4035, + "type": "SimpleComparison+", + "pos": [ + 5620, + 7330 + ], + "size": [ + 210, + 80 + ], + "flags": { + "collapsed": true + }, + "order": 310, + "mode": 0, + "inputs": [ + { + "name": "a", + "type": "*", + "link": 6143 + }, + { + "name": "b", + "type": "*", + "link": 6152 + } + ], + "outputs": [ + { + "name": "BOOLEAN", + "type": "BOOLEAN", + "slot_index": 0, + "links": [ + 6086 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui_essentials", + "ver": "9d9f4bedfc9f0321c19faf71855e228c93bd0dc9", + "Node name for S&R": "SimpleComparison+" + }, + "widgets_values": [ + "!=" + ] + }, + { + "id": 4038, + "type": "SimpleComparison+", + "pos": [ + 7280, + 7350 + ], + "size": [ + 210, + 80 + ], + "flags": { + "collapsed": true + }, + "order": 311, + "mode": 0, + "inputs": [ + { + "name": "a", + "type": "*", + "link": 6148 + }, + { + "name": "b", + "type": "*", + "link": 6153 + } + ], + "outputs": [ + { + "name": "BOOLEAN", + "type": "BOOLEAN", + "slot_index": 0, + "links": [ + 6090 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui_essentials", + "ver": "9d9f4bedfc9f0321c19faf71855e228c93bd0dc9", + "Node name for S&R": "SimpleComparison+" + }, + "widgets_values": [ + "!=" + ] + }, + { + "id": 4061, + "type": "SimpleMathFloat+", + "pos": [ + 7150, + 7350 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 160, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "slot_index": 0, + "links": [ + 6153 + ] + } + ], + "title": "Float", + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui_essentials", + "ver": "33ff89fd354d8ec3ab6affb605a79a931b445d99", + "Node name for S&R": "SimpleMathFloat+" + }, + "widgets_values": [ + 0 + ] + }, + { + "id": 4014, + "type": "CondPassThrough", + "pos": [ + 7910, + 7160 + ], + "size": [ + 220, + 50 + ], + "flags": { + "collapsed": true + }, + "order": 411, + "mode": 0, + "inputs": [ + { + "name": "positive", + "shape": 7, + "type": "CONDITIONING", + "link": 6100 + }, + { + "name": "negative", + "shape": 7, + "type": "CONDITIONING", + "link": 6101 + } + ], + "outputs": [ + { + "name": "positive", + "type": "CONDITIONING", + "slot_index": 0, + "links": [ + 6116 + ] + }, + { + "name": "negative", + "type": "CONDITIONING", + "links": null + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui-kjnodes", + "ver": "5dcda71011870278c35d92ff77a677ed2e538f2d", + "Node name for S&R": "CondPassThrough" + }, + "widgets_values": [] + }, + { + "id": 4018, + "type": "ImpactControlNetApplyAdvancedSEGS", + "pos": [ + 7690, + 7410 + ], + "size": [ + 270, + 178 + ], + "flags": { + "collapsed": true + }, + "order": 404, + "mode": 4, + "inputs": [ + { + "name": "segs", + "type": "SEGS", + "link": 6050 + }, + { + "name": "control_net", + "type": "CONTROL_NET", + "link": 6104 + }, + { + "name": "segs_preprocessor", + "shape": 7, + "type": "SEGS_PREPROCESSOR", + "link": null + }, + { + "name": "control_image", + "shape": 7, + "type": "IMAGE", + "link": 6129 + }, + { + "name": "vae", + "shape": 7, + "type": "VAE", + "link": 6053 + }, + { + "name": "strength", + "type": "FLOAT", + "widget": { + "name": "strength" + }, + "link": 6054 + }, + { + "name": "start_percent", + "type": "FLOAT", + "widget": { + "name": "start_percent" + }, + "link": 6144 + }, + { + "name": "end_percent", + "type": "FLOAT", + "widget": { + "name": "end_percent" + }, + "link": 6145 + } + ], + "outputs": [ + { + "name": "SEGS", + "type": "SEGS", + "slot_index": 0, + "links": [ + 6102 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui-impact-pack", + "ver": "cd34cfdd638a996fd011be1b490c70a7e0fb505f", + "Node name for S&R": "ImpactControlNetApplyAdvancedSEGS" + }, + "widgets_values": [ + 1, + 0, + 1 + ] + }, + { + "id": 4006, + "type": "ControlNetApplyAdvanced", + "pos": [ + 7700, + 7160 + ], + "size": [ + 300, + 178 + ], + "flags": { + "collapsed": true + }, + "order": 403, + "mode": 4, + "inputs": [ + { + "name": "positive", + "type": "CONDITIONING", + "link": 6017 + }, + { + "name": "negative", + "type": "CONDITIONING", + "link": 6018 + }, + { + "name": "control_net", + "type": "CONTROL_NET", + "link": 6103 + }, + { + "name": "image", + "type": "IMAGE", + "link": 6130 + }, + { + "name": "vae", + "shape": 7, + "type": "VAE", + "link": 6021 + }, + { + "name": "strength", + "type": "FLOAT", + "widget": { + "name": "strength" + }, + "link": 6022 + }, + { + "name": "start_percent", + "type": "FLOAT", + "widget": { + "name": "start_percent" + }, + "link": 6146 + }, + { + "name": "end_percent", + "type": "FLOAT", + "widget": { + "name": "end_percent" + }, + "link": 6147 + } + ], + "outputs": [ + { + "name": "positive", + "type": "CONDITIONING", + "slot_index": 0, + "links": [ + 6100 + ] + }, + { + "name": "negative", + "type": "CONDITIONING", + "slot_index": 1, + "links": [ + 6101 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.34", + "Node name for S&R": "ControlNetApplyAdvanced" + }, + "widgets_values": [ + 1, + 0, + 1 + ] + }, + { + "id": 4021, + "type": "SEGSPass", + "pos": [ + 7920, + 7410 + ], + "size": [ + 210, + 30 + ], + "flags": { + "collapsed": true + }, + "order": 412, + "mode": 0, + "inputs": [ + { + "name": "SEGS", + "type": "SEGS", + "link": 6102 + } + ], + "outputs": [ + { + "name": "SEGS", + "type": "SEGS", + "slot_index": 0, + "links": [ + 5997 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "aux_id": "robertvoy/Comfyui-Flux-Continuum", + "ver": "0524a071ad9f1b6a4012f083a610a7a7d5f2991a", + "Node name for S&R": "SEGSPass" + }, + "widgets_values": [] + }, + { + "id": 4032, + "type": "SimpleComparison+", + "pos": [ + 4500, + 7340 + ], + "size": [ + 210, + 80 + ], + "flags": { + "collapsed": true + }, + "order": 308, + "mode": 0, + "inputs": [ + { + "name": "a", + "type": "*", + "link": 6135 + }, + { + "name": "b", + "type": "*", + "link": 6122 + } + ], + "outputs": [ + { + "name": "BOOLEAN", + "type": "BOOLEAN", + "slot_index": 0, + "links": [ + 6082 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui_essentials", + "ver": "9d9f4bedfc9f0321c19faf71855e228c93bd0dc9", + "Node name for S&R": "SimpleComparison+" + }, + "widgets_values": [ + "!=" + ] + }, + { + "id": 4051, + "type": "SimpleMathFloat+", + "pos": [ + 4320, + 7340 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 161, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "slot_index": 0, + "links": [ + 6122 + ] + } + ], + "title": "Float", + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui_essentials", + "ver": "33ff89fd354d8ec3ab6affb605a79a931b445d99", + "Node name for S&R": "SimpleMathFloat+" + }, + "widgets_values": [ + 0 + ] + }, + { + "id": 4058, + "type": "SplitVec3", + "pos": [ + 5550, + 7260 + ], + "size": [ + 200, + 70 + ], + "flags": { + "collapsed": true + }, + "order": 223, + "mode": 0, + "inputs": [ + { + "name": "a", + "type": "VEC3", + "link": 6137 + } + ], + "outputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "links": [ + 6142, + 6143 + ] + }, + { + "name": "FLOAT", + "type": "FLOAT", + "links": [ + 6138, + 6140 + ] + }, + { + "name": "FLOAT", + "type": "FLOAT", + "links": [ + 6139, + 6141 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "aux_id": "robertvoy/Comfyui-Flux-Continuum", + "ver": "0524a071ad9f1b6a4012f083a610a7a7d5f2991a", + "Node name for S&R": "SplitVec3" + }, + "widgets_values": [] + }, + { + "id": 4060, + "type": "SimpleMathFloat+", + "pos": [ + 5440, + 7330 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 162, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "slot_index": 0, + "links": [ + 6152 + ] + } + ], + "title": "Float", + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui_essentials", + "ver": "33ff89fd354d8ec3ab6affb605a79a931b445d99", + "Node name for S&R": "SimpleMathFloat+" + }, + "widgets_values": [ + 0 + ] + }, + { + "id": 4037, + "type": "ImpactControlBridgeFix", + "pos": [ + 7480, + 7270 + ], + "size": [ + 230, + 80 + ], + "flags": { + "collapsed": true + }, + "order": 347, + "mode": 0, + "inputs": [ + { + "name": "value", + "type": "*", + "link": 6149 + }, + { + "name": "mode", + "type": "BOOLEAN", + "widget": { + "name": "mode" + }, + "link": 6090 + } + ], + "outputs": [ + { + "name": "value", + "type": "*", + "slot_index": 0, + "links": [ + 6022, + 6054 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "aux_id": "robertvoy/Comfyui-Flux-Continuum", + "ver": "0524a071ad9f1b6a4012f083a610a7a7d5f2991a", + "Node name for S&R": "ImpactControlBridgeFix" + }, + "widgets_values": [ + true, + "Bypass" + ] + }, + { + "id": 4059, + "type": "SplitVec3", + "pos": [ + 7170, + 7260 + ], + "size": [ + 200, + 70 + ], + "flags": { + "collapsed": true + }, + "order": 224, + "mode": 0, + "inputs": [ + { + "name": "a", + "type": "VEC3", + "link": 6150 + } + ], + "outputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "links": [ + 6148, + 6149 + ] + }, + { + "name": "FLOAT", + "type": "FLOAT", + "links": [ + 6144, + 6146 + ] + }, + { + "name": "FLOAT", + "type": "FLOAT", + "links": [ + 6145, + 6147 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "aux_id": "robertvoy/Comfyui-Flux-Continuum", + "ver": "0524a071ad9f1b6a4012f083a610a7a7d5f2991a", + "Node name for S&R": "SplitVec3" + }, + "widgets_values": [] + }, + { + "id": 1387, + "type": "ImageUpscaleWithModel", + "pos": [ + 3960, + 3300 + ], + "size": [ + 200, + 70 + ], + "flags": { + "collapsed": true + }, + "order": 226, + "mode": 0, + "inputs": [ + { + "name": "upscale_model", + "type": "UPSCALE_MODEL", + "link": 2163 + }, + { + "name": "image", + "type": "IMAGE", + "link": 2165 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 6181 + ] + } + ], + "title": "Upscale", + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "ImageUpscaleWithModel" + }, + "widgets_values": [] + }, + { + "id": 3132, + "type": "RepeatImageBatch", + "pos": [ + 4550, + 3290 + ], + "size": [ + 210, + 78 + ], + "flags": { + "collapsed": true + }, + "order": 358, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 6183 + }, + { + "name": "amount", + "type": "INT", + "widget": { + "name": "amount" + }, + "link": 4666 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 4668 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "RepeatImageBatch" + }, + "widgets_values": [ + 2 + ] + }, + { + "id": 4079, + "type": "ImageResizeKJv2", + "pos": [ + 4320, + 3310 + ], + "size": [ + 270, + 242 + ], + "flags": { + "collapsed": true + }, + "order": 325, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 6181 + }, + { + "name": "width", + "type": "INT", + "widget": { + "name": "width" + }, + "link": 6180 + }, + { + "name": "height", + "type": "INT", + "widget": { + "name": "height" + }, + "link": 6179 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 6182, + 6183 + ] + }, + { + "name": "width", + "type": "INT", + "links": null + }, + { + "name": "height", + "type": "INT", + "links": null + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui-kjnodes", + "ver": "5dcda71011870278c35d92ff77a677ed2e538f2d", + "Node name for S&R": "ImageResizeKJv2" + }, + "widgets_values": [ + 512, + 512, + "lanczos", + "stretch", + "0, 0, 0", + "center", + 2 + ] + }, + { + "id": 3178, + "type": "SimpleMath+", + "pos": [ + 4100, + 3390 + ], + "size": [ + 320, + 100 + ], + "flags": { + "collapsed": true + }, + "order": 275, + "mode": 0, + "inputs": [ + { + "name": "a", + "shape": 7, + "type": "*", + "link": 4716 + }, + { + "name": "b", + "shape": 7, + "type": "*", + "link": 4714 + }, + { + "name": "c", + "shape": 7, + "type": "*", + "link": null + } + ], + "outputs": [ + { + "name": "INT", + "type": "INT", + "slot_index": 0, + "links": [ + 6180 + ] + }, + { + "name": "FLOAT", + "type": "FLOAT", + "links": null + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui_essentials", + "ver": "33ff89fd354d8ec3ab6affb605a79a931b445d99", + "Node name for S&R": "SimpleMath+" + }, + "widgets_values": [ + "a*b" + ] + }, + { + "id": 3182, + "type": "SimpleMath+", + "pos": [ + 4110, + 3620 + ], + "size": [ + 320, + 100 + ], + "flags": { + "collapsed": true + }, + "order": 276, + "mode": 0, + "inputs": [ + { + "name": "a", + "shape": 7, + "type": "*", + "link": 4717 + }, + { + "name": "b", + "shape": 7, + "type": "*", + "link": 4715 + }, + { + "name": "c", + "shape": 7, + "type": "*", + "link": null + } + ], + "outputs": [ + { + "name": "INT", + "type": "INT", + "slot_index": 0, + "links": [ + 6179 + ] + }, + { + "name": "FLOAT", + "type": "FLOAT", + "links": null + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui_essentials", + "ver": "33ff89fd354d8ec3ab6affb605a79a931b445d99", + "Node name for S&R": "SimpleMath+" + }, + "widgets_values": [ + "a*b" + ] + }, + { + "id": 703, + "type": "GetImageSize+", + "pos": [ + 3900, + 3500 + ], + "size": [ + 200, + 70 + ], + "flags": { + "collapsed": true + }, + "order": 191, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 2166 + } + ], + "outputs": [ + { + "name": "width", + "type": "INT", + "slot_index": 0, + "links": [ + 4716 + ] + }, + { + "name": "height", + "type": "INT", + "slot_index": 1, + "links": [ + 4717 + ] + }, + { + "name": "count", + "type": "INT", + "links": null + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui_essentials", + "ver": "33ff89fd354d8ec3ab6affb605a79a931b445d99", + "Node name for S&R": "GetImageSize+" + }, + "widgets_values": [] + }, + { + "id": 2453, + "type": "ImageSmartSharpen+", + "pos": [ + 1759.6929931640625, + 999.8751220703125 + ], + "size": [ + 310, + 250 + ], + "flags": { + "collapsed": false, + "pinned": true + }, + "order": 324, + "mode": 4, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 3481 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 3482 + ] + } + ], + "title": "Sharpen", + "properties": { + "enableTabs": true, + "tabWidth": 50, + "tabXOffset": 120, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui_essentials", + "ver": "33ff89fd354d8ec3ab6affb605a79a931b445d99", + "Node name for S&R": "ImageSmartSharpen+" + }, + "widgets_values": [ + 1, + 0.75, + 0, + 0.5 + ] + }, + { + "id": 2454, + "type": "Color Correct (mtb)", + "pos": [ + 1759.6929931640625, + 999.8751220703125 + ], + "size": [ + 310, + 250 + ], + "flags": { + "collapsed": false, + "pinned": true + }, + "order": 356, + "mode": 4, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 3482 + }, + { + "name": "mask", + "shape": 7, + "type": "MASK", + "link": null + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 4606 + ] + } + ], + "title": "CC", + "properties": { + "enableTabs": true, + "tabWidth": 50, + "tabXOffset": 175, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-mtb", + "ver": "8bf3545fec5b2a180607d40394b025a1e09c14b6", + "Node name for S&R": "Color Correct (mtb)" + }, + "widgets_values": [ + false, + 1, + 1, + 0, + 0, + 0, + 1, + 1 + ] + }, + { + "id": 3055, + "type": "ImagePadForOutpaintMasked", + "pos": [ + 1759.6929931640625, + 999.8751220703125 + ], + "size": [ + 310, + 250 + ], + "flags": { + "pinned": true + }, + "order": 377, + "mode": 4, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 4606 + }, + { + "name": "mask", + "shape": 7, + "type": "MASK", + "link": null + }, + { + "name": "feathering", + "type": "INT", + "widget": { + "name": "feathering" + }, + "link": 4977 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 4607 + ] + }, + { + "name": "MASK", + "type": "MASK", + "links": [ + 4608 + ] + } + ], + "title": "Pad", + "properties": { + "enableTabs": true, + "tabWidth": 50, + "tabXOffset": 230, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui-kjnodes", + "ver": "d835ac96042394299f76793544ee3643fd4b0457", + "Node name for S&R": "ImagePadForOutpaintMasked" + }, + "widgets_values": [ + 0, + 0, + 0, + 256, + 120 + ] + }, + { + "id": 3679, + "type": "GetImageSize+", + "pos": [ + 4040, + 8080 + ], + "size": [ + 210, + 70 + ], + "flags": { + "collapsed": true + }, + "order": 228, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 5482 + } + ], + "outputs": [ + { + "name": "width", + "type": "INT", + "slot_index": 0, + "links": [ + 5479 + ] + }, + { + "name": "height", + "type": "INT", + "slot_index": 1, + "links": [ + 5480 + ] + }, + { + "name": "count", + "type": "INT", + "links": null + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui_essentials", + "ver": "33ff89fd354d8ec3ab6affb605a79a931b445d99", + "Node name for S&R": "GetImageSize+" + }, + "widgets_values": [] + }, + { + "id": 4020, + "type": "ImpactControlNetApplyAdvancedSEGS", + "pos": [ + 4990, + 7410 + ], + "size": [ + 270, + 186 + ], + "flags": { + "collapsed": true + }, + "order": 368, + "mode": 4, + "inputs": [ + { + "name": "segs", + "type": "SEGS", + "link": 6064 + }, + { + "name": "control_net", + "type": "CONTROL_NET", + "link": 6108 + }, + { + "name": "segs_preprocessor", + "shape": 7, + "type": "SEGS_PREPROCESSOR", + "link": null + }, + { + "name": "control_image", + "shape": 7, + "type": "IMAGE", + "link": 6194 + }, + { + "name": "vae", + "shape": 7, + "type": "VAE", + "link": 6067 + }, + { + "name": "strength", + "type": "FLOAT", + "widget": { + "name": "strength" + }, + "link": 6068 + }, + { + "name": "start_percent", + "type": "FLOAT", + "widget": { + "name": "start_percent" + }, + "link": 6133 + }, + { + "name": "end_percent", + "type": "FLOAT", + "widget": { + "name": "end_percent" + }, + "link": 6134 + } + ], + "outputs": [ + { + "name": "SEGS", + "type": "SEGS", + "slot_index": 0, + "links": [ + 6057 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui-impact-pack", + "ver": "cd34cfdd638a996fd011be1b490c70a7e0fb505f", + "Node name for S&R": "ImpactControlNetApplyAdvancedSEGS" + }, + "widgets_values": [ + 1, + 0, + 1 + ] + }, + { + "id": 4000, + "type": "ControlNetApplyAdvanced", + "pos": [ + 4980, + 7170 + ], + "size": [ + 300, + 186 + ], + "flags": { + "collapsed": true + }, + "order": 367, + "mode": 4, + "inputs": [ + { + "name": "positive", + "type": "CONDITIONING", + "link": 6115 + }, + { + "name": "negative", + "type": "CONDITIONING", + "link": 6110 + }, + { + "name": "control_net", + "type": "CONTROL_NET", + "link": 6107 + }, + { + "name": "image", + "type": "IMAGE", + "link": 6195 + }, + { + "name": "vae", + "shape": 7, + "type": "VAE", + "link": 6002 + }, + { + "name": "strength", + "type": "FLOAT", + "widget": { + "name": "strength" + }, + "link": 6003 + }, + { + "name": "start_percent", + "type": "FLOAT", + "widget": { + "name": "start_percent" + }, + "link": 6131 + }, + { + "name": "end_percent", + "type": "FLOAT", + "widget": { + "name": "end_percent" + }, + "link": 6132 + } + ], + "outputs": [ + { + "name": "positive", + "type": "CONDITIONING", + "slot_index": 0, + "links": [ + 6009 + ] + }, + { + "name": "negative", + "type": "CONDITIONING", + "slot_index": 1, + "links": [ + 6010 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.34", + "Node name for S&R": "ControlNetApplyAdvanced" + }, + "widgets_values": [ + 1, + 0, + 1 + ] + }, + { + "id": 3493, + "type": "Canny", + "pos": [ + 3980, + 7910 + ], + "size": [ + 310, + 82 + ], + "flags": { + "collapsed": false + }, + "order": 314, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 5212 + }, + { + "name": "low_threshold", + "type": "FLOAT", + "widget": { + "name": "low_threshold" + }, + "link": 6190 + }, + { + "name": "high_threshold", + "type": "FLOAT", + "widget": { + "name": "high_threshold" + }, + "link": 6191 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 5483 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 80, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "Canny" + }, + "widgets_values": [ + 0.010000000000000002, + 0.32000000000000006 + ] + }, + { + "id": 4068, + "type": "Canny", + "pos": [ + 4000, + 7650 + ], + "size": [ + 310, + 82 + ], + "flags": { + "collapsed": false + }, + "order": 313, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 6161 + }, + { + "name": "low_threshold", + "type": "FLOAT", + "widget": { + "name": "low_threshold" + }, + "link": 6188 + }, + { + "name": "high_threshold", + "type": "FLOAT", + "widget": { + "name": "high_threshold" + }, + "link": 6189 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 6162, + 6193 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 80, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "Canny" + }, + "widgets_values": [ + 0.010000000000000002, + 0.32000000000000006 + ] + }, + { + "id": 3680, + "type": "ImageResize+", + "pos": [ + 4410, + 7940 + ], + "size": [ + 300, + 218 + ], + "flags": { + "collapsed": true + }, + "order": 350, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 5483 + }, + { + "name": "width", + "type": "INT", + "widget": { + "name": "width" + }, + "link": 5479 + }, + { + "name": "height", + "type": "INT", + "widget": { + "name": "height" + }, + "link": 5480 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 6165, + 6196 + ] + }, + { + "name": "width", + "type": "INT", + "links": null + }, + { + "name": "height", + "type": "INT", + "links": null + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui_essentials", + "ver": "33ff89fd354d8ec3ab6affb605a79a931b445d99", + "Node name for S&R": "ImageResize+" + }, + "widgets_values": [ + 512, + 512, + "lanczos", + "keep proportion", + "always", + 0 + ] + }, + { + "id": 4082, + "type": "SplitVec2", + "pos": [ + 3830, + 7810 + ], + "size": [ + 140, + 46 + ], + "flags": { + "collapsed": true + }, + "order": 227, + "mode": 0, + "inputs": [ + { + "name": "a", + "type": "VEC2", + "link": 6185 + } + ], + "outputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "links": [ + 6188, + 6190 + ] + }, + { + "name": "FLOAT", + "type": "FLOAT", + "links": [ + 6189, + 6191 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "aux_id": "robertvoy/Comfyui-Flux-Continuum", + "ver": "0524a071ad9f1b6a4012f083a610a7a7d5f2991a", + "Node name for S&R": "SplitVec2" + }, + "widgets_values": [] + }, + { + "id": 4069, + "type": "ImageBatch", + "pos": [ + 4630, + 7680 + ], + "size": [ + 170, + 46 + ], + "flags": { + "collapsed": true + }, + "order": 370, + "mode": 0, + "inputs": [ + { + "name": "image1", + "type": "IMAGE", + "link": 6162 + }, + { + "name": "image2", + "type": "IMAGE", + "link": 6165 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 6174 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.34", + "Node name for S&R": "ImageBatch" + }, + "widgets_values": [] + }, + { + "id": 4074, + "type": "CannySlider", + "pos": [ + 1760, + 1460 + ], + "size": [ + 310, + 82 + ], + "flags": { + "pinned": true + }, + "order": 163, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "VEC2", + "type": "VEC2", + "links": [ + 6184 + ] + } + ], + "title": "Canny Preprocessor", + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "aux_id": "robertvoy/Comfyui-Flux-Continuum", + "ver": "0524a071ad9f1b6a4012f083a610a7a7d5f2991a", + "Node name for S&R": "CannySlider" + }, + "widgets_values": [ + 0.4000000000000001, + 0.8000000000000002 + ] + }, + { + "id": 4056, + "type": "DWPreprocessor", + "pos": [ + 6650, + 7200 + ], + "size": [ + 270, + 222 + ], + "flags": {}, + "order": 222, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 6128 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 6129, + 6130, + 6197 + ] + }, + { + "name": "POSE_KEYPOINT", + "type": "POSE_KEYPOINT", + "links": null + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui_controlnet_aux", + "ver": "83463c2e4b04e729268e57f638b4212e0da4badc", + "Node name for S&R": "DWPreprocessor" + }, + "widgets_values": [ + "enable", + "enable", + "enable", + 1024, + "yolox_l.onnx", + "dw-ll_ucoco_384_bs5.torchscript.pt", + "disable" + ] + }, + { + "id": 4101, + "type": "ImageBatch", + "pos": [ + 6230, + 7670 + ], + "size": [ + 170, + 46 + ], + "flags": { + "collapsed": false + }, + "order": 373, + "mode": 0, + "inputs": [ + { + "name": "image1", + "type": "IMAGE", + "link": 6216 + }, + { + "name": "image2", + "type": "IMAGE", + "link": 6212 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 6213 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.34", + "Node name for S&R": "ImageBatch" + }, + "widgets_values": [] + }, + { + "id": 4099, + "type": "ImageResize+", + "pos": [ + 5950, + 7960 + ], + "size": [ + 300, + 218 + ], + "flags": { + "collapsed": true + }, + "order": 351, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 6219 + }, + { + "name": "width", + "type": "INT", + "widget": { + "name": "width" + }, + "link": 6208 + }, + { + "name": "height", + "type": "INT", + "widget": { + "name": "height" + }, + "link": 6209 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 6206, + 6212 + ] + }, + { + "name": "width", + "type": "INT", + "links": null + }, + { + "name": "height", + "type": "INT", + "links": null + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui_essentials", + "ver": "33ff89fd354d8ec3ab6affb605a79a931b445d99", + "Node name for S&R": "ImageResize+" + }, + "widgets_values": [ + 512, + 512, + "lanczos", + "keep proportion", + "always", + 0 + ] + }, + { + "id": 4091, + "type": "GetImageSize+", + "pos": [ + 5770, + 8080 + ], + "size": [ + 210, + 70 + ], + "flags": { + "collapsed": true + }, + "order": 316, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 6218 + } + ], + "outputs": [ + { + "name": "width", + "type": "INT", + "slot_index": 0, + "links": [ + 6208 + ] + }, + { + "name": "height", + "type": "INT", + "slot_index": 1, + "links": [ + 6209 + ] + }, + { + "name": "count", + "type": "INT", + "links": null + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui_essentials", + "ver": "33ff89fd354d8ec3ab6affb605a79a931b445d99", + "Node name for S&R": "GetImageSize+" + }, + "widgets_values": [] + }, + { + "id": 4104, + "type": "DepthAnythingV2Preprocessor", + "pos": [ + 5420, + 7930 + ], + "size": [ + 310, + 82 + ], + "flags": { + "collapsed": false + }, + "order": 230, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 6217 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 6218, + 6219 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui_controlnet_aux", + "ver": "1e9eac6377c882da8bb360c7544607036904362c", + "Node name for S&R": "DepthAnythingV2Preprocessor" + }, + "widgets_values": [ + "depth_anything_v2_vitl.pth", + 1024 + ] + }, + { + "id": 4103, + "type": "DepthAnythingV2Preprocessor", + "pos": [ + 5430, + 7660 + ], + "size": [ + 310, + 82 + ], + "flags": { + "collapsed": false + }, + "order": 229, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 6214 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 6215, + 6216 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui_controlnet_aux", + "ver": "1e9eac6377c882da8bb360c7544607036904362c", + "Node name for S&R": "DepthAnythingV2Preprocessor" + }, + "widgets_values": [ + "depth_anything_v2_vitl.pth", + 1024 + ] + }, + { + "id": 3360, + "type": "CLIPTextEncode", + "pos": [ + 3770, + 4940 + ], + "size": [ + 400, + 200 + ], + "flags": { + "collapsed": true + }, + "order": 205, + "mode": 0, + "inputs": [ + { + "name": "clip", + "type": "CLIP", + "link": 5012 + } + ], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "slot_index": 0, + "links": [ + 4995 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "CLIPTextEncode" + }, + "widgets_values": [ + "" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 4019, + "type": "ImpactControlNetApplyAdvancedSEGS", + "pos": [ + 6060, + 7410 + ], + "size": [ + 270, + 178 + ], + "flags": { + "collapsed": true + }, + "order": 387, + "mode": 4, + "inputs": [ + { + "name": "segs", + "type": "SEGS", + "link": 6057 + }, + { + "name": "control_net", + "type": "CONTROL_NET", + "link": 6106 + }, + { + "name": "segs_preprocessor", + "shape": 7, + "type": "SEGS_PREPROCESSOR", + "link": null + }, + { + "name": "control_image", + "shape": 7, + "type": "IMAGE", + "link": 6221 + }, + { + "name": "vae", + "shape": 7, + "type": "VAE", + "link": 6060 + }, + { + "name": "strength", + "type": "FLOAT", + "widget": { + "name": "strength" + }, + "link": 6061 + }, + { + "name": "start_percent", + "type": "FLOAT", + "widget": { + "name": "start_percent" + }, + "link": 6138 + }, + { + "name": "end_percent", + "type": "FLOAT", + "widget": { + "name": "end_percent" + }, + "link": 6139 + } + ], + "outputs": [ + { + "name": "SEGS", + "type": "SEGS", + "slot_index": 0, + "links": [ + 6050 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui-impact-pack", + "ver": "cd34cfdd638a996fd011be1b490c70a7e0fb505f", + "Node name for S&R": "ImpactControlNetApplyAdvancedSEGS" + }, + "widgets_values": [ + 1, + 0, + 1 + ] + }, + { + "id": 4005, + "type": "ControlNetApplyAdvanced", + "pos": [ + 6130, + 7160 + ], + "size": [ + 300, + 178 + ], + "flags": { + "collapsed": true + }, + "order": 386, + "mode": 4, + "inputs": [ + { + "name": "positive", + "type": "CONDITIONING", + "link": 6009 + }, + { + "name": "negative", + "type": "CONDITIONING", + "link": 6010 + }, + { + "name": "control_net", + "type": "CONTROL_NET", + "link": 6105 + }, + { + "name": "image", + "type": "IMAGE", + "link": 6222 + }, + { + "name": "vae", + "shape": 7, + "type": "VAE", + "link": 6013 + }, + { + "name": "strength", + "type": "FLOAT", + "widget": { + "name": "strength" + }, + "link": 6014 + }, + { + "name": "start_percent", + "type": "FLOAT", + "widget": { + "name": "start_percent" + }, + "link": 6140 + }, + { + "name": "end_percent", + "type": "FLOAT", + "widget": { + "name": "end_percent" + }, + "link": 6141 + } + ], + "outputs": [ + { + "name": "positive", + "type": "CONDITIONING", + "slot_index": 0, + "links": [ + 6017 + ] + }, + { + "name": "negative", + "type": "CONDITIONING", + "slot_index": 1, + "links": [ + 6018 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.34", + "Node name for S&R": "ControlNetApplyAdvanced" + }, + "widgets_values": [ + 1, + 0, + 1 + ] + }, + { + "id": 1534, + "type": "UpscaleModelLoader", + "pos": [ + 1760, + 1330 + ], + "size": [ + 310, + 60 + ], + "flags": { + "pinned": true + }, + "order": 164, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "UPSCALE_MODEL", + "type": "UPSCALE_MODEL", + "slot_index": 0, + "links": [ + 2361 + ] + } + ], + "title": "Upscale Model", + "properties": { + "enableTabs": true, + "tabWidth": 75, + "tabXOffset": 110, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "UpscaleModelLoader" + }, + "widgets_values": [ + "4xNomos8kDAT.pth" + ] + }, + { + "id": 4076, + "type": "ResolutionMultiplySlider", + "pos": [ + 1760, + 1330 + ], + "size": [ + 310, + 60 + ], + "flags": { + "pinned": true + }, + "order": 165, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "links": [ + 6178 + ] + } + ], + "title": "Resolution Multiply", + "properties": { + "enableTabs": true, + "tabWidth": 95, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "aux_id": "robertvoy/Comfyui-Flux-Continuum", + "ver": "0524a071ad9f1b6a4012f083a610a7a7d5f2991a", + "Node name for S&R": "ResolutionMultiplySlider" + }, + "widgets_values": [ + 2 + ] + }, + { + "id": 922, + "type": "Seed (rgthree)", + "pos": [ + 480, + 1160 + ], + "size": [ + 310, + 130 + ], + "flags": { + "collapsed": false + }, + "order": 166, + "mode": 0, + "inputs": [], + "outputs": [ + { + "dir": 4, + "name": "SEED", + "shape": 3, + "type": "INT", + "slot_index": 0, + "links": [ + 6239 + ] + } + ], + "title": "Seed", + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "rgthree-comfy", + "ver": "32142fe476878a354dda6e2d4b5ea98960de3ced" + }, + "widgets_values": [ + -1, + null, + null, + null + ] + }, + { + "id": 3337, + "type": "LoadImage", + "pos": [ + 1760, + 170 + ], + "size": [ + 310, + 410 + ], + "flags": { + "collapsed": false + }, + "order": 167, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 5374 + ] + }, + { + "name": "MASK", + "type": "MASK", + "links": null + } + ], + "title": "IP3", + "properties": { + "enableTabs": true, + "tabWidth": 50, + "tabXOffset": 210, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "LoadImage" + }, + "widgets_values": [ + "example.png", + "image" + ], + "color": "#223", + "bgcolor": "#335" + }, + { + "id": 3557, + "type": "LoadImage", + "pos": [ + 1760, + 170 + ], + "size": [ + 310, + 410 + ], + "flags": { + "collapsed": false + }, + "order": 168, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 5370 + ] + }, + { + "name": "MASK", + "type": "MASK", + "links": null + } + ], + "title": "IP2", + "properties": { + "enableTabs": true, + "tabWidth": 40, + "tabXOffset": 165, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "LoadImage" + }, + "widgets_values": [ + "example.png", + "image" + ], + "color": "#323", + "bgcolor": "#535" + }, + { + "id": 2774, + "type": "LoadImage", + "pos": [ + 1760, + 170 + ], + "size": [ + 310, + 410 + ], + "flags": { + "collapsed": false + }, + "order": 169, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 5371 + ] + }, + { + "name": "MASK", + "type": "MASK", + "links": null + } + ], + "title": "IP1", + "properties": { + "enableTabs": true, + "tabWidth": 40, + "tabXOffset": 120, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "LoadImage" + }, + "widgets_values": [ + "example.png", + "image" + ], + "color": "#432", + "bgcolor": "#653" + }, + { + "id": 3949, + "type": "LoadImage", + "pos": [ + 1760, + 170 + ], + "size": [ + 310, + 410 + ], + "flags": { + "collapsed": false + }, + "order": 170, + "mode": 0, + "inputs": [], + "outputs": [ + { + "label": "IMAGE", + "name": "IMAGE", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 5947 + ] + }, + { + "name": "MASK", + "type": "MASK", + "slot_index": 1, + "links": [] + } + ], + "title": "CN Input", + "properties": { + "enableTabs": true, + "tabWidth": 50, + "tabXOffset": 65, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "LoadImage" + }, + "widgets_values": [ + "example.png", + "image" + ], + "color": "#432", + "bgcolor": "#653" + }, + { + "id": 2468, + "type": "TextVersions", + "pos": [ + 840, + 1320 + ], + "size": [ + 870, + 88 + ], + "flags": { + "pinned": true + }, + "order": 171, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "text", + "type": "STRING", + "slot_index": 0, + "links": [ + 3493 + ] + } + ], + "title": "Tags", + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "aux_id": "robertvoy/Comfyui-Flux-Continuum", + "ver": "19b70c33f872fe4e57dea291bbdd0f5559258a14", + "Node name for S&R": "TextVersions", + "versionAmount": 5 + }, + "widgets_values": [ + "cinematic" + ], + "color": "#2a363b", + "bgcolor": "#3f5159", + "tabContents": [ + "cinematic", + "", + "", + "", + "" + ], + "activeTab": 0 + }, + { + "id": 2334, + "type": "Image Comparer (rgthree)", + "pos": [ + 840, + 150 + ], + "size": [ + 870, + 920 + ], + "flags": { + "collapsed": false, + "pinned": true + }, + "order": 234, + "mode": 0, + "inputs": [ + { + "dir": 3, + "name": "image_a", + "type": "IMAGE", + "link": 3426 + }, + { + "dir": 3, + "name": "image_b", + "type": "IMAGE", + "link": 3425 + } + ], + "outputs": [], + "title": "Img Compare", + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "rgthree-comfy", + "ver": "32142fe476878a354dda6e2d4b5ea98960de3ced", + "comparer_mode": "Slide" + }, + "widgets_values": [ + [ + { + "name": "A", + "selected": true, + "url": "/api/view?filename=rgthree.compare._temp_cxsxg_00058_.png&type=temp&subfolder=&rand=0.634750032715654" + }, + { + "name": "B", + "selected": true, + "url": "/api/view?filename=rgthree.compare._temp_cxsxg_00059_.png&type=temp&subfolder=&rand=0.45844097721161203" + } + ] + ], + "color": "#222", + "bgcolor": "#000" + }, + { + "id": 3975, + "type": "IPAdapterSlider", + "pos": [ + 1760, + 800 + ], + "size": [ + 310, + 110 + ], + "flags": { + "collapsed": false, + "pinned": true + }, + "order": 172, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "VEC3", + "type": "VEC3", + "links": [ + 5989 + ] + } + ], + "title": "IPAdapter", + "properties": { + "enableTabs": true, + "tabWidth": 65, + "tabXOffset": 220, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "aux_id": "robertvoy/Comfyui-Flux-Continuum", + "ver": "19b70c33f872fe4e57dea291bbdd0f5559258a14", + "Node name for S&R": "IPAdapterSlider" + }, + "widgets_values": [ + 0, + 0, + 0 + ], + "color": "#432", + "bgcolor": "#653" + }, + { + "id": 2219, + "type": "LoadImage", + "pos": [ + 1760, + 170 + ], + "size": [ + 310, + 410 + ], + "flags": { + "collapsed": false + }, + "order": 173, + "mode": 0, + "inputs": [], + "outputs": [ + { + "label": "IMAGE", + "name": "IMAGE", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 4446 + ] + }, + { + "name": "MASK", + "type": "MASK", + "slot_index": 1, + "links": [ + 5877 + ] + } + ], + "title": "Img Load", + "properties": { + "enableTabs": true, + "tabWidth": 50, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "LoadImage" + }, + "widgets_values": [ + "example.png", + "image" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1573, + "type": "Fast Groups Bypasser (rgthree)", + "pos": [ + 480, + 1460 + ], + "size": [ + 310, + 82 + ], + "flags": { + "collapsed": false, + "pinned": true + }, + "order": 174, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "OPT_CONNECTION", + "type": "*", + "links": null + } + ], + "title": "Options", + "properties": { + "matchColors": "", + "matchTitle": "Save|Play", + "showNav": true, + "sort": "position", + "customSortAlphabet": "", + "toggleRestriction": "default", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + } + }, + { + "id": 1343, + "type": "ImageCrop+", + "pos": [ + 1759.6929931640625, + 999.8751220703125 + ], + "size": [ + 310, + 250 + ], + "flags": { + "collapsed": false, + "pinned": true + }, + "order": 274, + "mode": 4, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 2793 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 3481 + ] + }, + { + "name": "x", + "type": "INT", + "links": null + }, + { + "name": "y", + "type": "INT", + "links": null + } + ], + "title": "Crop", + "properties": { + "enableTabs": true, + "tabWidth": 50, + "tabXOffset": 65, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui_essentials", + "ver": "33ff89fd354d8ec3ab6affb605a79a931b445d99", + "Node name for S&R": "ImageCrop+" + }, + "widgets_values": [ + 2560, + 2560, + "center", + 0, + 0 + ] + }, + { + "id": 1342, + "type": "ImageResize+", + "pos": [ + 1759.6929931640625, + 999.8751220703125 + ], + "size": [ + 310, + 250 + ], + "flags": { + "collapsed": false, + "pinned": true + }, + "order": 190, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 2792 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 2793 + ] + }, + { + "name": "width", + "type": "INT", + "links": null + }, + { + "name": "height", + "type": "INT", + "links": null + } + ], + "title": "Resize", + "properties": { + "enableTabs": true, + "tabWidth": 50, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui_essentials", + "ver": "33ff89fd354d8ec3ab6affb605a79a931b445d99", + "Node name for S&R": "ImageResize+" + }, + "widgets_values": [ + 1344, + 1344, + "lanczos", + "keep proportion", + "always", + 8 + ] + }, + { + "id": 2464, + "type": "TextVersions", + "pos": [ + 840, + 1130 + ], + "size": [ + 870, + 150 + ], + "flags": { + "collapsed": false, + "pinned": true + }, + "order": 175, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "text", + "type": "STRING", + "slot_index": 0, + "links": [ + 3492 + ] + } + ], + "title": "Prompt", + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "aux_id": "robertvoy/Comfyui-Flux-Continuum", + "ver": "19b70c33f872fe4e57dea291bbdd0f5559258a14", + "Node name for S&R": "TextVersions", + "versionAmount": 8 + }, + "widgets_values": [ + "a photo of a sea turtle" + ], + "color": "#232", + "bgcolor": "#353", + "tabContents": [ + "a photo of a sea turtle", + "", + "", + "", + "", + "", + "", + "" + ], + "activeTab": 0 + }, + { + "id": 3000, + "type": "PreviewImage", + "pos": [ + 840, + 150 + ], + "size": [ + 870, + 920 + ], + "flags": { + "collapsed": false, + "pinned": true + }, + "order": 235, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 4414 + } + ], + "outputs": [], + "title": "Img Preview", + "properties": { + "enableTabs": true, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": true, + "secondTabText": "Img Compare", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "PreviewImage" + }, + "widgets_values": [], + "color": "#222", + "bgcolor": "#000" + }, + { + "id": 3920, + "type": "StyleModelApply", + "pos": [ + 5230, + 6630 + ], + "size": [ + 270, + 122 + ], + "flags": {}, + "order": 348, + "mode": 0, + "inputs": [ + { + "name": "conditioning", + "type": "CONDITIONING", + "link": 5884 + }, + { + "name": "style_model", + "type": "STYLE_MODEL", + "link": 5883 + }, + { + "name": "clip_vision_output", + "type": "CLIP_VISION_OUTPUT", + "link": 5882 + }, + { + "name": "strength", + "type": "FLOAT", + "widget": { + "name": "strength" + }, + "link": 5885 + } + ], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [ + 5901 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.28", + "Node name for S&R": "StyleModelApply" + }, + "widgets_values": [ + 1, + "attn_bias" + ] + }, + { + "id": 3376, + "type": "SetNode", + "pos": [ + 3371.815673828125, + 960 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 244, + "mode": 0, + "inputs": [ + { + "name": "STYLE_MODEL", + "type": "STYLE_MODEL", + "link": 5033 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_model_redux", + "properties": { + "previousName": "model_redux" + }, + "widgets_values": [ + "model_redux" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 3377, + "type": "SetNode", + "pos": [ + 3371.815673828125, + 1060 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 245, + "mode": 0, + "inputs": [ + { + "name": "CLIP_VISION", + "type": "CLIP_VISION", + "link": 5034 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_model_clipVision", + "properties": { + "previousName": "model_clipVision" + }, + "widgets_values": [ + "model_clipVision" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 3364, + "type": "SetNode", + "pos": [ + 3371.815673828125, + 840 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 243, + "mode": 0, + "inputs": [ + { + "name": "MODEL", + "type": "MODEL", + "link": 5014 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_model_canny", + "properties": { + "previousName": "model_canny" + }, + "widgets_values": [ + "model_canny" + ], + "color": "#223", + "bgcolor": "#335" + }, + { + "id": 3363, + "type": "SetNode", + "pos": [ + 3371.815673828125, + 720 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 242, + "mode": 0, + "inputs": [ + { + "name": "MODEL", + "type": "MODEL", + "link": 5013 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_model_depth", + "properties": { + "previousName": "model_depth" + }, + "widgets_values": [ + "model_depth" + ], + "color": "#223", + "bgcolor": "#335" + }, + { + "id": 3238, + "type": "SetNode", + "pos": [ + 3371.815673828125, + 590 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 252, + "mode": 0, + "inputs": [ + { + "name": "MODEL", + "type": "MODEL", + "link": 4805 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "slot_index": 0, + "links": null + } + ], + "title": "Set_model_fill", + "properties": { + "previousName": "model_fill" + }, + "widgets_values": [ + "model_fill" + ], + "color": "#223", + "bgcolor": "#335" + }, + { + "id": 832, + "type": "SetNode", + "pos": [ + 3371.815673828125, + 320 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 236, + "mode": 0, + "inputs": [ + { + "name": "VAE", + "type": "VAE", + "link": 4425 + } + ], + "outputs": [ + { + "name": "VAE", + "type": "VAE", + "slot_index": 0, + "links": [ + 5324 + ] + } + ], + "title": "Set_vae", + "properties": { + "previousName": "vae" + }, + "widgets_values": [ + "vae" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 1114, + "type": "SetNode", + "pos": [ + 3370, + 430 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 251, + "mode": 0, + "inputs": [ + { + "name": "CLIP", + "type": "CLIP", + "link": 4424 + } + ], + "outputs": [ + { + "name": "CLIP", + "type": "CLIP", + "slot_index": 0, + "links": [ + 5319 + ] + } + ], + "title": "Set_clip", + "properties": { + "previousName": "clip" + }, + "widgets_values": [ + "clip" + ], + "color": "#432", + "bgcolor": "#653" + }, + { + "id": 1630, + "type": "Label (rgthree)", + "pos": [ + 770, + 100 + ], + "size": [ + 26.10416603088379, + 36 + ], + "flags": { + "allow_interaction": true + }, + "order": 176, + "mode": 0, + "inputs": [], + "outputs": [], + "title": "v 1.6", + "properties": { + "fontSize": 36, + "fontFamily": "\n", + "fontColor": "#ffffff", + "textAlign": "left", + "backgroundColor": "transparent", + "padding": 0, + "borderRadius": 0, + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "color": "#fff0", + "bgcolor": "#fff0" + }, + { + "id": 2413, + "type": "ImageDisplay", + "pos": [ + 470, + 90 + ], + "size": [ + 330, + 65.24058532714844 + ], + "flags": {}, + "order": 177, + "mode": 0, + "inputs": [], + "outputs": [], + "title": "Unnamed", + "properties": { + "originalWidth": 956, + "originalHeight": 189, + "maintainAspectRatio": true, + "imageBase64": "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Y0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALEwAACxMBAJqcGAAABoJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDkuMS1jMDAyIDc5LmI3YzY0Y2MsIDIwMjQvMDcvMTYtMDc6NTk6NDAgICAgICAgICI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiB4bWxuczpwaG90b3Nob3A9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGhvdG9zaG9wLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCAyNi4xICgyMDI0MTAxOS5tLjI4MTUgYTI0OWQwNCkgIChXaW5kb3dzKSIgeG1wOkNyZWF0ZURhdGU9IjIwMjQtMTAtMjNUMTg6NTQ6NDQrMTE6MDAiIHhtcDpNb2RpZnlEYXRlPSIyMDI0LTEwLTIzVDE5OjIzOjMzKzExOjAwIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDI0LTEwLTIzVDE5OjIzOjMzKzExOjAwIiBkYzpmb3JtYXQ9ImltYWdlL3BuZyIgcGhvdG9zaG9wOkNvbG9yTW9kZT0iMyIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDoyYzZmNjdjNy02NTI1LTdjNDctYmU3MC01NmFmYWQ0Y2YzMmQiIHhtcE1NOkRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmNmNTZlYi03NTZhLWY3NGMtYmYwYS1lM2JlZmY1YWMxMWYiIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo5MmE5MDI5Ni1jOTE2LWUwNDgtYTM0My1jNjgwYmVjYWNkNTEiPiA8eG1wTU06SGlzdG9yeT4gPHJkZjpTZXE+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJjcmVhdGVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjkyYTkwMjk2LWM5MTYtZTA0OC1hMzQzLWM2ODBiZWNhY2Q1MSIgc3RFdnQ6d2hlbj0iMjAyNC0xMC0yM1QxODo1NDo0NCsxMTowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIDI2LjEgKDIwMjQxMDE5Lm0uMjgxNSBhMjQ5ZDA0KSAgKFdpbmRvd3MpIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJjb252ZXJ0ZWQiIHN0RXZ0OnBhcmFtZXRlcnM9ImZyb20gYXBwbGljYXRpb24vdm5kLmFkb2JlLnBob3Rvc2hvcCB0byBpbWFnZS9wbmciLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjJjNmY2N2M3LTY1MjUtN2M0Ny1iZTcwLTU2YWZhZDRjZjMyZCIgc3RFdnQ6d2hlbj0iMjAyNC0xMC0yM1QxOToyMzozMysxMTowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIDI2LjEgKDIwMjQxMDE5Lm0uMjgxNSBhMjQ5ZDA0KSAgKFdpbmRvd3MpIiBzdEV2dDpjaGFuZ2VkPSIvIi8+IDwvcmRmOlNlcT4gPC94bXBNTTpIaXN0b3J5PiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PpGGSOYAA3j5SURBVHja7P13uK5nWSYOn9ddnvLWtfZau+8kO72TBJJACiUUg4iAUgVEBAfEBiM4Kli+0XEcHXUcHQuOo+PMqIwzDqMCCkiHQEgggVTSy05233ut9Zan3O33x3U/z/uunZ2gv+87ji9/vFeOJKu+5X7Kus/rPK/zJCIBhAClFISUsMYghAApJZz3CCGAAEgp4OEATwie4OGhEgEQIXggUQmstQACBABjHCAIeacDZw3qqoLSCUIISHSCopqCIAAAQggAAcYYaJ2ABAEAnOXnz/McRART1/DewwfHr4sEhJJACHDWI0kSBO8RKCCEAIDgnYeUEkISrLfwziNYfs6l4RDWWdR1BessnPVQSkFpCWsdfPBw3kFKieAcfAjQ8X2mWYIQAGNMfM8S3nmQBCAIzlgIKaGkhHMOUmpYayGkgCCCNQaAgBQCIMBYw88TAoL3UDqBkgpVXSEgoNvNUJU1vA2AIEhB8C4ABKhEwzsPZx0CACIBUICzBgSCkhrOO/jgoBMNJRRqY4AQEBDg4YFAkEKABCG4AK0TWGdhTIUkSeHjuSCFgjUWgIfOUhAAUxsEeBAEiIgfAwHBOwihIEjAOgcfLCQpgAjOWWilgQB4eD7uklAWBQQIgiQCAJVIGGvgrYeSCsZYyEQg0QlMZWCt4XNXSHh4fp3OQwoJ5wKIAjx5AACB4L2HEALx9ACBAAQEAMHzzwMEBMyKACL+3eZxNleI/yUQ4u+3X6f2/2HuZ/knZz/bfDZ7RbOfxdxX6AmPfeLrOPFr/O6ICETE10UAaO7Hwtyvhfg9ImqfN4TAP4MApRW8j98Jnr8eAFCAEBJAiOcKIOK5ABC8dyAiCCHgvW9fS/CzhSZB7fM0bz0gzI5TCCdZqaeuZo2pXcb2wG96w/Pr05wjzeMHzN5/8zA+8D1ECIKzNl538VgSnz/8fkJ8v/G6DPE1hfgSRHxJ8T5IIDjn4zEDBEk4bzcdDyUlPBDvbQLOOpCMx9bH+2lo3hMgtISzDkpqeMf3AQcLpVK4eC0vLS+hLCtMJ9P2tfBxD/F18bsPYfP527z2Zu34dcYrIQQIQQAFPmdCcywEr4Hg8wYOEEIiUHz8eL4pJUFE/P6lgLcO3gcI4q/74EAQkEohBA9BfG4poVGZAv3+AMPhEMeOHkWW56jqEiEQut0eqqKA8wYueNRlBSk0pCRIrfneTASlEkwmY3Q6uSCh/HQ6RqIUSMh4fgPGWT6nnUNdV1jUoha1qEUtalFPv5K8WWk2MgHe8SYlIPCWhhjsaqV4syFV3NBEXOA9yIW4ieGNbYibex88QvDtBi54/j0PD+8cJEn4+Lwkqd3INJtg7xkIBe9R1TVICCgpIJUEIEBCwMfHFSSAuBFnwMevm0AQRHDBAwHodrsgIqRJCh88yqqEIIJQkgG/NVjdugoiGQEQb0iV1Oh1+8jzHKauYUwNAFBKgwJBKYVAvOFTWkNKCe9cBAz8mnzcHSaJQgB4nYmBA29SASkkhJCobQXnHBBcBFq8AeX1B6zzkEJAawaBQhA3KaxtN6xK8bFygTfcfLwCgvNIEg2lNDw8nLMtGJRCQCcJjLHwzkFIASlVbEoA1tVQiebdXiB4Z+G8BSD58YKH9wwiAh9ECCVBgkAk2nVhTBAiEI7nU/Dw1oHiGkjJx8AaAyElXLAIFJCnWcQqAVIq+HACxBQzwCiFAoEgSfA5GgJkBGaIIKZp6lCLiuL/TsBTBAYRT/zeE4EXPQkApvjPZiDbfG0ewoX2a/Po+4m/O//8JwGAEbxSaLAdAWIOZkfAJ0i094DN74Ffn9aqbVYFBHjnW8DIYIfP483Ah+JxFHzehdACpk0vURAozDUETsDtgkS8Sc0dh38C2MXcym5ekBNbBNQeW0FirhEQZoC5+bU5gEeg2FzD3LHC7ByZOy4NEAzNmoEQmq5D/H/wAT54SEEtyPTBt8CZ4s867xhsN9d7BNNK6hYok+SmpA+ANRYEIE9zWGfhKYCEACARrIcAN5qscSAhGHwGD0ESMt5vAvymRhAJghQyrlnz94J/pAHuIYR4f4t/X5p7EMVmgI/gNr5PUHMfiI2NuC4+eATHwFtJHY9N/NsQuMmVpClEfH3GGaR5BqUU1tfXoBL+2yWl5r8VQiLAo6yreE8VSPMOlle28N8q6+GMhfehf/2Lv/Oay5/1rBfef9+9R73364F4Xa210KmGd7ZtCvzcz/3cYkexqEUtalGLWtTTsFSzeUEAnPPtHs25GSPjnIdzBkpLpEmCyXTCrCnFTj0RvAd8sHDeAXBIkhTOWTjjoJUGY9D5TStvLDudLopiiuCBNE1RVzUAQpIkkEqhKEo4UyNJNIgEnHNQCTOhJCSG/S6qaQGtMmitMS0mcN5ieXkLjDGoygogQjmZQicKeZbDO88sa23bjb6SEiqyCMeOrjGrrRSsNcjSNAJWD+ssZKKRyAzOWxTTKbRKeRNHzJIaw8yqFIoZYiHjRtoCwaOsfAsUQARIAQoewc025GmagwjwISBRKeq6io8VN7TwcCEg0ykDf89sdCCPAAclEmaTVYK6rqCk5I1pYIbFOQ8fauSdvGVipNRxY8pMp9aKmXEbWXIhQIGZFUkSzhgEBAgpIYWElASQQF1XoMBA2XkLpRQz6xFQWxBvrKWAEB5aatSmhvEOQjJArW0NyTt55FkHzjvUxkFIQlXV8N5BCmbjnTVAZNKBgE4nR1nV/HlkFhvmloRoGcIGnMyzWSGEGUSiTTgLT42xaI573AxmN9PFc78xB4oaIBhOANGbH/PksPqkX55DdMyyzoHNOQAS4usgQRCxIdAguwa4EhFUVB8wm9+AZCB4fgACM3kgioApxMfwcI6fR0pu+jTvqGGbT2RsW7ZUAOTj4wb6f3eHa1ndObAbTuDaY/MluNAqFHyksUkQ4APmewHUgmaP4BvwG8FcwGYWnbix1eC4poHWcNW+bbbM2GQRGUQPD2oZ4IbpZmUL/06AUPwkkuL5HxiIgjwcBSgpgKBBPmBaTvn+TICUEgoBTvLxMtbFBgU3N2pTt++BSMC75vjO/kZwc0kgROVDcx2hhfZ83NqvNZcDBVAgAAJC8nNa5+J9SCIIIASH4CzD7E3XbLxO4/OJJOF7n7NwxsCFgG6/DyUFxuMRtOB72qQYIc1ypDrFtJwgOIdO3kGaZlhbXwOCh4ssrXEmOWXvqWd08+5L3viWN77lW3fftWKsqQjyf9u6KldWtmBjNEYxKdDpdeCdR1FMF7uJRS1qUYta1KKepiVF7OhTs1ETMyAgpeTNlJTMwPgAa03LkvnADEIAgywfPCAIQkokSQL4gDRNAMGy1wY8B88S6jAnXVRSQwqB2tQQSqKu68j2RtYIzCILqWCN4U1fBH4NAGqYqLIqUJZ1ZAAFrHXodftRSmxRVzWqqoJQvDHPsgxwAS5u+khIlhXH9wgiGGthbA0feJNqjQNIING6ZUZBEciRgDOGF7hhSCJ4SJIU1lgkadKymCJKoLVSzAJT4I+db+WQgTWBCMGjk+XI0gwIgHWO5dBKgkDQaRKZjgBrLbPdkb2lECWV8Vg775gBFxHMkoCpa1jnGQALyWDaOQR4CCmgpIJ3AUqqCA4EpJYI3rF0WytorRm8e0AlySYm1XsPlWh+PgEIyQB8MBjCGgMf+HkIIcpgRSsfbOTa3rF8eqYgcOh0u5BKoK5rKJ0ycACDDR9ZoAAH0bBGcV2llPwcfjPQ3fT/CMpokxT2iRfTTPBKcxB49tkTQB1wwvfn/w2bWEM8Kav5TwOCLZCnGdpuwH6zHi0Ajs+OGfadwY2IY0TD4Mf1VEqwLH0OBAkilqK6zYCWwPcSkjST/9IM2of4TyN9DSdKsOdlyk8FdDd9Qps/p5nkl+YkzT74zQ8TaCbbjUxto+SguHYNYG6PUSNnxgzotWAXYQZu4z1BRKY0ksDted2+riifbmUIUV4f+IfRNC2991DE9xTH3TN+PZ6VFIECpIpSbe/j+EdslGEmJ4bz8Zpx3NFoxRChfc8No8/nDl9XzTFsAD+i6oRAoDCTiAuS7VFhJYqMCoBmnVvNPEQE99w0ZGDcXLfG1KziEQRTcWOTFCtbQhxlUVrBWocsy6GTFMbw+IXSClIoFJMCaZ6h2+2hmE4xnkzxgue98DnHjq29+YorLn/boSNHLvjiF760vHPH9gNK4yYPPzYmQAhe86qsEBwfr1/8xV9c7CgWtahFLWpRi3oalog7HcTtE28worSPAaqDtRYuWPjA8lOlVLt/9N6CECCUgE5TSCERXEBd1CwjljyT1kh6lZIAIcpgA6q6gncOtjYoypKBVNz4MJBlAGSMgXEGgQJ0qpEmGsF71LWBUDznORqPUFYVlGRAVZUVAAZy1vLMajGdQGsFnaQtaCsj+PVgUKmlgFKCX6Nn5ruRz0blHZy1oBCQpCmD/kDo93osMQxgWW6UVLtmo+iBqqx51jFIZrO9QCISECRklOvBE6x1zJ75AGMsb9CUYqDngdow+JYkEZyHqQ28D8iTDEpodDo9CCiIIJGnnShPZABb1SWklOj1+m1DwxrLAFzxZpSbG9w08JHZM8bA+sBrCm5shOChSEGT4lnhOAOe5im01vDWwtQVfAh8nIyFtQbG1TC1A3kJ4wwz51E6ba1tN6tCAc4ZeM/ycUECQrGcXUoJoTSk1phMxzCVgZSK2XDjWBIpJAM0wcBfyNhkkBJErGRwjs/F2Bt4IoqlE7jU8GRY8+QgLDzJZw0LFk6AusDJBMvhJCg7nPDxU3DBRDOAecKvtgAFm4FlI0v3sXnivG+ZzIY1bl6bc47PD2fjWEOA9wHe+giCadPjMrKjuXc3e7etXLiZEabwhFX+tmD3pEsxt0ZhrpnhQzuj3jQBRNTF++BPAOIzyXLwswYA5llY8USJebvGEU+391nJjTvv4uhCbEY1zSHvPVzzGqJ0tpE7sySdkOqUwanwcHCojEXwkfW1LjbaEug4IgCwggQkQEIhzXOAApTm69/4ZoZYgITkblNk6xFOfg4K0VxTEfRGDT0JAmT8N8qwA3xsJALOWVRVzRJqAMGz94OSkhsoTSNE8HwtCeJ7SQTYxlo4yxJvqSSU0CinFXsrhDgzHoButw9nDKSQGHSHsJVBUUxAgnDaqacBAaiqCt1ub7tK5Cvf9aPvfONLXvjCvetHj+Ov/vp/4vf/4Pcu6OTdfgAhyTSMM6iqihuygpBm2WI3sahFLWpRi1rU0xbwErE5lZ9tOENgxscYCynZWImIoBMNrTS8ZxDcmM8QCcBTyzw202rOuQg6I9BtjKYiq6NVwv/qBEmqICJzIaSCJAktNaTSUDpBmqfIux2enVKapZFxLitJEmRZjixPIWTDnvCGyloHKQUEgCzLkSRpu1Gv6xpZniPRCWycHe10uyApUNWGTaoyjU7eQSfrRvki0Ol0kOUp0ixFXRnkWQqAwTcBMLZmJkUQdKqRJArG1lBpgjRL0el2YQzPwgbymBYllNZsJKMVb5Q9s586TSMb7qNsWMPUlsEb0wxI04zlgESYTqaoLbO0vDl0MM6ABMF6j0DgBoLlRoNSGlIwkDd1zcBYCGRZhk6vh6Iq4b2DTnWcJWS21zhuQHgfUNc1Agkgmg4FDyB4WFdHwxmemRVC8nxzM/MJC2MMlNKYTico6xIEQqI0SPBcXQCvQ5JoEAjGGG42SAFSUY4uJPIkh4xstIiQyDnPBjTBI00T6EQzwG2AG6hlu/mMEA06aTEZ5hlAnBwMY/Mo5gl8YtgEY0PL+s5+mU6C1+YnaE8+o3uiQRXhqdheZtmonaNv2FyWo4YIvGiOaQ0tUJ7J2UNUdcxmKkmKJ3QCnJ9J4NsphuBbdcRspt2169u+yjDHBNMM/Lbs9KZ/w0nJ23mZ9MlWdvMyhRPRP7xzrH6Izy2FhFTccOImn48g2UXqllntdm61AYskWrOt5mg2HgUNAPYuzGaFo5x60xx3XH8lFRBNmWJHDQieRw6cZaJX8DVBghtlzvHcbSfvIM86ICFbYG+tgwshKjEISipkScL3T2ITOwHRzum2jLMQLbifN3LzgRtHrZIgNgG943lv7yyfax487iAkIHjGlzBrHlD8WzNvtEZgk7+6rhnYSlZ3aK0RACRpgrzTRaPw6XQ6CB5Q0WDQOYeqYk+ENM1gnEG320Gn00W/38ejjzyI9Y01XPLMS7YuLy+//jWvec2bfup9792xZfsK3v3eH8Mpu3fh9tvv7EHIJE9zVFWJqqygtULWyfg8XtSiFrWoRS1qUU/bUgEhzu/JaEziYwddQERmrAHDwXsETwAkEi1gnZnJjK3FdDyF95aBD1j2miYpjKmjA7IGSQIcxY0VWiMWdjuWkIpA0cSpkbT6QMxUhBqJ1CimJYSIhlFgtjXJUggIlEUJ62zcwKUQSqKqCuRZB94xc2idg1YKVVmy6ZHzccNFmE5LeG8jmyEQXEBZFWywZA1konjmOAA+VAyyvIMxNUxtoJMEUoBZSqUQPDtIa51AKQlTGRRmAiHZhdR7D6GJGXTrIUlGV2wJBwdWlfN8nrEG3W63nTUjCSgp0cm6wIRBvrEG3V6PmxhglhYuIEkzKKlBISDt9lCWJcqCwSwJgSSy8/AeteP3kyQDZsJJIO922NimtpCRDddJimAtptMpnxfkT5jXI4g4B621QvCWpZRSIM9ylEUJlaiWae10utBKo65qOG8gSEBKjcpUMNYjOIc0TaE0zzia2razy1D8fCTZoCzRCTSIzz3nUNWGZfseIPJwnhsEcUQTDVJveMuAGdidudUSTpyq3eTee8KcaSNyPTkhfCKHu9ncavbZvKlVeGpw+8SHia+xYZKpnTNtmkINY8kOvwGhnUedve7mPHU2glxC69zcvirP4EUQO4i3cm6aza02wJZNmfieoaSEJx/l93FUt3l9tNkdOeAEBjrQyZfxCatzguV2uwCEBoo20urm24Jozrk6IMS5daUk2Iw+tK+R4uyr96E9BwQCIAk+8P2u1YfPmV7xsgX4MGcaJlji7NsZaAbPs+YEz/Y2LRpusBmohJtE3troF8CmTwEOVVXDBcNNMikgiK9JEZsOVVlAaY26NlF5g1b6b0zF92xgUyOkWfsGkDbr1DjNe++jEZ6bgVfE8Ze2iSRYvoyZyZ1onLKdhyd+PMRGY/AeQTQKFMBGlZCzLNd2sbkHWJAgTIspklxj+/ZtGI8nSNMUAQ5aC1Bg5YfSAkr1ceYZ23cN+8M3XfAd5//wW3/gB3bdftvt+MynPoN/9f6fxt/937/F4/sf7ZZV0Tl27FicuyYMhkMYY1DXBk+lrljUoha1qEUtalH/fwa8vFHljVbw0X2zcdOMLG0bP+GbmTECT32x5M05BwJgrWHWLcqQAwBjeI5USPCcKRGgAWcdyqJkp03DzqGAQ7BAkAJSadTlFDJG91jDhixpoqEEs8yEgDTPUJQF6rJGp5NDKolMSXTyDpIkARFw4ECBjdEGspRnDPuDPqaTKfr9fnSABfr9HuqaTbfKyiNJFNJEozYGUgvkaY5JMYHWCRssmZrfo5RxXYA0S6F1AkhgOpoA3sOECgEs0TOmRmUqCAikWcKzjVH+2Mk7KKZTwAV0Oh0Ml5dx7NhR1HUNqViGm6YpsxveYdu27RhNNjAejSGEQJJnsN4hRIOXECNLQBrGmna+2NQ1ksiwSq0Ay0wIb/4knAPSkMI6h7IqkSiNRCdwxqHX7WHdrUcWnuCtBQXi90wCJHiDWpsadVUjURpSSVTRrcbUBiE4JLrD0uk4i8dOqQwminIaAYSIc4YBWrH7LBQhSTWMtajKGqnm5oKLjFnjaOuMgwkxLkqxbN1Z185t+gg+lFKMc93MxXoOxW4CJvyxaBmsmbkTngBnT4K/nrRoE7wNc27N4QTLq7AJDtMT0O1JQG9LaEbGVAgGppHRbY2Zmh9uDJ0aB92IAdn5m2dXhZjFOxHQzq9nWYZpUcRGl4S3IboJzwA0RUTrfUDwzAZaY6NRk5iB8/ZnPTaLnWfvJyA8kdndtAZPsj4n/PAmF21CBIF+tsINY+sJXvjooh7ZaQ8INNLnEOfl+eed9wx+BbGqPpp7+fie+HjMeUA1mDg0PnY8q87jthY+Rve0zHaIs7+CG5PBRdVCYOmvJw8ijxCiL0A0bKOo3qEYqSTCLH6uiU2TUkBGA7NAClmawnkbxybisWzOybl5ZMbDFGOF4t8VzLtqN67WHt6L9o374KGUiOcaG9cpoWCdhW1kNbGR4J0H+SihVtymDT5EFQufq22sm1atA7WpDdJBF3t27QYBuO+++3Hm6afTcHlp6/Fj6+ddeNEF36Wkft1bf+AH9yot8IXPfQbXPf95kJDYvWs7XviS6/pfuuEr6u677kK3N4BSEuPxJP5NIdTVguVd1KIWtahFLeppC3h58+Zn8UAkWulcY0oykx3y5kPGTSEQWTIpIhhQvPGIETA+eBhrYz4noSzK1vAl0RpScr6r1ArwjplDzyyntRZpkkAIjaoqkegkMh0eIcYKFcUU4/GYpW3eYzIpoNMEtrJwzsJadvRNU4XhcBXHjq3BmBIDKSCVQJokMRJIojYGRVW2s2CJZqCoUgVJPEO8tLQEZ2MuL3jezlsLEKHb60JKibKqkCddZnwA9Lu9Vk4HIiQ6ZfCapZCCMyRN7aCkQH97H/W0hHFskAUiaK3RHw4wnUyiYQ5B6xRlZRA8IISC0hr9QR9FMcV6UYI0f00qiSRJ2aV0OmUTsSRFmiRIkgzWGtSRRU0TjaKqIISA1il6gwxVWcJE8CoUoSwreBeQZSnLg42DgECn10VVVZgWU+TdbnSC5rm2qq4A79m8iwgqTSGl5nPBB5RFibzXRaY4S9gag+XlJZAUGK3ze9apag2FWKQpIAio6xJSaRApSCVQVBUz1dLBVoYRRXSubaJQEHyMJhHRn2fmqOtPAnxDBIjYNKs5h5EacBaHOv1T4LB51jacAI7nQ4zQsnezOdkAPMEA66Rg7okPPAPIzUylx2bDquDn4oVibBOF1rW9iV1RQrWz0M56nveMRmMQaJUiggQccT5yohOUZRFZZo/GdtiF0I5KuDga4SJom40lgJtqcbaewVSLqWZA8ckW/Mm/sQkY0yyTas7Mi9lfiqCNDfw44kcpxWC/yXqad71u1CkRKCsS8Hbm+EyBWonwbCwhSpvjYfOuAaR8D21dr9vsWXZUb1jl5hg1ShwhJZw3HP8lWD6cZh1UpoYpLYNp7m7yvdttVi4QGvaUGdnazEvy46ztvMN380+TO9zGjAHzMVAhmlFpwfFALvjYwIvN0+YcdA4hSqk9OKaJI9D4nstzwKHNSCcCRBBQCY+MlGUBqTRsbeFdgIFBliUI1uHQkUM4fvQ4BMn0uhe/8FW7du5+ad7pXqC0OLsYT5evvvpqwAMXXPQMbN+xHSurK1hdXcEtt3xj7dav33o8SXKe+Q8MspumKrxf7CYWtahFLWpRi3q6Al4SAhTzZtkcaiZpk1Ky8UzjFBxYQiuVhDfRxCZmjvhgkeU5PEV5sPcs0xO8oVZSwzWSPOdgpUCSZqinRSvJU0qhrmqUdQmtNNIkQ1nXSNMEzjLT6oOHrT1Is9unsTWsqZGmGbYsb0FtDBLJ86ZlWUMKgYsuuhAk9Pbrr7/woqNHDhz66k033qZ1AuccdJqiimZHw8EAQhDWRxvcta8r6JAg6/ZR+xqHjxyG1hq9bhcUeH1Wt2/HoaOHILVCMSpgvYN3YyRpgjTNWuksKYVuZ4AkkRgXE97sSgVnPbq9LopiwjO0SsLVFdbX1qCTBCRVnMdzPI8sBJTWKIoC3V7exkmtH99Aonn+FoGhUpakUDqBIKCaFgzA+31UBedP5p08Ni/YVGv37l0YjzdgjeF5PGIzs26eoSgKSBmNubxjZi4A1lawziCAnbaDC2zmpRN45+Esz80hAM7XUEGhmE5BxFLZQITgHaZlCS0VlFJYW9tAt9tBnrOx2GQyhmsY3CDYsEzFhkRkaa3hTWijQmgM2DhXOkBL1RoQCUEs63TRWIfiVj+y7RRC4y00y3XGCTmy88xWwzmGyBhuyjKax1dhE7QNT4BjM2r2iQLnJ5sLxklnWOc/pzAHRnxgGbeLIDXO9voo525YwqbJ1WZFg+W6dVVDQHDMleBmlw8e49GYM48FtZExUvAcO4Ron7NxcRbtHGojIBdzjtHMAgopIEBwjmYxP2GedQ+blyPMmUoBTw52afMyzmT4c4xlfLyZpD1CtmaOOd7LmuYJf8yPp7WGta4dlUA8h9jwbs4p2yOyoNE1OjLLTU5yM+/Mj8dmYCSZfedrKyCAM7WdZV+FLMuZEfY+zssLOBdQFCWz0k3UFBhACiEQKKpziNiRvRlp0RLOIhraNbPBTcMhAmyaGVGF+F8+bxSrgBppcwS75IEgqf3pZjE4Uim0l45vzKt00rLXHJ3GzbyqqkGeRxOaBmJzT+r22HHZO4vBYAuqumJ1DEmM1yeYTifDH/+Jd//Y85/3oneuLC2fIpTC333kI3j+dS8Axb9Xz3/B8wEAo9EESqf4wz/64NcfeviBfcsrK1hfX0MnzyEkoZhOOYJP2MVuYlGLWtSiFrWopyvg9d61JjLN7FpMVQQgEIKFEhw144NnIyBr2UQpytEamWfzWN56hOCg0wTeATICaJHyxk2lGefVVlX7fMF6TO0UUkokKbOStTFtt18oBWNqhCA415cEhAzopF04zxuyBlD3ej0cOXIEQhEoSHQ7/cuvf9l3/NBLr3/py50xD77hDW/6+Xvu/dZnt23bhtHGGN579HodON+wE2zqIkgjT/Jo/sJ5uERgkympUNsKh48dATw4UocaF1Vi52YB1GWFTt5BbS3ybg5T1W3UifcB06JAURRIswTTacGmWtFV1Fo2aBpvGOhEt1FEIXiILGXmCJy1WdU1dKLQ6TDbmucZamtQ1DVvTAVHkUwn45i7WaEoC1hjYQy7NgdvUdUVptMJvPdI0xRLS8tYX99AWfLGrqrAub6KzcKctTDOIs1zNs0aTyC1gqsNjCmhdAIfiCXWxIwgu7AyW1jVFabjKXq9HpQQmJYFspyPv5Ya4+kESZbCVDVsaeB8lCqLKJm3M8aqYYesMa3ZFQTi+48RM67BtTGCimjOlKfBsXGivZ0f3ezOyxdIaMcyGfBEABDoSXXMm0HsDJnSJontE3+aTkCx9GTM7pN6VoVN5rotSR1diAWxoy+vYRNDxaAneP4ZkszACWJ2zQYHMnyOa53AVRYhOBjnoEhBkIB1HrUp2mPVsOohAhvvXAsGvfeQKs6exrGJVk48tzBNPE6YNxZrv0FPcHTGky/JCZ/P8nB94Ll7QoCQKh5r3/Y5nHObZpIb8z5BBCFY+cCeeQIhOAjFzRYXY8La3FoS7TEXUVnTtkQEwVteH1Ozi3FjjNVEGEnBZnZEYNm/C62xXi/vwTgLa2NDEoHVHjqgLitozaMhZV3G+W3OSQ7CAUFHRYZnIz2pWEJNQJAN4A9RuRPgnGlncCleBy7GNwkSPNMdqI04Y4k8v1Pr/MyVO15pQgk46zgCzTqEmGUOEKsKXB1dpblpqZSCkAKu8qyEifLtPOtgMp3EJmvAxmQNRTld/tCH/vcvX3/9S37o45/4VHrNtVfhE5/4NK699lpc/x3XxetBwNQGf/xHf4Ibv3oz3vWud+Dhhx7+hhTpyNQGWkk455GlKeCr+HdvwfAualGLWtSiFvW0BbxEFHMQ0eYxiplbC5RUMb5HMJAIgWN9ZAJnHUvOJLMItamB0Mj/2D3YWwvv4zxfYMmjFswkO8tGMGnSQYBHWU2ZrfAuOgczIwXHLs8k2MAkSTSqsoKQxAZGhmWYVV0h0SmcZVfijfUNnHnmGWe+5rWv/5nnPvea733owQfplNNO2f2vfvpf/fpf/dVff/DOO2//mFlf35/lGcqKgdTGxghpmkAoQi/rw9QGtqpgTI0sy6C1RFFWSNMMWZ7F2WB2Uq7jnGtdlhguL7G8ug5IswxdrVAVFaQU0EkC52Kmbp5yZrAHsk4GEQhBJm0cFMCzz0tLS1E+GjCdTCGVhNYKCVJkWYqqrlHWNbIkgTEGo2KCcjyJm2S0jBRa4BEgoWmwNBj2l3b3QEEEgIZC6l7e65517lmDLE2S2lTj++57sNy+bdUdPnzYHjx4ZCoEHX30kYcnSknkeQYdQszHJJAApCRolUBKARMjf3SqIUCo6hJZnoMATKZTCBBsYOfr8XgDScZA2FUOYzOG9R6uDOhmGbRKOL+YBNbHI3TzHqqaI0h0omN2bEAvzVA7C2MNyHvEtBckiYIgwHoHgoCWzG4772YA0POcKqPfsMnjiK+JGahqMGbjnBvmWMiTMq3xl2ayZnpKX+UZLguYDwGipwJxhCeYVzXJPkIIbgC40EbsNFLZmbyX2gaWlDwz6i2QSB3n+Zlpc8GxesEThBfcPhCELEsBsPwdDsg7HThnOV973giqUZVEOtN6h+CiZLcxbjJ2k0vVvIHVk4F82hwm/MQlPVmqTpSvNGAacyx+sx4+hM0u1mEOmPoQ2UfJ0mQfmWLyUXQQI4UosrckI34O8XeYMRbU5A7PwLWSKo5DyFZe3bwXDwsigjUeJAJ0msLVFpAs1ffeI+vmqMsKiJnkzTy7IAFIVo4IIaGTBEoSSuOZp7UGQhASlcSorxrOhZk5V5MLHF2m2axMtDPyvjWAC/Dxbws1ubrk4eaEEo2MvpF5EzGwDb6R13N+OwmCdR7eOWiVtAffOoNyXECrhFlv75B3cu60WrBBYV2iKIvkv/7Zn/1/Xv/6V//o2toaLjz/bJhgccrpu3H+eedi/+MHMJ6McfbZZ+FTn/oUbrnt63jt616LXbtOOUSge5yvIJAiUSlqY1GWPFZSmxLdbnexm1jUoha1qEUt6ukKeEMIrelUCNElWBBc3JH44FFbgyTNkOY56rKE8Q6aCJCA8IC1HDvB0SGiBVVVVXI0j9IIFkiSBEmisba+BmdsnC1L4EKArR3PQwkBeAcQm6hkeQqSAtZ6SKVg6xreW+hUx+gihSzj+dmN8QaDQsPmUzrJ+t91/Xe/8xUv/+5XpnlGS8vLWFnZgmdcfPEVb3vbD17y6c/84823fvOWj37ik5/5Xx//6N/fu3PPHnSMgZTMRNauxGg0QqebQ0gB6z1EEOj2utAyidEWPRw/egydfh86zZElKdDrwnuP6WgKJQUmozE63S4bwiQSVVVBxaaAUgK9fh91ZVAbw8ZR3mPL0jJqY1BVZWw6aBpPpqHX68Fbh7KuUNc1rHU4sP8AToxXISUxWBoCLqTbt20949lXXXPm2trGoN/rJ3mW5Dt2bt922WXPOmfPaaeef8re3TtCgHbOBVdbvbplpT8Y9GUIAeNyHI4fOVYPhkM7mYxDptPJo48+9tWffO97/8ftt9/+D4cPH9oACP3eEKAA7wWssdCJ4rikso75mh42bowFJMqygFYaSaKRWoe142s4de+ewRte99r8D37vg4dVIrxMFFwIUEJBSoHRaIrVwRCJ1lifjqGyBNYb+MDNFSJgNBoj0SngCcFFQOH9zImbGIBIybEr3roI8ELjixPlmr6VRfN4bngCwmrA7WZ2h04epgvE2ea5yJ+T4rbNllSzh2mDlJ74PCfG8Z4ACJsGR/vzYvZaWNLKcUAixmG1jx/nW0WMb2LndAZOCAQSPmZSewiloBLOTi6mJUtZowa2nQcNYLfuAFgyCC6w1DXOFJMgwGGu+RYiGz8D4c2i03wH4anA/z8R9M4f+5lEObSqlXnQzfE5M3dndpyPcmCwsiB4P3NT9mjzYCkQpFYIznHD0Mdc2eYYNc2NGJVlrG3zwq0xIMlz/SEEzq4Wkt2xhUSSpah9gKcAE9dckUBQCggS5bRAmuZIkgzeW3arjyxpcA6OBNKsAyEIdVFzpBDATG9gltXHa4NnuiVso+4JAcG6dr62kR8771qFSfA+mhOCc89jo0kQ571LJaCkio79aP0VqJHVh4Y1F7DWQScSUrLbvpCITLNAt99t45e0UlhZXcX9992PH/7Rd/34W9785ncAwNLSEu6752688U1vwC/8wi8BAEaTCZyxOH5sDY8++jh+6Rf/NZZWVvH+9//CJ7729a9/I8lSFFUZGxYe3nOsm5DiJPnEi1rUoha1qEUt6ulS1OTiBsE7CimijNE5kOKZUOsi0yiYwXDe8IbFMSshWmfgEGcFo8soeHPMEj52dtVaw1iHLEnbSBzvPKSWrVGWVJIBi/WAAmpTcyyRALYsraCsKhhToZP3QQKoqxpKJTDGYs/unVjfWMeBA48PX//6N/zI97/5LT+xffvOHWeedTqWl4fsIFxyvI/3DjffctPGffc99H9+6Zd/+eeOHz3+mNa8mVo/vsYztt5CSIn+oM84nAjBW2YcAktBy2qKbr+PTqeL42tHGeBHeXhtDEuRKcBYy7OmiA6tgp2gpVJYO34M08mUQSI8lJQIgVBVBZukzJVOEmZkSCbLy1tOO+3U0y447dQzzt97+hl7dp2yM+/2cr17zw61PFzOnPHbO93OGeeff+6OJ842PrG8cxhPJuj2OgCAqqr49Ue0JISAKSp84hOffOwvPvS/P7rv4EP/0Mmzr376k595TAgVXWUdrPMY9AcgARRFyTJBYyJzA1hbI0kSWGvQzXNMp4X8gz/8gx+55qqrnvGa7/3e/3r3ffd82Trve70+xuMRn39SYsvWrZiMJpBacv6oYeAgo4NtXXPDQkSToMYFmCKo83DMuEWjmxCa+JywKUc3xDleMRdLxN+jzba6EYwJQZvNrU680ATNgWOaC9pB+7ihjSCan9ulJ0dzJwJe2gzM5nNcG1l+MwProyS4MdxqPOnQvl/fKoSZzZMQosleDbN516jCUFrBx+iuVCfM3ArOiHWenXdDvIZBAhTjZJrZ4nmgKQRfg82ba9a8nZaOs9htDNTJ4piebG1OnhEVo235i1prAGBXccwMzqhxqiZ2XbexkRJV8PCOGynMCAMQcRaWZIxV4wUNsYEyz9dLFaXi1vIwieL5cx+lxkIQR51JBa0UnOcIskYeLaOTeXAOSZbxMXMBSgjUtsbycAuEVJgWY5RlwU0KKQHMMtiNNUjSHFknxXQ8QXBsG92abJGIow/R5ND7yPZKHsd2ob3+hSBuUBp2+CZBrYRdSI5BM3XNzDYknHccf9XM4cc1cVEJkKYpvOMxF3afjmqhVLPUOoTWg0JKgrUOWZZCkgKJgD2nnvad/+3P/vvvro+OnnnantNw2ml78Vu/9u9gncR7fvI9SDJ2f9eKGzZ5nuGmG7+G3/jN3/7c337sb3/OGPNFJXkWvWmGJYmG0grjyZgj8cpisaNY1KIWtahFLeppWEpQ0z33CN5DRraimbdC8KDAMRu8uROcKas1ynIaNzAyZiTyxjd4jtKAZxMW1wBb73lDohSEIBjD85ZKKpALqOs6gg6KbtGArS3yPEfwHnXNxiqkBDRlnLOYSrjgAEtYHi5hfX2E6XQi3/+zP/8v3vx9b/ypO+6+c/kLn/88zjr7jIjwBYSQGI0Y1J155rmDSy955uvuv+/eG371V3/jP29d2YJJWaA/HGA4XEJZVrDOot/roq7YzGkyrSElNwNccEgpxcZoAwHE8j3n0O/1sbJ1FYcOHUQZZ+ayLEOJAoIEjh45iiCA4Cy0zsSZZ565YzgcdEfjsSEKXkoh+v1hPhwMVk7Zs/v0paXlM/ecumf30vLSlh07ty/3eoN+lmS9QX+wvG3L1pVuv6uavEwAqIsaKuHZtvl9vvcNWPKw3kFCxnVpjIMIx9aOwgfHJmSRKSHi42ONwx233YFde/bs/rVf/9W3H984cv4NX7zhP974pa/+9dr6BjPvWiNJBerIQgcQ8k4GFRjcZ3mCjY11VKZGN+9i67atSLJk166du97wtZu/fuWBQ4cGr3rVa174ile8vP6Lv/gf5pnPuizVSu8497zzdz/7qqurH/uxn/iTv//o332q1+sjBGKWC43xjodzDo4IMsToI6UgJcGUFQiERLNZWIiu5EKgdd1mZe8sY7YBsE9sFkTwKGZOzcGHOROrzSCrjW15Ul4XmOd/n0rsvHmgFU9qQNyAVxfnJBtQFxAg4/txwUMKBYQADwdBEkrx/G3zkpMsgXWes1sbU7QIpEmx/NQai2DZnI5IwHnHsVtgWS7PsnLTg4iZu0a2CgoIgdljIrSNLwbA84ZhM1D6hAzepwK3OMnnJ8qh5xheF0cJmFAW7bFsjiEJmguJovZcCMGj+dUkS0BEMJUBKY588/CRsWZGMAgAkS0NwcfGAEdHUbwHxgTeVjIevGd/Ac5HVxdffNkZhCDvuOvOxyiEjSTNUFclsqzbmv2JCHoHnRzrGwYkBbp5DucCK2bIIklTCMtmW9ONafxbIFo1gI9NUHbk50aIbSTIjbO3EPEaZMwarON7SjypW8k22AjL2zgzTgFCNm7hHBfWjHRIpRGCRzEpkOd5NIdj13fnPJwxEGkCQRJSKKhcw9gaWksgEHQiMZpOd/zMT//suy55xkVnfvhv/w9sXWPb1q14zeveiFNPPzUy+dEDIPBs9I03fgXfuOObxx/d9/BHlJA3e+GwvGUIW3HubpKlHHdkLBKVwtRmsZtY1KIWtahFLerpCngbx00O/2gMd3zLVjXzflKoNo7HegdbWgQfkKQaSgrU3sb5No4NIpLtJs57QAkg73ZRlRxTY60DNYYmIJaYSoKpLRs3IcAFiyTTUFrDVjWU1BhPChABq1tXUEwLWGehEwElE2TdDI8+8jDOPv/cS9/xzne8a3VpdfnGm76G8y+4AEtLA5S1gdYcOeQRMKmm2LK8BB9cZ+34xlnLS0s9EMadTo4sz6CURDmdYjAYIHhg/4H92LZ1KwaDASbTKQN3SPSW+uhZg+l0itXVrQy6rMWRI4cxmRYwVY3JeIy6ruCcxWl7z9x6zjnnnXHBBeecsrpl5cxdu3df/JyrnnvFzt27Tq3qMkynE5tnKQa9oer1ukmep/LbHciAgGkxRSfv4Btfuw1fveFG/5o3vk70hh3YYCCI5YK18ZACkIpZNqKAclrjyNFDsLbCtq3bceDxx0E24KA5hPsfug9n7D0T/d4A+w88jtXlLbjgoguhkxxZpuR9n7t3x2//h99ZIwj0hz0Y20hAOf9yuLSMLM9x9OgRaJnAO4O64mzd/mAIbwMefvhRnH/R+Xt3n3LKOR/7yMfVlqWVl/3BH/yn71ndulXv2r0zvOAF11ETCwMAv/kbv37RLbfc/BMHHt//uU6338aEaK3ZbKjJLo0KA3hma0OYSQ8bBjVJeENtogGYD7PJ2iatpjGsasDsE9HTCazn/LfDDEjNM3onsribBdNPgWRPhmzn53Vbk+jQmiKF4FuGEkSbMnwpypbZZTuFltGIyAfIyMqZqgYRx3h5FyA1uzEbZ+Etx4m5wNnMSirUVckMupKtA7QkBjFplsFbD+cM58UGD0EKAbadfXWO7w3tXG1sSsw3GuZnq5/Up+pE5vdk0bwnZBbLaH7XMM4sw43HLMqpG8f0hv10ziPLMqxuWcHBw4fwjMsuWdq9e4f7+498fCQlN/eSNInAnRuL0CqqaMQsEg4MaBHBcaNE8C5AkWLWNghIydm67/nJn3z11i3bXnX06EF/zfOvvvP++x64L1HJg5//3Oe+tTFaX8+WtiAASNMM02mB4dISVle34tChwzxrbH2MYdPMpAKA8xwnlecICCiKacxrFlBawJtolKcUnAdIxjgu6xDAc/wqSeEsezQ02cGcywsgCATHcuxowdU2N1xUDDUKCBmzorm5otrYKghmmrUSqGuLqiyQZTmkBGpjkSU5tFaQQuKxx/fhe17z6pe/4Q2veykAfM8rvhcPP/IwKuNw6umnticQRxvxtfBX//N/YbgyxPaVnQ8V4/GNnTwtdSJRFuyR4L2HqQzqykTFxkydsKhFLWpRi1rUop6OgNf7dkZQkIA1DkJy3IgDz2shRsj4wLJcgGejhFTR3bUBFB6mNNBJAqkklNCcuek8ut0ey0M1y+wqU0MpzRssKdkgJ9TI86w1RsnSHM45TMZjJEmCfn+IsiyRdThrdzKaIskSLA2HMMbFDZLFFc+67LW7d+8+48EHH8Rzn3cNtm/fBh/AeY6eDVWyLMXGZAMbo3UcPXwUd99xz85tqzu3PH7gofHS0hLqymB9ugGhCMeOH0WS5uj3BiimBbZsWcHUT1AVBUCEY1WNPbv2RPdYh+l0ivFohMl4jICAQX95ePFll5xz6p5TL3nuc6+9+roXveiK00477ZxOJ0sIhKqocGxtHYOlARK9BeujDSRaYdDtPYGkcoGl1I1TrSCBsq5wfGMDWZaikwOn7T0Fe/eeIoYrA7jgkFHa/n6eslyzAYMChCTR6PcH7EBd1jj/gosxGPRRlTX6wwHquoDSEuedcyE6XT4+TYmgy8NHj9wzriYYDPrQCaGuDMqqRNbJo+Ot5fzfLIUzFhujEVZXV5DmOY4fPYbalDj1tFOec/HFF67+i3f9EF73plf3VrduRVkU+NY999GeU07DueecjfGkgNYJzj/vvGf89m/+x1/7hZ//ufffc989n9Y6hXEWWkgIIVn+GCymxRTWeAihIAIzvZz161uzIu9dS+U2xl6zeJyGkcOMYaRwUt8kNt+hGQg7EROfAGCfyrBqPpG3AefzYDnMmxG3z0etdFtENUWbJdaAtRBiXI3i2dQ2j5jnm4UEmxN5B6WTNuyWTZk8giUAHIsVvIetLc+712xwpKSCNfy7LEPNYI1FWU2BdpYaUImCLQyM4SaZjLndAb7NcObZ6/gaiQFXiEB0FgA7l/c6B/hxMvOweWK4WZcwZxzWgGjM2PwZ6OVRjTRJUZkSIc4ne88yWqXZsbysbf/Nb33ry6655ppXbt2yYsbHJ3/1pS9/6ePWwCqtoSRHabEpH0WgH3hG1vI8LmIMEQht7JZ3jaszS3y9s8g6Hbljx7YL9z2279p+1t9unTl05OCh4489tv++F1z3/BvuueeeT95999235nkO7RWkEFhfP86NwSyNsmOgrAwbPHkf2WW+j1dVGfN/gSTh7PC65pxy61wLPpvrIaqQ5+6xAYIUJM3MECmI9tA1SoFoIQ2CQKI1XJw91lojgBlcBAblgOe/Q+A5b6EVAIdOtwdrDNbX1qE0531nWYr1tTWoTG9/93ve/QME6I11lh5LmaDT6cRrPHA0VAiQpOB9wFnnn4Nzzj4T7/nx93zzzrvuvqfTSwEhUJY1g32SGE3W4QlQiuLrk4vdxKIWtahFLWpRT9OSFCWDUikkScIGKJBoRJVCCHbEDBQ3Iwyy0iQHQCirIs748s9JwfOrLrAJVZ53OKfVg41UfGg3c1nGTr5VVaM2FZIsaTd4zEyksDXPaBIBSksgeJTTEj7w571eD0IoLA0GePDBB3DJM5/xvA9+8IMfmE6nywcOHsSgO8DS0hAgz5toGxiMS4H9+w9gOilw5pln4JJLLzcf/9Qnv3z02KFHdXwNJNmZ2lpmrVdXtyDJUgZU8Oj0OhgMhnDGYn20gWNHj2A0niAE6p919hnPuP76l73s7W9/+zv+5U+8+1+9773ve9+bvv9Nr7nyyisv27p1dVuitWxgjbEWSsuQ5xkpKZFlKazj18vz0SwdtMbi5q9/HQLAcGnIgEwRnLVI0gzDXg8heOSdHGmetWmuTQaoCKJlxprZzRCY7c3zHFmeo9vt8rpbNmQZ9vtYGi6j1+1Ba42qMrC1xcMPP4Qbvvwl3HrLNx767Gc++6dCiLKuHNKMgVLwPpqfeVR1Hc1mWDlw7jkXoq4tJpMximKKvJdt+8MP/v4vrh0/fup4NMI111wDADi+dgyPPPQArrj8Sug0BTxvMAVnK+957etec/EtX7/lqw8+8NCBlZUVWMsu4sbUMLWBlAJZljFjFuWiSkkYZ1nuLTj+xAcfgZVoI1JmWHI+umhmGjwX/Trn2ruZTGw/oBkofSL0fcKPbUrhDZvsqqLUdf4X5lOQNj0X2tlYiu+reQVtnm3LMzfzuNGci2I8WQjI0g4rLIJlwyOdoigmzMxKZhvTJIkyWwnvLHSikSiN2hpoxSACAkjThBmx0FgzUYw6c21uL5s7ReFrwz5zNlK7/k08FEWE24LUzRHJT5pP3B5jCpHxRlQFzM1qx+fRSRrBr0dj8CcEg7M0z5CkCcqigNK6++rXvfZfvvz6l7333rvufc73veFNz3zlK155fZan6Re+8PlbjXWViJJkkOScXjgE8m1zgyTLp6WOmdExIgfN+HXMHEqyBMH7sH//gSMrqyuD0cbooo9+9GMrSultV13z3PPKsnrmj/7wj1x97jnnbLvt9tsfGY8n62meYWN9AiEVtmxZgvceRVmwGV/M1CUAzlo+toJgo4OzUgpAjKMLDP7bBorjdVFKgiRFKbvnvN3YYIBoriFusBExMxziDEFjhtZIyI0x8V4R4/JiNrBz/LrYwGs2UqCiUVa304NKFKq6QlkWmE6nePOb3/TO9/z4e95e1pbKqkKep1haGkBFgNqoCmRklo8dH2Hbrq04eGR/ddtt3/jrybj80sOPPFK7YEEywNVs8GUD+0AIpVpDtQ984P2LHcWiFrWoRS1qUU/DUoIIUicAEB1v2VXUBw+hJFQEXc567mRHkylmHASIBJRiuV1oZ8/4901dM8PrPawtoaWCEOxS3Di9NtmlSZIBzsEYlrAlWQZr2bkzUxm63Q6sZ5AkVYJEEqxx8M4h6SpMiwIgseeHfvBf/PjuHXtOv/e++3HG3r1YGizB2AqZ5gxbmbCRSggBK0srmE7ZaGQ83Vjp9DvqnPPOx61f/xp6nW50QvXI8xyDfh/WWIzGY6z7EYqigFYC/d5wsGP7rjPOvfDcC0/Zs+eis84+69yLL3rGWXtPP/XUratbh0o+udSt2SzmeYaAQJzvSajqCo888gh27dqJpcEQTYyukAJnnHoGuv0OGypJnl1lcEttnnJDcYXIm7HbcIzwiGyLhuTsUcExIq2sPVI1FABvHTyiaY4UIAHkeYJ9j+zHsUNrGHSH4boXveibf/SfPzjat+9RaJ1itDECxxXlKKsSQgmkOmMDnYSgEg0fDEQc7KurAt/3lrd99zXPvvY5d999J4rpBGVRIsszfOwfPobnPe8FGAwHGE8L5GkCEhLOBkhF2LFj5zNPO+W0S7vdzq39fg+j0RhKS3ZtFQ145QlI522MUOE8WWYLZ3ODTXZnc77yJphiTExzxEJkIOfA6TyQwgmAa06nTJtg8rerzWm9M/CNGQgO1BrENQesZSZ94LECzIFaH3UcIjLXkQ13wYIoZhB7liHbYBFEgISAh4d1NkY2uTjfHECSHa4ROI+VCCimY3R6XWRpiqNHjyJNU0Al7P4cc75DZNQEEbwAEqGjPBhw0bCoMUmSkhlBb5sVj4ZfYSZr5mOGNi6ImgU5kd0NJ6wuMauI0DQRCFKiBbxNmaoCCQFJkoGdZHMuFwLyJIGpagDA93z397z9T//4P//Mxz/2ic6555yFD/2PP8eOU3au/Mqv/MrPkMDGr/ybf/sfpFTwzsR7X4CQEkLEeVawKaD1DlVVAfDQmhsJWvD91QULCG5EKCFx5NCR2z7+kU/+ztZtq6Xz/gd27Ni15X0/+VP40P/885XSVCs//4u/cEXt/LP+5E/+9K9OP/P0W/c9uu+xw4cPjdMsgZYKnbwHpRSMtZxnKwWcYf8BHwLW19ehKMDUVatwEFIgy3MAQDGdtsym9dzgFEQxw5xYGg5CkqSwVQ2Qh9IJrOP7NhvFCXjPozDWGmjF/hBNvnuapAhKozZ1C5S9C+j1uijrElpJlEUZzQsN8m4XZ515Fu6+806cdfY5V//Gr//mj0bIjZXlIRoj8sa0TcjIWAcHZwO89Xj43ofwtW9+/cGbb/r614rJeLJleRnGlgjBwQaHNO/ChaYJaVCWJbRSi93Eoha1qEUtalFPV8BLgmNwnLUQQkBICQeHJqujrm2MJFFtB15KgnOWNwya58l8HTeGUjJxEjNNy6Js81mFEqjLGnk3B0LAxsY6pFQMdilAQEFpgbIsAc9S2EDswuwsg/EszzEY9rAxmkJKiTRJQV7g8NEDeOe73vma17z2dS+fTAvs3rUbVVlBKkIQKm50mZVQQsIHj27e5Vk2AAcP7z/yhS987v5Bt4ctyyuQUkBqhelkisl4jLKcYmNjHWna6TzjkovPPOPMMy8447S9z7rm2msuv+SSSy7asWvnVjU3x+UDUNcOZVkgzzJIwTzOaDyGkgLra+s4evgIBktL2LVnJ5x1KKsanU4OpRLs2b0HaZ7EWcxmzg3Ytn2FN5jBoa7ZQdl7AiHOBgYClICgAIrsI9EswoXA3/PRYVWConMu4Lxl5sk5EElopTnnGMDhI8f8xsb6BjwOf/GLN9z/pRtuuGfHjpV7P/GJT3xmNN6wy0vLmEwLSMHmMUVVIs86cN5jNBphy5YlEAhp2kFdW1jjMCkK5N3Olre99a2vAyDPO+8CnHfeBfz+rMXOHTuxtLSEaVEg0RrNHG9QM9CY5Wl/NN6IMSceZOO8uRKo6xqFsZzdG1kkQTHj1cfIHcFS/iZOhV1l45xvmAmLW8Mdtnr+p2BVPEFv+xT17VJ5m/O3VeM29DIa5+I56TJhkyS6AcRCsGGbtQbBB57tVnxtBx8glGSn9Tj767xHcB7BAVKqCHqY+U+1Ruk8AxLPYKU3HMi6qhQSUpdcfAk9uu/h6bHja7559b1+H6lgR94szTAtimhyxOBoXirfAFs23JpJxts1DptXb97JeVMX4gTwS3PmUy1FL5oGFAP5EKOXQuBrgtgtC0IodjqIvgbGWIwnE7zoRS988bve+a4fDw6dsihx2ml7cdfkDmwZDgEge/e73/MDH/7wh//vnXfc9aDSKecLwyN4Qm09Eq1BIcDEaDdmglnJAIrxRt7FEQYJUxlAC4xGG7DW3p0k+r9561d+6J0/8HolbLo8HOCWr30Tznvx1rd+//e+5fvf8orTzjh1sraxcdcH3v+BP/zzP/uz/751dZtfWV3BkSPHkGUJQgBGowlUkqAoKzjnkKQJKBDqqoRQEjLe/+u64mYmOGrOWIvgPYyp0aS4U/Rm8PAwVcUmWErBB4fgXbyefIzEi+7cxH+LtNZQxOdJIEJVldBK8zVKPFteVSUCBVjLp1e/1+dcaCEw2RiDSCz91Pt+6ke3bt16hndAEoG5jwZyRLN597quYySfxtatS/jqTV8u9u/b94U77rzzq+TJd7td+KmDECmcmaAsS+RZDk8BMiikadJmpi9qUYta1KIWtainIeDlubnA+bsk2LG52SQ2ssfoYkvgeSytFOq6Bojnu4iAaMjK87tCYjIaQygBkWgGbNHlVwiBbreH6XiKLO2AJNDrdVAUU1jr0E1zaJ3A2AqBeCPbyVJ4AHmWAZ7gHX8tTZm1LesSaZovv+z6l71yeWmYra+v47H9j+HWW2/Bc658Ds4440xYa+GJXaYhgGA9SBK6gwwE4PDRg3cpgX0rq6sYjyc4vrGO8WgE4ZGcc97Z515z7bWXnXXOOVc859lXPvOSCy+8cLi0NNy85QbgWZ4shEBZ15AgaKnQqBJFZL4PHTqO/Qf2Y8vyEpaWlkEkoRKJQZpG6SIw6PeYSXKOmw1gVsKYGlmiIQJHmEDPjJWMZ2aFvMfaxjq6nS7SNGeWzPsWMLGU2sMFA++ZvWrMYVKdgFLegI7GBfbft2/8+S9/8db//X/++h/uv/f+zx89eOhhCBwUSlZ7du/GvXffw1JFpaC1BLmANE3hSgcCQQmBPE8wHo2QpjmybsC+x/ah28mRdzSe85yrvuOa51zz3AZwAAQhgaIo8LznXocsS9m9tjVgmmNQAdS1qQAgTXjTXhUVnDMxa1fBE0e7NLOoQQA60XFzTgAx0G2yRYUgNrfCnLw3AkXvXewDhSeC3DBjXhEjkYiI1RBPIq0Nm7yZadNXNv/w7HtNHi5FQ6UZrp7FHlHMdG3Ab5hjPZuPpSQEF3/PR5BCAsbXCPCQYOdmuIBO1kFAQF2XsM6h3+8hzVLUJbvVHjl6BK9+7fe+6Kd/6qffcOddt/f/5L/8SfkLP//z7o//6E/u/vRnP3PX61772uLOu+585NOf+vR9/d4ggAhBAInWcX44NIlIiHIEJFrBRFd2rRUAlu43rz8Ibjz4EB2oieW1M1b/JE2IqF2mQCwlJmolzYiNn2ZOOFoXtMfdkwcRZ69KqZDnGTZGYyillt7/gfe/69IrLjvroYcfwZ49u7HnlD3Ye+ap6GR9AMDW1a3nXX3NtWfcecddD0ohI85miX+aZlBaohhP544n/+Msqy5ICnhn2rlsEQ29dJpgWk6hU/H4Fc++6k5bV8WNX/1K6q3D29/2FpCQ2LZ1B5aWhgoUhsNdu5/zP/7rfz19/77H1z/9qU/9316/gzRR6HY5+st7C7YsZ3bdOgstNfJeD1XJs8vGViw/lxrOWQaoSqHyLH9mWXQzIsCztj6wDNxFs0IAkMSyFaV0e0yV4gzeuq5ZkSICZNAQJNvjaqqaY4zgMBz04TyhKktACmRZgsGgh2/dfTfe+P1vfvU73vFDr+LrmA3VfDy3xNy4AAB0ohu9EAKHDx7Bwf2HH7jnrvs+Hkiu1bbE+MAIICDrdrCydRuOHz8GkgKmLEBCQqsE3rjFbmJRi1rUoha1qKcz4OU50bg59h6J0gxiHc+uBm+hJJtUsdMw556SEGye49kQCOAZsLSTYHl1BXVZoixLOCJ0up2Y60lYX1uDJAmlJVSiEOAxHo0hhIKtN7C8MoRwEpWp0ev2kOYax4+vgyoTASBvV6aTAnkngw/AsNu76Iy9Z1xW1xZ/9t/+LFx66aX07Cueg6Xl5bjBlzDOQQme+2qyRolYRvilL96wPNkorhyNJrRjx65dL3zxi0/de9qe0y+64PxLrrrqqov27Nq1euLiBY+WmSIBBEHQCa9DR6WRUWaU4ok5vKXBAJ2sg127diBJdMs6OOfgRYCIzKO1DiQ1CARTV7DWQCmN8WQC2R8gUEAn6cYNMEtbUx2bD/BQKkXwvEn0UfIpiGcIOQfXwXuPPM/a9QGA2755J778lS9jPBl9647b7vjCPffc/02V6dvHG6NbqkmxZqzDjp07ABnw2GP7kXc7kIJQW4vxaIJ+vwetJTrUQV3VKIopsiTF6uoqrPPIkgSrKyuYjscYj8aDH3rbW18jhcgjlgTFSKB+v48QjaRiYhLDkjkM6LzDkaPHRwDHv3hjkSQaWZagrmsoncA5g6Io2jlbRUk7z+ocx2UBfK576Tdl7qLJiPXsGN40BWYoczO0orm4oHAiw3hilNDcz4cTIO7JrIXn2d8QM1BDM+saxctNU6oxWWKjoDmH6fheRJS9Bwo8201guaY3PItJGghs6EVwMLaADzzPKr2Hcx6TYorh0hDH19dw6t69V7zn3e/7t1c86/IrL7rgQlhjceGFz8C//43/YA8c3G8vf9Zl8t777r3jZ372/b/7d3/3kb8wVVmSICilEOqYQyv4NZESkdnl18bmVTEPVsxyf5s1FnE2dNPaAO1c5YmOzCFeuPy7vLJhLpO4iWOTQnBDiViZghCgJMGDxzK6XZbQX3XVVc961rOe/cJEZ9i+fRWnn3Eq1o6v4/Y7bscVV14OADh0+Ij5ypduLJrD6TxnjQcXEKyDDYFNwhDY8dhFWXcEagzMBbvChzhrTR6TyQRaa0ym5cbDDz16x9333Pf4j/3ITyytLm/BZDLCtGR1zmQyhVIatXXo5fn23/jNX//Z177+dQ/URfnNPM9QTAuURYX+gI3rjq8dBzw7qSOa2xHx8Zq5KnNjqMkF5jEXAcTZ/aZBp1Ucl7EOShDf45SEd0DwDjrT8N6jqiqQizPcnufqRRAwNUeJOWchKEGedvjvkg+ojYV1AZ1eD3VtIYTC4SNH0N8yPPu9P/W+dwLoTKsKiggIEiKy9s1pwa7YjRyJmf4bbvhK9dlPf/6Wf/jEP9ysBMEB2LptFWVRoSgrjNbHEMSz/84F1OUEAoENGBe1qEUtalGLWtTTE/ACgU2hhOC5QDD4UkrFDQLP/zUxIfAElSStk6dMs1aWJuKcXlFUGC6ngMtgaovas/wtTTi70HneqAsh4CqP2rBxUpakMX+XIyzyrAOlFKz12L5tGyRJjMcTeLD8d9gfQEuF0WSM61/0kqvPPPu04YFDB3HhhRdTojWWlpexZXlLCxx0lGVOxwWMMTh08DDOOe8s/M2HP4JEdF/4+7/7B8/csrrkr33BtVu2b9vWVXMSS9dAD+tjTjHiJlDMGPFWbhqixRDXtCohBKEua/R6PSSJYqMua9lEydScRdzEdCDAOgcJNlPROoFWGgHgiKRA2Pf4Y9ixdSs6uoM4ThazkHlD3O/0YrYuotMws40HHjuA4fIQ3X4XBw+u4cD+Q6inBmefdwZKU+E973l3+PRn/vFjO3bs+N3gcaMxrkqz1MDDKiXQHw5grIMWEkcOH0aaJtCJAkmFTq8DUxuM1kfodDsQWkIKiaXlJSRpCqoMjh49huHSAJPDY1x68TOe++IXfceL5xGJj1J2rTSMZ6flpf4gfpdBTFXWbIDkgq2qagMIMLVh869EIUs7qKoKxXTCctDAUStSKhjrUFWuncdsJN8+2HZ+WfAwZ5wvn8e1NPsknDC4O18NtvXhJPLbTSh4M1D+NpLmVvbcMLWEGfONOfdizBsBzZybAcBbzt31znBWmAtItASERlGVSBRLVG08NxOdwFiDPM/Q7XVx5PAxIEjoRGP9+HEMh0tn/tZv/dbPXXTxxVfefufdeHzfPrzuta9Hv9cHALVnzw4VAnD2WWdf+tf/63/92vXXv3T7Jz7x8T+syuq47Cs2D4oXl6k551pIwQ2g4CHBHzfviRUAEcD7+cYVzYy5nhA/1Lp0QTTxOBzKtYklpznLbe9ZIRAoxGsrwFm0rtbrGxvwweP0M864YjjoLU0ndcteHjp0CLd841Zc+9znAgAOHzp05KGHHn5Aa80mS1F+LwXnEAfLcT4usLGa9QaSZFQX8PHw3kPHe0Wv04dONIQWWFoa4MjhY+VXb/raza974xu+vmPH9gsOHDiEbp5haZAh63LerhAEYy2KusZll1x65b/517/8S29+81vfvbI8fLjb6cB3cpAgVGWFpeESRusbrS/AZDwFN0Zlq5DhzGCJumaDOB2zcxtzr2a9pRawxvK9KB4fzlnmWeSqKNscdwuDJEkAaxlkyxjDRAIBDqauYIRAmmTopF3UdQ2tFBKlkPR6KIsJjh0+kv3Sr/7bn3jmRZdcUdaG83+1jI2tRuGCE+KoBIQC1jc2IBO1TtLdUJXFI1oL9i8QAiRkm00sSaMoSngELC0voy4r1HW12E0salGLWtSiFvX0BbwEpSSUTGBMFaNZ2ClTSQnveDda2xpSKGR5zpsdAeR5jjzvoCoL1FUNoXUEPRXWjq9BSQ2tJVxNmEwLpIkGQSLVAra2vHmKQC3NWFbmvIUbMTMwXBoC3mFaFFjb2AACoZt3kOZdyMmUDbWUhAtuy5vf/KbrAWDHtu14sPMgPvmpT+P88y/iTX4jdWxkpp5nWbdt3YbggSuf/Wxc+7zndVdWBt0WXESnae+YbZJCQCnehLX5qc1IYTiBkwuAJ5bOWetRmQqdlA1dGpyTJklkfQOU1pBEcAiwACQRpErgagNI4NjoGJTU2LK0BIAZqO1bt4KEgnGcgUkxOgpx/hBgE5c777oTO3fvgPASxbTAQw89jOUty5hWBT7xD5/A4489htHGBq597tXY2NjAaLR27IILzrtxbW39a1LrtTwjlGWFoijQGyxBConjR45Ba43VLVthfYmN8QgBAqtbViB1Bus9uyoTQSUO4/EUaZZjuDTEdDrF2rF1FHWp3/Yv3vHq4WA4DH4uAgYBQSpAAhKRVaI5kCeIo0cEUE0re/jgwREAQArAMWhaq9aZnRQESQpaa9RVxa6/8DHjU7YSfSkkv1YpmamKNFCAnzkhR+Owdk40zBjUk4Hdk+Dab/ODT1X0xE8jppidi9Se4yHGD3GkjIa1NrKKIkaMKTgf4ODY7MfW0RiNYCxHzmipeZY7lUhzztnd2Fjn2fA4Vx8gBv/+3//6z776la94BQAkp5+KvXtPgSKFsjKQSkBLGZl0CSmw+oe//3sf+OxnPtd790++91e89VOtNUKUsEOwAkQJCeM9JMV4tOAAH02v5nKSQTP2msdsT7DQbj8Omw9H8x8ikJBz2czRCzt4BDB7SRKR0dRQQrEPgTEwpkI3z/rPu/baawHA2Bo+MOCdTKd49Wte176IQ0eOHh4X4wN5plHXJkawsTN+EGil2sxiKqQ6abNvQQLecQycEhJBaZAUGE8mCALodntQMgFEOHDb7bfeCODN/WEPcAE6UTCVieZYAoePHIEUAvmO7XjD61//yvvuuf++n/+FD7z/jNPOqnftXMXRY0dx9OgRDJeGyLIOJpMxr51gcJ7oFF45lFXFADDOsbDU2bC/g9JsbobAMUzGwlkDioZciLL/4H1rpBc8IEUCEhxn1DioC7AxoQvsZg3iNSLBozc+BORpypJ453D40CG8+ntf90M//zM/+0MAoIWETDg1gJq59xMuKSJittY6rB3bsLfe+s2PfukrX/polqbBxfGM0cYY3gekWQoInvmt6wpaJxypRAI6SRa7iUUtalGLWtSinraAN8pyvavgA5vQKJWgKKbwjjctpCXPRfoAaytYY9Ht9FBbzlslQXAiwJsSoiBUFc8BQgdUVQ0hiHNdqwrOWagkRXfQ5dlPKWBrg063C2MqlHUJZz2SVGFSjLCxvoFevw8tFJx3KOsCoIClpSFMZXH0yFGcd8H5z7/kssue3b4rIfFdL3s5hsP+bPMb3U0RAvqDTotcvAd27NzK780Edgv1FlIoJFrCgzMzmxiL+flR3hbPR6Sglbr66IYslMSWwRKAgCylTRsuTjUV8AioXSNf5HnqI0cOw9mAHbu2ctRHYMdeCX4vWZrBec/OqghttqUtLe6+627c8rVbsb5+HOddcD4OP34IX/rylwEi3HTTTSjKKeADtu3YDuc8tmxZwm233Y777n3g+Eu/86UPnnPeOfSnf/zf6JZbb0GaaKRZDusC1o6vQUoJ5yyqukC/30e/twSQwmQ8Ql2UEEoBCKjrCtZaJEkGIRWquoYUDFoOHz6MCy6+4IyXvfQ7XwQAdZynFdH9l+XVBKkE+pHZLssCggQbUElex7o2E5Go9U53AKU0z3wKNl1KiGcMbbBQKmtnf73jxdc6QR3dZzlTlOWNTURRc4yUUHPSYe6ENCCLIsPafj+cBODSU4Hef/rPhfld+twM8PxssyCwyVSUnSI2XEI8d1iJQdGwjM9fZrk9m8qBmwDcAOC1UEpDSMJ0MkGn08Wgn2E6meL42lG88U1vesUPvPUtbwVYsppmOQ4cPohO1sGwP2DpcDQSIgooSoPTzzyzu7Jt24/+/h998Os33/TVv+72Byz5h4MAD7tXlv0BlFYxxohaBpbde5mFbzynqJ1vjpA1vt+5gOTZGkdQ3f5ca2TlY3wTv38JbvaFOCecdxI461BXBp1OB+sba3jWFVee+4pXfs+zATY/G29M8LnPfR433vBl/Oqv/Som4wopgIceePAovEOSDKCVR1lWSJIMZTmdzWSDc2rJS0it4FwJDw9vSmjJjtoeHkmawHuHNMvgfcB0UgIigILApz/xuRsf2//Ywd07d283lnPJJQDrWcK9urIMW5tWKfBzP//+H374/odu+eM/+89/flZyLqbjAvCE8XgMJRTyTs7XpmMnc+uZeXXWcf4sESRJCMHsdICDb43FCLauIKSEUgmC9/Bz57gQrBQSINTGQGkFgkBZFVCJ4hGDKMd3zqM36INIoKoqCJIoqwJCAbUzyJMUh48cxCWXXnz5f/mTD74HQObtTFo9u98y6g1zkVYgwmQ8wdduvhX/92//7jO/9/u//R+1lo9olcL7gG7SRZ51UNYlSAKTyZgbEEkKArCxvh7VSrTYTSxqUYta1KIW9XQFvKJhOIggwEYlLgRmyEgyCAE7bEofEGxAmii44OGcgbUGQqrWmMp6C5UIKJUCISBJUmitmHFyAVoncUaV58uYAeIZrk4nR5rn2Fhb4/xb79Hp9iBA6HW7qEyFsqwwHk3Y4KrXwcrWFf2uH3nnK5aXh52Dhw7jvnvux7btW7F71x4Yw87GECFmWvLOx8VZOQGO2uH5M4rMqEAgGWcKG1fq2b45hM2oN8zhFRdYqiej8y+7qoYZI0hs/oUmG3UOwCgSMRE5oKqYDU/7Gayz2Lm6A0Qej+/fhzztYDhYAkmCVArG1VhfX8fxw8ehtcLGaIS//IsP4fM3fBG7d+4I+x57zFeVEVIRjScFXvSSl+BrN98MKTUuvOhCHDp8yA56vcMi4IFHHn7stsf2HXi8P1i6ZzwaleW0RF0bHDlyFEIIZGmOAAeREoQhjMcjTKYlsiRFJ8lRFhVk4tDr9eCdh60tjDE4de9pWDt2DAAwGHaxPkow7A+euW3bjlObyCShFIypUYxG6HZ6SDLNDYq4tjI6iFOcvZVK4u67v7X/vvvvP9jtdQDnIbo5jDUoywp1MFE9AFRVBaU4L3Y6mbTnXgDa+KLgA8fvELvkMuMpotzZY+bcHA/YnHx9Jic+CWg9kW18Mtfm8FRf2DTB20pD2yxl79mIjVjGTBQNygRnZxPAMmAX0Mk7qKNLs5QKSipeDzAN1kQ+kRJIVIKqKuEiQyyURLfbAULA8TV0X/3q73kLAFmXNVSiYKxBN8vR73XbWeymVRAApImGcx6Dfn/4S//uX7/ve7/7e+6ejDbuYBdtjsGi2ACSkuWkZVlH+bZor7vGbZ0i4g1BzGKZ5lOJ5tld2uxmPVtNz7njxKMJwQVIzUZmFK9jJRWctajLCjpJoaRu1u+ZvUF/FQCyPIOzPezctQNblpfxmX/8DK557vMAAAf2HzwMAHmng9HGCCQEsjQByGM6LdoZ1SYibFpOAWLlhzMOQhKsDfDkoQMhOI+s24GAwMb6OoTkN3j4yNE7vva1r39198t3fzeAODrC54FxHlmaoQ6srlFagkh0f/+P/9Ovfuvhe4584XNf+Phpp52KosogJDcCdJIgTVJMplM4Z2FMDUKKJNEw1iKNEUMqUVCej3/LwgfimKnA6hiPEB3AeXzFx2QAF5sNtq4BSFYFRXm0dQ6KFNI8Q1mVUFoh72QwxkFrzZFO1mF9tI66rJI3vfn7f3A4XDqTWW02dUMbiRVa4yt4lrVb66C1wtEjR3HPvfeOv3zjl754+hl7Hx2PxphMCrhgUZoS8AKdbgckPANyoZGlGSbTMXxw6HZ6KMtisZtY1KIWtahFLerpCniBAKkFnONNu3MBiRBIkxweDsYYiIogpYoMFiHNUljL81ZVWbEEV2sABKEkymnJj5OnkCRhrUdZFMg7HXR7HWxsbKCuDUhGpkYKFGUJYww76/L+HcJTm+na5MQO+gMsLy9jNB5jbW0N3V73wjPPPOvZANDr9nH2OWeh3+8hSZK46Y8ze4FjTYgo7oFZsioiwEGYsXZK8IbM+lnW6SweaIZrxKaNc4APDYPGjYNUJ+2sJW/OHaqqRFnX6GQ9pImGD5x1q4RE8A7WeZBUGC5lIAKMMQiBmw8ry1vhvMW0HGM02sDBg0dw5MhRPPzwQ3j4oUewc8dOZLnGY48dxAXnXuxP27v7yJ133L32nKuuEueddbb88o03jR95eN/0Gc+4RAyXlvRkOq1P2XvqfV/67Oe+cu89995ivX30tjvuWP/Qh/7npKynptftwdQ1pJLNqBuCjSxoNCKrCoO6rng2MU2QpinKkjMz806OaVmgKCaoyhLWW1jD4OmVr3rVi/JMoygrJIqdvAVJJGkKmfA5QDEc1vtofhNNi5q82X2P7btntL5xKE0SOGOh06SFVz7OZuokgXOOnz8CPRLMwHPuaYCIrLLFLLZGxI248zMTq5OStz5s9lY+eXDuP0/BDJz8F2jz11uDK5o5+wpBMduUn7TJEobnDO3KGACIPxdnxj1AspFBewQvoINE1ulAkkIxncCZCoIIGxsjHD56BFdfe9U1L/vOl7KqggR88NBKIxkkcfY5RGMjatc0RNMv5wO+84Uvfc5v/tZvvu+9//J9P10W5aFEszIg7+SwxqKsC9iY+StIQGlWeJAnEMnWoTmEGCHk52amMfO1btYldq/Y9CoaVs1ijGbNCCGjVLcxT/IGicyghEKWcub4dDoGAHnttdc+N08TVCWPf/QHQ1z6jMuwdmQda+sjTCYjJOkSnLcPpHmHm3jxvllWJWfvagUpJFxwUFpBkIB1dSu11prd6MeTDSipmOG1DlVZwXug18vR6XThQ8D+x/dN//xDf/k3r3j5d1+vlUxslIWHADZuAmcdyxDPkeChVXLKr/zyL//yj737x9cfuO/Br+w99TSMJ2MQCayvjTCZ8vMGxyZWIbDLuXMeJBTI83nDZoIsQQ4R1CoojrYS3Pg0dR2bL5KN+ryf2dtL2UbamcrwOeMcvJZ8HcboI2tcPOaKZ3mHOR7f9xie+awrrv+RH/6RVwOAQ0DwDqPJBJ1OjizJ2PFaUXsO+hBa1Y41FkLgsb1n7r13dMu6G21MkGYZjLUoY9TayBl0ez1okSHLUnZsJ5alG2ugk4Vp1aIWtahFLWpRT1vAKwSx5C12wAUoGrM0e8QAIVQr7RRSsKTUAiQVtu9awXQ0wmQyRbffjaYlno1/nIMJvgUfxhg4a5FnOXTCxlhVVUFrNgHJ84ylbATs3r0Lp+zeg6PHjkFGV+VjR49hWkzx6KMjEAR63e6Fz7zsWT9+3jnnnQ0AeZ6i281aSWNrtguBOVFqtKuJpjVgLWjwLrq9EggCo40xhBAYLnXi79KcJ1BoQS61QJmgZXRd9h5SzJxzms13iDFOWqVsWINmjo1n4OApMu38upzzMFUNTxLrow3U1mDn9u246867ceNXbsSho4dxfG0N/W4fz7v2eVjduh2f/uxnDj7/ec/f98hDjzx077fuv3dpy/Cxv//Yx47/37I8cv+DDx5XUpl+v4v19Q2HEGqVyPWDBw4eLKvK97pdFGUBIQRSnWJaFOj3uhj2l7C+vo7asNFWp5Oz4Zi1CMSRI6Y2QHSW7fd6KGsD6wK2rq6AELC8sgXGWDx88GGcdc5ZZ77pzW+6joEXHxuPgCRR0FpxZEwDWzxaGa6ILFxT3/jGrbf54L3zHh6BZc+KZfK9bh91VaE0FZw1bdasSiSsYUto513LGvrW+Gg28x3mpbDzcuXN5Osmpv5kmLWZO/2nZO1uRtPYxEzOyOW5j9soJd7kh3j9EsUsbSFmzZwoGU5SjbIqEWwASWJVhuLoFykTZjmFgiTB0VxCoNPptk7eztS47roXfWeWdQcNkGjQY9NQaGacGyl+gG+vHefYOOtH3vkjrz/42OEv/dIv//IfC8F5z9YZBBGBZ+CYLZ6llTEuR7dya2rfP8fUBDeTJTfy5lbL3rDBmJvXDdRGEzVuxEDM4w2xuSV47tnYaCQFYFpM8YzLnrHrXT/8w88GeB781lu+iaPHj+LCC87Hi1/yQlgbQCLgHz72D7d/9CMf+XRVFAjeQZJAXRs4x07HIs6zpppBpBceSqewtoILAiT5fiqVRgDP6/uYj6y0xGQyAYgwHA6xfecO/M2H/+ZjH/uHj37xZS/9rhcGF0AK8f7L512ep7jjzjtxyqmnYNDrY1KUeO61z73id377d/7NK77rFT9WFpO7lVJY3xhBKL4edGxGSClhrUNV1eh0u9y8ChbBS77+wcaEzsVGKYlodshrL1p39Ng8jCoFIgnSAsHxLC2RQJZ2kHcF+0oEjzRNISUbGKYZ+yFIpVCMC3jvd/+7f/dr7+52u9ud9UgSbs4OBn3o2KgV8X7MKpvQKng+97nP41t33VNMp8XNX/jMF26cTsbrWZ5DCMLqyhYEBIzWRqiNwXRSYDgYYmO8xoZZWrNCwrjZH5tFLWpRi1rUohb19AO81rG5T57n8M4jWA9nDRx4pjTLOzz3SDyHV9satakRPLGbqJCoqxLOGdS1Qd7pYGW1g+lkChEI/UEfo/EIkiS0kjh69BhWVlYRrEUxLbl77zyGgwF27twBnaR4/LHHsL6+hkF/gDRJcOTwERxbOw4CyVP27t67dXnL5a961au+4/rrv/OFKysrpw6XBsJZZnd8CHNZlowcPDADNk0cCZu88maIQswanm10+71Om93YML+hcYBtYXNLGkFSzHmMLrAyAiyWy85gtiABihGn3rHUFIHZJCUlpCQcOXIYWilMpwVWVlfx4P334fOfvwH79z8eLjjvQkrTDGedfQ5O2bsXx48dO3Ls2PoD997z0IN//eH/881bvvG1bxaT8qH9+x9//PjG2jEbN6IAoHSKbifDww9P2A01AGVVotPpoNfvsgurYOZHEINeYxxG4xGqum7nW4uiiKYyACTBC4csT1kyaQ0qU8eZYs4xzbIOAEBLjeGwh6uuuPLaPTt3nDEejyGlauOZWjY8UHSYpnbNheKD5n2AVBJVVdcf++jHbvbOIOl2kaQ9TMZjntu1Hsg4Tkb56LgcWSEpFIIkWGPaZof3rkWnTfNiPlaomemdl8zOvvntLzLO8RV8fbXZON+mGrA7F4NEczPibdyQbxQMM+fz2SyrR3COWz4iMq3Os6OsABKRtI0spRVAAs7Ydk1sbaGEAimOxHHeYWN9HbtOO+3c73vTm18Ivi1AChnn4/kKQxAzt3JB8bxhsEdEUCB4FyAk5alOtwMOMslBTkRGvRk/QMxvdTCFZRWBJMD5OHLBxkauiQ8iGa/wmRIjZg/NHcPZaELj5uwisCYAxtioGCfkWQaSEs4bUJxFbZzP62m1t5tke9eOjqAyiZtuvRmHD+xHUYzwnKuuwdJgC2xp8W9+5d/9/VduvOHLUkp2yNbRoTk2V0xwbAblPUvqvUCWZCAeYIX3HnVdQicJbF3De8cjJFH50s062NgYYTqdQAqJajrd/2d//F/+4mUv/c7rtJZUxzggEhTn1xkAHzpwGIOz+kgThQDg+c993ot++7d/671ve/vb393vD6ZJkoBI8qxwnDO2xsH6aLDlHeq6hnceXrC5k1IJvLPs8i94FtkaB2sNbDQ9lFq20UvB85y2cxbCA1Jp1PHrIcYg1VXZAmVTGzjv0VU5x7ClGR49+BC+7/VvevNLXnzdi4BmZISNqFRs0PjmPCDPxy/mbB87cgz33nOPUzp59JOf/NuPHDp44IHlLcsoywL9Qb9ds/6wD2/Zw2A02UBZlTzTbG1skLCR16IWtahFLWpRi3qaAt7GBRSRmQ2CAZrWGs46NvKxHjZY7ooH3oykeQplJAgBSZpx5946mNrCOwdjOLvXODZcss4iwEOnCazj+dksUdi6dSs2RhsgIow2Ruh0WGp64MDj2P/YPmSdDnr54Lzv+u6XXffa17/uxVde8awrl5eWdmmpxQyQzLJ1EWaxJCGaSrXN9/gevZjNzzKT5+PuV8AHggCgkrhp5+0Sb6jRPC7Fz6mVRPpZEkcLnqgBH3FzKznPg/GLFJDRfCkQITiLo+trePyxRzGdTDGeTLB//z7X6/WFlJLOPedsXHDBhXT06DFjnDs0qabfuv3222/9zD9+9uZ7Hrjnlsf3PfZgWU6rNNOwxiPPO0h0ikFvABcNjOqyhnUOvWEP9bSGEBKrqyuoygob66MICDlGhIFogmI6xmQyRZ5nkCJmLXuPLMvhjIFOE3b79Txj6W0jGeRZ3jRLMRz0cfjgERRlAakkrr326qsQgLvuvtufe+65Ikc2m6ltmxOERx55GKsrW5F38lkSUOw4PPTQQw8cOX78m1KmkEpGAAt4H5AkEpPpGMZaaK2QJimMNbDOwVkf5z25KaI0O8kG51v5Ok5wPt4EbOmfAXbj93kW+Z8BducfIiCen5i9lvg6AsIJTLBoHZqFEFBSw3kLUIjseICjGCEWCNa5aCymYWrL4wVR7eCcx9Q55HmOTtZDURWADyimU7zmhS98wYXnnntxM2Edjd0jAOfHlUrEcePAx1RICJIRaEa218N//otf+BbicbNNw80xuJVawjk2c5IywHuLEDgiRhHHxITg4eO4A1GA842Z2Fx0UcPqUpgLgGK5NQS/PgGCdyyrF0pG9bwHjOf86CyDEEBZ1VCpxsUXXXLJcMsWvb6+DhmAl17/Evyvv/qf+Mv/8Ze46MJLsG3rVhTBwsPfDMAMhksIPsBYiwSANXVkuhkAG1O3CgMigBTfWxQ4OqsueZZad3sM2ilgPNlgQBgUNo4dR5530O8O8cl//Ow/3nrrN+649NLLLpKCeEwisEeBCx4XXXQhNjY2MC0n6GRdGOegpcQPvu1tb7njtjtv+Z3/9B9/P0k0rLNIkhTFtGBgC56ddYZgCoMsy2BsxU1EIfhj79u56CbmLtFJy5Y7a5ntVRKQvlVRUIiNi+AglEZVFCjGE0glkKZZm80LEbC+vo5O3sWjhx/C9p07z/3AL3zgbQB4TIZYFdLkHQcSMasZMJ6PtRSc290fDPGSl36n+Mu/+Muvf/bzn/1SlqUIISDJE6ytrSFNUz5HgoOUEjpRKIopeoMeRusbQJBQpFD4GjpdSJr/f1FCqvSsc845fffOXReecfre884484wdzju5dnTdkYRzwt/7tVtv+cqtN91y5+j42mJwelGLWtSiFvVPA7ySBFSWoCpLji7ROs5SRQZTCEhF0IIAQZAihXEGtamQJgmSLENVlujmXTgXMJ6OobXEtm3bMZlMQFIgzTKoxHGsUZaDZ0O5S+5jNMpkPMZ0UkBIQq8/6O0984zTzj/v3Cu+6+Xf9bwXPPcF15577tlnzcMN59l1NjiLJE3nwGuUmNJsjg+B2LyKd+UMyFyTuRpNrOKDS5oHGqHdyM9jGDpBlTqLG4q0kQsgNQPU3ntUJbPhOlXwLmB0fAwpgaIscejQEdx7770w3vj7vnVPtXfvabrTHWCyUU7JJ+Wg35/effe9j+3ff/C+42vH7/nqTV/9xj333nvraLz2WF3VMQ9YotcboNfvwRqLqqpBnmf9dKpRlTWcs4h2RvDBwzlmmY01bJxjLUizQ3KiU3bmDhYiZlAaZ6C1RpZlKKsKztSo6goqTUCBj2GWZQyohMR0UmDPKbuxsTFCVVfI8hTDrf2dl11x2TNG4xF6vYHo9npxXWMebvyMQBBStkZSo/EIUijkWQ4A+PKXb7x7PB3vH24ZQoJQmaqdz6trA6kklFIwxkI0vZGAmC3N0l/vuaFDaHhBmuHHCLpbuXCYzfL+82dyZwZOs4bIUz9IA455sy42Mc7zqJcImxykm3nxZpPfGAh58lEqHA2DAiFLU9QVR6wIqSGkAAXAeQuVMBArqxLBCywtDdmYhzRe8pKXXg2AvGdpamMuJmLzRkg5e13R/Itn3ONa+wCpBB5//MD9t9122zcgWE4tAhCEgPfsxi2VgLMVS60VIRjBWbfko+O3j+cK2vVtwJOQIjLLs+tSxrlYZsJj5Fp0cA9etMoCKZlVtk0+NlHMAub1scbj+dc9/wqEAKWZad172ml44xu+H8++8moMh0MAwMMPPlLse/jRRwBg+/btOHb0GMqyhFKKo6EcM6UiHjsSLAGujYlzvAJCaQQX4J2HkgreekDw+zO1RTmtkOoMSZZisDxElnZw3333PvzxT/7jDZdeetlFUcPL6+Xj/Sz+88CDD+Gi8y+EkgJlWSHL0uRnP/Az//JjH/v7rz708IM3dzpdlNMSACHNMlR1hV6/h6qoUJQFiAi9Xh9FUUawyiMbVVmitgbkHDrdDme2lzUosvfwfA5A+Bhxp0BCwhsLpTRIcuPBVBbeAWVZQWkR33MNgoSJubevec2rX3PhBeefU9Ul4CXn9wqOtmK1DytvKHiomDUPALfdfjtKW2PfI/se+txnPv+xvXtPf/yhhx5EmiYtcPfewRtuhpZFhbyTxQbeENMxx+INlgaojlQ8j7yo/1dFRL1tO3dc+oNv/8HrPvyRv7n60mdccvG21W3b8zRRT/Irhz/y8Y984opnPuvPb77l618NIRxdrOKiFrWoRS3qKQGvtRZSK5bJycDGPoI3rN4HWOGRZQm8cajqGlmeQSuNuqxQk4MPBVxl0VsZQGtmBfJOjuB5M9dNUvQ6fXT6HRQTbsjWpoSpK6hE4dChg1g7voZONx9edvlll1/3/Ouue+7zn3fNOeefc/7ePadsF/Ngs3UA5S49SQER5YDNLB6bW82DlpmM0Uc6VhA2x0iEmYGPx8ztlQS1Dstz/5vTQ2LmxBzAUtqACGp9NJbxqOsa49EEK6sr8CA8su8R3HvXPSDFrHY5Lcxd3/rWdDweHd6xfcexB+55cAOgI0ePHXt43+OP3Xv3XXfed/DQgXsOHzm4X6o0shgBw6U+TGJQ1RZKMRg4cuQIpGRWJHjA1gbescOubQ1+KQJcg/XRRpSuJ7DWMDsoAakIrvIQQkGn7Bbb5Lo2jqRCSI4qiVnNSknoVKMua6ysrMAbwvGjx1HZGoP+AI888jDOOf+8y1aXV88dbYywY9t2blpIwez3JnYVWFlZ5TUFkGgNqRRiCg9uuumrXz1++LBZ2boVo/VxdByWUHmKyWgCYyx63S7HvQhEaS8/vvcMeNjl1cYM4HbSmgFmZFW9m80/Yvby/llMbasmOFkQ6LeHyk987ubcprnHFxRlu6Ft+FhrGfxFV1yWQYtoZBQNoaScnd8xd9Q7D2+Bbdu2oa4t6tqBiLC+vo5du3dsf+F1z7s8vqFZwwdAUVZQUvLMZ2gAML/CVlIsCFVRIstyfPjDf3PzwcMH78uzjGfaKcAFzgt2jgFncMyueRtagB/TheDjPYqak4JEO9/bAL1mbhMUmOElEZ3n+fPgmB0WMfPW2hLecf62gOD50jh77IOHThL0B/0tz3zm5c9cX99AmmkET4AE+kt9XPnsKyAFu79XVVFaY8p+t48jhw5jY30EkgKTyYQbR2kG64mN4aSK8XAGWifQgg2inHfwjlUvSmsE52Gsg1DsjN8fLMN7j6IsUFUV0iTFyuoqvnrjjZ/zPrwVRAk1ecXegzxLVQaDAfRBjX379mHPnj0AgPF4ipXV1bN+9md/9ife/ZM/8SNaq7HUCh7M0vrgUZc1qqoCBaCcljC1hdQSKtGoypKjwUggzzSMdagrbrQBgFI6qoS4AWNtNDLTYCAPAikJeA/r2YldgGfMnQ9IpMSWLSsgCKytHcfK6tbz3vGOd74GACbTEr28O7uvR8l/43zvQgA5VivpVEMnCT7xmX889IXPfvG/f/GLn/9Yr9tzdWXhEWBqj2F/CO8dimoKnabYsmUZ3nlMiikOHTzMIwo+YGNtA1oqjmla1D+rtq2sXvT93//G7/qjP/y9a65+7vMvvfCCC09pvmetQ1XWSLNk/s8tAGBjbWPry1/80jfdeuPNlz//Rdd97b/96Z9+/ec+8HP/55HHH3twsaqLWtSiFrWokwJepZjdTdMUWZajKAv4ANi6Zolz3BCbCBjKaYk0zdHp9KIRVYVOt4fJdAKShMFwiBAcinKKXq+HsijgUwuzXsP7AFNVWFtbw+q2AfrLg1Oec81zrnzWpZdfc/HFF1571dVXXzDo9bvzL5Dl1gRq0pPAH0/LAloqCKE3QQhrLIz3yPIUtWFX4EAs0dZKok2YmVeHkmgdb5s4lfYPbJhtsts4GpyQQBNmDrnWe4zHY5i6ZjdSD1gH3PfgA/jUZz+DRx/dh/F4EgSFtU63Ww4Hw8Ias6/bze944IH777j3nnsfPHL40KMPPfLQQ0ePHhk1T5FlXfS6fZAQqMsSUsvWsVQnGs5YeO+QZBnK6RTWjqEVg0TnDDM8tYFzzJIkSiNNNbzn91dXJspZA5IswbSawluPXn+AqioQgkei0wgGgTzLYWwNUxn0en2EQNGEbAKtJabTAkJIKCfR7w4wHPYhE4nvefUrrx4Mh1vW1jawa8sQk6JAKhIGsrEh0ay99x6dTgYASJMsStaBw4ePjb75zW/eoJIkuj8b2OAA+Oh2m0J4E9nJwBJbIaC1RF3X8TgKKMHzgw4BSZoieI+6NlHWTG18yWwg9J+Ebk8OiP85UuY4x9xq8+fA76aAorgercEWRXOswECQI2l4HQkUM5R928xhGa1s2TDrLMoqQJICZEBtDKrKIE1zyEQCCNiza9eF3rrTAUA2MUgigtA4q9w0poTgV+u8g7cBKmHzozTLIITAP/7jJ250tg5JrwdTG5ZjBx8dcPl98SxpI8sNsSUV4mw9tYZUzVrM5p4jKx9BbmP4xBqCOOcv47x44CaY9Y7X2DNDCEFwroa1FlmeQQqN2lg86/LLTz33/HPO/MoNX8azr7wSvX4PR48cw/HRBk4/5TQYY6ABDIYDvWV1y9A6g7KukHXYDEkQYJ2HcRbOctwPm7exq7ggCWcdfLDAnKmWMXV73G1dQ2mB2lSwniXXVVnjSHkQBIkvfO4LX/zyl7/y9Wuuueo5LuYXk5Rto4OIsPfUvThwcD/uu+9e7N17OhACrPX4/re++fU3ff2mb/zu7/7Ob55++pmYFiXqskI372I8mbDbt3XRFZ2N9yaTCUIAskxDCDb/k41Zlea8XRccrDe85vFcUTrhmVvHa19NawhJ0BHcQzPoVVKjk+dw3iNPE1R1ibe//h3f+4yLLrrUWo9erw8tBatrpGjHS0K8PhSxsZbSzA5/9KMf83d9684v3XXH7f97PFk/Oi3GWFragul40ioWvA9QOuV5ZWMw2ZhwU08nKMsJN2GIVQE2gvpFfZtbGxFt37Xz4h/8wbe+6YYbv/zas846+3RfO4hEzhll8nU5Go9Qmxz9fme2H/Ae/+n3fj9cfdWz6aff/4FzhZDn3nPXXa/+0R//0St27Nz5gQP799+/WOVFLWpRi1rUEwAviciYSglrbJzpS6E7XQ7u8Q7T6YSlzVIxCCaOmbDWcEddBBTFlJlfpZBlGt4LmJIBx/59B+BDwOq27YOVLauXvPJ7X3n5a1//ysvPOefcy7cubz8rT3NxIjho//jFuUrfON3GTb2ZMyUhEjHiwrdyxaKsoJREkuq4+RZtqovfBGpn7FsTXySI4NGwRLPM1fgnF9Y5CIrusM4B0SlXCsKxIxsYj0Z4bN+j2H/wcdx//0M4evg4pFZ2MOgdPXjg4NqO7Tv2P/LII7fddONN37LOPnzw0IGHvLePPLrvsY2imAIAOp0uVldXsbGxAfaZRjTnISilYY2B8yyPtK5q82kzEuh1OijKgo1jlMTUVtFoSiHRCkVVwFoLB4pyb95sSNJIMominCDLc5AmVFWBOs4XOm8xGtVQSqKoSiB4ZGmOqq6AQKjrCs5ZaKWQKI3hli0YjccAHMpiCqmketWrXnnVsD+ElgkAIM9SPDFqh7FLt9NpP26bDgTcf999j95+2zfvTpSGdxyHQ4pgKzbREcQSTorRU42JE0UjHO8dvHWAjPOxPnBjpJknpNDGDT3BVfmfMsP7/61ha9tRCSduFueujzkH6TkX6dDE1foAIWmO/QwxJzpKt3kQFEqpOGPJBl51XUFqAescpkXJ11icja/qEs+6/LJL9+zZnTdzws1ranJ2A2bS7Wb96rrG8WPHsXV1K3Si2bgIwMb62jcAwDoL7z2yLs9qTkYTQDCA9jEz28dHZizLc/ftrP58o6Sd9W5yeqPpWZDxsHj2LApscuURAO/hvI33tNCCZ60U6sogzTI2MSKBQ4eO4oy9p5+rhMiXlpbR6Xbb+1S3k0W5PKsS6rrSo42NFecddKJR1wZ1ZTFcGmI6nWAyLiAIGA6XIaRAWZYcoVVxswiBIIWCyARMVTPwSxSk1CwNDx5aSZiCFRfOWB4/yRMcPLD/kQ/91Yc+dc01Vz1nppJp7mVsepamCXbu3InHH38cPnhkeYbKWCiI5Kfe969++MMf/vCnHnnkkVv3nLIHE+dnOWxEyPIUOkswHY9hnYUUCkqrNkqNSEAKQl1Zfp2agbC33AgR8a7mnANIQKYKMjDjnndzBBewUa6jk3bQ6/VRT2s4HzCZTlCXNYSUq2948+teCnCzTmuJsiqQ5BoCs5GENhIrNgaNqfAHH/xDGFsdL0fll8fro28tDYcwNsA5HgUZDpY4Ik8BzjpIkthY3+AVNIDONFSSgBSPhghJILtwaf52tby69ZJ3v+dfvuGH3/nON5533rmnAkAxmcIYh77qRYO7OFqkBZaXl9jcLP4j4kjS933f99HK1hVopTGdTvHN229P3/NT7339YHlwF4B/vVjpRS1qUYta1BMAb/CNYyY7PyU6ZdmcM1jesgQC4dix41gaDiGIUJQViqqEjsCB4gTk0lIfqcqwMR5jOh2hmEwBQJ1z9jmnXXHFFZc9/wXPu/r5173g2aecsvfi3Tu39098Id6HNj4inLj7F4BoslADUNUGWZIi0RpN+oiMbqxSJjxG62aZpA0rMsvcDK0ME2EGdilu5lplbTR7Ys+hGJUCAe/ZyZUkRTflCR649wEEBNxz7wP285/7oh30u0mSJiLv5MeH/e6ja/8Pe+8dp9lZl41fdzvlKdN2draXbHqFFFJJIPReg5QAglIFlaYC0rFQFAQVAVEECSrwCkaQhABBSSCQnmyy2U2yvU6fp51yt98f3/ucmU1B3ven7+dF5vYju9mdnec85znnzH19r7bQu2f3rl0333H77Xce2L///snpqX0Ay4zW8N5BRdTHOTQyDKMN4Bi0NojjGFobFEWGKI4AMBTaIFIq+HANpCTfauXD9c6BeY6yKIEyyEo9fbZGF4BjARiF9NYAConJpaqNfq8HwQUxq46AoUpU8POSxLXdHka/14cBhRvlWY7CaAwPDUEqiTzPsWLFGHrdHnbevxvjE2PHjrZHTwEAJSupGq+B3VJ/9EOJfytmav/+AzvmF+aPrBgfh7MOeZYj61MgVqQEHaMl2Wpe6lCVRZ+jEJykvow84NU5sMYGkLRI4XPOIZiAdXYRYD4Q/PqHAcPsvwD4LkG/1XEe5SWuK5FYUPNWx+7hOKXd8tCB6kHS+ip4zhoHLkkCnBUDJEkKJQXKwqM/6BEo4Qm4VHTOyhJxFOOJj3/CmSQT50Eavgh4idCzi2Ff4TwmcYIVK8aDt4D+7J67tx/Zed+ug7FqQAiJPCvANQVmgXk46yG5gHaGZMeVXSEAcGtdfV7qh4B/4DkPsDtI2IXgMF4vJnE7R8BLUDdw1evrQ3yagCIAGSkAwT/sDIbGWqcODQ3hwgvPR9X5PDY2il279uCuw9tx6qknAQCGh4fiiy684JhvfONKREkEyQWSVox+rwtrLeI4grWUziwZ3f9Fngewi+DpBbgP16h1cKUGYxTGplSEZrOFLMtgysAwcoFerw8wjjtvv/V7+/bsftWGTZtXVYFu9Hz1IYyJpMobN2wEQOnrMkirN2xcd9wff/TDb3vZ5S9/7SDP+2WRoSzpXEgRA96h0+0CnpKWQdZiFJrSmKWQGGS9wLb60FUbk+c3z6j6SkhoXcJzC2bpWIzXMFqDgaPZaBEIzQroUoNzjlXj4+jrPi598tMeffIJJ51z7/07se3uuzAxNo4TTz4BcTN+0Mxoabr6fffuxP337nXnnHXmjq/90/+6fm6+UzaaCT074hiwgDMGxmlIxlHkAyQpdR0vzC8gThmcN5QkziVcacGZPNr2sLyOWlEcr3/5S1/2iu9f893LzzzzEScB1OduS4MkSZA26Rnm6p8D9Kyme3bpk5Cm1Mds2UR7Bu+Qpikue94LICTHcHPkUsbYn3vvZ5fP+vJaXstreS2vowBvlMRIRQNFlkMpBiUE8oL4lDwvAU99kYPBAGmaQgiBViMNfboJGs0GFhYWMDU5VW1+4lMfeepJl176uEsuOPv8J1386EsetWbt6lUPxWAVJclolZTBd+fBvECdOIUlIUHgNSBRQsLB1hvXGjBx2ly50Bdcg1W2KEIOUUT1HhnsgaCKGGBe1b8E2SYXHL1+H1YTQ+O9x51b7wRnwh7af9Dt3btHz83PT+7fe+DwyaecXBRlkc9Mzx0+tGv3bbfccuNNe3bvuefwkUPTMlIQTCBOY+hSI1VRkK9yOE8bfWcdJd9qwFpNFUIApREbC+c0HBgiRcE+zltkeU4b5iKHsx5RksCUJYzTgd1mMKUO0mPySxpDXchKygCyffB+knydcyAvM/J1egsH8oFqa9FsJCiLAp4DSRRh0B8gbSSAZpAqglQR0jhGo5EgGxTQ2uD0M04/c2JiYvWDmMmlXms8vHqYhe7Mn9740+sAYl+MMWEQ4KFNCWsctLckKeccUkkYYyFAwWWV9JCkuLx+UfJruyCFrRPPAtP/kBh0yeW5GHpWh6Y9TCfvEh38g9/pQ7HHrAIoHswefbGyejhDQUAs9Mhat6RT2FvkeQYloxBeRey35BwyIh+oLjW8cyhKjWarjTIrwAUjwOEZ4jgFnMfI0MjI6MjYaQDV9yglj6q5BSjQiQvaqFoHlGWGOEkQxxGpCix5M0tTzjvuu8Mjw5BKoMhyFFlRhytJKRHHKXSvCxZ6oa22MN7UclUG1NVf1TmrVBos0JEOLozkbPD+UpgV44xAtPXwjAPMUSASC2DeIwA2hkG/gPcORmtMrFmTPubxTzj78MwRrF6xCt6QxQIARodHsGpiApwz9HoZ1qxdg2c/55kbv/lv/8bSRuLBKAyu1+tRJY9kwatoUaA4SsZNvdYEIKGBWMVgwkBwBeeorzYveugOekiiGJJzZFkGzxRUHGFkeBh33nbnrf/xg+tuu/xXNz+5et5ZR+FNdYVbqBw6eOQwDuzZi3POORs2iFte+qIXv+A711xz/d//7ef/asuWY5HlOZ1T42CcQ6PRgjPEXvfKLiXzS0XBZ9aAMQGqbHeh15lS3H3oYSafrgS8gxQCztP9bI0BEwJK0vCtKHK028OIpESnswAWifZb3vQ7Lx0fW5F2ul2cdOKJ8M5hZGwMFBjOjgpwq+5vALh76zacdvopU9f/5IZ/3X/wwK3toRYGeR+pamDQ79Gz10dYtXoV5ubmyNOr6bxHKgK8w2DQB+cC2pQAY4jiGEwvA94HLiFl44UvevFz/vXKf33deec+6tEjo6PMa6oqy7IBVBTBc1//jK66mQHUtWTWOZRFgThOgjIlCK9cUKtwYoMBYM3aDceeesppmwEsA97ltbyW1/JaXkcD3qHhITjj0Ov2iG1jBh5Ao9Gog6eSNEVZFMiLHFwIREKCS6Db7WBqahLDw6NDlz7ucY+88IILH/OEJz7u0jPPOuvM4dbwSPUi8/MdeA+Mjg7B2ZATzBmk4DVgFUzA80p+6sOGtQJCQYIcwnWYZIub/woULAEIzAPwrE7+9VVVEao/C/JoPLhtxoVdc9Wt66kvFP1BhoP7D6KRNmCdxZ59ewfbtt1zeHpyeu/czPzeffv33L9/7/7t+/YfOHDPvXf35+Y7/e3bth+xzi4ggIyRkVHq09QangEGOkjJHWxpwCQx3K1WG/1BH94S0DeW3keeF4F5JCDc15p8jYKBMREShSkpVwgBHwtKGQVtMmAdVSUBocPUw5Ya3jhEiYIFSXshGJ1/xhDFlFILQ2m/1lJnqTEaWlOljXEaTDCqMwJDp7OARtpANsgx3+1iy7Fb0O3P47zzLriEgWH33j3YtGHTg1W77GdYZcOG/eCBw91/u/rbP262hpA2UvR6A0RxhCROML+wACUldGmQpim00cTuhevDGFNLeIsir6W6LOBea7GoAkDVcbvoeXxInMoWQ6nwgHCVo0Dvg9he9vDv8wH/XYVQVVZixpYyvazugq52ihyCpNoekEoBxsGYEh4egpGkmIOh1JQczhiHLiktveRAs91CWWpYD0qmVTGmp6exYfO6LavXrNmQZzkcQOFUDxhSCCnrc0VWznAeBQuduPR33U6n351fKBa6HSSNFIJzWDA0Gi2UZY5Ca+jSwDsLDkkBeo4qzuqAunB/V+nsHlS5dNR9XQN/R6x/GAp45+E5sUrC+Xoz7byHNVS/E6X0DPQeUDyCdQaxUhvPOP3001etoBmer4djQLPVoj5v7yEFR7/Xw2233TakdeGdb6Lf7YHzPuIoRq/fB2OgrtlwHzsX7BShr9lbh0hK8t7WShySWFtrIBkLadwMxhq0WkOhbxaIpMTk5JH52++47duX46VP5oz8j2BLmTTUFUIjw8NYaDWwe9dubNi0GdoYCCmjD77vfb99/7333nHvPTuuHxsdw/TsDGA9+lmGVatXAdZhcnKSuoyVgLcu+HGBOIpJni3Ir1sUBT2Lg3dX2xJSCHCmUBZl/XVgITzRe0RRhGZzqGaw5zsLePJTnnrpxRdd/AwA2LJpc32r2CWKg7p3PXSKA8C3/u076PR7uPP2rTd+5tN/9b+Gh0eyVtoAhIdSEi7Ilx08up0u+v0BWs02yqLAYNAjcA5gqDUEB6C30KGgQ0dBa8urvufE6MqV53/iL/7ytW983Wuf3+v2G3mWQxcaKlI4ePAIjC2xceOG4Ndf+vO+6hCn/AQaTvFakVXZJFx4/jnPQzo/cOnjH7P+vHPOOw/ALcufwvJaXstreS2vowDvwtwcypJ8md57yEiAGQ8pBEpDiaHDw0PodnuAIy/W9NQUvPc4ZssxJ77gVy571nOe+7ynnHPW2Y9SUtVSZWdpgyYEh9ZFzc45uJCUSqAsKwpYa5HGaWDZAkhdWuHij3ZSsgDq/AP1pEtSiAMUqP/M1TLmUH3jHawhSTaXEtYQ6yPChrFmHTnDwQOHMd/p2Jnp6cOHDx6656Zbbt66deud91lj7jt46ODOfn8weeTQkW6SJtY5g7vvuRMTK9dgqD2E+flZjIyMkvyP9nLgnKMsS7SH2xj0+uBgELFEaSgwqdvpUvBNFFEwWFmGWiUf6lhC5YZ3IXCLgwUZKKq+TWNgnUUcxRCcY9DP4JmDYPTaUimqRjGWjicvQzWPgKjSbq1HnEQoizJ0HTMoJWljyQTSOIKMJKQSGPT6sNZiYtUEms0Gsn6O4eFheMYwOz2D+dmFlRddcOF59EmJRWDIjvr4Hh7whr+4f+fOnbv37N7GwFDkBaTgKPIyyNRRJ9tKHiOKFs+DtzZIVuk8sqVhR0EJUPlb6+Ajthi+5B+qh/dnkToPTDZ7kMT5gclpSwB0dW27B24kcbR/NzAjlWyTiF6LKIrAGQFaH6pvmCD1htEapbGIkjhUZlkIwcMgCsizDBx0bbRazTrcanruMB79mPOPO+nkk1ZUzMtD4fla4hzuuzRJ6r+XQWoe/n1PO1M4b6G1hpQCTHhoUwSJuUZhDFioUSrK4igvvguePiECwLVVuVglSabBmhISTHCUugxOeE5dr7wK+qL3whmHlALG0WukaQyAY1DkaLWbGB0ZwcF9XWzYtGHzirEVEwyADR+QcyTFds6AeQ5IDsY9Yhnj7HPOg3WOGWv80FAb/d4AxpjQD+7Jf844tC4hA3i1ISAwiiJi0gVt/K0jtY3WBdXtWAMX5M4eHkmSYNDPSLYdvsfffO6vv/XCl/zKr5999rmnW+/AmAggsEqmp27eRpJiw8bN2LF9ByZW52g2mxgUJTZt2Hji+97z3vc99clPf6PVZnvSSBBHDQipMD83CyUiNFtNDAL7K2IFZy2844B3aDSbaDRSdBZ60M4hjhswVoNLjlhGyPO8/lnQbrcwGGSQUiAvczBOvutGmmJ2dgad7gIAxK97w+tfwRliG9h9zoCyLGGdrWvLFq9Buh6nDk3hx/9xA57yjCcP7rp769WA22GtxfTcHKQCBhmxto2kgX5/gOnZPhppA4JzaKthnUcSEcuYFUUYpHCAA8aUNExYXmg3h059y1vf9rLXvP41LxxuNjf/y9e/jrMe9ShMjK/EkcnD6HUHSJspVq9dFZ4Xom5ZqIZL1c9wshtIKEGp737JM5AzgVJTcJsUPCh3OJ713Gde2Eqan+3lfbv8aSyv5bW8ltfyqgGvNRbD7SEUmkJqYpZAKoaiLJBlOdqyhaLIobXGSHsIc91ZnP6IM058wa+88PJXvuJXn79uzdpTFkGuh/WWejarxFYA42PjQRpmYb2h8Ct4cMeRRNESJraqOHkwujgKLzCqHqr9tljMU6l+YFasXNUHyquOVU8hOMZaZFkGpWKkUtZdrc57dOa7GPT6mJ2Ztdrqvf/6r9/66S0333rjIOvdfujQkfsGWfdIr9/LB73MT6xZiUHWh/MaIyPjABMocg1jNTp9jX6eQ/Z7NSvXzwaUSuo0Yq2gVATtS6qGMgbeUTqukhzOajBBPcje+cDGBYlr2JhXabRVDY0QEmD0/sA81buUms5BzbzRcMNoA+cpodgYFtg0wNsqCddRMJkAmkND6Pd6sIENy7MM7aEhxLFCvz8Agkx20O/T5nWoRYFHnGPy8CFsXLvulNNPPfW4LCuwZmLVUQDSe3/U5vRnrZ3377yr31mYi6K05uilkCi1CUwOyZLzLAOT1JvqLW2olIzAwFAUZQ0sGXztf3Vs8do5qn6IPYwhdylm9UtSlB9YXfSQ/5wd/S3qC3cR3LoHYmr/4NeuritWawA9jLZgjFKUOedUycI5HFxITuawltQUUkryqDqgLAtIESFNYvT6PfT7AmvXrsXBg4cAAGc98sxHAUBZashI1ffV0kOqnQIPGGDUI6hQdL13374DDGygVIwojoldCyFwxpgw2KEKKRo8Acy5+joh1t7Buuq6offCOCkNqrNrjAMLYKRKD/YQ4bqztXy9kvh7xsG8Rz7IwaUADwMVLgSYFFi9es0W7xEXxiKSHOBkQSjKElEUEWjWGnGc4K6td+PbV109Za2T3lqdGUvJ9UVeDxmMMYiTmO7H0DltranvD+89jDEAGIUjLQHKpfNQSgV1gsPCwgKssUhSskCMjq7A7NzMff/yrSv/+eyzzz1dCVX71qtBCWeLwWOtVgtnnX0WOr0uet0+ojiBthZPfMITnvDBD77vbR/56Id+p9FI5jvdPuI4gS41etkAjTRFI23AGI1+dwAmUNdgeUOgxQOIkhhJGqHbzZEN+jRkCTLWOEmgjUZRFmA8QRwlAGMo8hKTU1NI0wR5WeIJT3rCs5/59Kc/vrqDeHi+SyUQMfVwczJ4Djz5qU/Cv//wP378xS996crh4VFEcQxelAAsjLOIVIw8L8L5lRBSQGuLWFH3fJYN4Gw1FGOh05sSw51bDq26+HGPe+q11/7gnavXTTx6cnISul/gvHPPx1y3gx337sDpp5+OTSvGyQcuZf3U8J4G5JX0nC2S5fktt9x+6Iffu1Y+/klPHD/tEaemlQ9da41BkaOtWvDehxBLiemZae0FlqcPy2t5La/ltbyOBrxRnCBttuGzDB4eeV6AAzDeYu36tTC6xPzcHJrtNg4c2o/nv+CyE7/2la9+AsCT5xcWsPWuu7Fx3QZK9eWAVJT4S9PaRfkhD/23iovA8AQmplKgeb8kdOfBzJdnde3nInjz7OgvP0oS62vXrg+vXRYlykIjihWEFBgeGq6/uiwLv+P++2b27dl7ZGZydv+e3TvvuufeHXfs27vvngMHDt134OCBmSzrY+XKVRgfH4cPKaeDXg+9Xh9pM0Z/kKHRbCJpROh1u5AqQpIm6PS6gLdQKiGJFgBjNaZnZ6CkIp9onsFbi7TZJpaZg9giT87DygtpgnzLewcODu8pnIsLkhM6S7JPISWYQ133IaSAs+TTVZLAinEGXHAIyVFqF0Cbo/qY4LMjKSVJ3jkXaA01UAwG0KYEkwwLnQV475GmTeiihLdAv5eh1+2h3R5Gd24B0zOT+O3ffONjxidWDhlnwdzR4JCxn7/1566777pTCoWhoTYGgwEajRRGaxSGkqSdtQR+ogjOuRAuQ8FTXAi6JowLgIpwJg9wrAKQddVO5e+tan8egph90ETGP8SXPHB+4x+8Ia8obo9FsM2WaqSDP7WytjPGICQxYMSoVZ24HN4R2+kZD8MkCkFynmG4NYxc58izHFKQjNNyAc45BaRZg9mFOTSbTaxeuxa93gBHjkxixYrRxrOf+6xz88EAs7Pzfs26tWxRSfHA9/Lg//aVSiOcp6u++c3dg8HAj69cCW0N+roful6pMzVJE5iSEn5d8CiDcVh4QIRBhjHwcIuefM/gbRVC54PVgYAXOAv+zCDkDf29kVIAByV3Ww8Whh3Uc8shuEBZahw+fASRinHJoy8+K5YKsRQh6IxBcIFGkgIc1DXOqHN2z56d9qc33tCbmFit8kFfe+/R6S6EqjC6V7UxyOZzxEkEwYmJJiabpOZSUVgWZ6AO3aBQccE76i15HMEZPBNIkiiA6ARxFGNiYi3++Z+vvPJFL3jJS045+ZTjETrMKxe0x+I16xkNMPK8RLPRII+xsygKi3e88x2/euttt2796le/+olN6zdiUPTRHGpA5gLaWHQ6C0ijiOrSjEaapDBGo7QavX6PBqAgJtU5ApEyjsA4R5ZnsI5SktMAnIuC/NRp2oBQCo1GApWq4d/+rd98mWB8yFgHwUlO7EHDwMVrbXHYCTAszM2jMDkuvPi8/p/+2Ue+MHX40N6JiVUo8wKCcWjnMdIagRACc/kChBSwLlTaOYdSl2g2GzBaIzckvXaeNAYA9Vc7+8uLsRhj4oWXv/gVX/j8372jzIpj77/vPpx8womwFpicnQNnDI+5+JIAcumJYa1BqUukSQrOPNiSz+/g4SM7rv/RDVf+6CfXf/PK//WNHTvvv/f8L6//8kdOe8SpxzlG6o0okpCqBcY4ytAfDwD/8e//MdXv95enD8treS2v5bW8jga8jHHMzc5BSIEkjpHlOWIVI5EKpizQ7XZRBAkXABw5NH3eF//uSxecdtop6A8GfmhoiAlBlRQ+7MoZaY7qPj2/ZBNiDXlKyatVl68SPOWoTZ1LyK4lia9B6Oz5EgzhjyLHWNhcV76tJblU6HcGsMZAMKDX60OXVh86cGj/rTfddPf2Hdt/tGf/7lvv2b5979T0zOGFzuzMirEV6Mx2MbF6AuvWrsMgG0BwqqgY9AeQSqLb6YSwFQ6tgG6XNnRCSiRxDG00mo0meShD7YaxtpaSEuPCAzAj+TcXHEZrCBGHkChdSy5daSCFgLe0ERZCwFgLZgm9CanAg2TR10Ffnmp4SGUI66vAL0BwgX6vX7NGzlE9D2cSzWYTeZahtBreWMRxjKzfBxjQbLVhCoPh9gj6/R6sNtBaY9PmYyC4RJ5n1Ofb62DlxHjr0ic+7jEAkGc50jR9iG7bh4e8FK4lUJaluemmn97RbDXRbDaQFwWsdiFkK/SuguSpgnFwwVAYA6kUOPMoy4Ik4IyDQcB7eq9au/o680s2zdWvVUURr2TOSxldv+gtWwxGYw8LiCs1w8MlOLOlU5ujbgIa+BADQhv9ihWpwlsIqwXmiZGSgfbhNHCSXGKQ0XXbbDQBRuFT5NV3GOgCYyvGYDUNTcq8wMz0NACDkZHRdRs2bjw5aTQwJiQD+88+tYdCv76eSp148ql7rfsHCjICJ6BuCfR4Y6E9KOhIyLpf2zoHBkvv29G5ItBPqco2DDuqIVuVss7Cs8h6CxEkkqXRdfUPBwOXApAeuqRgLQiqMmpGKclYswHOfdS5K5/ylKeclsYxef0FdfiCA3Oz8xj0BojTCEkjxuzcHJ7wpKeId8x3Rj/5yT8XWdbH/n0H4AwghYQuSLrNOUOj0QDnDEVRQHCBVtqEsQaF1uFeDNJ6waGUhDYGVpewDIhUjEQ0oE0BwEGHAY/gAt1eB63mEO66/c5br/zGN75+ysmn/C7j4qggNlYpX+qMA2Dl2FidXG5LW9mu1R+87w/eun3rtq2HJg98T6UpjDdI0hixAwaDPgbZAEpFdb+u9WG4Zcl6IaQA4wKmpFAq5yysNogVBV1B8PBsdGgPtenZ1O+i0Wpi+sgUzrvgvMc84ylPuxgABBjyosTcwjyG2+3FCrMlfvtudwFHDhzBd77/XRy75Rhc+bV/+c5V377qWxMrV8MZCl0rSw1jqLO7zDX1t5eaBiqhD1qFui3GBQX4OQtnsERZQQOaX8Y1OrLi5I985KNveNaznvHi/ft2jbWaYzjzjEfin7/+NTRaQ3j8E5+EFaMjNGxd8tBzqKrGGBgX0F53b7z5xhu/+Pkrvv69a675l3t37Nj3guc9Gx//8EfwxCc//sDjHnfpWPX55oVGJEWw5DjEUkGFOOdLH3epXt7WLa/ltbyW1/J6MMOrIlhB9TZFXiCJg7fPO3Q7PeQ5dTzmeY44SbYcOnjwSXPzC0PHbNmCRrPBoiha3JcvJcGWMLPV3j3XBboLXcRRjKF2+6geXM+q2gHqBfZLTJ0PUHseVS9USZYdyHNKYIZBPGAnPj15BIpJHJ48ov/yr752/fTszPemJ2fuAtje22+/Zc/c3Nz0QqeDFSvGQ32LQp7nkLFAt9cjgOE9tLMYZH0YZ5EgRtpoAAzkkbXUW0xSNyDLcuTlAGnaADx5IRmjyg7LyIeo4giMMZR5DhEqQUQkIRCSTn0I2eKC2DjjKOk0bLYqeTNC4Jf3xHiRDLL6LHwtv6tkkVVCs/eOjplxWEeAwBoLxqgiRaoI0lqSe8KBMYkkTeA9MOgPkM/maLfasNoEuXAOFUnEjRjdhQ5GxkYx2h4+Lk1aJwGUNivqwKF6ZAH/APq0DhGzDt1Oz7fbLabLcr/3brvgEjPTMxBSoiwLOHikcQrnHf23JamnsSZ4kUnGKYSovbrEHC6C1MVOWV/7OyuP9CJYxZJEZwK7tZS40h979mDWt7oBQj/uf7p+Bou8lGl2SwBd5U0m2S4xTiJch8zT/cyYhbWuBs0cHErRdR7FMbigMCvHqB/zyOFJjIwNY3ZuCq2h1ilRHK0EABXqwNj/RjAtQ3jvnKHb7WZ33HH7vYpH0FqDK4lYKRRFEbx4gTHzhnzJztWf4aJyIwQwObJRVGKReqBQwTnGjhpAMBJM1MdurA6fCYNUMtgwqPYojhKsGF+BQwcOYWh4CFkxGNt5386JE084AdYYkjyHALd7tm3DuvXrMTa+AmVZgPMIkZI4dOBQunv3bjM80g73JK+tB9oY+jyEQ5nrcKxAUZahAtzRgMo6gAFpktbJ1FKS/NuFyixrba36oBoqQJcaLtVYNTHhv/JPX7viaU95xhPOOPOMs4ylKiZgSRDaks+qKDVVvqECeyTZPuGUEzZ86tOf+r3nPe+y+6xxe8A4Ot1+qEiiAR/ngurQPHmsSU1BrxBHDYADeZ7Rs0VKJEmCIi8hhQSHh3cWSsVQlb9XSMRxDM9d8tLLL38eGBv2np6dc7PzSJsJ4jReVEaEDzbL+lhYWMDM7AxGV4xgzep1ez72sT+7wlkza61BZ6EDpRSEkmg0mxj0+6QACZJyLgSUiiCVQpYNkA0GsJaGkpwF5c2SmjD7S8bwxlEcPfoxlz79O9+95vfOPuvM87bdtQ1jo6swPDKMrdvuQpYP8NSnPSOAXfp54owjdQY8lIighMK2e7bd+Y9f+cq/fueaa67Zvn3HjbOTk/0Hvtapp558/KpVq8eqekApSLOc5wWkVHXaOBiwa9fuzvK2bnktr+W1vJbXgwDvIM/ABdVFxAHsWmswGAygdYmxiYnWxRdfdOZIc+TSxzz24qdf9sIXnt2upukIMuOwB+dLwqJqhWf4HwcPJRRWjq8I/5YKJGoW9qgqTU69t3WnxJJwoTrMqtKPEptbAUC+ZOdWbcoHgz527dkNb/z+G37843/41lXfumLfvr13WON9qzWETncBSRxj5cQESeScR7PVCAEzGtIYRFGEotQEEhmBh0HeQ5okUEKh2WhAMIHeoA+jST5rHW2mi5zSrZ3zEBL0+9KBC2IVdVECzkMoYlgFC7VLNoBMziE4oI2hDRcE1Q0JFpJXKXWZCVn3lTpvA5tJ50IIAofWWnAu4eHgHFvsTOXUUQtP/a1RIpHlBYQw4Jz6N72nY88zCqhJGymyPCegrCSk8yiKEsYYtNvUK3pg/xE87TVPe8Spp568VmtXS95DMskiq/kwfCEXHEmSMKkErvzXq27fef/Og8ZoeMaQpAkW8pw2nYIjjRMAHkVO79NZS32/zkFrTWmfnNWyVh5kdN5TuJpzfjHp1fmj7LusBua+ltb/bHR3NHDlIY3cBQDmflZzJ/vZINjX7Dira5QocMtDcAbrQZVDngMhEKYC3FJKOOah8wJKKqgoQhRHUEqBc4b+oF8PkoQSWLliJXr9Hl79mtec30xbMFoDjNfy8J9rEequue9bb79t+933bLtj9dpVOHJkGo12g76EcyRRA2WRASF52AWA7vmiXnzRCkGS5ZBCR+c5VE3VdUXVPwtBN8455HlOCeSB+XfBK+ycgxTkLdRWw1mgN+iDRXTNKyZWnXf+uROLH9OiCmB4ZBitdhOm1IAFooi+z+T0tOj1e3wwGKAockRxAucpYIwCqxiMLmGNBhcKKpKhkog+W60NDSjA6vtOcEHmVUvPbS4EpCT/sJIKvf4AwjMIIdEfEOt66+233vHhj/7J56748hc/LjiLq/NTPR9cNTz0HiqSQT5Pzw9jHYw2UErhoksufuKb3/ym177/D/7gXe3WsIuEgDEGw6MjKLMCYAzWG8zPz0NFCmmDwgjzQYn5hXkwDjQbDXjmkWc58jyD0RZSKTjnEMcJoojk3YJzNFpD2LtnDy549IWPufylL30GQAMAD49GI8XI8NCiPYKB/OoAGBNopk3kRYGRoWH9D//4pX/5/rXXXjPSHobWJSIVoTQaMlYo8hK61FARQ7ffg3cOkimUWodAPAclYgju4BmlfSsloYNFxHsP48pfmk1DI24OP+f5L3jdpz71qd+MIrlu/4GDGB5bgb0H9uDAof244NxzceGFF9G9YR2pvEK/tQgX3O7d++79+Cc+8aXvfe/qr22948673/+e9z7s642Njp1cDRV1aajizGrMzs9hbHQFJKPGh8Egw1e/8rUd73//+5Z3dstreS2v5bW8jga8Qgh4OBhnoKDgrUe304MQvH3xYy55/Ove+PqXPe85z31iIuN2ta1cTDwm3xeWBPVUysX664CaZWGB1aSv40cnMVfsGVsqC/U1c1VJFavgKfLgoQ67YqFeppK0dXodeAsMDw9hdmYeN994692f+fRn/sAZ/VWZRmZ2roPR0VG0WuQ163S7dSKx0RpMNDA8PArnLPqDPrJ8QPtqY2nKLBVcWQAO6PS6YODgXtRpkxbEVEml0EgbtNEuNXVMYpEttNqQ75R55Dqj0ClnA+ByoYaIBQ8iSTZrSbLlR4VYVW2jnvl64w8AkkkooeCEg3UGjNPm32pD/rhmE8aQJDlRCZQKqbacKh9c+LxkpAi0OY8kjZEN+kGOTX7CkZERWOso2EoI6LLEYNDDpo2bzrHGwRoNKRSOmkosQXQPJQZeyiRed92Pbtq7b2/WaDRhjUHe53XFlS418iyvGb4sH9R+3GoYwkDn0jmSkNOl5wOjF1hC72u2ljZqdBBVFXTVzeyDd3BJ8evR4LS6rANAc/XXH/13Dw0QHwY8Pwj8+kXfehh6WE9QmntBYBfkHHAhGCZJ4zDUcZBKBsBMkuFmswEbBihtqTA2OoZ+r4dikKvjjz/xNCAkE3sPwfjDibcfAsCzow5/x/btt+3auWsqSWKoWCAvMsASAK3SxpWSoUM32BM4Fn2SAZzRexfgzNVDCyFpiFFq6hYmMEfHQAMxHoZPFtqWwReLwNYRmDLGII5ixFGEPCuwYnwcWW8BJ51w8sljY2Ot8OCsPwwuJDZs3IgoUnDeIY4j9Lp9TM1OY3ZuZm3WH0ysXLV619j4OHRRoNfvQ8QCSil0Ox2owK57T2qE6vdRnIR0akCKKNgf6FotbQkG0HCMeSRJDGscBr0McRTTcENxCmjzDKNDK/Gtb1355R9d/x/PuvCiS55inQP3DJ6TuoeBfNw+SIsDEQ7jqLYoSWQdUPbW333b63560013XXXVd644+ZQTsLDQRZ5nKEsNLgSpLZoepSlgHYMUCkkjhnMkky9DLZsUCnFCTG6R5xBSQEUR8rKEtQ4qikNQlGm+6bd/+9VpkqygIRj1KadJgsmpaYyOjFBFVjhmxqij/HvXfxetVgvjK1bu+sEP/uPrrUazYz0DmEQU021edZsnUYI4TZAXBYzRMKYEA6vD3Rhj1GDg6edarJIQDEiKh0pR8z99tRqtNS97+eVv+/O//PPXHzx0JNU5hQXeveNOrNuwBo+48MJaXl4NDT1IYcSZRLfbm/r4R//s7z7z15/9mwOH9m4H/uQ/eXQw9bE/+9ipAMjrXd3nIsGa1WtgQsidFBGst9NRmty7vK1bXstreS2v5fUgAi1NYigRQUqJIi9Q5AUe//jHPuJ/fe1rf/mdq676+5dc9qLnVWDXhh/21OUY9ttLwmj80k16SD51OLprtRYY+rA5WUytWgS9gU0DW2QgGeN11RHCJt6D1wJHzxe/PzE9EkmaAh5oRCmu++F1X52ZmfmHw0cmzeHDU9i4eRPKssS+fQfgvYOQErqk/s0kTlBkBRY6C+j3u8jyAYSUcNbCGl+/d8UiFLkhloVzGGdgvSHm1dqQgErS5kGWkbSYA9ZpYtAg4UIdEhcSnhMzmxcZGCfZIg8yXGNsCJEC9Q4GtlFIQT5G78IGn4J3IhUTE+RoCFDqMrBefElYFIMzhqp7DAFvbXXdUesdbTrjOCEWo9RwIRmWGEUOJSWiSCKOI+jSgDFAlwXm5+axdv06bFi/rjU6PHLG1NQ0pBJY6CzQxv0hIo4eEgaHhGEAOHjo0K3t4WG0Wg1Y56m6KVZQSlWIjwBvJfGthieMfGIOgNa2BrusGhR4X4eeVJLWKg14KffMQzczFzz4QpdqnY++9pcCWraEya58wqxiKo8q0/EPD36XhGI98ET5IGXmQpBE1gFOWzhL9wlXIU3YOThHUtMkSuGthS5LeGdhtIV31OGb5RlKZ2Et9RA3mo01XvtNAKCkpHohPLx/1z8kll9Mkr7lp7dsz7J+SBa3sDrcK/AoihwcVH8lI0WDGWPJ9+k8lJCIZFz73p0jBYII9UXWWrq+liQQM87AJQ/p48RyC76EoQ4MkWAcHAztdgtJEgFwyAcZnNaAdzjmmE2nAajTza2hgcfU5DQGWYY4jhFH5Nufmp7Gbbfchl//1VeeesnFjzl2MOjBWYveoE8qEUsebALYrr4vKaCKwRhDgCqw+CRdtqjst5xXI0ELD4tsMIAuCmhThgGmhS41mmkDQnEMjw0hGwwWPv4XH/8sgFwG7781hq6JIOnngkOAgtBmZ+dhCkPnhlP1T1mWUEqNfuRPPvymibWrNx+anISUlCcwMjoMzhglG8cRlFSw1iPrZ9BaBwY3pS5w50ICtUMUxWg0GxgaGUZeFCjLAsZZ5HmG+dlZXP6yy1982XOf96xqAJZlOYoQPthoNuoBGg0M6D4u8gJDw8M46ZSTcd1113/vphtvusEYg36fvMYeDEpK9Lo9Ur4EZYgQHFJICKlgvIdQAnEagUuqhzPOhk70nM6+syjKAlKK//GbhbGh0RPe94EPfPQzf/3Z387yPFVcoNVq4Dvf+x4mVo7jrEc8YtFL7ej/GaOhAmPMXXf9dd999jOfedl7PvCu3yWw+5+vLcefePzjnvCkMwCQVSaOsNDp4J577kZnvgPBRd2B/M0rv7n1nm3b9ixv65bX8lpey2t5PXBJIUjm53OHsshx2umnr/yTP/3Ttz7ijDNeBlCnqdaWuvCC948d5ZM7mogCFu2MIgC+2p9ZM7gMD9BoBnC75D/DJobqkTJoY2G0RqvZovAlDwy1WsQkh7wr5xc7fFvVlBlA2k7dQOc3DPIc4A55v0cTeU+b37woIARDLx8g9jGcddBOQ3KBfFCCCYE4SmDK8FPc0+ZIqRhCKUgmiBFgPhB+FGbjHdFvxhliBpyFD5tyBgPGgt/XEfjinpM30zloA8RJAs45ssEA3lqoKITsMAnBGQFs40KoEpCkCXWWFiVQJdgKkhg6vbipBgssbRyT9895CsUScjHlmUswHiSNIY1WKkWdts7DFhYqUuBcIu9lEExQ52azAS4FGmkTHhyNVqtx5tnnbFo5MQ4hOFrNdh0ohqOuGQ/2UDCYM8Sxwsz09NStN928I88yKEUJukzQ+bLWQWuqjhGCwxlLPq867ZYkdYITKGIhsbcCivC+HuRUf+bC8GCpUdWRcbb2AT/owv/PunqX/JPqmPxSuP9A1vfnoU+DosB5h5BQBSkUrNFwIeApURKcCTpf2sMJHyqKOJSgvysLg16vh9EVIxAFhwBHFCkcmZzCBRee/4iTTz5xQ5iRHdVh+5CH9KChxaK90hqLmdnZ/e2hEWzavAn79x3AYJDBlCVM8OBzztEfDMCFQByn1JEqXBiEIQwpaPhgwufJQF2czpBVoqo38cbVzx1K8XYofQnvKNiNS/LU2jAM8t4jFU3k+aD2vu/fvw8MSDes33gMANpge8BzBus8mq0m4iSmflvOcejwYdy/6z7cv2snNm3ctHF4aGRzlg1Az1MgjiQG/QG0NnDOQTCSc1tPbDFAtUu6LOm+k4IsHoGBJS86RxQLWEfgloEjiilwaZAPgj2FoygNpOKYnDqMuNHE1/7xG9f8r5d849+e/8znPK+6hqMoqu88bTQ4ODhjaLWaIYyQsqF7/YXQbx3huGOPO+fVr/6117zrHe98J1atpqFaUVKAHiflincekguAU+qxZx4y4kDhIZkAFxLGWDDOECkJo4m1ljJCGsWYnp7Euk0bjn3/+z/4WwCUDdPTNE2DrJmh1WjUPlrnXA1+O50e1q1dj9179tz3+S9+8e+Ns3nSTKGMRb8/QL/I0EhisIIjSWIIwZFlGbytZN0KDSkB55DlGXW0C0GVekFamyRJ7ff+nx4LfNIpJ53+/f+49k8f+chHPnH3/ffhyKEZpM0mvv/v38Vxxx+PM844lZ6R2oLJkBchaaR9cP+hXR/9049+8u+v+OKXpyenJ/93Xvfi8y844fRTTtkAEJOe9QeABcZGxxCnZFeB84AArr7q6n/Ns35veVu3vJbX8lpey+uBizfTNsZXrECeZ3DOsYXp6TPe8XvvOPvaa39Yb1aVkuCCQXBGks8lO9mlvBR5mcxiCEpgz6wzIXhlySb/KEaY/tyWJAsrshL//oMfFl//xtc7//gP/9j/9Gc+W04emcTYijEkjQQ1yl0KFkIIUtVpShJSWnv37ju0876de9pDTYyNjmFsZJQCpLiH0SW0sbDOwRqSIQvFyavlLZIkhuQS83PzKIsCSkWoYrKycgDryuAhppAZU2qUpoSlGC0IKeu6G2tM3YNJfbmoQair2fPQrQmPsshRZFktzSythmcWjFcpXgywqL14WmsCfix8TqGWByAPL+ckSvSkjIap2JCyIP+ilAQ4GIeMREhGLqC1AecCcRJDSQVtSsRxhHyQw1oK2YpS8n9PT8/AM0AohdtuuxllmbXWb1g7Qv5gktFWQWNLARFtkO0DkOMieLpr27Y7J6cm97kQ2tUepmGHMcRSihBuE8s4bM9p+JGmKaQQsNYEGfyivL5id+naIUbbBeZp6bEtetQXJeQPZHEfdMD+IWjPJSCeC76YGL00NYg9DFXqSTGxmIlFfyEYh4okgUFHib7G6SC1lBCCw5QOzhh4b1GYAtYTSJRCQYgIQ0PD2LhxE+I0xtzCPFqtNtKkgV5/AG0LPPaxj7lg46aNI6XW6A16FCbE2FHKjeqYjvpcseiDrg67s9DZv2ffnnuHR4aQZSWKrEAax2Agj7rWBuAB3BlHad+xRLvdgmce2pQwVtN1HT4PG5hSqhHiwYPt4IPkdKmnVwhBTC5j4X5gkFIhjlIIzmGNQbfTQVlqDA0NY+269fDO49hjj11zwUWP3oIAuBkjUI3gSRXgNbsYxwlWrV6DtWvXoz00zI474biVFFQlkCbkM48i8kyTFJdSpuOYvKvGGOqtjWIaNAIhdIy+nofLxBiqUnLWUXK7B5JGgjRJ4Y0NydYEhpn1GB4dgozi3h+9/4Of7fa6h+NYIVIEdvOyRJEXMCU9ubiggQf13Fpo79AaGkGz1UQZntNvffObfu0xlz7mKdMz02imDWhtMbFyJeLwPRmntPAojgjIe2KOraPEbSkpTdo7FwZ7BdI0QbvdgGMO1lk85/nPe8mxxxxzundkN+CChgFScooq9MSye4cwqOOAAxpJgjRt4M8/8akv3nn7bT9uNNtwHoijBMNDwxCMod8bwHsalpWlpmeIiuAsMeZlUUAbTWoeEYExAV0a+jNQbzIc1TyVRfE/dpNw8eMuecZ3r/3+3z7ykY98YjHIsG71Gnz+C3+LD/3Jh3D+BefjGU9/OtI0JQVJeDZyQUPN6667/tsveenlv/7xj3/sz/53wS4ApCo6jjMqWM4GGbr9HpI0wcSq1XUwoVIK2++59/4bb77pW8tbuuW1vJbX8lpeD7XkxOpxRFEcv/jyF5149TevHs3LwQXHnrB5XZKqGkxSUO1iIFUFboGjhagOHsY66tWr/oYx2JKYDBYRKOIBNDhnkA8KTM/M4Cc/+SmOHJ7Cueedh/HxMfz4xz/ub1i7rnvaKaePTEysTo47ZguUlNBao9Vo0mZzSYdrJUHVWmPnrvuxZtVqDA2PAAB27du16/DhI4e9s1i9ZgiMl1BFBCUEeqZPclyjwZmAKTWBVcaRlwaKezgL6nKFRl4Q86RkBBmqW7xxiJIIxmh4mBDWRd/DGgfOBLy3EEyAycUqIg7AGB3CdeicUW8og5QSxoTzBgYmQoKwEPDOw1i9KI/lFDRlrAX3dKycEUvpLW2muZIUguUdpKTP1jsHzwEVRcRa6xIigGIXvGvOOjBGfsMyL2C0QdJIkKQxikJDxQJRpDAY9BHJBPAevW4PVjsIJrBly5YNcaxSAHDWw8OSHJMd1UAbinOqOLJF2Xv1BT/5yU/vnF9YyFvNJvn7AvvCOEOcJLWv2bnF7+i8Q1EU9fCDc1ZLKau0ZVd7eRflyYuVRJRwXTG/3vuHpzQfqPFlDw10j2Kjfk5P70PJq6tUUuc9VVKBPnfJGElhObF/8JQyzZmAZx5KcQKHXoDHHGVRotPtAYwhVgr9XhdZlCOKEgp18hArx1Y+EiCFQjW8wUPg+Qcy9LU1AaR2YAL41yv/9c6bbrzxns1bNmNhbg7OOJQokTRTSBehLDR5SEMXcmlKSB/BVN5wFq7PcLKUiknG64hZ9BWru6SHtQa81ZQtpAa74HuvLAHOesRRSsM3Z5FnJZQk6eoJx5986roN6zZUczxWBxU4qkvilNxrjcHE+EqkcQP33LUdq9dO+LXr1goAiJQEFwJFVsJYByk5WkkbvV6XEuGFqL3ZdP9aCC6gtabhjrWwhsLX6FqknmDGOLSx8N5AgmTZ4AxxpChleJCTUqMssGJsFLfcfMvVV/zdl/7+dW98/e90FnqIUwUeGOYo9AHXOQ2eauAYOKSsppTUTZvE6aoPfvAP3vKc5zxnm4XfM7ZiCBwcw+1hWGuR5wWEkBQIZg2iKKYk/cDCDnp9NIeGwESMNErhLKBkhEhF6A/mcOJppzz6db/+qhcBoSN4iXS5vh/Y4vCq8hjPzM7gnm07sHPP7pu+873vfIWFOqfefA9ccqSNBEkUI7MOcaJgDT0nVAhtjJSiSqWQbi6VgtEanEtESqDUBZgAtC6opsjStfo/bTHG5DOf+exX/OB7P3i/YHytd8DBQ4dw9x1b8cIX/QrWbdqIE447HtUQyDuEMDuGbr93+EMf+uNPfuyjH/vzLM96/4evz/7gfX9wJgDoggZdd22/C8duOh4bN66H0QZxHAMAPvHJT15519Y7ty9v6ZbX8lpey2t5PSTgXTOxCo1WY+zMR5z56LmpufEzzj7zsS/+lV8ZTlLagHDB4byFY/4B9R7sqA29C7QtAZFQ98EYBBOQUtWBMZ1OFzMz01izbo3fvn0727VzJw7sOVTMzs/Mbti8gTtnWp1u9/Alj3309c76mz/96b82hc4ve9Sjzr50PB1HVUnBsSiBXpRKA956rByfQLPZQpZl6HUGuPOOrbf3Bv25RpLAWYe9e/ZifOUKDAYZwDh0WWCQD+j9hr5bxgV6eQEfERvrvIMQ5K2DIybBOwKnxlj4gvpzpZB1iBI8iE1jCNJFSb25RsNYktt672q/Kee+lidTBQNJHTlbusFXsNrCeBNCkAycZaGKSQT2nMF6V8uEPQAXKo4IuFDljocDLL2WjBREtXHkoq7lcd5CKgELh0bagFUGRZlhLs/RbLRR5AVVLrkS1ho0Gm2MtNsAGIbHh3HsSSecLIgWh7EGZanRaDWPxoWMZKKL3mI8SB48OT15J721qjqEwLvRHoxbWFsFgnEwIeoBAgLQFaA+V+sdbZyXgMhaJssYgsK5fu0lLdEPjUfZg1Dfz97EhXvHBeDLwB4EjPGQcHJJPdeSe4/Stv3iIIlxxHEMYw2MKSGEoA5MxiAU3cvWeQyNDCNNEsyXc3DO4MjhSchIoD0yhFjFMEaj1Axbthy3+ayzzz4JAKRSVBGDxeA6j0Wy2zoPbSxiJWrVBq+HBQ6AwM49O+/mgi3MzsxAlxZCcmijwTxHnEQwRQlvLKwhtp8LCW0tTEbeXu9Imi+FgPUexpBdwLPQw2ypbokxBiYq37+FCOncDIA3JgRfERiumFkfUqy995BOII4jZHkOoRS2HL/5kYNBtzUyOkQSY0/5BAhMsbGhHzuAa5VESFtNfOazfz37g+9fOwlwFKUGYBGpKATNEdDiLPRlCx6GXuTZdZWCxvtwXEG17lmonOJw3kEJAefoGWG1ga3evy2hnYa1VDc2eWQGmzZvQDNt4z3v/cAXn/P85z1t9ZpVp+alRqwUoIhJtqHuikKmNEqr0UgTepqECaMIfb4XX/ToJ77z997+m+95z3vfsX79Oj0zN42JlasQRxF6vR4El+ACGBkZAcCw0OnBOo9WsxW84B69Xh99DBCHVGd4hiwvRj7yxx95w2mnnHYKQgI5Qqd73Zdd37/h+ucMzlkMD41gZGTY//BLP/zB1OSh7cMjw/DOQioOzgUGvQGSOIaUHHlB3dyeeRhdoCxo2EDscXifhj4LZzUECwnZgQWnZHdbg/H/QWA3esKTnvKqv/v8F94lGF+z454d3ljNvn/t97CwMIe3v/33SaUUngXUiU3n4IfXX//vv/mG3/jQbbfdftUffvAP/4+P4axHPuK0l1z+kosAwDEGEUU4ZvMxaLYadN8EFrkoiukd997z7eXt3PJaXstreS2vhwW8hyenMJQ1sxuu+0k/iaPjBPcn3n/vLpx88slgcpF55Et27NWEnSTNrGZZKx+iIzqN2MKwAZyenIEHcMftt4MpgXUb1rHNG7YglnF3YaZz0/277r9jYX5+bmZyprtr5+47Duzbf+PhqcMLt9+5Fb/+a7928vj4+KX9QQ9laZFEMW0GGWU9Y0kQkC5JUm2tw979+5DIBDf88Me39rsLSJTE9PQsWkNt6NKg11mAlBGcJ9aPJHwMSiiUugxyOwbL7GL9iSfmxRuS+fIgyyNvK6EQbynpl0sBDvLFVeyt0SRzNlrDg0FGEs66UJHja3bYWkNnNJzjqlrFGlt7GBlnVAfp6ex7hnDOOaw3NXJTUsAa2sRSKinJK1mQYTJQyJZH5Qf2iGQEDwYnqeLGW4ter0sJ1bEC9wSyy7LEyMgIRhvDYExAcvJVRVGMLCswOrLieBHoD6WIcXqo/lZ2FIhDGBLQ3lIb07ntlltvp+OXBNQWFoL/OIAvziGiGMbSxtZp8uhqrevQM4TzU3cYV2nfWCR5l/ZJV1/zn+LRpQztz+rQDeeWYek99J8zvPXdVUeg+zowixh+Xn9vYwyFTXlbezNzm1NIFTx0YMfzbIDuwgLASDqbJBGiJEEjbRCqYkBpS6zfvOGUVavXrAcooK5C3q76XkzUoWLeeVIRKLH4vAjHW6Un79t/4D4PDudIgp80EjSiJga9Afplt/7whRAUNBXYcFfVmwDgkkNFClpb2NJASKrjMo4sA1wweLA6vIoxBhVHNJhyoT+ZCXjuoKQiSbCUwTtfwDuPOE7RbDUxN7cApWJ28WMuOkYphbnZOYyOjcJ6CpsCGMnKhYLxZIOw2qCRNmBKjfnZuWLQ7S0kcYSipB5uAlLExFvv4JgjptYjAOfQpRw6dulesPAhid45A6USeAeUxtKQJoRbSSlBIQfUnd5oNBAlETwTEJK6hcdWrsC+vbu3fvITf/bFP/rQH3+YeVDCMmPU0131e3tGIFFFNMQzFkoKkuMj9EAz4I2/+Zsv/+a3vnXNddddd/Xw0DAOHjoYuoIlWu02smyAwSAjFlVF9P2YR7fXARcSK8dXwhpDlgkVY//ePbjowgue+pQnPfE5NKBzNbhhDzEKopovB2sspFToZ30kjdaugwcPXgsAjbSBubk5Ujp48uxmWYFISaon0mWoXzJBAeAJ6HpHPxtAPmdtNLQpQ1CSgnMeRhuyv7j/ORQvY0w8+7LLfv1Lf3/Fe1pxtGp+agFXXfVN9s///A381pveiNe9/jUEdkPwHl/0LBQf/ujHP/ehD/3hn87NTO/6/3scp5/+iCdv3nzMpoX5Lvbu3429+w/g4oseDSE47t62DaeeQr7hv/u7L377xhtvunF5O7e8ltfyWl7L62EB7/07d+G5z3v64Jprv3t486ZNl73sV3917SmnnVIzSn5JL0wl8WQg4FXJiiu5qNaa2DQpAdAGd3pqCjffeiukF0ibLZO206lWszn7z1+78sjuPXvu2H9g93ULCwu3duY7h+7eui0/5vgt/uCBA0hkjCiJcOxxW0Yve8FzTwWAe+7d4SfGV7PRkeEaH9jwOxHA9tzcLJx3GGoPY82qCXS6/SN79+25o91ownmHhe48lIqghEQcJdRVmQ8IHDBKiR0MMiglsGLFGObm5lAWJaI4or5ZIcFcYOgYhf+AeWIOHWCtCR3DDDAhfMuR39B5SlBOVEqdvFyAcwZbJQcHUOS8gxQKTHBKRvbk9QUcrLb1ro/haPOndw6WeTBeBTKR3JE29QVJLz15Rq2zgX2PwARQFAUYSN5MKbQOEEDEFKX5FhqCK6RJDEgCj91eB+32EMA4PASKosDYSCvIuUkivXb12pNqwLgkmAwPUWpDX7ME8YZ1y8233n3Lzbfd02q2IDhDt9cNHtgIcRyhP+hRiJES8AwwmtJnq8AqIQX1xwJUJxUScsnTebRP96GCp2oJJWMPL2v+WaD3ganKD3ytn4WoWW1DXYKcAyONyv25WM8lJfl5qzTm0pR0bQfPdqPZgrcaxjgIJRfZzcDC6kJj5cRKlIXGjh3b8YLLXnDK6GhbGQsw5+A9A5cCDA6l0cFTyUN1DoeU8VHnzNeJVUC3081/8uOfbhVcotGksKEiL6C5ATiDZFTh1el0AQFwwVAWJOvnoJAyGYBiURTg4HVfLxN0XqqUbZKML/odrLM0RPKgFF4uUepyMdk5J0l0HCk4xmGdRWe+C2c08kE33b97z8qVz51AUZIvljPAWxoqVI00nANgHCpJAAAHD+7HEx7/xNG777xrdV7kaDSakFLSwKHICTRr8iNXVclRFAPOwjILMBF82ZUigNLNuRShN9hCCBrmkEfdQToRwLKjpHYZocwzJLHC6OgI9u/bjyiOAAB/+vGPff6pT3/apRdffPFTSl0Sw8yXVMxxD8ZFfQGLiGN2bh7tdgvOOBhdIm40EMfxyne+611vf/Yzn7Wt1x3sbbZSyDTGyqFx6MIg6w+o6ilJwMFQGoMs68E7oDnUQJKk4JzCubLBAFk+GH/1q1/ziiiKEqstHEK43xLFSm2hDz+fOOPQpcHhA/ux9a47sn/4yte+/N3vf/d74xMrYaxHszmEQg+gQr+usRrWajRaDfJ0c6oy8o4yDYQSEF6G5GYRapIiMM1hjQY85T5wBkRxFBK1f/GXYEI+6xnP/o2//cynf7+VRBOz8wNs274Ve3btwytf+Wt44hOfAimS8BxcfNDt2bNn+4c+/OE/++xnPneFtWX3/+9xtMbHRj//6c881QuHue4MpGQ4/fST0Wq1YKzB8ccfjyhSuH/nztn3vOe9/7QwPze/vJ1bXstreS2v5fWwgHfN+Ep855tX+xNPO3ndn//lnz9q1apVVYkunKfOQ2IYaMPFQ52HeIgahiOTkzh44BBWrx0/9J3vfn/vVVd/r2gmUeviSy6M1q/bMP0vX/2HGw4fPPjTTre3p9Pt7c5LPbtq1QS0LjE3PYNBvwNnLNauWQfBPfbv3Y9Iqc3HH3v8qRbAcVuOZc1GE6EqlLyrHrQhhIPTFhOrJhAltKE7dP8kvnftD+68b+fOHWvWbwATwKGDhyiEJFIwISQpjRNIpaAN1e4ISR64hc4CrDEQwXfLuQibZgZ4B+ttqGgKSbCcQ3EFzzwBX0+gg0KKaCOqyxJFkQGOJHjeklTPBZBYox/G6hAQCkta3OwhsHqLXkIGMFcDI6ooqgCHRVkSOAcjL52QnAJtEECiC92qMqpDxay38AWx0VRFFAHgIVmVwGOz0YRSCgvz82iYJvq9DvrdHiYmVqHX72Hzxk3HPP7SS2l64kI/bDU8eRi8iNAjTNJq+pNtd23bJoToCSExyHKUZYmhoTa0LkG1oVS/VBYlBJeQXAHh2gBf7OKVQhJ77gihcMaDx5ACch4IditQKYSovbcPArNL//uhfv8AeXbNkj4QBf+sAKzab7oIIit2mIcKJgJNFDhmnYXzDtqZkCILWOiQuM6pCxkUAOSMJym4oJofSrl2mJ+bQ3u0jQsuPO8YOgYTUqod8kGBJEnRiBuL8ns8oEk5KEGW2g0OHTm0ozT5DikEirzAyvEVmJvroNPtQAYQV+oSxhlwJojBdbb+zpxxqg8LFVqec3BBnmRnXWC+KdKpei+ccxjjoEtN6gfBYZ2HlAB3LNzXxM4Zp2EcJxApSLkx0+3grLPPGT373HPXdTtdKBWDyQjOW6g4Ql6UVFXFBXzoZKbBk8NrXv3r6HZ76aq1K59ywnHHfXPHfffd32hwRFGENE1IfQDAmDL4ri0iJlCE4QxnDExxOGshBUcUpTDawITPlVXam3COpSBpNeMCUSTBOUOZD2CsQV4MEBcqyJs5JlavxuThw1O/87u/88HvXnPNI1qt9hpStahwrhfF/H5JgroQAv3uAEISABXhOfTExz/+sX/whx949e+/413vXrV6NfI8R54VdXCZjBQlHhclDTucRWt8CHmW4cCB/RgeGcbEypXYvXsnXnL55S95yYte9HgAmJqdwsrxibrPlYGhqn6vq9WCdD7L+7hr21a0R4fv/NEN1/+TtWUh5DBmZ+cwMjSEwXyBVkOGQQHJkfvdHjwDkjihwDBPCe9aawgmA7NMYWlcpJBShgDGUA3FAOscfNUR/Qu8okbSftvv/+6b3v17734LY2zkrru2w8FjdnYOv/Xbb8KmLZvq69t5DxG6qL/+9Su/8frXvebth48c3v5Xn/rUf8mxXHjuOY99wWUvOBcANm/YjN17d2P/gcPYuG4T+r1eUDIA2+7aerMx+Y+Wt3LLa3ktr+W1vH4m4GWcIS/1yBMf/6RLVq1atQoASl1gZnoWY+PjiLgK7AULXBKtA7v3ozvoYd/+A5idnp2PknjHVVddvXX33p0HnDUHmJIdMB5NHR6knPHMuOvvObj/wG0HD+wrhIrQarZhyxL79u7G5KFDKIzFBeefQ5K03gCOAVPTh/GMZz7rEatXrZ7oLCwgUjGkkCGMB6HLl1I56ReqzqlWMSj9tru2/Xh+fnZhbGwFXKGRxHHdd0n9ttTj2ektoJE00Gq2MRgMUOog8WOcwLT3EKg2WA4yUmBQEEKhKDJ4byElbZQAT6Ai0G/OeHinISPy8DLGAO6hraadGxFVwaMI6ox1FOoluCCfZgD2CHUwQhBQNdYtgcGLKdVVawxjjJhdxkKYWOCGhagTSr0FYpXQBtmUiCIV/LsBNHoGazziRFJYy4BSgKMm9fF655HGCcbHVsCUFkmSYNfu+3HOOeecefzxWzbRIZE/9kHA8CGWD5v9at2/c9f9U1NTaDUbYIxqiiiR2qDfH6DRaMAzB1MYeMED0CF/oAt9wlIqAn/BG1ptlF2pjzqWxQ5o1IyhELIeYDx0WfDDoHf/c3zdQ/3dA5nium5raUgcqw3QnLMw/GDEXHkbWEEbKpgMpBJgnPz1IpKwxkEXJZSipN7hkWHMLyyEHmOPodFh5NMFskG2qgKzXFTS8GrIE8KNwGtWEQhpukEFAAA+BE199R+/dvvu3XsmkyhBWWj0+wOUuoDgDN5Rx7XmFlJRT64xJqQpy1rabCv/LQB4CxdAZiUMQNWxHKqlvPP1sKkKLHPWw4buWyEJrDrn4Eug1RqC5BJlqZGEarNNx2xa94gzHrGp1+lhdEUUZMWA5BxKCXDBYIyDt5SM7TkNR1QcYYi38enPfOYpn/vrv37iq1/zmvuTNIEJzLIOwNYGsOScQ1mU4fgRBhg0zPN1VgJZJrj0td+WewokI7+2AxOA9Qa2RMgeEGAcGGQZmo0WyrJEkgisWrMOP7nhJz/604997LPvfc9736uUqn3OlcpisUGa/mx4qI2syMAYQxIlsNbDOItYSbz+9b/x0n/6ylf/5Z5t229K0wYW5jtoNBPqE5cCUkhwXqDZbKHTmUM2yGGtxcjIEDjjmJ+fw7p160581zvf9SoAYmZ2DlGcQgQ5cyWhrYc+qFRIqGUQp55yavmP//SVf9l1386to6OjpATwHr1el55vms5vo9GA1gZFWYS+YIssG0AIRZLnPIPzlLyslILiVDvlQyhjxSx77+G0w5L49F/I1UiaQ699/Rve+ba3/N5vttqNxvTkNL785S/hoksuwmMf91i0Wy16nhrqhg4Db/fXn/3cF17/+te93Vgz+V91LEPtdvSpT//V8wG05hc68MagLEqMDI0AAAaDAYaH2wCA71/7g2tnZmbnlrdyy2t5La/ltbx+JuDtDvpDq9atOntkfOz8QwcOY2RFG1obJGmKOFoEj928i/t33O+bacNm/cJ/81++pX90w4/z2dmZOxnDNy38ddkgn1m7fnWTMWXiKO52Op3ezvvvXbj//p1m9ZpVUCpFVmhEDjg0fxBr1q/C/FwfzVYLJ2/ciDhqYGp6mtgXITE2NoqzH3X22VwKJHGCOI5hK/9lCHeqeGYW5JxgHsZa6FzjyOHDh++8844fKZWgLHP0+xmSmGSwWhsURYGyLGuPYX8wgOSSJMneQaqk7pJkYLDWwBhNCcrWkIzOZLDhz6yxMIZqErynfkbmgtzUWXjjKVgqVH3UuMo7cKHAvIdlDjxsXDknlkmH1NkKA5HM0dUdnb4OTqE0VQ9LEtiqN9ksoifnqFKJodrok/9VKaobIoBLdUYi+AGFFHDewDmDzkIGKSWajSYajQZyXaLVbsF5i36/D6VilHmOMi+wZfPGSypoa7mvsP0S2HY0pVpXVoVBwfzcPDy4nZ6ZuktKHhgrDSEFioKqkZx3yIuCWLBI0XXhHUnNa+BMcmSjTQC7BIrhKVW8Dq8K58YH9peSsclrWjGoi7vsnxPk/jx/91BAt/qlCoQRJBumxGlfJ9R678C4JH+rr3pIw2dmQpVNTDVX9H0IvBd5hqSRot1sIstydOY7EIIjTVP0swGssSiybGhsxeh6AGQZCMF0LCR7McYoTTmwgZwJFEWOLM8wNDRELJp3VTUqbr35lp/ossDKlSuRZzm6nR7AyR+ZZRmEkiRPBaO09KDAMN7UMN9qWzOPdEIWe5M5QtpysARU4Nbb4DNEqC2SCKm7gmTdAJigdN6834d1wNDwMNJGFD4Xd6y2emRkfAWkJJk4B0dpS0roZRLz3T5aSYKYR0tCnyw6WQ9jahSjo2OPB/BpzgUyXYDBIYoUjDYhFdgtXiLBZ+ychQ2pxtZaDLJB8DH7uk/aG0qmFuAQXEJJRoM0CxjjICOBZrOJwSDDIBugKDRaQw04Z9FqNjCxajU+9KGPfvbiiy86+3GXPuEZWmtEkQKWqkkeMKcSQqA36IMzgUgqeM/g4ZAm6eZXvebVr3zjb7zhllUTEy5SEkVOCdzGGhRZAecd5mZmICXHyOgQet0BrHGIEokDBw7gPe99zytOPuWk0+dnZzF1ZArHH3dc6OoNSo7qWMLPAQrrA3rdPu67fxdu+NGPv/eu3//9LydpCqUi2LKAVCJUsNFzUko672VZkBWCC2hrKYMgNAHQ85eTIiPcWy4MvarhkxQUEuiMwy8y3GVMRu9/93ve/p4PvOstcws9tW/vIdxww09w7qMehYvOv4DArvfQpYGUHFwI5GU5/ZEPf/jTf/SBP/yL/0qwCwAnn3zi+U9/8lMf11/IcOjQIUxNT2Hz5s3YuH49PICVEysRSYVdu3bv+fq//Ot3Pvaxjy3v5JbX8lpey2t5/WzA22o21uzbfWDN7j27iiMzB8pvXX2rv+Sxl8oTthxbbr3r7oP33LN9109/+tN79+zftfeWG28ZbNy4obnl2ONGBt1B1B5pL6xet+q2fXv2XJ8X+XSStP32HfcgGwzgncfw6CjWrV+LPCtxcP9BmrZzjoXSYdWaCczPd9DvZ1izZhUEl5hbWMDGTRsxM30Ec1PTgGcbTzr+hHNpM43a41olclaJzTTxZyAigGGQZWCco1N0b7hr2903Dw0Po9vvU6iVMZifWwAEAdIojsn/Zh0EU5CRhLUMvlwMGTKlIel07RMkWbcUHNYALiTAghM4hiNPr3cOXAlwL2Cch7YmSOHIR8tCqig8yfRsCFFyrgxBYDwEw1A1EJYkU/vAanHOye9HVFrAJDxInT2M8RVKDv5qkoB6xiFCIiyYR38woE2l5GGDScx2ksSwxoIzAsdSKKQppQDPz88jbTQQNSI4S5LhNI6w0F3AyIrhsWdf9txHh/07JUB7VgP3So5Y9QQHbEfEZUBIUijcve3u3Vd/5+o7GmmzZmwV41BhwOAMJUkLRf5iUxpkeV6nggMItTM+hPLwurfYWgKONTvIFocn3vklEvPFA2RVzQ0IlNRfcxQj+3OywD8D+C4mOFMY2dJ+4NpnWQVquSpBnH7PWfiMPQUqOWMQRzHJ9rUJfdIS1mj0+oNQw+OhIFDkWfBYZjj19FOPv/jRFx9Hbz2MKtjiRt97DyboXFSlUkLKGiAAJLFmAJyxHePsTQBgSo0oilAWJZSkfmetDZz1KMqM5MJKQYqI2GtryX5gfei2VnVnMgGuihJFYNps7eHlAhRuBk4+YSXBPEeW5zXLyqUKNocIHBzGlRj0B3Wn8MknnXpauz3EJaMqLCUVvAWKUpMaIzCfSgpYRxeBFGRJyAeZx9AoGx9fubnRbI847+aVFACCp5+RvUJ4hzwraiBbBaxZS4nV1X1oQ8gcsezV+fZgnCPPMwgpKBTPGaQpWTW88zBGQwgGbXI0myvhLVlGWo0WFOMH/+xPP/4XF198yVlRFK011oa6oyXsafjFeQq0a6UsWDokBXBpB6k4fv2Vv/biq6666kfX//C6K4ZabUwdmaG+4JA4HScRolYL3W4H4AzNZhN5nmN2fhrnXvSox7/5zW9+CQDce++9/tjjjmdCCZRlWYfN1RVdnK7xMs8RxRFUFMM6fehvv/C5vyl0sbs9OopskMNYCyEiOKvBOSjx2xoIJmDMoncaAcgLEYaZ4RqXQsG6MOgUKqh9LKoeIm8D2GX+F3MDoFL+5je/+bfe84H3vAmAGh0ewt/+zd/AOYffedtbASB0eDPq+2YMc7Nz977mta9921e/+pUr3/Pud/8Xg2/Wetfv//5LR8dXrBn0cxyzeQs2bNwILiQGRYE8z9ButQAAf//FL1256/57b17exi2vh1pRFKknPfkpEwf27+3deuttC8tnZHktr19ywNvvZ5lS8c6pw9Of+OmPb177kY/+ycKVV35rhjE/vWfXnkPG2ak9O3cvDA8P20arKffv2x8dPHhEGq2F906njbS7d89+7bzDmjWrUOQlikxTKby22LVzL8q8hIoUmo0G8rzA0HALzUaC3bv2IY5jDLVHkKQJ7rv/fkxPTmFi5QoUpcUjzzzrvEc+4swztC5JggssSbZloY+T+jOVoMojY0mKPDc/r7/1b//2b9NTh6fOOvtc9HtdHNh/IIT0MHAmAEFMqGASYAaOAXmWEeMZRXXnJBOy9hJyUbGirJZ2ssAAV8yoB1sE5oxAKwHY4PVjPni+yNtLPkSSWLPak0kAuiKyAHeUf9N7B+dYHZbCGK+rTipkQsylA5cC3tLrS6ngXBn8wSRFFQIAI9kjPIOS1AdqjEVZlHV6aRI3EDcoBTWOYjTbTQq18RSYpST1GO/dfwCPecJjHnnxhRefjMCcijCxWAosq80reZAXveIIG+vWUBPd3sKt01OTewFiONM0QRRF6Pf6MEaHgYUFYwxFVoILYqtdkHFb6wC36D8Eo65Uv6gIPgqNEkMenIdL/KfVufe1hJdY6AelLP+c+96HVHUfBS4WUUbFPlcduKzq3636rL2FcArM83DNkK8zThSsszCFRYkSeV4AoXqHMYYkScEY0O10IFUEcImiKBBFMVorx3H++RecMtymMmvGWeh3rSrIUL8+Ed50XEIwNNtN8kZbX8tRv3TFl7fu2LFj+8TKVcgHOaRScM4iyw2KsgwBQByNZoosy8K97uvOasEFJRgrBXhP6eiOk9/c2vrkCc5gXAhZEqxmBT2jkKc8K4JygpKgrXfQpqSBgBBhcKagpEKns4ANxx7DLrjgwuNnJ2exZvUE+qWGdPT5NBopjLHkhRckixZVYnWwAgy3RxkArF23urViZLi578D++WZrqK7Tcd7B68A4M44oVuRRZq72+NYZCqAKJM/IbgCP8HyxFELGBSIVwzpSOBSmRKk11SQpAmvCcsxMzSBSMZqtJsqiQBKnuOmm267+8pe/9JlfffmvvUdW5kwsgkHng1SdMTgAkVIwZsnzhzOUpUYcqdHffsNvveqqK6+6NpbxwfFVK6g72QPaWAghkKYJOr0OpqZmsGpiAiPJEA4dPoAX/8pLnt9utTZqq3HMcceydnuIBmlSEovvQ9+tC1YFHzrKGRDHUl//4x99dXZu7poNmzaj1+khK3JEkUIaN2ANBd1xIZGXOTzzaLVb8M4jzwcQUlGYWJ4FKTcLYWcanHNEKqYKLF51FpBygPmQZ/ELSvGecc6ZL3zdG1/7JgDp3MwCPvD+9+Os88/Cy17y0nqYZjUNbhljmJ6a2fr85z7/jf9+3Q/+/b/6WFpD7RW/9ea3/s6b3/LmlwNA0qAAvAQKYDRgWpjvYGx4BEcOH9n7pSu+9OX3vPddy7u45XXU2rRlU3Lk4OETXvrSlzz3b//2755y3fXXXicZ/6DxrrN8dpbX8volBrxam8l169cNvvPtq2/5wt99oZRSlt+96mqfFRlWrVoLzgVWjK8ICbBROTV1ZDA9NYlG2qBO1bQJGSnEaYTJySnqSQXgrEOeZ3DOI202wDmIeWMMURRhemoWcRphdGwUzjvMdxawcuU4Wq0WikGOqckZnHT8yeeMjo8n3X4GyQNo5BymDGnJLCSjCto8DrI+hlrDsMag2+vs23r31huTtIkD+/ZCSIkoViiKEmPjo8izHGVZUDpxSOl0WpO8mQnyArLQuwsgTVJkRU5MWmlgYOGLAASkIPbJejhYMHAIRSDYOywJV6HuW+p9JIQTRTGF7uiS/jwAGy44eJBgOiEqepuSnVkVTkMdUIsWNh4Y70WwxpgI3rcg6zUEGowOmzfGQ7WNB+X+OCgmCaQyTt5X56nz1JaIoOB9YIFBx9vr9KEigV6vizSOodIYF1zw6Es4WAMPJD0dCJRVw4sa0QXcy2iTxThH1s/x3e9//4aTTjnZ3HLjrUjSBIJT4BHR2xQuFoewLWMtnDWwRte1Id6TLHTxfLBaNuqXVuDWybRLaNYlSHYp8K2qtvzDSZt/PhL3wX+wlCV+UDAWq7uRq+PgjBGj6AHjbH0/MMHgLX0Da0z9noUSsKEuC9YFb7dHHEUYHhmlPmWrIaVC1s9w1hlnnAjQ4IMzTm03FQsffvOgzmJGKgKqilp8E3lW3D89OzMfRwplXhLwVgpZnqHINYSQkEogjhMY62CshrcO1jpwTkoGzhkE58TKhhc1uqyvI2J9QV3g4NDGwMLXjDnnAswzcO/hOQ3LOKNqMB5C4oy1IRyLg5UMLtdjqUpWt1ttGOPJXyzIK73QG6AoSoyMDEMyBjAB64mFjaQCE3R8QIrOQrfodXqF4FFIaKfxT3VPMsFCXRJ1wHL4UDMmKMCrLAFGLJs1AJwLIXr0/qWUEELBhGGOEAK61KFTnHzXcRTDaUqGVlKimbaRM45+v4dcS7z7Xe/5C87kJS972csfr0saUjoXpMMVFRrmcGDA5JFppM0UoyPDsNbUvvtHX/joxz76woue9eObbvj0xo0bMDMzizLXGF85Dm00ZuemkSYNOOtw/HHH447bb8cxx2w54WlPe+aTSAFg0J1bQLvZhookvCeQXQ0NPfOwJYHnpJngEx//5ODAkQM3fumLX/6nuemZzpr1a9BstJBnOZyzWOjMUegUI8uHlFQjZ6wOAVj0HKMwK0E+f059zlT1pcHDzxvyrnti+YMlwgZf6y/aetRFFz3tG1/7p3dsXLdh3fSRafzZn30Mm4/bjBde9ivh2aEp+TulerMd27f99PLLX/7mG2+68b88JIox1vjwxz/6jt9909veBEA468NAcVFaHymFTZs2wgP4ow9/6Iv33rv9J8tbuOVVLcXkpt97x9tfdP311z95757dp27ZtGklALZyZM0jnvrUp/Y3blj36b37DhxePlPLa3n9kgLeLM/yffv251YXaDTT0EuaYHTFKLS28J5jkOXodLpQM/MwTmPjhk3o9Dq0u+YMTADOekQqQWHI4ymFQJ4VaDYbKIsiMCINqrxxDp1uF0wwxHGEXrcLbS0mVq2EsQ6HJw9jZLTdOuW0k88J3Ca0tZCePHpSiTqpkwU2yxoD7hgmj0yi0Wpgz559OxY6nV3Dw23MTS9gfNU44oQ206Up0B900Wg0aWMuWABRDElCHb/W2BAWFTyenOKM4iiBC2CBQq0E+egCi0uhUwheQkaSt4r1ATFWjTiGbDTR7XZRFhrekUSOcdr0isD6lkVJabSMzoIPzJYLx8WDzBSB8eOofICs9gZTCrEl72KQSCIcH4cM/Z48BPtQ3YpzHsZqjI6OwnkLrRnSRowsy9Dr90lO7C3m5mfRag0hjmPqIjYluGAYHhpuXnzxoy8EAGNpc4/FvC3yQxuLQhdIkoTAVI17GbIiR5qm2Ll715ErvvQP/9HvD5A2UgAeRVGAApJIQm10idzY8C9R1zEtrc0QXAQGfbHD9iiwyo4Gbf4otjXIhpd8vYf/T4O3HgRkfw7K96iXfFDhqA8DkojC1nQZ7tUg/+YCDh7GWMBoCClRllQ9BUnXM+f01UWRk1dda1hj0Gw0wAVHr9dHkqQYardw8HCXDQ0Pn1C/Ng8e8sX5RPAFY7ET2DPoELzUTJLFbmUAnfnO9NTUEQwPjQZZOXmjlVSIowhaa+RFjtKUxF7CBVlySF0OJ1OXhsAHGJwzxHgGaT+Fdpnw7y04CHRbRzaEKn0eIZHamQDmHGC8g1AkbTbWAPBotVrYuH7TydMzM5u7/S64kIgbEYyzEEKBMTp3SkiqsylKCMWC5Js+G7pugZnp6clu1p2L0wZarSZ0USDPS/KM+1CTBdSBY/S+w3MBDJILmKoKJ3Rte+fBEM6lMZQW7OhcIMj3EZLIWWAtvSfbQmlL9Ac9rFm9CkeO0GBhdnpu9qc33vDV57/g+Y8f9DI0mg1IpSCYJEtCCM9j4f9WjI1S6rV30GYx3VgphQ+8932vefkrf/XarN/fXgwy8CiCNgZlXmBhvgPOJVavWQWjC8zMzOB5lz3vmZs2bDh2bnYe/awHxkUdQMgeMPRhjJ4fURiY7Nm/e+HI4amfWmu2SikwMzsLKRMkSYJudwEOFlLKxWezRegwLsNzm8F4A2187SGnfm8XhjY0DFmqujB2sUqurkf6BVpnnnve8/7xii+9b+O6DafPz3bwF3/5SWzYvAmvfc1riU0tCiglwgCb4Xvf+c73f+ONb3j79h33/rf03b7i11/1oje+4Y2vNloLoRQNoMN0pfKtW+MhFce2e7bd/4XPf+Er/hftpC+v/7Z11plnX/rTm3/67jPPOutSAFi/Zj3tC7XFps3HpJ/97Gfeee9996497rgTfv+++3ZMLZ+x5bW8fvkWn+/OI9d9DPIMDBy61CiNRqkN8ixDtzuP+dk5DLVaiGKJNFbQxpLssdkIm2iOufl5GG8wPDyMJI0x31tAqYlBzfMc3jPkWQ7rLOYX5tFsNjE2tgJwlABtjcGeXXuhSw0uBLYcf8KpjzznUWdo6xBHEu1mM0jbAvgU9Guv10Ov28EgyzDXWcCdW29HI4px+62337jj7u2dvCgQJRH6vS6KPAO8RW+hCwaObq+LsihgShM2z5TimRcZmKgkyRKMCxS6hLWWGCDBwTiHVBGUiuqNkJAScZzUNTnce0gparAqeQQhFMpSo8jzAL6ItRYheAdL/GkIvrfFdhr6nTGG/GZK1MEt1D9KS3CS7jnnYYypK22spZoXXZZgPvg8LbEVPARaMUEDjDiJ0e100VnokkTSOsSRgnUaKqZKCBVSs6UQiGOSSB48dBjc+ZNPOf7E0wHAMQcTUq7ZUubSAzo3yPs5Bn0KSbKG3q8QApwBc/Ozu6Ymj9zT7S7QeWRAnEbgoVvXhwRmJQUkFwH4iJqVcd4GRpbXrGklS15krZaAXY8HVw/5o5lXko0/dPzy/9nuy9evX58fdvTrMsFqE7vgPJyLJRLrEIrmLHmtOaOUY+9RVxVV3lruASUiNJtNShQOTtWFhQUwALosMTMzg3VrV61at3bNsUAAi+FYeThkzlhdVcOw+PtYSLTTlKS9S87T9MzkPMDQaDaQlRlyXcBqUw/C6Pp1sFZTYBwTkFIRQGEugNCgYvAO1msaboSBFzG4PMjYLawzlG7MXFA8EPj1jCTYkktwMHDPoSLq/GbCI0liMACDQQZtHd7w2791yQtfeNmGRpqgKAeeg4ZSnHEIJiAYx6F9B/GNf/4Gdu/eDSVVAGQOxtgatF1//Q3bjbE2jmN6ZnAJWVd+KSglAuBm0NrAA4iTlFhnb+B5GK5ZQGsDYw08c2GI5RAnCeIkJktFLb1nSOIEUkpkWY5+L4OKiHlmwRc+OTmFsiiRFRmsc7jxJzd/f3524Ybx8XF4BkRSwegS3c4CKVi8oxRqBkRpDCbJWBIpBRFAZZ4VOO+S88989Wte9ea52W5rzfr1aLfb6PV64JLjhBNPxtnnnIVGkuCaa65BHMfHvPZVr7tcSo69B/dhYtUqbNq8qX4vrvKuh+FKWZQodQFwoNPt4rWvft2gETfvmJmZ6aiYQqeKoo+i7CNJE7TbQxBcUCo7XP385pwqugR5OWrptQihbELQvcZqX4kPsu6QA+BRqxh+kZDXk57x9Mu/e/XVHzvx+ONPn5mewQf+4AP+tEecgVe96tXw8NBlgShS4FxCCol/vOKKr//KC174hv8usHvWWWePf+RDf/SaqampIeP8UQO1alTMgnIEAL79b/925fz87J3L27flBQBbthx/+rU/uPZPzzzrrEstHA3/LDVYeHioVGLN+vXqksde+vJnP/eZT14+Y8tref2SAt522oApQiCHI12pYgJlVoArAcE94jhGpBJkgwwMAmVRoshLeNDmUmuDJElQFjkmDx5BmRsMNYbBQRu/9vAIkiTG8PAwOBdQMoJnHkaXmJ2ZRpomGB4ZxorxMXTm57Bn516sWbXmsRs3bhiXgsMFxiUvCwp4WkKbcSYxP9+DMRZRpLBp42b0utngmmu+d93KFSsxMjyMFSvGEKkEgkl4AGXwYvmwAbKeaiV4YHI5E0s2rBKScZiiRJqkIZEzdJk6D12nyfogWwacJZZFKurkZaEOSEgRUnItiiIPrBTqug0hOLyjqiDnHKQUtT/MA4tMTeWHrSpEsCgRdjWgQ82kUWK0hfOWJODMg0cMPKRhI/gbRQCA1pgQgOsDg+agy4LSmZstSCEhpETSSOi9M448yxBFMUpT4gUveO7pmzduWK0Dq1gdm7bUDwuQvNZ5j14/g/fktTXGwBpb57/svH/XNmNdt9lqQijy5lrjarksYwj+XAHBFSkLuAyy8OAN9tSJTCFjgpjswPTWPbFB7s0YfjZz+0CPrscDKOKHx7MP/mMfvh178Pf29NmR5zgw42EjmOcFirwAQ9UDGoK4QhiXCBeUMRYIAw8bzgfxnj74Zz2yLEeaUB0V+RsFwCz6vS4aSXPFujXr11fHypivc7IILAF5oWswslSJzRirvdjVmu/M7+aCwcPCaUvgOFXw1lFac5CJShlB8CBjtfSanDMIQdemjBTgq95dgAsBpVS49onJU0LVjC5nHHESE8MXPnPnKbjIegfBJYy1KEsDXRiUWqPZbEJKhaQRYeXE6FkAkKQNGKdZnmeIhIBzwEKnDyEl7t15H6659ntot6kqhbp9aQhVyXx379l9Bw2JyH9eFDnJdV1QiwgR0t4FmmkbRmuURUaqTk/3J0A1bEpGBH5d8HKDwWoK3mMc4JJSva3zKMsSRZEjViqANw8dnt86L7Aw34UJw6x169fi5pvvuPedv/vODwPYzxzH4YOHveICUZLWbDHqKijKTyBRgYU3FkrJOjr/8pf/6gtPPuW05w/6PbQbDbTbQ4iTBuJYIY4UktCX/opX/NqLL3nMRWdaeIyNjWHQ6cMZRwCH+VoxA0/s7MJCB4lKMTszj3/48j+ZK674hzuuvPLKH0qpwIVCpBQU55BcQckIaZzCWgfBOExBtXGNNA3p3jbkHXAIHu4pzuuBGjHobFGsQUmJkIzCwagHmf3CZFadcdppZ3/i43/y1hWjI5s6c11893tX45nPfga77PmXQYgK8MvQZw186q8+8w8v/7VXv2VmYe6e/65j2rh5w6pWq7Vp9fgEkpgUFI4CLeqfQ7rQMKXBvffdd8dnPvc3X17eui2vsK9I3vTW3/6N4eGhM7Uu4U0YXDFGieJcAMYjPD7j8ZHxs5bP2vJaXr+kgNcBSOIUggt0FhaAMAEvTUE1PM7COYvZ+WlIJeEZR38wQL8/wEJnAaUpoa1Gq9Wkqh0GLMwtwBpiHwZZhpHhESzM99DtdiEjCc8YlFIAY1gxNoZmsw0P4ODBg9i3dy/aw62hZz/nWU+KlMT9O3di8vAU8iLHzNxsCKih7YcxFvMLXURxAiUlvGFYtWoN9u7fu2vr1q13O2eQZQWKskS/30OpNZI4rTfoSso6vZY8rhyRipCmaajkAcoyR5YP4JxFGTpbtSGpseQCIvS+SqnggrS6qr+wNvhcw8acg1GPYUiErS2sPFQqYTG12Icf+pV0d6ksN00bBGqsBcDrB3wVcAMGOGfBwBBFMURIheaChwoRQtC0YbYoipKk25KHzSxV+EglICSxzyqKIaMInHP0+gMUeYFIEaM9yDLISGCQ9ZEmMQRnI9pSAm8FOgBAVLLKAPaGRtpYsXIEjVYKFSvEiVqUGwP4wQ9+eIfRBTjjKAuNoigpXTdIO40xtX9b65JY3SA9FEKiMrVWHs+KNceDcOsi+K3lyv8bAVT/Kbp92K/zD4+rfR2dBTgsBrZVPsKaFga0MzDeEkCoBgEVUKg8iIxRZyvncNYjy7N6Q8CDBzRtphgeHkWkIqwcHx8fWzG6oobzYTBQvXaVTEuu9KNZ8mrAUf1+253b7tl65x13OeswP9+BiuLAQDMY7+CcDWysD5Vb5AGuaoloPkG+aWcNBJck1Q7PAOMsJa0HibfnnpTLQlFCsKWwORbk7ZwRQy4Eee2dtYiiCK1WC5xRGnA+yFD0stF2q3UsAVWBdqtd9Y8C3mNoqAXvgampSaxevRLr1q8Jf8VqzzEA7Nh+//wtt916FxcKQpDX2DsatEmlKKHdOGJfGVCWBdKkiWazBVdViDHqEibVAo5KOWecPP1l8PnaIG8WnIV7gmwMIqJ0aCZ4AJMUvBXFCs56zM7NgQuGL1zxhW+8/Xfe/heNRmLaw23W6XYRKUVDwuqadXRPxUohlhKDLMfUzFyQHHPM93pYs2Zi5NN/9cnfHG62z+10OhgbG4azLihHOsjyAitXrT7u8stffBnCdT4xMYG0kYJLFgLkQthfuPZLU4JzjrgZQcUS46tWljfffttNkzOH9kSRomorAJ1eF8bRs216ZgZlWQQ/uIA2hirKgnSescpGosAYecSrZ4k2ZvGaZ7wOByyNpiFi1T39C2DhbaTNVY94xFm/ds/WHY/cvWsPvvj3X8C2u7fjwvMvDNdtyEEIH/FnPvPXX3nLm3/n98tisPu/87hGhoaKrbffuT2KYoTSAHBO97YPvdMqVjDeZK//jTd+avvdd9+0vHVbXgBwwfkXPOk1r3rV8+j6JVuYIIEdZVSEjBXnSCF06qmnDS+fteW1vH5JAW9v0Ee310GWDRBFxPZ1+z0oGUMwCnkxRkOXBazV8I76Z+MoQjNtgnMOo0sMBgNQIb0MnjxKYm0NNbGwMAdI8kFFUUSTZEb1QYXR2LV7F+CAdevWoV8UOOXEUy+9+KLHPOrQwWncdcddfuXKFZBxhDUTa6iGJBy80QalLjCxagytoRbWrF8NYwyu+cH3fwrOjkhJTEKR57X0ryiKkMgqoaIYzjlYrUP/okE2yCggJvQzSs4RxxH1dXoHz8PG31pkRYYoISDoA0j1jkAV+WA9IpmAMQEhVA2uKjmtQ6jJMCZ0AUvwkEgKxpekvjJibwJbaQNorlhKv0RSK5WiZNwQqkRpxQS6qaaVEYB25INUURQYQgajNax1SNIUkVLEXhtHLLeSgGPodbskE5IS2SAD4BHFClxyZFmOJIqx0FsYy/Kc9rCWVAMu9BHX/VLwARSIuo+4AkpxFME776ZnJm/jMqJKFc4RRRFURJUw8K6WizvmYRECveRiVy4PvSqVn9c5YpjZohvvQezs0r85KjyK4T/17LKfO7iG1V/N8IDXCIymD9dQ1b7sH3ioAdRWXaHe0mbVBnCDAEWl5IijFNZaCA5IIQFPQTsUbFRSz7MHOvMLJKVtJjj2+OO3tIeGhHeVrDQcW8XeMiCJIkhGmdWs8sdWrDkjpnNuag5//slPXnXP9h3b0jTF0HAbzjtkWY4iL0g9YGiYQX7y8BkxUpZUHbRVBZfRBOC4FPU96ayt2fDSlHCGvOi8VmtY5FkWanFiYrNDgJH3FowzaFOiNEXwenqUtsAZZ5xxznBraHOeF+h2BmCeQ0iFwhhwyRFHCr2FeWSDPlatXE3srl8MOJuZnQMA3HzzTfft2LHjzpGRYeRZGaR2QHehCxFSxb0DTGFQ5AW0LRE3FaQK6b9Btk3ntVJvBMkn/ab29FYSYM6CoiT42bXWIZeAIYkSxCqmvICaRRUwpUW71UCzOYyPffKTn//mt751bbPZhHF0jhkQ0t7DUK1WlAAjI20MjbSQlyViqdBuJACA0884/ewLz7v4dyYPzm6en1tAnEhESQRjSU79spde/iuPetTZZ2aDAs7R9RnFMYxzWOh24R0Nqqyj3ALjNIaGqJZm+/3348wzHulXDI/sJvYbsNpgMBgEabun4CrrSAGiJGSkIDmHtiWM1bBLwudcALDV++NVWHUYSnJBKeWeecqtCJ3Pi0/g/3fXeedfOPZHf/yRd/79FV98xYqxFex9734HVqwcxXve9z5EkUI2GCDPCnjGIJXAD6697rtvf+d735fnnV3/3ce29Y57pv7u7/7+dgYKtuz2ejDa0MAULHQoA1dd9e1vf//aa/9pedu2vMJeYeQDf/iBVyZxMlEUJVmdQv4Bq/JdQJkkRChA/+C67y/XWC2v5fXLCnhNWcI7CymJpYzjhNhHzmoWJklTRFGMOEkBzmBtDg+DUpd1mq8uC3DPUBYFojiCdRa9QQ/eWCzMzyNJUmR5jumpGQwGfSzMzyFNI7RH2nBw0LbE+PhKWFvi9DNOPX9kqN1OGgnOOecc5hiBUjh3FDiKkwibN62vmbI4irB/397i3h333ZANMm2sQTYoUOQ58qKAcxbWO1hrKBDKeWJOAnskJW22nLWwVsM6AxErpM02pIqRJA244J+NoiQETQHeWmhdUIiMYIAA0kYCxkGsGgSco5AmMBe6cC3gHCTjtMlmi6yYcy54o4mhZcHfiMBEEnMcWJ+QW2WD7NtZT/JCUNqx0fTnJFnlQSLNaubIGVeDLC454B1MqVEWBYQQi5UwWqM/6CFtNIgtkxzWe6hEIUkUFIsghQBTqvnKV77qjKHmELQ1EJzR5puHPtnKl+f8okyxBqUVlchw38777tpx7z33qOBz9ACM0bClJvZKSKRpCs4EBGOIIgWlosXvU39fYhAr3y3nPDBVi0zoQwLcpXQrexjM+qAv/fm3vWzpN3lQ3a+vWelKUsmOAsqLDL13FOpSDafoqziqsCfGyMtLlTUUDuWZD8nrlFDMRABE1mHVygnAMaxZu+ZkgMHUIUksbCJYLZMvtQ6fJ2A19f4yzmrGV4Te28Ggd/P8/Nyg0WwhjlIw70k1EPzvSimkaUJ1T54YaMbJp+3CfWKtCVJ9Yii9p2FQHKm6qowHpg6M7kljDVD1t4ZTbYwJvbwh3Cn4351zyAYZOGOIY6pDefzjn/DYE086eQQADZFCxZKSEvDA9nvuwd69e5EkCueeczYO7D2CI4enIMPXHdi3vwrjOlgWWTdNUzAeasBA50CXGoUu4bwJlgcFLjgW5hYwNztHScHVdezJ0e/pQq5j2iqWkXMByRV1xxoX5P/03IiiJNwTxFxSRRWHKR1cCbQabUhJDOnGTeshOJv81F/+5acBDMZXrABYqIUTYZTiySJRCfOd90jjBEkcoT/o1df05NQk3v3Bd1/2rg/8/ssmp4+gPxggHxSYnZ/D8PjYaW9521teWJYaW+/cirLMIRiDccHaAAbGifUvC40sK8AhoKIIn/jEX+CbV14Jo01+xx2376vZfl1i/YZ1iKMY2hSIUgmpFJqtJpI0oXMSrCjee0jJ4WyQZhsLJQWSNA0J+8Gq4ln9PKm8u/CU4qxUVIeE/b+8jj3uhNe96U1v+E0AjZNOOh5DIyNYv2Ejtt1zD/bu3gfjPLgSUFLg9ju2/uQ5z3vWW+dmDm77v3FsN93y04Wx8fHrAMyVukSUxCi0hjEORlvEicKevXt3vvnNb/kTp4v55W3b8gKApz/l6Y+99DGPezpACd5SCdoleQ/BaN+BqsqMAdd+/7vXf/GLX/rW8plbXsvrlxTwCiERJw04BnT7ffT6A/J/aYN+L4P1Do1mA845DAY51dqEpNg6tCaEtHCIEMTiEMcRrNFY6MzBeYd8QMm7kZJot1toNBsYGxnDoJfDlA5xnGBqcgppEovjTzp2i3YWjUaMdevXgHNJMkbOFytsnIdni+DGOY+8LOE49t977/ZbrKV6kPmFBbRbLQyPtGmDFiSvnnlkgwHJphhVIBhrQ7qpXJRWGqDb6UIXJUToAjbe1OEnLtSDRCqmxFYpoaKI5G7WwFtd+2CXAqqqW5VemlMgjHWIwmbaG2IObEgRlVICnEMoRXJP74K3zYeqo7Bx9ybIoisURcfHOKcqDmNgrYaxJawzJG/kEjAA88R6aWMAxoPsnBJgWfAkG2MgGEOapGg2mpiZmkGZl4hVhO58BxMrJ07cvOmYswiEk6SIpIFUJSMQlMaMWEnUVTu0sa2SVP/m81+4cvu2ew5XYWV5nmPQ69MmVXFkeYFBVtCAwDh461DqEkYTMKoCquqTXtUJBQ/nUfD0IX25OFp57H/G1/1vM7w/e1EYl6/F3/WR+sUDqQK2KOiMrsWqdsdZV6fyElA0sMbQJt+ZuvopzzLo4Df13iNNGmg0m9BG842bjjmhelfWUeBYqUt0u/26mqiKEnLewzIHJhbTaj2o/khJUe66f+feKtV8fnYOcZySD50BIlJ13Y2QikCuNyg1DaWqWhJqj1msKHGO1BrWUsiZ85Q0TIw0SFXBOTj3YJLCm8AYJSkLUfuftbEwRocu10YtlT/5xNOHN6zffOb+vQfABSCURCxJfswAOGPRbrYwOjIMgGPlyglEsUQjJbDsrcOGDRuhlML8zGxn8ZJhKAsdatJiCCGgJHnijbVwzNUAXoZnAcK9ThJpku9brQMr6Rf95yHZms6Bq3MBqF5Nk4LDEPNP2QUG2moUZYlOZwFalyjLEgsL81gxvgLf/va3r7riiiu+Scw1qQJ40K37KkiILR3IAHk+QLfTqdmVVruNNWtX4ZWvfOkr1q5Z88i5+TmkrRj79+/Fr7zwec9dt3rtGcwzTKxcDSVkrSKIVIShNjG5LKhsojAYKbIBJo8cwkteeDm8xJ6puek97fYwHPModUnKAQBKKBqAwJHyYUnKehSRD9paStdXKiR/e8B7W3veGQOkDPJ7beAqIB46qblYUlT8/+Bau2aNeMlLX3r5O97xe29AiDs/fGQSL3rp5TjvvHMxeWQSSSNBu9VErBQmp4/seMmLX/C2+bnZO/5vHuf3//271/zRh/74j+64/Y6bJVgxNzsFJoEoloDHwh988AN/unvXrh8vb9mWV7We9ZznPFcIrrz1oVbMHRX4aB2FHQZrSeevP/e3fz09ObVn+cwtr+X1Swp4eehulYISR21IQ3XewrgSQnJ0O12AU6dpf9CDUhGSJEUcR8ET6BDFMUZGx6CkQn/QR14UxCpFCYRSkBEDF5SCzDhDlmusXDmBoaE2Nmxch3YzxR13bcXoxMSKc847e0s36yLLS1jnkMQReRFL8uPZkLJrjEG31wMYgzYGBw8ewF13b7399ttu2zY8PATOBdrNBuI0hRQSuiypIkkE766U1LcZOjgB8s9R+I2CVAplUdTlo1k2QBRH1H/pLBg8sn4G5wEuJQpN3b4+bKKqyh0K3RGIogiMSSiVQHCFikEzztSbVx+YTx/CharNPf37mDZaztfp2BwkaSUfMoEiFSkopUJQzxJPaOhslUKSnxc+sPiOakBkVF8YUkkgpLQqoajuxVpYY6GNRZ4VkII2omVJbA+8xQXnnXfKxg0b11cMHwOQFxmyPIPWFkWpwQAYQyyTD+DNWQetNaQS2LHjvvnP/83ffjttNFFojTzPoaREe3gIcRKTRFFQ3zNHFWwSNvt1mBkLDN6i97ViYfzPEzb18Lj25/ra/7Ptb2BwGQPjWEySxuJGvQIA1ZdzxuHBYawNAVbBnyoFVKQgJIe2GsZZRHGM1hAFK/X7fcRphDLPoUuNNE2RpDFuu+M2lGWRbNmyuTKkhuMA8qJAt9cNklmGSKkwzPHk3w9VPJyhVg54wQa5NgdWrFhBPdhljkJT4J02BYwpQF578mYzXnWdEkPJGIOMKAG4UkXQtSXDZ+9CwJsEFyFoqE7kpnvHaQPmGWKZ0FAghG4JoTDUbCFNGrDWkL8WHrNzC+BcDZ991qM2bjpmA5x3KMr8qE+Jc46x0XH0+wP0un3EaQzHHCUVe+r4HRkeAgCMjY9OMggM+n16zghiMel5SMFfQsg6gMq7wPBXxdQ8pCOz8GuoI6pk7fB0rYAD1pkQJEc1QlxQbzcLm0BeJ3w7yEhCxhRUpo2GNpQOXZRF6DJmg4989COfW+gsHFSSoROSmhkLXuhKaWBRT0CSJMWq1WthtMH07AyiKEJnoYc1q9ZuedrTnvGrutTMaIMtmzcf/4ZXv/4FALDQ7WFs5QqoiBLsjbFggkHbECYoFruzAeDa/7gOz7vsBTjhhC3427/5++/MznT2qzghtYCUmJudJ/WCkihzGgyUeYGy1BCSwxgHKRWiOCJgHtQtVGFliP32oHqiwKCzJV5fJng9yCvLkBvA/99keE899bQL3va2t/726aeevLbX6/rvfv/7aDSbuPD8ixCpGJc+9jFYtWoC/cEABw7uufvNb33Tu++6a9t1/7eP8/r/+OH8O9/+jj959Wte85yLL7z41778hX/6pgB38Fh4w+t/86Of+9zffGl5u7a8qrVuw4YTL3nsxRdXPxe5CAGOYARwGYKKSKEz3/Xvfte7Pn311d/55+Uzt7yW1y/vksaVgPVgXoX9P6UEe88QxSpM6hk4FzC6hBIKWX9AslhPrI1SEt47TE9PwVpKSo3jmEIDGEezlaLMNUbHRiGVQpblxAA7i/7g/2PvvOM0K8vzfz3ltLdNL7uzs71QloWlN1GkIyCKDRR7EmNvMYmJ0SSa8ktUsCtEghQFFKyAIFV6B2EX2F229+nzllOe8vvjfs6ZWYoVJclnjp+V3SlvOe197vu67u/VQLPRRORiQfZbvmLFIQcevizLDIZ3DyEMJILAh2UC3HPKrnELkUwjjlNUysDY6Ch27tylHnr44Qc4Yw0YsjzrjKPeqBORtlxGkrSgTAYufFKmXedfK+UiRYi+aVyUUE6ATdMUxhIMybpZWqMs/CCkrNo0c5mOtKAqlcuwWqOZthBFIaBJZRFCEi3UGJTLZVKNnSKVpQkBWXwPiUqK3N4soxzjcrlCc2bWQoLmEL3Qg8oUNEi9FoIsjbCWrI3GQjtgQz6fCJtbMz0qmZ0yqJWCBYOxCtoCvgyRJRpSCvjSnyLLWkaqh6GYDp1lCCKyYkZBOJgv/SgyxiIMQ+RALuYyLjkn2zdnHODGRQfR64qT1nCWZRsEFxCCIU0MuB8WVtJUZC67lKzcbNoMLIMrmJjcIyM2JzFrbfZQe59TmT4rN5fh13//uUWvfQGt9/m90dNt0Pnrtc7GWqjeKMaSC2UydzdYlscSOUq4Jvt2lmTgjI65J6lgpILGzbrGKcrVEsIgQKVScTnUwODgXFirgzTJylP7lCzo1XIFtUr1OfHFUnBI4btCjGZ8Jycnba2txnbtGtq4a/fQkNIaExMT8ISHSqWM+mQdggskcQIhPAR+hCxNCuWXWSrsPU9CeJRJbY2rqwzlwVqWP5+BkIJM3ELAkx4y16ARTAKCRgpyGzMpkgaZSt01KSCED8EZ0cBDiXIl6CuV/F4AaNQb5HZwRzZTGkZZTEyO4cmnVqGrqwNSEJE9cDA6ZQwCT2JseNxeddUPnghDj+zkxiL0A5pHVmQJNtZCwEIKyty1QjollpoNxtGk83OWOTt+/v7z+fw8eze3wRtjkMYpFWqehNIxpDuPPM9H6AdoxQ0a3ZB0XeuMosrGsjFUy1U89uhjN573pfO+/g9//6nPeJ4nsiyDF3jF8wJkc57Sr6mhoK3FZH0ClXIZlbYKjLb4+Ec/+qZNm9c/eMPPr7v0b//6k68emD17v1tuuxXz5y603d3tTGsa3KD5appT1srCkwxKGQSBB601fvLjn6JW7dRbN2/58bU/+cllzBrTmBxz9xjaB1maQSly0GhHfUvSFjlqGEMcx5g+IpLECbTRU9eXMZQ9bSwkl/A8z0WdUdYxWVEYYPJZwf95Cm9/b1/XO971jrcceMDKQwBgw+bNrLe/D/PmDqLVSqBVilIpAhcSN99862P/8OlPvf/hBx/85Uv5mp9avWoLgMt7enrvWbZi2dV33nnX+Ncv+MbN1tqJmeXazJZvb3/3W0/ca9myBXmzz04PiAeRvZXK4Ps+7r3/7hs++7nPfd5aG/8pXttfvPvP3l+vN0s33nTjTbC2OTo2+kymVDJz1Ga2me0lLni1UUAGKKvh+T5BYzTNkErhuxm0BFIKBL5fKBKeJDuYDAKyEioCm5TLZTDO0WjUEQS0oDJGw5cBpOQIfR/1yQa6u9sgPeqyZ2mGRqMFHSeY2zvwClhUBSeCKOfSzVu6GUJhoTODuJVB+h66ukI0my0YbTE4MJCse3rN0624ha7uHmQqQ73Vcjc/jVpbDWEYoNVqQmUpLQxBdmjP98EcpVJwD57wkaZEoJacQ3hEOG7WG454nBc1BllGikAQBDDWIo0zJK0Y0sUIpVkKAUfDFURUJUq0gB/5aLUSWENZlsooBKUItsUQpwmMpqxSKcn6yWlJ6SJmDJh29lxjCjUwc6oDF0SiVcaAmSlrdJamsIyDMYE4iUlNdIVhKYqgDNmim40WJPNguYKyFNMUBCGEFGir1TA6PIpaezv65vUjjZuYaNRRq9W6p9d4FoBwZFMLAe4oqsJllxhtnYBuifwc+KhUqyOzZvVPrHriccyaPYfgQsag0ajDGioqjDGUZeyK16niFg7SkxbqusnhzC7GibkC8QUL2F9X1Npfr88C7AV+hL3AV6cpuEXuTw5+mgJwUeHpYGfWFNFFFm7m2xU42ugCkMYYoI2lhhGAuNmCNT6k5yHwOXRmUaqVAEMFRabqqNZqEFLySntbmD+GoSehIs3qwtpvXNYr/Yx1zmRHD+dgnDPcdPMvVm3eummiFEUw0KjWanS/cJEv0vPBbG4bpVxgLomunJNacxu+c/q6Y5fnZNNseJaSZZ4LKuzhZt5pv5ECDqsJ2gU3825IBVQOzFaulNBsxVA6w74r9lnueaKrPjkJnRl4khf7lAHwfAEuOFY/9RT6+/rR0dVRzNpSJJSLI9qwbufqJ554jDGGzo52qMxgYnISYRQiTRsI/YCysl1zQzs7rYGh2dG8oHJUZsEkwAjiBEdEJpqxJWeJUxo5404R1gTE0hmE4EQrNRQv1Gy0kGYZpC8BA1JWWYZyFCHLUjCPIyqVcd4Xz/v2YYccevDJJ53yapWqfGqXMpHdGf/smfQoDDCrbzac8Ix6EmPW7P7+j33sIx/8/pXfHzjogENeH2cZFi1ahP7ePpZHLAW+KDLCcziXKfLMgd27duPvPvlJ/c0LL7jmzLNe8y+RX3q8HJZguUGz2aR7a5a5sQaCKBqlC9s8XSsCQpBLhwsCE6apcjR5VrgapBTFsSE6s6Pou3OOC06nmTHPk8390m/v/9D73/w3n/ibtwDANdf8EJZznHrqKc79Y9FsKhrfAZo33njTF17qYnf6tnv3rmcAPHPm6WfgP/7t32ZWajNbsXmeF1703xcdT/dxXfBO7LSP2Jy8PzkxMfIf//75r1lrd72Yr2Fw3lw+PjpuJybG7coDV77pL9/znrNvuukXP9+yefPIlVd+/z8H5swJnn76aWWgW7/85e3XzRkc+Kstm7dumjl6M9vM9hIWvL6MkKkMnuDQOi9mPRitkMYUV1OOaOZOeh6UmwNtJQodHR2QQmB4aJhifJhFo1Wn2TNGkUSVSglWW0RhgJHhEZoBFgyBLzE2OgY/9NDb043Nm7dgcHDOgtececbxtHDjaGuvQudFAEwR9zE8MoIszdDX30s2VqYRVSLoiWxkstFcB8ZyWAwylSH0Q2iuMDY6Bs45oiCCtTEyNwcHTgWltRY6bRaqiIVxGY4KhhnoOCWiKqPFYeD7zlbKIKQHMAFfCAif5pjL5QpkypGlqcsVpPlKYyzKlRLSNIO2pD9mWQzOOJI0RaqUW5RxKlSlD+6IuhZAFJUQlgKMT0wgjWMEYQTpbK6+JOImm5ZhKLgobJNSCGip4Xm+K4y1WxzTSjVTCkopeJ6ELwP4foBW3IIxCh3t7UgzjTTJoJQClwJaWwwNDQNGoa+rB/PnLRhImiksNMJSBKMNNHSRSWqnF42ugOGcIUkSTExMoH9WH376s59tXLNm7WRnVw/iVhNZSgqUlB5URjAiKaSz2nJwS00EJpzwwjkV2TZXc1HYnadbhDE9d/dFWa8+W8X9Df9+1ree+9Km5neLLFDGwC0vZj2tdkqvgxpBMFhGRY7gEkYptOIYUngIw5CKYp2R3dyRaXcM7Ua5XKXiQCtwZkOPyRJcM0gIssJaADo1BCdjU7O12lgIcCRpDMkZPOmjWqH5y8ceeWyVFNJW26oYGx9Dvd4gmrQm4rC2RGaGpggp66K34NwXlMHNCoiXEKR+Gzdvr60psndbcQwLwA8CpHFMc+tagTOy8FOhqGlmVghIZ/tPWgnSJMPI8DiCKIQfBTjiqCMPGpg3yEd2DcEPI1SqVWgDMG7BJVmEZ82ahTNOOwP1egPjo3UwDsRZjFYrxuDAHADA+MTEtiRJN6dJBun50DpBmibgDEiSFOVyCZ7nodFsutnivPALXR63BueisDLnlm0hqBgrMFbaOPWb7pWZ1pTHKyW0UjCMyOqcS6g0o1gqJlAKI1jOHMmUEdjPGJSrVfhhgCzLMD4xuu0TH/vY51cecMDyvr5Zi1SmICTdH6c3mopT2TUFJhp1MAt0dwWIggBZprDXsn0O+tY3L1yyYNGicjkqgXdzWCaQaQNPMqJmM+5AUI68rA2E4KhPjOP2O29Pnlmz4fb77r33fM7Fw0TmTtDd243JyXGYTMPzAxfBljeOBKQUFGcGynf2OAMXRIDX2kU9uWxzzhgMI6YDMQJoBj4viO3UnEhxVf9PK3dPPu2MU6//6Y8/DaDcbDZgoXHgygMQeh6SJAGzDOUymTj+9V//9b++/e1vX/Wl8z8/syKa2f7Hb3vtte/BJ59yyqEAitGfvNENxsCsLQjrF/7XhT+98aYbb36xX8PmjZsMAOy99z6n3XDjjd8dnDOAc8899+QkSbL29o7AWoulS5dKANW9lu79hv1WrFixYMH8V69fv+HpmSM4s81sL83GM6VgjUaSEpCKMUCrjGxyzMWYMIZmi3J3rQEVTm4hNTE5Cc/zaJ7PgY44pLP1ZSiVywjDCGPjYxifmACXArVaFVbTwnlyfAKlqIRZfb046OCDD9hv/+X71uuT4DwXtmxh7SOLr0FnVxd6Z/eBSw6lM4wMj2Hn1h246+57nt66ZcvG3t4+1Jt11BsNtLe1Q3g0z8iceEZzYgqeoBlEbTTiOIaFoQWolJCegB+GYJxTQ0D6kNIDE6xYYHMuae5Uegj8AIFHURyd3R2o1qpoa6uhUqkhiiooVyqoVtvQ3tmNIIwQhBS90YoThG6eOFUJXNwmCRIa8DzKCTbGujgYTrEucQvglOdrjSVYkzaQgmaPwzAorIFRGBZE2iRNC5ox50SklZKiOqw1SFUKz5PgXCBJYiQpzVhaYxBEIYTH0d3VDa3oQ4UAQykyreEH4fy58+fuF5SoQEeRycoxnUvMWK6UUTHFOOD5Hnp6SRzetnnLek8K9HR3IYlTJHGMen0SrVYTxhB8SWkNxp3S6M4PAM5mzxEEQfGecyWVFYWT3VOtfdFWq+x5tVz7fE8yDa6xR9E9LeaUChzAOkWailVdFMGUU2lczJd0hYIrRBicU4MX9nPlbLJJEiPNMnR2d8HAoq1Wg+9JDMyeBd/30NXRPdjT3d0GTLMAM2I/+54sChzuFFaPc3BBMWHKqYy5cr123drHkyxGo9EC4xKJyqC1gpR8yrI87fzIbdE0h0XHUnDh4rZEcRwpl5eEXGY5XRtw+dOMLLvlcsWNKAhIwafivBgV5b70EbdaAGfw/AAMHGEQohyWogXzBxdJzjG0awj1yXqRO0y5xtRI0anC8PbdYIajraOCSrWESqWKjo4OcA5AAdu27dg2WW9MRqUIWmk06g3AAipV4GCI48SpzxZaZwAj9ZVzKqgEly6+ixcz6QbWuReEc5GgaOYwRvuVzidG+09KgpTFMZJWCwBchJeAthpplhUZ39ZaN75BrpGhXTuxz1574VdPrP7lxz/8kX8DkEmPMsN1pqCdmmodyThvYmkAvZ1dCPzAgcIoz7u9rZ2/7e1vbW/r7PQyRVnfbozWHb+pqyavKbmjXj/0wKPqpz/62dq777rzlocfefiO9vZ2SF8iVSl2bN8Oay3CUhlRKaJ7tIPu5TnbSpGzgJoFlLGrNc0vo3AOANKX8D3p7pE0yzs9Ni3/L71nd2241/g/YVu2ZNnAmaef/j4AnQDwxKpVmDN3EPPnzkeSUEyTcSz1W2/55S//6dP//OX65GhzZjk0s/1v2E4//fQTuju7+jOlwBiHdg4u7pxe2tj8fpLc8Itbb7PW1v8Yr2PugrkHXPmDK38yOGcgFyL89vaOsjEW2kFIs5TuLYcfcsRef/u3f/O5maM3s81sL2HBK9ydIQh8ROXIkSoJdqIzN8fEDEUwOFJy6AfwpYfGZB1aKQiPQB60QGFOmTCQXGJo9xBaSQvlShmM0cxesxVjbHIczWYdWZpi3bq12LR5M9qrbXs3G61yo9HcozLIbXtwxarwOIyi+B2tFMZGxjDZqOO22+/coJQaq5ZL0EoRcTjVRf5vuVKGcDEUgefDQDswk1/kVTLBYIWBhkGrWUdjchywjCzQktNsnbYFDbVcqoBzUk7C0AMDofG9QGJ4ZBijY6OwnBZTHIwyfmHRaibwPdqf1gKBT3OuME6JYRxWMwRhCdVq1bkzuYNTMbRaCQCGqFwCwBC6KJXxiTGnjFmXlxzAagPBXGatoRntVquZ45IpusiSXVIICS/wkWVUGCtFoBfGOYaHh5GmCZRWUFqhs6sDvheAaWqSnHDq8Uccf+IJewMAlxxJmjl6MC8il/YAO+WxrQZuoU9d2VartbHZbCBJUoSlCFxSdifNXCt40ofnkxqpFOVpFrOzjEErjWajgSzLaKY1zz7OC7Fcgnp2xu7vkLmL59V27POouXmQDHu+KvgFN+H2GWeM1FiWF3pUEOakYSKFT2UuW5M7osnOygVBlLRSxWvigmjqI8PDaDVbEJ4PpQwmJ+pYvepJHHzYwQf09feU8qZIDlLKN5oLt1O0dDfvXilF8AOf1H/BMTExuWvNmjWPC8YhOUdHRzuqtQrlQHMGzmie1fN9mk3XxsVvOTVT0/2HC+4KQnKXFJmwlrKXwYBMp27MwCJtJTBaoz45SUqwtY7WSedXligkaYpGswEhPHi+Dz/0YGEQRgHmDMzq3rltW8/w8G4Mzp2D3p5uaJ3HW1G2MSP11o1ZaDSaTYyOTiDwPDTrtL7KMoW777x73UR9rFmuVGGNpf3NOYHqHOVd6QzCowaRUQpKZYhbcQFby6O1jKVREw7mLM10nnDBHFWYzgH6OUFwPbcaZGBglqLJ8pEMLjm0KwgJAO3I7zBo1hvYvX03OBeYmJjAwMBc/PwXN3z35huvvRoAslhTQS0J/JQX3fm5KABopZE0WkhbBIxK4sRZ1Tkq5ZIjvpOlOKdJO4utU1EdaE/Tebfy4AP4scce5/X09O8c2rkLaZygrbOGaq1KaqyhUYZ6vY5mq4k4iaEMFfJpkhW2fJnn68LNfrvzwrr3kGXkcmGusYBirh6OKD8tnos6LtNi1V7ajTEWnX7Gme98z1/82XHU3Erw8MMPwRcEJPR9D75Pbo8kVtv+9d/+40tx2lwzsxSa2f43bEFQGjzppJNOLNRduNz6Yk3hyPRguOr7Vz+iMn3fH+u1HHzIwb377bO8AOpZl0lOKWUUoccZg8pc0XvY4cvb2tq6Z47izDazvTSbZCDbG+OisN5qo2GSxIGpOExqKL5GSqhU0YwagCCMaIGlgSxJnaqkwTgtwgOfOu1KK6RZRlmIfoCuzk6kKkUYhQiCEFs3bUVHV1vHsr322nfr9m1sr732gVFkH4yTBNIX8LgHwQWiiFQJLg10ZmAMMGv2LBhlUS2V4snJCVstV6CVhvSJnBz6EamQipQGw2gxrY0FBxGppSdoljHVSLKUigKPsmW1okUTFaccYRgBjHJ/4ySFH9B7IgqrBsDh+RLaWGSpRRCUMD4+iiAI3YKWQFBCUtxSvmDyZYAwCiGEQDOOARc7pK2F9D14QkLpDEmWwA8DGGPRbDahtUIQViGERKvVgtYa5ZJXzF9TprLL/mW5RVAgzRL3YWGhNCm2HBTdwjlHFIUYGx+HH5RQKZeQZQlKpRKajSaUyTAxwQpCa5KlOP64E08BwPKsy0LbLJTeZy/Opv7CnLKTJEnrmbVrnwKAkdFRsneGATxPomWbYAzIMoNWvUlUVQBsWsHHSZJxRTafsq07y3axMGXA88qx04tR9puK019nX36+r/2an7d7eprzZgBVlS432LFxchp3AbayREbmzobPGSeXhSvMwDiYpPgtxgXaSx2IE7Letre1k0IcBQhCH7VaBXsv3etgUtvcrCyn124o7Nbl/dri5Ro4oi2j5ok1GtAWN/7ixie279ixxfNDKG2QxAkyR+YGAJ1lqKcJvMCHNdrRcBms4MjjtIwlaymz1mXK0vnCXaFrYGGUcu/VOqWbCO6MC0jPWfsNQxD6sMaQRd4V/cpo6JhcDNWOKnYPDeOAA1cuPPLIYwYiP8STTz2N3r5+zJkzQBxqN7dsjca6DWuwa2IYJx5yArlbAulyfKm48EKJoeHhXwHkyhifGEMQ+vB8aig1mk3kEVOw5JyhGWxRqJLcXa/5sWY8n0Wle3DqxhymFEbtzg1qtZDizajIc3wG45RqKEPOF24RNxNITzqyu4GFchmzwNbN29HT14s0Fo0vnvfVC484+thjozDqJTXfYmKyjkpUApOCCN2WZowZLLp6uqGMQpIkgAakD3iegFIZ0kwVEUSWWRf55FgNnLsxkCn3xq6hIT5n/uCI+aVZrY2CsQYqVmi24gJalqUZZZ87SzOzxBCAR+eRMQaZyyKGm81lnMNoXRDHCYTHXGwRXafUcyFlP7+X5tF81vzP+DDv6OiRp55y+tvefu5b3gMgWP3E4/j5Ddfjda9/IwbnzAVgaSQh8ACg8d73vv/zP//5j78/swya2f63bG94w+tPefnLjz4UTlwx7r7htIIigxcAvnnBBRtuuvH6jQAwe1Z/MG/BvMBa2McfeyI49NBDejw/KFttZE9vL1Y/+cTY4II5o2tWr5lYterJ1vM998DAINu6dXOxGujr7tkPrvFqDZGi4ZrNDAQBZQyFM+fx1U+NaYbhmaM4s81sL1HBm2UKYRQU9q4oDKG5dDOPKGZOuQAyRcqtMQZhGKEUlVCvN6Ad5CqPbaAVu0KrGaPNRXNwIVAqhUiTDJOTk/B8H0krRbVaRittYe/+pQv2Wb7vfv0Ds9HV3UGzn8YiikI0mnVkOgUTAtpkKFdKzt4oEIQB4lYCy4Dl++8zZpnF+OQkuro7oZXG+HgdSZoi8D2oLHUZwxppmsLzPYoryhSk9FzBSn/nQkwt6K2FVhqlUgUsYo5uGiNNU0gp4Qc+6o0mMqUQlHyMjQ1T5AVnqLWVAZCFUvqesxRLGKtgjEAURaR86AxBFKBaq8LAIlEpSlGESrmC4bFRsnVKiVK5DM4nXJFANsUojBA3Y8oG5hyRHyIMQ8RxWiiC1uWc+pwjzVJYaxB6IQwsMpXlgThFtrA1QJJm8P0QaaYAtOB5HuI4AxhDpVKhghwG1bYqwlL/0v323/9wWoRTvJDniaks3OcpLPMPqOlzgM1mc8fuoaG1gR/Bl25eOlVoNikfmo4FFSzCk8hiAy5FAR/LCavWMFLwi8LavhAo+flE2d9Khf39t1yPtntKyns8v3WlZK5Mo1BU92RBuxgmwR0wyQCS4EQcNPvJPQHP82Fc0dhsNSE5RxiFqDcbqHXWUK3UELcSNNMU3X09A3m3vMh4ZVMFO9vj76ywfFpQVBHjVPA98vCjT8StOG5v70DcbMEoytvWikBy3JOwmQW33M3WesUsfZqmZHkWHEo5Bd+BhzgXU0Z1FyXDDMV4UdMun+uiWVYpSVHWWsPzJNJUQQiJMAjRaDYARoA+oyx0pjF3cP6yBQsW9AFAR3snwogKMu4aDzAA4wJttXaUqxVIF5sWBSEYZwh9ev9jIyOjTz715OOcc/ieB600lMsXFlKgVqnRe7M0kqAtFafGxTHl1w4XwtHVbdEUYGDkRjFTSijnDMyplZRLrGg/cQbtfsaAYssYrLPb0Yy/EBxBGJGDI00hPIFAUtNFSok0TTBrzgBuv/OuOy699JKr/uzP/vx9XFAGsx8Q28Fz9Hd6nRR1B8YgmECpXHKRVXnxOozRkXE0G00csP8KhCW/uB5yblsey7VxwyZcdvklqFQqj1955Q++ed999z3oByHSNMXkxCSMIUp+4PvQUsOXIQQXU9BBQYAxDkMuAhetRIA0DsklEqUp7k1w13si9wucks4Zgy7uksLNGk/FhnG89JbmlYetPPGqH1/1yZIMZgPAnXfchd1DwxicM5fmuLWC55MT6F/+5T8v+/ZF3zz/v779jZlV0Mz2v2Lrm93ffeONvzgbAFduJC4HXjJYWOaaWwD++78vMTt2bV186qtPec/f/90nSxdddOGsXz36uL9oySL5zDMbqrP65/QsnL+oo1Ip1RYsWBjVW+MqRRb7Mlz3la+e9/X3v+/Dz2kENZt7gpbnL1zwCrg1MsEkbeGmyRuWQnAwLjA0PNw474vnfaw+Nm5njuTMNrO9RAUvFaoCnNNCIIlpMea5xaO1QBSFNOdkDbhkMIbiXSYmRpGqzGXWBlBaI3NFJVm9DKJSALQsSmGEpJVASAFjDLq7u2BBZGJrEnS0VQ/s7uxaOnfOIC3YmC0W0mmSgimGiWYdEBbVStX5NhmyVgZPSmQqaV526XcfFIxTIZRk8DwBP6BCsdVowfNIofY8mlllnBQV6UuKFAlDpClZCSUX4L5EY7IBX/jo6eqCMhpZqjA5UYcXyCLn02rqMlptoAwV/76k+d5mfRK1tjbUamXU63VEUYhqqVxkFUsuwEohWrGFlBKTkxMQbuay1WqRUqMyiCB0c2i0vxnjyHSKLFNUmHAO4XJJ0ySFaBOYPWs2LICtWzchTWNEYTlHAbvMUpoDjaKSe2yn3jsLrGVAKYrQmKyDBZQVE/gSStECT3oSYZlmhfffb7/DFyxYsDCJU6g0gRQhLQzZ9CKPPYsPRaAlT0hyBgiBe+++f/32nbt2dnZ3goNDZRkSrcjiyty5wEARL9YQkEyrQr1lriKzToGcKs5+8+eMhXXq5QuIufY3P8KeP8heUBlmzwewmuaQttMkcKs18Ozok+KvHBYaShGRWAoJT0okaUK5rEqDWQYGCZOmsNzCjygOimy+9DsMFkHoQxmFalu1SgovNVByYnAOqpr+Guw08Bd3UDbmaEOtVuvJLMvoevA9F1NFhac2CkwwgHFkKcVmUb4poDKK3mKaoneMMQV4jTsgmTIEbOJGgDNJXX03yyWkAJhFlir4zuqfpQmgBKwGAl8iCP2iGOvo7ECSpahWKigHIbi2CwAwYywG58+DlAxKpQA4BPegtIGKM7S39+Cww/rhhyGyjEBvkxOTiOMmonIZ9973wJpnNjyzvq3WRjnDhhgElDmdgkuy3mVpUtiX6f44BUUie7gsKNz5MWCg+43Ns5gNWb4BAlpxxp2KSVFVfiBgOYe03MHxEggHSiASvYS1GlmawPd8lMolNJsJGAd8R+sXUqC7ozP+5tcv+PKBBx60fPny/V4eBD50PmrAJIyBi//SLtZNkl2a5eME9OLnzhmAx3yYLgW/JKGhwC131ms3deB+dtfQbuzeMbHmpsduPv/OO395uZReCk2wg2azCSG5Yz5oeIEHGIskSYl87/tkB9eaLPLWQkgJ3yfrPbmP0qIA1pruw77vo9loEEuesYKiTe/NgjMBxqxb5BJw7aXcGBddP7v+uo+WZDDYqrewa3gE8xcuxvL99nNQLlfAM4ann167+j//89+/ZK3VM0ugme1/y3b4YYe9YsW+y19GPTxW8EDgGvp8mkOqs73KLvzq1w88+LBDDxodHUZbpR0HrjwYo6Njdv8DDmbcEtCwvbMdcRqjr38Wdu3eBWYw78AVB7YPzBpYs3X71kenP//o6K49Pv62bNzyCIDTCPjHC2dKvhXiD4BPfeofvnXfvXff1d3VEwwN756JKJrZZraXYONgdOFnaeYAJwKZSpGkCS0qmUWaxkgTop560ie1yFBxJ6WA9AWUVpTfC4MsUyiVy+ju6YI2pBzXJybRjGN0dnbB9wKkqYI2Bs1WC2FQEqecevoxB6xcGXiedPm9ABMMaRKjUq2grasNg3MHMG/OXJoh1BY7d21DphOMTYzhsV89fNOmzVvvBjwopRBFJQhO8SxpkiBJW8i0QpIlNO8nKZtTaw1f+jRbyxkq1Ro834fKFExm0dvbg66uToRhBJ1qBGGIUrmEKAxhrEWSJqg36vADH7VqDV2dHZg7ZxBpptBWa8f8+fNgodFqtaDSFBMT49iwaSPGJycxPLIbW7dtxu5dO1CJQipOwNCcrGNyfAzz589D6PtIkgSe76Faq6IZx2i0GhStlGpwRgCWqFwidc0BVEZGRwkGJSmCg3ECfNHiJ5+XtUUMVZamLoaZLIR+GEIwWuhLn6zXUViCNmQvbdYbmBidcJEvmbdk8aIDSmEoLICoVILwJMGkXJHLnqd+ZEzAE5LmX9zXn1n/zOpNG9e3JibG0Wo1MTnRQJKmFHfl5hkZtwCjMF/OGTKVFTb76VZfYGrudar+ZHsWjC8anRnPU+z+jg/Onl1NogAJGWMKxTV/d8a9L2qAIM8PglKqKOA555DcA3OWK89lMXu+j3KpDCkkmvUGJut1GGvR1dGF9hpFEhE8ibuXQvvRPus9sdyJ7b5cbzQRJ/R5/vivHl8HWKRJgjTLMFmfcFnT9Np0pgCt6FgyiphI0pTOMQ5YqOK9GBhnrbZIVVbENWmtYUxG9xlL9w2izedwPa+AP3mehPQ5jGVoNppI0wTCo2zXZrOJHTt3orevR7785UcN7t49hEZzAtYm2L59G+r1JuI0g4IC4wT/ktJHfbIJBoYwDJApiuqpldsBAKuffuopLwh2DQwMYHxiHIwB0iNitCc9JHFKyrebu9Wajp141qLJuvlmA1vMkDqvHLizS4NZRGEEz/Op2HRKMOy0QhM0j6q0Iw7nmceOdKyNobxZnZFa70soQ4p0mmR4Zt0zUFmG9c9seuqd7/rzL4+OjYwAgBQ+Qj8qQHgAQ+ATARsO7ATjcnvZVHNp1kAPBgb6wfdoNNlilAMAWs0YaRLvqtaCix7+1a8u7emdlfb29qEU5WAq4azIDEmWwXNws0xR5KbRyl0/1kXn0v1IORo9zaDTFRWEAWQgoVSGLI3d7UKCcV4wAGhenZpIxlpYRn+0yV7SD/JPf/qf/vLUE088FgBkILFx02bss88+OOLII13DJ4PnBQAw8tnPffbfR0Z2PzGz/JnZ/rdsjLGBN73h7L8AILRzszyHPaksNqxbjx3bt+Hlxx7Llu+3gknhoRRU0ZhsoL29G709s9j8ufMwf9E8LFq6CF3dXejq6YQF0NvTi+7eHsxbsOjAz37uXz84a9bctl/3mn70ox/9YNeu7dTMdSNUG9ZvwMjoSPEz1/zgh/d98IMf+bsfXfOjfwKAmWJ3ZpvZXkKFF9ZA5TRXT0DZnPzqQXoSaZIQAIkLJGmGKBAuqoSBiYDUtjQB5wQ84uCwAoiTFEmcIEliRFEJBhphWILKNIQnEKcxTCvDxOQEMm0W7bvigCMAUu5ozcTRTFpY/eRqDA7MRU9fD1oNmtsMoxA6JRtbpVrBJZddvuWiiy++uFIt7ZBSYnJsEnEQwyqDarWCVJO1rVKpoT45Ds8p2NDKvdYY5VKFKLhKA5yhs7sbRhmkcQbONeIsgWYGXBMZMI7JKhdFASkr1qBcqcBojSRJMDk5gVargSRuAYzJtkq1s3/ZkvbFyxb2z5+/YO+VKw9cWZ+sd8bNeOcdt9+2+p577vvV8O4t2z2Pt5/x6tcccNThL1s5MHtW/L0fXHnL+rXrb9+ydfNEksYoRSFSATRbMVF5Zb7o1ZThGwYwhizbQ7uHiOQqfdi4BcvhYmDIapOprFggqyxFEJagkUJymlnTmUWrGdP+1gpxkkBlKdoq7YjjGAMDA2hva8e6Deu9BQsXLABoQZ/n7j5LrizqTfasOtECxSJ/3bo1DwNk3U0zBRkImNRlbGaZiyuxgCAbrE0NRG77dAUZy2FKLrqHPbsIZayI/XnWh+pzi+DpyuuvrWGfbyiY/bbV7dTjTxd9p9GOyafrfsAY2ByaUxTDblbIMiijwDjB5xiocZQlZFO1jhAc2wSZzjB79ixkSYZmvYV6o4kwCtsqZVJ4URwvNq2BMLXXps9k5xywMArg+x42btwwtG7dmm2e9AicBEvKq7MWSymgFYfVgBSkIsNaepv5vuAUMYGcPpznoMKCGQ4mPCo+XIdfZZnrsgswy2CZRbNRRxiFRayXkJLGIwwDVxrGZohKIaQnkKUJtu/c3Sa8cG6iUtz6819AMIaXHf1KtNU6kLlINk9SHvjd99yBzq4uzJs7C9ooQACjE6OolWsIEGDb1m1rhoeG0F5tp9ikVqsAJJGzxr1WPtWkYYwI1dpB54psaRBd2EUyu9PATGtIWCidwWhb5PIWigdnyDJF1yVzJg/GyPGidKEcZ0nilGGg2WyiVq0RiV1Tdm2ctDCcjUJyH8PDQ9c+/NjD159ywinnwBLELC928yZI3gixbi7X5pnOLs5I29wNwNxctC1Oce7mdp9ZvxGf/39ffHDd+qev6ujsiHt7erB58ybU2toQxy1MTIxDcAHPl7CModUkYJnkkhokjDlwHZHgOeMEPlO6KMCZi29LMwXLyZaoMoo+My6bnds8jihPXycYHhdEEVfOpfBSbEuX7XP01Vf98G0A+MjoEIy2OOZlh7vXbmCVhu+yuD/8oY99/TsX//fFM0ufme1/+lauRHJwzuzBUqmy4h/+/lNvP/vsNx1LTVbiVrBpU0BgDJZbVDvaIDlHW1tbkQnvBT7KVYrgag/aiIHg0gTIBENNNqMtJBcYmDOAd7zzrWevXff0IwC+/EKvb9OmzY+cfsZpf3vZd7/3rzu37cIFF37ri9+59JLvHXXEkfv09PT4O3fuSG+84YYb6/X61ssvu0zMHNGZbWZ7iQteYw24ZdTZVwqZSh10ysBkpCAGpQhSCNQnJ5ClKSnBQroYErKDcUlKsXAd9nqj7sjIVXjCg9YpqqUIrWYL/bP74HkC9fEGykEHlu+z8oj+vtnzWs0EgjFoDjBmsHP7TpSjCjw/QNxsIYrCAm5iNNDX1wcoA6vNmi1bNt88e9ZslEshFUaC8hatJUhNlmVQWYrQi+BJD34UotUaQRj4SBXRhJVSqNaqBJVJM2SGQFee9BFEITxJnby4GUN4AmEYoLurE2Njo9i2fTuGhjwYoxAnMXr7Z7cP9HbPK/nhge/70IeOPeqYYw6PStFAV1dHyFi+nKPt3e96l33owYeHr/v5z3dv2bTRO/vNb+5cvGRR9e477rbvfMfbT7fa/OAjH/3ofz6z4ZnhWrUGo+GiXSR8z4dycSd5bI3RGlortNU6EIYhdmzfUUS9MMaQJilsYh3ciSFLM0gXu5SkMVSSQgQcymiEUQmeL5GkLahYIQwi+GEAO8nBmUSpFMIXvLp0ybJFU4WbBWO2WFyz56vvipHMqR8YHhnacMMNv7jHd1FMzQbN7XIQDEkbWvRnWheQGuuSZvKZ8zyXNJ+BLLJ3qTosAFr5Qtey5ylw2QsIty9Y9LI/4iWaFwuWqgWX4MMZZVIbY4g+Cw7GBKmlLr5KMA6rLeK4VeSaWguEQYQso1gc64BoAeMYGhrGy489ZtHgwGD39Cp8SpizLzgGzQAkaYIkzuD7HsbGxsfrjca4sUCaknoopEDamKTHyOjxZECuBKsyWGOcCsnBmHE5r66gy+eamcsXNhrMFUh5Tqsf+oUFmFkGrQDJfTCQC4BzgngxCmt27gZ6R5VqDdu3bUdUKvUuWrJ47pxZs7F42VKkjQQ9vT2uO8ghhQ/OGB58/H5ccdUVeN9734exsUkEgaQcaFgITwIA1j/zzGZrFLIsRltHGyYnG0jTBKHnOYXewJMejW1kUwphljmoks3fMqmLQkrHUMjR5oB2RS8DQ5Y56yrRn+A04cIqzIVwhSaBmXw/AJAii2nf5HPxVgFh6INZIEs1GCxRocEQBhE6uzvBhWj98z/+638vW7LsZQvnLxxkrjCENfAkjYo0my2UyyV3njrYlzVFNBQMwCTN5U8RkXMIjEGrmWKi3swOP/Lop55++umhZr2BbUmKZqNVROfRJWEALmCVhoCA73tIspjukZ4/lVNsLCw3UIYAVZ4nCV6oNVnGlQZjxjl/KRkgb6gwm5+Te/LlrH6u6+FPufHQ7zv//PPfu3zF0sXjI+N46vHH0WoqvPLE4wEwaJNicrJuu7u72IbNzzxy9Y+uvuj8mbzdme1/4NbR0S4BzD308EMPPvtNbz7q5ltuP2jJooWLo3LUEwUlTrA+l7jAnqdXzBm6Ojv3+FQSghfZ7dMb2pzxInYs5zIIQSM5KtMIQi867LDDjv91BS8A/PQnP/uPVx577A0To5PJ02uefOL//fu/AcBzyNBDw7tmxgdmtpntpS5482zLnE4puHAjSaS4Cc4RtxqQwoPgkuyCXCDwSF2hKB8JLhhUZmC0omKEURGdKQ2jGDq62zB7cA7GhscBADu27YDgAus3bpKnnvaqI+YM9HupI5eWy2WAMcyfN4+yDpkj4DmNyRgAArCZQb3RhOf5jzcm66O/GvoVPCkR+D5FeUCj2Whisl5HuVJGGhMwqt5qwjcZ2jvaqNBPyQ4puABjHM3JJuXOBj7KpRLZnY1FFEUoRREmxSQ8T2J8bAxP7NiGNM1QLpfZ7Fn98+ctXHzoya867ZUnn3T8oYvnDc7bunFrx+y5gwij0BV6FpOTDYShD98jy3WjmbDNGzd3H3H4kd1tJ5+CPJbl+ONPRBD4S0ZGR/5m//32f3z1k09c1hAefN9HW1s70jRFkiRIk5TydAOfZm9hEEVlNBpNl9WqIT3PxQzRjHYQhGAMiFstKK3g+yG0UvCkB8AgzVKAcVSrVaRpCt+LkKkMUgq0WnVUqyWEQYSnn3wag4Nz9l00f9HiXOkzsHtkV2IPNXV6Vq2dUuyYxPXX/fzO9RvWr5o7by52De0mWrjR8DwfTApIAGEQgicpVJbCMk5RMdMWnNzNuhr3uNZOPZ91SrM1dkrsdZTqPSo5ixcmNP/ate2voWLtUSg/z89Ne768HpgedcLAAe4AVXyqCMyhZESp1I5zxWAsxbRILoiO63mOMq6htCr2z+jIKMrVMvp7erF161YYZRYGUdhJ5yoprPl86fQ38bw9AWMhHS2YCzYGjslSOYLgAlq5+BZtXENEIMsyJElMCw9BBRnFgzrF0zUpOOMOuGWnKaOOjmvhFjUESCK1OwMcQIlx4g5x5oELRrnifgRjtAM1+Wg1G2CMw5oMAwODcxfOn98DAAfscwDl/VrKVARnBRRFJSmOOvwILF28BGkWo9LWCRigt6sPYegjTjOlobaCc0zUJ5Gm7tqyFlwKJGkMgGjSnKOIl4J1Vw/jRdwTc+8LrpllC9AUjZLQmAEr1GHj9iHjDMwwNwPNoU0Gow1R+RlDY7JBTS/GAeMIxUYX2bzNZkyuHacmt7W3w1qGibEJ9M/qx5Orn7zxokv+++v/+Kl//CxnjMNl3IJRAd9KU5RKJXddkuJOzwVkyrh7unXOal6cVI16E1kaw/d9/PKOWx67676775tojI6NjA45OFXkVFaDIKBGbZqkUEohCH0Y5iBdzBKAS1LklJRkT7aWQH06s8U9mXECajEmivih1GZglvZpAf+DzsO9SFUyhvY/e2k+wD/8Vx8+693ves9rAWB0fAjj45M45LDDoF3jSwqB7u4uBkCd98XzL9q8Yf26mWXPzPY/Zevq7ArnDA6uOOyIw1950603H1OtVfad3Tt7oFyuiGd/tFqQW2l6sv0LXXZmj/51Poowza3EXcMtX4cwVjg9gtADgKHrf/7za8444/Rf+/rdHPxDM0dyZpvZ/hcUvJxzUkgYKQj5/JdWmgpfSzEk1hh4ng8hGCyjeVDGGSQLICTFNEg/ABgQJwmq7W2wmjIrS6USxsbGofQGlIMQraZAf/8sJK0E/QO95VNOP2HvRjNBlsVEtzMGXuhBZaQWjE6MQWuD7s4uV9VY+MLDWGMSgvPkjjtu/2XcaqJUrSJJUpTKFWirMaFGKUqnUkVndzdgNMrVMnbt3A2tMlTLZcSpgvAk5UZqwsgHgY9aew3NRpPyhD2B8fEJjIwMQRkL6UtIxtGqN3qPPf7Yw88663VHH3booQfPmTOwtKure7YQorgPL1y2hFQbpSlblTNUymWsXvUEJibqKJVKaLRi9Myehf1X7ItyuYwkSbFt606gBCRJgtkDs+CHQQsA2turiOMUrVYLYEC5XKJsUM9Hliaw2iAKaYY2SRLESZOo05LozEppKrStRRqnsAYQwisybhljiKIK4lYCbRRGx0YAcEguUGtrQ7VWwvjoOJI4hulV6OzpwNnnvP64nt6uqOXijBjnxRz2dHDDdHPxlGuVQWUa3AOuv+HGGxvNph2fGCfAWf67jENwOgezLAWMJrsnp5lzbXRBpBWCu+xRRgAgB7LKbZt7vBZuC5W0KHpfoAj9gzf7Qorw88Or8iI2nz8UeUyL+4H8/TA3hGmcEgXL4QkPxhoYZmAZKY5pmlIEjB/AwCIs+QikD88PkKYZQr+McrmCqFQayLO5GX/um+DPV8e7wtzzAjSyBgDg/vseeGbH9p0jtWoNxmgEgY9GswWtLcLQd+/FEjCLkz3dya/FXGVuVabMqikngFEOusaJOswYoBU5OUjt5FRccQYpOYH1BJ3zcZJASgkuJLQ26OioIIpCGA20tddQKgUHbN68qTQ0vAtcMCyavwTdvT3g0uUdAzDKYr99l2P/FfsjCCJ4HneLLIYNG55BZ2cb1q1bt/aRhx5d193Vg/a2dmzduhUtrei5lIZOFcqlMrIsJeiaIwMzTg1IAwNmKJ7JOuueNe68sHnergO1FQ4EUsgFp0JYcA7he0gSStlgeZxTDngxDMIV19KT0EYhbcWQMijixsAsKrUqskyhXp+EtcxFvnmo1ir48nlfu/SIQ4865tSTTjrZUiIbNVM4Q2d7mwMY5vbmaT4BjiLuCtYWlngA8KSHNI3x+OO/2jI8NHx7fXLywaHhUcogt8QdaGvrRCtpIo6brklnKT9cKRidQkoPgvswyrjrm7KLde4ksKTiEpTNUcCthbH5rC69rnxu3LWa6OvCvSFtwJ73mv4TfXhHYf/3r7n6LZFkwTMbtuGq738f577lXHT19kJlKVpxDN8PIQLgiu9fefX5X/zSd877wvkzq56Z7SXdGGPe4Jy5y0484cRjv/vd755+5MuOOrRSKhfzssZYtOIUnkcCRHGbYHkWAHuO12gqedAWri3iXRCtnxgBDNNIV0Xc2bTBIUgpMDw6su3jn/jE//vvC//r8q999SszB2xmm9n+rxS8SiuyPeoMnh8giig6iGIKFVKVIghCAAZJ0oIQHnxfIlMZhOeDWYY0SeAFAQV+u+gLWCKgAhxxHCONE7BKFVGphPGxCfT29SGOWwCz8/pm98wXkoGLEKUoIKVBUYQIAMStbA8IJmMMzUYLmzZsxe233f7gTTfddPfe++yDeqOJkdFhNOMW+vv6EAY+olIJjXoTgechSTRUqlAql9CqN6G0QRQFiOMYcRwjDELK6gSpIiMjw5gYHyue148i3tlTGzj0sEMPOffsc4/db+8Vxy5atHDvIPD3qAO0cRm/jDnFi+YXjdYwmYFkNBe3afMGpKnC8SeciFn9ZJtM4hiNZgttnTVYMJSiMi67/MpLrr3uup97fojJ+iSa9SZFswiGOCFVJo1bNNMKEreM1QAzUFkKaEAZ5kAP1PtM0gTGaoJLGUNWWRf5E7eIqgsmkMSOgp1pJHEGLppIVIYwLKG9vYpqZ2XecScRLAVTI4PORqphLdmK9hy4QTGoaS0gmMTDDz+y7fZbb7sHVmN0ZAy+76FcLsFoiyRJoJWixSoc+ZXzAuLDwWgq0FqXWWqmJogL4K2DQPFpCnNO2c6VVM6mQoN/r0L391j0PksayknTdo/nZ9MyeZ0FK1d6wWFzWytjsJYaAZykdlcsO2XNLd05Y2i1muCRAKyieKJ6HUoprNhv314AbpY9t3a61/A8O8W667HRbKJeb6Czgyxljz722CpYst9aq9FSlDkrJc0YK6XIhUGe5CkYk1PnGWPkNuF5v94V/K54IXgZNUHoORj2OLDOYSKkRJopmnd1JN4kjRGEITxfotFskHqsLPY/cEXf+z/w3iP6Zs3C2MQYRsZHMDS6G129PbAuesIaCyEZIBjqraZTMBmSOHVjBFVUq1Xcfd+9j6xfv35Dta2KVtxCrb2K3bt2E5/AWoJluZlgqlUpt5ZLD0brYhaAC+6ih6Z0C85FEU8lhKBC2M1sk81XFQtHrg2kI1wbTYWukJIaJJwU7ziNYdzcr5ACnhCk7ApFzgFlISGhbIZMKUjBMTS0G+1tHZBMbv7if37hq4cffMgBHR2d/VmqIfzccs8KC/AepzpjkIVqSv+e1stB4AdQibEXX3zl3Y899uiPt+/YutFai9D3IRlHs9HCZGOcooK0piWrAdo629BqtVCfnIAGB5NwjTfmoH3KNTVzBR1FFBQrZoiJ0K80xa8xzomPB5pTlkKCMQtl9LRr1e553/gTbSeddOqpxx5z3KGrnliFx371MLp7ulGrlgFY1BstWGtQrfrY9My2p//qY5/8V2vt2MySZ2Z7qbb2WtuCN7717FNuuPnnp+63bMXh/bP7u6aKXE2Ed9A1F/jetHvGdFcYm8JRTltPMGuLZIN8jGlqOoljeqdWa41Mp4Bh6ZatOyasMUPr1q7ZcMvNt22ZM3fO1jvuuf2OKy+/4lZrrZo5ajPbzPZ/qOBFrsIxURRruZUuh/twzikz1dnk0jQm5YxJKGUo45DTIjqfOWw1GiiXyggiH0maoFZtQ6lUhtYWSaqxbcsOjI+N4NQzXnXkwKw5g1ww+NJDs9WEYBxBGLqZMKCvtwecMwwNDyH0A1SqVSRZgkq1jDXr1q5Os2RLksaYnKyjXKqCgaFUKsFqAw6BUlgiGnMYoNFoQCmDnu4eWJBqPTk5CcCi0Wxg2/btYMwibjUBBjZrzsDA3sv23u/oI4849NCjjjhw/wOX79Pf079Awnuu5cZaGABJphB4HjhnSHUG4ZSEOIuhEoVyuYx9lu+LvfbZG8ZoTNZbGBoeRX1yHJ2dHahVK7CcoTmZ4oH7H3rq7z/5d18aGdndKFcqaDWb8KOAMlYNRRBxRytWhoqEzJFuc+UIYBCMIQxCGvHU2ilsnCyOgoMZiyxTRHG1GmkjBhhHuVSG7/uQnkUrbkH6HO21DrRVati5azfCarTPnDmDywHAE6IIYbecwQs8gglpDc9FsEyJplM5rpAM6zdueHL38NBGLjgBaFwR43kS9UYdxmiys4JBCIkkzaBV5op4N6PLppRczghMQc9hpwo3gyLyNj9mJJLmM7/TytbfA7T8+yq/pGhyB99lU9E0bOq7uULGnDpFC20NWLKxMsHAmEWWJaTkOWAXE5Q1ygBwT6IxMQlrDSRPYKRFZ08HBubOwZp1a8C0bQOAVrOJcq1MTQFrkcQJZA57ex5t2vM8VCtVeJ7AyOg4tm7dug0A2jtqiJsJlMrQbDbAOEeWZLBWgblmEBVpDmDEckgVc0WaJqqx70ErA2Uyd/xsoYRzLtwsr6YmDhdg4EQ314Yo7FkG7ezQ7W3tBC4yBipVmEwnoI3G9h1b5ML58+bXqhUsXboXbrnlZlQrNZp7BdmxhaAmXKPRxNDwKPp7eotGVaZSzJrdTwX/Q4+sBYyJoghJlsI6kJJRmiBIksGm5GYBZyBospyWv4up92XNHqlUlk1l1MIyaJO/53xudyqrWClFhT6tJmEZOT0Yp3tCksbQxkDCNTcMPZ/nMVjN0YpjaFWnWf3AR6kUoVypYNfu3Qh8icVLFuHmm2/66aWXXHr7Bz/8wTd4gXBxRHwP5YQaGbmaS04BZvNrdnoxDAzvGsFVV3x/81133HHTk2tW3+EHgSJXCuW8e9Inm7whGj/jDHErxvj4JLk8OFmYjSnsEjCW7OBwirYQ1ChSVk8tihmjzGbnGoE1jpyfN34onzyfPy6Ohf3Tq7u17r6eL3/xi69vKwXiF6t+hQ2bNqBSacePr/kh3nj2OQiiEgK6VtW/f/7/XbBp49pHZpY7M9tLsXleUH3jG88+6+HHHv3zBfPnHwZXflpYWj86KKELjijWmfnnca7q7lHgTnWIp1Lp2ZRim2/10YYdb03seOjRh55a9djqbYNzB8fvvvfuzQ89+MBawcXmkbGxIWhM7N61a2Lnru0xAHzgA+/FFZd9b+bAzWwz2/+5gtdlXebZr2ma0iKTcVISGNFPLWgOUGVUTEnhOVCVhuf7Lrc3g+dJaKsRxzGpvlojDEJ4XEIrhdF6E9VaDRYWtbZ28Wfv+otTq1GNaa0wNDSMerMOzhh6+3rhewEt4ByhdsuWrejr7UelWkVjogE/CDA4d+6WarUDDMDA7NmQnoexsVGMj41Dcg64wo9LiSgIkMYJoshHUA6wdcs2tBpNpIpo0kIIBJ4fLdt72fIjjzz6yFe+8pXHrDxo5YHzB+fNf06dYtxCPS/dcksiA0q+j1SlqLdSSC4ggoAItn4A7flQ2sCTnOAumgO2iYnJcTQbdbS3tWN8YgKdXZ1oNhu7fv6LG85rxskD1gJaZfC9AIJJhFEAYyzGxhIADEqTzZMzV1A4lYuUPwL71BsNp7q4mUnLnUUQ0EbD93wwIQAYWEF2ImuJ/qqNRbkSoj5RB7RFV3s7Nm7YjhNPPnGf9kpHNY/I4cVzUtFmjKMm2ynxbTqp2Ti66xOrH3+g1ajHgR8SbAwEO2pkGZiz4uYRV5kiBSwn3k4b0HXHgO3xQWgdiXHPEVq7hyCb7wdWoGVZYbH9vRTf5y2Wp1Ov2B6VNSsgXnmUDF2XzKnl1oF0cpWXCiNSN/P4GeGsvNqSCqldJi4phqTu6zRFqVyG1gphFKBcrmBiYgJr1j6NOGli9pyBDgB0zJUzhDGDNE0gRXmPdzE1hw34ngfp1EYOBl/6TQBIM4VWq0VFt7NaE/2Wu7lKDypTheWMuwzf/NwDc+8jzQoRjQtWxMxwp7pyIcCFKeKaGAw4F9DawkKTBdop4RwCOkuhtEa5EiEIA4yNjmPV46u8jZs315Yt2we+J3HsK16JUil0cUcc2iowq6FToFapYVZff2G9NpbI2SrJKJqoUtkNAL7vI1MGzWaMcqlUWJGN1Uh04kBUmmz4nEMIihXTShfnZL7gA89zv00R9pU3gaaU1Hz/0fw1NZ8ooik/v6zlVLz7Pgwz8ODyIx0UzRpDjcEsQxCFUCrD5LhC6IewkYeJyTqkJ5HpDE+ufpKo8Dr9JYA3WGuRaQVhBY0hTIOLU+Mg7025e4+D0AAWw8MjaK91YPOmLbjt9lu2lmvh5t7eHjU+Ucf8wbnYsWsnGs0Gap01mMxgvD6JIPIRxzGMBUyWAdaSPVtbKKWJgK2JRSE8H5xzKJddDs7gMUcRNzmdOUWmqKEgJfEdchie5dYVwrTPJZfQLqboT25pFjhu2d5LDgGA4046AdsvGcJBBx+CIw49FFppGJWCBx4uvfyK6y/49oXf++pXz5tZ7fyhu1wINjB3zpw5c+a2N1v1nY888PCumb3ywlvgB3LRwiXHnXf++e9+33vfcyqA0vTPWsqNpzxrbaaKVnJj2T0+p+2zCtmiTczc/d59Tg4PjYw/9fia9Zs3bl27afOG1bffefPqzTu3rF6/fv2a8dHxBgCcc/YbZw7O/7GtXK6ISrksd+3elVpr7cwemdmet+DNLXNGO7KuNWCcww8DGEWKhtKG5tQsZWoycJqBUzTj1Gw1IdOMlEIO2MwiDEP4gsPzOFqtBsK2DpRKVWg1iba2Cur1SQwPjy8qV8oHCwGkqUGqM7R3dODxxx/Dzp07cOghh4GBY3xsAkYDSxYvQxg6qwtn2Ll7aPPukd0PVaoVCEkqRhSFGN6tkGUJyuUytAWY4KjXJ5BlPiYbkzCTwLZtW2khrll5ydIlex9xxOEHnXTK8Qfvtfc+KwfnDi7tbO+oTt9RWtM+IuAOAU60pZlSpUiJltJDFAXItEaqNDxPIPQCWAukipRUAQsuAMEZspQU2M6OdnR2tBdgLgB44onVD3/qU5/+4vU/v/7ywTkDKJcXYOeu3ajVqmjU62jWWy5HkkH6lGWrjUZmFbzAB4yBcjPJzNmJrYt9CUMf2tFJhRSwMEgzDS8I4XkSWeZszIpyLbMsRZop+L6PUilEW0cNE/VJxGkTBx24cvl0hZsJjjhN0ahPwg9CVKJyQQcu1Eo3Q2gtMDY6jkazjoceePgBt6iAthqSCcrX1QqlqAQLA5XQ0lMrIlTTfCsRV62hTNY8C3SPex6bFqvDpgG09uRoFeAaa7HnTC/7PRRf++uqYDZN1c2tnbaw6ho7ZcuCzeOFLMCclTXPIHTRDHlcTW4LZpxDp9opW1RUWu0ssk5lq1TLiJsJOEvgeRKtRgvVSpm319q6AKBUKYMLVhSwYRBCerLouNs93hOmYpEA+IE/EafpTgAYGx2FyRTK1SogPGRZDIDI8MqyAjpGM9k0SkD2Ul3MqNL1p6dFE1lMt3dTayOfaQU4OLxAQisNbUjJ9QIf3BPgYBgfH6M8XM5QqVYpustr4aSTT1p+2CFH9LXiBFpTpJk2poi5kp4HAYZG3MTI5DCkxxF4IbJEIUkyVKpVgAlkWdoYn6hvyM/nifFJpHEC6RoN+fHiXEAr5fLNybGRZZmz5BNEcKq+yenV05wRrsFkGEU7WUZqL42VmGkwsymF2FoDwSgfN05iSE8QqT3RYFxASmpalKII1kZoNhuoVqrIYoVKtQIuBIZHRiADia5yGc3WMABg7dNr7vvJtT/btGjx4rl7L11G52JOF7dTagzL4U/MQltDjVV3TkUR8SA8L4C2uhlE3iT3OOOcWyEFkjRBmqZo1EGjGVajUa8TmM0aB0ukfUv5yzQnnCnKfPcko0I9S6EVNUSEkGCWbPT5vrTOFWKLm5Ypmg7Wod25sztzSw0h/AlJzbPnDu7z2X/8zNuXLlrYtWrVY2hvb8MhB6/EYYceCmuBZpygXC5hx45tu772lS9+O23Vt8wsdX6/bcXyFYuPP+GEQ0cmR/f68le/uvz4E05YsWjhwlm7d+64btk+e7/vqVWrd87spT23WbNndX3wIx98zTcu/OZZb3vz246cGB+r5fGGOaOBcb7HqBFnU/8WHNNUW1p3Gsb2pKO7j3VrCOD32JNP1D/1yU/915Z1z3x33dNrHh9rNRoA8Ff46MwB+T++dXZ3V7769a98cP/99j/uiVVPPXHW69/w3R9cdeXdM3vmpdtmDwyycikScb2pN2/f8kf7cPR9r+cdf/bOow/c/9CDuWV84zPrN95+601PPPjIg482kmTiOQWvFBKpTovxRWudKpEpinlwygAsI6WUMYRRmebPdIowiMAgkSQxMgWURIggDIiaaRRh3lMFKT2EYUBqjeGYGB/HUUccun9/b3dPrtr09faCWWDpoiXwA98pgAblShnccuzYtQOdXZ0IwdFqxrjie1dc++Mf//Cu8YlJTDYayJIE5WoV8+fNRZYkGB0eQ71RR70+QRAX6cPYDG3t7aUDVq446swzX3PCYQcdftTSpYv37entaZtecJLKRZ1DmlsTZDvkpGDGcQJrLcIghPVp/oSUUgIFRWHg6rvcpkoqkXBFX76YZYK7CCWDp59cl8Bjj19/w7XXffmLX7sySeNfuYgXio4JA6Rpgma9DiFp/wiPu7lcRhReZahYcIUDAyn0xlqCVzmglDXGiZgMnAn4rmGQpimklIjjGFmWkXLnefDDEKUwQrPZhNUGk40JdPV115avWL4vACilIXMbY34eSaJ359h/6+jNpL4awHJ0tLdj99DQrnVr1j4NgOip2sArB0CiYI1FphSUpugUyTmRavUUtEk56BpRwVWhfNFsp30uQfXZMUR5wU6vysUX2aJR8OJue4KzckXZCU6Fsjxlk7ROaGZTErkrdrngrjDSRf4wKZgg4rFlYILBcvp9zylfSZJAeoIs4z5dl6UwQpYktSiqtFNBxaE1LfwnJybheXT+GeRAKYBK4efGTt1z933r7r//gTXVSgWe76PZbEBrjVYcIyqFSOIYlllISaCk3H5uDAPj04BcjLmFUG4RoEWQcfOrdC0KIse7+VUYgMupjGIpCcgG7opAy2i2v1xCM47RaFDBlCQNvO6s1xzZ1lYrPfrYY0izBHMH58Joi1mz+qHdSW0B+EGALtntZmnpvZfKJSc/c1xx1Q/u+f73f/BQqVJBkiTwPYnYGjTrjaKI55KOVWYtuKWM2CzLqADOmzSuOGSMOTe7KZwSzNn3lbuOsywrmnF5HpjJ4VCMwSjjFBUJozU834PPyfbNIYvcXMoABpIkc0Wri6izBo24gUq5glqtCqU10iRDKYgguzguvvSSzeW22uaTTjhx7h4cVYuiSCzm6pz7g7sGE11yDKVShZShKAATAo88/OiYMZRvtmnTZsrRbbh5Z8FQq1WQpApxq+UQBIYI2HEKKQUB7JS71xmDLCVKdd6csdY4m7Nzpbh7IKzbXwXrFUXTjrn7rDEGSmWuScbzO8efZHvXu9795g++5y9PuurKq3Dd9T/D+g3r8apTTsVhhx1JsWOhD86AK6+46mf33//Az2eWX7/HXZqx3nPOPufs62/4+Ttnz561Yo/PDgb09fSfFcjwAd+LPp9mrexP8ZoOPeKYY7/xtS+/u1QOe++/997HL/7OxT++8667b201mvZ/0H4LL7jgvz717ne/80P5/qrV2goiOywAFxPk8vX2SC8ogFT555/7OW6f/QlqYA0raPw/vuZHV/34mms+5qjJM9vzbGFQ8vv6+mfPmt3nPfboY5ubrUb8x3quqFzp+8Lnv/DmM199+lG33nTzzh98/5obr73+upubcWP8xX6uU151yrlvf+vb/w5AaeXKla886zWnH3f0kUecc8dddz86c9T/dFtUqbW/7W3nnv62t517xu2/vH2vUhj6gvNdP/zBD2/70Ac+dPXGbRtfNJp5VCpXznrdWa+56eab3/Gyo192NIBi1s6ozzTvuefu6w4/7Ihv3HvfPTdNV/ylMrrI3QUswjAA5wJZk+IcsoyIl1mmIIVEe0cFaaqgMoVyWELmQELlchVgpIaUojJqlTZM1McRtxJUa22I0xjxUIJqpQrhMwRhgBX77XdIvTEpjdXo7OqG0gZJHENpg2oQTakbgiA8s/v7wQXDurXP4Lbbbl/zy9tu/8nRxxw9NH/+fAzvHsPo+BguuexSCMbR2dOHNEsxPjnG9lm+fM7BBx64ZGR8ZPa+K/ZddPJJJx6ydMk+h/d0UV4DAEcANs5iA5f36SJQPDm1hHO7LlUJjLZEXYWAdDd0rUm9Em7h6e7HznaKYmHEhUQOc06aibr4ku/85AvnnXfBxPjoHeOT45OVSjsRRrXBxMQE5WAasp4LIQulyBgFpSyE8IhqaOh3hCdgtCP8ClIipKTFbpY5hTTTSE0KLriz6Wkoo5EmCaJyBHCLVpIAMAjDCJxXC7Lp5EQdy5etmL9k6dKF9PFjYEAFfRAEtB+FI7Yij/ZwFnAX8q6UQhBIrHn66Ue37dixrlKpusInQRK3KDpGcjBYeFzSTLcr441Td4UQBbCCSwGmFfI4IvasApdiPveMNXh2KTpNC8YeSOkXeaMCle2hJOfF+XTrdQHisIBgDFYIAnNBA1YUxTx3hRF1zikTVUgP0pdIkxiS+5SpyhkCP0CrkVDck6XjpaxBqa0a9s3ujQDKus3Pdc/34Ht+8dpp7lvsYVHX2mBkeBzapHj0sYee3rlj++aOrnZwJtBqJQ5ERQ4RKnQNtM6mnRNkuc6jliwYhFMoiVpMkT1SeuCGU+ySO2hS0riE5BzM49DaIk3osZmw8D2fRjUsEXul9BDHCTgY0lQh0SmYZbJULu8LAB1d7bjggm/h5JNPwSEHHUL71+bxxgQ1ktLdnwwgPYHA+kiSFOOtcfzs2p9c24rrW9raOmCUQbPZRKlcojloQQ2nJEmct5fuGXEcF3O5jDNnL6a8cwa6Vp4NMWPuvPCEgBUMOnMgJUYxG3za/rOFu4Iq5izLCieEgQWTZPnOlHJqOhFLBZcwGohKETKjMDIxDG5pfweBBz8IoJXGwgWLuo8/9pXdvuchzagQ9IQorPfMEiWZO2ozZ+6CtFPgMwCIWzH6ZnXiM//4DwvvuvPOrpGxEbTV2jBZb0JYgUqtCmMNtAPTZWlCThUuIfhUk0hrF79lyELPwIrIJe7UJWZNAUiDE42Znh5l4mKt9riPMKLF5gqw4dNcJH/8rbtv9r4//PHVpwFAW1cVURRhyd774r0f/KC7Ngn2uO7ptZu/8B/nXZhlqjmzFPvdtmV77X3MTbfd/levPOZlp2Ia7shai2ajhSiK0Gw18LnPfvZ9l156+S7G2HestUoIjwnJWZokL2r3ww/D3uOPP/mcH/7givfPnj1rEQDstXTZ8eee+9bXfeaz/3RBZ2/nt0d2jbwoKr6Uku2/4sCFrzzhlXsJbsqNybpmPODt7W2Nn/z4J+vXbli3fnJs7AULpdNPP+uMd7/7ne/K742WAVzyQrzIwZk5r8FOH8q11JSEnkp3sG40iU9zqYHlMZoanudhfKye3nj9L66cKXaff1uwZMGCs9949ilXXf39k/bZa+99B+bM1ld9/wf37HvAfpetWvX4rTa16Yvc9JCf+vRn3vOX7/nzvzYG0evf+Eac/uozz/nxz358+ezZ/Z/btm3H1hfruWodbYvvuvOudwAokVtKICqV93nbuW87DsD/iYJ3Vt9cFqcNNjo6/Efpqr7sqKMOfNs73vG6BUsWD65avfrBa3/60x9d99Ofrf+dPpd6+5ZfdfVVnzjtxJNeDyCc9q2lZ5515tHL913+ur/7m7+75Nobrrv44Yce+oPuVaUo2uv8L335I3/+Z+8+B0Bl2jKU1mpSlI48+uizfnHbzYd+8q//9guMsQustQ0AkBwM3KM5MqUU0pgKXOkJGE2LH+6yC5UyaLUoD9NAQ1tauHrCg5AUF9JqtOBHASq1CkZHRxFUI3AhkKUJ4jhDKSphYnICk+P16jHHHnvwnMG5aDboM1mlCpnSqLXVnKWOFvLWoVjymc3u7i5MNia2zFswsOmIww7F4OAgWvUYYxMT2LVzGy+Xo7YDDlg5l3vygCiIjj7mZS97xcoDDlg8faelqUKaKkieK7cczrUNN/JZrGHyAkswTgRkANVytVBrrCEQi1aarJIOEpNbVrWlWJkCjuK2kaGRoWt/9OObf/ijH11z30MP/iLO0iFSuRmarSYajSY8z4OUAibT4JJUCZqzU8gUFb0UmJ4iMY60yjh830Oz2QIYgx+EzpacwBiDKCzDkwJNTbFLFEVlASkRBgE4E2CWipqkFaNUKkNwgaHh3ejs7kRHexfWrluDlQfst6gaVroIksOJ/pvE2LVjF3q7ekgZDjiacRObN23B/HnzEfg+tKb9wSXQqqf4yY9+cvPw7l31ru4eqCxDrVbB5GQDiUrBOZFUOTiMUW5ek8NyVsx2U+FP6nTRXIAle2IeuesyQKdmdfcY/S0umVwZf8GRPIvf8A32a8vc4oxi0zrZjGy4BUCrsOnm8+Hu33Zqzomoy2T9nYp8YTQbaabGE+JmyymENL8KRqAymgEHRkfHUK5GaCUxxseGvV27toeLFi5Cs9FCra1WxGgZQ1m0XHAwK8CMmyl17zhNyarsywAMfLs1VptMI85oNj7JUprNdtnd5BgxTi0jixuDgLXaRefYIpap2HPWgcjohCNVzzioVRAW1lTAQLjZYJ0ptJSB5BKekIAgG7PVFo1GHZZZVGvtkF5HW62rYw5As/IrVx6EwcF58D0fmdI0my44koTmRIPQd+KDm2EO6Trd+cz67c+sX/tLxjjKlQqa9QY86aNULoOBo9lqFKoGEdwZDKdCnINB+IFTq10ckXVjJm7+Nge3kC0QhTWQFdHSNLbApsVv2D2KOsoB5q6rZ40Gh3Dvw0AbQPoeZJ5Xm2XIbAbpS1TLVUw26tQcVTQrG4QBNm5cj1e/5oyTTznllGUAHISGuVlqd/wYqcYAUAqD6TfXqcYJLHzfQxiF2LtWW/DWt5978vnnnXebhbWeL6GUhmEMRmkkSYIEzN3/KG/W9z004xZlLReLZVJipZBE7RYSsJaYDVw49ZpIzVYz+O53tdKU+ckspEsbACeImjHkzuGMT80Q8j9NwfvWt7zx5MMOOWjFHXfdDmY5/umfP4fJ8QmUAvq8lI6l+K0LL7xsw5b1d80s93+nhTo75PDDX3fZ5Zd9+uADD9x3z6YjXR9C8KKJe/oZr5oTt5LP3PHL2w78xF/9Vf3HP75mPhgvX/G9K3fcedud995w43W3PbVuzdrfd6awo6uj8+1vffub777n7nMPOmDlgQAEMTVo7MxqM+czf/8P//iX7/2LY1591hkf/dEPfvzY7/veq22V9sOPOuKYCy+84DVnn33OCUEQDDz7Zz7xiY8P33//vfe+8U1v+sGjjz360ydXrd5jhrlS6apeedXlbwdQ0dpOsZXZdD5Gbpdwi1NGzfLc1gzn9pmYmAQYQ6VannYP41PXtQaN6XjArqEdd6x++sl7/zefe0cddXTvwYceNuvrX/vqujSJ6y+G0v6qM1718tNPP+NVX/jiF496zWlnLgfg52fiuW8+Z+m5bz7njG9c+I2LymHp3xtx80Wz5u+zfL+j/+I9f/FnWWqiOE0wMjKKKPLbznnT2X/ZVi1PAvjrF+u53v32t525fJ99DwGcO8kqcHjYe/nyff7gRpMf9P/H57/wuqVL91pw0bf/657bbrvllzt3bN/xpzonBufO7X3DG84589sXX3B8f09v5bzzv3TreV/+4iUb1q7f/qI0T3t6+cc+/pE//8nPfvKJ9vbOBQBw3Mtf8ZZzX//Gk5fvte+bH3/yieHf5nGOOfbYV1x3/bX/esiBBx1ujSW3q1uoCLeGWbzX4mWf+7fPffbt73zn0YvmL/voug1Prf59XvMxx73itDvvvetTK1esPJQctbZwp1l3rzHOnVkJo8EvnX/e59pqbS0A3wQAaWChkgRSSHAHZtFGgQuBIIxIAdAWViekHIEWRCpL0Wg0EPgBLeSaDbIPcgHf8zA+OoZGsw7hSbTqLYQlH7Nn9yFNKLtwcO7sxYLzvQAQkVkpGK1QikJIXyLTGoIxpCoFYBF4IcCI+NvW3obAl92jw0Pzfnj1j4YWLF5Y8aTs8INo2TnnnH3Q4mVLVwwMzNmro629vxxFzFiNRhxDCAnBKFe4Xm8A1qKzq90V8I4cOq3YKeA8DEWsS55Zbt0cL7OgbGILcI9Nm5cFjFaQHi0e845nsxmrp9Y+9eQ3v/Gt6x975JGrNzyz7r5Ws6m9MEQQlbBjxy406hNQVhO9VTCkKoNSKZ1AXCIIPRhoqEy74sZZo5kA4wxZliJuJjCa1Pskbrl5V+OAOBmyNHH0XgGVppRxaSziuAXfC1wBy9HW1g7BBJQy6OzqQikKi1nRFfuuWAaQnVmIPN9ToFIuw/fpXIC1kMJDminUGw0EgQ/GAKVcvvHE6PabbrnpVik9V1QIKG2glILvedCazkdDnFyC/MDAaAIdWeEaIYoaDDTPa6gCmB40b1kxL7RH3TodHPXs6KQXLHaf/UMWvx20Zg9KVlGgMMsK0HQBKXJFbD6DbZxdHrAQTEAKCW005Ya62V/LSO0DoXTcPDNHEATgYDTTzel4SE8ijVNUahGE5GiNtbBg8YJyV2dXpdVKYDRdj0wzKBiC1LlFvdIG46MTUCpFT28XjLMZd3d3goFhy+Yt24QUsIyh0WwBFvB8Ce4JMDe3arTOsUsIPI+uf2vc8ZuiZudAEiouDLTLYBbTKMSpVuDC/a4ju6ssdZRjRpAiLuD5IaSQaDVjR/um+XXGgVlzZ1fnzR/sa8UxYAUOPvBgrHl6Lfq6exEEPrTRUxTk3C7MpjIcyWHAsXr1qvvWrd3wRLVapfuoJ8DBMTw0jLZaG0QikGUKpVIZDBQPZk3ejEHhtLFsemSWLSzayGndDGBMAIauv+KcQW40RxFBRk0ir5irNZrI0FZTwSylQJZldO9mHIEfII7pHCiXK67ZqRDHibvfAykXiFsJdu/ehTmDc5Z/7KMffUtRKFJHDqnJyErvbOVB4NP7yxtR01yLjJHrwxpQzi2Ac899y5nf+Ma3rknS5N4wDGHBMT427iLLKmTjNhYZqCmrNEHcpGCOQxCg7AdoJU0wzlwkEXPnD3cjDBZCeuCCI0sTKHcO0lyuuy9oC87I9ZDfh/KmTBF3Zv74lmbGWPt5X/jiSc2JOrZs3oojDj8Ka9euQztNIRQwxM2btm68+pofXvHv/+/fZqrY33IrR1H0sY997P0f+/jHPzarv78vB/0xZ7/ljAGMI4xCaEX3oCzL8Po3vnbw+JNf+b4wCBCFU660N77pDe/etP4Tmy695JJLent7L9q1a9e63/FYz//mty/8pz9/x7vOna4w59n1HAxJpqzgnPV19h13zmve/E4AH/49zinvtFNPO+mnP/np+15+zCtOyK++QklVzknlCVQqla5jjz3u1BUrDnrlgw8/dED/rMG/3rF9cyt/rIMPOWjWcccdt39+72FCuNdM6QEWU3O4BZUfU2urZqOFrdu327aOjtbjv3pUbd68ITr7TWd7vhcU2bo524JLgVajiZ27to9944KvX7Jr+7bR/63nXm9v/6ybbr75C/st3+eUQ1YeeMXihYsv275z9/BrX//a3r5ZfcNf//LXnmjUJ35r9fqYlx972DU//OGHjjrqyDN6unvK1gKjoxOIwsA1ug2sZeCctb/n3e/5yPrHN9QZY59+MWBPjDH/W1//1rkD/f0DzUYLURiif1YvsiRxa8b9Dlm6dHHp6afX/sHOk56Bvr5bbrjptYV7gHFyVgIYHR37g1TEOYNzFl115RX//Oozz3yDtlacctJxZvXqNbcefdQx/3zHnbff+sc+J/Zfsf9BP/3pzz67/4r9Ts6/tvKglacsXrhggef7H83StPWHPscRhx962t/+9d9+BkCf1SQAcgZYbV42q79/GYDf2DDd/4CVL7vuuuu+PHtW//K40YInJbgnYYsMbKp7VEaOvCVLF5184YXfGt1nr/0+uOrJXw39Lq/3ta997dt+cf2N/+J73myjNbI0g/A8GENuXHA25Qx0a0fOWelt5771PQvmLLhu/Zb1m+B7ATzpEzSGcXDuQUrKr/R8H0J4iMISylEZUgZo7+hEtVYD5wJhUIIUPqTwUSnX0NbWhY72bixcsBi9Pf3o7O7G7NlzMDAwiJ7ePuyz7z6YPWcApXIJn/vc595orbVxnFhrrd25c5u9+Zab7JatW6zSyiZJYrXRVunMZiq1Siurtbb0O6m98ntXNi785gV3ffn8r/3shz/+6f2r167ZNjw2oZJU2efbjLFWafd3a22rmdpGPXbfM9bYqe/lf/b4fWutdo8z/TG1VrbRmLRGKWuNtVu3bjNDO3fbLEmKR0njzN5378NbP//5869+29ve+eHjjjvxoL6eWT4HRxSUsHD+YvR09iPwKxDCR7lUQRjS/i5XqiiXKy4OhoFzD2EYwQ8C+H4ALiQ4F/D9AGFYQqVcc3AfDil8REE0Vay7ZoVw+cZcSng+Hf9yqUqFrpSQfoAoKqNUqaCt1g7f81CrtmHW7AHMm78Qhx1yKBgD/uuSiy+i96esUsZqa6wyutg3xkzfb8Yqd/y0NjZJU2uttd/97uU/FUKWe3p60dnZhVKpCs8L4HsBQr8ET3oQXEB4EmFUQhSWaRaaC4racTRxltOhHSFauII9/zrcPmCYZv+d9oc7pXiPr2Paf92cH+d7fo0VvNzf5n94zt+nF8PCvfbpz8sZp9eVvzcQjZkKPuayQqfev+8F9LuCgwlBxbHnISqVIIUH3wtRrdZQrbWhUq6hUq5hwbyFaK+144jDjzhkeGik3qjHtj5Rt41m06ZpalOVWu1OfG2tVcbaNEttq9W0RhubtBI7PjpurbV2+5Ydyctf9orXRVEJHe2dCIIIgRehXK7R+colPM+HlD4834cUHjwvdDFKKM5dwQUdV+7aUM5KzxiD9OgaEFzCkx6k8Nz36XzwpE/E9TCEJz0EQYj29k5EpRJq7R3o6uzF7P5BdHZ0o6urB2ASS/fe++CtO7e2Mq3szt277Zp16+ytt99ulVbWaGuV0tZYM3VOG/q3NlP3hImJSftnf/EXH/HDEF3dPajV2lCp1lCq0LXc0daDKCKltxRVEPghuKOhE1GdjmPh8psGqRJcQDgKezE57d6r5B5Zepmk80h48P2A9qF7jKnrhIM5WBPR9X0wMARBhFKpCikCMAiEfgmVUhX9fQPo7xtAuVJFT08fqtU2dHf3oL29C3vvvS/K5bL8zKc/80VrrU2TxKpM28nJhm21WnZsYtzWG013DzDPuac+e9Na2zhObStuWqPpPv6l8877797e3s5ZfbOxcOFitLV3oqOrC51d3W6fdqNcqiIKy5CCPq+4s0NKKVEqleh+ICSkIIXXlwGk9CG4BGMCvhfA9+hYSOlDSG/qGnWgNM6E26ey2I/uIIEzahza3PHzR/pz5JFHHL9l05bRX952h/2rj3/Cju4esz/4/tV2aGjEWmutch99553/lfP+2K/l/9IfAPITH//bv7fWxtZamyWpNcoU6wL6nNdWaW2N+3yz1lqlDf3JjLXa2izRVqXaarXnmX7D9Tfc/trXvv4MEYTeb/N6KrXK3tf94tpr6LM1tc063WeLdYgxz1mc/OL6m37V1d7d+7u877333WevCy+6+CuNZms009o2my0bx6k1mp7DmKn7nXX3Olp/ZfaBB361bc6secdOf7xz3nzuImvtBjoXNT2Gtbb4f23ss1+6yrTdsG5j49GHV23atGn3zZ/9t89/5qCDDzt65coVH7z00ouGi3tDvp4wxhqlbRorazJjv/WNb1zb19fX96c8X4TwvXPf8va9Vuy3f9eL8Xj//Nl/+Wz+2Wqt1ccd98qHjzn2+Jvuf+jxx7590Xe+d/Bhh+7/W57HlVefedZ74jR56pn16+2DDz5i42a2xxqWzmU6CCqhG8aWjVs2L5q/6NAX470ccvAhL5+cmBzJ13nFc2X0XN/61td+Ui6XoxfjuV77urPeku82k69PtLG33377rhNPOvnoP+B+ID5/3vlftNbaLNPFe7DW2k3rN92+eP6i2X/M82vOvPlLN2zefKu11mqV2dGRMZtlysatxLbqyeMnnnTS8hfhntd9wYUXXlMs6rS2WitrMmV3btluDz/o8Hf8psfo6Zu15Oabbr7ZWmvTlO5TcSu2WZYVx0Irba27blut2Ka0L7MPf/CjH/ldXu9bzjn37dbaIWutbbUSmySZ1ZqOjTHGrcemTnSj3U3DbW98/dnvtdZCMk6Kpx+UwMApczOJC6ouA0GbfN8HExxpnCKOmwjDEoGBrIHv+WR5zFIwxjA+MY5KpeIyMSVKpQiNZguVShVj42NoNppI0nRFrgggAOJUYWJykoptLmCl03/YVNytdTbQwPfwuje8vsQYjnheIS5n3DgyaQ7VEUVIORBGHkWY5DRcTJ/snJYXW+wHt/Od8pQXTdt37LS/euwxHLBiBYTw2OjoKJs7OAjp+xifGJ38r29efOeqJ1bfvmto1z2PPPboY0PDO4d1ptHZ2YWoVAEDw9DuEXgOShVYjyJgpEQpKiHLFOKkCc4FoigAs6B4FC4ReBTJkakUmVKwJqFFLjg0NLTJAA1SboRX2NOhLeAUH6Oocai1pripwIPHPBilkakUmmuEUQmcCUxO1jFrVhk7du5ApVYpz+rvWwyASM/OZpSDv0bGRrBt6w7Mnzcf1WoJOSE5TmJSW40FPA8PPPDQI1qrhlLazYMbikxiAlmauTWlgMoUPGFJpQQVdkpn4LkayIh6qzTNqVpH1C46zJjKd52u9E6dW6TSFLCqYq7IHX+Wg4Kerev+lk3RwnYMTDEoURStsFOUZip0yMaVA4nzv9B4Ab0wyt11oB2HpE2zhGzH7rrhkrksVioABedIswwAQ+D7BF3jgBf4YGCVqBSWoyhAkjCK66o3UalUCT5mbZFxzKUHT+YFFke1SlDz3buHJtNMbdXakMIPOHK5IuiYYNCaBiV5Dv/JEgghwWGLmCXr3P9Mk++NOWcGQLbSVBunFgpX0OTWXvqvcJRxwSUil8mtVAalFES5inqjDq0VOro64TfqWLHfvgtn984Oh4eH8fDDD2PRooU49JBDCAbs1IkckF1ApaYp8QAwPj7WvOeuu+7njMMPAjQaTUSlEHGsoFSGRnOSrOWCO3q0LRwleTyPBQezeirLZ1qTBECRXczyPOncxp37mgEHF/SK+WjuQG+cCfhBWMTyCE4ztMopLzn4SkoOpRJ4QQlj46PgXBKrwJCyKaWHSq2EzZu2YK+9lh333vf+5RsAQAgPFhbSI5dPEIR0prv4qNzJWChme3gk6HUKaTE6Wkfmh6jWqvjAhz50zv33PXTPJZd/5xvtbZ0IwwiNeh2pSgBYxGmrmGXO70OMcUDQuakynSsPxbljQGRXIQWs1lBKg4NmlqX0kaUZLBNuTt4WjQetyYUgpOfAgHDcHQ5m+R9dCXr1Ga99zcDAQPu5b3k7Km0VXHfz9dh37+WoVmrYuH4TypUynnpqzdBll15+/Yc++L4Z2fa32CqlsvzoRz72sc/9yz//NYAgjclRJv0per7SBnGSIAxDgDGkSQYuuKOtWyRZBt+TEIK7cSMLozSMOydPOOmEl51w0gmLP/DhD/xjbq17oa1/Vv/Lv/Sl8z958nGnnDi8czeCKESlVkWSUBpEuRwV5zvyzx/GsGLlAQvmLph7IIDrfwsVTpz5utee9cs77vx4V3v7ITt3jkBn4+ib3UvRXEbBk9JFvxkIyaczAxEEEgcdtHzWX/31R17HGLvTWpoBvezS76z75je+fvlfvOcv/5bnYDox7T427RJJknT0nvvvve3an137i+3btj/0zNoNw3vvu2/c29+784H770kGBwaaxx93IgcAZU0Bu4NxSRCTkxCexNYd2x/csWPHH5WUvXDh4trJJ57U/V/fviBOtRr84nlffuOHP/C+d+7cteOBfffZ69NPrHryzt/3sectXLzfXXfc/iYASBOFMJD8gP1XHnDAykNx9113m56eWs+HP/TBG3/TPKrne93/8fnPf/LjH/3ouzes31B95KGHcOJJpyCIZOEiyw9gfu8VPn0+DwwMzPnzd/35mwHc94fuq9ee9drXVqqVDuOgovlaS0h6rl27d7e44H/wzHBnd2/txz+65hwAHNPs8gRd1Gvvv/feJ37fxz7okIOPfOtb3nZOo5kQAJATxJBLjsH5g0fut3y/lwP47h9rrOLf/vM/3zVvzpyXA8C2bdvBHPCx2WjhgYceag3tHvuD1fH3fuD9r3r3u951Gn32mmJxy6REe2cHTj/zjMOXLd3rO089/eTzOgs458FXvvqV9x37ymOPzZIM2hoEpQBWk3uAXGtkOc7Xe77vIckyeIEvP/ih952zcuWBP3z44Yd+46zwm85+8xsv+c7FnwXQpZQlgZbn3BdMpcBMI3oyB4LNYbAf+Mh7z9x7370ug8d9CCapw1+uIgiccuIFaGvrRBiVITwfnhegXCqjFJQQBSX09PTSosYPUS5XwbhArdaG7q5eVCpt6OruQ2/PbCxbujeWLFmGwTnzceRRR+DwIw5FVC15l1/x3euttTZJSOlrtlp2ZGTEdQGNU3e11dOqdm2nunzWPFu9NdRZNdYqa6zKlcVp3a1nK7jKaqvttM7As7VdY11/0hRtg7yTpDJlx8fH7K6du+3w0LBN49ROjjeszozdumX7zosuuvjK4447/jVRVK11tPdg4cKl6O2dja7OXswbXIjZswfR3taJzo5OVMo1tLd3or2tA7VKOwT3EMgAPV19KJfawJmE5B7CsIRSVCmaAFL6kDKEkNIVc6QCCiGLiA4GAS4EQafc14SQCKIIvh/A80jNDfwQnu+jvbMdfhDAEz48P0AYldDd24PenlmYP38hli9fgVqtHQuXLFq4bdf27XkXLMsUdVusta04truGdtoNGzfYifG66/bQgYrjlm21YpvEqc0SY9909jlvBhh6e3tRrbahWq2hXK6irdYBTwYO7iVpkV2qohSUCoVXcAnfCxF4kVNCuVNhRaEShiHNkJOyO01BBZ6j8OZqzrPV3+lRMHv83m+l5L7Q96cK3qnH58V/OZ8iIHM29ZicuzgUp/jlFk3uKjHGGZjkdG4Ium7z1xqGEbq7exFFETwvQBiUsffey7HffisQhRFOf/XpZ+ZKW73ZsLtHhuyOXTvsZH3iWdeELVQ7bZRVijp6q59YrZ94ZNWGN77+zfsAQHutC54MEAYRPM9HFJZRiqrgXGJ6DjGpst6U8ij9oshgTvnkjM4D7pRtUvFFoQRLz4Pv+xCc5i3pGvAAISA9UpKjUhmVag21SjtKYRXtbV1YtnRvCO7hve95399Za+3wyJi946477Jp1a+zY6JjV2lil6OaTqxNak9rhNN/ijrFu7doNixYtmt/e1o6Fi5YgKpVRq7WjVK7A90NEYQlCUMHo++4aE6R007VK56Dn+fCddZgxgowxN7NNvy/dfvKcNVvSSAqfiobyPB9+EDn3h+esg2Tr9jxS2oUgtZ0xAV+GhQIalkJwySCkQKVSRRSVEUX0Xjrae9DR3oP29k4ArOuKy6+8plBrlLZK6eI+mmVZ0e3Nd5I2xmZGWzV1V7XT77L5vTVpJkWD9uYbbn5o1qzZc2UQYO68BQj8ErlAfA+1ao3U8rCMarUNDILcKaUKAr+EIIhQLlchuHO1cA++H8J39nYuJDiT4OBFTBFAoxVk4WfFfkHuuhAchWmE5SZy+UdVlRYvXnbI6lXrNjQmm/bLX/myvfeeu+2WHdustdaOjY7bdWuesju2brN33XHPLxcu3KtvRrn9zX/6Z/eF//Jvn/uUtXbSWmuTVmJVkliVZjZNnavMKGud2mmttUZrm8ap1VpZpbXNYmVVZmyaZlZlyhptbJYpqzJllVI2S5XVGf3u6PjItjNfd/opz68ayspHPv7Rj+8e3bnRWmuTZsuO7B4hhcRae/U1PzS33f5LY621KneXPEsx/fKXvnL+b3rPBx1yyP6XXn7ptzOdTlqdq3DT1lXW2l3DQ3bd+mdskqZTa6tcYZ1mc5uoTw6ddtoZr5r++LVabfDqH3z/J8/n4JiYrGfPbNy4/me/uP7rJ5966iF+UPJf6HV+/KOf+PdGs+nuK+TuM+59p0lqn1z9lN22Zas96ZRTX/vHPEc6Orq7f3jNTy/MUrXqFce+8ravfONrT1prVZrQcXn04Yfueuvb33rg7/v4n/j7v/m4tdbqTNutm3fbJMlss9Gi63p8wq5Zs2Hkve/94Lm/7jEWLlm84uprrrnaWmuzNLNPr3ratuotq52rrlDapt2IjdnTrZjG6dajjzrmmD9kX82dP7fnqbWrHyL3g36WG5L+ce89d1/0YhyXV73qzBOttcmz1yXWWvuDH/zwu3+IunvZFd+92FprR0fH6XPeObystXZibML+17e+fVF/32z+xzjf9lu+4pidu3ZuttZalWZ2aGi3zbK0eH/X/vyGy6JyNfgD1d3ajTfddEu+1stVf6Wm1nLNRuuulQcc2P5Cj3H00S9/x87tO4fJ2ZVZraiOSpPMZpkpjvn46IRtTDZs5hT+LFM2c07PD77/A6/+Ta/1wJUHnzEyMrY2d4PozORl2dRa9AWsY+Qwye9pw7tPOPGkfaTwBAIvRBInyLIYwiNroe/5RBKFRRgEIAVOO8qexfj4OIzlCHwPfuBBG5qxyrR2C1GG9s4ajDLIUoVyJQIsw+5dwzjiqGOWn/2GNx08MjqKSrlcWMPCqESzHRbOwjmV8TklkuUwH1vADxhjNHjC6KviWbqbIbHoOZOWeQIke54ZyxxUMb17pLVFPNnE+CRlx/b396OntxvrN27cde3Pr3/0mbXPPD050Vi9dfvWR2675ZZHVabqs2fPgtIaYxMT8CTN79WbTacQaAA0U5tmMc2t+iGEx5GmGYZHdtPiXXqA1cjSlN4jp8Wr1hqcmQJuJAQvAA+58gomoHSGNMsozoNzmkdUVFAolUAIIsPmx8r3A2Q8KyJM0iSFtSkss5g3fwE2bd6Mvr5Zg7N6+vtz8IQFoHQGCYoDaWvrRE+XnLZn6VXmCpPnSYxPTO5+YvXqXwEWzTguwD1ZmiFDBuEJcJfVKrhAHMek5ApGs4KckVqdQ56MU3fcz+Sz1AQQmzqehdpq91R4C+XVTmXkYhq47NnAjd9qVvc5Ku8LfT9XDNkeMK28m8+KM9jtTfe+cjgR5wxScEgZoNVogUuaQ6RzjCGMIgAWjXoDXArolGa8jdLQDKjWqpg/ONgJAKnK4Ps+oiCENaSqazuVRcoMc8Rrcl3AXafaaLtt585Na9evHRXCQ6ZJMdQk8SHJUlhjICWHlA5C5N5jnqFs8+vekpporJtTxxT4JGc4Y1omrzUG1oGWPCGgrSHFTkgkLXI+VCtVKK3QrLfgez6CIESapeAc/uJFi/ZpxQm8wMO++y7Hjm07ivudUgYmh4lZIM0okq1cKhWUbcaADZs3rR2fmBgy1qJer8MPyIGhM4UgCui1pjQ6YrSG0U7VZAKaafeeLLQhWjwYJ9iST7nZyu0jmsECrGCF+8BYCv2iuWRybHCn/E9XkimGxzp1yjkKOKnCzEWuaUX71/dDeL4Hm2aFmuVHPgZm9eHxxx7Dn//5n73lDWe//szh0SEYY213Vw8zRiPL6P5jjIHv+3tcLnza+b2nyEtfb8YtTDaa6G3vxM5dO9DW1oFjTzh25emnv/rcb33r65+bnJiEgUYQeNBKE3nbWuISWKLTZ1k65RKwU2RqxgVxKIwip4zRECz/nCHIltaaCPa5I8Q5DbglCznnRCQHo5EJwwwYuLPe//G201512qsXLFww797778Xg4DxYbnH7Tbfi7HPOhsoyVKo19Pb120svv+KWdetmsmF/CyWFv/YNZ733b/76k58AUImTlPLplYJWBIaEoVn6zCp40kMrySAFhxd40JmDBXKaTyW3C20ij1IDI76HsdCZRnutY9bn//PL/7BgyV4PrV/zZHGM5swf7HrvB9//sS/8x+c/CKCsMgVlLNq72sEYM9+94oqnv/zlr8Tfv+qqZQCivJ1qKbGr+Dw96ZQT9x2cNzfavHHT8873LV6y5GW33/HLz8/u6z9EpQpxmiIo+8XHkTEWgjFUS2XiN7CpCPtpDDwYSzO41XKl668++okPlIPKPY2kPkwul/HNBx160N+tWHlAumjBoqOfenLNrssuv/y2Hbt2PrRly6b1O3bs2i4FX3/fvfckL3Rs3vnOd+19/vlfPK0URbCaXlPu7uMgV+GyvZZi147dOzZt2LTqj3mevPf97/vAq8981TsBsP++6Nt7P/jIIxgdG0FHeycsgBUHrDzsiEOOPAjA7xy5wnxeu+WWm18NAK0kRVQKIKSA75O6niUW69ZsaF3zwx+t/upXz3/ex1iy15LDrr/+2s8vWbjkKO0+r5bsvSQ/oI5mz4u14RT/YWou3FgDL/Bmv/Xct7wOwO2/777iXB5aqlYX59eAcTd55pxhSil89atfXXPoYYf/wcfluGOPPROAn9/j2bQPk1Wrn9r82t/zcQ84YP9XvvpVp5zWqDdQqVYKS2j+GVltq+J1r3/dEV/5+ld7Aex4ke9J/uXfu+wdvT29c1qtBJ4UqJYr2LRpM2ptbeju6sLPfvKTO5v1ieQPeZ6TTznlsONf+crD87qLuUV8HusIAI889mi8ceOG51Xijz7q5adde/3PPlWrVjrTOCtGJHWmiQskGJ5YtRq33nIr3vq2t8ILPFqzawPGaXQPAEaHR2f/ute5bN+lB954ww3/3NHRtih3pxYuEYZpfAByXq5atcp2d3Wx/ll9tH506zUwoLPW3h0EQVXmC6hc/2UMKFcIVMINg1YGSZxASAFjDaIgQqvZcoAZmpmjyCJS0YQUaK/V0Go20ajXkWW0IAA3aMUt7B4ewhFHHvUKAF2Ut8mhtEaz1US1XC5kavuskzgvQ3PQTbGIYQX6B7CAtgQtwR6U5ecvQxheuHax1rjoDIYsTrF50xa7Yf1GpGnCSuUIcwfnYse23ZNf/9oFP7ns8ssu2TWy8wEYOxKEJdPe3g5jQQveVhOZ0gh9H0YRfKkVN2C1RuAHgAX8MECr1aBFpTZuRiwDGCMCtieRJsq9JgFmGRXrHNCG4qIY4zC5/dUwKnasLni/vi+hNQFvOOcQYPA8n8BgMQGshJBIlULgUzGQxRmkJyCFgLWcPm44EEQ+Dlp50NI9LN+cgAEMnGJzjAakJMu4o5iSRWrKznjbLTc/vWndM5vbam3gUmKiMUE2Q1ioTKHkhbBMQGd66uYJimDijDJcCzvnNNJYDuexBkiS2KmEOdV5qmjCNEryHuwp+6z5WjsNrvM73Vqmk3nw/DlI7i8UEWOmns5OFe95AZ5XCrnam3tN8lxQrRWMdvm83I0LWEuUb+NuNkLA90gdpIxjjagcgQuO/tkDtVyvEm5BP9lqIPA9CMZgALKsGOZmQy2U0qjXG2ivtGFW/2xx1fevfubRRx4ZLZfLroETQENRFrfggCASM4MgQjCfKuSZo6TngINSVEKcxmSJcYUxZ7wAcuUxPjktPfA8KpKNLmxAzJLS73kSI8PD8AIfpQoRqo1R2LxpE5YuWzz3rNe/boW1Ftu3b8PPr/s5dGrwzne/E4V7OS+0GUMYSFhL9ztjbBGHc8V3v/dAq9Wsd3Z0IM0yyo7UBBnzmESiM0e5BrShGC1rDb1fS/dJgi9lBZXeWIs0JTI0Z1N3LeFgOlO0byq8jbGFzV257xtjnDrOIT2BuBVDaUvOB05RIQX13FiarfZCKG3QmGxCSI4g9DAxPon+vl5MjI2hv2/WwR//2Mf+EgD8IIQvfUbgmSbNVXsepJR7FLU5QdpYAgTmOeDTL7PQp7xvYyhypF6vY2ysjte+7nVvefChB+985KFHbi2VqVHh+z6MtkSpt1RkeJ6HuNWC5/tgsNTACyIEvo9Wq+WihJyF2s1O51m6RhEh3JM+lFZQjgpvckq2BSz4tCYHc1wwjT9mDO+sWbOXfO+73z/eGI1HHnsEJ55wAlatfhxPrH0KALBj1w4smL8Av7z9zvv/6Z8+892PffzDmNl+/faK44896+KLv/PXDKg04gRhIPDU2lXwZYT5g/OLhk2aKoRhgGazSQWsDNy4DBV90pMwFuYXt9+6+olfPbHpxONPWLH30qUD1MQzLpaQPmOU0lg4b97hr3rVSS8D8H0A6J010PHWd731E//x2X99P4BSlmZoTDZQbauCMWa/c8nlV7/rHW//fK292r9u3bqvz57VHwnGisUeLTSp4N09NLTj1xS7h1933fX/b3Zf/yHNRovcP6FXJCAU2d6wCIIQfeFUsoiYJjxQf3PKUn3M0Ued8B//8W9vBfDF/OcfvO/BxxYuWvTW/ZYfMFirVuNLL7t44+8CRNJaH1it1vam4jofG6Hc7vHRUVjLsX79ZmzfteP+VOmtf6xzZOk++xz22KOPvSX/pK5Uq6i1EfcijjOEoYfxkfHkkosv2fGe9/7F7/z4L3vZy5a/4qhX7E/3UI8o8vm+NgbSAw44eJ9hKdmG5/v97u7OI6+48op/XbJwyVE6Uy6Gj8j7WZYVIEVPyOcuehmKNVB+B371a047/Iijj+y4+467fmcAWFQqRd+44Juvn9M7UJ1a79A5mqQp1q9fj3KpVB8eHX34Dz0u+yxfvte999xz3FShSOsSAswBY+Mjm37vBscH3/eGcrmts16nUZkspUawlFTnCCGxceNm3mi1XvQO5wGHHHjwKae86gwAJDxaWutGUQWlUgWrn35qzdXXXHPtV778pT/oeQbnLzoKLjrIWgttLLgkiGW+Nr/lplseHh4Zfo51uqOrc8Ett9z2t7VqZUGaZICYcizCEtwUAL5xwdfvuuSii0cPPvTAVx12yGHQmaJxrGnrgY7ujtqvKf6DS7976UfnDsxfoTJFjXKOItmEFbUfsvsffHDNRRf9N0vTbOAD73tfrX9WHzJjCO7nRsOE5KiUo0gabaBUq4DmwFKhlCYZGMhqKCzNhRoYpJlCGJWoMDFAW1sbxsfHXP6fh+6eXlij0IqbUIa0VWsMhoZa2LR1K0yWrjzhxOPOAoCgFBWE41q1BslJ4YBTeIqid1qXMVfzCGc/bfLW5XIwg18Lzf31PF07TTUCzUoai527dmHVqifY3MFBDM6ZBy/wcfMttzz8N3/9t+dv3bbpaul5k5VaOyTj2DW0E9u2b0WpVILv0aK43mxQjikTKEVEm54YH0eSxABnEJLgKdZQ/JJ0kBVDbTOkcQylKTuXWRCsKa8TrMjXutAmV8cZOIQjG7rFpaU9lyuGBgatpAVPeOBuYSo4/U6z0UDkmg9CUKPDlwFmzRmAL30EfoD58+ftl99s8kI777YIxqCsgcocOVnQ1y1znT9D+3fT5s1rUqPGfenDkzTrLYREliak0imDLNNuoawAw9zfqaPOuIS2ipROa904h1v4WwsuJGX05rOwjsJs8qKR82J+Mq8sn81ehn3hhsnUDO/zE5vtnjXt856A1lLMEgMr5kXzopPmpuzU+c+mOlaioFEzF61iqAlijGuEpG5uwoeUkppWVsBAIY4N2jvbYQ1Rj40xGNo1hO6Orgo5Azx6TChwSaRw4zrB+TmROx50prFzx3aYHoP2tjYkcXOrlDIGgFqtgrHRcaRZAs8PABcplcT/n73/DLOjONPH4buq48mTZzQa5RwRCoBEjsY2GNvYBht7k9c5YuPwc14be9c54LiAsck5iZyDyEignHOYHM7MCZ2q6v3wVPcZEbxIwIf3+vvspcvaYXTO6e7q6ud57hRCaJTRMDlptxVFE0GqRF/q+57OWNXTYqndrHVjWHtgqyTTlY2K25FKwTIYstkMvKoHxjmy2RxEGMKrVmEXLAgp0N7e0dHc2jwh5boY39EByzEgwgBm/CAFq+03iVEyq+VDAvCqPnZs27Ej8H2MDI/ArwZgzIBpWHAcB0KEgN6EFRQYV0k2cWzKpaSO6ABDJBU1UgyQodTHSA8VcgXWml9FcVFJ86s17LFpE+cGIj+E5ApSRDpaxdQ0cQY/9PRAzCU0Xbs4C0mOxulMGkEQoDRcQhSGyKRTCCNR97Nf/vLCadOnzxBQyKYzUEICUsKwzYSOndxAmgkQ7w88iUtSiaw91gf6oYAUIdLpFBQYyiPDaGtvxztOP2UmxA+/eNZZZ683DKO3kKqDFBLlsKw9D2xIJeBaFqIgRBTQcME0LQgRQgiVNLYMXGdHCx3HR/pmSGp+Pd8n3ZlB6G8kRW1fgZYNcAbOlGY+AG9nBOgJJ59w/FFHL16wetVK5HMZTJk0EXffcx8aGpoJIRzbDr/i43vf/f7VxeGhjfjn6x++2lrax999791fybrpFs8LkHEdlCrD+OtfL8OyY07EpImTEIaEltmODUBhuDiEuoYGcIMj8AMYFpkmDhWHD/zg4ot/dfkVl1430jd4YMK4ycf/5jc///77zj33VMOIn3UKhskh9HOvrbnpnQBuZow1ffVr/++7P7/4J59kgFsdqQKcoa6hDmAI/vS/l1765c9/5WdhFOw57oTj5rrZtAfQ/UnDPjoeN+2i4nm45JLfr1x2zKttTbKp3BG33nrrT6ZNnXJMpTwCEQqVSqUYGOAFIRzbAhRPGCxS0RAp7nJp0MeTZ52I8+KlALMMfsoZZ3x0ypRZV2/fvrE3/swd27eXAWwCgKuu/tshXZ/FRy0+kigXoAB0DnAYGB4uoqu7B23NY1Gp+qU//f6PN2/bsmHk7VonH//kx97pWubk8tAIDMdGY0MDTjvpZIpMkgqua2FgcGjD/s7uVYfz/q2tbacByFWrHvyqh3whj8D3URqpYOv27airz2Pz5s0v7dm981VutjNnzjrl6aee/tn0GTMXhX4Apfd7KQUM0wBjho5s4yj7/v7L/vznFwKvWv7ShV95v23bqaQo0bWFkBK9ff0NftVzDws1fPc7T/rXCz72rnh9CklrnnLQLUyaMgnr1m3YtH3Hjje9P513/gfPzWWz00MhYSbPU6rtKuVyccO6dYf1GVNnTT1i1fMrTwdAKRZhCMswtSeKgm06hEwWB/f5flB8q9fbccce9566fKEBCrC0iadSDG2tLWAc2LhhS1/n/v1Db+YzUoV6+w+X/P5IEUmEUQDbtIjpJWjwrSVRleeeX/nQqwYsza3GZz7xmc8smD9v2WjgijFARLXYsPsefODB666/6eJsPtcgZHgUgGbOiZEarwnOOSZNmtD2et/zIxdc8OkLzr/g/VLQwN9JOVRJCCC2ddqxd/fmyy7/69XXXXXt3nef/e6zvnbhlyePG9uOUrkMgCW+UzFw2tjc6JimbUKBzKiYdgH1Kl4ScSMkFVD5fAFKSfQPDCCdTsE0LUAxmKaBVCoNzkxUvBGUhgfR19sHpSSCMEQml0djQ0OuvqF+Qi6fW3rmO8/8lw998PxjpQLSjpsY9PAkkiXOmjzYwzahoY5CBeLJghxlNKV9WF43NIa9JsgmNR3WGEUrjTM+GFpb21DX1NB1oLdr1449e3o2rNuwZvnyO2/bsWv7qsamRtiGjcHBQbhpFw319SiOFGFbFqIggOd7CEWAIAjAweAZBmXHcm2QIiKEYQTODQRBANOwEEZhQj9UWo/K40Y8RtbCEErryUQUQmlqnlIysWg3TUNTdGkhRzICY0ojsNTchTLQOZIcSgZwHAeZdBaBTwY/9Y3NhLr5ArZlolgahohEbuHCIxcAFIVhaEqgYrphtw1YtgklNDE4NvpSDEKbYADAvv3714tISMkJJWScIfQqNPPgJhQTMKxaXIthW0lsSxSFFFHDiSIao1wxEsoVIWlqVMMYV9Z8VCZpbWGoUaAsG5WB+3qjkVE5g68F27LRyLA6mLiparE71OjKpHWuGVvV1n8c4aBipHcUehcfn8HIkVkqTWNmIMaAVGTco5spxRmkDNDT042Uk0F2TB5ccUyYMA6Tp0x0AGBwoA+248JJOXBdp4ZOjwKs+3r7oZREc0szmlua4VUrGGYMFa+63zA4qpUqwihEJELKsY4ov9TkDkzLTChOURTp96XrJbXLgNLUagaGUESJvrV24+v8a9DaNbmBqufRwMWwdLNH1OFQKdi2DaEkKtUKUqkUHEU64bq6AqrVan1XZ7fd2NKI4cEhHHvMMYhCReuNSb2+2EG0voR2rn/Q1dmr5s5f4D33wvOoVqsU46QHV+VKGUHkw7XtJFpNJRm1mq2iXWGkQG3goWn6Sbac0uZc8XnSiC7XDZgUteEJTdcpt1uCBkKckamb4zgQUiCKCOWMBw3gDGk3hTDwIZRC2nWTGKZcvoCxY9qxdctW/rF//+h/vO+9732/73kIoxCpdFpTiBnSToq+W0wqVqPYFJq6HoZEmeejacDJeZUoV6uwXRuN9fVwLIq927VrLxrqmt912smnv+vRJx75e119PYqDIzTsIksxWNxC4Ic0jNWNNeMmQp+MiDhneg9kSSoBGWjR9JCM7+j5o4QAYEL3xvqY6FlBWdfQNPea9v7teDU21Gd+/avfnMF83/nJj3+Ec84/D5Zp4Ix3noa2lhZ4foBCXT1WrXx5/bad2+//Zzv7f7+OPenY8xctOvIYKQHHIUTCtlP4xte/jXw2h1BFhFzoGkREEVpbx2jmkYBpU4Tjls07HrngY//ykxeeX/Hwb37+MwDA7r07npw8efLF8xcsnDVlyqR2xukekJK4AQBwzLJj3332e8++4YGHH5h0+imnHwkFMwwFYBlIuTa8arX7S1+68H9uvPXWP/rBSAAALS1jRMZ1/YOqFn3vKyEhwtBvaWrZPPo4Gxpb+SlnnHrWg48+9K2lxxx9dBD6sFMueNpI5rSuQ4h1HM1omgY4oNZv2LL1zrvvWPHcs0/vXbrk6KVf/8bXz2CMJ7nrTGkDR6XQMW7c7HHjO2YA6H2z18Zy0vYdd966KH7GJnWhvje7DnRj2/ZdaGxq2XrPfXc9+PZR3rnx9LNPLgMAJ5OGaRmJzMm0TKTcFKIo8n/zu99csWvP1kNGmceNm5B/5NFH3wUA/X39SoiQ1TXUYaRYxkhpBOlMBiLCgVvuuOOm95x99sGNckvroqeeffqnUydPWaQExarRMJpr1hFg2Rb6+4aGbl9+9xVXX/P3Pz760APbJk6anP7kpz9zum3bqZjxxTRF3DAMlCuV4e6u3sOKuzl26bGnAmj2gwiWaYAbtXmnYXIYcLB8+V2PbFy/YdebuS4trW3TH3nskfcBFAcKKXUtIWBaJlavW/fyC88///LhvPe7z3zXOflcYYKSgGUZEEoAXIEximaNZSvPr3xx5a4dW8tv6RCuvW3sY48/8W4ACKNQy2oOlv1MmjDhiB//6MfXX/KH39xwyR//eNuW9VsOufkdP6G99R1nnDrPMDkYc8AMqjXiaEMO4JHHHn/qoUcfevaV//aYY455z0/+58f/qoQiZojBwQyG0AvJG8g28NJLq5/7f9/8zlf7OjvXzpg9fc7ECRMYAAgNlozO4z75lNMbX+s7nv2e93z4mmuuuQhASogIdsqihSSZNu0Efve7P9zxs1/+8rv7du9Y+/C9D7X86Pv/dU59fcEZKZVgWhYc20n2DiEoP50bJjdjdMi0Lc1X4cjn8giDiOIZOMPwCGXqAgwpN0XuwVGEcqWaTMOzuRyaGpuQSrkwTRvtY8emTz75pA8edfSSd02eNGVOY0PT2Lr6fCGdStEJkK/Ax1RNLzK6h4j/m2IH00tHtxo8djpNppEMNdXoqMZZaWUNIxdflkwxmUZMJHXM+uVVfTzy0OPbVq5aec+NN9+wfM/unS8ZhlEaHBr0c+kCGhqbkM1Tw2CWRhAGESoVoiZXSlVEIkQq5cKSJiG1QYgoDGGYJoRSQBRRxq0IIBi5hFJxBdLwaboSZ5zoj1qT8UpKp9JusTG5GxrVDEM6XlPTRpUEuEN0VSgG27KTrFND6wG9ig/HJt2Mk0oRW08JpDMZQCiUqyNobGzumD595syE7ol4EEGfIyETgygpNUKmfyfm7/d0d5cee/TxVTISyDcVUCwW4XteYqkdhJ6mkpBWM6Y0QCko3TCMHmYwKEjFaBrM6HrGzbF+gB1MRdTfdLRO91XNrXqNKYl6RTv6D3jxyWBmVL7vQb8+WtOrzx9lmI7iP2tahtIIOhlwMX1sSLSuUJRJS0wH0rvGmgrGFemhOddorQEmgVQqBdu20NLejP0r96Bzf6cTeAGqFV/YtmtwzmqNplIUvcJoWJJKkVvo0OAQAj/E2DFj0dnVJfr7BjqjMCKnYMHg2C78IIBhmAkiGYkoQYkp0zaeN9Tcq+NzxTkn2joOZoZLldAKtH5c6CGPqfU2EkwxRJLcmRsaMhBSYXh4RDusA1EQoVyuYOy4jqZStWQMbB6AZdjIZHIYVhWYjkWN4ut5cbMarXCgr7+ye8+eYdt2kMtmIaVEpVSG51cRiQi2aUEqkMu4IsSCLjXdq3EurICg6ByLaLUiEgBIPlJziZfJXoY4R5ZzhCrUNG7aTGVEwyXbdvRUlUGGQmeeE+0/lU6TbMP3icKpqXCWQ6ZWfrWshyccgOKLlyz5wIVf/OJnAemWShXYLk1eacLODnLFH72+kwc3Y9pbgL3i9qLd2rTIIGp4uIxCPove/j4IEaE4UERLS5Pz2S989mOPrHj4Lq9S6VciQjqVQbnKwE06XtM04QUBrSRuURa6RtqEpL1UKgUhQ9i2C664HjpIQJGzbpxBCkbIR9wUM4Na6zjrWcUpAnoPfTte7e1jFh179LIT+vsHMXXmFDV33mzWP1TEqmdX4l//5SMIwghSRrjrnrvuGRkZ2Y5/vv7ha+kJJyz+8x//cEFMlzUZsOLxJ9Dc1oYZM6bTXiJDYpVEEXbt3o2WphbkC3nSkxoMjPHwwQcf+/NXv3Lhd9esfelVSM+OHTse+8XPf3nbRV/76ueY4lCaOSQlPSGPO+741uOPO/ZDjuVARgJ+GMHgDCnXxoHOru2f/cynv3f77bdf+5f//XPynstvvzP82AUXyNkzZ+k7hSfafW5wDBdHDqxfv/YgPevpZ5xyzlVX/e03tmmPp/ufmB3xvss0o0FqWZtlm4iU7P3+93505Z/+9y+XD3Qf2AgAmVy+8dR3nrli8RELZsbPT6Yz3oVSyGZS7rKlS+YCWPFmr8/cI+fNXLxwyRz6jjKxeVQMSKcz8CMPTc1NeODee54oDQ93vl3rZPK06XPaxk6aS2ifURucQyKdSkGICL+95LeP/u53v7n1t7/99SG//9iO9lnTpk5epCTgOC7b39WHCQCGBgfR0NCEiRMn4Bc//81Td9+1/NHR/66jY+z066+79sdTJ09ZTH4Mmm2i6ElkMJK67d3Xufezn/7sD5ffddtlH//3CwAAJ558yrJCoVBX4wFTDRQJAcMwMNg3NFwcHvYO9Via6pvGXnXV1ScAgGWbACRobFKr26uV6tCzTz/16Ju9Lme/7+wT5s6avYiQZAEzAQz0fXLnHWt7+3r6DxndnTFjwaOPPHx+vC9wg8PQw+gYzWQc8PwwuPWWWx656MIvvbUsnmNPfvfMadPnhhFR00UkSUYqKdVBKYUFR8xPH3nk/HcAeEf7mLEtAH56yA1v+9hpY9vaJkmpmY+SBtOmQfKeasXHf1/8P/eWhwcPorVn8/X5m2664V8BtES6rg6jEDbT4ILJ4YViy3e+/f3vv7Ty+bUAkE6ns66dyiBmRbHYe4b20fUbN5lHHDH/4PNwykkn3XLDjd/K53IdYRgmUlopyAfGAMOTT664+ze/+e2F+3bv2AkAnZ2d/Vu2bXOOXrIIgR8kfjXqFXr1wb5BwePmiBEcBhkJlCtlVP0qGANchxxDlVQo5AuoK9RBKcBxXGTSGTAATS11mDB+DAq5PBizEERy6nvP/cAPfnzxjy455+z3fGje3Dlz2ttb6+JmVwqV3HPQddLrQbAKo2SW7HX4yEwBSkIpSQXKqzAyVQtSV3G8ykHjPHDTADiHFMCzz6zc/ac/XXbzRV/7xkWf/NQnL/jeD7590dYtWx8KheoPAuHn0gU4aQfMYBgsDmJf5x5EMoRj2vCqVURRpBEXAa/qQUQKJjOpyI8pxTJCtVpCpTJMVGZtwsQ4ACnAGYNtWZAqShozqSgVnimK5bF1frLJLbLrHxWhQdM7bdalFMKQENEwFLR49MmUWqNGlEQGy3ap6APQ0tqCMIjgeQHctINCXR6DA4MYM6ZtViabbk6aOVZrOgFACUAIIOISitcaUzCaXgFAV1f39q6u7vWRCFEql2BYhAoTKik1uM5gcpMoN5FEFAakg9ZTPdMwdTMoRyFEurmHouYMsTxd8xG1UY/StvkH6cRZDb3Fa1GR1euw4PHaIG/cYL9W06ygqamjfsaTZlfrHSEAg/KSucGhQN9bytofME73k6J2iTEGU+evUi6vNjyKKGpCRRwWs5FKpWFaJiA5env6MFIqw7bTE2zHRjaXN2zHgcWtZExbA7FoY0xn0khnUohEiFw2AxD9L6r4lUGhBBqbG1HIFYg6yzkh/lJp0yToDQwAM3QGLxVdhtaCK11QJWhcTDlXpJnljCUDIp1ITKMWIQiFMSwagogQpmmhXKEBSjaTQeiHiCJCe4PAx5y5cyfa3DQD38OMWdMxaeoUzJ41WzeYKhkwjV4CSsoEjQWAocGBvVs2b97uuC4c20XgR/D8AIwDmXRaDw0oWsm0TMAgEwzSM0O7i3N9TxLdKBIRDY+0Y7BSCiqSyd7J9fqNIqLw0j5XK2AUo+suRETIsoy0FpjDdR0azFUq8D0PluvAsR1YnNZaFEWo+j7R44XA0GAR8+YvmHvNtdd8bfqMOVPKZQ+ZfAaZtFvTEcfnKln/bJQZtz5/khBSkZj2IYmHA+japiwXoRegt68XA/09cCwT02dMU3v278aRixaceP6/nPefXd1d8ESEIArADa4pTA4sy4JlkhOz69gQMqJ4NUlsAcd16VwCCEUEKQWUErBMogBKobU/ejBnMMrc5ZqBEE9mOTf04KSmA347XlOnTD0qU5cd8/cbrkU18Nj8ubNw791347prryZk0jKxZv3aXZf84fe3DQ32Cfzz9Q9QO+acdea7PnLE3HnzCR2lG8m0GYR+LilBkiFSExnI5uoQRRGGBgfJG4Bz/P3aa/70gfM+dNFrNbvx68Ybb7o/ioSvdGEeD+OlFLB0FnTgBShXKnBcG7Zj46XnVz513vs/8IXbb7/92le+3/HHn5heuHBxQZPOEkOpeNVt375t72OPPpEgjbPnzp/01Qu/8g3btMcLQfecyQ1AUrnEtdmWFBQDaNkmdu/d89J5H/zQZ35y8Q++FTe7AFAeGe6vDFf2xHdxLKUBA0ojIwoAxo2fMP4tKfyPP+7IlubG5oPmzXo42dnZjaXLlmHmtBmVO++666W3c6289+xzl2bSuTF+GMRzZWK66dp11Uur+g907r9PKXVYTfe0aVOXADAVU8gWMhjbPhYADa0pNhDYtm3bqr6u7gRJnDVr9ti///3vPzv51FPfEfnEyGQsTm8gVhU4sK9z375PfPKT311+122Xjf7MCePHLgJgJwwiRR4c8TN5cKB/0OCHHhl0+plnLD7x5JPn14YUPGGjxfXV8y88/+za1WtffrPX5ciFC04AABFEJF/Udvlc77+Oax/W9fj4x//1rHFjO2bFTbrSZoiInwX6OHbt2rFz+/Zt69/KtdbQ0FT3pS9/4X1UF5HE0TDpmeoFPvnhJPE7tP5amtoWHc5nzZw2fXF8bxEb7FXMxXK5PPzCqxvyY888/ZRTTyNmidA9BhCFIbjJsWP3rjWf++xnv7Kvc1/Cujjp5JPGNzQ0peL1xl5RB5ujM2cBZLL5cRf/8OKvNze3zA3DkJhXcXyiloU88thDT338Pz/+7R07tiRxRr293fbKF19w6XloQ4TUP0m958az6Lr6QmhqVgplt0oJEUVwU+QW54UeBATq6urBGUN9fQO6u7rRP9CHVDaDsR3j0MQbkc276O3vRXnEG3vUUUeffdFFX/7wO975jqWlUsUSUsC27MTAJO70eYLAvpaqtvYzdhCJ9JWN7KgGQunICJ6Q6Q52X459XZRExfNhgGO4OOyteHLFgSAM+wuNhaFt27Zvf+GF559a8cSK5/r7+nZEIhJuKoW2tjEIwwClchkSDKZhoFqtQMgII6WSdsi1MFwehuO4AGeQUaRpcgT/VyqVxGTJNDgMy4QU2liKk35TCtLZQSlUq9UECREyGoV0G2AGEkMVxjUlXDcNlE5jaI44S3SahhFf31ifI+F5HhyXdAnVqod0NgfIEEpRFMrw8DC8wEehrg6ukwLnDEEQYMas6Yttx0EYSXBIMMPQucexswtdAY5RHPOa+BFQwB13LH9s9+4d3el0liY4kYDveRRDZFJWMFEOqQhRUoEZhna9JFaC5rOPMjFTyblUumCJBzpITK9oDMAM3bRoavdBA5dRZs44JODmNdbyK1gLKslv1RQpVWumGGTiCpt8CaUw2pcrPmzSaesmiLyGoEaTrfXxen4VQpLuXkDqLGYFKRnKpQoKhToYhoGpU6d2LFq8ZG6l4kHKCP0DfWhuaIZp6SknWJJxykYNkJqamiGEQHFoCAN9feG2LduGOOfIZrLo7e1FtVKF7ZCZVCqdQbVSoabLMIiKD7quHByK0xAjishRXDGutZGslt+qmybFCDFJYqI418Mbapxsx04MGVzXRtXzUSlXYHITpklonWWnEcgIy5YunTZ5/GTs3LUTGzZsQEOhHvVNjcjnMomRGEON5i6lhB8EcCy6d8rlKjZt27KmODy4KwpCGAAkIjCDgXOT9LFSoVKpaPOj0W56TN/jkoYgnD6HmmH6NSFEwt6I6bOcmxBSJIwVEdPepaoZx+n7TgqJtOsiCkMITvdOGEnS3msWhl/1CRmHADcYpJBI2SYAE/mcjcD3sHnDhuOYwRYpRdTOdCql0XSlKWyEeMuE4MxGmQ8yXWhT816uVuB5PgoFigyiGlqBKyCVtpHKNBHVq6UV1UoVPT3djHEO13LMy/5y2VcGhko99955zxWzZsxGd1c3evv6AYMhjADHTUFJhcD3qRF2tEO2Ygh8H1IKmLZD7JrIp4GMZdL50m6QUghEWtcUP2+UhN6vyZ1ZQcIArWUF9XY0aObvL/n1kW1j2pBKOzjyiAUwuYUjFy9Bx/iJSfrAfQ88+EBfd/eL/2xp/wGFtH0cW7p02bvPec97PkBFG7FMhAywYOEiuFrWKGSI7v1daGxuRirloq2lCVJEWPXSSkyZMh23L7/rqc985vM/9crFf9gYrHp51WMrnntm50nHHjczfj5RRqgEQ2zCqJDL51AuVYpXXXnllb/6xc9/s2XH9h2v9X6ZXLYhX5dvJbSE1542uhB30nbx/ee+XwHA1OnT2+68a/kvZ0+fcbQIdXPKa6ZTjJFDOY/TDMCw4umn7v/YRz/6/3bu2PmqRnL8xBljHn/8kSnxlhU3F1IqDBaLsCwHg4ND7ltxnWZNnXFCjLIxPZCI/97S3ILHn1iBcrW6a8aMmW+bWVXOrWd/u+qKU1sacvo4ZaL7j1/XX3/j5muvve6ZX/7sV4fXUL/vnMW03iQcy0GqycXAQD/q6xpRKBTg+SGqlZF9o/YC67LLLv3mqaeeds7QwBCy2Qw9FTnJKxgDBoeLWLV29c4//fEPFz/x+GNXv/IzJ0yYSE1pJBEK0qhbFpllAUDf4OCBYnHwkO33lhy15MR0xnFiAKTmrRhnzEv85c//e//+zv1vytV4/lFLZt5/713H0zORENAgCGBaRrJHb9+265Ap0/X1DS0PPHD/e4h6q2toxg+2XdH/z8svrX5xsK//wFu53o46+ugzjz122QlRRH43Bo8dyYFMKqXrP03vl3QTD/QVD4tSfdY5tO5iZmZ8XJFOJ9iwaXPf3n37Dzq+6dOnz37g/ge/alpGpur5MDnXLENC9Hfs3ln51Cc//esH77//7oOeX5JPeFXnFi9WAPPnzUsnCHK2YPz85z//8gnHHfdOPwiI9WZpWW1EEr1I+YM//dkvfrNl8+aDMqlnz51bf8pJJ7cCwGBxEHX19XBh69oHCYjU2dk9YlqGBS8UyOQLEGEEz/fQ2taGnv5uhEEEzm1ksykMD5fQ09+LxqYG1NXlUKqUEQUVhBLo6ukeu2jJkad95ctf/uhJx51yiu2aXCoJJYkKN9o6PKEnjqID4lUgGHuNVoIlvUNs7HNQI6unnVIKch0zTGr2AmoobZdu6n079/Xf88B9K194/oVn161Z9/zOnds3WZY12D/QPxwEfsS4gcaGBoofsCkmSUiJwA+Rclz9kBSaegqYII0tUwwSgoxQQnJRNW2TKIzMQBSRhtc0DEipEFR8cEM3unoSJjQyIyVgcQ6pKXjQlugG55qyyxGKkIpxPZ3jnIMsISmGBJKDK2q2FRRl9UpJulpF6CaBp1REm44Dr1pJ3G0BB66bAjjDyPAIGuobUSlXUa6UW45asmRp2tE0SY34ERIWI6/03clB1appUxVRJcvlsnfffffcD5A7oVfxKAYnnYGIIkglIGQEMBN+4EHp+BZAEm2ZaQqoQqKxlHoDh0b44+xd+RpobVyEM229Gt/8alSny9QrHJbxOkiuek1ot6Y1jyed6hXd9KjpJ+LYIUbHg5hqrZt9MJFQqjjnesRP15JpAbySCrZFrrUxW4BQDAPZXA6RELqpMRHIEFEg0N7ajpGRIoLIw8knHNfa0FQ/PjYUyGayMEyiWEuNdMYDA6VhBiElTL0hVcselGJKhpFQUmJgYAChH1LEVRhCCE+j1IrM0fTGl7QTjJADovSQoRW0dpsipqirJ2q/SlB907II1YxkQl9hYCiNlGDaFiyt++ZMEU3IZrAcG5bpQAgB4QfgBm+z0haOOOJIPP/CcxBtIdra25I9S+nOIjFW8n0MjwyjtaUVAOBHHnbs2bm6v39gpJArYLhUQihCGAaH7/kIvAi2ZSKVTsH3PIRBSFTzWMXLNfWfaUYGYwdRfZGYz2nNtgKkUaPnx2srzqAWUUSOxbZNPIEwomgxALbrIvA9CBnBMh2kXHLTrngl7WitwGHSuTUNFAp1KJWKKJfKrR/91387q72tnXmeR02xIpPAOAIMB7l+0pohM67477FnvKKhKlcJA4WzmrO+0u5QMWpqOxYeeORBzJ+7APmGPCxYLVf8+S9fO3nzqZs79x142rYtitACSVJKlTIc00bKTUNIHbMWhbBMC0EQwICJSEgI7YSvFIPnBxDaOV8IASHJLd9xLERhqKfFsZvCKCM3SbSwt6PhdRyrae7sI+YCDOd+4FwMDw3BYAYyroux8xYgEhJd3Z3y6quvf1gpFf6zrf0HVL4ZkyZ891vf+sTc2bPH9XT2or6hAM+v4rmVz2HSpMmYoJ2Zd+7ZhY3r1+Oc97w3GR9yw8Ts2XNg2w4eefDBp7xy8f8seE3TXGQyM58wyDjVQZbJtZxAwrYcbNy09fmLL/7BL6+75to7pFKvGzdSjYIx9YW8QaRaOeo5DYRhiL279jvpVCo/pqVD/eKXv/zV7Okz3hdFNOhlRm0YGpsjMsXixtn782V/+dvXv/K1/x4eHn5Nd9uJUyZMHTN2zFg6FE0VVPRMmzRhPAOAzn37zTd7jdLZwtjHH3/0OOoy42d07FfAYNkGuro7vYefWPH83n37t71tw5EJY+YtXLjg2LipVzGLTSmYnENEAlOmTDnQ39e/5bDW4vjxTXfdfddCOk4GZtJ13LNnD8JQYknrIuzatcvbum1rMkT44AfO/fDHP/6f/+r7HjLZLEzbpMQEhcS9PwzFhh9890f/9dBD99z0SlfscRMmND5w3/0LAICZHEwJzewD9ncdgJASa1evO+SIp6am1tZbbr31xFrZw0ZFztFP9u7du2Xfvn1PvtnrMn/67NPHNLZOBAArZUOGkZanAJZpYMf2XX0vPf/SIR/DqWe849QlS5Ys1ONhzRJE4pkWN/DdnT3i1ltufzII/eitWmt2Jj3m8ksv/yiANDeT0SpYTHulNDxK5YjIkAwAtuza9uyhflYmV6h7/rnn5yaUhaTzVYmRbHfXgZHuvp6EuZJOp/mll1722YmTJhwlFWA5FlREQJFpGDC4geGh0ss7tu88yD9i6VFL3bPPene7RnmS53oscwQM2LELGIB3vefd7//sZz71H1Racl3TSkDpqEnLxrXXXnftqpWrb3/lcXEm6tOZVEssW3Js6vUMzknbbRrYvm1H6aknnxoxoyiEYQCe5yGbSiOVdlGulKGURGtrE6qVEHv27IPjOGhtbYXBDTS2NaIQBti5fZd7xjvO+MBHPnr+f5x43HHH5LK5VOwgCqYz6FQtxC2JEnrdtvYfTLtf1XfUmgnFYmMImsj7kYAKfChFOZ9DfUVs2rhhy5MrnnrgkYcfue/A/r0v7N67u0cqCddNobGpGa6bQmtrK0I/QqVahqWbh0gKpFNpRGZATriGAaEUFTlSIJfLIxIRqn6Zcmsj0sgyTbNwDA4/DGAYBjgziTYeO7+CaKpRSKLvmGonlUiKW845DFMbQGnKuYQEMyhy5SDjJSi4TgqezrRlhkE6HcZgWw6qVY0wiXi6w1CtlGEYlnZai1DX0ADLNDEyVIQfOEilU8gX6tDYUI99+/dhwuSJC4499tiFCZ35tUSsOvMSbJSmWru/QgJbtm3dvnvv7o2pVBqxBqXqe2CKwbYtcBjgpoXQD8G5CYMDXuQTYqsjtJjFk8Le4AxS0s4gtebOMMkoaXSWEBtlIsX1hqK4pjwkG0BstFNrcPAKJ9nkUaL+AcKbFO9UXIw+TTE9OKFiK1DnYDDKq1GA0sU+07bvUsg4PCJp+Limr0O7bsebF+Pxz2nY4vsUa5NJZRBGEQzbRjrtwvd9uI4LUIPaUhwqZguFAgaKg2hsaNRNp0rWJQNZFcfHFbM4hZAIPB/5QiE3dtzYxvUb10PKFAzLAmeAYaUgogiB72umB0MQaHSSa/MVTROVmi7HNMpWy5HVUSBSQukm2DAMhGEIppupGEExTBM6NhhhFCaOxIopGAYhda7joq+/B4Vcxmyqq8tVPB8N9Y044fgT4flVxJp3mufovUZPr23bQj5H0W1hEGHn1p19G9asfS6fzyEKQ8rNrQoEwgcMGvyFEjAUIbFkWqdNtZSoZRCP8lcjozntVh/nS8fsFR0fRHpU4ijGBmaGQbIMISJ9Xjk4TIgo0kaDtD4MmIiCEMoGDMOEZTiwLEK/FYC07cAPAgwO9qNUGsYHzzvvI5/65CdOI9qQBdux4UcRbG5ARgoVr4K0myKzDSn07G0UAh9nLTNiN4S+h9AXMAwgkgG4BLFNVBxRVXs6SAmceNIpmDC+A329vRgeGsHMWTNnffd73/rCeeeev9l2nP5cNq+HeAbK5RFEIJaKwU0IQbplQw8RpawNR03D0mi4gqW10FEUECLGlJbJiMTYRWl2mdQmH7THHurT7A0WePPnzTxy8ZGTAWDblq0YHili6tQZePyJJ7BgwSLMmjkdvucP+p63Hv98/cNXtVI9Ytkxy04ABzKZNDjj6OsfgMkdNDe1JUheuVzGEUcsoH1ND4YBhXSaMjknT5/yupEnra1tY9937vtOPeG448988skn3rVkMVGQk+hEoVDxfFiWCcu2cNVV19z1jW/9vy8d2LtnxzVXX/MPv//Jxx+3MEFLXuFm09XTg3wuPzb01Xd/9OMfz7rgY+e9Q2rPhwgSTLvDG5yG7VzR4LC3t3/3hV/5yn9fc/WVVymlKq+LeGbTWdfkbq14rQ3qQj+E5Vg45bRTjDd7jT76bx87fcmihdOTZ6RiWn5FdUS5EmLpsqXFK6++8oHHH3tg19u1Vs5533veN2nKxPbe7v3I1zXActyEaSWhYJgG2tvbBoIgGDqc958+c/rsSRMnTk7ooaD6ZeKkKSiXS9T87t5tLjzq6OOnTJ2x2uRi7JMrVnwTQC4KJRyHIRKCPAu4CZgMj614ctWXPveli1avXvWaOtnZM2YcMXPmjKlxr2NZJgCGgf5B7NyxA7Nmzurft2/PIVOO58yZderxxy2dH78vGz3I1/97y023rtm0cePmN3NNmpvHZq+86qqz4vpN6cQH13IRaglcpVzuC6PokCjNpunwq6+87r0AjFK5DNd1dLoJkmQRBjJn3bFn9+a9nXtfeGup8+9718c+8uEzidgnk+DV0Y8TMqOseV489tijL/7sp/9z/9e+8uVD+qy29jFTWtuaOqhmU7A0e08qJJ4qEydP8sZ1tCeV7dhx4087Yv7cc4luL2CYBLBQcgUHgODBBx66Zvu2LQedd8llQ31L/bi4GJa6vuGMkTeJElBgVQDoGD9h6vXXX/tlAHW+H8G0WI1VJyUsy8LGTZtXfOc7P/hpb3fnq4YNzU2NLa7rFjhnGNcxnkBJoQEEXUc0NDaEEyZMCM1UKg0GYExbGwzTxNDwEDn1ZtPI5/LoDfrRUF+PKCS0tOyVYDk2Oru6MHXG9A9f+r9/+VEm7Y4NwhBCF6YxCqE4P9i09jVyFw+vTGCvoG9qnQxIf5NKEcrR3TMwtHrNmhcfePDBB2695dYH9u3dt84yTNHS1oKW5jZEKkIYhBgYGIBjW/DDAEJKlMoVNDamYHKO6nAVJTmsdWDU6AZRAMd0UK6MILBsTR314dg0ybC0I6zveUSV01mcCqSpU7p4Iq2dBUBoTWbtqCKh0V0FKkw1lY4maHEWqs6ZYlzr5iRpZBMHX5lMSiplYkAYhgFmMZ2PS1m8QgjYjgvTsbUBUATHdeCmHJSKJXSMb4BhGejp68GnPvupIydPnJRPHuSqRjKPKYye58Fx3JoJmV4AIhLYtWs3brju+h2DA0P76urrEQQBmWkxcpv2fQFumnAcB17Fg2VxOOk0vCFP5x9xGDyOFiF0K9Z5jvI2gopUYgBVC6jmSUwT5RaLWjPBVA1p5eQIdxBlHrFLH9O6S/YaZlav1ANrVoJmM8TMBBXzIxUblQmcKCvoJtV6yNg9N0GmY1qt0gY6DOSQBwYRylq0sG4yDNNAEPrgjMOPiIUXeSEymTQiKeC4KQyXBmG5TltDYyOkEGisr4fUGkvGOYQStH6ljumJZQmco1KuJOhhuTISWZYlaEMN4XshOGNwMykoRU2d7djwgwASgqb3Qu8CuhGG1I7SSmjEtkapjhUfCuRILGWU0Nq1tbfW28TduEqCzjnnqM/lMFIugzGGcmkEUkpMnTF7Wl1DoW1kZAjpVBb19QUUhziUZKOydw/OYDYMExwRSiMllEolrF+/4aW9e/eu5UphaGRYN9wKruuSFjcIwbUWlukmNQpjJ0ZtrsaUdhWP0Zc447XmcszUKKOnxABBm34xQEWCMrU5BzcMyIhM7izLhmk6iSGTUoL075YBz/fIRdPkCCIfjDkwTRsiVDC4iRmzp6PrwIFp3/jG1z9qOaY1XCwhmyUmkmtZCIIQBjeQS2f0ME9A8VHuCYmBXghuWUkunmOnIaWHcrUMx3KglPnqyab+X8s0MX3yFADA4OAAbr7+Fiw9fimmTp52ztLjjnv2mRUrfoesVKbpIhICtukgzkHNZQvw/Qq8ahWBCsC4AdPUWudAQWgXasYZwihAEKrava1Nq0ZHrtFeKxNnccIEFN4GgBdLFi9Zls/VZcNqFW7aQXvHbEgpsWDhAsycMR1KCIRe1Kki0fPPlvYfUsPZDy/+4Vn5XD4tI4VMPoPhoUG4roNlS5eNYsNwzJs3j54lSsJgHKN2bIyUSsEdt9257b+++30qDidNrq+ra2zNZdMTTzr5uKOW37X8tKOWLDkKgBNDREojrL4fIQwCinq0Laxbv27gir//7VcH9u7Z8X99/9lz5jb+/Yq/H+P5IYojg2isb4Q5qr0sjRSxZfvmSXPnz/n3D33o/XkAiELSp3Mdy6EUkkE7Mw2MjJT3f+HzX/jq9Tdce8vVV/39H35+T1cnL1UqyKbTiSaO3IE5du3eje07dlV37dqz981ep0/8x7+fHO8ZiI0nIwXTMRFFAS655PdVCbl1aGhk3du1VqbOnNl403XXvFNFEcJI1EwilSQKOOfwPQ/XXnv91vee877D+owZM2YuyOXymbiJiASxUOoKeezbuxdDfYO47robzNtuvf34JUcv7vjxxRdPbmlpm1guV5NnRlw7cIshEtHAz3/60/95vWYXAI5ctPAIxpidDNr1MySTyWDhgoV4+eWXN6xbu3bDId5X5lXXXX0O5yR656OYcqPr/NJwaXNPX0/pzVyXjonjpi456sgjksZaS/mEVIjJx0HgdQd+9ZA+Z/z4sTNOOGHZMZUqDaJMnVms1OgkBjpnTzz+5BPPPfPs5rdqraWy+bYH77//PwAYsXsxe42OiJrdJF1EPvnU0zf1dncd8sBn6XHHzKyvr88pkHN2TAKIPUSGh0Zw9/K7Bqt+YABAob5p/N+uvOILM2bObgtDEXu2wdSRocwAbrrx1uUXX/yTv3/taxce9Flj29udU04+dQwxUCgnPGZEmdyAYZp44fkXw3nz5heuuubKLx637NhlQkiYFq+ZrkYCtm1jeLDY9bnPfP4XO3Zsfs095oQTTp7U0tJiF4sjAANy2YwGaUZV1kIOlsrlqmnZNjVEnodCIQfbtmEwA7blIPKp+89ms/DKPjL5NAp1WfR09eXymdwHP/7Rj30rk3bHVipVVCse8rkc8a5HGSqog4jK/7i9feWN8krsbLTrmxLUCMQ3mWHRQt13YP/QbbfevqpYHHjknrvueWLz5i0vM2Aklc6irbUF1YqHgcEhOJabuKO6touq51MxAzLwGh4ehsG5zhA1YTs2wogmMFJK+H4VUkp4vgfTtGAbFLMhwhCVykhichTGdGVFZjqxRlMphdg4g+moIUDpxo1CtG3LRBTFDmU6v0qfXMY4oTmSjHqoZ7A0wkkW9ZEU+ncZPfyYkbj1VrwqDMNErlCAjGga4gVVBFWiKzY1NmFkuATLsNDW3AIOA0MDA2x8+9hl8SI2TWOUqRMJTIMoRP/AANrb2l9VwAopMHnyJEybPqOvUqlG3LB12B4Z+wRhAM8jt9jS8AhsHRlRrZSTJoJcfUnza3ADEhKRkIk7NaBzYrU5mULNII0Qm4O1hYSUj2osRsUg1NJUYrdlXlvHr+Uazg6mNsa03YSJgFhjrBJjMTIX0tRIQXTfBA0HRRIZzIBpmuSuqyk3DDVKm1SUgQrGYRgmIhEmzSoYYJkW6V6VADcNiDCC7wWwHIeierwKCoW6dsu04AUBZU9yYH9XF9rb22HA0KZaDDCp6fJ8P/aLQF1DHQqFAm65/ZaRdRs2lHK5PFzbQcoh3WrgeWQupLPYmESS6x1TlCElxbzEbABNmUtIPozoV4wxWKZBzZuUGo2XME0LpmWSC7r+YkoqWAbZ+0sRoVrxEYYSrW2NUFGEgaF+dIwdO725tbl1YGAYYST0gzMA4xxuytZ0XJY0vXFuMzMYcqkcisUi7r7nrif2HzjQY3IG16Gmy7It0ihHCiJSkCyk+5wzGMqA0shu3NSDacpybJgxmgavHwBSyw+4HvIJFcGyLHDTgF+t0tReMCjGaV/kNEQTmpnCAQR+kKCnNNQIEQoGxhUcO0WDFEYax/EdHTiw7wCbPm3GBydNmLww8AOk0jU9rFICBuO1zM5R7AWeNI0M+/Z2olwpY9KkyVBCohwOI5Oph5tykYaLSrUKISkGSB6EEIzKutaj9vaxY3HK6adg1649qMs1pO66/a6vnffB83Y89Oj9y3O5AhhjKBTyAGMoDo8gEAECr0rDRgm4pgXD5MR24XT/m4zQ9iCQMC3teB2FpAnXcopICAghtb6XfqZogqDN1d7ajteyjJb/+uEPjwUD7r77Xtxx3z245He/xX0PPAhuGZg3ew78ShUP3HvfjsHBwRL++Xp9pPzI+e/49Kc+ebYMQc/haohKpYK6xoaac7wSeOqZp4fmzJyZaalvsdRBJvx6DxKCveMdp77ve//1raMWL1wy65bbbp3W2t42qTFf15hy3YTtIkMJyzUBRlp8zg3YtgnTMpLifMumLVv37dm75o18/1mzZ7UsOWrR7GKpnDBZ4iEgZ8Dadatx+213OH/96xVOvpBjYUjDRNM0YZqGdignagK3OcqVyu7zz7/gwrvvvv22N4SuNTa2p133oOdajAi1trbixRdfHP7zn/748oUXfvGwr9Gc+fPSV/7tb5OSz5C015u2oen9NhYvWhSu27hu164d2/a9bWtl9rypE8aMO3KwWET72PF6bkFDTykVDAAiVL093T3PHe5nLF167DEASCaXspNcYwAoVyp46cVVuPW229DT29VxzlnnjJt/xHxzZLgMEQawshmYpokwimDbJgCUf/u73/7yqaeevvUffebM6bMWxxTtWBwYPxcyro2169Y+u3vv7sFDOY6FS5Z0nP+h847TDPSExlzzbQDKI+XBPfvfPCo6Y+qUpU0N9a3QbDfDNBBGIXmZaJO5Z5599qWde3cckrb1pJNPPK2tvWW80k1f/NyNv78QEWAY2LVz98DyO+64T4rwLYkjstws/8Uvf/61445duiymD45W0b3qJclk6s7ld63+4x/+eM93v/3tQ/7MpkLDTEP74sQdvdLGtYIpuOkUbNspWIY9tr6hkZ9z9nu+8L6zz343kSol5dsrCcYMuCkbIyMjPb//4x/+Uiz2vuqcPPLoY1F3X3/djBlIGk+K/KvZJvf197RMnTrlS8csOeYDrzpWAAZpy71vf/+7v1nx9JN3vu7gIFOYBwApx4UfeuS+zzm8ahXcsGDYHM888+yGvfv29vJ0Kg03lYKbTqGuoQ62SYifk7JRrpRhcA7fD5AtpGAyE70HivWnn3bml5946rH/+fh//vuU3t5eOK6DxqZ6MAMIo2hU7At7lbHy62mdRqO9SVc+Op0FNVopB2Vw6SQdDA0NRw898Nimn//sl1d87aKvf+b66687/ze//M2PN2zY/KRhWCOZXBaRiFAuVQFGlCbfryLwSDtq2zay6TSYoEbKdRw4pgXbcpBKp5FOp8E4RxB58LwSlCAufT5XB9N04LouTJNDhBGiiIyBpJKwbJuaMkEZmNyggtc0TDJgMk2izIlIj4N1XWcwSBEh8AUhYBKjXNo0rYhrp1BuJIY+MhKk69D0UNO0YBoGTO1AGsf6BH4Ig5tgiqFaKkEpysaUQiGKIpiWjSAIkcnmkCsU4AU+du7egSmTp8444dgT5iTNnRztQqw1lYaFltYWSCa02QM1KzGn3jANbN60aQchRCaZh5hEc4i1m4Y+V5Zl6xzZEI7tIpPJwnFsyhJWtGFLTXE2uUkNnqF0FjFpgbn+TGboyRGTFP4iIygABkzS6ej3SaQv6tWsAino2tZWJHtdgDd29mPQWintmsxjPZAuWqR2XSYNJon0VTLZ0+YkGvnnvJa1HG8jdPyyFo7I6VzEnyfCEBCk4TYNA0wB6UwaUkoIESKXT8Ov+ki56XrbsZImWUDAMjm5gscxX8khS5gmNQWGYelpH8OkyVN9y7J8QjJIK8t0TrJl2TAtE55XRSQC7cZswDQsmJatDcaYNnTSk06d4coNTlpxjdLHjD7G2UEO70oo2LaDIKQ4H6L7aoMFoRBGEVKOjaH+AWIWQCGdz3ak7Cwb09KOlGsjEgJ19XmkMjQMUEzFGF7tFHNyBH7q6afE/j37R0rF8otDQ0Vk83mks2kyqhMCUSjBmaEHCJSZDalgWjR4UixuluJ7mieDGaZk7TgZT84JQ82ilZyoSVPG9M8iFZIRms7W5CYxJ4IwADcMmIZJ1F3GYXAThmXCdm0UcvWwLRvM5OAWRyadgV/2kM8UFv78Zz+/IJNNY6Q0guLQIKQSMBgpnUQUolr19BCJ/nBwYkhoDXYqnUE6lYJjW7j/kYfXn3DCKX9Zu3r1Xg7ADwQYN2A7NACJ0dTYFTV5ZuhBg2OlcdTRS3DyySeifUw7GhoLY3/yk4u/X59rmBZEATKZDDiz4Hm+ZkMopDMZpNw05Q0KgcCPYHATru3qPFGppRVGMiQjp0yeINIx0pxyUzANEyY3E+NFKvje2oa3rW3c2ObmtokAsHv/PlSqZWTTGezbtwdNjS3gDAiCCH0D/fv7+3qq+OfrNV+267IvX/iV80tD5dYDB/bDMk0MDRZxoPMApG4MOWf49SV/WHXKshP/7Quf++IvBocGBmKTOmJc0B6Qy+etn/73zz71w+//5IfvOft9H160YMHijpa2RseyEYYCYUgRIpZrYqh/EAP9A4nmTqgaMgoAHeM6ttfVFYpv5Bg2rd9k7dt/wC1kM2iub6KhuEbUfN/Hpg2bceGFXzLGj+8woojYJIZpaKNK2r24wWHYBgaHittPPfW0L7zRZhcAzv/IRxZwPXCnaEEDxeIQVq18EYYJvP/c90s3ndn9Zq5T9/6urFfxm2NqeUwn9T0ffqWCnTt2Ytz4jkhGYm1Pd9fg27Ve/CBY3NDWYjc0NtSQUEUMtLjJv/zKKx599vlnXz6c9x/bMaH92ONOWAyAdLig2EhTJ4Rk3BQOdO5DJASuuvpK6z8/9XFTCKWjX7TkR9FeBKD6y1/89hc/+O7FvxwaGHhdh/aW5tbWxYsWHzGafRZFEjJSsCwD1YqPZ5577pBN7yZMmDDD5GZ7vEfHYAIflUt+1VVXbbjsr5e9qTiiiZMnp049/dRlhIiH2lRKankT9QNDQ0V19913H9IQolBXxz9ywQUnkfcF02ARRmnjI5TLZZiMobPnwIade3c9/5bR5s9+93lf+txn/iMZ7ryqnlSI4sQOpVCqlJUQAt1dXS8NDgxtPPQGO1N34kmnLK0xFmkhcA1jG4xh3fr1uPWOO5f09fZ+uW1M+7d/8IPvfQoAi4SAkhKOa4EbBjzfx8DAIJbfc8/1EyZOfPq1Pm/ajFmqpbk1EyczcC11je/tUrmEBx96eOLnP/+5j7eOaRvj+4G+nkLn5xKgc8NNN1zzl0sv/V3ge6/5gJ0154jUjFkzZsf1ciaboQFmGIGBw6GhEJ597tmVxaGByDRNC/lMHgwSg31DGCmVwcBQrXrgBlCXycMPfARBACiOE0896Yxvfutb32hrackMDgzCthxtIKR0k8UwNFyEZdrIpFP/sLlNzHxY7QIkRi2jdY+xCZBeD1JK7Ovc1//UU8+u275l+8Zt27a99Owzzz5bHBnaahpmta6uDoZpI1NIIwwC9Pb2wzItbYBA2YmMMwgpUKlUyanONhFEEq5LCE2lVELKIM3jSKlEmjgh4ZjkOGtYJjVcQqBa9QBF7qcSEswkKnIQ+rqIB6Qi+24lCapXmh5TozLonUjKWhElQxjcoqJVRAnCKHVzGxuQkQU3koIxPlGxRbyU0AggQxCEkFIim89CCgXfD6C4D0jSJhqGCa/igymGupQD23Hg+x4cx0J9oW5CxfdagiiAbdo0LdTQl9IIKDcAAxyRCClvi2tDLymgFMOB/Qe8latWrrYSQy8O0zQS0ximiPrJTUNHioRgDAhCD8rTphkgUyqqVmsOumSExrV5DQiZZEobT6ikaVBxs6QneAyAYZr6hnuFyZV65ZAmNm96RaNb475Qk21QfjChubWNK3lPVUPzFRQ4N+kcad1lYv6QhMnL5EahZcASuig1yhT1EgYBrW+DBPucMXCLHtRRGCGMImRyOZqQ+tSYuq4DznhahHQ9UqkUKmEVmXQ6kQ/ElBopBMqVCrKZDJjt6ggpOj6/4nml4VLAOEc18OCXApqKcwOWZSMMAm10Bh1fwxGFoTZR4/o0yqRZV/qccmZAgFxV4wxiivDiYPohRSZRBuob6nGgsxNCSDiODSEi+IEPx3S062eMoNk09WxsaAKAUmkEEgp9vb3I1+eRzWSpUHyNzUtqXfP8efPUU48/tX3thrU7srkMMT88H5EfJnpj27SIiqwUSRj0FyAfAKnzyDV1W0pNY4fWyYw2PENi4qKk0i6OPBkUxehSHLEWhiEN5gyDzKsUIMJQ5y7S93ccQhfCUKAUliGlgJPJwDIttDY3Yc2adfjvn/zk/PkL5s72gwCu7cAwOUzLQhREmmVgwNZaICElDIPRNRUcYRhg7cYNmDt7NpSQONDVVb3yb9f8bvWql//317/77YV/v/zy/3FswwYoa09JWSuWWG3cG1PpiyNF9A8MoFDIwvd8KCGxbvUGLDlm8aL//MS/nf/zX//qR67rojRShRAClmXSsWpmSxSJxBjQtkm+IcMgMalinNzvmUpE9rR/Ma7PtYTyfM3AqXFKpRJ4q2N4Tcays2bPbAaAD1/wYbz3Q+/F8PAQOjrGYPq0KSiNVGE6JoSKev/Z1r7+q6Gufsrpp55xAnEuOQaLI2hpb8O9Dz+AJ558Gl/+8pcQSoH777/nKqXUHYyxOy1u9/z971d83zCMOhl7Byg1aujOkoiQ0I8SOlsUBQAz0d3TjZHhYUyaMFHLaADOlB7S0XvcfPMtzz///HNvyPymuaU5HTvpKM18iZebFAId48dh/LhxqJbLcNMuDWcTR32SSxjMgB96ez78kfMuevaZp5e/0fNnWI59+623TtMFCeVOM5I9vbjqRWW7FqurayqXS6WhN3OdJk+ePG7Z0qUT4iqQWDSA41gIQx/33HcPVr+0duPKVSuf+cqFX35b1kquvi7917/+9cRkyMxfzTrcsmmTuvaqqx72KtWRw/mMxYuOOnJ8x9hJNURHD9P1542bMAFPPfUczj7rLHz0go8lA3EnZdH9HsWsIES//8OffnXR1y/6oZLhP3RWPu0dZ8yeO3/ObHpGCEoJ4bqGAjBULI688OKLhzywmDRh/JE11LhWUzHtjssNBgH5slJy+M1cl0JD46Sjlxx1JD1+iRVWqVYBZcBJU0MjorCvWikfkomY47pjx7aPnR+jioZOFIkRas4Y0i71MKteXLVi/57db0nu8/wFCxbds/yuiwDUCSF1xv1BVjyaJYWEcRZ6PoOdwp49e172vPIhx8+d+c4zj3jPWe86OjmHMfNQUs40ADzz9DN4/pkVzPe8D1/wsY/yyZMnmUoCRsJwo2FGIZ/DI48+/MR3/t93/rxjx9bXRLyjUNUV6uob4jpX6gl2DcSB+vSnP9OxeOFCFhv5CiXgGMRSNUwTO3bu2PjNb37rd0G1+roD3XKlnOvoaB8PAJVKCeVqFa2trSTbYmaif97fvX8DAJj19QUMF4twHCoI3ZSNyCfqbcf4DrQ0tSCoBlizdjVgK6RcJxJhMFKtBplsLg/LMqgApEqMFr8CXF1QHITuqlqzEOd0xdoZVuvTEsroK3ObhFLBM08/s+aG62+4+/kXnn1oaLC4sVrxhsCZcF0bdYU6CCHQ090LbhgY6BuA69gwTQOZjIuRUhlSRmCcPtN0HIABQ8NDABQMw8RIqQTTsiBEiHC4CMOwEGkKhWVaUIpDMRoISCm0W6EJFTvGSkCIoEaFVdTYCkn0P2mAYoYUIDUazsBrBhm6yDcNU6NUQjdubNSNyJMMNYaaKUZ80mLkUCFWmNFUxbVcCCEQKkJzWdz8g/SsUSBguibqGuoAqdDT1YNCfYjp06dg7Zr1aGxonjNv3rxc3OwqxUZNxGrRMYT0GhTdQSGblANr2yiWRjZUypU1pqZcK8XgewFpnw2KWjG4AdKE02ZAlFdo51R9o3KlDXhY8uCP9VJco4OcsxoKDGi0hkJjGAxCw2MapsFrWtD4j8IrzKZYcl3jiCuGmo457nmlVFBRpA3FElJ1TOygZi0xtaLGLTYjiRF7QADgZISmjZpYrDPmNf2FZdKQwg88aqINA0xRQLdhWJCSUHupJGzLRiptIwh82KaFxoZGDAwUEQmBMe0t2cHBQWSyWQgZobe7G2NaxxzU1cfZbelMhnSiuoiMT1DFKxe9wCtBDySkplGDgfKfpaR1AQXTtBCGGtU3Kf9UaZp3vM5jR2fTMIg5oin9Simdo8wTGYBlk6SgODREml1GiLxlGchmMrBNG4EnUPE9GDbD0BCBK4sWLW4GANdNQ0iBnQM7wQ2FbCZH/us6FqP2RKK9rupXsWbdavPOe5fv7+3tHsykMyiXyxrtpL0AINOsSGd8xui8CJVGlnhi9EHMA1bT1cT31Cgb/3iNJKMbzdigB0o8ODPIBI8DUnJEYQQ3lYISUmtpyAVeKIlACEBJREGAdDoLbqTgplzU5QsYHh5CU2vjcSefdvJHYmqXZVnwvABbtqyGZVqYM3sOwCUMk/YPw2QYGRlBqVRGY30j0rk06hsa8dLatZg/ex4evu/RJx64//7bFi0+BhvXr/vLJX+4ZMa//+snPpXNpjRbhIEZ+uGImk6WgyEUPsIowKRJExGFAmEgUCqXkM1nEIYRPvTBD5/3979de+9g/+CL6VwGCg7CUEDAQ+QHkL6EMsjxOQgClL1QU9go5zreezkzkiGSZApBFNXy4jW1i3ODXPJRe4Bz9daZVtXlCyztpNtTtlsAgNuX34nFSxZi1XMvYfny+3Hyyach5ToYGOjH3n379+Gfr9d9HXvsCUc3NjRPCrwyZBTBcahAXnb0CahUqFZ7+YU1nZ27Ox/TNYpy3dwfsuk0fv/HS75tmlYTNbnEEIr8CExHqnV19aC1fQwcmwZxvu+j2NOLYnEA4ydMgptK032JUQ7rnKE0MuItv+vuF372s5++oWM46uglYzva291yuQrHdhBEIVyHBnaWbWPurLloam5EKpPWGbmjBraSEFkA1W9+4xu/uu+e+24/lPOXz+eybWNbGqHvE6WfRY2NTfiXC/6NVb0qbr99eVdX5/43Ras/4dQT5jGDpaQuioUkJ2oRRRCRwowZMyo7tu3c3dXZ0/l2rZWjlxy96NilJyz1vRCOa5HBoEbSmVCAwTBx8uSehvqGNYf7Ge8+84wlBoepFJLaN14XHEChkMOxxy/FkkVL0NXVie3btmPJkqN0EgiS637l1Vdf+oXPf+5ipeT/GSM0fmz7nPjpVS6X4fk+6usKeOHppzFz1kw4jtUHhe5DYk7YtrH8zuVHxcMBbozyGWEMXM8DO7u6Nr3pe/j4pSfMnzd3plRUhwsRApzBtROTX+zZu3NNtTpySFFVy44/dtbUaVM6AJ2MoGopD3ENUxwuonN715Yrr7r67i9/6Utveo0xzlvvvf/+73SM61gogeR5F3tExMCNUjUJneM4sA0Lvb29BwYHiysP53MnjZs0x+A8O/oaje6yd+7Yg8v/ehV8z8Oy44+xP/upT1BdzZQG5+J6yoSSKF1++d8v3bFj6+siza2tzZNamhvzChKGRd45NAih2iebzbJ3nvmOxKzTMjliO3mD2AvRNddd//ud27f/w3stk3bGpl23hUpRC7mMCc4Aoc16ucExNFQsrXt5zW4A4OVymZqgSJD1O7fQ1NwE3w+wf/d+PP/s89iwaRPGjmtHx9gO3H3H3becf/5533jooQf2xs1uzVmTmpN8Pk9oplI1c6nkJGvaaOwgGl9wxuBVPQwPlxAE4UGU0v7+AXzne997+JyzzvnXL3z28++++aabf7Bj684VMpL9KTclWpuaEfoB9u/dh84DnbBsDse2kctk4Ng2TI1yhELogk8iDAJtVgJYNlH8TGbCtWwoQXEV6Uwa6XQq+S5SCQRRgEhGOnaH4l9Mk4rPwPfBADg2xRdJJWPiKUzL1PRkBdPgMXZD6LJpJfEsRNlkGukjswTK4RydOVrTbyqoxEE01vZQFqZMLM1NyyRjrdCHVEo3SAH8KIBABCEop9VNpSClRC6XgWUZcJwUOto7wBnDgc59hc9+8fOnp1wXoXZAowGhOmg6xWP0U0E301RchyGdqxuvu2HFiy+8uLu9vQOWSY2aH/iAboJio66YDg4Z6zo5iHKrj19KQEht307TEmbEVEquQ+Ij3QTyGvUbAgpEeVaQScEahQEUE2BcI7KxVlodPLCp0exHhRoy1OJ1EGum4+EO1++RWEQnGkwyHiNab/zfDW5ql29DD0WEprzHyTzEKmCM9L88Xku6ESaxvoSAQCRCMC6RSqdhGTbCQIAxA6lUCtwgZL1SGoGIwNNOOm0aDKURyl6mGp8nn0v5zpoep+k/QlNU4lzZrv1dvcMDQ8VqtQq/UgHniqK8uIU4etwwTBjMBMDh2I6mG8uELWDoTFMhBCAVIiHhh5rGxGvu0EkWZfyw0HSnqueR9suydH6jAcd2NNuAps7plIv6+gIy2SzGdYxr0s06wtDHEfPno7W5HZ7nacrqKOaJ9hAjbVIJnudj2vTpQwbnwrZtMINDyAjcMhBFxBxQUpIJYCarXYKhHQvlKM0GuV+TCZ2hUSGWAADyIOMkvd4S11XNFjDi80jrW4yqgwI/IDYFJ/TXtK3k/Dq2g1whj9YxLchk08hm0ujt7kN9U+uRt995+8+OWrK4PVIRPL8KN0Xn0TRtNLe1gBkKQoYIg1DLNjhs20JLcwuCwMfmLVvR0tiE9pZWRFIOPfjQI38dHurvFZGP+lyhctlfrri0u7d7o354gJjQtHqlNi9jirKaDNdGc0sLDMOA49poH9sO23KSvXDeEfPnfPe/vv+JoeGBVBj6xG7gjHwQwgCWY8O1UjrexEI6nSbjLlCMGgPdV0pKjfjS3+PrzqBp+aaVyAzIG83ULJq3DuINVWh8/VtfPXLm9On2isefwIoVKzBp3GTs2LYVrusgn8lBCIFyxavs3L5jG/75et3XWWeffULKNRMfDse2cc/d96B/sB9HLJhD9cXQ4Nre/r7EPMrzRsKrr736j+d9+MP/9uSKp27eu3d/P+c0aLYcC6ZJdctQsQjXNtHb3zfwyBOPPv3Cc6uu/NEPfnzJxf918U3lkVI1HhMmA3w9nN2wYUN/d1fnnjfcXDj2zLg6pWg3SU6nkkyVjjr6aIwZ0xGHz2t5DO0H8fPtV7/73d9+8+vfXXbIw5dCPtPS0tyYABaj5sE9vX0oV8rI12WHpJJvKhZr3py5R8VIm9KaVpJqEBvnySee8UzL6psxc1r57Vor06bOOlZKdPT19QCQ0JVY0pACwLXX3PjYMy88t/VwP2Pm7JkLaU8XYFqTx7U85MCBLqx+eTWKA0NYvHgxWlvbcMSCBYiEQLlUhVchoGvbrp1P/dfFP/6lUtJ7I585ZmzHbKpfQRI+iwbhgYxgmjZuuuGm5zduWHtIzWJ9XfPcRUuOOiZmHILVHJrjnbC3f6C8du26jW/qmsycMfH957znQwAMEQpEPrnsu7aT1MD9fX245De/e+bZ51e9oaZ9wsRJDADaWprnWIbt4iDflVHNKQO27dgR/erXv7i9VB5+S3LOf3TxxZ858/TT3xszMDGKQVALC6FBeyRDRJJqP2Zy3HXPvc/ecP11Lx3O53aMbT8iRuPjA2WjBMPF8gh27dsFAPjyl76ChvoG+EGQmLxCS7nAgLvuvefG51e++A8lETPnTJ1ssBjU4xCCTEXj5BbFFGIneWg2ShSEKgZzL7/8r1ded+21V/1fx7X02ONmjhs3rh4gpNpNuTRIMngCoO7fv2/fnj379gCAWalWkMlk0d/fr5sLBS8I4XmVxDXMcYGxY8eh80An9h3Yh227Nl/34CMPnXr22Wf9C2e0pYtIO41ydhDFdHTjGiNtUAzcYBgqDsJ1XLhuCus3bkRfTx8ampqQTqXQWF+Pl196CdOmTMZTzz678fJLL/2cya3NTY3NaGtrhxARMtksquUKKqUqXNtFOku0wkhEGC6OED05EBBKoThSIhqblPD9AICEEAZ8X0AxCTeVRlANIJXQRb1JzUUUaHMsHRkkIyhB+kyKWCGUQOo4GeiQaJVQbakhYKBiOL64cZMfCgGmRM0YKW4ztDuvwWJ0N6a+yFqDFRt2cSpiozBE7EwrlY7aMEwdtSFgGERfVQpkWqWpo2TQ4yLwfVSrFZRHyrAdGxMmjUNrczPuWn435syb/Y53vuvM4wCiONTovaqGOI3mAo9CpKWUqFQq6OsfwJYdO1bm6+swVCySAZFlQlmmbtgJCRdCgNSj0G6NRE+0HAuVskcPc03pZKxG60xUjpwykRO0TMXoqs4f1vThpIllDBBKRxSNSnxOEiBYwk4wNKIpxah8VO2EKYRIEHqu/w86aYglmaP0nRWTyfkxGIMER6QLfdIvcMTqUcu0tct1lGhYTZMo4b7vw+A07LBsRxtYkRM41T8mgiDUUzQDMhKoBj5CM0QmlUFzUxNKIyWuAF6oK2B4aBjpdBpOx3iNSsQDq9FRA/E0NDaOo6Jq+5btBzg3qh3t7eju6iKjJMbh6zgipTc+BToWcMpxk0oQdVWRNvug5k4pfa8ofW8R7dXkeqCkDCgFVL0qoH8eU1ZNraP2gwAG4zBtohe7jov+/n6YnFlhqJppjQjsP9CFqVOnY6RcIgMoVlMIUFyYRBRGsG0b9Y2NmDh+Im677bZhcC4yuQzCQKCIIURJsx4RTVkI+FFE93pMVNbmITSkgh7CyNpdpKniimlDPlljbcS07kgPPqSSMBRp9blBcU4MBukHlULgBzBsUzfaCpxLcCXRUN8ABoWRSgWeX4VSERhzYbnWzI/9y7/8aNlRxywdHimjVB6BZTEEgY9cPo15TbPp+yIEg4TByTm0Uq7AcVMwDIZdnd3YsmkzJk+YgAP7q6V/+/i//Xzj+g23T5o0FXv27cWuXXswNNS/8g+/u+Sqn/7qFz/xA0+jFzUkmjEDYSRhcY7BYhFp20Uq5cbqDHR0jEUk9DDEsfAf//mvH7t9+a1PP/zAg39PZ3KwbQsQ2vSP+lT4vg9mavq3IvTLMkyEChCQ5K8ADqEUuDYCJMd8BiZ1vAJUYoxHUV3s/zRkPCSqne3wydOmjPPCKtZv2oDTTz0Z9YUCFi8+BnPmHwEeu2oHXl9XV9ce/POF19Z3zcnfc8+9Rw+PlFEZGUFbexteeulFrFuzDp/49HHJ7z38yAP39HUfOIh2WSqVAgB3NzQ0P9RQ13D093/4g+O379zhlIrlcNz4cU2trS32yy+t7Pz5L/dsWL9p08YDnd07u/furZxy2vFYtmzppzKZzPuQMNmELvqI4eKk3P5CIfeGdddTp0ydDwC264BzQvmEfv7E5C6poGsvJHKKmCp5z7333fKrX/7qv5VSh94sMuShWH1cLMeN//atO3Db7bfh6GVHI4iiwXxdfXC416lt4rjmR+9/8OjRbCJiwBjghonh4UFks6murVu3bVr5wsqBt4XOnM1mrvjb1cd2tDdBRAENLBWvxSqaBtasXV/5y2WX3iMjHNZ36BgzftwDDz40O24SjVHGk8QyMrH87jtwyiknYkx7m47PS8GreoiiEHUNdfCDsO+b3/zWJds3bdz+hij9Tc2pm2+9eQYAiDBCKuUinXahFHDKiacAAO69957HDjXH+0Mf/PAZDfX1YwhZo0SBmC0XH9GLL76wY/PmLYcdmZbP59nnPvu5fzntpNNOjpF2ITkYNzQTh2qyxqYmgPE3vA/u3rVTAcCcGTPnjG5uD1JQ6veeNGFSeaBv6LktGzd7b3aNffazXzjvkt/97kvEmNLRorHEbhRgFL/MOKZRv1a99NJDvYfh15DJ5bP333vffOgaJpagIoldAzKZLCzTwoIlR+PMM8+k55BlQyqp0zQkDMvEy6vXrP7yl77y39u3b/qHe0l9vtBMa8NIgAwylK0ZkiqloHjMlDQQhYKlM2m8+NLK537x61/9duO6df+nbKC9Y9xkgxvM9wJUqhVks1mYzCImXSTAbY4Nmzat7+ru7KSm2LIw2D+AMAjIjMOyIFSEMAzgBQHa2loQ+T4eeuBhCCVQ31KHzn1lBL7v79vfiXw6A9d1E70DGTMhMbKhJJhaIzL6JbU7ooTCmJY2TBg3Hv2Dg+jt6kNjQxMmjB+PTDqFbVs2PWia1ub2tnYMFcsYHBzAmPY2mNzE4OAgyuURNDTWQylCLPL5HMrlfQiCEL7v0TGFAhyA6zqwLBulUglSUG5tEPraqVijqJKKGNK7Cl1/auqa1h2apqXNpSjjEYyMThQIzZSaihg3t0rbp8t4UqrdhJUi92LOYgSR6N2CSfoeiFGtUXTH+OFmGFA6IzIMQyipkV6ttYzzW4XWcgIMlWoVhmnCMnUjrHNL44ejbdmwTBucGaiMVDCcGoSbslNf/MLnz0k7Tra3tx+5TAZu2oUfBZRLatqvWogE/LP4iY/mlibs3r1P7d+/78DQ4BAaGxvBmaX7Q4Xh4ghsRyUIH2cMURCAGSbADARhgCAKtVOzjn9yLO18TQY+Uobk4KynUYwZScbp6MljjNgo3XgkSK2mNCs9da0NGmL3ZqYjSLSJVIwAqvja1Ej8hCSjFm+kGN3cWl/FdRRGJEOIOJNWR0kpjYQqRaglrS8yIiEEkNEDmTFww0jWRcxuiumwnDNEUaizzBxYtqXRYQOO4yLluOT2bVm8u7tPVkZ85AoFmNxEGPooVyqor68fRTdliXETOIPJyL1W6UGXYrIvm8tp3bSEZTpgzEgKGMW1aYseghijwshHxz/EQmWmXf1oKBHPV4jRoHQmrWERDUb4lLNKlvlk9haGAlEUwHJMSMZhOymEfoSR4TKgJCzDaYRCC0Bma4V8HQCFbDZFBkZQNS01UzAYh4BCtVqB66aQzeawZ8/esueFYbE4Ass0UV/XgFK5Am4wBL6nr6WNKArBmNQsGDIaI70uS/YVbQVai1aKu22p7yUNN8YyCHJ3l4giCdN0yKVaN9lKCjDJtIM7o9XKJKIohMlNmKaNMArhV30IJeFVPIRBgEqxOvXzX/n8Dz70ofe/S0lg8+bNmDRpApoaG7F71w5Yjo32Me00nZYMlukAnGNfVye6DnThiDnz0NPTh/0H9iIIAmzcvMn7818u/fPy2+64pLGpOWhuakLQR7LTuroGXHf9tde/673vPu2UE08+pVrxYJomAj8CB4dp0zkQkURDPgcpFaoeuYgrpsBMTqit1qa5bir10//+yRdOff75J/1qsKPQ2IBicQT5XIHuIY3wm9xAEAXkNmm7yaCBMglZMsgyTQuWYeoBIiD1UFdBQSgqiLnkifv6W/aSiNauWe8tO/Z47NmzF7ZNDrmr166HkAJnnnE6AGDvnr2dxcFi3z9b29d+ZfOF6Y3NTRNLlQrKvqfqfJ9t374T//6Jf0ddfR4AcN/996+96qqr7v/5T//nNd9jYKDXB/CE/nPQ6/zzzn3Nf3P6me8al8vmzbiAVdpYLgxCVKIQW7Zt2SaVekMa0DEdYxtvu/mWOTGLKtK+GCZHwhJTtRStBIWN6ZA33Xjjg1/+ykXf3r/v8GKDFi5a2DZh3IR8wmrSU8B8Lo8li5agvW0crr/htm1dB/bLw71OC+YunD1p0pSZABl2Ku1jwA2Gvp4+3HzrzXLb9i27unv2byyODPpvx1ppbmqateSoIxcTmkYDRigGg9cwm56u3mIUim3jJ3QcHmX6mKPnzZ47fQqApN6iRwDVhtlMDuee+0FMGD8hIb2IIIJhcdhaS/rLX//62rvvXP6GaempVDo3fty4STE3W0iSAvnVKlKpNPr7Byqdvd2HFEc0b/6R9ddcc+07OEfiw5J4m4zSMXLDfGnThnVdh3tNlixafPy3vvWtT8fAhGGYlAOrB9BqlJdKNpc7pCHE1Gkzs7fddtM8ANq/QTsIk+osOQjOeMWrBG86cmvBwsUnP/H4oz8yTFYnNBtKC4YPGnok8YcM+hmv2XMHDnQ9ueKJZw8LJZ88ZcKM6TMmJwAS4v1CJZLEh+9/CF7Vx89+8lPkMjliE+qhmVQiScG57vrr/7p9+6b/k1XEuZVNmJcauKFnLK/VzVwiUjIBL1KZFACUrrjib3/ZuG7dG5IN2Iy3cD2My2SysCyTrieIuQsATz7x1PoPnkt7NZ8yZQoVpJzD831EIgBTgGnY6Bg7FqVSGQe6OhGEHjgDhgZGcOrp7zx+6pQZc194caVas34tunv6YDs2oTiS6JSKqYSaRwV6iH37DmD37j2IohCDg4NwLAfZVBoijNDQUI+uzm7cvfxubNu2Fes3roblcuzat2dgxTPPPNzY0IAgijBSGkJzSz0Cv4p9+/YhjCT8IERPbz9GRkbQ39+L7u5uSCHIiVVJBKEP0yA9W7lSJv0Vo4gCz69CCAnP8yAh4LguHMclXZqmEnLOtDEJWXIrIMlkFVFEBSpAekXIJDoJo3KuENNhmb6h9BRWiZoFM4shfy5H0SpqU1swHRkCpS+q0jmlcQ6xNmKSUr+XpswYRi1OhTEyPgBHpJv8KAgxXByGZZjI5woYGhqE51dh2hb27N+H933g3OlLl51w/LZt2+FHgfKjAJEIUalUtXvuawyGGTEYYsMj0iJY5WqlNCBFiCD0URwpwg8DDZ9JiIhykZVUsEyLnBmiAIbB4bqk80tcbUHa3yiKwDmDaXLYjgPbsg/K3zo4WoglN3KcU5sMOaApZwavXU/d6NLBMDCmHZEVyQ2gBzo1UxNqMrlpJO8hoZKHWzxVIxS3RmG2DEsjfVL/0ZE1SsQjEv1dadgShgGEDPVQo/bepG0MtKkR0aYMQyN9DLAs66B8w/7+fkgl4bgud1IOmG0g8IlCU6mUUCwO6yIrghg1AI6p1V4QIJ7wAsDg0GCxXB6BV/FRKDSAGwaCiOKRolAj90bsMq2ReEnUPDaKuotRMoiY3sYY13peC6ZhQTEGIRREqO8hTfFVkYRtOoDOV85ks2AAPK+Kvr5+2JaLdDqNSCk0tDSPzWRTLQCQSmfQPmYMDf1MByY3NW1bkOFMnP2rAD8M0d/Xh9bWVsybO9cXkS+GBgdRLBbheb528haItFu7EBLQiL/JqCnnnFgN8YCK0oc0+i2FRhLpugoR6WksNKKrknxgqQuYMAxQKZcR+hE4J/1/4AdkAGYaWntD+b+e5yEIfQwVh2C5DuoKBVQrIWbOnH3En/78599/5cKvnufaKbZnTyfmz5+HlOOgUqqipa0drW3tyeNSCBo+BWEIyzIxf/4cWI6Jl1atw/XX3qImT56M22++4+Er/3b1/3aMGzcilcDIyDAcyyHX4VwOUrCdX/vyRf917wP3beW2Adu2kEmnYNsWiiMjYEyCm4waUW7AcixwBhhgCKMI23Ztx65dO7Hm5TXYs3MvFi1cvOjS//3f7wEqG4kI+XwehVwdDNMENwE35dDAz3bJdEhG8AOP6J9aYuOmUnAdF2EYouJ5iCLS7SqDXJ5ty6Kcce1cqxBBQbxlxffA4KDctm17uam+CWknh56eXj2FdzGmrTn5vfXr1nf1DXQX8c/Xa76mT5++LJ9OF3J5am7XrF+P+UcsQhAorN9IcZpbt297rn9g4C3L1swUCsYpp5y6qLZPquQ5k0qlkM9ncc1V1z67e9fuN4SILjzyyLmzZ8+ZGCNcnLFRXkc0FRuNAtWea0BfX2/n7//wh9/u37fnsI/vxJNOaIuHqQbnGkoG6usLqPo+hkvlUl9P15o3c87Gjx8/zbWtdNLCsxo4MlIawYGuzqi3q3uoODz8trkzn3f+hxZMGD+hTei8eIoM1ENF3fwsOWrhQBhUe9esfvmw9AszZs84CoD2LlGJ/IuDIQojrF6/EfUNjUin04lLvePYBCrYDtasXr36Fz/7+R+qldIbbvqnz5jWNnnS5DFVP0AYBmRqCWB4ZERFYYj+/v7+4vDQIfkAhIE3pa6QWxAP8g1tmhrXqZ1dXejt7QseefCRBw/3enBu8H/993/7j1w+N0bKWqMGSUPzuIwGgL7u/h2rV2/ccSjvnyvkx+cLdRMSgEARUzVmT8ad9KqX12zvHex/Uw7kDQ318y/5/a+/n8/lpo2y5ABTByP8LGGTaalYLXsXN910y9bO/Z07D+fz5x15REdzS2MLMMqCVKmDxIgLFy7Azy7+EU46/rj4slLdqhMfAODlVWtW3XH78rveyGeOHd+RBwAZCijtI0AgVI26rRSASEGEAqFP9eV99z3w8C033n7HG2KGjG0z5s2fPR4MMC1yOldCJXVS/BKIEvSf9/f1IZ1JIZ/LwbINlEol9A/0ww98KCUTTZ/v+/CqAULPx9FHLc6988x3Ye7MeayhvgkNjYXkktm2Q0W8aYEzBt/zsXfXHlx11VXYtWcXcrk8hoaK2L//AKQgenEY+JChwLp165DLZnDa6afANBx09/ThqaefXrNu/cYXGpubUCoPw7Et2JaFgcF+9PR3wbA4HCeVuGxKIREEAUxd5JmWDdtykpiSSAhEkYCEQCRD+IGHIKiCM2oahZQ6IJnopQbniQuuYZpkD88NovQJCaZDlA1O5k9x7m1CL1IgWnJsKsOoYWOa/sx10atGtWlktc50Pmft5iPoH0nTR5SO2uJl0HmmUlJ5ndjD10TxpmVoGh650jEdH6KERLlURRAFqKvLwzBMFAeL6O8bhAzFrHHjxo4bP348OsaMYblslvKZ0ykacozWuaJWqBN1U8LSboD7DuzfuHvX7gOGzoWNghD5bBamaemsU5ZoUv3A18izCSEiCCFr51ixxMjJ0Bth1ffgBwHRSXVOaM2squb4y5K7TU/Emar9kTKW6iTmHOSaLXWzGut56L2kknEVkqCQSv+ctIjUpFi2QwgmIzOlOGYmOXFcazJNE6ZtaWMu7S6dMMR54tColKJYKaazmXWeL+NkYmVZ9JA0DTOhWkdRiJGREUSRQspNwXVs2CkHYAZMy0Rzc73K5zPI5NMY6O9DT3cvWppa6a42KN4mmeEwBUNrJ71qFX7Vg/AkDuzrqoZRCDftEgPA8xHoQZJQkd7IhW5wFelTkmuur7/WIcfrnWaDquYGrQcXMoop6QxRnI+qJAQkHJ0lbnAO26HoLjeVRiqbQhAFaGisgzI4GtqaFrSOaW0sV/wk95gl9wsQhiGiIMDowDTbslAoFNDY2IAnn3wSDz34cNUwYy01ma1ARgi9AJaps2+DKoLQI++AKCLWgab7GJr2XXOir52H2CmSG1zHL/FEC8gYg4yIyu+mUjomjK5P6PskubBMmJapDe7I5TqTzSGTzSV7ViGfQyqVRjaXbfnVr3/1kwv+5SPvCCohtmzcggkTx2Dnjh1YufJl2K4Lx3VrJl6Kabov7ZEN+SaISOHRRx8FN6He+d53swmTJnaueXnN39Kp9NZ0KgWugL6+XigAzY1N6O7phASwds2GJ66/5vpLK+VSxHQhH0YBOFc1ExG9mZqMQYgISiiYMNDS1IzHHnsc115zLaIwwoa1G/GBc8790Omnnn7e/v37USwOYqRSovMSRKBWmescbwZHyynAkbjhB2GgJRaGnsATkhFTwCLNniEDNpm851v1SqXS7Kyzz3YA4MKLvoIf/vhH8ITE2Wefg9POOKM23U7ZPf9sa1+nYDat+o9e8NH3A0DasjBuTBtjzMBwaRhr1qyFofeYZ5967oXQq75lAuxZM2bOX3TkEYuS527sWxI/cMB7MunUY2+4GZw4cUk+n8scNEhm8bOmJhM7KL9T//3WW2+/5qWX19z3Zo5n9erVYxEP+KWCVAJ93V0oV0qYOW0KIt/fsmHDpjdlTNQ+sa01QTsFPWullIiiCG1j2rBkyULW0toecGaGb9d6mX3kEeMBINLmihyxLIz25K6uLtx0w40v79+378Bh3dP5nL1g4fyFAMijI45x09cqiAKM6xiLtpaW5BrS0pFwUykACP/nJz/93UB/7yE5Ebc2tczlgKukhAhor1YMqG+oZ5Zjobene/WeHXsPSRZx3MlLZ40f39GoyeeQEtoHgQ6mp6cX//uny9dd9r9/WXG41+OUM057/7nvP/dsqt+UBncUYABChShVRlDxqPa44cYbntm4ZfMhrcF0Jj2urj5fV2P81SSCo/0Y7r7rzudefP6Zw95n2zvGtF/+18u+d/yy40+MDV2ZbgDkqDoUo31eIIllG4Sj32d/T2/X0OF8B9dJTcDBGBzdzzHAphSWHL0In/rsf8JyDN2M13oRQ+cc3778tjs2bVz7hgYLpuE2AIBpGsSMHJUyAij6aI0fiUjAcR0AGLr0iiv+2tW19w2h9fUNzW2LFi+aCZBUiSLZ2CgTX6BYHPE3b9qcDHT49m3bwRgw0N+PwA9RKNTDthxUylXs2rkHjusglU4hlc6goakB6bTL/nrp5Y9845sXfe5b3/r6f1z0lYv+eOMtN768ffvOMAwjREJguFTB+k2b8OiTT+CFlS9g187tYJzj6CVHoaGhDoNDgxjbMRa5fA6SAYZlghnA0qVHYfa8uXj4kUcxoWMcspk8+vr714Sh37lr524MDQ7Ctm1UvDLK5TKhfL4HMAXTJIMjqWNhLNMiL17D1FRVHdsTF9KCEEXDNMBNM3liBD4NXqMwpBPHObncyppRBDiIMsgUlBKIwgBSKQihyHlWoy5M62PBWW1yCUCJWnPIY6MeXUTG1NZ4eqvkKKo1Gy1uJ5RXCEJ68QonWWrY9e9IASftwnYdTd2mpiUSEXKFPLLZHMIwQsp14ZgOUm4WmVQajc0NSGVSmDRlynHplAvbthCGFGBvGRZpS1GL3Yk/Pm5SwjDCcGkY3DSwacNmXH7ZZU9UPK/LcRwya7JMFItFlEolpFIpWBZZkpM+g5xuLcdKGhzGFKQME7TSMMxaZm1MB9Y0UCWl1h8wHFSLal26irWhiRGHvlGkzoFlNDBgSSyJHntpJJgzMqNianSTpMkbQoLF9GhISBFpxLb2vjHqLqVAGAUaxSNtsEqwYdJrU/NTM36Lp4A8zg2VtM5jZFkKQdFXUhuXcJ2Ja3BIFZIhD4Bq1UM+n4Fl8ai3p9+j6a2PYmkYuXweYApVrwqbO+DKSJyl46bTsWxYlg3bcWC4HE7K9gCgNFLG0NAQuMmRSjmwDAOGaWldqYWUmyIEPDbDlirJTKVryGr0nkQ/TfreUISIVJg0jEQPo2m80iKi4ZEiStUypJQYGS5BKkXrhRsIgwCD/YNwLavwmU/8x7umTZpiQJ8vLwjomggFKQHHduBoOin0oIkygWlQNaZtDFJuWpiGxVzH1fnX+jppNJoZBizHgWPZmh4UD9QiRFGEKNLXQ59chZpObvSUUsNFNAyLkR1IcIMhEiGiSBDLxuCwTBspN6NR6YjuJ42Ics7hOE5Cm/c9D3v27sIJpyw967jjjn1HGETYtn0rJEJU/BIGBgcxbfp0MubDKI8Bna1t2SaqVQ/lyghKlWH89L//ByseeZwde/RR8tvf+fZVtyy/5bZ0Lo1yhfZr13GgVIjGhibkUgV4lQoy2RTuv+e+m667/tpHewf7YXLKCM6ksuRiqu+t2DtABALVchkiDJDP5nH2e96Dpccdi2qlhLq6AgIRpb79ve/+x/hJk2aAmcngJwpDbeRjkvmU1j9zw4BigOO6sG2botHCSJvHsaQgoiafhpee5yGMAiSudm+hS3M2m7Y2rFvLh8tFbNq0GU8/uQKGAl584UV07uuEksDw4DDWvLz6bXOs/f/nF2Msd+zxR3/y9FNPXAYQFV1IhRVPPIkXnn0Bxx1/LGbNmI7h4VL3vr17Vr2Vn/2OM854XzaTadZglI4Ro+Hj7l175H/94OIbt+/Y/YYopNlCnXH00qUnALHmXI5Kfk4qVxh6YDY6Uu+xx598+L9/+rNfDRcH3xT14JijjiHtn5RJ9GAmW0Cl6iOdSQePPvLwQ1u3bj4sHfmRRyxhABD51bq4eEgSO7QRXxRG2L+nO9q1e88+z6sMvV1r5rnnXmwEoIelOiaG1Yxv1q1dU7zpppue7+3rPizTrHnz5k4+/tgT5yeXTstWWG3IhbaW5oNnFgqaSgZceeXV11x34/U3Hurnnno6Za8ajCGbS9OzQCqYpMMOr7n22nsr1VJ0KO85Y8YsbbxFtHPGa1CHkBJHzJ+HmbOnbu4f7Nt1OOdq6tTp8y+79NKvZ7KZBhHJJN9dqlqlpRTVzdWKh80bN+/q6dp3SNrWuXNmTihkCw6daz6KCXjw8Ki788Cb2h/Ofu85//m+9xKfVsnRtEOtfT6IrBHXOhymYVG9oAdagYgOmxp+5BHzZgJav6tZCzXwYnSDqC12R0VsQtfPzz317Oo7b7vzDaG74yZMsjvG0BCLGRoE5LWamz6DtiXLsmA75LZ9xd+uuv2O2++4540eV2NTw6SGQn0HAFiOTYk6kvqw+Bj7+vu7d2zfkSDjphd4KFfKSGcp2zDSMQyGwZDL5eCkHWSzOWTSGQR+gFQqpYojQyOPPvroS7NnzXrJ87y7rrjiyiMff/Spufn6fLo8XAwOHOjy1qxdm5sze9Z7v/a1ry5mgtzhLMtEb28f9u/vQmNjM4Iwgoyo4BgqFjE0UIQIJEzTghf42Lt3X2njxm1blQIq5TKyuTxax4xBGPo4sL8bDIDrWiiVKnAsCylNQ/P9EJ4fkGspg9YFAplMBl61CgiAwUgot9RIRYnmNAxDAIy0rIaO+dDNL9PmJWSwQ02KZVlJ/E1MnYWkKawUIinaJGqGPPHdFUkBrpstAxxSN4uJgQ0jcyZd80PqaVfsPBxr9Bigi3EGyYyahlg3w0FMtdT6X8e2IcMYHaRIl2wuC5ObKA4VkcmkUCoNo7GpYe673/3uU+MbhPOYS6KNuWJR56j8Xwgd68E58rlCQt3t6+nb7vsBVKQ1eqaBatUjlJYb0EJmGKYBgxEFXYgQBjcQRRKGRbRVKGoahYx0MRzrnEnfKoDkBqPt0QCYbiBHpQ0xjRCy2JQs1kwnlCNDO+3WaFYybjyUSPQ3BlPkfquvh9RxOnFjGYZhghTFEy4hI0IFY5DXoGzoIAhq00YF2I4DzhhCvQY542Aa9ZYqgmHyBMEjtNfQbsgWrQEC/WEY9J0UDPi+j5TrwjBMVKtVDA8ORSNDwwEABGGA8RPGQ0kg8ELYOq+WJRpaomRFYQDLssi4jTMEno+e3h5Pw9Va6yjgByFYrK3VjuPc1AZuum2j3MVapNZoA7d40yWEl+jRtm0hioQ2LCKttlIg1Ebb2humSbmqvkAulYFiQF0+i5TrYt+evVh49MJTP/C+D55E+0IaoYhQ9kowTQ4RKTBbJbraZJY0CpRnDJg6bSrGjR+nnn/hBR3xNASvWiVTNJ3/azsuDM6JSqbjkqDdmOPscpr2yoTSLQWIRaALIsrqs2icoojpIKDzjJWCDAOYWgMdiZDMy7SpFVc6fJ0xYt3AQBRGSKfcOJUare0thQ9+8IPvBGAMF4so+xUYIcO9d96PRYsXYcyYFqLhSTLDYlyzU0yGzVu3on9gAKXBIcydNw8nnXQS5s9ZgEcffuLZyy//6187xnYIGYYYHh6BUhGymQyq5Qp2794D13XR0twIPwrQ1dWz67abb7ty4rjJM8849YxxpmlAMUluy4amKhkm7acGYNoWoBj6enpRV1+P445dBgBoaW1BX98gJkyceMySJYs/eMuNN/24Pt+ggmoVUIr2E9OMW2iIiPZHk1tkvihDrTunDcK0TO24rZLjJn0fTckNboDr7PC36mXZNsvnc1UDDNdc+3dUAw8nn3oyZOQhk7LJbdV10NPbU8I/X3GTyxYvOXrZl77wxXOuueGaozrGjl1oGpYlpIBlGvBChZkzp+LIIxdh06YNqnPffmYYxtbde3ftequ+Q1vH2MY7brv9DACIlILByMwzzhhftWpV70urVj777DNPvaGmqZDPTz/umKUL4yKZmC9s1GB5tIEktFEm0Ns3OPSd737ntzu3b31TA5GOCePb1q1ds2T0QBlgSGVS2LZ5Cy776+Wbdu3bc59XLVUO5/1fWv2CAoCOsRPGjZ7rxZ4Ovh9g+7Yd6Ow8cGDXrp0b+wYG+t+mtVN/9TVXLxg9FJdKZw6DfAyKwyOdtuMcNpI9ZeKkxWPaWieIiNhkxmuZ3BHmQYY7QsJiJmAA69avX/ONr3/zd0rJQ7rfFy1anFu+/M6jAcDzPSiuEAYCqZQLJRVeeunl/TfdctNTf/rzH984Pbe1JX3zLTcsORhAqL0C30cq5eKF55/bcu4Hzj30vc+0Mnctv+vCiePGL/FFBCtmEGrfk+HBIQilUNdQDygFp7EOs2bNOOT1N759/KTaMaiDWETxq1Ku9haLw4ftyL3slGXvvPPmOz4NQJvG6ghX1CJLR2e3Js2vpCaTgeR1gYjwzDPP7vrwh84/DDp1o33jjTfMiBt7NmqiwsCI7arjhsB11jgZL8XzNABQDz/22O0HOjtffiOf2dzckJ0xbWorDUVGUYy1PlpICc+rwjJMGIYF0zTQ19e3/xe/+PmlkV95w8OXhsaGiXbKyQJIam+uDISRgBQctm1i06aN27o6uxINtum6NqqVKgr5OuRbcujr6UUgAqIOCIXiUBmKKdTXNaA8UoJiEql0BmEQoampBbZp9q5a+dIDu7bveqBcHoEQArbtsN6+bnfBnPktzU1Ni5966llk8zkUR0q497570dLchkrZQy6bgWlSbMjmzVtRLVdgWynMnTUHLU2t6O7u2VkqDW9izAA3Oaqej/0HDiBl23BTLvzQQ+CHiIIQXqUC0zCRSqcApuB7Hm3STNIUlDOEgU/Nq2VqoyNdFAeRLraFdtYhd04JBaHpbSY3EakoMeSJEUHDNMEMDuWLWkSNbv64vtBcx5EoHUfCDnpo0VRMKQUBkaCFpkm0cEKMlW6ESWcW57lyZkAoytLkhqHD0qmRVCCdppSk84wLMopD4YT2SoZyuYx0Og3XTWGoSKhca3MLGuoK2L5zJ45ccOSy8ePHTfMDQXmDsYZW1cZhcRMgQl2cKmoUIp/QWCPlYuq0ybBttz/wKjBME4WGAkQkUClXIZjODI7IKEYphSDwdLYz1w7gEpaZQhSFlNHLKK9XKKLIGoYJFlMn9PlgiBFQpY09asZfSeFgaDqyTGby2l1ZaY0enV8FDtMyYXAkBmFxIRBrUIWKp3isZjGvIWCuI7uEFIleU2oNIFHPOVQYjcrdoUZbColIiqSZlZBQQkAJCduhIj3wA4risS2dVxzpzY0BTCKdSWt9NNHEXdchRD/rwrJscG7xfL5gayogDJiQXMF1qQkXSurGkiXH7FV9KIHYaAAjIxUwxRTnBiIRUESNYUNyBcYVRETRNYBCEPgJdRdKG2lwVTNfiRvcxLRJwbYJ/afLy3RkjDoIBTZMDtcmjWa5XAEk3ccMHCKK4FV9hH6IUqXcfN4HP/ThdDrXICKAGRKmxVEwc1RomOSMLuPLN8q+MZESgKG7uxsbNqyvgCllmhYcy0a5VIHtkFkCVwq2aUJGpJ1lhnbf1oMQ8Br1wOBcZxFrMFevk/glZZTkNEuFWlSVRiJsx6F/KxhCEZJkwaCHgB/4sG0bhUIdyiNlYsRYJmxTDyF8eWJjfcMyiQiPPPKImjdvLnPTaXjVAO3tY8il2GDkl1D14aQcODYNQu5afjemTJ2O3Tu2wzBNNLeMwZ6uvX233H775RJss2FaKA0PIww9pFIOBgeHwGEglUkjkgFGKhRDl0mn8ehDj982adzUybMmz/hGQ1NTuq6xAG5pYzQhwUyid4uI60EpBzdMhFGIltYWDBeLuPuOOzFt1kyk02l+1pnv/uhTTzz1VH9/z6OZbA7MMJKaRkQRDMughprR8DDwQoShB8YMLRHQAza9AGi50oTaTaWSnG3TsFCtVt6yArxS8qJN6zdUSqVhnHH6yXjokUfxwrPPYrB/kJgZXhWBFyBfqMv/s9UFMnWFpou+/c3P/fC73/vPlJOiXE2NdnJGRoMbNm5CueyhuakRfT29mD1zJu695/7+/t6Bt+zCTZ446YTFixctCPUzCIap42xov5g7d35PfV3jGzbAOf74ZSdOnTx5LO0lvMYwekWvFJvqxVmo11599fIXV6585M0ez7TJ0+fU5eumxHWDjIP9IoFcLoe5c+f33nzrrW9qYFDf0tL03NNPzdKkphoIoZH5VMpFQ3NTz8QJUwY3bdrwthhWferTn/7kBR+5YEmMgiW1jd4rxrS24fHHn9z63PMvrDvczzj66KXLAC2N4ExHU75i+D7KKTjwQ5iuAQYW/fxnP7+ys2vfIcfRmCZvy2SyE4nCm0KlXAHnBqrliuLMYFOnTh4e3zH+kJDDRUuOmnLiccfPSTiKMil4IaWE6zrwPA8rnnlmw+Gcp49c8NGzTzz55A8B2hRUSULc9fWo+gFK5RHUN9QngtcXX1x5yAyDuXPnTgDIx4fm8ySripmWYMALL764Y93GDTsO5zjaO8ZOv/WWW77R1NA8JvTpWRNLGWOZGqg1weDQIAzTRD6bS74DUwmXCtVyVa5es7b7cL6H5TiF1jFjJ+Pg3jr5W6XiQ0iBgpPTAAMSajcY0N/bh9VrVz90w403XtnVfeANGdM1NDSm6uvrM9Cl7OjEFmgwKGW7ZHim96xL/vC7y9evW/P0oe23k2fbhpXsiWEk4bombNtMaOkvr3p5Z6U8kqD/ZiQlLNNGd083UukUGOeojHhwHBteUEVTcxOKxSK6u7tRrlRgGAZS6QwcR+L5556BH0Robm5GXV0e1UoVzWPa0NjUrIJIZJeedOyktvFjMac0H/PnzIZX9TB7zlzMnT0LjHFUvCpc26GolEoZSikc6NoDpRT+etUV1c1btqx84cXnNzU1NcNNpbB75y50d44gnUqRniQQqEoPUkSQSqLsVVDxK7AthwpGzhOqo1KA73vgjCMUfpJzq/Q8wdE3qkGutYiCUNN4hHaVJXdbJXRQsjVKH+mHOs5G0y1Y3JgSGEDOuNopWOs2Eje2OCpER9hIjVhKqRBGYc304iCVEQekRKQC7QJpJJQjISRsmyU6ZEJEdYPOKYNSKIWRcgkmsyBDhWrVRy6XRegRvdK0LJR0PvMHzj33GHBulEZKsOsLpD+UgiiyqCFy5UoFYRCirq6QGBNL7X4HANt2bt394ovPb9IIBqJIwKtU4FgmFI/pqBKOS3RLXw8apJQIRQTTsBAEsUkV10hjBNOkOJYwJNdiKkjJRIFMxgg1j/kkTOf1KhETJVlCPVZ6NyKNDR/VHNPfwzBMYrdMh3TIUtaQyDi2gejmQpsySa3xrcUQsZgYqjTqKhWiIAIDNepSSnDDAmek+YyRRSGItsoAhCrSgwCmddSSjJp0oyulgJtyEIaKUONYOsDo/LtOGlASfX19cFzbaB/b6nZ3dUMIBVnIYmBwAOPHjdcXkhyavYCMjrjiyOfy4JyyKDPpDOoa8hgzdoyQMoQQElFIebCplIsg8CB0JqQCDTHC0AfjDLZtw5CSEGuh0RA9JFCMJVQfxnUusSR6OOMcTNUGJEJJyEBARpTpm6/PIwwoI9Y0OSzLhRQSXb378aEPvv9dZ5/5rlO2bdmIqdNnoeoFcBydxW0aGF2JxFq5+Ek1ep49MNiPoaHBiggiFfg+GT2YnJyQHRNZw8FwsQjTIMQ5jAKYJmUQSynJZIFB62tN7bouY6JD7W43WEKHIoqkJHM2pRAJAUtLDYSk/HBL/7eYfS507Fml4qHqe0inXRjMQKXiYdz48dMWLV74kWlTp7V3HjiA6bOmsWwuD6kEZs6ahkgQ9bqvtx+umUI+m9WRPEDF8/CBcz+IltZW9Pd1Y/ee/Thy0ZLoiksvu/Oh++69o72jA+VKGV4QIJVyYJo2OI+QyWQApWDbLizLQWXER6EuC9MwytdcdeVvmxvrpn/7O9+7gL67AoSCYZt4/oVnMaa9A+1j2rF39140NjehobE+kar09vbi5ptvxulnnoHJEyfhox/58Iy6Qt13PvChD+yTkFvrsgUM9A9QNiDntDYMSw8dIyglYNu0/wgRQoYSClYiJ4izhnnMPpEkXwmNkNzC36LXUHFAfPf73xatrR1YvCSDaiWAZVoo1NfDchxkMilkMylMmza15f/TjW6h0XzHmaedveKJx7965PwFxwJAf28/As/DLbfcqk48/RTMmzOHDQ4NIghCDPQNYe/+TtiWzabOmIpJW7cFrpuK3orvwrhRuOW2W843GHfAJJjS+7ge7G3auGVk5YsvLH9pzctvqGnqmDTJ/sMffn8GsW7omRfrjtlBJWuNDgkG7Ni2a/MTK576m1cuvem82pNPP20uAEPJeGjLdCMKTJwyGXUvvpzq6JiUeTOfMWl8+4SW5ubx1Hxot1woCCGRyriwHAurVq7sam1rGX471tBZ7373eXfcfscXAVjEomO1jHdt/pmvK2DlylUv9/R0HpZ+d9z4KZMfuP/e4wHCU/T2mVxDISX8ICDPGYP8AFzHBTMYHnvkscdXrVx14+F87px588YbBncBwDAs5AoFMDCISDBi0KCnWvEPiQrMIzHRgFmXsA5GcYCZHj6Xq5Wi47iHjIyeeNLJs674+xVfdV07LYTSz0d2UKPW2taCFjQjEhFMw8SO7dsHVzzz7CE112PHjbfvu/fu8fSdNRuN1aKIYvfnYnFw/Z7dOw+ZVcAYq/vb3y7/2jFHH3Ni6GuHYyaTdI5IKLBIJcamL695GW2trcjPmE1MQB1VGEvxMuk02lvbDmufamhubu4YP25s0ny+4kWJFDW/oeRc69/t7u4tf+Mb37569epVb7jxHxkeZkHgs3QmpWnvqKWk6IQVbpqwOD1L12/esPHSy/52/X99/4dv+LhOOPWU3Bc//8VZANXF5XJZgzc8YYVpJKEXAI5cuIi9tGql4lIAQRAglUoh8ANwzpBOk56Sc47hkWFEoUBppETUvDBEcbAflUoJI8MjJEVgCtu37kRxZBjF4SHs3rUTDY31uRNOOG5Cz4EuHNi/D/V19eBgmDBuAnbt3o3+gT44tg3HcbBrxy5s2bYF+/bvR0tLK45adjRmz5kZNdQVdpaK5W7f82HAQDadhQGK2rAtCxanpsNJuUhnUknYumFw4obbNomihYAIhW5iiIrHTL2o9EAvbh4UA2lytSOwaZmUbakRPdLd8iROSIhIN1a0UZKpFTU6MV890ZZSyjgtZB2rwlSsFWXJiozNKEREeZ40CqoZ9hhaG5xE6uh/xHUzFUXkiCuViO2HKYYmlQI3GAyLDChyuSwymTQhZUyh0JhDY1MDwjDEnj37MDQ4XMhm8zP7Bwa04ZckCq0O/qMpCm3druMgl81S8xHROUln07AsG/19/bjq6qvv3rV79ybHdan4D31Uqh7Fz2i3a9tx4Pkexb6kXHKrhYTjuvowFUzdFMRoOfR5jx19aXPn2ghMKz6SqTEhQtwg+jTjpLllPNZNGzAMK4kiShp6XjMtYkr77TIyN5BCai0vdSlK0ucZJqeQd9uFbTmkGYQ2I9I5wkqRtouMy4gyLxOHbdI58FGoJ+dcZ2Vz7d4rEh0G9LBDQSVU4zAkynckaCDjuCkocFSqVcps5SaampvR0trIFZPMdizKrpVAPp9PDMhi5MC2bLiOC26ZMB1Lx1uRVKE4NIwtW7YUAY5MJkuNrMHhex7CINR5zPp+gTbP0HFacZ4ssQNoXTEY2rWfduHADzS1lyalsfETdMMISdpMadBmGkXkvuvqfY04/xKcG00XXvTVjz32xIqGJ55YoQBoUzWWDMbUwaPQmpshY6P9v9Ha1oLm1iaAQxWLwygOjySIf+D7CDyfqPcqgoQAN8zaezLaP6DzeJWUZJg3WnseOzJrNomE1OeQ0GLbdpJ/C0VDNsuy4Ae0f0GRzIH2QxMiCmFbBoSgIYrn+WhrbV22dMnRJ/Z196LzQBcCL8TjK57BSIViB6MwQk9vHzhM1NXXkeeBHs69uHIlFARSrokojFAcHMS+vTufeOjhx37f1NLW39zUQMiQdhP3PA8MgO95KJVHEIQhql4VitXMAb3IL966/I5Ln1yxYjdAw6dYKjJcLqO/v4/ub9vE36+8Es+/8AI4OEIRoWPCBPz+L3/CzFlzMVwsYaRSwnvff84pP7n4p18YHi7xkeKI1jNrDT0YgihIhnOO6yCbz8JNaydng1g2TG/YsfM9N8nkyjAMmBZRjEUk3tJC3LTJoMe2bBxzzFIsW3Ysjj/+WKQzGVSqVKNOnDCu+f+zzW46X/eB97/v09dddfUf4mZXhhEKdXUoewEKdY1s0oTxDACy+TwM08CkqZPRdaAHe3buwWD/YNTf17e2t687eCu+z3kf/sh5Z7/nvWfFEiUOojPHcqrbb7t9/cf+5d+uefnlF9+QIQsTov3/R95/x+lVlev/+LXW2u3pz/SZZDKZ9EYKISSQhN4RFcUuFlSKXSmW41GaitIVFZUiSFF67x2kpkN6z2QmmT7z1N3X+v6x1t4znOM5Eoiv3+fz+Y2vvABhnrLL2uu+7+t6XzOmzThQCkFGPTPwz5Sw6lkI4LfX/fav99379+f3x3fK19dMifrrshmsFDWg6OnqQRgGoq6+1vwg79HU1NyYSmfSkXxSrmeqMgTw6j9eHdq+ddum5599tnN/Xj+EseRpp33q65f/+opfMF0bw0O5x4rUQtF5i/gvoOGq9/texxx91OwZM6ZOi541OlEwvFHPF8IUL0QV2kwjcByn9JOf/vTGd9a+vc+xOKd85OR0c0Pj+IH+QRbJ3SNBa9TUvfvue7Z07u3cJ5l0e1vbVDmpFjFrY5TUSBZJ3T2d/f19+zQ51g2Tnvrx074xcXz7AskKlY1rOupRHIoQvf29CINQ7pcAcPBKNpvap/dqrK9pra+paR3RkcvnO1fqLaoUIs8998Jb+7wuZRKZ6//0+0u+9KWvfE02q6liNSkStJzEgGkyvvW3v7/O/9tdf+NSFSZGaNTvUlcT6nnB+6IiLl2yeGJNJp0ZkRz+lwYGjWyPo5tnI9d/U0PLBt/z9mnymrCSSULkZoeM2KNHGvZRrKfSS7/4wkvP7tndseG9vv6CgxfRfC7XKAjqovWRGRo01XSOBmIA0Le3exAAVq1cIaLvC9MwYr+abdtxB5+HHHbFQaBiZKrVCkQQIgx8hH6IVCqDmlwtCkMlBDwAoQKeY2NPVxd0ptVPnjhlTHd3Hzo7d8N1HaxesxIB9zB16jTUN9THU5NCsYgVy1Zh2fIVqFbLqBSLOGzRknJSs7Z6vuNTSlEuF2E7NvK1srlUKBThhj78wEO5VIHjyPgaSgh8L1BRIHICy0Me+ymhsqAEVxmYEn+qPJJU+m4UhVNK3xSRlMnimgih5IdKZsrYiK5IjJi+IyktJWJEsgqARJO4CJgUXWyRN0zNHanKzgQhMTk62tzyUBVeMfhHdkZ1U2Zxypx0BkM3JCRJNQJc10Xgh2CEQWMaeMhhWQZMy0C1UsXwYAGUEhiMYbgwiHkHzlmUMBOThweHUFOTha7TeOwlo5GgokkkWrxcrsD3JV01CAJ4ng+NMWzetLX/iSeefqilucWrq6tH4IcIPLkx4IGQdDVGUamUpYTX88B96akOVUHAuZRSxX56Kr2aYRDAdwNoVAMjmhxmBzyGQMXgLyj5OUiMtWdULmwiUPLZUOb/CRX3FPuxIy+DGNGQBUpqPlomLWTXIW5GhEGoijc52ZSdu1GyNFXNhoEfTwMiGjTV1CZHeTsN04CmM/i+H4PVTCuhOu6BaubI7k0YcPiBBx6G0DUD6UwGggt4tivvdUHguT4Mw0RxqATXcQllBJaZAAFFqVyEYehxEyHyn1NCkM9mUV9To+RGIZJJCXVyPccZHB4s6LqmYqIYTNOEpsjaktYnYro2KIGmm5Cuc6pIfiN9bzGKW07YyMgzWrcZZXHGtG4a0A0ZNyQ4h+c5qJTLMcnasExojKFcqWDxkqVfQsiWdu7twhFHHEmiBTIGVqjaVmk7Iub4KOnZu/OwXdu1crmclsvloDPpIU8YJphgcD0fumkARMrySRRNRmXTKipuR1t5JIGZxvYDWfeKGI5EqQQuhT6HH/iyy66aO4TIJgulgAgDSbIW0i/meS5CESJXk0MmnUGlUgbRSPJTn/70SfPmHtzsc4GhwQJWvLUKRx15GGZNnwrPczE8XEA6kUJTQ72U0zPEMiTGJACra28XXM+FZZnbzj7rzKu37tq4ioBgqFBEyANouvx8jusi4LIZpquMW9uuIvA9VKsOwjBAPluLzZs2v/7Y44/ev3e3tCAyTQPnwDFHHYNZM6ajp6cbfb39qNo2GpoaECqxpa7rSCVTmHXADBx1/DGoqalF1XHxgx+d+8XPfvpTZw4NDyCTy4KHAo5jwzR1JCwrjoxhjKJcLkt7DGVynfNDCRkU6v4gFH4oY6N83wfTmFTNhPu34N20cWMZAFavWoFHHnkUAQSWL3sLuzt2IZlIgIeAriXrDdNK//9ToTumeVzmhGNOOvoXP7/04pnTpl7Q19PbAqiEBYTYsHkD7rz3HkyfMwvpdAYAUCmUsXtXF6ZNnYaamhyOPfFoPPjQw2vPPvuse/fHZzJMq+1LX/zyl3jAk4wy1awCdF2S4gFg4aGH7Jw4efJ7LlzaJ7bPmDhpwvhIlk1HS19HFbpRU4pQih3btm1/6IH7H9pfx7o2XztWdYPkvRCqZqRGsXv3br5p0/rhrVs3fyBfLTOTGcbk5piCgCigKNMINqxbj42bNg5NmjxpsFq191skESHE/PnPf/HD++67+9djxrROGujtB4n9i7J55btSXQcK7O3eu/ON117f8H7fT4BPBqDHm/xR9iAOOVhJ6AY0ld4QpRQ888LzT61Z+/bj7+c9V6582yNEyze3NFmy8Hq3KgAAdnft6S4Vh/cpP/m4k447QD77xChOyshzEgDeefvtrZs3bdmn6+JLX/ri577/nW+dDjXxlnCld48kC8UiHnjkQRTLJfBQxvUxplcc13X25b3qapuacvnaJtl4JnFU42gL796ebvv+++/bpyaHZSbYzy+67EfnnPWNbwGydqBq78Kicz5Knr1hwwbnl7/81fKklRuY1D5lpOnORwY1SmAnOH9/z5eGhoapPf0DUikV+WhHfc+4JopVbFzxayiqlSouv/rXT4Jh5z7Kucdlc5nESFkkRjFz3h21Wi6XO1979bVH9+X1ly97kw8O9Fk6o0koNawEU8qUDEoJXFfGcxZL744y0/zAV2Z5GWMhSZYhXEduqpOpJLgIYVelH5Mwhlw6Dd8PEXBJGRUQMCwLqUQSOqOwfRcTp0ycYRjJ2o7dnThw3ly88dYb2LB5AxYvWYyevm4IHmJM81i4tgvd0PHRUz8Ox62idexYvPTC83jk0ad2rFu/bl19fR0KhQLSqYws4gwdIpWCbdvRaVLQqBCGaUFjHI5tg/MQrhBq4io9rIHvq82t3LwbhoEg4AhD+R1kE1MGUHOVfxrBi6KLAYRIiSAlsU+IqNfkgkuJtJJiklF+AKaKpzD28AqEo5jkVOWAEUIV8EoutqNzSBH7FUNwlTtKKEUYSsiB73pKaq1yYLmkHHJwMCZJ1mHAYdsV6IaJsl2Vfk/BYNs29GwGuWwOCEIAhHz1zK+ems4kGnZ27BCB75A9Xf1oaGpCwpLTV40RhIFAT3cfEqYF1/dUHrMOgRDDwwUIIbB85YrNG9avXyW4kLE7hMCuVmHoBkwrAdu14XuOnN5CelG5ENANAzQM4XoSyiOo9NgQpijcIUfAOQi4WrhUD1N5Q5ki3QW+L6djEVhM/Y9Hjukor1gRp4mg8ENfwaNGIo2iH67gHaahIwgChKNC6JiSZ3POARLIq8iT55MqeTkP5cNCi55CqsERqQQY09S5pjB0TVEKJfggqsFlYSMl3BEIQdd1gMvrk2kMoS+juAgi+BWFXbGRSiVgWAyGQdHePhFr17+jFYsVlkgmZEFOuFR4kBGcvOoDyok2k02U4eFhEKKhpiYP3w9cz/EdWdz5qJRLAAN0KhUShEhqMaUCQchhmZakQPtVdQRGFkFKpW8zmugTQsGjXguXagnDNNR9zUG5NMQQCFiGBa5xeJ6PZCqtoE8BSsUiauryi+65955z1q5ZY06eMBETJ02R0U9qPYijgTDirycg7262jtpoEsIwZuzYzK5du4mEcAlYVgK6qWNwcBAhD+D5AqZhQjBDytOpbPAwTVPHhsD3o4msUMAkEUPnNAXKC0K5qRWKbEIIlJpFg65pUqEiJGhMhPIBQCmDH/hgjCGdkKRkShmyuSxc1wHTtCMOnDv/qIMPXoDlq1fikceexkc+9BEkLAt79+xFqVhBLp8FFxx9Q0PIZLNIMQPDxX7Ytoslhx6K4aECCsUhhL4I/3rr7beVKpUna2syGBwaApCHJOm7CLj8rJlUGiGX3IXCcAGccOTyeWiaBcetwvdc1Nc3es88/fxf28ZNmPvt73zz6ETShOsG0BhFd3cPbr75JixadChOOenDqK9tBHwOBhmfBRAM9A/CsV1MnNQuY6KA3He++Z3znnnquR3dvXuebmhoUo05Da5The86skHnO5LYL5Ruk0Cu0UyidoMwWj8kB4ExOdnWdQ2Gru/Xwq4u3zAMAI3NTfDCAIbGIDQNtl2RU3Lfw6x5M1vGto+tAfD/PLzKSiRSXz7jq0ee9dWzj0+lrEOnTZ8xM5VPpmpqa6S9YHgQuqFjT/deTJsxEQfPnxvfv+Wqjdq6LAYHB2NZ344dO190XHvD/vhsP/6PH3/ppBOOWRyKUbvIUVmQN998cwdl+rNz5sx+z+fpmOOOOUQDIUEYKrDdu6XMYlTzLQxC6LqOF55/8dEdHTvX7a9jPnv6rJZYqkopoJHYR1zfWBcsXrK4569/+1vfB7rOG2uzdNRESyrwIvq+jnLZ0VOZDBs7foyzP74TIcT49je/+8Of/PhHPwBg5WuzkOabEAO9PejvHURbayvSo+zxt9566xuEal3v9z3nHThvTvwVR+8l4hM56v/jsiG6cePGnT/9yU9/Wy4U3peUe09np3f2mefkTdOkALC7owM7d+7CATNmYt269aJp7BgyZ86sfYrjapswMfvQQ/dNi6b+EKEiC+Ndma7LV6xYZduV96ycGNsybt6qt5efByDve0KpCHnc+I6ewalECscedQySySR8Xw6ydu/u6Ojq6tonH342U1OTVJ166Zelal89IiN2PK/c1Dym972vT0n9u9/93vnfP+9731P9AFBtlCJMKG4Llxaz/sIw7x8YeGbC+AnrDpp7YB5AQ1zoRs0QzhX7JeSECv5+roNJkyfPSSQs/FcHb/yZyEiNwUfbKwFs3Lx+057uPU+vXrlyn+TUpqG3EQIr2iuR0RrpUdwVALjk4kufevCBB1/Y1+9VLlWyM2ZMbwSk+k9QeZw1SGCvL2MYfTfw32VDoAil31BORlyEQaA2UgTJVAKMUgSenAYZhgEv8BCoFxSCo1wpwUqYmDJpEhoaGmAl03BtBwvnLzykt6ebvvLqy6HOdAgCHHvMCTD1pJQkKgmf4zlYs+ZtiMDFQfPmor6+GVOmTMXSw5b29PUP9AeBDDyvVCoQnGBwqIBSuQxN0+Nph5WwYtmjH/igGpOeOEX7C6NoHyr9tTJjVcD1PITcj3NWgyCQ0R2aJgEplIzk7sbxrgScxGmzaoKn5KZq00wVUEpEMsiYwqq6NJQAjKppjnpwRZMcJa8gJBoAysLWNCwJ4KEjcrxQcHi+px4OmqL7CUmwDUIlY7Wg6zqEkDLnkAfQNAOGYULXqJS9EoGG+jowUIR+gM69Xairr2s69vjjDkmlkjh44UIEIcfmrZvQ1yvXANv2JHlOo8jl0khlE2hsqodddVAolDAwOIjuvXtQLhdBdbpHAH1MY6oA49A1Tfm4qzJghY+Y2kEAPwzicZ4IVa6wRgEmlz9f+XmZxkA0quSe/ogfQxlfeRiCUCabFspDy3RFxuWyMNQMSRqOEOxS2qTIySROLZIDd5XzJRT+nDIGplFEWaw8kjVDQY8oICAzPBE3SMiI/zsMZWQPlb9rGAZAAc9xAS4bNhACvudCYwy6IUEofijPr67pccSRAOAFLgAOQzdhmJbyN1Rlga1TFf0kZCYpoeju3YNCoUQFmMG5gKYzJJNJMKKN0qLEabiAkusHYYBUKg3TlPAi3/UDymhYV18LAgpdN0GoBp+HIIzC83xwQqApq0QYcLi2o0jFVMnLoY6DUizoI5YESgig5N6MaXHDyjAM6IzBMizYtovA50imskikkvBD6Un3Ax+Vainx5TPOOD2ouJN79u7BEUceFm8iS5UKCsVSDI/jqqiOZeqjNDlhTGIH8vk8WlvHpkrFEgehSGXT8PwQg4PDoBRIJhPgYSBfi47I4KO1JlC+5WjKPJKrOQLcEQBCHq0zEYROqQyCACHnqNpVKX9n8v5JJlLwpbkcuWwOQjX+6mrqYFdsDPT3Q7eM+gsvueiMSZOnNHZ27EFheBhLj1iCWbNnoXvvHhAdyNfl0dTciLr6WuRyaSQVqOq1V9/EmWd8HS+/8gYKhSrGj2vHylWr1t562003Q4iQ+0AqkQDTGGy7Cs/zwAhFwpJ5weVSBa7nIoSczieSSQhwaExT8kyBLds2rr7hpj/9+uWXXto40DcA05TXYzaTw+c+fzqOOe5YzJw1HcmEhVKxjOGhYbmuQ6CmpgapVAL9A4MA56hWHcyaPWfKDbf9+buE8qbBgX7JqqhUYDsumK7LSa1mgXACBgZdN+SaAg5dyfcjcJVUDsjnSRiG8D3/3fK+/fCzYvmyvl17todjx47B5MkT5eZl0gTU1tRi985OuJ6DpoamMUnNGvv/cqFLCNGnzphy6Le+fdaFxx513M+bW8ecMX32jIPnzZ+XOnzxUjieixVrViMUAkwzccIxx+HTp56GkEva/Ttr1+PNZSuQtDIIXA8tjU3o3tOH3bt2vrM/Pt/CQxYf861zvnW257ly0vrfpnvAY0889vL3vvvtZ+6/7+73VGDUNdRbsw+Ys1C1QmNrzbvUo6M2j1bCwqZNmzuv/c1vb9yfxz6ZSObkhEkg4F5sIVr39hqsW7ex+NxzL76zbeumD+QVHj++JfahCyKlvZGNZerkKbjg/B+Q1rFtg2+vXu3th2up9txzL7jwmmuvugCANTRUxFurVgAQYNCwfv0G7O7cDSNhxZJOz/OwcdOmTatXrSy9r4JjyrRJH//YxxZDreNRrGDUVKVq2iWTD8K44Lr6qqvvWL1yxSsf5PseecyRLbEKQTdhmAaEAFrb2khDXQN6u3r2qYmgMZpPJDLjRqr1EQWctM8QlIbLeOHZF9/zZHTi5Im1t915ywWNDU3zXNdHnFmtUhcCpZIDl0rUSe2ToDGZL2+YBl559eV1g4P9+/Q96sfWZ6OPHclq45JM7dFEIBzLeG9NTN00yDe+dc7Xf335ZT8AkBQR7RIizrOVA0IOqlEkk5Z45LHHHvz8F8/4yeq3V18GEr75rmY6EbHfFQCqxQrnUY7PPvyMa2vXFxx44LRsKiX3HkIoxo3cY3AiFDOIjMQAC/kZPNfFjTf+5dVdO3fsM5k8X1NTHys4CJWWI9+D7wcyqrRYljY0AK++9tqTlXJpn/O1a2pqJzQ3NY91bMlwsiwzVk8EnCOTSWHXrt19b73x5tZ3FbxCTayCMEDgeQCoLCYZhW07sB0bhFKk01kIQRD4LmynCss04Lk+mCIJV8pl9HTvwZ49nUinUmMWzJ03/5677sb8g+aT+qZGvL12LWZMnQxNJ0gnMsgkUmCUYteuXahUynhj2VtYuXIFnnriCSxfscYngu4ydaMAQuLpVMB9aJrMjnRdB17gIeQhHMdGGPoIAl8BYBiEyr4NfB++7yEMJRacCBJ7/zikDErEk2Cpo5fRFAS6bkrJq9poCzUBjILDDd2CxpgKO0Z8swpFZKaEIJlJQ9N1eS1RdcEp2Q6izW1EMlNTnhiTHqWPKx8bD4MRWYCI8ESyMxVJQEIF8JLUMhde4Cv/oJyGpZJp5NJZ+J58gOk6hW5oEKFANpeFYeoYGh5AyrImaoy1vfXGMrz4zCtYu34DCoUy2sa1KRqfoTDrQMJKAoJg79698AMZAO1UHKTTGeRzefieP+j7AXI1eRDBwYiMfJKFly+l34wh4HKDKeOTRBw7ozMdYRgg9D3olEFnenyMeRjGcnKqpNqUELn5V1nDgoQq80xIIFA0XRdcSpiVLFvT5HGQsVwy6oYSCkPX5e8pMBhlTHozVSTUqAeqLHC49N5SQmRhHzcp1FSOUgXkEvHGJQzD2PstlFdVCAkuCxSRlwsp36BKPeB5LlxXEZF1Q8KRlBIgDCRdmjEmJ79Cwk8kTEsqAKrlMjp3d6C5pYE01NUY1UpZRf4E2L5jKzq7dsvPLSg815XeGVWs7ti+E44jvf9y0WeBH/ie74VIZzNIJBIwVCEhc2WlBFnTddVNDGT2siZl99E9IBsTUcwWg66KLEqknJcqyVcQhPADOYVjuoZAyGvcDz1Uq2UwRhH6PhKWBT8IcMCC+Ud89GOnfuiKa65B/+CgMC09bmakkykkk4n4/ow93eLdMURQ108kX7XtCirlSmBYRhg9oGQzTZJ/5ZSWqqg0R2bXkpFcbaGK8Qh2Fv0Z2U9IeAtRjQJN16Ebeuxbl9nCNJYNBYF8oHieJ+VxajJsGDpsx4Hre6CMYGBoEFOnTvvwV758xol1dTmAAmOa2/CJUz+K2ro0xrSOgWEmkMym4HOZpW3phswa9zkOO+RInHX2N8AJ0DymGaDAmrVvP0moubsmX4tMJgOhmnGMagqqBjh2FZVyBdlMDg11TUhaCTiOi57eHgwN9sLzbOiUIfR9NDY2Y+vWzU8//PiDN1CNuK7rIxQh0pkMpkyZGnehA9+HYemwuYeNm9djeHAIhFDU1dVhcGAAWzZthFO1US6VcOrJHz3pEx//1Nc91yGFgUGEfoCmxgZkUikAstlkGpZUH0DGOPEggKHrMCKQofLJRwRsnWqgiga/P382bNrctWnzllI6lcHQwDAqVQf1dQ1oHz8RjuNg185dyNfkk/MPPGj6/6vFbkND88zLr736wptvuvkPBtO/etc9d8760KknZD784Q+hq7MLN990C155+RVMHD8ejfWNSCcS2LR5Cx545CEwasD3HVSdMurr8qiryWP8xDakMikYhuYPDQ/3fNDPd8ABB9TeeMPvz85k02Ntx5V096g9qBpZ3Xu7y0ccfuRKTTPfs8+wtqmx7bjjjp0TWWn+azboaCli9LNs2bJX3l675p39deytTF63nYoOpZCRAwq5I06k0njxhWf3/OEP1639oO/TUtdcH002I7ANVVafFWuWi5tv+NO2G/90/dsf9H2ymVzjgw/ff8VVV13+Y0pJulquwEoaKBYKYUfH7gAA5hwwBwfOmwvDNBCqDblhGJg9e3bp/b7vrFkzDx3fNm6yfIaIOL8coyPuVGEQWUVs2x5eu279Mx9Ykl5b0yyL9gANjY04ZNEhqGusx4SJ7cjnc9i2Y/s+3QP1dQ2Z1nFtdfF3kdJF1RBW34tyP5G2+t9jA4J+5zvf/8HRRx3zOd8PJZtBTUUZoygUhtHZ0Sn3RFTu24IghOt60CiDU7HxzFPP7drX41J1Slb8GdR0M4KKRjdauVJyLCvxr6eZ6SQ58sgjT7/opxf+EEDec1z1ekoNQaRpCwJwXRcAqn/7+z03XPfbP/yoY/uWd+xyufjaG6+9wBVLJppcEDk5k++RNELTMPaZUE6YlmSa3hhPczFiy1ISMWmxVFnhImLMACgMFyqeG7z+8ksv77OCI5PJstFdBM/3oj6CHE6oSEzPD3b5RLyvnOMjDl88N5fJUsMwYCYs9PT0oLe3H4SRGO7X29/bWxguvusap4RIiAgRAoZpIuQBiqVh2LaNMAzg+z78IEClUpbxL7oGRgk0jcJKJBAEHLbjYHdnpwQ5CY5cTe2cVCY79YQPnYjPfvoztKGpASefdIKkHHMO09SRyWaUh40gEMAhi5agfXw7hgqDKBXLPbf89a/LqrZdZkxHpSI/i8YkAVVmxzI1+fJUJIkGRmWxwwiFqRnS4xeGcjERBKZpQdNlRmZEHaSQxQsPIwiS2uxyIPDCkWkPkb5BIiTUR3qD5cY3FEpaq6KIZBVFwIn0pQYK2hOP4STLWV54XP6JMOSUyPiBqPaFgJLbeQhVh5UqWXVU2HLO4fuBksIqGSijMsiIB2CUKo07UaAVmWfJVWGVy2aRq8mC6RSe58FxPBx3/LHzDKbnzFQKLjzS1FCLE48+Rt47oeqMRTINIj2nhmmipiaPmnwN8vkaNDQ0wg85Vq9Zs813XZSLZQAEnh/CUPCqaOqqUU1u3hXIJwqAF4CcwKqpNgSBUtmOdK14JPOkaiisJmKEwrISYEST0sYIBKQibQhlUj4ehgrCxVWoOeJFnKvpP6VaTFYOw0AVRtFEX8qHiRAwdAOMyimsJC6rLRAP46gjQmURqjEKjWrQCFPRKCoSi+nQdTP2WWuaBsYYwkBlOgs50Ze+ZDkddVwHnuuqqbS8nik1wAMOpjHpSVWQq0qlCgEgk8ugZUwLgtAToCLgUNmtlMLzfQwPD8UTadOwFPFcQGMUbW2t0DQNxaJs8JeLZd+p2p4feKjaVYRckvN814PvylgbTdNGAayk7JirWCmumg5BGMSbAd/zpYxbwebk51dEZxHC913p1/YCVMsluK4DHnD4ng/OgUQiCappqJSKmXO/9e0veo43YdacmfwrXz2TZLN1iMBkjGmyeCQUXiBVIrbjSvJ3VIAqKRpR9+fGTRuxcuUqbN+2q6Trhq9rDIIDiYQeU0Z9z4sVCgIyXkqC8PR4qh1dQ5EqYLS5RghZAPPIBiEIAlfyCSQRWkmWKUMikYShS0AaJRSmYYIHXAGsAO6HSgXjQoTh4nPP/fbXLdPKdHXuxeo1K1FXV4uQC2iGBlO3kDRTSJkJeH6AZCIl74lAHn/d0PGRj56IWTOngwuO1W+v77jn/vueyOXS8HwPju2AEQ2VYgnJRBKpVEplL4dwvCpct4pSuSQhcYpgTkBRrTrgEKitr4ttHH/+05/+et3vf3ufpGgzEMrguC7KlbKUcho6EqkUGhoaQamJYrGMiu3A5wGmTJ2MydMmSyBfLgsA5A/X/+FbS5YuPsMPZMPPtiVBnAgJigt5INdNwaHrBkzTQuCG8BwPgIBpmSAqS1BwqfqIyOr786cmn99zwPRZewFgfNt42HYVXAhYCQNeGMINQlAAk6dM+X+u4KXUyH/29C985uqrrrhibGPr+ds2d8ybM29R7R//cL0+rqUFDz/8CK659lr0DffiiKOOQiZbAwJgx7btxe+fe94/rr782h4A6NyzB9OmTgUhHH29vVj7ztt47NFHUSqWC7t3d/Z+0M85c/qMg7Zt2TnP9X3kslIC63qu3C8wCWl77rmX7nvskWee6N8HONakSVPmZpKZMcBoZgCJEu7eVfVGDbJlK5a/sj/PwZyZ01Jt7eM0ANA0E7puSmk1CCZOmoSafK0xc+aMzAd9H9NMxtArrmwsAGCXK1i1clVlb3d3hxf6HwhYVVfX0PjAQw9e/dEPf+wrggtSKpWRTKewY+u27v84/0f3PXz/g8sAwLQseAo+F1NeAXR1dL0vOXVNQz351Gc+ebL8bhiVRyNGNVEjRR+JM5XXvbN23Z49nR+4mdDY0pgD5HOCYEReK0KB5198wVu/Yf0+FTOpdC5t6FpCjPoqEcE7ithzbJenspn3BFg64fiTP3vOmWefExf9lGJ0l7lSsiWoUjWSAj9Q6jVpeUvn0jhw/rx9ltbU1+ffVZCROD505L/x/cD1o0nD/1ywk3O//Z3vPPPE01dks7kxrmvDCT3BYxmvHFCEoYBuMuzYvt0968yzLj7jjDO+//bbK2KK9csvv7Zh5+5OG/EgTrwrC9d1fX94cHifmy6pVCrZ3NSUkuqCcBR+WVnAFIQzSg+hRMb1EULRvbdvc6lUWvF+rrvh4RFfuOt4cGxPgVTl3jT0pTXvrrvvuX/dO+t27OvrNzU3JmfMmjk1UmBwIVBbU4f6xjpl/5LHra+3t+g49rsm49Tzg/jBHpFfo2gLXdfhBxJ+4roOQj8AAoJ0IgdDl9megkgZRr62Bk0tYxCEPvvQKScd1jJ2TL69rRWNdfXIp2rQ3jZRXlyUxJM92ylj65Yt6NnbDceuorG+BQsWLMLUKVO2+L73DqGyABNcRsY4ngNNEVgJJaitrYVmGHBcT+bxBh64kJu8IAxi0qkgQCAClEolaLqGXC6HMOAQgVBTO0VGpULRqVWnVijzPFPYnlFFKAFVxFSVESmih1MkzQQoESqcVS0MalMrCzP5h6gMyMifS5TUOYpAiSA2lEqZNOcClFFoqgCkhIJRBk2TZF5NFf4QAropaaNcCDieD8oYiqUShgtFeb5DAd8NwTQNjuNieKCIgYEhWFaCzZgxY+7LL/2DJpIJfPmLp6O5cSxAJeEVFDGBmsSB9AK1NbUIPYHO3V1IZCwQAB07OrpWLlu5UtN0VEtliFBmoxZLBXi+DaYRhH6AwJf+Y0Y12ViAnIz5vgfHtRVZVhZiYeCDqo1mJCWnTMqlo0kL57IhIYtEJpsAQtGco4pZSdMjNaKUz4wUWBEl1/MlAMo09VEdONkACYIgBmTxUMlPCY8n/Dzg6n0Bw7JgWiYC34dddZRcNUQoApUHLPOaw1CC4QAJS4tgRLohiyqujPnRpDkqiKOpYBD6YBpVHlc58eMqKkjXDBBIdHsQhmhubgE4uF22e7OZHLiQjqaWlhY0NDTFMhu5sZLHg1DpCU5aCVhK0jw8NMwAoelMRrb4vo+ElYCpm0gkLNkUCny4nq2AchgpEhSQjaliPVqUOQ9j4neo1BBMkw0b2eSgMFMJhDwAI9Lfn63NwDB0JKwEKBh279qJefPnfXLRgoUf3rh6HSZNmEypym6LvguUm5uAgBGmZGccnIwUMer2jdeFUqmIcW3jkclleOgHsKtVOJ6Dqu3EygCdSECYYWjxRFBOSUZihjSqSSlvVNArWXVEqOZq0fF92dgzTAOEyqzoSCrNGJP/Hhy6IeVejudCMKlaME0TyXQSdsVGTV192+VXXn7+8UefcLDv2ejo3AnTsFDfkIemUVBBYBomdE02xVKmGcuSwiCEGwQghgYBSWYfGOgP//SnP93dtXv3co0xFItFDA0Pg1CZtRvBtkQoafrM0FGullCqlGS0BNXBwGBZKWQzGYAAxeIwdEbROrYVlpnqv+666375+uuvvEmI2lcp8jMkb1k2hSjD9KlT0TquFQlTg8ak+iWZSiOVSmGgtwcb1q1HTTZfd9utt/9g9ozZR7ueDbtiI/Alw8HzfBlvBUm4l88eAc9xwVWzxbQsaJqMfdJ1Q1lLQqWV2n8/O3bs3Hv77bevA4BEMoVMJo10Oo0gCNHWNg51tXVyM19bPzuZSOX+Xyh0s7ls9rgTTvjUn2/4/R/mz5t98QvPv3DM2jWrTSIYPvPpT6KuvhY3/+VGbN2xFVdeczm+/MUvIZVIQaPA2vXr1n3xjK98+4nHHrlw4aKDtgPA2OaxyGfzKJfLKFWKaGkaA8YYhoYKXXu7u/s/yGe96pqrls49cO53x4+fMCGXTSMIuYzDEDSOG7nq2quv/+EPLvjOU08/vE+ywKWLFh46GqAT757J6DibkVSCrq6ubU8//cxr+/NcOLY7DgHPYLScWv3Fd0J85nOnt/zq8suXTJo8iX6Q9ym7VRFr40aRixPpFA4/7HBjwYKDMWXytPftFzjkkCVHPPboo3cec/RRny8MF9Db1wczmQSAoR/++AdXLVux7OKGhrpdAJBIJTFmTAt8ZUMBALtaxaZNm/z3895t49umnHzySUujY0j+C+V/9LReKEgsADz40KOrdu7c+YFgYHMXzDPGNLcko2uFspiSgReefx6rVq4M8/ncPnkzG+pqsgajo+BOkTw7Ji3BtKyqV/X/5TTywHkLjrvpxht+aiWMnOcFiB77XEj1DABUbBc1NTWI8F6axkDV4CY6VvmavLGvx8atjBCgQmXXIkQOSWRRDVTLFWzbsu1/bFJZViJ73nnn/+yiiy+5FBRNQgC6aSGVSo2waNVzyld1c0ND4/IXX3zpBscuv8tzPHfebFpXW0fjiTNIzIkBgMHeQb56xep97qi2jW2py2bSEh6lLGPgYsRzTQhCIVSaC0cY+PA8yWp6/KknHnv11X+8L8WIiOQtalhiGFIhSRQUua+/B888/fzKn/30Z7dUCkP7/OBsbGpKjZ8wcWy0Egaq8a1TBiIEdEVrrq3J25Mmtb/r+tAkukeD7bqSrGpZsrjl8gHPKIOZSEDTddiVCsIwQNWuSKkzk3eqoTMAHJ27O1Gbrm09esmxh9XUpPH2O6vEymWEeL6DRUsWwXEcJCwTdTUN0BMmuvbsRl9fN/I1OXTs3oXenh7s6e7p37Jp00ulUqnDMM14quN7AQI/QOBJQBPnPgqFIgglyOWy8F1XShwBSXBTG2RKqYqOkRE0lFA5WYyIaSJEFBcjoVOyY8AIi7MXATWBESNgG01jsiAKQzWdlRdTRGjkkD5h0Ig+qPJgyUihCMIVkEhNDAUB4UpeAaE22JHegMbvFwbK+M1InEEKHsL1QpiGrgpDedw0pgLrhQDVGCx5U8IPPAhDen6rFQcCUoYbBBztEyfWTZ0+Y0bH9g7U1uVxx513oLWlDYcfvhSMyelhlA0LKvd6lbINUzdhO67Mz2MMDzx0r9i6Y8dKP/A2JpOScEoJgWWZKJaKSCYTsKsuHNsGCGBXXVCNgqqFD1R6G3kQQjclkMl1XXkoVMdSU3ClUIRqki4vdk03AMHh+x4MZoJqDKHng5HovAUglMFImHA8R4bej6InIiJwE4JAFcVCFdLRJE7TNFBNFo8RJj/gQezB0HQDjArYbhWCSMkp1IRMhBIi5qmcUwDQNSpfR0GJgtCHrpsIAw++L73HgRBIJlPwPEc1fiiELydkumHCMHUYYQjPc+A5ZVhWUk2DBRKmBc/3kEhayKQzyGQyGN/eDiEE3nrrrT2nfvxjGOgfwrSpU5HOpBGaiTjuKvJYy2ta3lOCA6alw7Vd1NfXp9rb22tWrl6D2rpahIIjYZlwbUdOrBmHq6jRknAu5cOaJunnfhAgCnCOoqAomJK7E1DK5D3GJFGdCw7DTMBzXIScI5uvRSplQTc0DPQMwXFdFIb6MW78+GNuuOHGH+7t6Uo3tDWJJUuXkKGhfgwELsa0tKqiccSHpDMdIQ8xXC4gl83H+80orkI2mRhmz5oLxigsQ08xyixKmaNpGjQqC8xSuYBcNgPHk35xDRqopkl1AI/kS5EKQ3Y8NV0HD0K5PjAy0j0nRF3X0tgfMQcEl8T4IOAKZMfBhYxssyw57bXdKkzLQGNdA97ufRvj2xce//3vnfvhkAN//9vtmDf/QBx66KFKqRKqCCQRW0M45D3ouz5++h8/xcKlh+C4Y4/Gxo4OtLdPDP9601/uuedvd93U3NhQ4SFHJp3B0NAQSiUVWQcBEAbCCLjrS79NIgGNaooDIY+7H3qgmgnP9+G5PnyLI5fPYlzbeOze3bHuvO/94MpHH3vsr7X1tQkIiijezHVceF6AVCYpPUOMoLenC0kzBdNKIlebx6YdG7F2zRrs2d2JtrY2TJg4YdqV1111/kknfmgziOikGoHBDBhEKm2iXGRXxSgxXUPAfRBOUSrKZw73Q6TSSYSQhbFhWPu1+BNCiHPOPmej3FwZ0lqjMsZldKbcU5x9zpkHv/jiC4sBPPF/c7E7ceKEQ267447vHnv4UacyjVk/v/iS8MgjjsBnPvc5yMgOYPmKt1BX14CvnHEWHNtBpVSGoVNs3rRh2de+cub5b7zx2svpbLZx8SFLCnKzpYFzgcWLFsP3fDQ21WP69Cn4xaW/6vY8R7z/zzqx9fHHnr5w+ozJxwoBeJ5c/4lSXbiej+3bt3b/8frrb+zas3ufoEPZmtqmN9947ciophgdXfOufx61bt3+19se27Bu7Zr9eT4++5nPH5CvyddEki4iWJxP++qrL6Ozs6NctauFbVu3fUBpA483xowwiFDKfgllqKutM1atWlHf39PbBGCfonkIIWTp0iM+//gTj19cW5Ob2N/bBy44mpqaAIHgP37y4+seefixKwHg0ssuFQDgOR52d+5GNpNFTW0eMhlP4PAjDn9fk+z21vELa7M10vNKVAEjaMQxHT1klPYlP4CpMfT093xg8JjnBI0QpBZq/e7v70d3Z6dsRJsGPv6RU81nn35G25fXnHHAzFQ0TIj3SZH1R32jHTu39/T39/6vUukPffiUo+/82+2/GjtuzLSIGzIaEknUZNTnDjhTEHoxkvXrez7CMERaT2Fvx959b7IUiqVR66zKx9VUtB9R0/FmzUpZ/J8fhzlTn33u+Z8uXXLoZ10vZLbrwzLlno6pGCI5EJLWOk3XEISi+PKrr/9185ZN/402Pu+AA7K5VMoUiiIVKRcje3FjS4Nx+pc/37yv33PS5ImTDF1PcQHoaqgWcUtsLwQlQk7Lo6EdoUimknj1jVfX/u2eO+/q7Ox4X9m/CTMTX96G8kGHQQCmaRgeHoYAH3rokQdu3bF9y/uyKhBimHU1DTXyec+ga8p+GIGE1Tns6+kfJoK86xqnGjMk6ZRIP5REfTP191xRTqVunjENTGfSS5VNIl+XAxeAaZkAIShXypg6ffrE5pYxE8MQ6O7tIUQXWHjwwajL16MmV4N0Iq1kmQLVahWu6yGXzuHwpUdh4cGL0LFz5+rnXnzhDUpJwbUduE4VTrWKVCIBy7Tg+y5M04BpGPA8F44jN/7RVEVwIYs51VFDnHslp6ClUhlDg4OqQ8rjCWUcPxJNV9QYT0BICS9GCMByMifln1L3HyULibhTGUXEELwb2y5G5WERlXUjIBRxmfwXIvCoV43I0roek51jmEWUycpDhKGQRaHK5oyGaDI7WE6zi+USKtUqDNPCmLFj5CLi+rAsC6VSCalketKYsW1TAyJoXb4eUydPR1t7uyTBqilf9JCSx5kinUqB6RSZXAp1NXVglKF9wgRn48ZNq3fs2NmdyWXBdClHHC4UAAF57nxfRvkwGuewBmEIqtHYiE6ZlAzL91LZtyoLmYchPF/5IJV0N5KA6ropZfSh9LtGObmcczBdBwiFpyapyWRS+X/V9FwBtASXnm0Gpgpb6SvVDRN+4MN1XenbBR8hc3MBCgLXcRTNWhZCQRBIuW0YgjFNxsoIDkOTmbXR9WeYhgRrqcdAOpOFEIDr+BA8jMnJumbEYKMglN1Ju2rLiWEo4WwRLC3wQxm1pFFU7BIKxUEMDgxg1fJl2LplM3ccz67arrzihIDOdOllUjLoyFelHCBSmqtROLYN3/eQzWQz9XWNNRKQJuIi2Qt8VG0bnusi8ipzPmIdCBVgLbo+QQSYziRYQVkV1KWMIJQNDBFyUMrAeQjfdaVUN/AwNDyM7r09CISPQqEfoGi58pqrzk1a6anPPv0yDpx7INE1inQqg1w6F0+ShSAIuIAfBAi8AJ7jo1KuxPcpFyNrBQ+4kkET6IaOdDJd64ehrhk6XM8BVXFgYRgg4AEoIShXKqja1RhSEoT+SFc/COKCWmOaCqlXyg3GpKw/RBy5FniSukwYgWVZig+gvNGUIAwlTdi0TPihi4SVhGv70KiOmdMOmDVpwtRPAtAct4LNW3YCoXyqSjCYjGWLHthSYi/XIsexceCB8zCxfQJefe1VXH3l1e4XvvDFB677/e8uc317I+chisUyfD9AMpkEeDgC7CKAHwRwHUdNZtUaGoay2UOk97lSKUuQl1xwYVcdDA8Oo7VlHF5/640XH3nkoZcBgOk6KtUqdu3aCdezkclKKEfge1ixYjmWL1+Brs7d4EIGFjU3taC9fSKamppx7713i9deeR3HH3PcSd87/ztfrFbL8DwOwhhMwwRlBJVqFZrGkMvlZaOFKgAJkZnGMnqGwg989R38/Z7DCwC5fH7X5s3bPC4EyraN3Z17EfIQ27ZvRfceudHTda3hsCVLT/m/tdBtqKuffOlFl154/wMP3nbE0sM+s2nrZmtoqID//OmF7ItnfIkZpo6hoQHccfttcGwbH/3Ix8ADyUmoa6zHE48/8eJnPv3Zb7/xxmsvy9WJ9qWSyXLUpKaUYNPmLXjtzdflhnzrdjAirANmzWx+P59X03T2sVNP/XpNbfpYAPC9ALohm54AheP4MA0d/f1DT+zetXuf/Wnz582d1z6+fda7qiG8O5KIcxErRIIg8O+9/8Gn9vd5IRRGNHDlQrJQ4mg4yvHIYw9tv+XW217+oO/T0tQ4GoKh9lcqL9bQsHTp4gknnnjipH0v2L94zuOPP3plbU1uol31YOgGGpsaAUBc9/vr/nDlFddeCQAfOuWEmiWLFzcCwObNG0VdbS1q8rk4jzSZTKFl7Jj8+/luhx95xKEA4AVBLAGmECD/vMEFM2Gif6C/Y3fHrtUf9LiOa2luq6+ra/JUYk8ymULVcbFl63aMHdeG5pYWWqnY+1Twhtw3Rg1346gsAcS+yVf+8crg9u3bC//jZNRItF580SU/njFj+vxoj02ihApBpG1K7a3z+Zy87jDqv6EEViLaHwH1jU373IwY6Ou1q9UKPM8DFbLREsnYCaXgADL59HC2NvPfJrxLDjvqo48++vBfly459HSlFoemycZ1jIBXHBCogWGhWBz+5Gmf+sXPL7n4zn/2ebr3du/YtnXLagICPwhULOpICowfBqRp9H3yL36+etbZBADqmhpmyBGBePciQuT+RUZGEhAwEMIUmBF4+NFHnly9fOX7ltT7ns9HX9eRbQgAenu7ccuNt7z57NPPPvl+X79YKLLQD6V6gcjoV845QiWtjU7DmtVrwv7B/taGhvpYwk7l5lJ29HnIYRkJJNVUiAsSS+I4l55R6ZNloESHU3EVYElDNp1GTT6LgaHBhlK1ZDz13LOYO28BTjrxJIwZNxZdXXvw9NPPwg8kGdd1Hbz22pvYs7cHg6UCdJPhlX+8HL76+qsb0ulkt+d7yKRTMaV4qDAMx3ORr80jFCEoY8jmciCEoFQsoWpXpZQ5CBREamSzKjeFIpZQapoupaIgsUdXqCKJEk1BdIjKQpUbHClTIvHNxyMJTjTdHdWpi3KsNCbpwFGUUHSCRGx7YHExGsuYY05VNG2koJoGAZnHG6WCRrIOAgrTlNMOxnT1YJLfkYApqSRXU02ubigPtm1juDAMP/DheS5830c6k0E2m0JLc9PCwPObGKUIBbB52zak0yloupQNUya7lFAIc8d20dffjyDk0HUN/QMDGBwaRuBzt2Nnx3rfdQO7asOxbVmU+z4CLunBXig3jRrTkUwm40Ip9GVxGPgBwAEeyKrHsixZ7EQ5cJLkFGPl5dRLg++7cF0bmqbJz0zlOSMakVAaDjDCwMBAhfwO8bUST9YoKJHXOwCYugVGZRRJGKjrBUz+DomiZCTkydCM+PwyTQcFg8EMWGYCjGkwLENSndU1qesmrGQKhmkgCH1Uqw4Mw1RUu4J8qDBN+Xol2ZkSBgIGy0oikbCkRzYIYNtVWFYK6VROgc6kNL9iV8ARwrIknM3ULFRLVWiGzidNnmSlk2lMnzpVArqE3CwyjUnZiyo6mZJG8UA2hnwvgOM46O3rJY5dTfqeBwoCRjWkUzL/Nwj82EOiaRoMQ/qco3gmUCDksmkQPUGFggMJHsZPWJ0xJIyk/HvdQCqZhGkZKgfVRxj6sO0qbNsGONjnv/SFMxcesuj4J59+GqeccjJax46B78kJYzKZReDJ4lU2B+QU3w99UBC0No+DxnRJpOahpB6r6DEv8OA4ciNxyGGL61PpJMtm0uBeCKdaQdUuwzAMVKuuKuYV9ZePAMiIgm/JIkpBnRxHrrGaFkO9ddNEIpVQ65Ra2P0AvufBdm14niubd0GIdDKNZCoBXdPk9zQthDxAMpWA4zlNRx111OcvveSiJQAw2NOL8887D9OmT5OZvIQo9bFkICRMU+12edx6O/bEYzFzzgFoqG/AxHGTOt96/c07enr3vE2EgFOxkbAMeIELJ3RgJnSkkhnVpAigEYZEUjYt3aoD13VhJhRBnggQRmN6vKZpcGwpEecI4PsuANL/9LNP39Pb2zMc+Yx2d3Rhx/adKBRlA813Pbz11nI88+IL8AVHTV0dBIC62locdOACLFl8JNrbJpBXX/2HWLdxI84885wzm1paDq1WihBcwLFduK4L3dDg+3LSHgoZiya5EbIpYeoGDEOD4zrw1YbMD7z9XgzedtvtK3d17toVcoGqXUbAPfiej/b2dkydPlWlDwMnf/jkk2YeMOvA/5sK3Xy+pv7Yo4760uOPPPrHw5Yc/UMRYPLw0DBax7ahrr4eVtqC7/nwHReD/YM44oijsHDhoapLryGRSuH1l9948vTPf+l7K1evjimnpeKwWLb8zZ0AoJsaHNdDa+tYtLQ0ortnL5atWMbHt4+ZcPIJJx2875MFQn99+RXnXfrzX3x7eKgAx3ag6/JelSBLiiAMcO99968482tnXft+jsucuXMWJyzLGC0lHol9UZNdNTkCgI5du9d1dHQs39/n59Zbbwl2796tVBO6tJGoTPujjjoGP/vpxRVNM7o+6PsMDhTseNarnrtUeUOzmTxmTJ3Nevv6vX04R9oPf/ST8+/8262/zGTSTX09vdixbZskIIOEd9x++w2XX/brX3ieXQKA/p4BM5/KJTkXqG9sJvmaGhiWKfccquDo2LE7ta/fq6llbPaoI4+eL0VJVCntgHeFvUbfO5TcCQD429/uemvZsuUf2L8bBH6Kc24ZpgWAI5lM4OBFC3HaJ09D24TxsN2qUyqU9inDO5vOxKOW0dckHUVUmznjgHDu3Ln0fzg31ne+9c1zFxw0/9hobx5LfJRiIQxDdHTsBgEJ77vnvr2PPfxY37u034jiGqX1e8asGY37emyYYQZMlwkPIORdhH3fC0ABbNq4sa9jx8742qzNtNDfXP37rz/55FO/b2ppWRSGCuJGoyJdgAooFgmJrYsAnPvuuedPzzz73PVr1qz8p7FkV1977dZnnnvuHwDg+4EI1HAnuv+3bt0WXn31tcPv9fuVFFelvrZhYlyvjD5hAAwmrYPgapih3qunp7fUsbPrhQ9y7bl+1Rl1zrFjx04plQYwa8ZspNKZtX29A1vf7+ubVDfy2ZzyJgupDBUEmpLYR0O+KdMmHnHcCcd96rRPfDJumFHP90EZiX2BQshs3UQyiYRlIhRcbu6E9DKFfgjLTEhoiC/gVzwgFHAqDnp69mLmjGnjtm/dbjiujSnTpsBWG4IAvgRWWQkIDgwNDKOnpw81uRosPmQRNJ0hW5PrTqaS69KpdJ/nunAcW2H3E7AsC5wHsG0HvhegXCnDc31oVIOudP2ECGi6Jv2pXCjpM1eeSOmPiza4EhKkIE6qsxHnp6rqNVRS/2haTOiIyRsxYZcrT6iI/beEKI8dJzFNGKO6WLFnRfnQhBCyoFNTZyFGvL4qDUedyFBurARivyqJoS8RUEWZ3dUkU2MUqVRSRvn4PtLpNOpq6qBpGvL5HBwFeAGVk41isZg/7vjjDqvJZdHa0oJx48dh2pQpyOazauLDYw8zIQSu58LxPFCNQlNdt2QigcLAEAqFIbfq2ru5CORUi0vQUCikN1PTGHQmGyoAEPoBBJcdM/ndNOi6IaXDjMhsXELBNDkNpWrSqEeAKy6VCropo3oMwwTToPy/DOl0BqZpymziUNJ0A19OzJhGAUoQhJLcHUlYQy59vT734StapTRsi5guHE0joyI8lUjGjQld1xEEPnzugzCBRDKJIAxgOzYMw0RTYwsSZkrK1DmUJziEpkl/MGUUhmEhYVowTB0aMyRR3ffh+Z70tVDpd+U8gJUwQChFEAgIITuFmqlDNyTBWqcGUokManJ5+IGHxpYWBK4b9O7dq9XW5JV8H2oCF8XjQDUNgKpTRalSlqTkMEQylUJdfR1mz52N5pbmdBB48H0Prm9jaGgQhin5AIzp8kFA6SjiubwTDM2EoVtgirItRNSYkrAy2QSS9zKonGzGObSaAdOUdGoRCEyYOJEkU0ksPOzQY79/wflfvPPOv2uLDl0oliw9VDYpKFRuc6hyW1V+NufQNSbp0gkDA4ODKAwV4txujVKEoYKFCcQUT00zrL7eXr5581YQAOmUahaG8nx6fhDvWMNQKAo4VfYKxHm50j5CgRAQgZquciAMOHigCnIurydN1+NOuIxlS0IQAddz4bseNJ1BEB9ChMhk0zB1TRMhn3/ggQee1DKmMXXrLTfj0SceQyaTkFL3VBLlalk21NQ58VwXvqfI126A9e9sEOvWbsCLz70AAWDOnLlv6dBfkWAwBsdzIAhHXb4GSdOSNgEivwdjBLomfcCabsG0khCCS7gVY/L6CiSFXlNAt2hyalds9A8OoKGuHn//211/v/32v99vWQbq6mqx9LAlaGhuQnF4GJyHSKTT+MpXv4ZLL/k55i+Q9QxV6y3TGcZPbMPhRx+FQ5csJdu37MD0iZPbr/3ttRfrhj7Fdx2ZFsc06IYWq0QoCAzdQDqZAQGV9wQdPXkjMHQT5n6WNAPA3r1dq5etfPM1nVHkczWYML4dhmGirrYeQRBicFCq46ZMmTzhuGOP/6KmW+z/9EK3saml7dSPn3r2Zb/6+V8u+8Uvr7KSiWOGiwNG67hW0T6hHY2N9TBMef9QRsF0hklTpqBlzBgJGQSwceOGrot+dtEvP/GpT5w9MNT736S8GzZvXBvJH8ulMpqbG3HQgQehtqYBRxx1FHWcoD6dSi+tr2msf6+fu66xIffVr57942MOP/KCNaveybSOb4OVkA2lMAhANQm8S2VS9p23//2ajRvX7rNcjxBiLl18+OKRKRqJFRJRM13CFoFySaoy77n3vhd7evb07u/z9OP//Mm81tZxI4WGkq4SStHX0xO88dprQ8XCUOWDvs/qFat7R2+OFehF7qMY8Ld779p91z13vycvYfOYMQ33PfTAr3/9q19c3NO9J18plOHYLsa2tiCdS+KyX/36juv+8Luf7e4aAZatXbuhtGX71gKlBE2NDSCURBmeUYY35s+fZ+7r92obP37yvLmzZ0bPTyFGRmwjuj/ESjkzYUJAiKeeevLJgf6+D5yrPVQY2lYqF7oAIHBDOFVbxTBqGOgdwPXX/d6ZNXv65Pr6xvccID44NECjApeqGE3ZmB0ppnZ3dLL1GzeIf3JtZy+44IKfXn71ld+QBbmCvFKK0TGttusiV1OLl15+9bkf/OhHl3V2dm7+r2oHAOjp7hGu66JcLGX39djY1Ypj6noo1wiikjuUgkNn8D0PTrmUn3fAAXkAGDdhovGt73zrh98995uXGQbGFovDMT09IpdrlKoYVBLvX7r3dndc8IMf/8d1f/jDr8rlwdK/UPNsVhJgQnVpH4gmvLNmzkwee/yxB7zX73f3328XADC5fdIYqd7i8TGO9abqlAn1LPMD+Zm379rx+upVq1d+kGuvf6Cv4EgiNXggUJPPxbYUzdLcrTt2rB4Y6n3fVohJ0yZazS2NicDzwAiBlbBUTTB6HQFc3x170IEHLS4MFurigjeiwxIqJ4i+78sbXchCwfc8SQgOA5iGiVQmDd3Ukc1kwMExtnUs0ikLw8MDAJBYtHDhIZ7r5Pbs7kRvz17s7tqJ7bu3I5VK4rClhyGZsEAoUKxUsXHdJgSeBBANDw/h6SeeeW5osPBKsVTek8vm41xU13Xg+56UWnsBGNFhaDoc14YgQDqTVrm7MqjH92VxrTGmLkI6MqGNYTAjskoRn/1IuqY8oqEAUZMdQkYtyGo6S4mETgn1RBIisqTIjkooIjkyYnCVQCShUBNbJZ/misAcEftkB0z6cEcIoGTUtDl6IEpYBoSEP3EexO9LWTSJloVhIiEnlIIT6ExDEISo2FXougad6ejr7UW+Pt968iknzacGQdv4drQ0N2DhgoPAqIR0CeUljhSumsaQyaZRV1sXQxGYRtHT24N8bU2xVCr2RVp7EAJNM5BIJJHN5gDVEdc0+ZlCIeWsEtZFldzVV94omcMpqbOqySBEnFOqEF/yQSnHz/ADD74nC2tZPIRwHVfRTk3VwOAAOBLJhIq28iSxVb0GY3ISZ+iG3MCrqT/nHH7gQWNMTQKFnFBpusKuSzJ2EEjPpkYZuC9Qtasqf1XAc33YjgNBZWEdBrKBwxiDzpiKjTJi91bgBdB0Bl0zZBGmMSVXDiIxPTSmq/f1EYQcyVQChqajWrFl7FgIKWGhOrgA+vr64DhO0DZuHJcLVBhDvKJ7gxIiO9QAdF2HYZlqoYwga/JPOpXOR34NyzThhzJGLPA9pJJJJBMpeK6HwA+VD1xGO3mBOyLlj0OPpZeSC9l88P0AAQQcV54/Ago/kBmogRci5Byu7yKdyohMKotjjz7mhPVr1rU7ZRsHz18Qh4aFIlRRPzI3MJLu6kyDKoURgkMzGaykWqSVGoQy2fAydAPptGyO9+zdyykI8rkcDMtA1XEAQpBKpZFKJWGasgHh+z6IkKAzqtQWlMpmhe/LRo6VtEAZQchH7CS+J2XzmqbJIplKyXRkZRDgcD2ZZ+y5npwmGyYo0VEuV+E6Lgtcf/KB8+adcuIJx80EgNaxrTj++OPUeEFGexnmSLMsDEMEbhjHrPT39aKhro5YpuE/+eQzHauWrXngJz/9yTUluziQyWRBNWkvKBXL6B/oB6UMSSuFkIcyVooQuL4H1/NguyozmEqlgoyg0OB7HlzHQRDIzHeNaZIsDYJUSjU8haj8+te/vn7jhg2bCIAgBHK5LHbs3I7uHpn6Yho6GusaMDgwgIGBfni+pyCCBJ2dXXjmqafQ39eNJYccgiDk+MwnPnXc97///e/ohpYJQynbtPQELN2Q1G9FK6OUKetAgGrVhufLDHAoRUoQ+Pu9OBRC8Oeefu6R7v6ekqnrIEJeN47rghCCzo5dqFQk/+TSSy4548OnfvTT/6cWurlc7eQf/fgnP7zn/nvvu/KKK37TUNt4CjXMuuaxrTjlox9iDY11JAh4nIUtp/4MfgC4tg/GKHSN4eV/vPKP008//cyLLrnoJ13dnR3/dMM1OLjeDYKqzKHOypQCTcOevXshoKOnb9hsHNOy8LOf+9RH38tnP+GkDx116y1/vfXqq6+8OFuXq09nkyKVSMAPuRKoymdEMmHi73+794Ynnnzq/vdzjMaPGz9x0cKDZ0VybEJGbFVcSKYHIQSO48L1AlSr1d477rzjgf19rtonTEwsXrp4lgTEjUyZIw/vM08/U3n2+Wd3Vu3yBy54fdfZMVrRHClZAMB2XBxz/FGpBQct+F+9hIaVSJ70oZM/cfutt9318Y+ceq5driY3bdwi+ocHMXbcOORq8li/cf2yu++9+6o3XnvjXf7Sil2pgGNHNGnlfISPEn33gf7CPnezli4+dAElJBtPREdl1sbydPHuOm7z5s07316z5uX9cQ5XrXx7+9p1G7tkQS2jRiO+yZZtWzFUKFinfexjC1qaG5ve62tOnDxZ1k18xFMeNf0im9u48WMzNfm6dzUIJs2Y3vrnm/58xa8v+/X5AEwZQTQS+yc4UXsCjnQyiY2btj7//e9/5wd2uXzd5BlTt8XrIR+Zeuq6pOpPnDQhO76tfZ/AacVice/g4OBeJd2PJ8yATDEYGBzECcefOLetdfxxc+bOT95y8y0XX/KLn1wCIGdoOsY0NI0065mMUeQhh+v7KBRKoJRi+7Yda7/2lbO/dsXll12zesWKfzmdfeGFVzbHvSWluFUTYqSSCXLqKaeedsSRR84BgAXz57+n79tQV5cfkYiMDjIjMeA0ygk2TA3Fcln88fo/PbZh3TvdH+TaKxULXZTAlmocgvqaelTLcli+evXqlx959KEPFLlVqRZZ/+Ag1QwF8KQq1SbmIwED/QPIpnNhe9sE+4H7H9w9UvDK8U1MoQy4zOr0XBnLoekaqJAZhYl0AoHvoWqXUa6WkUolUFNXA88LMTg8jJqauvlTp05fMm36LBy29EiR0pMwNB333X8vHn70MbS0tsBXXqeurk7oFsFHTz0Fe7u68Kc//nHwkcceXdG1p2sP5yEEJUgmM0iYFhzbhms7Mrg4CECZlDXpugYv9FCqlOQ0i0axKRpAVe4tpMxAY1oMgAGkjy7ykEXSlTj6Nu6uyG6jgFA+Ua6Cwmm8KY9ueJnBKdTEQmW+jkrLI6PGAvGUmCgJtRiJLCKgsc+UqBlDVBRLCayIPY8aY2ojLovgKD9WYxo0g8Um7jAMZb6dYLArFRRKBdTU10qPWxgglUhCNzSUKmU01jeMaWpoaBkeHkZn5x70DQxhqFSQ70VZHJweLeRMZb/yUSt3b28vQIGhocHtHbt27IlkKFEhCA64qoFBKYPv+9BNTU2BpW9TyjfldMx1HUkeVrIqEjUulBxDiFDm7ULm+bqep0jPJC7wGdPAVXYr0yRACCAwLBNeID2blBKZ86veX6N6vNFV4bEgHLBMSy1GVMl7CBjV4btSkjpUGJIxUZSBMSqJwZRBM01FAqYxpr1YlLJy0zJkTqrOYBgWKNMk2TiUBXsQSpBOGATQDB1WMglN16BpBgghKoJHRxjK4plSASshpWiuF8BMWMjmM7JoJwRB4KOmpgZBGGJgaAhbtu0o+l50L5A4titq3kS+daYUFSBcFmd+AN+TsvNMJlMHAOlsBoYpv4PMOAZs10EYeKBEdtC5asowBRwIQh9CbXhAAM3QIQiFRqLvqABWGJmuJhKWvAo1hnQqgUw6g42b1sO09IPaWsccvXXLBkYFBFMbtciDTihFoOKbKVUNPwUL4wLQCENtTQ2IrsF1JcU38nRTEFCdYeuObejc04GG5gZhJhIwLE16pkMOz/VU5BqPo84olfaQqJlmmQkZAeY66n4icB2ZJS4jMXgc5USUJI5Aep4d142bdQwUpm6A8xC6ZUiuQCip9g0N9VY+na3L19bM/tHPfnxcbWOt8de/3AwKgeaWFiXvkuwAXdPV2ibp58lsEoNDw9ixowPpfAapbML/801/fqRvsPvnf7j+9z/YsHntsoAHqFbL4B4HI5qS8UviOw8FfFeqf4igUrKnVCqh7yHwXUl7V03WgPsqfkKgUCjANE1k8lm1QSmjWCqibVw7env3Lj/3B+ddIwBPY0AqkcTcAw5Ex84OFAsj1jEiKF566WU89PCj6O+TwNP+/l4QInDEkUthuw5ee+01VCpVfO1LX/vUpLbJHyqVSyoTWTbibNsGYRQBl7L9aI2NeAxhIJUYGAU33N8/K99a+Y/777n3iR07tsVNGkKB+vo6cC6wft06hFwgm83kLv7ZT38ydtz4I/5PKnSbW8ZO+Pq3v3Xe4088fvsPf/CDX9TWZBcMDhbMo489AXMPnIuGhjrpgeNhPL2UcD9pazEMDWZCBwD+h99ff8c3v/6N7y5fvuJ/BXS9s/LtbZs2bNogN1w0trukrSS6du/E3u5O8swzzzYee/zxZ0w/YNaR/9PrzJ9zcPtXvnzmNy++6KKrTjn5pI8alskmTpiA2bMPIGEopJ+eEiWBD/xf//rKP5555hm/tO0Rme6+/Mw/6MCDxre3tUR7hHdvUIl61slGZ11dDW6/484n33l79av7+5zt2rlDPPnkE2ZUhUYx6fGUvrGJdu3eU+nZ2/OBdfzPPv3s5meffy4mD42WxyYsE1MmTZpmGux/lOsffMiigx957KEbHnnkob8ce9wxR/V1dyMIORYdupg01NeBMqC7u3v3RRf94upVy1f806n7Y48+vh4AdEMDAQdV6q3IklQqDzfW1jbuU1F19NFHLURsP8N/mbCNFPijS95XXvrHuo6Oji376zwODxd2ArJ413SplAo8H4sOXYgvnH66VSpXp9bk68a819fbuH5dRQiu8oJJDC0dfb3OnjM729LSFCsnamvqmn90/gW/PPMrZ55FGDH8gKsoOiGTUsBlxKba3z71xDPPnnPOWRe88/bqNQDQ17WnO5K7h4r/wLlAQ2MjMQ0LYejVer6d35fj8vbba3e8/sZr/4ingWSEmWOYBpqamsA0PTtl+rSzjj7mqCuXLj30OwC0IJCRdTISVO4Fon2663jQGEUul8HwUHHdlVddc/7jTz38ngu7F55/fk1X157VhkpV0SiL02OqZQeHLFy44PAlh59/2KGHf/3Cn134H4GHH1515bXj/rfXrG+pN6TsV9Y5gwP9qJTLkjcTE6xIrGTYtXPHrg3rN638oNfd8jeXr+zas+cuANWuzu7NN//15vs+89nP/nb1qncu//nPf/XLPV0fLBIuCIWgqhlPKY2tEMCIvdQyEzh04VJnd9fetxy/GseaaVIOCaSTaQRhAMd1pTSVkFjqGxKBZDKBXC4Hp+LA9lxFa/awedMQNAXC+sIXTz/u2GOOaUkkDQiAuH6IBqMRE8dNBCGaBGDxEDoY1r39DqigYMzAsjdXY/WqteUTTzoutXnzltS2LTuG/cCTnc0whK6bcvJGKXRGEXoBHK+q8kF1lcVLQBAAAjCYJSN8QikTJETCXN6lD1IHR5KDqQSlqH/PlWlcduF4XAhrTFP+iGDEXxPnWEmsFVFZspRIvYDgIu6MqiQcFa4up8Och3FBRTUNFEQFvYdxtiwg6atESHCNbphq6s7llDKUNwZjliyQweF5HsKAQy4KgZwqBgF0Q2blppIpGJoOz/Xgeg6CkAMiRNu4cWNTVtrKpfMYe/B4GLqORMqSk2YhoFFNxUSRePGJMnGjFd3zfKSsNK6+9ZrXXc8tp1IyKsZ1ZKyHoRkoVspyk24YcB0bnu+qZoUsMimAEKrwESKGFIkwhIgksVSDaVmolIvQNR2cyKJF0xTtUR13wuRGW9cNJFSB5VRtWcAQJn9XAAkzidDzFahenTfBEQQBTKZDN2W2cxCEqv4JpLc65Mjla1CplOB7CvwE2TyKJp66oQMIY/Iy1eRnZboOQiUl0DAMFYckKeP5XK2cdADQdElxDIIgjnGKfOEAUKmUoJsWDEuTuW+WnODbjgsQDQ11eWRzOQz0DaC2tkZOCJwqLDMBzoHN27bu8XwfCcscATTx6BAqSrOQ8iUvcGHquorhAnzfg25oyNRkm6EKY85lYe16HlLpDHxfTvcYZTCYDqYix/zAlwR1qRIHY0wde4YwlFNBECCVSinFiS/zmpWygWpU3q+GgXK5jLb2sc2/ve435yM0Zk+fNgftE9oJBwdCAl1JheJ4GyXflvYFrjKQKTq7ujAw0I9p06bADwJojEBwXT4c1e9phi40zSCDvYOEhyF8LwDRKBKmBkIY7GpVrQ0EjOkAl8VvGIQwDQuJZEq9P5dqBi79yozpYAYDQqjMcQpCJPyLaTpEGMLULQgiycw6k77tZDKD2ro8ioUihBColGzMmj7HKpWGWyZNm7R49gGzp2zasBnDw0U0tYzB5m3bkcvmMXF8O6IlLhSSDl0plbFnbw8ef+xRrF+3jv/HT35E773n3kf/8pdb/qO+rmGT7TpoaR6LUkl6X93ABdPl9RuGkloccNkkZDpg6AY0rsnJLqEQRCokpI9ISrNTybSarsi1k6vzIYneITRTgsCmTpmOJx594m8X/uynSy655NIveK6PXG0e7eMnYPWaVTCtBCaMn4jGpgbMnjMHfX39MSly3vwDsXHdJjz15HOoq89j0uSpSKWSmDJjSuM3vv2Nb3znu997m2l0PQRAmQZd0fxNPQld11EsF8FUg06Aw7IS0A0drvCRNK1/S8E4NDzYs3TJ4rvr6moWTpgwqZ0xDQaThvoZU2diz94uFArDyOVymDP7gJl33X3nz1Op9PmVSvnN/18Wuk1NTZM++vGPfexvd915aiqROEgIWOs3bMDMA6YjnUyrpqL0Lmq6kgNqRNk4SCyFB4COXbu3//a6319/441/vnl4eHDwX0rBu/cO3nLrbSvmzJ51UOB5EJq0uNQ31cHxbJx8yofo9m07zDdffW3+/ffc9aslhy655NXXX30cAJqbxyQSSXPKIYsOPube++4++aknn5i59p21jWNax4JzLtrHtRKuFCKWacSV4C9/ftnfL7nk0otC4fW832N20sknHwOlIiBEZriT0bQqNXTUNA3DQ4XCH/9w/Z1i9ENgv8nOm815c+YnR0/W4lgGQnDQgvnpxYuXNG/bsV0H4HyQ99q1u2vLwNDwTgAtkbx3tI2soaExf9JJJ3zk/HPP+8eVV18V+znTqYz57e9968uv/uOV8w3NmOy7DtzAQyKRFJrBiKYxMGqhe29X79fP+eZl3d299/zPE6PSei5CjxJmcM5lYzmC0YUUJ5x0bNs999w1DsCu9/q96msbZ40cO8Sxd6Np21HcXhSFt2v3zuf253lcs3L1po+ccoqyx6hnsi4b/fMWzIfjBY1dHZ0t7/X1Nq3f1iNCOESDRdTAgyjFpBImo7Nzt9mxY+uC1nFju1vHtC/80x///O1Pfvq0k6LcchrDW6X3NfADgErV1PPPPf/8N75+znnbdm6LGxPdvd3dSooKwVXDkYvY8qBr1gSdJRZhHyj1jlMNTvnQSfeeeMJJH2WMJSKGj1A2qggV++Mf//gIEBwh93DhyN5E2Q252htSSpFIyfX/tTeX/ePiCy/9z6eefPilfTlXWzZv6L7w4ouvvfjCC2+glOhluyJ0qhPGBUxLx9i2cdYF511w+mkfP+0zM+dM1yjjz61du/bv/9trdu3p8Sa2T4SuGwh8D8OFAlLpEKl0Wu3x5N7Ot124gmP9+g0bmMb6P+h11zfQX1h40MLv19U1X/7Gm69XfO4OQAhn3oGzw3vv/fsHvq4pI8SypH0nUsMKSE81VWtlKpPEG2++1XH1Ndc8c/Y5X41/V+MqZkS3TIQOV3QwDiMpwT6Rr7VcqiKXzaOuoR57unskzRkUxGJwqlUQgsyUCVMWdXbshtAImpoakcumYVccHH/MCUilU9KPaxooF4twfRuLD1uKutp6fPv73wYnIR8c7K9mUknH8xx4foBkMgFBGZKpJKrVCmzbRohQFbFyMmPoJsKAy7gPNU3y4SojtiT88lBOoAil0A0dvuereBUZ9h15cIUgI1MOQlVGF1cZZvKiH5FbxU2hUWIVEWc6xpJQSOAPgVBFojymTJObYC5CEMriDORorkuIpjo8kvTKmBYR/KHrmpoeyXPDuZREBoH0mEYm9IgqygPp/wsBJA250SgMF5DJZpA1EigUhqXnDoBGtWmEE0UypvD8ANQNkDC1WF4VNQ2iB2G0CIW+JAI3NzdBAD0dezpekpO4JBzbBTiHpmkoVUrQmI6KY4MLIWWfhKjOvox90UwdVPfldFs9fEzThEZHvDWgcvExDFP6qBiLpeMBD+KoISNCxtOomyVl4xrV4IVSagrVcdTNBDzPga7paoGjSGpphcIn8APp+aWMQtNl1JLnOvA8B5rGEIZMgd3URFTTkLSSCAIfnHAwKkPTLV1DtepCN0wwkJheXCmVwZiGIAzVe8oFlem6Rik106lU49hxY9rqcvWNTY0NqaHBIat1zNiUH4a9b61c9lwQ+HuKhQIc14fGEMf5lAtlVMtVaExHsViBpumwbQeN45oxZdJEtDQ3d1tmAmHgg+iS3AcSLe9C0nup/HuNaNJnBXlsh4YGMTQ8iEw62wZCMq7rlZjK+jUtC67nAEJCv0YDrBjTFG2Ux8VnEMpcOI0ClAtQg0kabhBICJyu6KuaBj8MQBShOZJ1f/y0T56ZSKQ/2rFrL/3wR04csQeEIwoQgECozlMUMUWpiGORiCAYHhwGOEMiYSKaEAuMgGQmT5DyLss0NCE45aH0B1dtG3U19TANA739fSBUypgd15WqA0XnDkoFxQWQ95jM+5bvY2omHN9RkUyQ+dcijMnxAZfqAc5ljmDIBWpyOVSrct3UdAO1NTkMFwaLru+0nnLyh4+1qy6eeOxpTJw8GccdfyJ6evpANR53SUXA4doBbN9FqVTAk48/hQNmzcGYlkayZsWawl9uufkv+Vx+kwT9yXXANA3YjhM3+TzXk9J8P5SZ2ppUJHiQVgXucdnkYQS6kUQQ+nAdW2WF85jQruk6qnYV6UwGsKQNwLQMlEslEEZRm28s3nbrbTcfesjCw5YsPbIdjKF5bDNCJrBl00ZUqyUADZgyeTKmTJ6Mgf5+FAvDyObyYKaGdRvWY+qUSTjkkMV48YVXsGDhQfjq175y2KtvvP7Vv9x044/HjhvvaaGOarkE3ZT3a9Wx4+xtYsj1Owh8+Zkoja/hf8fPug2b/6EZxnIA7YEfQmMyYk03NLRPnIhysQTHdmAYBpYeumTpgw89/Iejjjn2sheff+6Bf0dB9M8L3LEWY2z8/AXzZxw0f8HSx5947OSD5i+Y+vjjj7ONa9eHJ33ow2JcayuhDHAdD+AedI1BNzSEgQJialRuhFVzvHPvnv5rrv7tXY8/8chNG9auW3Xllb96z5/nxVdfev7LX/rCWYahj3BxOdA6rhWt41oBgP3llpvMXbs6F/7muuv++OtfX/FK85j6vv+86Efjjjhs6QF1+fpJLc2tbOHBC9A0dixax45BEASKWszjJh3TKXp6etc++sQTv/0gxe649vF1zz/73IFQe484354I1cSWOaHRWvTYE489tmHLplf+Hecyn81lsrl8LirMiFK5cWVv0TVGPvHpTzS+vuwtE0Dpg8n2w+rTzz23CsCh/8XzKeWcqSQ+9enPfOSb3/rGcgC/B4CxLc3TTv7wiWdc9ovLvt63pyebqcnK57lpQE8y4jsuGCXgjA7+6aa/XPb6G2/c0N3T/T/eB+s2btj0zttrd8ydO3eajGUj2NPdhUw6i3wuj107O5o7du044L0WvK3t462XX3ixcWSsIuLvE0uZVf/ArjrIZNJYt37dtjtuv/OZSy+5dL+dx+Wr3lzruk5omhYTikEDLtdY3dBQV1tbe/KHP3RCNpV5rVgp9f2r1+vs6Ni5bdv2jVOmTZ4XQ4mFlAXLSSdDPpurufjCS//zoIULfjzzgJljdU1PB5wj8HxoGpPPOJU5HIbSBmIZFlasWvbo187+2n9s37n9XX7tjp271hWKw+VcNp8mRDb9bdvG26vXiJkHzCLHHHt001VXX3vOuHET1+3evb3jvR6bJ5965vkHH3rwkdM+ftqn5EAltpHEbBw5rVDS3wjXpaIZI86OrkugbP/QwMBdd9/78n333H/5888+9cb7OV+/++3v7501e8aBn/r4p74lQjDTMhFyCU0MAyFS2SSZd9BcvVSp2l/5+lf/evtfb/9fr8dKsSSi6bim65g4cTTsnCglqbQzcRGIt958a0Mum90vUqW3Vrw1DGD437E+lYrlKoQoAcgGyrrKOYftVGFqllRdAdjduXPV3p5dy0b/rkZA4HsehrwBMKYhkUwgCAJ4rquASJA5Ur6PQqEgZXhOFblMDoamww89DA0OobG+flzbuHHTytUStu3cIhqax5BSqYRsIon28eORyWUACFQrRWzdvBVDAyUcd8I8JHNJ7Ni8Db4XdN59z/1rIcSAZuqyox9If2WlXIbruvA9H4ZlyAgbLsFF5WJRkqR1E57vxv5WOYUjEEROVSIKsgyWJiNxLipXlRAWy2MjLbhQ1amQ+3Nw8U/araNyn7jqgkrUiYRYRfJkEetZ5KY1DAL1QJMe4zCKOBJiZAOlpsqESD+xUFCrSrUqwTVqGs2U1NgwDYScw7GrsWfWdh1k0llAE2q6lEDgywK4Uq5IeBNkHldtXT65cOGiOStXrsCDj9wr5s5bQFxf4OCFCzB18gSE4Ag5ZJMAEt4iuJSZBH4Ywy269/bgkSceX7Fl89Z1GtNlZqyCRDm2DQ451bISCRBQuK4Nw7RACIOmMTiuDxYSaAaD4zjSz8dDuRlmmoRVMQrX9eC6DigYOGTGp850+EEAy0zANA14nh/DrqBR2OWKioBiYIYJzZf+1DCQIK2Qc5imIUFTviRY19VJf7KvunmmYcBxPaSSKSnH1g04ti3lsYTJnF0uO05yAurDdmwEo0iu/rAL00ppoR/oIaDV19eZAE2l0+lc4Ac1pqnXT5s5raG+tqFBcJotVYqZgw6cN6Z1/LjJudraMTSkVm9PF6GEkGwmTxzP797b133e2rffudu2PZSrFSQsHblsTkamEOkBjoBYXARwqg7cwAEIsKeru1oqV5DLpRByX+Wn0lH2FuVtIgQ6lfRiQgkGBgbg+z4s08JBCw4e1zJ2bMPQ4FCpsaFRMQE85UHVYRgGuBDwPQeB60vYnCCgTI87dBAibkAwTQPRCKDiX0AEdE2D5wfggQ/KNJgJCV7yHA/z5h901Le+/p0zzjnzHOOTn/lMQAjRwkD5dQnFKG6I6hJHCpBRtzQE8nU1qC83YLAwjPqaGlT9KgCCTDoNLqQsbLg0jMaGRmTzuUwimTTS2TR6u3vBCJPUYwW14AGX0nwikEik4Loe/EBSBaWvPJCNmECC4wglqFarCIMAhmkAhCJpWSBUoFypyMaY74ElLIQBRyJhIG1mYDANxWoBlpWE5/vQmI4d23fQT3/2U0d+5YwvH9CxswPtE8chmU1j27YOpJMpNDU0wHOlT9owNFhpA6Yw8NyLz8LhVRx3/FHo7u4mL774j5c7du1+LZ/LoWo7AFdQtZAhDELouprYByrWTmMIBAdHCMKUfYTLxqKggGUkJCsi5DCNhIqX8sGU/JRz6R8eGhxQlgSgVLKh6xqcqg3LtLCro+PNjdu2PHDSyR/+XsA58YXA2OYW1KvoUKguPVW2i7Vr38HCRYdiyuRJ+OmFF+Kl51/AhRddjLbxbZg5eyaYZuCXl/3iC6+99o/nN23Y9FhDUxNMy5KKJyYzt4UAAs6lL1mpaKQSiv1bPLzxlHewv+fEk096ZOmhS49vamrO+r4PEGlzICJEJpvB4MAgtm/bjukzpuO4Y4+ef+SRh990zbXXHjlnzuxbd+7atapYKAb7+3MZlkUt05pwyOLFS6+//vpjioXhWS0tTU3DQ4ONra2t+tbtuzC2pR2HLlrCbM/G8FAfCNWQTCbBBeD5vvSOK6WD78oG2Z13/h2Dff17H3jwoV8uX7XiT4XhwX0+uA/de9/rq7/xrbXz5s07QELgBMQoGikhBB/98MfpYLEoUklr3MwDZnx2zgGzwieffJJoLMHGjG2D7/k46JCFI5slTUPoBSo6Taq9Vi5fvfKSn1960bK3XvtApGRDM+oMw2yLpkmaRtTmWq4fkQUHAIqlYu81v/nN7Xa5XP13XG/9/f2Jzl07tTkzp8X3ERnlNXV8F4899nB5145t+wVNftUVl79w2OLFX0gkEplRC7GU/IBgXNu42muv/c2vn3z6qa9PGj8B6zesrXn++Rdrbr75L4njjzsW9YYpc8sFl43xRAKdu/f0XXTRJRfdeNMf/3Dhf/7nv5Dqbux69tnntwKYFvFScpkshCBwqjbmHzS/8YIf//jkurrG5wcGev+lXL0mW9uUTqVS0XAj8onKYnrkOFJKkclIFsQ9d939wvbt29btz/O4evU7ywYHh1a2tLQcHIShjKFh0k/seT6mTJ+Mn134sy8YKTNcuOTgWw1q7hzo63c2bNz4T6FZa95Z3X35r6948wc/vGCeGB25GXl6BUd7+0TzK2dNnDzS0JA2JF3XYkm+kPMlWJaFYqnSf81vrvjd1Vdf8+e+nj3/LVT36aefXbFz1841c2fPW0IZQ19/N9KpDNrHTyC+F6Czcw8++alTP/La66+sI4T8TAjxnta5IAiGli49/IZjjjlmUT6XH++6DkzTUhwY2VySgkGu8nRls5yrxJMohsnxguIrr7606ta/3L5s8qSJ/+jZs+d9S4IHBnorRx171K+6u/aI73z7e+cAsEQo64lEUiOSIQF0du55uFR0/uVEe9asGTowOj5KpsrEkFWuBiKUYNeO7rXZmtp3WtvGefg//KdUKOzd07n7ncmTpixhVE7aAcA0zNheCsB7863XnykOl951v2p+4COEpBZDRdgIQRCGHgzLgghChH4AQgg8zwMXEuTj+jZsu4qElQDAsWjRojnHHn/s+GeefhblcomI3r147fXl+NqXv4w3ly1DfWMTwiBAV+de6IaJxsZGPPzAg5g+czpWLV/lW2lj84RJ7TvWrHobY8Y2w3U8+I6HZCqBUqmEIPAl6IjKjK4oHxgKaMQog3BVaHk0SeUCIQ9gmJaaPMjpElWmFEpJbJpnlMkpcdSNEyIe+Y+AqkYye0UYrcuyvJVp4uEoP4Dy3yIc9c+RT0VK+oiacnFFjyaMSgAwIUAoVFSKMmQrb5k8TdI7GSrpq6Yx8FDGmmiaBl3X49wyzjkc14ZpGPITEMDzXCQsE77vIZ3KwnNcDA4NoH3S+LYPn/LhKfc/cD9WrXobJ5x4CtonTkNjXa0Cco3c6HLWx5UXQ3oEdMOA7/nYuGl9ccumTZuGhwp9iZSpJs0EXugh5Fzi4FWkk+tJyE8YyIdVoCa1QRgAPqBRAzwIwHR5nKpeVZK51QIq/3sOpmvwXR8BCcF0CX5yHE/GtjB5LFzXA6UyY5oyDkdIAm4yl4PQBGwFlPL8CN4koOsGqtUqfM8Dh4BpWtANE1wAjmvLzQ/VIMRIcwWOB8etIpFIIPBd2H4IIcJ0a1tby0EHzR/TPzBU29c/kE2n0jUHzZ+f2rVjp+6HQe6II44YP6G9vWVwcCC/t3tPVtfMDCN6wkoawVCl4Lyx7C2tra87vXNbB+YfdBB2b+8AYwSBz+H4TtDd3av39Q9qhqEHmXQKpqEjYSVRLBXhug50ZsB3XQjC0TSmGXalgsDxsHdPL1pbxzF578j7QRCo/FESXzfxA0yFo0f+oJraOji2jXQm3ZTP5Gr2dnahv68/liaapgnP81CuuNANQ8mTuVxrAgmrABVgmtz46lQHKAUPAnAPSCXy0HUmC0H1noZuwnE8UDCIMESlWspffPGFXykUihNczw0WzJ+nAUAgfFBQAOqBq4p3RimgGhJU5WHL4ljANAzMnD5TRs5wWexE2ZdCyM1uNpOFgEBjc1NdfUNjwrZtgBDopg7P95QXlsL1HJi6CcopKnYZOjNgmIaU9GqGWlMDiMgzrSTOmiEni4wAti3l0XLyA0RYSUap/Hc8VJFlAgQc6XQaTtVGS2vT8V/72lc+AQDbduwURx5zFKEGg6np0vcrpCwMQh4HprrvG9duxIKFBwEAfnTBT17eum3bb3K53EA2l8HQ0DAIJSiVS+ChQCaTgV214foBOLiKFtLhBQEIJTJnWHEIKNMBweF7AQIumRGMSQ+8YeiSiB6EMC0DqUQaruuhWC4hn62RAD8AumGAEIGWtnH2b377u+uFj5nf/NY3TmCUIRDyfbo6ujB2fCuYxlC1XeRr8gh9jpdfeBFHH3csDI1h/kEHwQ9DTJgwHna5DEopmhsaG75yxte++cMfnL+mNFzotBImLGKNgAEhGQ2Cc/ihB6J82UxtJP+dP88+88xj9z5w91HfPOc7X9Y1XTZOfD+OiquprcHujp14/fU30DpuLCZOmJD9wfnnf3PRggVHvbHsraeOOfaYZ1avfnv5QH9f3/v9DOlMLrV40cJWn4ftbRPaZ/z5lj/Pzprp2blMforrevmqrqFUrKB/cAhDhSLKxQrschW7OwWaWhrkc1rTYBi6itST6QQhF3A9D7oqIg9dcsjwjb//45+ef/HZm4UQ76uTMDQ41PGTC39287x5866iGiE8VHNe1VDxvRA1tXnU1tWQEMBRRx+LynCRLTz4UDQ1tshIJB5Chx6DLiU8kcbGxRdeePHRr5/zzYs2blq34oOe31lzZ+Ubm5trpGRPA6GA60pYF1OASY3JycXNt9zywIoVy5//d11rM2fO4pMnTbVHe01lw1/+lekMazesF8Vyab80UV5+8aUXn3risRdO/fgnPsI5QcwXjQYEACZOnJiaOHHirMCXDcJjjz4OoRDI1eSAgMO1JcjNsCxwzgsXX3zRpbfc8pfrb7zpj+/pM/T07FkB4ENM1+B5HhKJFHRdR2dnF9auX4f58xecMK617W4A/1KqOnPGrGnZTD4fqdBG0Z3i9AYKgpCHKAwNQTd09PT2rNnf53HXjp27zj3vvDuvvuqqAxjVEtIHKyGahqlLdQ4j6asuv+Ksv95x++xnnnzyne9+6zv8P370H3t3du189M7b7vxv8Ug7d21/BsDZsc2Jjlj0IvGfGKl24/uGKh89DxUk0tAxXCjuOPfc8y+++aY/3/rjH17wz4vAwaGBn13406fnzp63xHFc5HJ56LqG1vFj4XkBHLsC3/fw+c9//iwzadVf/8c/PL9m5dsv//HPf9zzLz3J69Y/f/WVV/75kkt//lPTTFhcxAg6UBoltsi9o+PKYZpMVaAYLhXLf/vbXcsLheHVw4XBjkULF3ZtWLd+1br173yggvGFZ1/otjTzsvraZvK5z3/mbN3QLN2Q6+Kbry0rPvPss08sW7Hs2oceuv9fSo+DINwb7dFksSvbV1yxRnSmA5Tg4YceX/bQw4/cvWPHtrf27unc+396wbtt27bS18762vU3/vnGuYSQtBDSKktAFGiT4Pbb77j3gQcfeuT6P/zpXb+raRqDQQ24rqtsGrL9YlkJ6TEIORJJC45jwzRltijxOUQIOK4Xta9wwJx5s5LpJN3V1YkZ02diwcL5OOqIo5HL5NDVtQcQBK5bRX19HSA0gIZ4/Y3X0DJmLNomthduuunmdYXBSl9TfQMCz0epXFTFtPQIaqaBUPgoF8rQNB2MEmhMByiD5znS/6czCEHA+UjhKqduiIOPmZK9xhe3AIQIwUO8S9ceTYEEwYjBW9GdR8hukQRa0l2hMnnV/BM8lMWuxjTpC+HKFyJkNieo1J7zUBXhYYhQdQRlcU1i2TIh0hcKLnHwHAKmZoCSAEEos3F5KKcOpmnG2cJMbdYpZSBCyp+TKQumbiBlpNHc2IydO3aC6RQ12fzE+tr6MdOmT8X8g+eTeQcdhGQiIdfsSMKi/Lsyk5XGXlVCpbxjzeo1WLF8ld3Q0DgEAAkrDT/04FZtEApV7AKVahWGaUA3dZiGiVKpBCG4yhTWUSq6gCAwdB0UGsAIeODHCw4IpPdWFWGBAqxByGaBHVRBmfQVuq4DSjlEqKjdmqZuDhN+aKNcKkMzNWg6kzcOAZiuxZmpvu8jk81IsnIQKHqwgGs7I3m1jMHzXOTzNbnmhqYxjY2N9YKSZLlUyR12xNKJTY2Nsxhl49rGjavZsnVbrev62edefA6mbrFDFy8RmzZvDLkXauvefoccuOBA69lnnqPbt27H7DkHiI998uPaKTNnWY8/9jgECKa2T8PwwDDaxrRhw8Z1KBSHQAgbTqcyQTKdYExjgaHJpkdPfy+okssbmoa6hjpwIaf75UIRg94Qxo0bi7bxbWEQhKGsBSPquIiBL5GmlxKCatWG4ALJVBKZZA66wdDTvZcHvptMJWWX3jB0gFBUKiVomtw06lRDwjSh6zpsx5PXLVVdbypBWJxIaXfgeCBE/n8iFPB5AFO3YLsOUpkETN2UcnBCUCxXMWvW7FOLxdKR9yy7Fx/77Ce11knjEYDHhUjU3CJE3qfSVsDguT76BwZQW1erYmfkFN93fTlN5gFMQ657QRDKopAABpHdxMkTJjcFrmcNDQ0im8vCd2R2dDKZgEY0+L4HgMAwNIhAQazCaCNJYZgGhJDEeR5I9YmZkBJ9CdTj6gEsJUiEKe9ToHgFugEQpgBgMrIonUjDLduTvnHmN85ecuiS9t//4fe45ZZbyWW/+oXcKILLbOVQTlL9gCIUBG+99jqqJQdfP+ccNDTV4aUXXt367HNPX9a1t/O5sa2tGBouwOcC4DIWSz4jpMXDtAyVfywQBkLRp6X9hAqmpNYUBBqkZQKxV04WlFJeRSlF4IfwdanKMAwTYBwG1VGpVlEIfKSTSWStHLZu3bLlqquuuuawwxdPnzZp2nhKDaRzKXg8wM4duzB9xlS4cMFDjgkTp+Dt1avkhDiZQF1dDU466QSsWr0GTzz6GJYcsQT5/CH4wQXnHbdz19ZvXP/7P15qJRO2blKZDGBo4ODwXQeUMWhUQzKVhBACju0ooMq/7yfwg4FEMnFFWstM/NLXzjjcNAxVfMnrwnE95OvrMLxrF5587HEcffRRYvr0mWTK1Gkza+rqZp72sdNO797bve3ee+7ZtGnT5vVr1q7bPdDbN1guFUulcrE8PDxUpYx5rusJwzRY4AdaTU1NwjDM/PTpM9rmz5s/5+EHHjigvql+/PDA0Ni6hpZ830AvVq9azrOpQXLggoMwY9YM1OZqkavJYKhYQn1tCFPTUCgVwYVAJiulpzzg0HQNnhcg8OS+I5lIwA8CvPHWm6uffe6ZP994y81/F0J8oAnmNVf85oZZM2dM/dynP3sOqGQtUBr5g0VsUfC8AJZuEKQzmDtvTrzYMWgjCi4F7iOSwLr3nvvv/uMfrv/dDbu2794vG8SK7VkJQ5frklp7mcbAlFyPqI+xu3N34ZqrrrlHBKH777rWNm/d1v/www9vPPfc78yJ1x2V0sDDEDW5evzuut/N/vpZ3xwDYOsHfT/bcfoPW7L4xlM/ftoiSkmTiAoppf8VChZJGEN3T7dIJpOora2VYxzbA2UEuq6Dahr6hwZ2XnDeBb965NFHbw5C/z3LMx9/4olnDl646JNTp0yZ4VMqwZe6hnxNHuPa2jB1ypRJX/ry5z/6XgreebNnzbQShhn7YAiJZfVkRBCIocFBVCsVeL6zY+uWLWv+Hefymquvvql1zJgJ55533rcDDkIFBdGoArky5LIZ2NWqcfpnPnfEFz9/+hEA8MlPfwoAjjzs8MM//crLLxdGv96df7vr+S9+6csPHbJo0UeFmu4SpcqKcsGl3J/HkFhBZCM79ORQBJQEz73w4pO/u+53Vy9b9taL/+o73HLrbfd+93vf/URdTf3sIAzguT546AEUCPwQnR17xbSp0+p+9YtfnAngzBv+eMNZAG74l0qGoX5uJRO/9Th3L/j++d+rq69ttW0HpXIZdbUyySZUPB9LMRoCHvhPP/30K8+++OIDb69+Z/WYpuZyz97eyu663f133HH70P44Z07g9s6aOfPnby1/46V8rnbRwQcfNLO1rbVt87ZN61Yuf/O6rVu2vPVeXueO2/5233/+7MeHVyrVWtMwVWyo3G9puuSgXHHFtY888MCDf54zY+aaDRve2bt3794A/xf83HTDTXcbujZ80Oz5Xzntk589Jl+XyY2oAp5+8Iwvn3GRH3gD//X3ND8IoDO5YeeCww/kRi/wA4TK/kMElVmhoUAQyE4HFxzJZBK27QIAyeXqmssVG9NmTBZLDl1IkqmknBZs3Ix5B85FMmViuBDCrlbx7LPPgYcC3/j6N9HS3Iw3X18+7FadDbZfKdU21qJUKCKbyYJzgcGhAblKcA7PCVXmLgMFVVEugdpAhTLuR0gQkSBcTVJlYU5BYrkcEaPUyEJOTkAJCCdx1AeBpC2HIlASBtldlXmkso3F4wgFjJoGj3S4oixHIeSNEyqIESERSpurTreKR2EjEACuXogxOrJRVzExMjN5JLObECI3lup1fM+LN9SUURAhIEKOTDYDSgDTspBJpVEoFbFx80a0No+B6zk4/Mil85mhJ59/5gVv2oxpxoxps5BuGws/COREnEk/aEx/5spDq+lxUZRMJnH0UUeK3/zud3s45EQ9DEcKhTCUbeJ8TR6O44D7IQL4anqiNnAhh65piqAHhOBgQgMVkuJKQOINv2Va0lermTK6wtDhOi6CELAsU3a1KIVGNVimKaeEoQ+mGSoOyZfwI6ojn8uir78PNfk6DA8NI5PKwHN9VKpFlEpVOaX2PLgylhqZTCZXW9/YPmP69NnTpk2ZObZ1TNPObbvSRIhExa4a/f2D6W9+/esNVbc6hvs8vXrVatHb1x9SjZFDDj6EPf7ow7jjtlvx81/9HGNajsCqZavw4KMPYvLUKVi0cBEOP+IITJ0yhXR2duKtwlvo7+tDT183KCF47tmn0D9URn1tAyyLoTRcpqZlmTqjyYH+PmKaiSCdzYX19fUi9D2MaR6L3V2dCLlAwjTR1bEbmqEjnZQ++9def2vnxs0b31566CEHShmSvHcE5SrjWMS2gFKpDCthKXUFUZ0zRizLxITJE1Jbtso9ENXUrkWdC93Q4bk+qratKOhCTjK5nPpRTeacahpAdQoCCkaAkAfwfR+maajpEBAggO+5KFWKmL9w4ZJvnP2Ns2679a6m0z79UXzp9C/ANHQlnVI5ryGXvuPIc66MVJ17usRby5aLk088kWazabhulC3IYfsOwAGNmRBEUSKFJOVGLXvfC/PpTMYqlosI/RCO68E0LXAly9ZUUW2YJlKGhmKhJGOFOIfruWqaQRXhXYt96FGclmVZ8D1fFrpEZjNHBXwykZb3vs4UqI0jYSbQ1bUHHz715I+dd8G5J+zcuQOrVy7HBed+H8WBYazfuBYzpx8AP/RjmbeuMQyVi7jsil9jbHMrQHWk0pZ/4cU/u2lweOjpmnwtPMeB63jQNQ1hIOEyBBps25HnigF+6AEwZC43JeAikA08IfNUPV+yExKJBAwmvZuu64HzAOPHt6GluQVvv7MWINILDQGkUmm4ng2hBbASJjzXh2cH6Kn0YEzTGKQTmRd+9Ysrb7/plht+ks2l4HsBpk2fip7uHlSrVSRSCXi+h9a2McjX5vD08y9gzuzZaB8/Dl4QYHzrOBx2xJFgBsX2rTtQ31CnXX31tV97863l61YuW3FHLl8Dp2ojkUwAgoNQBh6oZonnqfMh5P3wb/6xq/b6pYcs+u3HP/3xaZlMrgmCSGuAqcMwGca1tqKleQza28bhlVdeID29fVh06KF4+eVXgkwmXZ/L1jS0t008JG2m+OJDDh0ihPh19bUAJ9zjvm8kE2G17Ih0OkEAYhimaaQSSYMRmureu1cvFIdw79/v8saMaRMz52h844b19KMfP422No+DRoHh0jB27tqJSdoEVEsVZDIZpFJJWEkTTEUE8kD6uJ2qGzduUqkktm/dsfua6357633333djz949u/7zx//5gY9XtVoo19Y3XlFf3zTm+GOO/oggFK7nyueLAgTSONYiRDqTQBjKphNjDL7rA5oGShH76zs6Ol/79Kc/+aNly5e/8sMLfrj/zm25PADABpDwA8kBMQxTQr2YDsE4/CDAjl07V5WKhbf+nddZT3dn4bSPf+oVcu53PxXtY6Di2zw3gKYDfZ29c5e9uey4/VHwAsArr772yHnnnfe7q6666qeEEoOLaLpGZV66Gg60tLQQAcD3Jb9B0zX5nAHw+BOPv3TJzy+96I1XX39xX9//jtvv+MfZ55x1zW9/d91lpmbWcQB+GCCRSmLW9OkAgCOPOPKTY5pbX6utr3lg7dp3/scOV9UuxlE/lIxY2WSig5x4er4HM5FAfX0D/nT9H9569rnn/y0FrxCiRAi9uKWlNfPZz336DICBQzXrIdWQrgKgen4A23Ywdmwznn78yZlbN21pAPCugnd4aHBofHvbBb/61eXDn/nMZ06jFGkgii+kSkFJ4v1wpLYEZaAWQ7Vc2fWrKy6/7uprfnNDuThcfC/foWPnzvVf+PIXr7jtlr9eoTGtiVoKYCo4GE0imU4R0zLVcCLY89Bjj+4485wz31txWbXLAK46eNHCN35z1TVfKg6XZlaqduPJp5w8LpE0Labu+57+/v7X3nj9tfvuv/fuZx9/+tmDFizoffrxx8S/6x5ct359P4AHADwwZ868zJKlSw90Ha90/8MPrnqvr/HzSy/6ezqdzB144MHnTpsxeWJzcyM6d+9BLp9BJpPh99zz9/uvvubqi7v3dK0FgD/hT/i/5Ucpfx5jlD79yiuvLTnxIx86tbGlZc6qZStfvvraq2/yA2/3P/s9jVKmIkJ4TMINuZzg6oacTBIKpDNZUEpRLhSQyqTheA40qqNcrAKA3tTSUOs4FQz1D6k4E1nshkKgsb4OruejpbkJL7/8ItavewdnnHEmGhqbsG3LRiRTeoEj3AUIDBcKKBWLIAoeoGs6wjCE7wdIJBMQXGZTBop4K4SUIHIup42chzANE4JIbzKUZJExgiAQEJyDMgZGiCKvyaiQKLqHaQpzrbJ55e8ycGXwJrEMWowoVQiJzez/7IfzkbWRKjlUqDIo5bRSFnkjNTOJ31/mdUbFrYgnuSOvIRfTkHMl0ZQTF53pMHRDRtsIAdf3oPkyBkjYDqpVB7l8Fr4CCxGK9OIliw/u7e/F2g3r6PTZ01HfUDfyJdSmgEUxPZSACoBQBkBuxF3bw/TpM1BfW8eGBge2AJCxK9IzASuZhOvaEKFUEPCQwwt8VG0Hus5AGYPjOnKqzKgCPMgC2TA1eAoKRoTM1RVEZlImEwlQSuF6PqpVW0ppGYXtOEglU0jo0stLGAPTKXQzJWU1OkMqbWFwcAiVShnVahkiDNA/0CcLu6IPw9BSjc0tNe3jx+fr62vNwaEhUa26NbV1NRPa29pmzJw564CJkyZNT6WStV27u8PGRU2kprY23dvXS3t7+8SsmQeQdevXoqG1EYxqRHCidfd1o7NzL2bOnIU58+agffw4BG6I0798OmbMnoFyuYq3316DxuZG/OPll/HiSy+gWq3AMA24jhPnMhuaAadaQhDoMAxzUrVSPcUwrdYzTv+aoDrVVq9d09mzt3dTLlfbU99Y65RKBaejs8eZMHG8U19XH1ZdG7ZdRiqVxsYN6ztuvuHGN5YeesiBlCrvtK5DEyzOf4SQEvuGhlrZ8Vdwh5Bz1NbXk9a2cRBAvlAYRr6mBnbVRjKZAAGB4zpwy56arjDopoFyuQTueTKGikr7gRCARnUQTU7ThSAwTA2ERNIoAc+xIQw9ctkbxx9z4hfXr1s3t7WliX3uU5+DaegIfKGgW3KzGnlyuPLJU04ACn7DjTduGR4ask/72Mdmc4Dpmo5CoQDbqaJSrWBc67h4TWBMNVwUxAUAautqEplcJuns9NDSVA/TcOC6LgqFYRBCkM6koOscjmPL6B8mC1QeUgS+CyrkBIdpuoxZc10pqlJxSdVqFZRSJM0kKpUKqM6QMBOwq1UYlsx9rlQq8FwJAaqUK6hUi7M/+clPfx6Aedutf8XYMeNw3LHHYtXKtdjT0YMpU6Yj5IDDPRjckF51N8AVV16J1cvXQCMUO3duf2PTpo1/J6Bc1wwEfgDfD1RUkiGVEAxImhZsx0WpWoZhGmBERnH5vg+dmTExnjKZ9e17niz01TQ9ksoP9A+gUqlIErymwa9WASFQrRLZkGQSgsaohOd5ro8wCJFIpLxNm7fesXrNuhOOWLp0QbFURk1dHoEfYsumLZh74Fy4/x97/x0gV3Vme8Nr731i5c5ROWcQCCEQOWPAgA3OAbDxjMc5e64Ttsf22OOccM4mY3LOICEJ5RxbLbVanSvXyXvv9499qiTfe+d7vxvG13Pffuw2Mi21qqtOnd7P86z1WxKIpEQqlYQf+sgXC5g+bQqEUL7ohQvno1KtwjYSKFVKAMm0ffhDH3/fu97xtnWMsEOWZSOKOHSdgugUgYzinEQFcjN0JU3/W9RrW7Y/+vGPfmLJj3/8k09rhm5xol4Xpqlc+GI5j6nTpsHeksNPb/8Z5syZi+vf8EatUCxg04bXxGCxLAVCkRKpzN59B8i5F5yjHenrh2Vb6OjqhBAEvT1dONo/gIefeAIzZ81EtVoTURTw5lyOLlq8xDj33AuhmQyZdAomNXBk4Ah6ujtx+HA/pvT0wLRNtNsqgo4CoFTRrgM/AmMMXEQYGhnGjBnTAEb4K6+8+uynPv3p723c/NrTPAz/t24Y8uOjfa1tnV+896677fMvPPcS2zQRBGFd8geqUQWB5BxBnIddj57STUX39t0A/UeO7Lrn3vv+cvvtP/ndsWNHD/7vfl337dx9eO3atY+dddZZb2CaYqZEYajOFgyoVBz4oY+nnnj2lXw+X/mPvs4mxifWFcvFQ0253KzYtKWsFroCbE6bMdP82r985aNvfcubcy+99Mr9xwaP7ftf/Tv/8Ic/fa+9pTn1sU984iO6YZqcSyUJJidlsBIAUhH3T67D/X1PfupTn/7nnTt2/E97KDds2HDHd7/z7Y5/+ocPfjKdSWe4lIiCCNAZGAhOXX5q75q1L/9w7fr1r3/DG27YNWfOTK2jq6vYd/DQPT/84Q8bwDISS1DRMPGSE489HpTWqg5KpTLSyRReWfvqBill+T+uORB5O2F/lurw3nTDm95JQZKabsTyZq7SWKRaJXi+B9f1cOqKFdXLrrzyvy+V7j96wE4l33/7j37yxFe+9OV/PPfi81eTODS2vhj662tpLCyXyvteemXNMz/7xc/vWvvKK+u+fNtt/0Pfw1133P2n8dGx2jf/9Vv/0NvTfZau68lUOg1dvUUxOjwUDY4MbX/mhRdu37Bl44v/w/fV9RvWdLS1r+/tmdqWzTVNX7N+7eLu7p5pxULBmjV3RvGuu+/ZuH3LtlePDx4r/a2bu+3bt1YA/A/nM3uhHwH48S3vvfXoG6+9/h2rzjz7nEQilXMc/+hfHnzggY9+6CM/n8hPHMJ/4uJChABeAPBCMp3RnGqFSyn/3UGERqmK9eBcQGMEpmEiiCKYtgnTNODU1I2WmRpSyRRCwVGpVmFZFqIgRCJhQTNkx6w5s6Ye2rcfuYyJcimPRx9fh+7ubqw6cxUcT20yCNVx+PBRMM1AS0uzmuxPn45Nm7fsONzXd6SntweO4wCSwPVUbIxumOBSQkYR/MCDrhtK+hj7/gghMbWUxlIKFYdBKFGEZUpBpEAY1sm+sd8AEqK+6q1DrOKNIiFq+ypJPQb6BJ2YSOVdUNEpdbkkA5UUEid+VhMQ9fWBE94GSeJJ5V+lsaGeySJjqg6pk2TjXMJ6gw0CWLqJiEYKssQj5RTWaSMHUovvADzi4Lpo5IVpjMHzfOSampDLZjA8Oqqo12GEA30H0NScXbR44cJT/NDBP3/uM9r0aTPVaxzLOCWAIOTQTNaAedV9nJ7vKzk4VZl9Va/qV2qVwwCFoesIggBWIqGGFvHXLBYKceOjQQNrbM4NU4cfBCCSgEOASAnDMhR5OYpUM2/q0Kitmo94AFFzajE1T2/k8UIE8DwPlmVBgENIDjthw/NVHE6xUIIaFEkASLQ0tXTPnb9wSmdXZ1d3V1dTJpXpsFJmr5Ww20ymJ8vlUpCfyLvtnZ25dC7T09Xe2ZLN5rLFiRI70ncU+/YfQkdXK6oVH3PnzkJ3Vwd58KGHoZkUju/Ai1Qzs33nNhw8dAhz58zDTTffgr79B1FzS9i8ZQtaW9vx4EMP4rkXnsf7/uEWrFq9CqevOgNJ08bunbvQ1t6K5mwOYRhi8dIlGB0dQSqXw+KFi5P/8N5br+vumfK6a669VhwbGRDXXH9NsW9/385X16/ZVpgo9C8//XTxzluWHv/Zj3/xgsaIQwF4IVfPkWmhWq1sU6qKIg4c3I/ZM2eirbXtJFPOietdXdexTYBSuJ4nHadGNKrNBhTFVnoBXM9DKpFELteEiYlxFb1DFeQLBEglU7F8jCEIg9hWoPy74BLM1Bs+YAGuVCUVB2HE4Xo1nL36vLdP6eq+4pe/+rn1yU99kqRSlsos1lT+MmFAKFS2IiBAJQWhBEEY4Ve/+PVrP/z+D75+ytJlqWKp8LO21tYklxKu54ALgSAIG1YIEsPlENsj6kM9Uzc0nbHOhJ0AKOB5PgzDQDqdVlFfMYmZUqr85HFmnyIwU+j1IUYkwEHirGu11YZQ0pGIRyiXy4p8TBTUyrZsiEjA4z6iSCCZslQcUc1r+f4Pf/DJ6699/Snf+86/YSI/IW++6SayY9c2nHPRudCZAccPlEeJcwgqUCkWoekJCE7Q33dQdja3unf8+c/3FQvF/ta2NriOgyjOQCSEIGknUXOqiMIQtZqvAGMxAVvlKQKRF8b3XwYQIIz5AnWioiSiIX8DoQhDDs8v1VO2FXDOV89TBA7uqXt50k7GHjQDoQixd/9eNDU37/nBt7/7W69cmbNwyZKslbAwZWoPJiZGsWf3bsxfuFDFslGGN153Hfbu24ctW7ZgwcKFSCVTyiMZChyfOI6ZM2bi6OAA3vn2N5+zccP6j/zyV7/67LSp06qjoyOIRAjPcSG4RDaTgRBAsVyEbdlI2vrf5Ae877sepewni5Yu7P3whz56i26bCqQkJIhO0N7eCs4lrrr6alx0/vlqUBF56Ghrge+5dKxQwJlnrmCtLW3INbdiau80ZDNNMHQNnu/Btm0ILtHV3YXLL79UBmFE2lpbqa4bIELCSiaQSiXxl788hEq5jJmzamjvaodtmZg3bw5EpCSAmqapNAQCjOcncHRgQM6ZO59kUmmYmo4ZM6Zh1849e370k5/+4a677v5zfmL4yH/UczY+Nrx16dLFH3//P37g/ddc8/o3dvd0tQJ1IrxEFHIQCBj6CTBUo5E6fGTXD3/0o9//7je/v28iP3Loc5/7zH9Mg5kfdxYtXvjNH//gp7nzLzzvIsM04bmeisYCkE6noHn64eGh44/+La6ztevWbvv+d797/5duu+2TNPb2R5wDVCKMIqRyabzj5pvmvP2d7/paEHoffPjR+7539eve8M3/lb9zdHS42tbS+q81L6x88P0f+EBbZ2tn45P/jke+Ui4Pf/s73/7DY489/rOdO3b8Lx3et2zeWu3o6Pz2xFihdNttt/1zIpHoZIYOLiQCxeHAjJkzOltb2t9+wxuuV/YsYPjLX/naywAaDW8YRMPxpkPZ4Op3NSkbUT4AYFoaAHhHB4+99jdQh4wwXf/sn++8e+0nPv6xm85csfIcyzT/6qaVAtDSnMXBQ0eHHnnkwV/u2LF94N9XJNQcAHf2dnVveefN7750+pTpK2fMnLng1NOW9CbshDU4OFTt6+/vK1Wq639++89eXPfKmnVVpzr2rne983/q8Qe+JwDcv3DRgpd7OrrPPOuscy688urXzd64YaNjmNrBRx99eNNDjz22ToTR8U9++GP/c8qGsdEIwFD88erJn7vpne/+T9sU/uoXP3/YspLPXHTxRYt6p/Q2r3t1/ZEDB/YecGo1gf+Lqlb5fwczalEYgVICy7LgBz54oCBIEBKe48HQdAgi4dZcBF4AIoAoCBBpDMygcCbK6G7rWJWixpyNmzdKUEla2o5ByAhDQ0M4fPgwfC9AS1sL9h/bj8eeeBztHR0YHB5FrVzFob4Dw3fdfc/ThJCa7/kI/EBR3TRdUSghYeo6okAdfhilkIw1DmCUqBzHMAxBqAI8IAYpUUZjurFAMpmEpmsoV8pqMypU1qeAUNvVWHrCeR0hL+P/yvjQq8BUkohG4ytlfBPjHDwGODUy1v5K3HwC+NCQtzQgQKLRINc/R+IuVzaAQSLeqAm4vgsphPKyMtbw1dSb5frWmGlK9k2IhNSU2d7xXFSqVXDO4Xs+IIFcNod82cP5F563or2rfer6desxb/Zi5HJNJ7bYFGCSwtKN+HuQDQRXGEXwAx8Jy1aSZwL0HT40unvXnnHTULAwGU9oKSFqm+yHCPxKTD1W3t8w4jB0HRozQMGVjJYoWRHnqinTiAYrkUAkOSKh5O2e58cRQQaiIFBwLqbBqVXjfLSk8ilWI+TH80hlklTTWFtzU/usJQs7Zy9euHjO6WetmJvNZDrGhkZSvdN7Eps3bopGhodlqUa6jZTV7LuhX3JK1a6uDjF95kxrIl9MUU7Yzu27sH3bdixcMAubtm1DIp0FECJq8/HIYzthGyk4nouOjhYkE2ksWbQU+XwJSxcvhR/42LDhNdScGqBJzJk3H/axYYQBx4c+8kF84hMfw/SZ07Fgwdw4n7Qu+Ubjeg0jgXKlAsM0kU7Z+N0ffqNFgmjHh4dwSs8pYETLPPvs8+2DI0Opo33H8qaVqNSqZY1p1KtbFjRdQxCp53NkZKxvdGhcJHMp2ju1F1YiGdtNlY9Kiw8+igLMFPgpvo5TtkVGR8dx/vnnnfH4o48ki/lCjVINhFH4YYBUJg3LsuA6roqQYOpzEhJB4EPXDOXviUEXEVeTZ0NXECgeCeSac7BtCzzkKE/kyaw5C1//5hvf/MGJyviUd930buzfux933nU33vymG08QmSHBYs4AjbfEruOikM8X77rnrh9kctkHR8dH5+7bty9oa21NOp6LVDIDO2khkbAb3t8GrjqW9tWlWtnWHM5YeUbb5i3bYPsBPN9FwENlO5AAJEUUN86WZYJCUwAMgwGCw6k5cZ6yhCQxAAlo3IMIJWBEh5UwG/cKLc4Oj6IIhmGgp7cbgMTIyBAuu+zit37oAx94S36iiL17D+EDH/xHMnvWPNx3/z1Y7gaglg4eCFhJA8xUWeXj4xMw9BryxQmsPHsVcaveK3v37XtEYxogBFzXAxcKmqMxNVAKo1B5WXUTPAwQcQ4qAc4jaIYex2ERFXMFQBIKQhk0SsEJRxRHlOlMgxf4MdhMZZCapqmy1UkIDmVBMTU14BKCI4zCGKyohrTFfB5PPPH4A6eedso551564ZucWgDP8dDc2opHH3kUHZ0daG5uQRAJGBoBozp27t6DmdNnIJlIwLRMGIaFMMpDMmDK1KmoVn184XNffOfmHdvW7N65+04KIPACWJaJiAsEnCvvvk7hxnnWf6sSgo9aZuKLzc3t5jve/ra3U0NDJAVCP1TEfyFAqURzcwsK+TzKxSIgBObMnokNGzbhnmMD+MSnPoxND70G13dxtL8PoeehuaUdy5Yvh2UlQClBtVojvb3NOHZsAPmJAqZPnQ5KKQ6PjcHQDFxyycXo7u5s2Fkq5SIO9x/BihVnxLRuCkoZKk4F5WqZZNMpEAL+5FPPbL7r7rvue+KJxx44fmxw309/8oO/wZZk5w5CyId/8MPv/eFd77jp2jPPPPuS01acujCVShpgABBbloTE6OjYsUceeOTVxx5/7IlNW157qVwtHyrkC/I/+jHu2rl7Qzqdfu9nPvWZ9737He96e8/03h4AkBHcxx557KWf/PT2n7z62qvrf/nLn/+HP19B4IZtbc0/f/0brjnt1KWnXRjFqiJ1LxXK184YqEZgaomuhYuWnTFl+hQ20D/wv2RmH5sYLxBC/vX+u+59+TOf+8zbV5119uqknehoamlOCc51zdCDsdGxoz/+wU82Shlt2L1316sPP/zINi6497/j+x4ZGXYvOP+C2z/5iY/vO2PFqndecOFFF0+d1tPBTA2ABt8PYdoGKKFiz96DO19dt/bn3/n2d/Z/4fP/3Pgazz/z7JbaZ6tDyVSqSyn0aGPZKzlX3Bk/hG1Y2LRp4zO7d+7Y+jfZhoVhCcAfNV17/PVXX7NiyaKlp3R2dc3pndbb293ZlT186OjQyNjwa3/+859fXLfh1U1RGP6/+sSPDR3fB2AfgB9adiK1cNGC6c3ZXGrw2ND4/kMHjvAoDG+8/vr/bd/D7l17xgA83JRueuKXv/ylMTo+4oRRKN9763sxWf8/tr1ezQWw8f/rz4NW394puRhDJCIomlsIxjSYlq2gPwxozjXDqbrgkiuJbxBCS+jmJz/3qctkJLLTpk3B7AXz0dnVgRUrVmLz5m149PEnce0114BpFMdHhrBpw2YsXroIQeihvaMdr2167fD2XTvWd7S1olqtKWgMo0gYNsrlKqIogm3Z0HUDkiiao6jHDEHFepA4nV0dCGmcnxoTZRkB56oxI5RAIxo4eB0rpTakhCpUd9xgmoapNqTgjUOujA+6UipElSKlktjLFvt5SbydJSfy1ggIZNwXEElOkjb/9aZXURDrodYxTZbIhk+YsBiOJYTyKEM9Jk1TMCwab4aiKFIkRU3JgyljjYgi27RgmgZ4vKFQIAqBKIywYsUZSwr5Mjw3kLnmLOFcRYpQAQgO9ZxxCUPXTvgy4q4imUzUU5QAAMNDo/2e57q5plYwncCIoRNhGKBYLMI0rLi3j0CZqWTpuoLe6IYBTVMHZsFDcKEylhOmrfJ8fReB7yORSCjlQRxlojFdZfRKCUSRiltBiEgKmk6mm1vb26bMmDFt8bnnnH/6smWnrBgdGZ+9ZMlCmwHm88+9oA/2H8WUqb145NEno2PHBpz21lb0TpuTzGUydOj4MTufz9tgEhPlAnZs2wOdAqetWI7ead1obW3DRz/yEbS0dcLSdeSLeezYvRshlzjvvPPAXQ++62HmjFmYPk29fgISy5cvh+M4MK0zkMs2NwjY/3VRQsCFRLWqtti2bcH1XEhJ0NKSUwcUzjFl+jSYuoH582bj6MAwHnzwIZQrVevc88479/jM49X9ew4+e8cf7x5auHC+8Dwf27fvUHRUQ4PkHHv37D566PD+gSXLlk7TmYah0RG0t7Uhm0o1lA5KWnyCVFrPo7MTSbS3M9x44w2nPfCXv8xeu27Dtjr1nRKC4eERta03TRimqQYVsZHeMhPK/yPDWKGhItGoTlW+qGVg1uzpOHZsEK7jolKpYvbceVd87KMf/dTY8NgpIed4yy3vwMaN62AmTFSqNaRTSYDKBgRGCA4eARpjGBsfx0MPPvj0yMjIEzWniqlTpoQd7R1KH63roBZTQCemqUi0wINtJ2HqBriQSqYvgURCyfLHRse557lwXReZOAbKcWsAU5aEhG3HEDkCZmhgPEQY+tB1A7qmQQiVwZtMJOF5HsIwVN5+SsA0HTzg6r1MKCzbhFOtYcqUqajVyiiVyljSvRhBEKBQKK5457vffQsAbd+ePfKd7343aWrqxGh+AnPmzINX82EnEkilLOXLB2CaOrp7uvHC8y/KqTOmknze7fvExz/+g6GR4UOpZArlUhmMKf++8uMTVKo+GKXQTAO1agWIoXiUqQEbAW3I+BRZnkDGfIS6jxcAmKHAfRQEfuiD8xCCS7g1D5RRJO0EQh5AcAJN1yCFUDYWIhTHgVGY1AQhBK7vD95zz30/v+rqa05tbW6dW3WqmDNnNi67+FKMj4/BNEwYVgJRJDF3zkzs2LkD99//AK677hpYCROWxaDpRPEreISBwWNYMG9W5u1vefP7/vF979uSSWX3NeVy8DwfAmEcowWYlonAC1CpVP62BxjfGUznsh/ft3/30Gc+819uSSUSzY6QIIJD09UAEFLRWG3bAmUapk2fiU9+4hPwIw9tzW14x7vfCR4I9Pb0Igx8dPf0IJFMN2jYTS3NGB4axtDxETS3tyCdzYBRoCvViRnTp0FKCdcLYFsqpimdzuDUZadAYxqCMIyJmcDsGXMwe8ac2kMPP/jKPffee9dTzzz32Mjg4Mjf+rAjpQwArAWwtqmlpePCCy5atGDRouWdHa3dfQf6CqVK9djQ4ODA8ZHjR44c7u8vFPLh3/oxViqVwzpl/3zXnXc9/KGPfuyKilPj99x1xws7d2zbWC7/bS+ysbH8wfkL5t329NPP5Kb0TlleHwgAyu5Wpy9t27Hz+Q9+5IPf/V9tdk96nSIALyWTqVeack2ttm23tHd22jW3ara3twuNakPPPvX8oB/W/kNIcc+/8HwI4KnWlpbnli9fseLSyy6/5vyLzj0zdML27p4u2Xekb+9tt9324IZX1z/puM7oze/+663l0PDo7vvuu/exN1x7wy3JbBLDQ8PQDB2tLS1g8XsimbLxwrMvPfft7333m2Oj43/T1zUKowkAT8QfmDZ1upbOppOHD/ZVa26Nv/+f/uF/7p7kOlUAO/8W30OhUggB/M3fn5P1n7zh5ULlczU2g3G+n6Eb4GEIPwxAdQoZb0VdL4CZ0JFK2hg4OoDZi+Z2nXfxRWcc238Ujucjk00hYSVRq3qYPnM6BOGwEmpi39nRjtXnnIX58xaCEQ0jo8fR09vuLly8oDgxNgY/8JC0U3AcJ47r4DCoiroRQsXN1Am5MXFK+TVBGxApUu80pVQ9qVC+gigIEPjqoEbjwxIXceNKAAgaU5ZV7FE9kEXTGHjIY3mz2hLVm2nGqMrSFPUtraxDq2MZdIz0l/VoqPrONm53ZT23F3GTTOoTfPX1yIkIII0xSC5BNQamUURh1ABYSS5ULi9TFDZKKSRX8T6UUkRBAC2RQiqVhqYrnx9lGrK5DFzXRcRl6+IFS5Yd6z+GJx55Uvb29JBpM2dCCAHOVfavphEQncQZxYhdPQp4ky8UYJom8uN5lColbN60ReXJUYnAj2AaFhIpC6Ojo9CoDk1jYJTBNC2EEYeuGeCcwzQtaJqSrHMeQgoBU9ORSGdRqVTguA6EFNCYDgLAMEwwqiHwXBiWAY97KBXzSKcz9uw5M+addsbypXNnz1vW2ztlDhFyTmdPVy/TTO2nP7mdHTl8WD/9jBWYPnWKJCLir6x9mVyeeR09/5xzNcM0Ms1tLdi9cw+OHDmC9vYm2EkTPT3tIExDc64VQ4PHwXQTU6ZNw+IlyzB/wULU3BoMZqCzqweLTzkFXAqkLBs0phYyTQc5KdCQAMhlM//tD3wRDz+IIo5zrlQXBBRUV+HtKstSYmxiAqahg0Ni/br1WLLoFBzq68Pw8Aha29owbepUlMsFLFm4cJlGtB3pbDJDGZtZrVaOtDa38DDyUSjmYRgmHL86UKoW+izDnLZz1y6MToyh7Zxz/mo0Q0DgugE0RpBIWieFbQGFUgGe47Zms82Le3q7t42OjoJXfQgiFWyOqqzocrEC3dBVXA2X0OMBQBhEMAwdmsUUxRwSEeHwfR9H+g9DMxjKpSJWn7v6+s//l6983nWCU6qVMq6/4jpkm3O48nWXI/JDdX+o3waEWt4EQahgSzaDYRjlBx54+P7A8/MpO4lquRIVikWuGkADY2PjyGazGJsYR1/fIZxxxkpEkaI1gwDHh45DowzJRApRFOLY8SFkMjkkEmoLyaMITZkc3MBBKplW2dh+oJQVvh8D7ADKBbg8sQHwfK9BgtUNveHhJ5qC/RCq7h/NzU0olYqwLBPtHa04eOAgOJetN998y61XXXnlskcfeRJ3/+mP5O3veCeGzOPo6GrH6StWoFqtqm0yJTB0ta2YGC/i6JEBVMsVkrCS/InH/vi7/ft2PdqUa4aAAon5QXgiL1wI2EkLURjBd10ARNGKhYDre8q+IZRElDAGPc5eDhyvjiVAHQrEBUcQKglsGHu5Aa4k6ZLCMCyAGHAjX8GxoJQrmqapLXNMZhdRhEQygT27dz73Xz7z2d986pMf+/Ipy5frTGNo7+rAnXf9EYlUAje88S2AVAfOC88/H/v274EXOACaIQXDww8+hsoFVaxceQZMw0C5VsP7br31nD17dr/nB9/7/hdzLU1OFKnXTFlQJBgzYGsJhNHfPr6wUiyNEkK+OHB8cMdXvvSVz03tnTK3/jnH8QEiQDUGXbcghQJruX4RHR3tkJBoyTYjCjlaW1vBIwWGk5IjYSdUzJymoVKtYNkpy9Da0qxo/3HUHQHgBTzueSQ4Bywr2ZD6G7qOMAwR8qi4cf3G57/9ne/e/cIrzz9ZmigU/h4OPoWJiZFYhvrc39uhLFSQjjXxBz76oX/6P/ZY9u7Z99LCJYs+8G/f+s4/rFx+1pUt7elWSpXM+vixoSO3fem2Pz70yEO/Gxo+fuB/u0SxVhUARuOPv3mNT0xEUNLWV3t7pySigCe7e7vkyNhIaXDg2L/bbLU2t1W//pWvPZGwM5dcesXlU3/8k58fr7m1I+esXuUWisVo2syZtfxYYduH3v+Be4ZGBnb/n77ejhztj/Bfwakma7L+r2x4JRSIhlFFZVXocA11j73gAowyZLNZMEpAmGxQT5PpFHggOgv5YtdEYRy1qoODBw/h5aMvYur0GZg9dw6m9HQhlUxAcoL71zwAz3Pwtre9HdlsDtmmJO574AFnaGjID+PDkh/4MA0TQuhwfQ9BGEBjGkzThh964JHK1SSUKPIblFxWN3UILuMoDxUfxMBAoZo0StTvVfCZGBMfw7nqh5f6cUwI3pAz05Nkm/WtaqOhrUOiYtpdnfxaFzWTBpWPxjlkAlzyhnxZxrB6te08QbRTECwaf231QvBIxA19HI8kVNq3jLcrUsp4E0+haSbCOD9UCuXBdV0XhmGiXFYbJKYxEEj4oYfVq1ctnz1zzoKnnnoKgoFMlIpYYNuqqaXKgygBFUcUB1eT+DFDSgR+gOamJgyHw/BcLxoeGdqhaRoMTUehUoubcCAIAmTSWRiGrqStVAOjErrG4n0hhZGwwaMINb8SS9FTMEwTwcQ4bD2JTDqnuhgKlAol+J4LQoBKrWzNmT13yQ03vumSKy+/dHVTU3Z2wKNeIYi9efOG2ob1r8qO9q5EW1cHfW3jevHmN90ISST6jxwlGgW7+JJLMHfebKQzGQweH0ZhooRatYpFpyyAbSUwNHgcA0eOo62rHT09vVh1xko0NbWguS2nmjbDQkd3ZxwpgThG6qQUZ8kaWncRE495/PpHXEAKtX2sD00IVx5L1fwwSAHYSQXPUVJOiny+iIGBIXR1t6GlpQ3z58zHz39xO44PHwcEAzU0XHvtdWAEYei4+Xyx7EREMBlw88De/RgYHEQqnYKQgG0bKFeKztq169ZfeflVF0zpno6ElUBTJqdyr5migEsAhs5iGe6JxpwAGBsdQ6lU5slk6tRDB/rvSKdSwjQNVJ0aCCg0EAS+D8KAwHdhmjrCSCAIIpiWDV3TwQgFZQS+76ucUYMh8EJ0dXWhe0o32GLtdTff9J7PvfLymlNGxodxzjmrkE6msG/PLuSaMmjJNte9VbHvVr0ePFKhCYwBzzzz3EP79u1/wjQ0UEIRhlFVCDEYcdFWLVdRLJVAKIVtmZg1fSayMTFeSLWt7mrvgJASnEtUKhUkkslpNddBMqV86iASVbcGXdMwMjKKbC6HplwTBo4dgabr0JkOolPI+F5gmhY8t4aIi7jpU3FDYRQpaTdhsAwLgEBLSwsMw8Dh/iOwTBO5TBau42HOwrlXf/ozn7h+fGICv/ndb+RVV15Glp12Cu66927s39+Hf/3GV5HM2KhVa8ikMgj8AGNjE2CUoaW1GedfcB5+//s/rPnZ7T/+U1NTE6JI2QgoJSoCyjTguDUQqcBxnudDShXXIIXa3EKo7GHO1T2JUQbBZRzNFOcYx2RuIonyKcfTQEYZGNMU2ItSBTSrKXm0FW9RJThkxGFaKYRRoGT9QYhUOgnbNhG4Sbzy8st/fs8tN527bu36K8rlEq645mpcc831KJVLGJ8YQ1d7F6o1B9lMGmeuPBMPPvgQHn34q/jq17+Ky6+8DGteeQld3V2YNmUKKk4FlVqNfej9H3nHU48+9cqhwwcfbGpqRjKZQBiECIIAnuPG2dX/Z+xQUkoXwB/mL1hw8Ne//d0H5syYc1VbW1MmYZuo1GpAJEERqgxJXUMioWwmDBqE5MpnDQpCqbKb1N/TGkVCt3Ha8uWIOEcQ8bjZVT9PIsFhGMrWoDgPDJ7nwHVdNDe3YN++/Yd/dvsvHnzx5Rf+smvnzo2e5zqTx63/nLV7x65XCSWb5s9btOwDH/ynS6f2TFs4np84/MMf/vCJLVtee01K6f/f/hwcOzbgAPj/6xoWEDLb1LLV86Jf3vKe92UO7N+zbnR4ZO/PfvzToebOptLA4SMcAG54w+snL67Jmqy/acMrJcIoQCQVjEYCSj4sBMxUAlyoiBgzYSH0QugsBj5B+eymTumZIYMo6QUepk2fgaZsG2rZMjzfAaMSuXQGGlN+seODgxgeHsH+/XvQNa0bXtSG7Vt2HaqWan4yYSHiDvwwUmCmKAIjGihl8EMfduwfNA1LAWDCQDWRQiISERDFTaRUTSGNSapSijieBI1MUc4FhKxDWNBodBHHBaGRKUbiQ1oMf6I0zvBUOZNcqEl/3ddax+jXjbyEEAgeA67ilg4kDoKOZb51eTKAWDItG55B9eu6f5c3IlUirmTcTFPZoIRItQmK14dqUq+aLt8PkM5kYRimkgybGjLZNHTNhBd4GBkewbLFS89JJhOZeYvm4u3vehuhYArmwYXyYYE0YlbU80X/Kky9rbUVYRiio7UdpmaO9B/u32MnEiCEIJ3OoLenB3t27UBTUxNACHzPRyqTjv23BrgEHM9FJp2D51QAojaYnKttT8WpgOlKXhoKAR764GFkt3Z0Lbzp5ptXnX32Wadu27J1zjvf8bZ5mWxT+8aNm1CsVOXm7Vu4TnUhIpGcMXsOuts7cc111+O617+BmoaFRNLE1s1b8eLzL2HO9Klozibx2uatePa5F+E7ITItaZyTOwflagXNrU0447TTcOppy5GIEfj/7iE0HgmQk4Ty9KShSf06pESpA0isFiCQsc9HyZg1XdHBeSig6wwH+o+gs60D6ZSFUqkKwjQsW7oYjCr41CNPPA47kQlnTrFL6XSycvTY4PgvfvTzvVwGWwYHj21nOj3Sd6h/fHx0qAIQnsu0oFoqQ9MZkokkCmEJTzz+xMsf/McPfay3t9PQdV3FrhAGUr+mAZiGDtAYDtYgUBJEEce61zYYK04/87y77rx7FhfigK4ZSCcZglBllVLKQHV17QohEEkOwzZUXrLngkiKmuOAEtVMMZ3BMCwU80WMDI/P/fo3vnFTV0fPqU889AQCHmLV2atQKZXw6po16OrtxuuufB0YU7nYCogEVKsVMJ0haSXw5JPPrPvSF2/7ajKVKOoag4TAyPBQYdOmTfuXLV16iuu4mDZtGsbGx5FKZsGIjsHB4+jo7mxETKSSqUaj35TL4OorrzjlpRdfyLmOX9RNDRAUvh8gk0oroFqtBo/56OrqRqlcQhhEIIxAAI2mA4Q2uAUaUyobLjh0XcVxmYYJEIlSqQwCglQiCUgFyWrpbl74j//43pvSqXTzho3P4z233ETOPfdiJBIM733Pe7B7314lBw65grkBGJsYg8Z0NDW3oFAoIvA98eqGtY9wEfSFoQ1AeXZBCNKpNPzQRxRGgFDwGiVtpDH0J0QYBtB1HYQwAKHitQiuQH7xPZmcJH/hIoIQccQZUePBMAhgGHpMy1dZ676r5OS6YSCKZc+WZUE4AoEXgGoMnueCSEDXTZT90tFvfutbP/jYRz85v729e8bWTVsxc9o0FIaLuPvue/CZT38KjDCEQsBkahDpuh5sy8SypUvAGMW+A/uRTKaRshIYL0xg1pzpHV/96r+8781vffOaMOLjUcQBSRCFHKlECl7ggFrG/9Ef5Hv37HlV07SNpyxdftYbrrv+bbe+/9Zrm3LZNiGU+ieSAgISyWQKUgoVmUfUJlYI9V6hLP7Zp1JgVFpDDF1jUmVI89h7TVRgNxzHQcQFMukUNKYH23ds3HjffX959NVX1z1+4MCB3aXiuD95zPrPX1LIAMBr8QcA4Kab3jH5xPx36tChQ8GsWXMG7r7vzl88/NCDnpS8OPmsTNZk/R00vBQETKPgQh22LdNG6CsgB+KtpG0lEPlcQYY0As9z1UTXcbB61TkrE3bC2rdrH1acvgrz5s3GvHmz1fTbcwCmmie/4iKTy+Kt73gnZs9diGw2gS2bt1QefvihjYyxkFKGZDKBSqWCaq0CSqgKE2cMoVAQKiIYJKGNXDgSQ5oAKIR/LOdV21J1shJSEZjr3wulamspI3VIpzGMCvVsTkkaXx+gKiqljqASdW1yLBuWvBHRI2O9Xr1JhVTSRBWeLhoyS8oUQCqSSiZdjzMiVH1NIYSK/JAntsT1LbAkqhGqN8kEJN5mKdqkGgAAjBAFxQGgmQZovJ2zTBPZpgxGRkcxpWeqkq+l06nzzjt/9eG+Pvzg374v3nDjtTSfr2LVqrOwaNECcCnVVjpupk8i6zdk26BApVBBc0szHn3s0W0bX9t42LRsFAslmKaO4eNDaG5pByBRq9UUdZvSeHNvolKrIplKQzMYNM0GjwlfpXIJPApgJCzYCTs1d+6cWVOmTV88b868Ja2tLUtOO33FqXPnzOuaOqUT2XQSrutjYGC73LZjk1x15rl04dzF2u7dO5Cwkzh78WpcecWVkEIiOSeBF599CTuHh6BbDKefsRxOrYajR4cwtWc6vvLF89DS0gJqMFjpJJoyGWj/zQEgHvvEr0k9hw5xI0TjV4/+V3+uvsWXQg0UKCOIZIRyqYyEnQQjGjSdwQ8DODUX6WwahFIUS2UQESGVNOG5PhhjyKYUKGdwaAylUhmcY/fLL73yQjE/uocAlZrjDI0MDe+p1MrHIi7k9BkzUKtWkUgmYNtJRD6HrusQkiPkHF3dXdi/Z//Wl1585cANb75+UWdXizr01oc5cdPLIeK0CDVUqv/79tY2NGUzeN3rrj5t/bpXrvjt739zINfUBsEj1d0LpmLGohAi3g4mNQbP99WGM4ig2xqkkEik05AQ0HQNvuuj5DrNV7zuyrcfOnDwnN3bd+Hjn/oouJTIpVvQ2dqB3uk9MHRTNbsxGVOLG9RisYIpU7oxOHj86Mc+9tGvH+o7sO+ss86CW3Og6wYq1TLGxyeO2rYFrV3J6ylhYIzAcR04joemXDMSKRux5qIh3QSAc849Z8m0qVOm7t69t5jJZFUkTwwSIozA910EYQAr0YPmXAu4iFCpVFBzHUACtUq5QbZVdyQKSoGkaSMSIWRMe6ZEXVWmlWjkHQ4OHsXcZfMvve66a8/+3vd/gFfXv4Y7//R7bNu8A/niKGbNmIXlS5c1HquhGahUXXi+j1kzenDwYD/K+SKeff75Z31fPHvq0tPl3oN7kW3KoFoqQ0oBN3BRKdeQTKUQhB48T11/BAQ8VHAxBc6TkIigLHhqSMY0DRQMURTG5Ow4zzgellBCYweKaiLDkIP7PighCEMJQlR+L2MMdtJCzXGQL+ZBoMjdtm2jWqvA9TykUykIpLF+42vPv7j2xbtfd8VVH+vMdeiGpaO9swlvuPZ6bH5tM6ZOn4KOjk5ISFz+uitx1sqV8OL3xeJFi5BrbkLNrUEnGlpaWsGFxNXXX3XJ6vNXv+WFZ5/7YS7brHLqBUcgQggQcD/4P/7DPIqiEMCLuabmVwaHB//c3NJ01erVq1fPmDlzwZzZszMn7kFKoSGEgFtzYRkWNF0D52q4Wh+21nOwS1X18zidTEJjgB8F4ILDkDbfsn3n8J7dOw9Jju133nHPC4f6DrzQ339wYvJoNVn/X61yuSgB+ACGJ5+NyZqsv6OGFyAQde1lI75IqAk9kWCUoZQvQlAJ07ZgmBYkCFzPh23bXacvP+3MMAhx2WWXIdekfqYGgYd8Pg+DGUgldRwfGsSRw8fw5JPP4NTTTsXy0yYgZYCDBw/uq7nVLUzTlFyXMli2jYRN4TqO8gl5jiK5hj4IYSARbcCcgAiEUBia3jiYE0riibWMPbkqP1NICR4pYBDBCWRyY9NbpxzXN8GIMT1102W9YaXqcw2YVHyoVod/9TVPeG8BSYmKjDipQ+SRgIz/vIB6nuuZs3UJtBLE1vN3hcrfjZthjSqwSiQi6ExXcm2i8olpvEXhgiOKOCzLhlOroSoqsCwboQiRTCRQLBUwPDSCOXNnzZ09Y9bidC6Dy696HXG8CAuXLkBXZweEhIqHklTlFTKmpNaN70/J210vaDTCDz700KtCylpTczMKxTwYYSiXy9BMJVfUdQMWY3B9F6ZpwbQs1DwHqXQavuehWCghCFzops5yTU29CxbMnztv/pwVZ5+1etXZq89etG3rtq5ZM2ZZre1tKFcqqFVLGDwuoWmaHDg6QAxLIz29PeTo0X6ctepM9PZ0QNN1eL6P5559BocOHkY+n4fjOSgWizj/4gtw9rnnYWpPDyABzdD+u28UBXKTCiylzoQQiD3jYPH2LyZ41ze58bNSl8JHodqancgY5pBQGXiVWhmmaakhiWDYd3A/ho8P47TTTodlWuBcoqu7GzU3iJswB8NjHPv37h3es3vvjr17965Z/9q6NQcOHNgahcF4FIakqalFOk4FQRCCMg0jw0PIZtOoVMrQCYMbuRAaBaMafN+HrumoOd7xPfv3rAewiEsJISLVhJETNgc/DFEoFNHV3qqo6HFRwjBt6gx4fo1ccP6Fb7333vse9XznUDqVQblWhkENUDAQyaAzBoDCqdYQRiqnNZXNghDApkkwqkPTNNTcKlzPbXrTW9/6gVUrz7rltfXr2n3Xx4zp02HaNkqlMlqaO8FDE4RRBcliBCx+7l0/wJQp3XjumRcPf+d73/6XQnHi8flz52F8bALJZAKWYQKSID+ePwoAYRiCc64yW30HxwYH0NbSraBL8VVPIFXuKiEIA4Fyudrd1t6+yDjYt920DIAQeK6LqqwgkUiguakVjuvArdUQMA2WbUBKxFAfgoioJlDTDYQI4PsekokUpJBwai6SiQRYHOlDGUUU+UgkksgX8iCaNut9t956g6nb9Lnnn8ZlF12Jnbv24bXNG9Da1I49/iFMmzEdXqgI0rl0Dlu3bsJTTzyNT332U2hqyuHAnr37v/Xtf/uR6zpbbdNAIpEAESeAdjxSJHDDMBQojjEwojy4QnCQiDbsG4pKymLAHhRXIKbX17Nrtfg+wqMohvBRteHWdaXW4XUlDIVG9XgbHMF3BTRqxGoWiYiHKJUDWJYFz/NQc9wYZqX7zz334l8uu/Tyi3s7u04jlODFl1/G9W94A7Zun8CRY8eRbWrGxNgoenp6sXXbdvzsJz/Cl/7lS1i46BR0tXfiwL6D0ImGTFMKpWIV2VxK++a3vvlPl15y8a7iRP655uYWWFQlGwR+oIYSfydVLOQ54mzCGdNn9jY3NZ96+RVXrL78istXJBLJOT1d3e2d3e0GYwx68kQySZ0C78eZwqZpwvM8DA+PorerB1EkQTVZuOOOuzbededda5tyTf3VijP4wgvP7S2XCwPvfe/NkyeqyZqsyZqsyfr7bHh1XY+bTYKIhxAyQiKVgOd68FwPmWQSmq0jkhw9vd0YHhqD6/lwXQc9XV1zdY3O4WGAObNnYGJiDC1tzShOFLBx40acvfpsUMZgGCZ279yHUrmEXCYHU2eIIoF9+/evGzhytD+dTaNQLMUgIh1gqulU3iAdCdtAEAWI/ACEx3vPGGojpYSM/a6UkthPKGN7qTpM8ViCx2I5nxRCSftiCbRG1cGTR1H89QBN0+NMwXrLEq8zmepF1YFVjyXSil9A69m5jMV5vVzRi2l9R1uXSPMGjbkuE+VCycUIFPlZQlGdJZEN0jKXvOHpJZQqcmokEPAQtm3HMm71V0VhpHy6RMK2rcZGxPU95HJZREEESYFZ82Yva+tsay2Vy7jhxjeRcqmIcqmCpqYmJWdnKiqFshPbGKX6lvA8D5AExUIJuaY0JKQ8cGj/q5RpkASqkQoCMIOBEvV4LcsEEVDbLUKQn8jD9Wqolkqws9nU3AXzlk7vnXr6slOWnXHmqpVzDIP2uLWgkxkmO7D/gBCCyyjyZeB6ZOb06QiDAJs2bgYEIS2tzejp7cHVV1+DsdFhPPTQo1iwdAEGBgewa/duuNUqujo7sezUpTj3vHPR3NTcAAadWFejQZEl9c296mPBYoMuIRRgElSqPyuk2qrXQWf1QUipUkKxVETKsqGbCvDEbBuCk5OkgQQRB3jAMTo6gtGRMZkwUzh48CA5/fRTEXoeJkbHnXXr1h549LEn+2bOmDlOdVbYvn1nvlIuH+vr27/z2MCxfYQQjwIwkhbS6TSSdlLWHEdlbBo6ytUqmptbUalWYNtJUF0DYxSe66KltRW2aSKMIlhJCxs2bXiuUKq8uSmbThBCG37y+pgjYZrwLQvVWhXJRFqRsgH0TO1COpvBhvXrkc1mTvv4pz/1ge9+9/v/HAnhJpNJQACe64IZKqpIBiGIkDBNG4TSOKPWheAcpqkj4gS1aiX15re87dZVZ6x87xMPP9Ld1tKG7//gO2hta8FEoYie7k5EkKC6UjHU35sgBDwSsC0Do2Oj41/88pe+8srLL/529qxZsqu7C0NDQ8hPTMAwNKSzGezfv79v4OgAcs3N8L0A2aY00qkE9u7vA5lvoL29FZrP4sclsHv3bqTSacyeNRtdnZ2GzvRzTNt4iIDUCIBkKgXDMFCr1tDV3QVSAsqlEtyag2IhgmUn0NbWjrGxMZiGDSEjBKGPIAhAiZIN8yiAqTMkEjY8xwMhgG5pYITBq7koFvKJCy666F1vfeObzjjc348bbngjbrj2Rvzp7jsxb+kC9HZMwczpUxFxwPMDuEGIpAhwuG8fsjkbpdIENGYHv/vTn+8az4881tnWLqpVD7quoebV1D1TY2BMB2MUo2NjMAwdCSsB3/OhGRokRHyv0RtvIMaYGhpGEQTn6r1P1O+VUsZQNg4QAkZYwxsdhKGi9BMGSjVoRtwYeyEgCALOYdsGeJwokE6nUSgVEEYROjo7USzmUXNraGppwYGDBzb+8Ac/uMu/5ea5CxYsSBcKVTzx6JO46JKL8MLLz4NBorW1A9VyBStWrMQLi1/Cs889hxnT5kASHQIE1WoZQAcIFARqxamnzfvVr3//6X+49dajlWLpoGGaICBIJ1PwXO/v8gf84f6+YwCOabrx6F133dVcKBTbZ8+cPf89t9587tw5885qaW9ry7ak0HfwsG9bqSiTTPDdO3d7VCNBKtPkrlu/bmJo5PgQI+T4nt17RzLZzOj2LdsPHD7UdziSgZw8Qk3WZE3WZE3Wf5INr4rsMeI4GBAFIWJEU15TEGSbsvC9AMPHRlAql2AlTHgBMGfe3NmJdKp50SmLkUwk0SLaEUUciXQG55x/Hgyq4djRAYAAy1csx3vYzbjqmqshI4mBIwO1p595ek17W3uNEgKRVNAlx3FO5NvEvCjJJXTKEHABAgldMwGhDkpSCgjBlc9WUEDyGOREQRhpyJvr1lopY04KV7+oN8Ei9hcCde+SrK/xGgRlSUScTRv/RygPm8QJ4JSUBETEHZSsE6RjSXOcA9oQB8eN44lWoi53jeXLLM77FUpGKmKiax1YRUFUTipRmylFNxbgkYqUklI2ZMM84so36SgYTaVYQei7WLh46ektLa147vnnIAEkTBtHDx1FZ3sHUpkkKNEb8s0G16v+fAi1tc6kMrDtBLbt3L7t2LHjuw3TQLlQBEBg2SZ4qDY7OmNgYBjLj8HzfISBTzPZdMv06fMWnnXW2StXnXX2+T09U1bOnDa1ee/+3TBMA45Tk9NmzIJGDIAJOnXqFDBCUa1UUCpMgFCCZCqJuQvmw9Q1PPP00zg+MIDjQ8fR1NKEpqZmtLa3Y9VZq9Gcbfpv/LdCiPg1lMqzCBnL+uoLPQLC6v9Hyfxk7GUWjW08QcTVIdxxauo9YCURBiEs04ZpJmEnLEQRx8RYHrquIZFOIz+aR61axcR4HprGMHR8tLz/4P4hQzcnDh3sK+7csbM0nh87unPHro179u7ZPjY6OmAapispEPhqyGLbNqZM6UGxVEY6mYIQQLFcRHNTM8qVMizTgm5YYNTD+OgYODiacjkU8nlAEjQ1tSIKI4RUQ75YRDKZxvq16597/tlnXrz++uuukJLGkVgnrk9CCJqbcgiDEHXZPRcSFEAmm0RzSzOGR4e1s89ZdeMvf/HzlwePHb2/tb0DEY/gRz5IpAZI6WwGka+iiITkUHw4is7uTpSrFRQnRpKvu+rqG89YsfKtr23Y1HPTe2/GFZdehlQmCT8M0NyUVQMgoQYMnus04Ds8kmAaRc2p4ku33fbnwWMDf5zSO1WOjIyhUCghYdnQDR1tbR1wvQhHjhw5Nj6eH4dkrdmmdOMeNG3GFPhRGfnCEFw/g56eHjDC0NrWDsuyAAC9U3rx3e9/9w0f/+jHtj7+xOM/b25ug52wEQQhJAjGRoYRxsM7K2PDDzyQGDQHETu9KUUUhjBNE4auoogkJZg6fTpkEMFzJ2CaBiIuFLiMarjqqquv+/znP3/T2Ni49utf/wbvePc7cXxkCJdddDGSuQzueeABvGf6uwAAaTuBXDqNv9z/IPbtPYxPfOpjePrRp/Haxs27tmze9JTBtCiSHIZpIPB8gACapiESAqZlgRICXdNBBODUHHDJkbASCIRUw5v41mCa1knEX1nXC4GQ+jSJgHNlE6FMi4GBXEH3KYVGNUCof+cHSjli6FZM7Vb3OUoIoijE2NgYLMuGpmkoFUswDAPVWhW6zgCAb9y86aE33vjGS19bv/His1etwPr16/Ch938Q8+bPw7krV6O1qx27du7Alq3bcPN7bsEPv/M9fPdb38FV11+H9q4O5NIZuI6LWs2FJQWkBlx79VWX/GnV2Tff/8B9/5JIJGte4DWGon/PFYWBADAef+wmhPwlkUrnurs6c8zS6OCxQd+AEZmGJitVJ9B0nXMRhTyK/JiWO1mTNVmTNVmT9Z+34SWMgFGCKAqgMR22lYDvBTAsE0xT/tJaVU37DdOAZScQxETl008/fa5l2Xj6yaewbMkSNLe3wEwk4dVcZNNZUFCM5ceRSWfQf/QgqtUiojCA53jYf3B/vlSs9Huug0q1AiMGZek6A6EEYcQhhZJWuzUXhqk1tpxCRIiiGBgVb0HJSdm0JG5UQGSDdIuYLI2GnFltY7kQqvmFhMEYuBSqeebKY0YYAyRXkA9Klbc29upGMmrk+Io6mAVqa1yXf9YPeScOfKrBVTLmvyY6N5pgEpNDZNxkCgFxUqNNZHz4JBShCAEJMENTj5OrKAqNKT9gwkzEHlwFQDJNA+VSBQRAJtfctHzpKQtdP8REoQjX8zFrxky0trYgjCIEUQiNaRCRUGGmUvlV60AgNSShKBUq2LN3D77z7e+uLRXLw7PmzsTE6AQo1RBGHsIggO95qFTKEEKirbNr2nvfduO5Ten0qlkzZy+ZOrVnaq4p17Rv76GU79YIJQwtLW0ykUyS9rYO4no+2tuaoWkaHNeDnjDQ2tmKUqEAjSmP5+4du9DZ3QnP99DS3o5ps+dg2pReBQ4DGl7aur+TxNFVUgBUo+o1qfe4J71BSGO/LxufUcMNicD3MTQ0DEZ1WJaFjo42JT3VdeV9N2zohoEwDFEYzaNQLKKrpwuSSBw+2I/D/UfgONWa7wfHS4X8+vvuv/+5waFj2zzPHXUdz/MD36861SoBlVEUoaW5WckMAw+GocMyEwgjH47nQdd1lKsVmLqFTDKD0dFxRCFHlVcR8CCGT0k0NWXBwwi6riGKJPzAQxSEEJGKB5JCYKKQH/r5z3521zmrzz63rb09CQBR7Nul5MSzwxiDjBt/2rBEEMyePROvvPKSWHLqku4//ul3n3jzDW8aGBkdeS2dycE2LRBCwCWH77jQmYFkJgEecUQ8RCKZxLFjx2DopP3Gt7zp7dOnz7ph/4H9c8895xxyyUUXI5VJKogZMxrudkbVe8d1fBimAdMCmKYe5+7du9c/+fhTv3ZcNzRNA7quwbItSEnQ2tIOL/BQrVUgRDRw7NjA/pbW1lYIoFwqo6W5Gfv37sZf7rsf3/j6v6CrqxeCC0gQ9Pb0YHR0HMViEblcDrl0tv0TH/v4J049dfnwn++88yHDMFEtVyFFhCACMpkMak5N3XQ1A0HgY2J8AprGEEYBAs8HZbGqxDAhEcIwDYxP5IFIQNMZmKYhcH10drXhcF9fy8WXXPaGM85Y0fsv//JllIslNDflQJmCc0URx2UXXwLP86HrGo4eOYbWtha0d7QjX8jjycefRO+Unmj48ZG1ZkLfl85mEPihoifXh4hSIJXMwKnVEPEAjJ4UCweJ0A8b74ooiuJ7s4jBRzEgi6uhpEoCiAeKUV3dIhskfCEBwSNolKrhnqjDBzVEoYpc1HQNQig/OKO6ikJy3ThCRweXFFYiAUggm84gnx/b9/jDjz9y7bVXn/qeW97XMnfeXMyZOxu7dm3HW97yVixasgSf/9IXMNf1wP0Avb1T8etf/RrMNHHxJZdiWBuCZduYP38OHMcFBUEYCvKhD3/ozYcOHXp51949jycTNgI/gK5r/6l+8Es1jSjEH5M1WZM1WZM1Wf93N7wiUvJdSqn6J6HKp0jU9ioIfZSGKzBNQ8XrUKZkgxGali0+ZQGlFBWnIr3AJ4MDx9HW2QERSpCUhGFrqJRriDyBzRs345xzVqEl2wTHCjFv/vxKR0db+cCBg0il0uBhiCBUm4XAU5mMEoCuaZBUHbR1nUCGAUIexXRkBaA6KTdIgTYYVfJfLk5Ih4G4MeUnfLlCQhIBQpScMhJR7ANGQwpN6lFAiKWuRH09RmhD8kcZU1nBUsaNbZ08KkHqYKsY7nOys1NI2YBTSUJO7HqlPGnjKyEIYvmf8hiLON6IQVGlmaYDsceU0Dj7UnBoRANA1UHSMEApRcLWwEUFVDJkmrPtS5YunGKbOpafuhxbNm2GqWuYM3sOwogjDEMYmo4IEiLiKoIijiHSDR1MU1RvK5lEJptDOpUe6Gxtkb7jARQYGR5GxH0k0gnr9OWnzZ4xbeYSXaMLZs2ZfeppK1cua2puao/CQDd1ne7cuRvz5i1ET3cvPNfFnDlzCQhgmRZAANMyoMVb6+HjxxFGantarZSRzmSwcMpUZJuyWLpk8UmnOoBLofzZlEKK+gCExA2bBhFv8imJZcZU0YOlkHB9D5TG+ZKEoFKuolQqKCKpZiKRsFHOF5FraoZpGqg5NURhCMM04TouSsUSUukUTNPA8aFBzJg1E6VS1d+xc9fRta+s7eMQB/bs2bV9957dm472H9llWoavBghl2LYNy7bQkexCyEOEfoBsNgNCKDRDRz6fRzKZgFMTyJeKmNo7DROFcSRTNnRNgzNeg51IxG18A7uGUqmE0A/AKEPCTqNSqYBSlaXqOB50nYFSYO2r6x7bvmP7M8uXrXh9JCJkm9MIwhCarsNxHCTsJAxdbxDFSXz9SgAhFzj99BU08iOcf+75q+65/97vX/f66z46MTGxvinTgs7ebniui3KpDAgO3/cQeBHK1QIAkJmz5p1/5sqz3rloyaKLqUk7rrj8Cn3lacsBwRThO5EApAJmCSnBoN6L6UwWmkFRLdfAKcerG9bt+/D7P/r1fD6/rb2zQ71HrDBuloBkMoGBgXFIEaFUzOdffWXt1pmzZp5lGyZMWykBqhUHzz33Al5esxannnI6pCTgMgJjKme0Ui4hl8thzcuvRlWv2jl3wcKLKSWPgkguhUAiYaPmuIgEBwjghz6EVJFhnuupQaJhQdN1cM7BiAbf88FFBI0AjCoFQTaZUbR2SIRBiO7uqRdectHF5z107yPgIRdf+NxnKZMEE4UCHl/zOLq6OnHeBeeDBxxUEpg6w8DRI3jq6eeQTWex9pVXvQsvvWjdls2b7t61Z+dYc2tr/P4QMAwNJH6OLMsC5xHCqg8wiXRWbT3DMITrOtA0HaZtKhI+R9woy4acpnFdCAlJSXw9ChBJ1esRqyTqg8qIc2i6Bg0aokhZbUic/RqGoYJeSQlKJZiuQ0QRwFS8WuQJtLQ2w9A0MJ0ilcjgmWcef/SKKy699Kprrrl8/eb19MWXnsfo8RG4VQ8H9x/G3Hnz8aa3vBGFkQraO6dg1vzZuPe+e7F46SI05XI4ePAAkraJKdOm4MCBfrS3t2LB/EUzujp6X7dtx7aXiLRq6h6sTZ4mJmuyJmuyJmuy/k6LSSFjIqkGLjhq1Vp8gBGoVmrIZnNIZ9KwTBNMowjDEEQChmYuuubq625JZxJtHCH6+48R26BwqzXMnD23sUnUdQ2apePpZ57GfXc/gFPPOAWz5szA3XffveXPf/zz71LptGtZJkqVKlpaWlTjGXtnwzBQfSk4opCjzgWq+yjrfWv9UIUYWoWYmktQ92HWF60xeIrUNwz1HSuNf4844cOMaceMaY1tA6EnAaxkfWOomiNCAEo1BXgitLElrB/Y1EY59hjHER1//c+TV8Lx4zopWokSAsYYLMsGY0yBiDQKy7YVzCqMGptnwUXDpywIYJkJ8ChCoViAaRkIwwBO1cHMWdNXfuhDH7z1T7//A+3u6iIzZkwHJEc226Ro0roeb7BJg/Rcl4vXBxKCR6hWK+hoa8PTTz3z6jNPPfFyoVgQZsqefuaZZ5x91TXXXnfGihU3v/eWWz505ZWvu6mnp/fCpcuWzSuWK9nZs2drU3unkWNHBpFKZzFtxgy0NDUjl8vBTJpI2DZMQwczGPqP9mN4ZATj4xOqORAcHV2d6O7qRldXJxJJW10rsbxdijh39SR5spQSVKPxawJwHsWxTgQT+Qkk7URj6y5BMDE+ETd3ytOeL+Th+x6qVQfJdAqmZcKybNRqLkZGj6NWqyGVyoJKAqfmQTKJgwf3y9179pcefvDRvgOHDjz6mU996hvf/e53vjVRmPjlmjVrHt648dXNiURyyLQsTggD09XhXzdNCCFgGSZKxZJ6b9YcDI+MoFatQQIoF4vwgwCmacL3AgjO4bouCqWiihkhQBSFcFwftmXBskylFBCKVi648mFnshm4rgtKVYyUgAAlcF59dV1lydIl50+fPj1NibI+RAFHza3BthMNOwBi/zJI7GOXElEUYmK8KJ0wIKefeuqUK6+88py9e/aGe/bt7g/8wHUqNQSBjyDwUa6U4Qde4qyVq887+7xzP/mmt779o60tXeff8Kbrs1dcfgmbOW0afC+E7/uwknZMxo59+/FrBRDlsSZAEHHcffd9u7/+tW98cf+e/ffnMmkUS3kUC1XYlo3mliYYpoGx8TG4ngPLspHPF3Dq6ad1ve3t77hm+7atqLkqP7qjvQugBFu3bodpmFiydDEIA1w3QEtzE1zXgRDA8tNPobt37qHPPvv0yOjI2FP58QlXSMCybUAAtmXB8z2kkknomoZyQWX9Eqoo+bphgIeBGsxwgeaWZliGysKmjMA0TEghVYQQD5f97re/+4rw+dx77rkb2XSWLFu2CKVSCfv378Om1zZh9tw56J3aDUhA1zVkshkcPtyHhx9+BI898thowrBffOLRJ360Y8+Op9s6O9CYsxECO2kilUqCRxyVcgUa1aAbBoIghBAcnu/A0HVoTEXxCCEASuLtrqLNE0pAhLq3UUqVJLmeVUuootzX35P1KDgpGoMoQmLps1QAvrqigBKq8sXrFGGqVAk8DGPVC0OlrBRDVKNwPC9/6GAf+8q/fPnM9a+uTfcf7IdhmGhua0FXbxv+cu8DOHjwIPL5Iq694WoUCmN4+sknsWHNOsyeNRfnX3gB8sUCxscn0DN1Kqo1F80tLUjYJnn5pTXPFkvlCUA1vJ/5zKcnTxSTNVmTNVmTNVl/jxteAnU4lRLQdR2WaalNjsaQTiYRhCHSto2EbaJYKkASwPc9nHba6fM6OzqnrX1pHVadv5J0dRjQNSCbTse0WqBcK4IyDbV8GStWrsSqs1aj/9BR2FYKu3ft2haEXt5zXbg1B6ZhoFpzUC2V4jxcCsMwQSiFyqwnIEJrgKgIUxs5tXSNychUndq4UFJcAOCcx00jGrJiBRlSmykpFZ0yElEsPa53nQKgShaMmJSs0ovUxkWAx7RdAhmTSWUctyHj30MpjRsrccLnJclJG9/6djeWWtedkvFhXnlLRSO6iEuBEH7cXCjIGAli6nPs10W8wUwkEzA0E47jg5sGAIFsNgXf99Ha0oqqWcGppy47c+/O3YZpanxkZJiJYeDiCy9WERWRkmVHQiiabJy1qul1WaIiR3s8wvDQEDwnwI4du8+69Oorbnvv+94ztam1bUk5X+leNG9B9snHH9OGh0dpe0cnps+aCc3Q0TNjCg4fOgw2Q8PsBXPQ2twC0zIUzTXkIFKi6lRRq6mGMwo4TNNCri2DttbWxgUsYh+kkBKCKB8oI2pLWx8g1HNv6/7piKuDfLlYREtbGygxUS4VkU1nFB1Yp2CSIGEnMD4+ijAIMDI6DI3p6Orqxf6DB1AqlmHqBlK5NIJIIOQBvDCQA8eO17Zt3TK0bfv2fLFYdPft2XW4u7Pn4Pj42K4f/3jtM17k1hjT0Xf4EJimIZFIY2JiQm2IRH3bTOE4NXAuUSyV4+tLDVwMzQDVmMrCNeIGnwsUyxOgGgMlDNlMFnbChlOtwY+38ZyHoCFBFEVIptOwDRsT4+MgjEA3NfAwRBiEkJBIJzMIPA87dmx/fPuObXecvfqsj/MYLgUhkMl2n3juY8I5iedAAkAyYWPu3LmYOW0mOTp4FFu3b8es2TPnPfrEY9/71W9/88a/3Hvf89lE6tDWbdtLs+bO0sqlavcpS5adecOb3nT5vCULu3TNgKVR5HJZ5W+VHLZlIJmyIQhA4/cxIQSI6cnKHz0BTSPYtWfP4R9874efP3Bg//3JtI2aU4Pn+khn0pBUouY6oBIIA9XsDw+NoKO1A1s2bdz00ksvHJ09c/bUluYWHDx0AM8/9zTecsObMXB8CC++sgbTpk3DyjNXQtMFwjCCbSRw6OAhLFm6GBedf4He2dm5bPeuPafuHtv5TC6Xg+PUQMHgOg40jaJYLMI0DBiWCapRRDxCrVYfIOgI/ACZbAaWZWN0aBiWacOwdTi+G2fGVlM33njLP5595plnffvb38Ut73sPWppbMTg0it279+CyK67A2Weeg2xTFmHIoesM997/AJpb2rBjyyY89sijR085ZekLpmk+0dfX93IynUKxXIKpGaBQ9hbP8VAulqBpGiAlqtUqdFtTPxs8T1kpouikGDaASfVa1JXthJyId2OMgVKKiPN4OEgbNgFSj4MjBHoMu4siFYunZPfqeyCEgEd1or6GMAxgmRosy0CxWGr87OIhRxhx1LwawtBHS0sL+voPPXL7j39y2vXXvfE91VItmWvO4ujAIMoVB5QD/Yf6EQYRtD9RXHrZVTiw5yD+cu99+OOf/4A58+fDtiw89eKz+PBHPozB0iC6O1sxf8H8VsM0u1vamvYFQYBqpTJ5mpisyZqsyZqsyfp7bXiT6QxCHqoelapmwNANME1tBUI/BJECTq0Kx3UQRiFCHrKOts55s2bPSHb2tqCjtwtJPa0aMEZANYqaVwEHUK3WcGzwOMZGC7jqqiswdHwQXAi4vr8PgAJjxcrkSqUSg0yEym2E2gqQeLup5HJogJtk7Ber+3ElVbFBREU6qm0wOUHOVc0kQASJsx/Vk6C2lyzO2a33nQRccCUdjuMaBOcAPeERlvW4oXjDLOIoIQoJIQEax9RIKUAYAyMqNiVutWMJc339fKI5o4QgBgCDi5jITBk4V4c5QG1FKGWIQhXtofyUyp9KQWK4jYcgDCBhw/MVAEZIiSgSsK1E+6qVq5bkmpqQyWbplClTkUykoRk6wqhOkVYNLxPxNj0eFlACEKoOq1EYIZPIwNANfP0bX72oZ0rvRaah4YWXXsDcmfMhAoG21g65cNFilCoVLJw/E6ACyUQKKTONVMZukJKlkCiVyzg+OoyOtnYYmo50KgXbsrFw/gIEgscePx77iRmkrMvvJXSi0DlKmmuA6QRcSjCivhdJgEN9fchls8jlmpHOpHHo0EEErmoKX3rxRbS0tSKZSMKpeGAGAxcRhoeGUSjmkcvlsGPHDsyaMwulYhV7Dh3Iv/LyK3tee23jzv6+/sOmZVYyyVRlw4bXCvPmzzJmz55Ny+XyQdd1hziPCulcKrCjBFzPB2VAFPowdRNcCvAwgIg4dN0EMwwwEcE0dIShIt0yxsDBoTMdpmnBCxxQUAhBkMtmYVkJeJ4L0zLBOUfgB0qm7PpIJRNwag4830c2l0UYhCjk89ANHUSj4BwA02BoGkYnxqFrDLl0Bp2dPeLfvvlvv1t15plXnLHqzIWu4yBh2XFep4yp4DK2EsTSU9WigosIuqWjpb0Vx7YMY8PaTXLGjKnW+25578XnrFp9cVdbtyhXSlGuqYnqpk4PHzxEh4ZH0N6UhWkqGFQUckRRCM1gYIYeZ2/HlgEp1HaXKDl6pVZGwH0EofS+etvX/m3Hju33L19+CgaPDcCXAZihK7CV46FULGHO3LnqeecqT5Uw4PDhI/u2btv2zAXnn38zACxeshgjQyPQLRNvf9ubcPRIP/58zx1YeeZKGJoOp1YDpRq6u7owNjaGnt5ujJcmZnR2tH/44gsvcnfu3LmGC4lkKolatQrf8xVojgsEUQiECqxlaAYs04LnuUgkkyCUolKqQNctQFOvsUYIJibymLdg/hXf+9633vCn3/8J69e9imuvvxaz587A/fduQv+RfnR0tmN0bAIjw6Po6GzHjp3bccef/4gli5YGf7n3vjXt7W27fS/Y8NrWjc+GMiqJUMDSNERRCD+KYBmGojITTVkkGIWdtAAqISLFEiCxWqbOKWBUawCqKFMgPzVwUkwFLjhEfahHiAIIShlveWXcyAKM6fGmOYKUFELQWGliIPBcCA7ougEeRUDcdEfVQG2XiRpkEKIsLZrGIKUOx3ERBlHh17/77e3LV57RPXf+witffPm5hGklSKlURUd3J0AF5s6cjXK+gK1btmD/oQPonNKJLVu24TOf+RRWrjoTgR/hti99GavOOgNHBvpx/333613d3TP7+g69UCnXpBSTXKfJmqzJmqzJmqy/12JUU81GEASKdsqUJFcKxD5NDTwKUa1UYVomJOcwdKv5ff/wD+9dvXr1/GTSgmFZGB4ehu/7SNgJcETY33cAs6bPwtEjR/DNb34T99/3IK57w3VYvXoV+g4eLf/pT3/66fDQYL+VtOODLQejyjNGGBCGPJYWSxim2aDiMsoUZpnLWGYcx5HQuo9XNmjMUqqcVHmim1TNpFSNKj0JZqWa2pPyc+MNBI3jUuoQLOXjBVjs+0XdR8virSJwgvBch1LFTTqNZX8NnmccL1Rv2Ov/TvmI6/43EkN51CaaMDQykzWmNzbOuqmyPYXggBTQqIIaMUbVICMMYOgGEqkk/DAgoyMj86+9+vW3ZLKZ9kOHD5PVZ5+N9s4O1TzHsnDP92AwLfY4x/FKRD1S1QAL6JqBTC6DRMJCT2830qkUxkYnMDIyJs9dvZoYlompU6eSltZW9PZ2IZmyYZgGCCWwbAMhD1GsFNUggRBEYYREwkQ2k4NhWjB1XUllCYHn+eq5plR1r0Ash1Svk+N6WL9uPYrFIrq7uxrDhno2seM6KJfLiuIrOGzbxsj4OEQUQnCBzrYO6JqO8YkJcBFh1649AAVmz56F3p6pME0bYyNjhb/c99ALv/7tb373m1/98pfPP//iHw4fOnx/MV98xalVdx3qO7h//rz5h4YHj+/auXPn3tHRsaH+/v7a2MQEz2WysEwbYRQoD6qAatY1giDwYRomGDNQrpYhIcEIRTqdUVm3REHTNKar7FNoME0Luq6jWC2BMZVzbFk2giiA57oIQr+xiYdU13gYBvA8P75eJXRdh+PUIIWi/woeIQwCeK6Hnt5euK43WimV7BWnnXJuW2ubRimFgEDEFTyIxo1ufYOuLmGCiEeQksMwTbS3d6C3vYvcd/+9KBSLmDNzHhJJm2g6Y77n06ZchrS0NcN1XDz20GNoampCc0sTIAmYrvJ6SQymqvs56++pKOAolcsYn5hAKpXC7bf/4vbf//53387lcmEYhXBqDnp7ukAAVKsODN0AAUUyncS0qb2o1VyAELUJN7Xo+PGhciaTXT5nzuyONWvWoau7B+l0Gvv3HcIZZ67EU08+Bs/zsWTxYnChBkClUgGHDvehta0DPb3deOtb3zL3+jdcf9a99927/8ixo32JVBJuzQGPVHwPFwK5XBaAAJcSpmXC95UnVjcMWFYCQRggm8uo69px4HoefBHO/Ma3/vXzZ61ctbRcLiKRTGBsbAwLl8xDtVJDyjbRM3UaKKOQkYCdtPDos0+gs73Hu/vOO361bce2Z88+5/xaKpHatnPnjn2mZcC2baSSadiWgdD3UXN9tLe2Ke+u4DANA0IKCC4QhGFj+If6PSC+zwqhCPKMshO2AgkwyhoKlTqVvj4gadyH4/t43fvLKAWEAptRxpRFgwvFDJASRrzNVfd3CsM04PseuBBxFJuS30uhlDW2nYDjOuPPP/388SuuvGK2bpuzUqk05syehXx+Ap0dHTjU3w+n6qC1pQ1CSGzatAmaroFpFIcOHMHChYsxa+4s7Nu3D7/6+S+hUyouv+SyQ888/cxW33ddRhk+/4XPT54oJmuyJmuyJmuy/h43vFEUglINuq6BUQ0a1eH7rsrDhUCpVAUFhWnYIJBI2hZ0LTF9wfzFi3VNw7PPvYJEJou5s+fCtBiSCQs1t4KZU6dDZxp27tqFvv5+XPX6S8EjgQcfeAScY//eAwf3t7R3IJPOYHRkBEHggzICGfjwAw+MagChqhmJBJimgRDeICArnyFr0D7jgNs4roc2gFZSqm0kpIxJxyetU086QPMoJjGDqsNXPYuVUUVxlurwRGMfmYiBLICMD3hxA17P4lVrELWFpIpUGoai0RAg3pDUPcGUMeiMIeIROK/vaYnaFscgGEpZ3OepRs4PAhiGAUM3FGCLSCVHDiPougEhBFpaW+CHHoIgRLYpB9dxkbRNbc6K0xedd/6500fHx9Hb24MXXnoRy089HV2dnUomDiUXV367Ez7oxrY8XpmSWEYuZV3JTjC1dwoy6QwpVcrI5jIAkn8F4zoZh1yqlOFHAVKpNBihyGYzjXFDffwghYBAhFTCbkC7ZDzYoAC4kGCQiMIAEgJtbW0KXFYfWwjl7bZ0C3Nmz8HxoUHVWFsJzOydCTthYuPGTaiUR+Qpy04hHR09SGZszJ+3CPmJifEXX3hx1+bN23Zt3LTpteGhge3btu/aD4qqaRqku7uHEkCUimVZc8r+xMQEyuUKKpUSWtvbQZkOy06AahT5YhF6DIbzw0DFy4AgYZhgGkMkOTTJwQiDZZrQNIZqpQo7YcHULLiOAxAJw7QQeH7sceRgTEMoQoR+iCAMQAiUt1RKmIap5MpRiCAMQQhgGiYEJILQR8gDhFEAnRqABBLpJHgUwnN9DI8MQdc0PPDQQ3eff+F5Z99w45uvq1RraGrOKoCYEAiFgKHpDdVCPQbM1E3U3BoYA1IJCz4N0NTejJGxcbihi45MC5LShuv60HQdOtFRrVbQ1N6EclBDvlRGczbTsADU1QlKdquGS2Nj4xChgCBAS0uL/NLnb7vzpz/5yXebmnK1VCqJSqUMyzZRKJbhOg50g4FpDOlMGrVKBXsKJbS1tcEzXARhgCCIsHnTlnUPP/zIt4ePj725XCmTF198YWB4ZPio6zkLbnnPrVcPDY6nP/uZf651tnckLrjwAuI7PpqyzQjCEOVSAbpGUSpVUS7n57/tXW99z69+/duN/X1HCobGoJs6NM2E4BFqbg2GZiIMIkiptqGtHe1qEBGq3PBCPg/TMpBIWBgZGcXyladfftXlV69+8eU1cDwHH/nYRxF6AZ564jFEETBl+iy4joOWlmawTAYbNm/Cvj19ONZ/bGzL1m2bp/ROH7N0K7V5x8Y+0zJBCEPNqaHm1CA4V8RsW0cylVb+dh6CQUOhUEAkFcHZ0E0QSsCDmFBPmYL8gQICiMIQHPG9ktCYDi9O3BdB6jDvxjCqrtghjYGlaoAZKKIgBKPKC8zDEAKAJAJB5AOSxER0Ao3pkESq933IYzk1kEml1VaYCxQr+TV33PmHn194wRXtXvX40kULFsCp1JDKpDB1Rhp+EOFg/yHMnjMDs2fPxaFDfQjCCLqm4a4774CgKnN42ZJlOHzgkPXU4081E0Y6TMuYiMLJDe9kTdZkTdZkTdbfbcPLmPJn8khAkhCpXBqazhBFytOnUw2O6yMSHJQJOI6LlSsXT+vpndrbf+gQsukseqZPR09PB4rlEgqlEpihI5lMoFIpY9bsmXjfP74PixfOx/HjRzB8bNipes6rbq0ymLRa4fsBGBhM3Wh4vCwjqbycPABhBEHkw9AM1eTEEl8CoXy1kjTIynGP2YgIajTAkijpaz22KIbsyHqTHPdglLE4AihSW9wYiKLOYRJUI9ANHaEfQfDYW4u4+eJq+8w0BbkSMfFZxRmRhvS6IetTnSIYpSoKSQhEMcWZMhY3eTz+3lRjzgVXX5+rEyNjKg6JBxFE7P80DAPJWOJaq1ZRLlWgmQymacNxXFiGCUjQSy++dFlHW0+y4jhYNmU5qrUa9HibGj8bSCcSJ7blcYPeAH79FWOLQDIA4sRz39ScVcqBKFT5tiQmVMs6SEy9FrlUFpqmNYYH9WaaAAiDQD0SSiEEEIYearUqMuk0dFMBcxR0TW2G0+kUzj33XAwNj+BQXz9mzpgORli8xZdw/QC60KBrBg4e6MMdd9yDRQvng1IGO5mAYVhix+5dlf6jRw8cGxrYuum1zev7+/o2rVu/7qAUogoAumairb0NIBKVSkn2HdzP1YZKg2EaSCZsWKYBKdIIvRCGYUKjDK7jgWk6akENhDJojMG2TQguEAUClGqwTBuEAHbCipf4iuwtOFcwNMpiqbtA1SmDaZqSJYNChgIaJXCcGkzDgmla8AMv9tz7CMMImqGBUJVlSuKttiRQXnlCEIYhHKcWD5uA8dERLDtlOcbHJga+8tVv/GjBwiVLTztt+axKqYJMNgUIirHCOFLJFOykHUPZTpKPEA2mYWJiooDR8TG85cY3QwJw3Bq8IICuGUjYVkO9cfZ554ABsZVAxMAiAcaIer9R9VrWYUpOrYqeKVNw4MBh9/nnn7njlTUvfrutvanPskyUK1WEXMAQEsVSQSlXGIFbKqlhExeIhITjOgiCCL7nI5mwkUzY3iMPP/DnNS+9+OIFF1+U2rZ9c35kZKxAGZ21ZfOGw7Nmz5jx9NOPD3zxS1+6eOasmaf19EyBU3UwdcpUTIxNID8+gfHCBIim4frr3rh4/76D3ceOHivUvelceDA0A5HPERFX5WZ7Pizbhq4xeK4PHnFoTIOmqSFEJp1FFAbT//mTH319KmElf/yd7+Oiiy7B8aER9HR3IfCB01aciukzZiCMggZM7JWXX0FhbAwbN6xJ2wmrY9HCxdWh40P9w6Mjo9lsBp4XxBt/DwBBb88UdHV3oVAsgVCBZEpdw7qmgwooO0vkgzIGQzPjYRJX5HOmtvCC8xgoRuJ/CgiphnH1AR+JFSqExH+mbk+pkw6IBK3bTYhqqAkBGNVB40Ekiwe0rucAvoRumGBUXcPKa64ikhzXg4yz3bu7u7B9+46HfdfPzZsz76ObN21bcPllr8Mf7/oDKtUqrrnyGqx5dS02rt+AK668En/68x04euQIdEqQy+Vg6BYq1TJqThmz5s229h48tCLXlF5aq5IBYcpJE+9kTdZkTdZkTdbfa8MbBBEMXQdlDJZpwwsc8IjDtEyEYYR0MoNICFAmQTSKqBQhncu1T5nea+3fuRWUSbS3NoNIQKcadMvAeL4AHgmIKEL/wFEwJrFnzwH4vgdDasGzzzy/x9A0cB6hWnYbcUKQypslIRWFmCq5m6BqcyCFACVa7P1ijbiLOLy2rjoGjxtFEKJyemXsqY2lrSoDN4arKF0xCCWgDOCQAAdoLM0DTvw5wSUCP1RxR3GDRqhq4oRQvjXCeQybAsCgaMFqLQEGCrA6CxoN6Avi5k/l5ZJG9BEhFDKGUKmcYR77jMUJqbVUXkpNp+Dxptmp1sAjJQf0/QACDCIUqAZVJJMJVKvVxJRpUxYRJkEFQSKdQktbGzRK4pgQ0sgArnv2wID/SrcKyMZMoeFHZoRCUiDkirRdh4edpIOOn1P1a53pUCiaeAtEJPKlImolF5amIZlLIBFna5pUg6FloBk6BOLHJgEtztEVACQHhkeH0dvdDUKAUrmCSr4oi+Uy+voPy2TCpgwaZs2eg6VLfZx62jLs3rlndNP619bv2LH9hUcff/yVfGliN4/CKiEsltWrw3gqnYFt2dAYQxAEIFKHaSYgpYRt2TAsE061Ai4EuJBwnDJ0XUd7a5vyFIJCCB1e4MM0DFiWhZBHaGlqQaVSBtUYwiCAzhhqVVeB1CAhpRpuGIalfNyh8hzrugHLMlGYKMY+aBl7UkMwTQPTGbgIAQH1fo4UYZ1RpiJueCzP1yiCmPLMOUfC0kApkEqncbjvEBjTMDh45Lmvff1r3/jD7//4vePHh5IEXUgmEzA0HX7gwUwYjUanrnawTBXtk8tlkMmkGpdN6AeohTW0t7UrP3AMe6ax/J8RFqsKBISMQKGpBkqqvFfPV5C9trYOjE+MT9zynpu+MTw4/Ntlpywe7zvYhzDg8HxXQaUsC3YyCdd1Y/+8VCA7SWCZFlzXhe97YJTC831ILhB4blSQ5MixY4PonToVlaoLXWO7duzY+cupU6bmOjp6qmteXjfy1a99I/uLn/10diaXQqXsIJvLwkoY0HQdxUqZf+Nr33ri5z/72dF0ukn5WiMOHoVwaw4SyTQoJCqBD9u2QSQwOjQK07JBAAShj1Qqg47WdoxPTGDRoiUXnnXaeWff/pOfY9qsKbjoovNw7NhRHBk4Aj9UgxUA8J0AxAQO9h3B/r0HMDE2jtamjqgp3WIePz50fKIwsSUUoXRcF2EQQGMabDMBK2kDlKBWdWBoDAGPUC5XMTE23gDVKXtLpKLpQBCFPohUwDgm0YhWUv5d0hiW1YnzJ5QbJ1Qw6v6MOO4uvps0It1i+FWs0GCMQoJDCECTBFJwEKGsKZILhJGSVktNbZ+jkCMMI5imCYCAhwIJ0/b279/38MxZs2e1dbf3LFm6JDNr/WysXfsy+vbvxebXNmHRovk43NcHwUN0dLTBcxx4oQtoGubPnY1qpYQdoxPo7OleOnfezDP37t27efj40GTDO1mTNVmTNVmT9XdarK2tDbWaA8qYiqIII1CmiJlRFMEwNBimioGxLRuVcgXXXf+G161efc75fX0HwHQdLS3N0DUdvu/BMk0MHRuFbZooV8tYv24DDGqhVvERRRGWLF00tmHDuj8ePLDvYMQj8Ejl74aIYFrK2+m6NSUhlkTl3NIY9iTjqB7BG55XQmjceMWTf8oaPjNCaNysxh5YTR3UFCk09gSCAjTeVEihSKOEqWxPGYNWKG10eOrwRmJP4YkNJ2lEa9S9w/VtV53GrOBcDR+wwIl835hkqukKrCO4anxVkxTn9RKqmsk4AokwdRCUUqjNHVGyQFEnnwoF5GEaBeeqoTYtA0yjSKYSU//x1vf904xZM1s0TR1SXd+DbdsxifpEQ1r//uhJMU71/rVBQY4PtZRScCEaQBoVR6IOngBtRC+ReDhRlzbWAduAyr6dyE8AnKj4j6StvHxxE0SZeg5kFEeYaETJeAHomsqQFRB4/NEnxaHDfZJQRnbs2ElS6SSZO3seMTVT1Jza8YOHD269/4F7H/vTnX++/be/+92//ulPv/vJlq1bXok4H8xkc4Fh2gjCCJRSpBIJEDDkcll4rotqtQopBJhGoDEFO+NCIBQqizkII2TSSVimBd/z0NHVDitpQUiJZNJGEAZIJZMwLCX7DcMQjDFEQYAoigAQhJwjCANwESnPLqUIggCu5yCKIggiEQYRXMcFjyLohoZIciXJJxJ+4DcGQTTOL67nooZhBEZpI7opCkJ1HWkGNKohkiE0nSLwIxiajkwqjda2Nqxdu2YLoSy6+MKLzzFNU6MMMEwdZtKGF/oNub+SH5+4PiilqDlVVKoxjVjTkElnlKSV0vj6IYgCjmq1Bss2G9c5j1T2qhYDjYaGx+B5NXR0tmP7rp2H33Pze/95zdo1Pwt8v7Zr507YyQTcQDX2OtPgel7D95nOpBAEQZzvqmSyge8hk82ChxEkoDyrUd2vrrbjvueCEopysVIcz+eHJUS+ubmt2tHeXnr66Wc8wzBbWjtbE8ODQyiVCnjqmWcq9933lz88+ujD362UyyNarJzQdBX9Vo/Vqt+XTNOE53rQNR2ZXAa6ocE0DIRhhIn8BIrF8emf/vQ//5fmjtZ5d9x9v/z8Fz5LKAEGB46hWCzgxjfdgFQqgSgMwQjD0PFR3HHn3agUyzh+dNh5903vOpRM2M8/+eRTz+umViWAAlLFW9fW9g6k0ilQQuBUq/BDH9VKBeVyGYzFlgaQhpe3oY7hHExTmd+UkrixpKCNHHMBCQmNMRiGcfKdI6Y4n/T/Y/WIRL0JPvH31EnQygsMtZ2PrwvKTuIfAEjaSURRCM/3oFsGNF1THAhDAwWBburwg6AaRKKwZPGC6Uf6j8ybv3A+GCN4+NGH4AUuIh5i/4G9uOiC87D/wAG4vqeuQVNHJpVC/5F++BGH63nRrt27jvKQb2eMHZuMJZqsyZqsyZqsyfo7bXibmppRLBagaQxRxKFpGhJWEmGgJKIa01GtVQEAgRcQQmlyyaIlry8VCmcEoYdLL7wUYRhgx45t6Omdgn179oPzCDNmTsNLL76Mz376s8hk0njjm67Dlo1b/AP7D2zYtHnL3bqmj+m6DsEFNKbBtGwEYahgOFIqKWo9ESg+qCtgVSyBqx+CoGTFhCpZJKEEMpbJkbj5rH9eivou8gQg6uRDF+oeMygpMq2DVGLfbP0xSCEbHl4hT2yZSbxlU5vl+omfKohVne4MlSdZ3+7WSaWUsEZL3dgox38PAGiaojwLIRuHUELVNyC5iA+X9dxZglQyhUQyBUIZwihoxDyFUYCe7p65H/rgh29OpVMJRgkMQ1d5t4w1Dp71frZ+8OeCNyBdjUY+frbqwwMhYooPlHwUABzPBYGKGKkTs+tq87iHxsDgEVRqFWTTORAQNOea0dyUhabTBrxJinhwUCfDamqwcfjoYfzlnr+gvb0F27bvwP69++SevftIEIZk4fyFZMasmejpnoJyuXJ07bq1z/z0Zz/70Tf+9WvfvPueu36yefPm+/ft2b2lVqmNJJJpnrCTIBJwPAeCc9imiUwmDdO0ILjaFoVRAF3XEUYRLMtEGKisaMs0kTBtJVemDGEQglIGXdfU5jBed42PjcRkaQKqMQR+gEK+AN/3EfO94fkevMCL3xsUggt4nq/kopRCxNL/KFQxQkzXIITyfZqGrt4XUtFqCVTTyAVvbIGVGkH54RFv4UzTVEAsHiHiArZtIZVMgWmaemyEwDBMbN2yZV3EubzksotXujXXGBg4BithImElQCQ9IXmPmxoOJTn3eIBdu7bDYCYy2QzK5QpMw4LrOciXikglUxgcHgQhEslkspGtXc9epZQijEIUCkX4foAXX3pl6z+8732f2bpl6909Pd2SEQLDPLEBJ5QiaVvQNA1NTU2oOQ4Yo9CZoitzGcE0tMbGPuIh/CCE63hIppMwDQtDx4+jWFRqlUQqAU2n0A0dlXIVfuAVLdPue/SRhx47OnCkb+nipb2WYXds27pz7+c/97nvbNny2g/HRscHTDuBMAwRhWozqgZFFDwMofgJDLqmQUogk8mAEArXcwEhkclkUCqVyCWXXHTrbZ//4i23ffnL9BMf/igJHB81z8cZq1ajtbUFqVQSUaSgg4Zt4YEHH8HaDRvK02fN2ucF3tp8fvThZ1947tEg8kaUakZJjSlTueqpVEqxBoRQcnIh0dreiomxsZgZQMFiny1o/GseQWOGiryKGQNRFMVKj3joEStk6kO9iPPG0PIkdN+JHPX6PTzOD5NxRBeJgX8ne/8Z1eIcYzRgV3WrShiq96hhmKCEwnVdaExDoVJSoDfNwPDw4NDA0aPHR0fHrFnz5nR0dXUlq24VR48cRbFQQk9XN7KZFPr7j8BxXTCqobO9A5pm4MjRAZRLBTS35Nitt76v4Dj+uiNHjvR/4fOfk5NHismarMmarMmarL+/0irlMlKpDIIggMYoNF0H1RiYFst8KUXoR3A9DzNnzkxpmpw6Onqsw+MLkDM7QTV1IOnp7IWh6WjpaELSVvLFfCGPW997MwLOsWvXDrhOxT3cd+SQH3hjueYcqpUqkon49xbziMKwsToU+GsfroQEF7LRgNbBVJKcICWDqEYVUSzJJQL17koQtX6lcc7tiQVmvcmNm1p2ov8l8WZDNXpKmsyFjCXRanumx345LrlqlePYHgl6ImMybpZBVSSSoZsIhQ8OKNKtiBsTrppzRqnyItdjj2JJt0DsR5USMuIAIWBMi6OMFME0EiEs04amG6CEQS27JYIohC50aNRArepmIi6MKOAYGxsFNIrmbDMMkL+SKtf/rigKQeMG7YR8OX5NuFBybU3lbGoslqPG2xkWx1TJOn26PjyIn30hOBilSCUy6oKkdb+viLf3PG6k6gdnJdXetm0rSqWCtOwEEVTKA4cPkyDw0dvZS84480wEvieqFW/wjj/c+doDD9z/wmuvbXi+WJzYn85kAh5GkAKwrKSKVIm/K41REGhg0OJNK+DUPICq+JgwjJBMpkAYRVCO4LkBbNtSwKmAQ0BlhkIycK7IyplUBpVKFfmJCaSTKSTsDPzAh+e5Kj9aKlIyjzh84gFEwPeC2NesXgvGNLU5FwJC1J9HCl0zAaK2XL4bKJgaV8RzRe9W/nBQClPTwaWApukQ0oOUUERnX0UjUabB83zwMICVSKJW8yBMwE4kUPN9eEGApG2jUq7wb33nmz8Ofc+89b3v+8jU6VNTI2MjKBTKmNLTozayUBJVdV1SSADZRAannXJ6o2GnVPmJdUNHmiQAAG1trTAMQ32vXDaktGBAsVBCKV+CW3Xw9PPPPfnt7/zbN44NHH6hta0NjuMg9ENICBi6AY1p0HUdhGlwqmV4vo90JoNavJlPZtQ2U9M1lCtlBEGEdCYJ2zRgaDrcmgNNM5S3204AVMJxFNiKQvk5s7lMsHXb5kHKNOzZtfs3H3j/B7fe+KYbr3z5pVd2DwweecwwDL+7uxeARKGQB4mbbe5FkERJxxV1mKNWrQEA7KSNfL4Az/OQsBMYHRuFZrL5X//W169/5PHHmGGaOPX0JXjg3gcwdcZUjIwMQddUwym4hGnZONJ/JHzxxWd3FMZGN60ZHes3LDawbdvGx/fvPzhu6DoII8ilc4AAipUy2jva0NzUhEKxiGw2h2KxCBF4qBQrIITFg9AInKt7kG0nVGMMFUHlh37DqkBi2QaXvBE1RjUGKVTcXUPRUic1x9c34qFjPebNMAwIojz8tH4/4VDD0Pogjqk/I3i9KVb3Px5f+4QS1JxarPjREEQclmVDCAmnWoXGdAweH365VvMLP/nRjzYm06lrE7Z95qrVq7Ujhw+jUqli3bqNmDZ9GsrlKgr5AgYGjoBQhmQyAd3Q8YUvfBG6xoI7/3RnWSN0klo1WZM1WZM1WZP199rwAhSGzpBIJMF5BJ3pirhJKPwgQtmrgvMImXQKxVKBT5vZ033Te981b9rU6WhONmPr1s3INuWgEQPjxQlMFCeQyaRxdOAo7rv7Prz5LTeiVKqgf+9RvO3Nb7WefemF0ppX19Ucoxav6ggsU+Us2oYNKQT80IeQAozo8ZZVQIQ8jj8RACiIRkGlihQSUkAIpoiuUqoYH0oVxZbEW99486gktFIRoDmv97wnNg1SSY9JDMzRYjmo5PxEzi1Vq2e1RZaqaYolmPWtcKOli8OANabovEHkIfQCCKjMSqK0wIh5wyq6qA67IjRuHICIh+CI4sdDIAVR0sFYmiliHzAFQRiE8F0PhmGAMhVtU66UEYUCkBynnrasOZVKWIVCAfmxIsqeg8ziTOOpUN+/jPfTSp5YB+GQk/4XsYdWxlt3pmlxFBDinFwCUzfVxjzertN4AMFjj2/EI7Q0tZ0UM4L4byUYHRtBKpGC5wXwAw+pZAp9Bw/Bsizs3btXFiYK8m1vexs5Y8XKOCQJ2Lhp69C999/75E9/8uOH9uw7sEln2mClUuG6riGRzIBCg2EZiHiEMOKwTC3eAOkqs1fXYRsahodGoOs6mlqawAjD2MQ4tDjKhwchRCgAJqDrKYRBGA9AKHw/gBQSuVwOnuegWCpBiAimYcJzXUhCoJkMnhuiVCrHm1MN0DQEfgiqEdh2AmGoYECS1ocyaERvSbUMA4sHCyImxGqaIpsDKrtWRLwR+QKqXq8G/1oKNWACIAiHX/NAQGAmLAViExKu68H3AyQSNihjCHmE7p4elEulwte/+Y2v1xyv/I1/+8YX2po7Uj73MTQ8gt/96te4+vVXYdGiJfD9AKZhwHM9ECqRSCQb11g6rcURWBp0S4OQHJZpxzJr1ex6no9tW7dh1uyZGDk+gZ27dw5u3rLljp/efvvtlUrpUE+vaiiDIESt4iCRtAACJCwLYchRKdeUNUA3Ysm22lZn0gqo5lZdGJoJShiiSCD0fSRTCXi+gJBqKw6qrlFNYzC0BFzPwUR+DNVqJfY5q+tz564dW3Z9YfsWpmtobWuH53kolvKwTBuWbSMMQ3i+C11TDAKmMYArSwInAqlkBp7rQwjE8VQMrluzXn/Djdd71Wj+l7/6r/5dd/3ZBIArr70KYyOjcJ0qembPguf5sAwTUkr84Pvf2/DKy2vuTSSS6zKZHDnzzPPLE+MTRR75gKFD1804Do0gk8lAowx9h/tgJxLQqlUll48EJiZGwTTaULsY8f2LRxGkBHTDAKVUkb+h7qd1iJ/gKpaocX+Dek1VdrkaZNYj2gCVOd5Qb8T3z/q2WAge20RO2EikFPH9I6Y0CzWsAiEIgkB513mkGmXBQYmm0qEFgee5kJAwLAuWZQnfc7YfG6gOpjLJPV2dPZe+7qqrVk7t7lm8e8fu1L4De3HlVVfDoBY+/6XPwbQNkEjFM3FEePqpZ0ar5eqzI6PDh9nJFpDJmqzJmqzJmqzJ+vtqeGtODYRQ9PR0wXVc1Ko1BavKZmDqJhgBpIigMYLx8RHnwkvO7b3ggv+nvfeOuuw6z/ue3c45996vTkcHAbCIEqsaKSqkJVmFVnUsK0ocJ7blRPHKshy6LCVrKZKsxLGUxI7tuNCyZLmosIkFJEFRpCiKHSJAEB0YTANmMMBg2vd9t5yy9353/njfve8dJf8kWcnCH3draQma+eq955zZ736e5/d8z2uUsfjQ+z+EX/31X8d3vv0tMNHh7le9ElcOruKv/uVX4MKFZ7G5vYPJxg6MMXjbW78Du7vH45NP/MvTbb9YjEa7GHyHcT1BXTeAVuiGDtYajCYjTA9mUGAbXYycd5MALasBMTLsSGvoxFZckkGTiGT4NEJ7zSoriuKbFPH8K/bS5RxAohqzzRiUZDCWwSFRUV65LzIhEOf/SKzMSlRnEnUNiXtwjbJoqhE637EFWza8WmkoyaIlkkE48jAJIhAgdOb8cyhYxQpgTJHtkooPKRIFWKfR+R6UEpyzGBYeQ9tD1TykN3V1WAEVcQwP5CMmMozwvjSDY1AsiDFGdH4AkigwMcI5B2MNumFA23bY2dxig7miMgCWeiadkKARIzBvW4AIo7qC91EGCgdrDSIRLl58AU1dcbacLL74pS+mO+65HYtFp/YOZthSCj/x539SKQ3V9x6PPPrEC7/5m7/15Qce/ONPPvz1r33+2tVrz2xu7wSjDDa3NrC9uYWD/QNow1291jLVeWt7B03TYNF1nGX1A4xt0PUDmroClMbBwR60NtiYjDGbzbG/t4et7W2M6hrB9+i7DoMPfFjkHPphQAwB2CcQuA/ZaMNwpKGDMUbI4lxFo5QBRb7GkopAsoghIlGEtTJgU2BoDzj3qDQPD0McQBRhjcNktIkhDHzNJA0/sBqmjUXwA4JnW2gYWv5zbRBD5F7YSEzGNfy9o5B2nbM8ZCuw+ksRSAmj0Rg7W7uLd7/7n/6Ds+effeGn/+pP/zdv+Y5ve+PHPvpxo6XH++y5szh67Biij5jPpyBEHG9G4oYgMb2qUlOjlAblDlYZih9+9Ov46lcfaB95+JHTF56/+NkPfeQjHzl//vyXkoqL4yeO4vr165hMNlDXDSJdwxCMvHYEZ5uSmZ+MGqSU0PcdXFXB9wNmsym89zh2/Bj29g+gk4KtKozGYyzaFov5HMYauMpiuneA0XiMFBMSKSEoW64Xmk8RQ8Lu7i6stQiRgUldy4OV957dGynyz1bXoCGhqSuYmsnc2RY/hICUAnZ3DmE2n+NVr/+m7/+FX/zv/+K/+7Vf2/6ut31LcCngIx/8ML7/ne/Eo488ikOHd3C3emWBmv3Sz/8Pe5//wpcefMXdr/ja1u6hr+xs7uCBrz6oHv76I6kZTWAd0/OHbsB0foCmcrjl1ldhNpuzWpr48DDEwKR+P8DHAJUSPCUh0AtcL8mASzdCqpRScFWFEPgQiEIqEDOG/DHITik+mFutKuK+aKAfBihIDVsifo6A30siknuIifDWGHSxRxg8nKuWZ3EE1DXXtdnKISVCO29RVzW7kgCEgWvMtFVX+77/9IXnzj76j//Xf/DKw0eOft+Rw0fe6Yfw6i99/ov1pauXMdncQAjidNgYAarBB3/3/Z9ytvpEirjslV/vJtZrvdZrvdZrvV6uAy/X/BDm8wV6qcfY2W0QKeJgtg+VktggWVk6dujYG1949kU3b3u8/Xu+G9/w+jdgY2MMkxQULHYPbaHWDdqW8Na3vhVf/9ojmM8O0oljNysf44UP3/uRrxqrEShAKY35Yo5FO0dVV9xLSgEmV1Ykps6SqD6KVBl8k2RbOe6qQInV0bxJigT5GlxdZKRbN4n8qOTvy2ZMQRQHViFzZSzlTKpmQqhU6CJPyFob/iHk5yzlsBk4qpV0BCeE5LExmsBUBovFnAnUSQNJgcSuB8krAok3i4mBRa6qEL3Ar0isxDojUJk87SoDa2oQEfqhL8NS09TY2b4Ji3aBa9euYmd391gz3sDBwSUcP3EcN7ubeLOJlVYiAcT0w8ADOBRiTHCWYTSz6QI7OzswGnDaQDeNqDEeMOBeV3Uj2DmGAIrAqHacQVYak5phRF3oceXKVdx33+9hMZ9jMtnAPa98JQ5td3jlq1+lNjY2MZlMsLtzGItZ73/tV//tQ2cunv78pz/1mT++9MLFRy5feuFU13Whqkc4fuIWbG5uYeg6zOZT+N7DWAMfAjY3NgEkzMIUfuAKGK2BQBGBCNPpFNFHVJXha5SAqIHxqELTJFD08N5jPBohOofed9BWYRginHagGEHgvGJKQO/nUk0F1E1TrOc+BMQQMGrYOjvrFzCGzfWD92hqJqe3ixbKcCbXU0TlKqSkGEhmjOTGFSIFeD+UvGsCoR6N+PNl8I3Ri2tAl3vGWgOlLRYLvn65VoZz3Vob9MOApmnQjGq08w4XLj6P8WSMzc0tEBF99CMf+s2vfOlLX/yOb3/LX/jRP/uj//Hf/tm/89q9a3u4cuUKfD/gxRdexGRzA9YZPP7447j7nldKbRMwnbXY2GikxotQVQ778xk+/0efx4uXLs1q506ePXPm0+973wfunS6mD3ofuso5OKMx25+BEtC2HRaLFs5Vov5FORQADBSUNtjb34PRFru7h9C3LRZtK4AlYDFvoZVC73tsjiZ4/sJFbG5uAOMxKBKmewegIWK/24NROQcfQKljuj2X0GI+n0NZjb5tMR6PUNc1QiSGtgW/tKYHdja0i56VyECoXA3nNEbjDdTOomsXuH7t8i3/+jd/4680xr36bW9/K378x/4j+8/+0f+O+z51H07cfBPe/va3w9UW8/kco9EEjzz6GJ489dTFm2+99eT21vbJo4eP44UXX8DVy5eTkuGwqSqAEtq2hYbCMHgcPXII5hu/Aeefu4Ch7xH8gIODKR/IUVralCmW4AeAAtbLZHZltBxMMm8g+AAWcMXWLoeEBIUQojAIxE6SMQnyfM5OZxRYFcmzXIPyQabY3ru+kwMSwuB7vs4F8pb/rej7DhpcR2aMQd2MMJ93iIioGgtlNLpFNyz6cB5Kne8pPro33f/s4aOHvvehrz/49ptvu/0Nb3rjG93ZM6dx/vwFdG0PY8zpytUfAnCqbhwU3Ho3sV7rtV7rtV7r9XIdeKvGYugHHOwfoKobAEw61krj1ptuwfVr10BgOmft6jvvvO2ub7/84mU8fvJJ/Id//sdx02tewxvHRYuXnr+Ekasx21vg4PoUn/30H+DEzTdje3cbN992Ox566Gun2/bg1ObmLltejQGFhMV8jqrhPlHfDQg903E9MeilMgY+MogGeaiEltocIKUghOS0JCGJtS7Tg5XSgCEZastoxxZoqSWCKKyUiKtbFA+dWvPXyx+fc7UxRskas2LgDA9JEHI079x4iE4AZz+jl37ZVDDFucvXWgMkzUOYUrBWwwvUK4aImH/3Yk1NQFKw1gnpmIfrGAKcstgYT7DoF+j7HqNmjK7rAQCvfOU37NS1wW133HzDxZCrnFIiaMkL930P5xzqusbmxkQ2uwkbGxPolcahvh/QjCooa3ioyxpeVlxA6IYOTteonGPboo9QjkFkja2hIjCfzfFD73wnzp59FrWuULkad9x+O55++ln/uc998fTpU8888uSTT3/uA+9/3++RptMpcq72xE23oO8G+OChTcLzF57DxmQCrQ0CdXDawnde7KRsKR0GD6K+XA4+RBghzBIUxpMai3mH6D3msxma0QiwCpEI+9N9GGNhjEG/aFlB6hc83GiFvmuhFBPGreV7jPwA61glq5sa0Wh4H2E02/CNMWIF5YOPYegBRXC6Qt2M0PYdD0yGld4odGettGTwheoNElhVkGHXgOu29fL+IO6N7vu+HPowJVchpojO97CKlbRF10OnxLniaDGdzTAeT3DzzbcCLygcXN87e+/H7/1lj/CAp+GH+vnwxu9829vuObx9+NjQdappaigNvHTlKiabmzhx/DgO9g8wnS5w+twB/uhznwMloptPnIj3f+X+BUV18vnzF/7g4Ycf+tip0ycftNZ2J266Cfv7B+j6BarKYd7OUVc1yEdoa7C1tY22baFUQFM5DEMPo1k910YjRI97XvVKjEcNHrj/ARjnUCVg0S+goGGUQt92AFgJHoYB2lgYY1FVFTbqCm3bwkcPP/QIyqNyDsZY9P0CdVUjBkJdN1BJo+1bhpv5ASlxFhoaiL0vh2SR2LbrKguAO5SrqsKVi5dxxx13ve0b73nNd73v/R/CK+68Ax947wfw2td9I/7cT/55bO1sYlQ3aBctNiYTXL56Fb/93vce3HzTzQ8/cP8ff/5gb+/F3e3DuHz5Ck6ePo1AAXXjQIkPDnd2ttEuOmztbGHRdtyHPB7h0otTBPJwtYWzDsMwoO8XABTG4zH6vmcrseJnGSixG0YsyjqJE6TtxDbNkZOSEYHmIRaESAy/gsAEM0U834tL+Bk7digt4yerxHEiEiI8P0cqV8N3A2IK8Ipfe6U5ktG4GvN2BuWNHOKx6h59RALgGgfrHBbz2eXZdP/TdVU/OW42P3vx+YvfOTs4+NPHjx9/c9cuMF/MX5gvuvdWVfXVEMK8amqMm2a9m1iv9Vqv9Vqv9Xq5DrxGW4wbi91DOyAktLMW58+fx8bWBrS1mIsa4n3AseNHX3nTzTfffez4Cdx8+20Yjcd4+LHHcezoMQydx/nzF7C5sYnHn34M5849g+3dHXzP9343FotBvfrVr8C/ePc/fQJAu7G1gXa6QB8GbG5soGsXUMnAqISmGiHEge3AApvSzkCn3IurJGsL3kQlBljlTXv+vOzHVZrrhZJ03PL+TOU5lJXHGADZT1nnOD+WIP2rCVrbJY1ZAFqKWMngsl2AElNykWRw0bmDl8ogaYyB7wfOFq9s7viQQb5HCqKmErQx5b8TBMaC0uFTNnPWOPhhQKBOlA1gY7zB71vwABJCDJC/QtfNLwIIp08/p5tRo6d7e7j9ztsxHjf8sSmBiA8d6qaCkZxw/p7aKNTGcQWSUK3bdoG6dmwDx/9Fni1xntdaixSTWB8t5rMWV/f2cPnSZbp+7XL6kR/+M+aO2+7AHXfciTOnzw0PPfTw6fs+9skvfujeD3/qiScfv392ML2wsTmJu4d3QDFhPKkxX7S4fJkztjEGzBfEiniMAmrSAiBqMPQ9/JCYvEwR/cDv9Wg0xggabbsAJcJ4NMZkY4y+9ahdBWNYeYtEIIoI0WMYerZ2ah4qlVIwVg5HVqqyElGh3JJY5IP3kh1leJlS4J5cyXMztZltxj4GmDDwJr+89wQjtVu5XxbS1azAcLTQeyYlExXoFVc7OZDAhXgAJ877WgtYAy0WU2jAKC3VYRHjkZB6Cbh+7Rr2cI0Px4zB4Z2j4cknnvq9B/74gU83rjrxnt/5zXte+cpXf8MtN9/yGmPtHZtb2yde+03ftPX+93xg9KrXvGrz8ccfH1tt1Lnnzito7F947rmn2649v5jPTr34wqU/euHii/cPYZjXVYNhGDA92Bc1egQkwubWJnzvESPBOofpdF+o7fx6NHWDunKYd63AvhS+8qUv86xPCXVfoapr9N2AhIjG1XB1A2sNmqZBjISu69A0DUOPfIAPPUIgOMmqL+YLbGxswlkLH3J2NCLFhFHdQGsetDU0+o77dgcidH2Pm2+5DfPZFPsHBwzGUnwAEWNAQjrxrnf9jf9se3t3c2d7C33X4fxLL+AHf+SHMBo1JbIxHo1w6cVLeM/73otrL11+8qVLlz/63HMXnqyqCuefewHPnT8HUhHGCbipH+CHgN3dHWxsjFE5i689+DWu8omxDPvW8jOw73sY6zhzLx23Cvm5iOJGSURlsM0kfaboU6kRgzwnJPTPlUiQmiGh6/Ntk7i7WwbbbJMutURIYqFeWqBzJRuQMMReDnmY1xC9VLMBaGNgRkTfwdWOIYSJuK+5HqGyBn3wfACCFHzvnz2IBy9Zox/RWn/9tjtu++tK67daa/+4qux9Xddeq+oGg2fXx3qt13qt13qt13q9TAde8D4Di0Ur9lWDo8eOYTqb4eKlixiPaqQYcW3vir7lttfffuzEiZ3R9gTHjh4BAHz84/fim17zOvzwD/8QbrnlOJ547An82r/+Ndx860141avvwcmnT+Kzn/ksff2hB6/P5vOHALb/+TBgc2MiKhYQfECgiPGogR906ValxPTiECJvnopQIL28maKce29l6ExFWWSqMvKAm2EpMm8aGVSCWA1BuTpHiYLAZOZceVH+TivODkZCPwwMR9G8VaJAiIiwOkOEOBcbBl+gT9wJDFFzeWiKPkJrw9TfEKSrM/GgogxPmyYVpUNprjIK3sNo3qiHFNC3PbqhZzCWVmjqBovFvFQcvf+97//IpcsvnX7oaw9XJ04ce01YDD/5d/7W37rnW976bfwt2EPLOV3rYOR1J6Es9yEiRUJdO1aorMWx48dYzYoJxqil9FvaRFiJ5h5N/pjTz5zGpz/9GWoXrd7Y2MQr7n6FObR9dP6hD3307LnnTn/l/e/73U889dTTX9zb27u0tb2DO269DfHIYVx56SVMD/ZRNyMc7A+AVvDewxreaDdVA6M128atRlM1GAYP67ivOMQBw9Bj1IyQKMFHzkCnyIMEISKEgPmsRV1VbOGeTxFCzgkqGGsRew9jpaM08kAwGo14IPYBVe1Q1RWrqBbouw4KOSKQkCiUQxgtFVNKsSVfQUFbKwc2UQYzVtZi8NjZ2gFRxGwx5/siKOkGNgXGxmc+nFXXWsHaGikRAsVCyA0hAMTuAD5k0ZIr5qGm7zsYbVE3NTs9KKAZNRwJ0FLyJbVbe9f3QDGEo4cOXbh+be/Cv/3Nf/9ZZyscPnToUF1VR44cO7axt7e/efTo0bsOHz322sO7hzbPnju7f/jw4YsXL7z47MbG6IW9vf3zZ86cemFjspEaXWNjMoaPA0JIaOc9QvS46aabYLTG8xefx3gygbMWXT9HU7OLISUmIO8dHHBPqwxVVhvYqgIRxweGoZfqJs00ciJQkjqwkFC7BjEQUvI8kBoHqCiOEQMfPSu5VQ1NHp309SrNw1aIfDigDF+fi8UCzWgEYx32r11DUgqHdg9h0oyw6BgQtnf9qv5P/rO/+FN/42/8zPfd+5GP4XOf+UP8+F/8cfz4f/TX0DQ19q7vYWd3B2dOncbTzzyF9773A/SaV7/yufls/tuf/tQf3Hv46GH/0tUrWLRTKKugCdylvLmJ2XSO2XyBo0cdvO8Rid0pe/t7OHL0CMaTMfbO7sMqh67roNkWgBiDWLEVbMVuksF7vkaIn08ELS6CFaU2qeUhpJDucwSFldu4rBpaOSRb1s7xX2qdHTh8aJhrucpnaiY1a8WHorYy8D4gBsJkPEYITC4fbXJeOpFC6AfuJh+P4OoK1HNWOPQBQwgY1RXqpkYffNv1w7Px2pVLX/nyXve6173+7xw9euhN93/pj7/dqPlCWfN0t+gW663Eeq3Xeq3Xeq3Xy3eZKOqTMQ5bG1twlUOKCZuTDdR1hbbtkGJCVdWj17/+DT961x13vWOyMcZ8toAbTXDr8ePYbEboux7T6RyLWYfbb7kVp089C+dGePHFF7C1OQ5Hjx79/UceffQ9Z86cumwdA4q00ZhNZ2w3zkrSwIqkrZyoDqIsyEZSKcm7ymCqDUpVDg8KovZqJfU4SuC2eSjmTFkeknPNrhZVgoQiyrMzlX4e5xybdJWCSgpErJrGEIR5lUoNUVKA1Zwl08bwz0gyxCi2LyrFgB5tDW+ySyYuVzGx4mO05UogzRUmbIDmnzdbnbl+iVW8TOBlsBZnf4ehx3Q2xaFDh7G1uYWnTz595cGvPvDEfDZ/9MzJs5+vazf50T/7Y3/q2PFjmjJtGhpJFJVSMSIqL+dEpS84se05kSrduPk15fomBoNRTGjnLYZuwIsvvYCXXnoRN990M3YP76qd7cNXY0xf/v1PffK3/t7f/3v/8Nd/7Vf/wR/+wR/+zuWXrjyxtbUxh1KwBti/fpXrmhIPpNmcbqzBeDzCqGkQKLLNkgjD0GMynsDLhtcPA3d0WgtrHZq6LiC0dtECOmE0HiGEgK7t0PUdIiX0fcs2YZ0HwVRqd/ggxsh2nu2VTvLCRtTTru2gkirXSd7oF+eBHMLw2x6gdEIzGiMGVtl1HhoUXyfWOlhj0A8923VD4N7j7GygBBJHgLFMGVfEToUQOReutSpDhYaCNjxoB8/DjdMWysi9ohSIglRUEUZNjd73GE82MBlNOOs6naFdLEAxYLFYoKpGqA07DLq+awcfrs4X7Qsx0bNPP/3E15+/cPHLp5555ovX965//uRTT33huYvnnnjuuWef398/mO7s7sIZi67t4SoLV9c4mM2xtbkFHwYQAXt717kWzFnMFzN+f2OAztVkSg6pknT5aoUYI7Y2uVvYBx7YMl23rkfwgwfljKvmgSxnTYeBIxWHdw9DJ67aqasG/dDzSx75uVG5ip0DfYdIAdoY1K6CtQbDMBT7bj8MAADnHEcSNHDl8iXsHjr09t/49X/9i8eOHj1y9epl3POqu3HmzBncduJmHD5yBMryff/CxYv4xH2fwDe/6Vum505d+PV77/3YP3nLd3zHnALh2vUrqEeOM7rHjmNjtIn9/T203QK7O4cQibC1vYOua3H48GFAAdf3rmExX8AHQtOwyyY/E4FUeAcU+XpV2nD9GhGMsSUKwTlqIbwrLTETdtqo7BDRCiqLxPmZJ6djRvHzIwFwljPSpdJMDoKIxNkiNWkUSR7vAk8w/HxORNjd2YE2Bl3XCROCn/GVOHkU+67RtS2GGKGURuUY5BbB75U1CgoqtO3inDNm79ixo2/aPXTo+0fjcer6/upstv8SFOgXfuHn1zuK9Vqv9Vqv9Vqvl6PCu7E54Sxqiuh9y7Ue9Qa01pjPriP4gHoywahuxt/9Pd979+bmJi48dx7nL1zAm7/1W/Atb34T3v/b78f2oS2cuOkW3HbnHTh27BCefPppXLm+h5cuvUSbGxtf/uSnfu83v/bQwyfr0ZhVtEjo2h51XUNry9kqzWqMDwEREIWTeNgjISAlHqCY7JmgkhG4SYJKeRxUPPgmVgK0lg2v2DpZVZPuW4qlaihb5pw1bCMmzjMDCtGH8nFJs2Kch2NrDRQppriC87/WsQJIFJbqA0jAV5ptpjHCWgtrLDxxhjdRQiRa2WxK7FK+LmfWAGVMUVCaUYMQI4a+hzGWu3Atb/6894hxQF03GI1G6LsBTdXA1Q7WaRw+djgc7M8+cOXK1e8D8A4j8Kq8tL6hiKjULWltyp+4qip5OsQMp+HP9T5i0bZAIoyaMarGYXN3A1evXWk/8clPfvaTn/m9Tz/y9Ufu7/v45N7etWtt3+HIsSOY7c8wasZYtAuACDFx/2k3DIgp4djxm2CUxrX9a2xpjBEHLedmiQKiIlhnEFNCN7SwxmDUjDDd9wJ9Srh87Rr3BGuDSAEICf1UhhLFSrSygJVKHhFhEYVQnSnhJMqwMQZ+GEDEhxpd20lnLitTigAvcDKtNddcEaC1RVIkBylYHiLEBEJgK7NVoowbOGvQdp04AQYhPptlh3IiKYPWYrNn1TIMQdRewyCt/D9aIYQAYzSqqkLwHjFFJJ9Y0ZZoPIHQ1BUWiwVCDLh27TJG9ZiBURpoRg1ACfN5B2MPMB41sK2DrixG4xH2rl3BeLKBphlhvjiYaW1mu24HQXm+R4xGiAHtYgFjHOqmwbVrexhNxrBWY7o4QNM00HJdO1vB+4BEqhxwkdhn66pG13UIwXNcQGywZTj2ARvjDXjfI2mg9x1i5OHOWH4d/OD5tYmB7cY+4GB/WtwmMXqJNeT3lWBIwxiNEPh6ICJEyf2zvZdgKwdjamxubCApYDafwhgN6+z23/rbf+s//8bXvvauhx/8Oh5/+CG8cPUKtg8dxaNPPIF7XvUqhsEB2N+/jrvvuhvz6fyL/+bf/fq/mHftfH/vKs6ePcuW3WQl31+haweMJ5uom4ZdCrXFlWuXMdufIsWI3g8Yev5fbQyms32OP4iTJZEWFp9ClOx9PgQjee4yXkHLsyrXxyX5/w0oxQJMywc4yyeLksOxJOLwsuebVvp583WcwGp9kqHWCOE7JuJnxUDs5kjA9esHAjTkLmAIEDEGQqSIieMavl4PsNbAe4+mmQA+wZNnNwdpbGxOUDd19+xz5z5lrdn+wR/60Xd99g//8NuOHT369GIxv+iDP7/eTqzXeq3Xeq3Xer1MFd7J5gQKGkPfIYSIIXLPbVU5zOdzGMs5y0OHDh37cz/2Z//To4eP3AkVsXf9Ko7uHsFDDz8O7Rx+8IfeCRBw6cVLOHvuFOp6hGdOPYO969eefPyRx/7Vk08+ea91rqXICpfSCk01YpLt0JcOYGczXEVJpi0yZMgYhOCRUmK1VWlRU3kw1EoLy0qooMUrx7ROAQ/Dmqw6cG8pk595JVEn2PKsyhAMgKthxJ6cB91MYdbKIEbe3FVVzb25IZTsWSJWB1mhFgK1UlJ/JENlAUYlGZ5YIc71NSHGUhHDGWRRChUTeLNaku2ECQpVXSESb+65GqfDdDbF4SO72No+hM2NTSwWc5x65tzVx08+efXb3/bWW5Bw/Pr1fTseb0AZtVRs5HtmxadAvwQwo4tartniS0AYuLKkriuMJ2PM284/8OCDz3zy9z/5wd957+/88i/+3V/6x1cvX/0MJTo/my/a3Z3DmO1NEULA9GCK6D1GowbGWcRIaLsOSIm7fRN3+87mM742fACIBxXjrOQHFfzA1ngeXjSsqziHmwgUA2drI1soSbo9tdIwol5XVcV51xBRVW7pBgDbOrVh+FDugCYKgFJcW5OBOop/1pzhZRCSKzZoJcCqGCOMsSv5cZTDHM7vSmUPJWhjpKuUAHAtlzGWbahqeahDMbL6q6XuKvGwbYwumUxtDbsqrGWrfZJ+X7H+xxj4AMcTvOd7cNSMoY1mSq5EEow2UIlJxlo6i4eh52owIvhuKIq8tVyr1XZtgcoZpVDXNWJIAjriOEPT1DCG89XBe7T9QuIMGtY5GPCzoaprPgSCWj5TXFXI00rxz0uJijXWB66TGvpBVGBCSuCIg/TV8mGAZQDa4Hk4M8sBLFKEUQqucoWAnTkAxlg0tSiGIbJLgAh10+D4iROwhg+KLl9+Cf/B2//Uj//qu//l39Raj168fDEtDqZqPuvwN//mu3D3q16F6cEMKUU4Z/DSlSu48/Y7T/3K//wrv/zcxef+eOfQNs5fuIBFu4BxFoDGZLyJ2f4Ui3aBZjLCZHMTIQzwPgjgi63WTdWgakYMPrN8XTQjziD3fb/yDNOSTZffHXHJSigP0MxEI8nmahjHzggtNW48tNLyKaKxtEEvZ2D+GsSDsMrPdwVUzpbX3hiLSkBw+XCQUkHmccWWBlxdyYFngjUG0Px+xRjLwSL3uUf46OGqCnXToF8wvK1U4yW0PvpLd9x5x/Mnnz753O7OziwlivPZ7OLP/dzPpfWWYr3Wa73Wa73W62Wo8M4PFjDKwFUjOGfhmgqz6YwhMc5gc2MD5BPqujry2JOPHd7d2YJrNDa3NjHdX+B973svfuq/+Cl88vc/iztuvwWBErYPH8YTTz2DZ8+ciwcH1x/0MXzx0O6h6fX966XytutadIsFrK24g5bAmTKjoQyAEJFSth9rxLRiHaUoKpyYmRN31XL+VCNpgAJv+jXk5D+hUGiTAIVirgKS/hytFJS2SzBKWubPtDLy+alYnpNYpBlCxQcFFJejdkpSSSQU05Q4I5iDa1r+M5OgKQ+48nWsdUWlBQqjizNz8nFasxqoUoKSIQYpwVjH1SApMr1XKRASRpMGSapBnK2ha4MTtxzFyWee/vhP//R/9Vhoh28Lw/ATv/w///KPfN/3fa9dKQnhXG8iVlfK6yqWcQIrW5F/F6sVlOUs46lTZy9+8AMf/sozp575+Fcf+Monzpw588LO7hHceuvtCH7AbNZiOt3HuTNn0TQNalehqceo6graGDgYuA0L7wMoEsIQcW16HVorVLVDO58jKSO9sTxkdV0LZy3atkXlamgYPsBxBinEUm3FBxOmWDZ1HgQTV/u0XVsOGWIMxYJJlFBXNXz0ywwuj3P8PgnN1hjABwISwWiLxtUY/IC+F2s05Pohfl8jFCpn4QePmIhtndqg9518TYUoBypOKorIsyMghiAXlUJKCuNRg67rCplcW8AngoXOTVliNVWwhvPVbd/C2RpWa4SVQbvrelgZqL0fCmBrtWonBI/JZCLuBY/ZdApjFEbVGMPgkRTQdh2apkblKrSRMB6PMfgOChrBe8k1M83X9x7WGMym0yW8iADnqjKctt0cRlkYaxG8L4dRWpniRojEZOumrmUQE4q12MQBoBmN0C4WsM5x76z3qEZjdoCkxFlfbQQQFuGHyPefYNuypbf3fGiytb2Jru0RQkTf+ZJln4zH8J5Jz6dPncTW5haj34y9+yd/8j/+KWvN7lNPn8LDX/8avue7/jS+f5vhbM5oTMYjOYDTeObMuSfu+8h9v/zAQw99dHfnEEKKnD2dVPJaynPDaIybEfq2BVLCfNEihoC6qtF2c66CC5zd5teUgXpD57mvVnM9HAS6xpAyLR+nYJ2BSqocEGity0FJtjXHwC4FayxiCiDpHl+eNMo7levm8ulkeZKqcvBIIFFqFazjw6HBhwK+Sklo9cRuCGsMjHNM3FcahCRd6C0fUAXCQH05MDXGwlWW/y0KEVbl7+GRfA+lFNpFf/GTn/j9jy+ms63ZbFb1fd8PfbcedtdrvdZrvdZrvV6uA28IHqQTDu8cQeUqXH7pshA0IxIp9H2Ltm9x9NiRO3/0P/yRW/tZi0svXcQ7/8yP4MKz5/Ez/83PYFyPMZ0dYDJuUNkKT52+iCMnjuIHfuCdlz/xiU98+bHHnjjnnOXTdDAp9vbbb8Pe3gEW84XYgi0oRQwhsrolA6rRlqt+JLObBEyVlNiYFStk2eKcTbdas60ZCTBalYwvkeTGtNjx8pZKqMEhBoEHySaLULp1cs6SLbs8HGmlEDwrc0hgWquRAYqkl9JYaK0RI9cecbaYe1ohii5IBqmkpMaXeHhUGtbYQnpWKUFpI3ZrUT2IVW/++ZSoFxY+BFjNqt3Q9yClpTO2R/SEswcH2NqcoKkq1JWjRx/6+lln67N3veL204v59C4Ab+T9JysjIXCOM1ke3pS8fkRJNv5KwFHAMITw8MMPf/Xd/+LdH/vCl7746fl0/vhtt98yv3btOqqqxtWrl7HZTzBbLJBUQu0qzhhvbaBb9Kicg60Mht5jd2cbV69dxXw+B8WI8XiMycYEi3YGpITRaIJFt4D3A7p+huiZ0hxIMt1CeFVKIfoB1jgACrbS8D4IiIzzqcnwhjtQZFUoRpBArWKIS9+A1iV7rUW1WxLEE3ewGn5/lDacH6Qonc8r16H0ixrDm/EYA/ok8DIYxLisHqIUi62dD2w8jLIM9FGqQMaQgDCEUjmEJNU8IXJtlajQSim22QfOYRZlTBEf5mgebJx2bEOlCFdVfG0GL1EBVsibUQPvOYPfDy2sla5la/i9GQY0rkaS33PezrnPFglKJThjYFWFKNl4zhwzYd06Hqozic5ahxA56681d3o7lenqCbayoEBleFJKwQ8BMSw4DiDwI0QCJVYfm8oBozG8H1htthX6MMBqC2sc15+RZ7eJtgxok7adGNkenoIq9Wgh5AEsiVK9BGVxhzJXHnVdj/lihu/9/h/44W9587e847HHT8Jpg4ceelwdv/lmfPs3fxu0VggxQpkEqy2+cP8Xn33Xz/zMz734wksf2trdRt2McfXiJUQC3LgGYoIPLaZti8nGBHXDtvT5fIah77C1tQOKQYjUI1Bk4rTSJDEShRAGbDSbMFqjX/SsaGt2JKSYK9HkaSvZ9KzKIjHDIHe3548L4g7Iwy2Qe86zQpxNzuIekY/LPek5by5niACAQF7uX7aYl89V2d5Och2LhVophgwCqCuHPg5omhGM1pjLv0WJGDDXKwWrDbsBwK89HyIGGobuKgyuaujiJlmv9Vqv9Vqv9Vqvl+nAO9nYAkWP6cE+EgG7hw9BKeDq1Stsmw0EpRNe/ZpX3v3m179h5+MfvQ+T8RbOnXsOn/rUp/Fd3/3d+MZvejUODg7wb37j3+Kuu+7GEyefhrX13uVLl9576cqlz3ZdN+96xZtQk+Csw8H+jAdaq9H3A5y2IAIqUyFqQt91MJUMepILXVb5qAKIUmDrMYfMiO3KYaWiCJylW+KdUbKOLAeoMggjJMljalGOpVpD25IPTJFk2GaqpzIG2lCh6WroUhuitOZNNcViz8sbN6U5s8h2WhmAtOFBx2jZpHtWHa0BpcDWYbG8qkRFfSGp+GC4E6uvIXCXrhLrN9N9A3Rq0HcDjGE4zZUrVxACYffwLt7w+jegXbS4cvXKw0+cPPmxHwNeRyGaYRiEUmvgDFfh+IGHQGs17Erud+/g2rV/+A//8acf+tpDnzh39txnz549e27n0A4UEp579hzafoC1FpubYzhjceTIYWit0bUdYoxoFy2aUYPZbI44i0gxYj6fYjHvsLExRtAa7WKBwbPCuAg9qiqxpVk6dLWRwwlheIUQ0Ag92VZjprzmS4AirBwOKDmoIMVqFQXOtjMHilUua7K9MQtR8mfEwwKr3/I+EyFGYlstRX6dEmfSY8oDMmRglS7cfJ3JQU4kwhCWXblKsSUYEUJgVuCxnv88hih/zDRqo6SDWmBuVVXxAYVA0ELkj0+K4XVB7Lh5iLDWSi8xW+izjVRbtksPvkflGiHhBtjGwVrLA5pSQITAnBys48xttknXoqRppRHCAK1cAcFxu43mryNUdqMdDznBizLP1mOtVYkBpERM4Y0BdVWxmyMxFZwowpgKWmm4yqFrO7iKs6D7+1M4x+6OkCKs1YghK4WaB2EZpPJAp61G8BEhLeML3AmrOIdsbVEZk3SZh+i5qgzA5uYmZtN9TCaTm//7n//5P//Gb36jfv78eVRVhb/wF/4ijt90HBub28w0iBEREfv9Pn7tV3/1fWEYPnR4d5fdA5RQWYtKV6CBEELA4D2qykARIQ4Rve8RIx9szGYHMJoBW5xzpgIO1JoZCRGcvWf3TIRKpoCjmN5skFTk5xfkGk6J1XAt9xF52GRRVw3b2/2A7H1etrLJA1nxwZpWmrPsKTIAD1J7JF3rWltoBcQUuRZMKRiJBxipREuJxGnN3yd6ti1H6Tsn8AGlUnyQlCgx7E6iMST3bAwBBEIfPKqq5h5r+Xeo7VpEebZba2Bttd5NrNd6rdd6rdd6vVwH3vGkRt8CQzfAVRWs1pgezJESsLm1AWMcDmYzc/zYsdtPnzmV7nrlXeqWm2/HZz7zGfjYwjjC/sEBunaOw4eP4PNf/CI+8P73n9y7uvcb24e3PhwpPWMc5/XYupmgk0EMxMRR59D3PQIFJA1WZ4ZBCLgBxjCpmGt3qSi1kEE3ZzmX2dJUsrYyBhZFLIlyC1pSQRnKIn8utFrI18zDdZKNExEPGMZocGMQD1rc/LIEYmX1A4rzkcUCmEnOFKG1g9Gq1H2wVTaxpRLA4AemL0sHptJKBtkg9Fip4LCsuDFtW35GpZFkKBuGnm3CTQM/9DBWI3Qe0Uf44KE1YKzG9GCKM6fPYndnG4tZ69/z2+/9l9/4Da+953ve8T0/OdmYcJ2IQqkDqSpbVBYk4ORTz5x//+9+4L4P3vvB333uufNfTT7tdd0Cd955O5JSaGct9vf3czwPSBqj8QTQABHYHhyY9J2tssF7WGMxDB4hBszbOfeBZvKuqJ6DZyKuSgZVU2OxmALg6hjrLAPS+lZyz3ItlGuFYTYEFEUzhiCgI1ZCjWzL2Q7LQxBvqBmCw9287BHO2W0G8RCMdQJHC9DKScetqPryuYX2rBSctUgmMeVZhumcD865RYi7Qct9QdHDVI5zvT1nFrM7IYo6r6SDlyJDlFhYE+upZkVbExWirga/FpChMiXunyWKrHpThDUWtav50GoYZBBYMMRI7nkKsRw+UeoEJ6e42zqKTT/xIGitFuuwBcXI9HhblWcBE7IV+n4orpC6sqDEALgon6MVMB6N+euGKEMKoJSBsQ5936HrB3ZFREIIkvP2A7QyaMYNnHWY+Rkr0KSkTkfDSmUXW1yZ6r2xtYn5dApCgrOVKLgJSDxIej8UIJY1Dsnw4cEwcJ720O6RI8eOHLpt6Du8cOECnnjsMbzyta/B7bfeUpwlzvEw99WvPPDU/V968D3OOVBI6PsBZ8+dgtIaW1s7mB4cwFiN7e1NAArd0CHEwBlnV2PhPVv1W1bjm2aEGBYFOsfXlZLDOL7+q4qruIa+59eSJFZSnrFMJs8Z2YQkBzrsahgGza6B5TGT3ANmmQuWexqJh9k8DiNRARFqLV+HVFGWlQzESPnAyDA/INe9KVaBkTjDbqzl62nwmPoDvs+DB3SCtkoy9VwjZ62BjwOsrVBVNeazBWfgLWfGtdISn2Da9nqt13qt13qt13q9PJdRyqCua1jnGFo1DNjcmsiAyhuJumnGP/ETP/GXv3r//XeGmOw9r74Lx285glfcdSdeePESjh07ht2NHZw4dgTvfve/eu6pk0/+45tOHP+dqqrOPvvss8k4LeqKwcZkUyiwAYuhRQwRWxubUFqjb1vJS/XQ0GXPA1FaoZZdsGxX1mW4hVQRZYoz53vlbyTXpVbriYDl4ADNuUBosSHKkKAZ/JRSZEsl6w2sXuRKF1EVVwolpUaICblKFA0FVvxWVepEQjhVBqREJY6RM8QpQWlWrQCNmKjU17CKZJcgpKwaicLE713eYPPAp0U17hc9gg9sUZSBuh5xb23btrh8+QpcZUExHtx3331fmWxsHv/2t3zr67MFMVuD5/NZ+vpjj5z99B985nP/6H/7R//qF//u3/3Fj3zkg7/xwsWLZ+56xd1d5Sos2gVSSvCef6eD/SkUFJqmwqLt0HUefd9iMZ+hbwcQCF23wGLRIpWBQAasxGqLcRZOhqAYA6AZKGW0KbU9xljOGmo+0MiAqqyQJlGYtGT+IkVAS/6boihMvEHXeXiVwuokBG2+rqS3l0gIxzWUOArye6UgirDkG/k65k26c44/LibOiMu1pJTirlywZT5ShFamWNgLPGwFZEWSa8xDPaUoTggjiptQsynwdZ9/TvkeuaIo26PrqmI6tZeMsuHhJFfTaMXxgnzVk8CAirWVeODg4ZigDA/bfJ2SAM7U8rDGWp5+ie/HGESVi6HYxVPg66iuaqnG0qxqE7+/SQ4QjDGoKq5Uy7lSrTLGSLLOkqVnC7PUFznHg56P6Acvr0lkkra1iD6U/mzI++C9Z0BXdnIQg720FkeF0Qy7il5U5iTPGn6vmrrGZKverOvxWz78ux+9641veh0uX7uEvYM9vPENbyoDr9Ya16/tdb/0C7/0Tx76+kMfbEajFFPE3sEebOVQVdKtGwNGoxFfc5p/10XbAgKxG4YBMRKqukHT1KCU0A0dUHKvVl4PKs8cZ53k3SOMEpjeSg3b8jkrR0lJQFNawhmJSfgqg6pWq4jE8q2NhrWOq9USCngwia/ZaAvnbAG1GaOXnueUoXASh0F26MgAr1R5/lkhZ1OUn08DznL1WxK1OqYIpkLw/ZuShh8GvjatRiQPZxy0NfCSa44h4OfXtUTrtV7rtV7rtV4vT4VXG4MQI7pFh8o5QAOzxQKL+QLjZoRAAYePHNl43Te97q7f+trX3B233Z6efvJJdfLpU/ju7/ounPjm23Dm7Dl89IP/HG9727dic3v86GjcfH68OblY2abU/LTeo6nGCJLzi8kDFojEVSGJeAOeYmRystGl5zGrtUgJKqEAYpawkyTKg9A2QVKvKr27WrodWZYtyiQPoazelY05uD9W9lGgwEpEVTu2uBFDU4zSkOINaGcQhoE3seBsLecjeVhTia2hCRFaW1hruT5D+oVzRyjXbMim3wiFmnjwtUJ5TnFJzs2KSBLQltJa4D2BrbNGw1QOfvBo5zMoZTAej5kYK2r7ELguZHdnF3v7B9DWoOt7aKUwnc6e//v/y9/7b3eObM5+7M/8uZ8Yb4x3277z16ZXH33Xz7zrw1/+whc+Pp8vHj/Y3++b0QhHjh1F8BHPnjsLYxycrbC3d8DU17pCM67hrBMAmUZdGQx+wNAN0Fpj8KxYUyIedENCoB6TZgRra3TBM2QHBBJidxIqtzIaiviwxFUOCopzlkkqp6CWm2S5pozmIWtJbc7VVnKNKMWbfsZ/L22rArZKOVMuf08x8nsqf8h5WyZBQxmBliVoTUIJd0hECL6HpLE5U6wUnGEytZfBOInyxcMulp2+McBaBwqRa5QynTnbqiOD4JjeDKjIA7IxYv9EFGsnE8/ZHswDd4o8PGZljinDcj/J/Rh8KIRyJt5SIaUbwzbYGEK+RaGFdjz0HeqmBpFGMoB1DsPQwXvOnTP9mmRIJDhrAKntyodNiQDvO3F8yGGT4WF5PpuXP4sUC2gMYoENA1//dVVnk4LUNbEaaquKr7l2wZnryIPN0PcSXyBUDQ/eXbuQnwsy1InrROzqueqrkKv7DnVd8TVpDfauXr/y5BNPPHn3XXe/40Mf/oD75m/5VvzYn/1xHBzMgZSwuTUBAPzCL/7dP/zIxz70gc3trXh9b59jH8ogRa7tggIm4w20i1YqqwLCwEN6jLkejKvWnLFIgVXtZjTiw00CmnpcYFZ8cCGdwdLXrrRCCuICkOdwthBn1lQ+QCipVpX4WZ6f1yS6sFbL52wihGEQKJ5lZ0FkgFn+Pn4gOHG0BHEf5PdVld5l/heA1WBILzKJM4YVcYY8yIwfA6IGH2YJN0Ipg9F4hL7vMPQDoPj6cc5Jx7OCjwQlEZyUKMeP12u91mu91mu91uvlOPD2bQdtNCaTMZpxg+t716EGriWq6woH8xmOHD60q6FvevO3fqsZjyYpEfCWt7wFDz74IL77B74Xve/Qti0uPPeCjz48FyNdni1a3H7rMVTWYdF20EpjsZhBK82bEBi4xmHoeoTBS942IbJEyspATKVeKAsJ3GnLimfCilIkamv+/7VAd5LAfHJ+FtnarLWoxWqpkOWyDKVQNTViiGWTX1RBpZcbZ8sZQ52IIT15+hHlw2gLSBbNaIWoDSrHMJ8+eN4kgzfK3N3LMKXoAw91opJVVYV+8IAMp0hJal3yUAcoo+CcQd+yWmOshTaKc6SBCde5f9UaJk7DAEg9/OBxcHAA7wfYyiIMAQfTGQ4dPgyVcOFdf/1dP/e77/nQ7+8c2r3npZcuX7xy5aWvPfjAA08RRTLWYmt7GzcfP4HLl6+i77jeJXdaTsYbYpWMZYiczzpYY+GsxWw6Rd/3mGxMEAaPuua8X9u3XJESgCH0PJQlVs1CinDWwlWVWFkDgvelkoYVPCU9xZqBZ/K+5e5ZFMWdBzidZA4WF4CV1y9GvgasVpCzCBk6WT2yxnGONkYEgUMl4sZla9gMbS0rU1w7ZOTwJaFddKwIKyZCsxwpFHEhiRvLedO+75ewNbFB53wq5yxZSdOKM+AaQCTu8c0HJyjOA6likeGZtKh5SoEgGW35flqb0tUbBe1sBEDHY34qKlq2iyMqmIpVLypDM0r1U/ADAIW27zl7qy3atgNA0gPMXmdtVFGiQ/DcfywDRkyR6fKmgjEave8AqQqKPkr2WBW1VWkFa/l+YDUwiEJcYQgMlLLWcP7f8L0X5TCsqRsMgxcbdcWgrMj3b0iD9DJXktdnp4bWCkZXSJGw6OfcDx2Xbo/K1aAYpVqr23v8sccf/Gt/7b/sPnHf77k3vOFNsMYwpVwO7WaLaffilec/bp17ZrY/Q91UoGDhg2eL9cAd3EEzY2A0ahAGD68CalF2fd+jbmq+9toFW8o1H/BFigAltP2i9ExzrVcoEEGjdbEbG62LfZsSH/RAQIEZ4oXSx5slYJTn+TIOkXkMJBBBzu/mSAlf28uvZW0DaAU/545ko7kbODs2mNmnoWDkGtKF6pzBaypX16UEaAutDFv6lSlOB995UEqo6goU5T6TQx2jVXHmRAoI0d9InV6v9Vqv9Vqv9Vqvl9fAq8TKNXiPOCf41mNndxfjzQmGtke7WGA+mx+9dPFSbZXBhQsvqq888CC6bo4/80M/iL7vcevNN+E7vvMteOrJp7pxMzlIFA+uXruMSy+8AOscdOK8qR+km5ECDwEDb2BhFNM2s6LGnSEoO6OU4Con2TFWLgms8GQClcp1QyrlohDeYImNeEn65Kymcw4hsL1PaaZwKpZ5kBLg276opimBN85KQVsDteKmAxHCwNTipA1bScHxSGuZxBqjl07dBB89EFmFtpUtm0DrlplVU2kmDVvOfBIlGMtWPKO0dIWmol6rpARKFUVRd6xGhQFIAQADf6x1GDqPGFtUtYNVDuPxBkIYMJ/PoDQwqUZATFi0C1CMGFUN9ubXr3zk3g990BiNlNh6eOLETZjNDqAUQ6SuXrkGW1lM7BjeR3TDAOcsrNOYTmdYLFrUdY0jR45gun+AWbsQuyhbb4kYGHb92lUorTCZbKLvOu5vpYgUB9TVCEnbAsqhlKTflLK+JF2yWmiqqeQDtebsIaQ+SCWwDRUEq6xY5LmCJjGmGYAt9koqBy6iDpEqFwHFuHzfE0qePKvxfhj4cs7k76Rg9LLf2GiNkBhwlS3NSms4y1U9i/kCALh/WCdEGmRs5985Bj78yYM8b/ATdwkrwzneyAOtdRZQhhVhJFF+U9mwJ+J+VSWW4SSKlhGokY8emjJ1Wn7efL+hcOA42544PxuJr1PnKgxDv/xe0nnM5F+CdQauquDjQqqDpOZLs2JXN7WQ3iGDf5Subjn4Sko+LxVaML9nqtirWf8juKYGhYB+GITobjB0HWewNV9HfhgKhTolQiC+t4giKleh7zskGV7zQYeyrKZTiIjewzmGePGhAw/i3nsZkgz6tkVV1zhz6vS5Rdu2f/1df31za2MbfvBwhvP/APDhD37kyw8/+NCnjGZFHPIsVAI5qxs+KEJiWNfe3h4f5FgD7wNiiNjY2ARSwqJfiIshATDcUc1nLUgpCJVdIUlMAMTqdFIKStwFHHfxTJuX6yZnxzWWfeHZMSEPXqgVu/HyopEBeKVnOivFlFHPAtNatHM5bLTgr0zl0DLb/Zn8HRETd+qyM0jL78v3n60MBh/4kDEBRB7GmXwDlyw+xxNY5eYedz7sUUhI5IV4jrXCu17rtV7rtV7r9XIeeCtXwTqLuq5xfW8PddPAGI3FdI75vIU1BuNRvTMeNfrkmWvY2prg7JfO4iv3fwGvedU9+PL99+M/+Qv/Kc4/9zwG74eNzcn10PnFoc0dHPQzdNQyPCd4VBVTWm1VI/qArltgMtlAUtytmVRC6AceFECo6optnSEUQEqkgCiuNKXUCmxZVDKC9MUm7o8U2myO75LYorM11Ci2GWoFKKPFhprYFi3KAdSS9Bwple8dQ2SFr3wf3vmQwFuI+HvlPLIy3I/KJFMHilEoykxVpsBKSxQysDIWXmpvxqMRuqEHDaFkG430olIkkA/FLqoU26BVBNfWVPwz9X0PYxi8EwPB+xbWGjhXQWmhJLcdRvUI48kEfhhwve9gnMWR8VE+jDAK0XvM5zO2gSqNuq4xW8xAlLC7u4OoI8IQ4H2P+XSKuqoxmYwxeI9Ll18CkWdVSRFGGxNg0YK8R0qEelSj7wf4MDBIBqK6aHnviam9MQWEzhdyax74KBFoEKWRiUhiMVU5Ds6kXZXfR1Y8eRCSzG7eaEtuO6v7maKc1VituBoIgByMUCFwl6FL8r+2yjb2CAPDE5skG7NCpYrylXhTTUBKumTCY4oF+kVJBtwE7q3OSrXWbAVNbK7NPbskvzxJ1lsJ3EkbgyAUW83UM6TI13tRghMQ5JrUSkvNF0chkgB+OGdqYHMemFJxGpCodyl4LFFyEAp1hFIJpjKgkDh3S3kQV7BykEMU4bSD9wFaWTmcIPRxQKIo8CGGViXrpDNWw9UGMS4znsg2Y8XuD446a841U0JlXekydq5C9KwI8rNrYGUXOVvMXdkJwDAMYr12IB9gZMgNkZXkPMiFENA0NbQ2DM6qK8xnM7zujW/2SHpx8/Fb+VpMSSB4wBOPP/n8//hL/+M/P/nMqZNN04CSwny+gHWqZNZH0iPMLoa0kg8nHvo0H5rNZzMGvGkFUpypNtoU1wvb9Tm3nAIP+sYKyTgGUfz5mcVQM/k8vULAV1nHpQxgLpA0xZOrnGUua5tSnppXVz6ozB2+im37JTJCVABySnH2W1kj9GSS2EluEueqLWsN08UH7k4fuk5+llQcHiSANySFtvOw1qKq+JqKMaKqa4AIXcdOFej1tLte67Ve67Ve6/VyXtoPbInd2NiQSheFfuDsUlU5tN0CIdBGRDRHTxzF29/+DvzV//qncfudr8C9934MrZ9ha9Lg4Ycext7V/TPnn7vwxHQxCyEFVOMKFAlty0Mvb+4ZQOQ9bzR87KGsYhXCR1ilC5HUe6GsSg6QsgImP7ySnVKGEeXNrCCqZGPF/0uJpC+W/y5bElnU1bCOh8dMF2VLtNTGqCXgSEsvY87caqPLhs86B2ccDzQrNS5cGaRLTQ7E2pkSDxZasrnGMIRHGys1K0Y2oImreNqOAUZGw1ZVAQhZZ/lzDSt43gcMg+dXyPDAFSiKVTAW6q5SGu28w2LeQiuNpqlhrEHnOxjDkBstOeHeD+i6nqtifEC3aBGGwCRt66Qv2GE+azGdTuH7TsirFrayhTCdiFDXNZxzWMwX2L++hzB4BBkGKTGoa+gGxCD0XaKyEVVGganfWsBFlknTslGPktMGeJjLsCWopQqpMwitXCJ8KKJFM1pmeCE9uapcY0QECiSSloxvYsEvLgIBm2WAWGJrAl+rpEq2lQ9EeLDRKZNn+Wsts7qshmVF03seOjKkC1quz3zgojIMKpX6LQUUayznxKkMpVn9VkBRgZXhyABRrqsR0nlipdX7AB+CDL8M/skQrVy+6ipb8r5so+aL3xon9lViAByEPC2dqQwi00UBzHUvKSV0bc/3nADr+BApFTWxshUqx5ZdJL7e2NJsYJyGc5ZhQ1CIPpYBLVIUay5nMWMgBO+LRTb/7kQEbS1G44YBaqKOe98jyeFAIXZDcU2S/CxIXG9knUOIkTtfJee6s72LM+fODE88+YTPKnmgkJ8zwy//yv/0T59+5ukPbkwmZZBUhr9e5WpY4zDdmyIFCFzKIwTupJ1MJuwW0BXm0xn6vhPVWKGqazSjBs7ZAo3KM6fWHAWw2kklDxXYHz8X83WvkOKywi0KPCxXAknApNwLSg4TShFvZjOoZQevUkv3BNv92Y2hkipW6CSHihD7ODsz8j8MSQ4XExTlrD4T+I2WaiGBzymtUdU1V14lBaMsH6ARS97GCsBLni2UIqIPUs9likuHCeLrtV7rtV7rtV7r9bJUeGOKmB1MoVTCzu4WNsdbmC4OsJgv4KyBNQ513Ry/9OJl98STT+IVt9+JV9x1O/67n/tZPPrgI6jGDZ49fwGnTp08uz3Z/vDp06e/urG5ie2tHTz15FNwlYNWQF038BSQKKLrxLJoGP4Suk6yf7z/aUYNlLXoFh0y/Gdp/+Rhc1XtSkgMmiKx0WkjgCrpT5U9VsodojpXrnDeTSlwn6XYpJWRQVo248V2KRu5TH0lcHZOW95EMfSY1WGu8mDlljf+Qt6VGpiUmNaaf3ZjNPzAuTHlDMgnkGPVWYWIFHnY1ppJwpRkrFGsBhq7rFhJ0CU32fuhqClG1D6lIXlnBnJFHzCejOCJlcHgPS5fvgKjOT/MWWR+rX3Xy8/uEIRMO/S+1OVQZMAQd1ayjXU2XSASZynJE9oQ4GquwKLIQwRFgcEMPZx1UNogJCFji82XZKCixMAYCOWX0nKjLNoRv0aUbiD05gxvqY2KuQuX880Jcl2JqqlkKIYCDJSo+3oJTZOvo27YwIuaqVlp08RfX1EqFO0YqSibSmtYZWFMhc638jW539hog0geUUXEOGTWFveNqoQUqJBwc11SPqBJCmK/pZKPV2WKTzLQcL7bOSdKOMOj2H6PG+q98k0UYpBDA10OYyLRiiiXRCFNEgUIS9hcLrFRRnKfyy5tVntRhiKV2GnRdwtEIlhXicU5IoQe2gj0SA4suHbGiNIauSYnZfWe7eIUI+qqRiKFylTwwwDrFGCVHOYogedZhMiANOPY8psz0CoB3FaloQygs8dXQSqLwNdxGIDEyqi2CkpbPkzTQOi5v1ZRgqsqzBczbG5v6Lf/qbdbvleByjgA6H72b/93//TDH/7oP7v11lvpyuWrYs32aFyFlPgAQWmNXg2gFAWuB1DkZ9LgPVKMqOoRw+i0LbZjpyySSujCIK4FsGJKbPXn2IhCEscEU8KpOFkKXwE5Pq2WzgOlSj5XqUJHkC7fG9XdPPiq7ITJLwJEbc1gKvDBFsPb8nkP388a/CyJ0v+8LJ5DUd4T5HrESqZfcz88K8ZgZoMcdmqluQZtxS1itIOR7C5SwtB7AHQDrXq91mu91mu91mu9XmYD72QyYXWkcYgxYjqfw7kaiVpY50yIvjp85MjtR44e1e6Zkzhz6hSOHjuKt77hO3D/H3wZh48cxeOPPIXPf+GLnxjX449sbW++ePTIUexd20NT12jGDWZEiJQQBq4D0VDQxrFNUobQRAHJ8i6l63sow4MZ9yzGYkwLMYodVfJ6WizLKoGUDDJYWjELZTZbW6NHIgaWaCvqVUylhkgbAQdJrlAbA6s5P6uTEjJtRKSAytbQpkYfe86aDh5VVUNrJvCGEDjdKARXY8QaJ/Af71m1VlohCWHZOYfB92iqmmtSRRmMiVDXDQYfQDHByrCREhCil1oYtjSz+sHFGnnzZpRhFU1raKnd0IaptPWoQiSx98nnW2tgDVOUm5EVOmlC13aiYCrpSGYLoXMO3dDza5i0UF8556a0htEWVuyzQIKzlnOg0l8cKSIpMAhGsrVIKAMnb35j6ZLN3a45Y5g3ySotN9JlUy1DMW9a1WqBFIr6H0k6P1EyppSzh2BBMa3UoOTgodYyaEqWkjtsk3y9PBBphEKiEnK4YstxFCdASC1fK0khpoBEpoB7tDGS7+XOZB+G0kNKFOFqB1tV6NoFotj1K9fwdROXduVSZwQ+1FHGIHrPeVtxQoToy+vLtV2ZYMxqbQjELgnF+VoecFaGY1GYtbFQkUAhyJAr8Dgh3jI0iLgGR97bRLm+K/dec85Um2XvqTGsC0fi/H9IfGCSKGHwA1fGWAtlNCrN9lW+x7jDtRsGPrAIkQ+LPB9UsUvDADEhBi/dr0bU2gTnLDIJfvADd7aGBFgDawE/eBhnBYokVGxikFmMJLVBAaFnZbtyDs7VoMA1RrfddodNSVUPfO1ruPMVr0C3GC7+7M/+7L/67d/69/98e2trOjuYA8TKb4bvhRDRdT3GGxNsbE4wnU4RBBg1nkww9D1a38NqjdniQFwOSg4TCG3bcXRDDr/6oeMBXQ7oZMZDpISqqUAxwg+RD0t0NqtkuNRSoc3mmmWtkMQFpDedh95lxAAqZ8WXVmesVBLxpcgUcYhHh1QUWn2Ua1dJDnnFWi13ekwJGg5KnrvMO6BsrOcIABSgk7zfBiYDroyGAUMNtbFQicnW+TrPBzbOrnt412u91mu91mu9XrYDr7EamxubeOmlK1BKo++vo6kbbG1uwrD3bVQ5d9Ndd92Jt3zHt+NLn/8Crl66hHvf9yH87gc/gL//y7+C5y9dPv9Nr3vj048/8fBZ0ymoTuFgOkVTj7GYLUCR0IcOxljU1ahYyaLvOVuXWP0zRiNIR2YKJKRTgwgFSgFJcUY32zMpK64GSKRL3UxKS+iJeEyRRQOtuCKIEm+yo2TgspqgpLomCRBGm9UqGpnAFKGuR6BEMM7AJgsfeiStEGNCinzyT4lgrIHRSiivDHsJwReLn7UWdVNj8AMoCf01ZuIpKychEtNotYGCZ6uzNVBCkdVgEinFIJZDC0pLgBWBJIPnYWDQjBu0i1bALEAig957tuHmgSKw+tmMx1jMZogxoq4b7jitG/ihR0pgu7pSMDGBfOCh1VreNFsLP3hYa6CSLhVQVvo027ZHUzWI5JkwLPlA3u8qUfFTgQ0VEGqG48jwmPO5WFHzs+rHA5RsfnM3c1p2Mhf7bx6SeaxZsT9rscprqBShZCjGCu2ZAOikGNJEqvS9sntSrfTw8kEKMhBKapCUUJ7zz66liiUDvbhvWiz2AtfSlt0RXGPF0YBsKVbKLC3IKtuTpaNZBsoYYzkQgmbgUoxBbM16qW7LEK6t4YMqodtSCmJWVTcA4fLQ0LUdv0f5vjGqdM8SEQeP5dBCJ1Ws+krspkmeEUazk8Lkmi5k+FEqpOmIBEVLtZAUQ8eodMLKcEKqZEIjBe6yRoJNWgZIX6BkKqlSi6MURw2GYShfw2jD9VpQ0NoiIi4vzqTK4YwT8rqXaiYNtsI66Zwdhp4/LdL1h7769S8bXb359z/5hw/f94l73/fFz3/uo5Vz8yH08G2Qyiiu66nrBloHaM11Pm40hjUOcYilCipRgtOWDzeUYhs2lhbz7JIB8bXFz9b8DJAcdpJrJvCAraSPulj35R7Rmk8rmbNAWE6zfA9oLK95kkK3VG5WcJWVKLz5EKVQ9YEST4lpGUNggje7WYKP/O9D/vjsKJAe5hCG8meKCMoIHAtMA6dAHEWxpnQox8gHf1ppkBwAUeJDHi054hT4gIOwVnjXa73Wa73Wa71etgMvEeHyS1cwGjXcwdp10Jr7TCfNJu649c7Jm9/0psMUIs6cPoUXX7qEY8eP4pbbj+Mv/9W/hNe89vX42B/8wxdecfddB08+/vBiMZ+jamo0TYWhawFjmILsAyB5u94PvFGylitQAhMwo3SJWmu5W1K6LI3WAHGlTu64zPVEKfGAmYVApZaqATSkBxcFehKJeMMjljbeoMUl5MhA8pZYko9JrJApgiiIksob6K7lHlCjOXubs2xVNWJbtVRZKHB+j7O/hPHmJsKQKbEGRlv07QKVtawkGOmmjAnaVVCJh1BrrAzqJFAuXSqMbCFZi52bGLKVqzuUEoulysRcD1DCEALnYoU4rKTWJoQItL2ouRbRBwTwIML0U1YKdR4Kqoo7gClBWYWqtqW7mPPSoVi3IZteQoSxFjAGIFrWyCgFa/k9DoEBRdZaHoRD5KFG8WCSu5lRNrrLuipkQFXu6MxDc/44tcyBJ5GmqABk1bL+Jya2T8pwKCJU+bm0Zms4W+Q1tAypCcvcuYJGUlyFxP3O/PWtMoh62f9MQQBSCtLrK3UtkYqqTZKRNMbywUciGOeEFs3U80SsxiaQqHXshrCOq4ai0IeTDzyEKM0DkVoBZClh4QZipUwvld+skOUKpVUqb8IyL6+UqPWJR2RrxWEBJkorzW4CKl+UB36Gd/EhlELuyF0qxDGmQtXN1m6lxZYKvXSAJA2KfglAsgakVOk3ztdc7SxiCoBWiJ77w5UQp4NnZZMkOuE9H8DFQcB1+bBObO62stDgWiSSa8BoCyIeopPWSBR4oKKEJx574pn/5Vd+5ee2tnZvf/zJx57qh8X5phlBW87QMxuP2IESgLaTTl3DQ+R0Oi0VQEYy0AzV0kIBT3zN6SSgqSTX6BKKRongKoeYOKNNKbFDQfLQEOs5A8mWnc+QOznXUil5/wh8vWa3TYas5Xy5Sktiekp5EM796RwxWLnQZNjm60trA63A9XSU5BBTMuDl/pZBXv5tsNZBgQ8MUh66Y+Y88L1mNPcaU6Sl20By9BR0iQNwLlkVen4Ifr2bWK/1Wq/1Wq/1erkOvPN5i43xBJPJBnwI2NzaAFLCfLZAXY2SSlRtbW9sPfnkU7h69SX8pZ/6Kzh35jy8J9x05DZMNrehtTl49Otfm/W+x3g0RjfvhLLK8lruuI0xn8hrhrtInQtvojWCH6AFrBOzWhBDDoHxppZIfK56CRiSvKHKm7Bs0BQQkFbZ/qyXm2bFg4PRVr6GbKSURlKArdiu23fcIRwploqakjuEErAPYJyFNZyZ9CqCwJAThr5YIBG0sfBirxt6zqpaozGfzZFAGNWNZDwjrKnQ9m2W/DAMA6y2AtfS8DEi+AANzpwZy5sv33tRBjUrq6JwliFNacwFUqVheMOGIAcMvGF0dSUdl6bYx7OF1xiLYfDQRsHVjpUkJHg/wDgD57h2xSqLkFXtrJYrUzbASmlWr4MHEbEV3FoeskWtTUkhSkbSCAU2W2yzgEQp15IIj1XlQVdIzSmnvOWqkMsnK3+FKCuk7UzlzlU7ZcOOXE+UrZecUVzNDuZrlJVHURghdS9Y0l81uH4rk5B9CLCO66vYsVqOb5aVKzHCGK7ESSuE6ZQATx5GW0QKxY6cBLzGFGEq1tyUSHpF88ucYUR5QDQrUCldfvj82vIn5fsx9+tSGRrSShUQHxDxwRGku1gLyIlp26YQdPOgU0jHyHZqdnWwY4FW1GQSN4Au4DCGX2kenqW6SsmhipZe1tXfufeDgMgitHJwlQMN3LtMKWGFf8b5WMcHOjFX8YChYjxAAVrlkY0PIqxkirXWcKaSgx/OyFtnkFLEMPRwzoF0CqfOPvO0Uvrpuqoxbsbw0tMbQoQx/NoESqikqzofuogNhGt3VH7P2KLro8cgj9CcvWULOwnRnZ+Ngzx7QwSzBvKAKa8t08JzFjfHDVSJbCwzrEpq29ISnJYPTmg57GaFGGml1Cor9EkI+ch57nx7LmnIMnIXm7eW+ji+LlccB1GVgTXGwIccEQVWmCj/2yF08UhISsNYh5T4foLmPurVnC5n8Fn9ZSeCWe8m1mu91mu91mu9XqZLj8cTzOZzXLlyDbPpFNZZNFWD8WiC4D2uXL0cjx+/2b3zB9+J55+/iE9/6tPYm03xT/7ZvwapgPe977fxyY9/srv5xAlvrEUInMnNp/9KadRVDW2U9CAua4SywseKrULV1NDOIIgympU50JICW+BEYndVWjZPaQmPycCUFJfWuJjrYlSmjGZqrWQttSq9ukzhhQwJgLFGamggSkjCEDwiWBGp6xoUE9q+Q0gB1jjJGzKd2FiDkLjLMUE6dVOCj6xu1nUltGehR4PzdUwgZiq0MQYhegyh59cnAdYY/vymgTUOw+AFKsR0ZrYm8jBGAnph27BYUZFAMYCEhJ2VSvIE7wNM3sgphcoxLZcoIIGHba6L4SxyJEJlKxlME/99ZJUpBq7YQf7vDH3SnNnVojwPfV9Uwyi1TjlbmhIhxCBqOeTAQ4mDlPPbma6cxHOpipqUlSQhxq4SkZMSpanolYXQjLTMKOaROl9n7KrkzXDK2VzwYKeguPIGAnBSS6iWNlqUXAKlUHpsvR/k8ESJWim1LznXKkNXUjnbyDA3mbrYoisHElpr1LbigVRsmDzg8w9DKQlxlge0nNmEZGMD5UOUXCnENWFFOV85gBCfbjmJKMo6lgr26uuYbaZKSNNMESepbnIMfIoRMXB/qnMOxigYeQ+12K2zZZvfe1aKiRispMHXra0qJJUtvLEMrz4ERJl62HpuQCDMZjMMg1/Ss/Nhh2Y1vB8GPqgTJVVDS9c2VzUZw5R2QKPvB7R9B9b1jRzgEJxjEvx8NudDKefYUWEMrK0w3pjAOoveD8L+SuVgTgGwmntgozwnCBEhBrjKYTQZo25qVHXN1WdCGLfWYGOyAWeqMjMqGKmw8pxZTjwAUyIkyX2X9wuZ7E3lGuaDRQVFqlDMUSjjWLnmVFGQy5gq95xKN9x1WPnhil06ibWe77cEaHkeyHWa7/mYhDyfB9eUDzFzppydMF6qsax1TGOW+9k6s+xpV4DRrDIX273k7vl6YXU3xlXi/XozsV7rtV7rtV7r9XJdFkQYjxo09RgJhCsvXYarHCYbG9ja3kLvPQ0h4srl6/jWb3srbr/9DvS+xzu+662omxEqNcW4ctvXrh9oo6xYvKJkQ0XV0Qrj0QSUCItFK8OqcDmNhnUVQ1+0XvYtEkN6uNdUVK7EVjbeuDJBOBIPQQQStQbSSZo32Ss7EUqwtmYgSd7MKumxlZoWrTVM5cownAfOEAJyq2pKPPBVzQgqEfp+gDEOlWSBFRSstiDNdkmkhMbVDONSgDYMkVKKLZOmshhmrNKFISCmhNrV0Faja1veyENDOVeGopQi6rrGMHh0XStWvITKVWUjS4EVJQUFIyoFioU7FGqqXhmwMp0UkTD0Pat/SsEnv6KsMbAqeh7AALZRtos52wLldRiGXjbHCSkxvMhaC20Uhi4iIZYBj+FKktWFZtUrxjJ05I2p/ApIFIXAbJFSFGsyfyyDa/i9TfIzp5Xqk7RSYbIi1pb/zrbLVT1J6p2loordBCHbIWUvXzbbYg/WhgFgAMTWKtcakQxhCcmgdMAaw9U5iST3m/h1VtIvqjSWdVqkEMGdxEkOBhRMOQQZ/MD3gHTQZphQAh+UZPJ4ydPHIEOvvHTayJDIh1Ep52FNbh6iP1kuU9TsXHvDAh7fLzkHHbOiLF3Sq1nq4INk5wUgBbbSKr0cXDL76wYAksCMrHRlhzhAGy31MgwgiqJK6jz8xCg/x7I6SiuzPEyz4n0XGzgpgk5c/RUiyuAXV4bDKJlpaw1iDIieD7dUVn61grEaOvJr6LRFTDyA86FDwtD25dVMiq8lY/g9C0GOEsRWS1FquJQGkUEYInzgjH/lKiRK8IGvF+/Z+WGsgfcexnAFHXziSAHEzUBU1GjK3da0zNsqIWlro5Gi/M7lCljeO5CDBFVqneJKTEBD5TgBVkjdQCFhp5V7qlTP3VAbxh9gjWboVfTLzC+z+ZDtHEoZASCyVdmuRGmsYyCcH9i5keS5H6I8UzQfE5FUyeUDG+R/l4QOnunl67Ve67Ve67Ve6/XyW1oZ0Sq0QghcT2ONQTf06LpBWWPiEPp4fX8fh44cxtbmFvau7aE7mOL4LTfhwvPP40d++Ie2br/9Nj/4Hs4JXEktoVB932PeLtAPA1fj8NQgEB7OJiImOTFfql6JeDNR1RWM0qWWJ9fCcN9kKBAU2S+VXlYt6mQSOx/FiOA9fPBiTVVF7c1fm5XJKB2eA+fEwpIIap3DeDyBcxWP7NrB2gp15aAVKyEheAyDh3MO1hr0/YCu7+CchbUWVVVjMpmgqZh86lyF3c0dBM924tGkxqJbIFLExuYElWOKciSGZXFNEwOwcg2T0mJhVkrULpXPBZAQiyU0BvFpiqKt5X0gks7byATqnAUl6RctROQ8KEpXawhewD2GrcvQEs/NPaS8CVXGcPVMjBiGoRwM3MAVk/eKac1/YlAtAlASRTCJVzuVHtdsaUwEUFI8mNGSFLv0oaYbfpcy5ckhjIhMK7ZO+TlFTWbwGJWPzo5erVYGRoWisCWBneUBTSvDCpPSQnNOXNFECYPnDlWKDKZi1T+wFT9yt6pzlVCMxUArnc0kpN1h6EsXrNIKVuyYUV7PECLfV1XFfy52bB6kmSCsJaupZNOfLaDG2JKbhQK0KMpLsi4t+0qJs+V5SCnW5/xzS9du7gamGFcqpKhU32RXgDGu5EEFuy3/yW86iWoNMOgt+ogUuJIoq8wh8dfVypTsaMrXtljWY3YIaMP5+BhFxCb4yDndGJnWnnOrpaJHhkYmOztYa/ljYwDFiL4bAGg0zRhdz24Na6WeyziOBwjUjn8ujZQUFu0CQMIQBqa515UcPDAhWEGJ9ZkH2iW9mF/fYegRUhAQF7+3wQ9gMjfn7DliQpxT1vlQMLswDIwyYg3m50hMkR8j4g7QagmPK8wqQoG7KbVEvaWEGyFzKpX7I63Mz7nHt+Da5f9qnVuU1BImiJXsPTQKVB3E/07Ia0L5sEUeKvyckd8Vy/hLznwncRRY6/gQSwrVM0U9U8bXa73Wa73Wa73W6+W5bDvn3soQPOqGrXDaGAy+h49Bz2azrlsMs3tedRfOnDmFT3/qU3juwos4cdNtePe/eDfOnTvnf+BPv/P5M2dOPeeshR96aKsK5MUotnDmQVLLTqUZjeC955ynwIQYpBM5g6cUCMt8WYxMw0xRqkpWMls51Jkk10YgpJWqId5siSKkiPs+SUHpVDYqla2htS1KSAZRUYywjrOzxkc46zB4z9CnEFDVBvVkjKEfYHSNSD1/HhH6vsd4PEJVV1jM50gEzBdzzGZTFCkRQNd1MMag61s41Ljjlttx1VzD/vQAMREm4xE8PGhgJWg+70rHKoNXCJ4irLVwrkboW4bjSJZP50qdRDDWFiWXpyYwodRaBmIlpphCMoPGOBhRYBW4ogQy1PAhASvg2hgQWbanizqWhzIGUFnJbftiMTTayCBAJR/NlVCR3wfJaZZNL/cscTWRlmOOFFeYyiXEV2qo8iZcJb6eCCQW5jz0ZgVpacflTPfSHcB/pwpkhyWt5WBscmYSKBZeCDwspcRQI6Hr5oE7hCjKLMOmrHXoxdasleIDBYpIWpS2xLCsph6ViiHjWGUnQukgTmqZWfSeYA3nxKMM3loGGe/58Cn/QgpsMSfiSqVIedhRK3CqBApMAs8b/0RRYFis2t5gExf3QBI1T8nhBx9A6XJfKj6vyLyqMviQ1BYlFcswLc1S8vFJhnnOqOd8tdJGrhoNCNCtdA+nlXwp0srAm6AkI2yUQa4gQmS7vJKaHiBHmPnzM7Ct3Eulk1UcFXKIoIUmHKN0Q2uNlCJiICRwjZKzDtEzcIvk8wzH/7n2Rq6hGDy8HEY0dcNDfZIB1HC1WSTOIgtjqxCeY4wwSu5no+CqWrprNZJJiF6AckZDJ7O85rOdHzkOIoOt4cNNRBn01eowyxpxPizJ/PMM17ohk5vSir35Rg76sg1spe+Z2FLOZyax/ExJ4inFFSK3q5ZAsMp/l5VqZMJ0dvRoROLDoQytUnJ/WGehtEPfdit934mZBuVeWq/1Wq/1Wq/1Wq+X3cDbNAxK6vqOeyJjRIoexjjUtdNd13WPPfXotccefQTtbI6uW2Bv/wpedc89+NSnLuD1r3vDuc994Y/ed/L0qSe2NzcRAlOMh26ANgZaJXgfBZqiS1fq0HXc32pZTeJaHj5ZTxDLnGREXVUBmSrLgd7St6hloM6boQQlG3AmCJusbsXIypoQaNmWqqAV01TZ0mmKDa9yXMEzXyzgqophTIrrQKAU5osFNje2EaLHfD4HJR5Gbrn5Flzb32Nro2Ewzmw+xdD1/7dUgFtvuRUawPXpPnrPm2qmV3PfrnFs7Q4xADpBC4wmp02VYls1ZxDBnagpwYqqm0VxnQmuiaB5LuCqFiNdugKYUoBsxmXjmO3mSiEEggokSq8ulS6UmGBLYvtOYBAS98pGQIZooxlixpZYyfOlVZgMFYIyDxZ6pbKk0JdkE63lawjBVTKn2UZ7w0b6BgtzBvvkAxRdNvkqLb9X6enVEHsylq+FzNzZOp2xSSSqZpIuUq34WtZawYAp1Pn355oXg0iB1TGlYR0PuFGB3QlerJxJVHqTq4KWNCruY+bcbyAZJaRLVyf+ehQTjHNS05NEDVZL8jGWxHMt8LKYe2a15utB5ZcwreTiU3EXMBDLQFGS1yPDwRgMlXt2kdKS9qwBnXLPtMQNpF9Way1WYgGDxTxgljbWosrFXCEl9V/5QC0fFCmtYZRCAluQk0pwcr1yZRdnc5EPy4jz+EkJVCnxwLXaH5trtVhJDzcAvaLY2Zfd0PzfFPlgZj6bARqom5pV1MTVQipxZRK0FlCSFJZrrvjq/IIhaJqjF3VdieUWcFUlpPRUqpKU0nLYR9Ar93ciKnVvJDVKWI0B5FiB8BkCxaKMIkct8sGTRqHCl7c9S76rADQsnyNYAcYtk+B8gGW4jYs/xPBBmhFSc74Hl4org6QqgZexfV0OWCQOUVRkUuU+11ohhiCQNcm223w4ZtB3LfeYa6kci2L3Vsu+7vVar/Var/Var/V6GQ68bTuHsw4cu0wYjUbofQ8DhZ3t7XR1cxRevHhx/73veQ+c0jh8+DD2r1/FI4+3+OZv++aDD3/ww7955tlTH67rUZjNF7CGN/A5FwiBMWXfKqt6krOCRpCNPStGqVgPYwZOyTBKuYJEICU5B6kKWVcth6U81CEV6i9nFQU6FXhzx3UtBrZxSJJ1c3bZyWuchXEWMUXQIDa+RUJd19jZ3kEzajCdBjQbm4gxYGtjC8Zq9F2LfuhhNbj65//BuvD8hbKJ7qYLbGxtgRDgvZcKKYvpdCq/t2FVIxIiBalxUoUMnIgJztGHYic2QmglUTcpMlma876sUGtkAJUHwBCjXAXCKhSVihIGJ1HpKOXvscwGll5MDUQKUkOCFagRlUMNBkABK75GKJWBVGIbXc3YqhtVKBKKrip/hhtU4ITVbPeNvZ3l26obP2rZ2cv2x+KiV7ihgbN01yqmTGu1zEZCDnLYjSBOA2ix21NxOVCKnI2UvlSjWfk2yAFm7joNoZMBhjOKiApWOl6zvTWGiEBcyaMF4JR7rNu+BYjBWEywlqysAKvy/aNTGSX5dyR+hbVk0EFpdZQtOWaVllVL+dBASRcw5bMGSlxXlmvBxOIMtaxEgmYAER9ukdDX85vDXddKK7GZs8qoqLz7hSdAefgs7tiEkCJb0eWkw8dQri8th3R5MM3kdz5cSKXyKfd+L/0BQhqmEkQt0L0l/7ucFEBrViBjIhkkQ4YRFMdLtvs7ZxGi53hqJMzjwL2+iqFyKeZ7XMGa/B4G6dhmxVnpFWU9A/pkANda1Pk8RUIOKjXdQCnOL3+KtARWrbhWOD67hFat3Gmrky5KXKDcbMXus9IFHJEylV8qwiCRGbYkp+VwnBRfI7S8ZpPm50e2yEPAZ5BebI7O8PtBSKgtO3q6dmDQHgUYy0M0ESFphRRXXA7pRvV5vdZrvdZrvdZrvV5eSw/DAGUUYkxwrkbtagxdjxADXnzxBT+fz8Oh7d1n77n7nvTss8/hE/d9HCoBf+U//0u4+aabPv/8C8+/B8A+SKywiuFHdVXBWoOUFKq65oxZJN5sabb3FaInRVCMkvlMha6stEblnGRslWQLdYE9LUcNse4aKzlWyJAcy0CUwHY+70Ohv1rnAJXQ913JyBIi13mEgLZtpV6FN6NV7QSUFdG1HQ729qGVxWSygbvuuQu2Mjhz5hS6dg6SHO//25WEqHuwvwciVlai5P6MZuUMom64ysqekQcWlYdhLPtRtTasmGve5EYKUIbriay1UJZrmRIxA1YbA0CzOqdz7Q6rTybDjyRLm22vucLJGIPlKCT1JrnDVV5XEitqzoAW+FOhJC8HnxuspNBQmn+25ViqJGu5pKmWr7vqfVcrO3ZgSRPOmb5VElP50LSstcm54DINr9pjl32jy00+D0S5ciuJoqcKVVwqt+TnjrkHWgYloyxHA2ipRKlMoaZMXWZAkhbrePSBFT3DyhbnbzVC8PBhEOVaI0VanTZKb3SM3MOqtFCjFYq6nW2hOXdJOg8Vks3Pv5vWMkgv/cp5WEwrROoonbGr70mSvuelar60DaeIokKT3COKxFZOfNijtII2pti2s0KbCvEdhRwuTK1iay7OEUoIFOXal4E7UclOk6IbKOEE7iqO8hxUCrCZI0D5GoDUrfHIbx3n3EMMfMiQgOAjAMPPT8WvL4yS+DPnbZVRUFYoz0LeDqJe5yhHjAldO3C+3/HwG4kYfKZynzNBmews4H5Zkv7ibEMmiiUTnl9HvqhW7qoVe3I+WCmHErk3OgOfsnWgwNCWH1funYSSIS8HI0kJjEwVC7GSQ1TQUl1XK4o6oOG0k69HBYClDVfcpYTSpUuJJM7j0S167lGXj+eoAT9z+fCEv36OJSiztjSv13qt13qt13q9XJd1FVv4iBJm8yk0FCpbwXuPa9evxmY8wn33ffz3965ef8e1a5e/ezrfwzve/p349//m3535rff+1q/3Q3vS1SMeSmTTl5DYwqpYHfTDwBsoAIMPQEwIKsEaqadJXOMCSmKBZbAKj5+R87hitU3cBCObZ1pueGXI5VN+sbUqHowo5d7MJcE3RoKxGvVohKFrQSmhHtXcndkNUMagqh2SgFyUSvAhYnM05kyx9Ao3kwoJEWdOn8H1K5f/P3ujsu1vc3MbxhgMQxT1hPPQQz/AKLYnR0RYrWCMhiePBN4M8/DAeVAllT6IaZmfBaCIgS4ZHBZjhDMOPhD8MCAoXTasIQbORqplf62wjKQSiTfeRujE2e7Ke1uDhFgykDH3BOcCoJQ53mwdVdBATMVOnGT4kRdnqQ7mDW/Scs3wxl5DY7V3JMnHq/R/UYeS86ZqZYBdHbzkc5eBRXn9ct8zvwLQ5a+XmUcS5Yyru3gjH7NdV6ziWgYESAY5hAwdS6LA88FGzHpiAgDu1w2D58OLykpueUlDLkMfgCEFHpoyCGiVvq1iyWEmsdOq1dxtbs8lWjkQkKEnpkL+Lq9xLsLKFUTZvZFVdbHVlsx9VlzLcKWW9VDSPVxIwFBA0ohyCeRhnBLBCGwr0YrSqFZfs3TDYQUEXpd7Zvkpo8q1mdKSFG+0wRAHycirFUdrKod1Oim53FgJJrEZ53nPSkVYBNu6lQYQUOy/ORtNMa7kzgUGJ4qzhkGgAGc0ok5I0IU4jxSXVVgy0FW1g/e+HJ4wkElBW4b2xRCKCE4rVuN8gJQEEpfEHp3k8KUI2HL/GGXArvNUWrCVVlwPl5aTsM4ZYBBiSCVakA+6VAbZyWuiBDgGJMRMkpP7K6vtUUBb+ZonqQ0qHdkrFvTcw55ru7TijmyAyiHIxsYmhmGA771k2nnwzfZ+Y5ZVYuu1Xuu1Xuu1Xuv1Mhx4m7rBdDZDVVdoqhqLdgFjrdjRuPri/PPnH//qg/f/s/Fk/NJsf/aqb37zt+5+9L77/s1LVy5/crKxASiNvusZIOR55GUVtSp2PIpB9piKoSopAoqgk+EMqja8sZb8Vd6ERk9SB8O50JzP5OFCFVVAa83DNqXVWlBoDVSmYmW3iHhs/+0DYTy2cHUNDAPIE3ofUVXcYWqUBmmNwQ+icml0/QA/9BjVDY4cPYwLF57HlUuL/5Pd7/+r1bYdRqMRhs6jqi20smi7lnOzSQstOXCnrVWy2ebBzlUVA4uCKM+Zkh0CklYlR6mUgTHLjXOkbNvU5bVVRrOqJrbobEleKqiSYZQhTWmuQcnEU84ZL9V6LZtQKlncTPJdITnTUklKMu3m2ZNV4WXPs1rJ22aLap7MFPJAi7IZXwJ1pIO1DLjyuiCr0rlLVHbmq+VFksMFSFTi5WuqxZYM6TONQRTwFasvMrFcpRX6sAIlL0qXKJxFUcoQKh4EjDaIisQtwfCdPHzGEKTWiSFkIQzso02inGow6MgnHiLl986vRVqph+FKIzmQ0PlQQMvPlnPKupCWs+amEt2Qg1blMCAr7FQOMVLO3+LGOhoeQfnzSQZXfg85opBIlUEnUoSSAUvloTTTuKUKqpyxyFTFZGmSAwwwsCpfTepPKJnF0gyoxKR0Svyc0UkXC7XVBlHLfUTLAyaKAuIS54SXjLxWutj+rTGIgW7ItiZAhi0F73uAgAiIQqmhSTqcNcc4whCLUm+Mk+5sz12zAqSLOWce2Qqf6efMkVPFLpxjJUkI0UDut04lSECJf6BUXi9aPoeK/irqrDJMqQYhhL4cYCkOAReXR3ZJ8HPGCGFf8y9e3sMEZZYDOt+TrNCrwqnL9WXLCrFYDuMI2rpCRlfiWui7TqrrovAljKjOzCiw2mKIfr2bWK/1Wq/1Wq/1erkOvMMwwBoLqzRCDNz3GAN3FYJ7QTXMYr5ovwRtTjfjyd3v/cD7j5x//vk/ArAwxoBiQvA9tNawrkYMnhUNyqf9GjziJCgZuLRY7vL2USueTnmTKgqfKHBZrWULqGarGfEQoa0q3aY5u5soSW6MN70U6f8U0XSuQqUtfDcgacJkMkHbdYWQ6qxC3/echdQKm5MtVE2Dtm1BwWNU1zh37hy8ZGL//1iZ+Dt0Heqm5nwhsQpWNzW6rocPA7Y2d6A0sL+/B2XAncBixcw1TEmqXbRAvbTSCEm6WMXWyh3KtkB+mGjKGcMkakzJpCpAJc49FluwqPacxYvQ2kIZBZ0YHKZE2c8gnyX4SDbGlIeT/L4loT7LHlf9SVbMkr5MaakOr7B3CpW3ZC7VarIwLQt5M2snLTfLaeUiylndPDDFlVqstPJDJ40bfkilwVnZRDyQyucTEYwMWTElhiWJCp+QVUf+s0ABTjupIqICnXKW62O6EBCDHCwImRu59zdFdhhLxp4d66r0iqZIBRqmNXf6BtnMK6l8ikVaV2WE4ez0Uu3PALr8u5ZDh6zaZaX9TwDBlFrhXyvcACVLomQrpUArf6cSlc7UrKgqJaTttLSOU1oenqmUVgT61Q7ZZZ+yysO24nyzCPcMvgokarE8p3SCMgk6ivMkLTOvmXidlV29UnlDKZbvkwd9JfdOpp+H0JeO4EgELSRipRnsl5Dg82GEvHT5AFApDe1MUWz7vuPDkXwgAT7g0kaX52ShbishicsPnqTrXCMr50sMWb5A1Mr7j6SWijuxm8MoKyRrrj/yYQCRXaqucrCkjCn3v9FyeJEHYCI53FLLA4+VuAH765fKrpXKNMjro5RlCn2klQFbLTP0GWqm+EDKDwFGc8d1Els4NMqz0we/zvCu13qt13qt13q9jJcajyYgSoghoB5VSESoRyMopdG3Lba3dtHOW9SjerS1va2HfkHPPnfeJyDYypbhMkVWicwKHVYZVnr8MIBSlA5PtvZpgSY569C2HZwzICG3Oue44zJSyTrGtNIfS/x53PUZoJWRLFUqypKSGg5trAzeDFjJw1nTNPC9F0XDQlcOfuhgbC2bfkJlKyitsLO7wzkxBbjK4dTJk/+/Kbp/cjXNBE1Vs3ITIrRx6Lo5JpMJhr7Douuwvb0FEDCbzQqAKRNvM2VUSQ0HUeQsrGYVnvO/Qs0leT1XlfNsay31HmllyOOaEtwwWGfldmkTzZtvo6T7OPJ7q3SuBFJLoBbLgTyHlv7WG5i8ZWgspxnFcrz8C23YLhyJJFOqVkbkPOiWqRi5PgcQTVG+SVoZkBXSDTMyq1hpORyqbMtebsxZVccNNGNtlNh8dVGS871FkW39SEznRgJCYIq61oa7og1bMUlyoTGJSgfOfGYVvaoqQCn0XQ9jtNyzMpBKZVESAm+K8h5qI4TzJBlSGZKk64oSyeujQErBWS2HJQnWVtzFLWolH2yxHXW1XzkJrTmPmBDYlVoKiqUaqkDrZEhh4ngqTgOUgZWW/52dr5L1VSvD8lJ1TCX/vvoOL/uFc2c1xwMgB3ECiy+W/WKRL6CuTNEGQvSw1vBzsMD4ROFVplTsZEcBMpSPcu2OkaqutHx/Y4LVFgEekTh+EKQ3XBslNWScyc5nL0ZzdzKJvbfcf2lJj8r3d3YyaLMckFNKK6+cQNdEzdaZaL2KPke2NetlVZTYuzUUEqklXCxxhZMyhonJKZcC8fdkWNgKmDABgULpi84HZVoiMEYbmMogROLvHFipzRb9bBknAHVVQSmDfuhhLLubknx/rTQiAoxzHJ0Jqdih8wprlXe91mu91mu91utluf4PBYESAVsZNmgAAAAASUVORK5CYII=", + "lastWidth": 330, + "lastHeight": 65.24058532714844 + }, + "color": "#00000000", + "bgcolor": "#00000000", + "shape": 1, + "lastWidth": 330, + "lastHeight": 65.24058532714844, + "imageBase64": "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Y0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALEwAACxMBAJqcGAAABoJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDkuMS1jMDAyIDc5LmI3YzY0Y2MsIDIwMjQvMDcvMTYtMDc6NTk6NDAgICAgICAgICI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiB4bWxuczpwaG90b3Nob3A9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGhvdG9zaG9wLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCAyNi4xICgyMDI0MTAxOS5tLjI4MTUgYTI0OWQwNCkgIChXaW5kb3dzKSIgeG1wOkNyZWF0ZURhdGU9IjIwMjQtMTAtMjNUMTg6NTQ6NDQrMTE6MDAiIHhtcDpNb2RpZnlEYXRlPSIyMDI0LTEwLTIzVDE5OjIzOjMzKzExOjAwIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDI0LTEwLTIzVDE5OjIzOjMzKzExOjAwIiBkYzpmb3JtYXQ9ImltYWdlL3BuZyIgcGhvdG9zaG9wOkNvbG9yTW9kZT0iMyIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDoyYzZmNjdjNy02NTI1LTdjNDctYmU3MC01NmFmYWQ0Y2YzMmQiIHhtcE1NOkRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmNmNTZlYi03NTZhLWY3NGMtYmYwYS1lM2JlZmY1YWMxMWYiIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo5MmE5MDI5Ni1jOTE2LWUwNDgtYTM0My1jNjgwYmVjYWNkNTEiPiA8eG1wTU06SGlzdG9yeT4gPHJkZjpTZXE+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJjcmVhdGVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjkyYTkwMjk2LWM5MTYtZTA0OC1hMzQzLWM2ODBiZWNhY2Q1MSIgc3RFdnQ6d2hlbj0iMjAyNC0xMC0yM1QxODo1NDo0NCsxMTowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIDI2LjEgKDIwMjQxMDE5Lm0uMjgxNSBhMjQ5ZDA0KSAgKFdpbmRvd3MpIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJjb252ZXJ0ZWQiIHN0RXZ0OnBhcmFtZXRlcnM9ImZyb20gYXBwbGljYXRpb24vdm5kLmFkb2JlLnBob3Rvc2hvcCB0byBpbWFnZS9wbmciLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjJjNmY2N2M3LTY1MjUtN2M0Ny1iZTcwLTU2YWZhZDRjZjMyZCIgc3RFdnQ6d2hlbj0iMjAyNC0xMC0yM1QxOToyMzozMysxMTowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIDI2LjEgKDIwMjQxMDE5Lm0uMjgxNSBhMjQ5ZDA0KSAgKFdpbmRvd3MpIiBzdEV2dDpjaGFuZ2VkPSIvIi8+IDwvcmRmOlNlcT4gPC94bXBNTTpIaXN0b3J5PiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PpGGSOYAA3j5SURBVHja7P13uK5nWSYOn9ddnvLWtfZau+8kO72TBJJACiUUg4iAUgVEBAfEBiM4Kli+0XEcHXUc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" + }, + { + "id": 3961, + "type": "Note", + "pos": [ + 2130, + 790 + ], + "size": [ + 210, + 150 + ], + "flags": {}, + "order": 178, + "mode": 0, + "inputs": [], + "outputs": [], + "properties": {}, + "widgets_values": [ + "Canny: \nStrength=0.7, End=0.8\n\nDepth:\nStrength=0.8, End=0.8\n\nPose:\nStrength=0.9, End=0.65" + ], + "color": "#432", + "bgcolor": "#653" + }, + { + "id": 3974, + "type": "ControlNetSlider", + "pos": [ + 1760, + 800 + ], + "size": [ + 310, + 110 + ], + "flags": { + "collapsed": false, + "pinned": true + }, + "order": 179, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "VEC3", + "type": "VEC3", + "slot_index": 0, + "links": [ + 5988 + ] + } + ], + "title": "CN OpenPose", + "properties": { + "enableTabs": true, + "tabWidth": 65, + "tabXOffset": 150, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "aux_id": "robertvoy/Comfyui-Flux-Continuum", + "ver": "0524a071ad9f1b6a4012f083a610a7a7d5f2991a", + "Node name for S&R": "ControlNetSlider" + }, + "widgets_values": [ + 0, + 0, + 0.6500000000000001 + ], + "color": "#233", + "bgcolor": "#355" + }, + { + "id": 3973, + "type": "ControlNetSlider", + "pos": [ + 1760, + 800 + ], + "size": [ + 310, + 110 + ], + "flags": { + "collapsed": false, + "pinned": true + }, + "order": 180, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "VEC3", + "type": "VEC3", + "slot_index": 0, + "links": [ + 5987 + ] + } + ], + "title": "CN Depth", + "properties": { + "enableTabs": true, + "tabWidth": 65, + "tabXOffset": 80, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "aux_id": "robertvoy/Comfyui-Flux-Continuum", + "ver": "0524a071ad9f1b6a4012f083a610a7a7d5f2991a", + "Node name for S&R": "ControlNetSlider" + }, + "widgets_values": [ + 0, + 0, + 0.8000000000000002 + ], + "color": "#223", + "bgcolor": "#335" + }, + { + "id": 3972, + "type": "ControlNetSlider", + "pos": [ + 1760, + 800 + ], + "size": [ + 310, + 110 + ], + "flags": { + "collapsed": false, + "pinned": true + }, + "order": 181, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "VEC3", + "type": "VEC3", + "slot_index": 0, + "links": [ + 5986 + ] + } + ], + "title": "CN Canny", + "properties": { + "enableTabs": true, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "aux_id": "robertvoy/Comfyui-Flux-Continuum", + "ver": "0524a071ad9f1b6a4012f083a610a7a7d5f2991a", + "Node name for S&R": "ControlNetSlider" + }, + "widgets_values": [ + 0, + 0, + 0.8000000000000002 + ] + }, + { + "id": 3731, + "type": "OutputTextDisplay", + "pos": [ + 1100, + 120 + ], + "size": [ + 340, + 30 + ], + "flags": {}, + "order": 182, + "mode": 0, + "inputs": [], + "outputs": [], + "title": "Unnamed", + "properties": { + "fontSize": 16, + "fontFamily": "'Inter', Arial", + "fontColor": "#9c9c9c", + "textAlign": "center", + "bgColor": "#00000000", + "padding": 0 + }, + "bgcolor": "#00000000", + "shape": 1 + } + ], + "links": [ + [ + 1118, + 589, + 0, + 590, + 1, + "GUIDER" + ], + [ + 1120, + 593, + 0, + 590, + 3, + "SIGMAS" + ], + [ + 1123, + 586, + 0, + 593, + 0, + "MODEL" + ], + [ + 1187, + 641, + 0, + 644, + 0, + "*" + ], + [ + 1360, + 596, + 0, + 591, + 0, + "INT" + ], + [ + 1371, + 591, + 0, + 590, + 0, + "NOISE" + ], + [ + 1424, + 586, + 0, + 589, + 0, + "MODEL" + ], + [ + 1474, + 590, + 1, + 609, + 0, + "LATENT" + ], + [ + 1489, + 586, + 0, + 837, + 0, + "*" + ], + [ + 1490, + 837, + 0, + 834, + 0, + "*" + ], + [ + 1538, + 609, + 0, + 715, + 0, + "IMAGE" + ], + [ + 1599, + 933, + 0, + 932, + 0, + "BASIC_PIPE" + ], + [ + 1608, + 932, + 1, + 697, + 0, + "MODEL" + ], + [ + 1680, + 965, + 0, + 963, + 1, + "VAE" + ], + [ + 1745, + 1026, + 0, + 1023, + 0, + "IMAGE" + ], + [ + 1769, + 1052, + 0, + 1051, + 3, + "SIGMAS" + ], + [ + 1770, + 1054, + 0, + 1053, + 0, + "NOISE" + ], + [ + 1772, + 1055, + 0, + 1053, + 4, + "LATENT" + ], + [ + 1773, + 1051, + 0, + 1055, + 0, + "LATENT" + ], + [ + 1775, + 1057, + 0, + 1056, + 0, + "INT" + ], + [ + 1776, + 1056, + 0, + 1051, + 0, + "NOISE" + ], + [ + 1783, + 1060, + 0, + 1061, + 0, + "*" + ], + [ + 1786, + 1064, + 0, + 1060, + 1, + "VAE" + ], + [ + 1787, + 1053, + 1, + 1060, + 0, + "LATENT" + ], + [ + 1798, + 963, + 0, + 1073, + 0, + "LATENT" + ], + [ + 1800, + 1073, + 0, + 1072, + 2, + "LATENT" + ], + [ + 1802, + 1074, + 0, + 1075, + 0, + "*" + ], + [ + 1803, + 1072, + 0, + 1074, + 0, + "LATENT" + ], + [ + 1804, + 965, + 0, + 1074, + 1, + "VAE" + ], + [ + 1863, + 1103, + 0, + 1116, + 0, + "*" + ], + [ + 1867, + 1128, + 0, + 1129, + 0, + "IMAGE" + ], + [ + 1868, + 1129, + 0, + 1130, + 0, + "IMAGE" + ], + [ + 1871, + 1129, + 0, + 1131, + 0, + "IMAGE" + ], + [ + 1879, + 1136, + 0, + 1134, + 1, + "VAE" + ], + [ + 1920, + 1162, + 0, + 1073, + 1, + "INT" + ], + [ + 1923, + 1134, + 0, + 1128, + 0, + "IMAGE" + ], + [ + 2000, + 1274, + 0, + 1217, + 0, + "FLOAT" + ], + [ + 2001, + 1279, + 0, + 1281, + 0, + "*" + ], + [ + 2002, + 1278, + 0, + 1280, + 0, + "*" + ], + [ + 2003, + 1282, + 0, + 1285, + 0, + "*" + ], + [ + 2004, + 1285, + 0, + 1072, + 7, + "STRING" + ], + [ + 2005, + 1286, + 0, + 1072, + 6, + "STRING" + ], + [ + 2006, + 1287, + 0, + 1288, + 0, + "*" + ], + [ + 2007, + 1288, + 0, + 1072, + 8, + "STRING" + ], + [ + 2018, + 1300, + 0, + 1293, + 1, + "INT" + ], + [ + 2034, + 1312, + 0, + 429, + 10, + "FLOAT" + ], + [ + 2035, + 1313, + 0, + 429, + 7, + "INT" + ], + [ + 2037, + 1317, + 0, + 593, + 1, + "COMBO" + ], + [ + 2038, + 1318, + 0, + 593, + 2, + "INT" + ], + [ + 2055, + 1328, + 0, + 1262, + 0, + "COMBO" + ], + [ + 2071, + 1323, + 0, + 963, + 0, + "IMAGE" + ], + [ + 2073, + 1346, + 0, + 1345, + 0, + "IMAGE" + ], + [ + 2087, + 834, + 0, + 1358, + 0, + "MODEL" + ], + [ + 2088, + 921, + 0, + 1358, + 1, + "CONDITIONING" + ], + [ + 2089, + 1358, + 0, + 1051, + 1, + "GUIDER" + ], + [ + 2090, + 1358, + 0, + 1053, + 1, + "GUIDER" + ], + [ + 2092, + 1359, + 0, + 1052, + 0, + "SIGMAS" + ], + [ + 2105, + 1099, + 0, + 1051, + 4, + "LATENT" + ], + [ + 2163, + 1339, + 0, + 1387, + 0, + "UPSCALE_MODEL" + ], + [ + 2165, + 1388, + 0, + 1387, + 1, + "IMAGE" + ], + [ + 2166, + 1388, + 0, + 703, + 0, + "IMAGE" + ], + [ + 2169, + 697, + 0, + 1389, + 1, + "MODEL" + ], + [ + 2171, + 932, + 5, + 1389, + 3, + "CONDITIONING" + ], + [ + 2172, + 932, + 3, + 1389, + 4, + "VAE" + ], + [ + 2173, + 708, + 0, + 1389, + 5, + "INT" + ], + [ + 2174, + 1218, + 0, + 1389, + 9, + "FLOAT" + ], + [ + 2175, + 1308, + 0, + 1389, + 6, + "INT" + ], + [ + 2176, + 1311, + 0, + 1389, + 8, + "COMBO" + ], + [ + 2177, + 1389, + 0, + 729, + 0, + "IMAGE" + ], + [ + 2202, + 1325, + 0, + 1404, + 0, + "IMAGE" + ], + [ + 2206, + 1408, + 0, + 873, + 0, + "IMAGE" + ], + [ + 2209, + 1404, + 0, + 1411, + 0, + "IMAGE" + ], + [ + 2210, + 1411, + 0, + 1405, + 0, + "*" + ], + [ + 2211, + 1411, + 0, + 429, + 0, + "IMAGE" + ], + [ + 2212, + 1410, + 0, + 1404, + 1, + "INT" + ], + [ + 2231, + 1406, + 0, + 1405, + 1, + "INT" + ], + [ + 2243, + 1405, + 0, + 429, + 6, + "INT" + ], + [ + 2278, + 1470, + 0, + 1134, + 0, + "LATENT" + ], + [ + 2305, + 1488, + 0, + 1095, + 0, + "INT" + ], + [ + 2313, + 1262, + 0, + 429, + 9, + "COMBO" + ], + [ + 2333, + 1515, + 0, + 1500, + 0, + "COMBO" + ], + [ + 2334, + 1500, + 0, + 590, + 2, + "SAMPLER" + ], + [ + 2335, + 1500, + 0, + 1518, + 0, + "*" + ], + [ + 2337, + 1520, + 0, + 1051, + 2, + "SAMPLER" + ], + [ + 2338, + 1520, + 0, + 1053, + 2, + "SAMPLER" + ], + [ + 2341, + 1523, + 0, + 429, + 8, + "COMBO" + ], + [ + 2342, + 1524, + 0, + 1389, + 7, + "COMBO" + ], + [ + 2344, + 1526, + 0, + 1072, + 5, + "STRING" + ], + [ + 2361, + 1534, + 0, + 1330, + 0, + "*" + ], + [ + 2380, + 726, + 0, + 624, + 0, + "IMAGE" + ], + [ + 2404, + 1618, + 0, + 586, + 1, + "FLOAT" + ], + [ + 2406, + 1620, + 0, + 697, + 1, + "FLOAT" + ], + [ + 2409, + 1623, + 0, + 1624, + 0, + "*" + ], + [ + 2410, + 1624, + 0, + 1072, + 9, + "STRING" + ], + [ + 2412, + 1627, + 0, + 1055, + 1, + "MASK" + ], + [ + 2418, + 1629, + 0, + 1617, + 0, + "FLOAT" + ], + [ + 2792, + 1344, + 0, + 1342, + 0, + "IMAGE" + ], + [ + 2793, + 1342, + 0, + 1343, + 0, + "IMAGE" + ], + [ + 3152, + 645, + 0, + 429, + 2, + "BASIC_PIPE" + ], + [ + 3212, + 2211, + 0, + 641, + 4, + "CONDITIONING" + ], + [ + 3214, + 2217, + 0, + 1090, + 1, + "INT" + ], + [ + 3362, + 2328, + 0, + 1072, + 1, + "CONDITIONING" + ], + [ + 3363, + 1079, + 0, + 1072, + 0, + "MODEL" + ], + [ + 3425, + 2364, + 0, + 2334, + 1, + "IMAGE" + ], + [ + 3426, + 717, + 0, + 2334, + 0, + "IMAGE" + ], + [ + 3432, + 1115, + 0, + 1103, + 1, + "CLIP" + ], + [ + 3447, + 2427, + 0, + 2428, + 0, + "*" + ], + [ + 3448, + 2429, + 0, + 1090, + 0, + "COMBO" + ], + [ + 3449, + 1090, + 1, + 586, + 2, + "INT" + ], + [ + 3450, + 1090, + 2, + 586, + 3, + "INT" + ], + [ + 3460, + 2435, + 0, + 2437, + 0, + "*" + ], + [ + 3461, + 2438, + 0, + 2436, + 0, + "SAMPLER_PARAMS" + ], + [ + 3463, + 2436, + 0, + 1508, + 0, + "COMBO" + ], + [ + 3464, + 2436, + 2, + 1271, + 0, + "COMBO" + ], + [ + 3465, + 2436, + 1, + 1510, + 0, + "STRING" + ], + [ + 3466, + 2436, + 3, + 1272, + 0, + "STRING" + ], + [ + 3481, + 1343, + 0, + 2453, + 0, + "IMAGE" + ], + [ + 3482, + 2453, + 0, + 2454, + 0, + "IMAGE" + ], + [ + 3492, + 2464, + 0, + 723, + 0, + "STRING" + ], + [ + 3493, + 2468, + 0, + 788, + 0, + "STRING" + ], + [ + 3494, + 2469, + 0, + 1105, + 0, + "MODEL" + ], + [ + 3499, + 2472, + 0, + 609, + 1, + "VAE" + ], + [ + 3509, + 2476, + 0, + 2211, + 0, + "CLIP" + ], + [ + 3543, + 1090, + 1, + 2507, + 0, + "*" + ], + [ + 3544, + 1090, + 2, + 2508, + 0, + "*" + ], + [ + 3717, + 1052, + 1, + 2600, + 0, + "*" + ], + [ + 3718, + 2600, + 0, + 1053, + 3, + "SIGMAS" + ], + [ + 3722, + 1051, + 1, + 1470, + 0, + "*" + ], + [ + 3723, + 1130, + 0, + 1627, + 0, + "*" + ], + [ + 4414, + 717, + 0, + 3000, + 0, + "IMAGE" + ], + [ + 4424, + 583, + 0, + 1114, + 0, + "CLIP" + ], + [ + 4425, + 594, + 0, + 832, + 0, + "VAE" + ], + [ + 4446, + 2219, + 0, + 1320, + 0, + "IMAGE" + ], + [ + 4514, + 1090, + 0, + 3032, + 0, + "*" + ], + [ + 4606, + 2454, + 0, + 3055, + 0, + "IMAGE" + ], + [ + 4607, + 3055, + 0, + 1346, + 0, + "IMAGE" + ], + [ + 4608, + 3055, + 1, + 3103, + 0, + "*" + ], + [ + 4666, + 3133, + 0, + 3132, + 1, + "INT" + ], + [ + 4668, + 3132, + 0, + 1389, + 0, + "IMAGE" + ], + [ + 4689, + 1086, + 0, + 3169, + 0, + "*" + ], + [ + 4690, + 3169, + 0, + 1072, + 4, + "STRING" + ], + [ + 4691, + 1219, + 0, + 3170, + 0, + "*" + ], + [ + 4692, + 3170, + 0, + 1072, + 10, + "STRING" + ], + [ + 4714, + 1340, + 0, + 3178, + 1, + "*" + ], + [ + 4715, + 1340, + 0, + 3182, + 1, + "*" + ], + [ + 4716, + 703, + 0, + 3178, + 0, + "*" + ], + [ + 4717, + 703, + 1, + 3182, + 0, + "*" + ], + [ + 4780, + 1602, + 0, + 3212, + 0, + "STRING" + ], + [ + 4781, + 3212, + 0, + 624, + 1, + "STRING" + ], + [ + 4782, + 3224, + 0, + 3213, + 0, + "CLIP" + ], + [ + 4784, + 3213, + 0, + 3214, + 1, + "CONDITIONING" + ], + [ + 4785, + 3218, + 0, + 3214, + 2, + "VAE" + ], + [ + 4786, + 3225, + 0, + 3214, + 3, + "IMAGE" + ], + [ + 4787, + 3226, + 0, + 3214, + 4, + "MASK" + ], + [ + 4788, + 3217, + 0, + 3215, + 0, + "MODEL" + ], + [ + 4789, + 3215, + 0, + 3216, + 0, + "MODEL" + ], + [ + 4790, + 3214, + 0, + 3216, + 1, + "CONDITIONING" + ], + [ + 4793, + 3227, + 0, + 3216, + 4, + "INT" + ], + [ + 4794, + 3228, + 0, + 3216, + 5, + "INT" + ], + [ + 4795, + 3216, + 0, + 3219, + 0, + "LATENT" + ], + [ + 4796, + 3218, + 0, + 3219, + 1, + "VAE" + ], + [ + 4801, + 3231, + 0, + 3216, + 7, + "COMBO" + ], + [ + 4803, + 3233, + 0, + 3216, + 6, + "COMBO" + ], + [ + 4805, + 3234, + 0, + 3238, + 0, + "*" + ], + [ + 4807, + 3219, + 0, + 3240, + 1, + "IMAGE" + ], + [ + 4809, + 3226, + 0, + 3241, + 0, + "*" + ], + [ + 4810, + 3225, + 0, + 3242, + 0, + "*" + ], + [ + 4814, + 3242, + 0, + 3245, + 0, + "*" + ], + [ + 4815, + 3241, + 0, + 3244, + 0, + "*" + ], + [ + 4818, + 3245, + 0, + 3240, + 0, + "IMAGE" + ], + [ + 4819, + 3240, + 0, + 3220, + 0, + "IMAGE" + ], + [ + 4827, + 3256, + 0, + 3246, + 0, + "CLIP" + ], + [ + 4829, + 3246, + 0, + 3247, + 1, + "CONDITIONING" + ], + [ + 4834, + 3248, + 0, + 3249, + 0, + "MODEL" + ], + [ + 4835, + 3247, + 0, + 3249, + 1, + "CONDITIONING" + ], + [ + 4836, + 3247, + 1, + 3249, + 2, + "CONDITIONING" + ], + [ + 4839, + 3260, + 0, + 3249, + 5, + "INT" + ], + [ + 4845, + 3267, + 0, + 3263, + 0, + "IMAGE" + ], + [ + 4849, + 3257, + 0, + 3265, + 0, + "*" + ], + [ + 4850, + 3264, + 0, + 3266, + 0, + "*" + ], + [ + 4851, + 3265, + 0, + 3267, + 0, + "*" + ], + [ + 4852, + 3268, + 0, + 3249, + 7, + "COMBO" + ], + [ + 4853, + 3269, + 0, + 3249, + 6, + "COMBO" + ], + [ + 4854, + 3263, + 0, + 712, + 0, + "*" + ], + [ + 4882, + 3264, + 0, + 3247, + 4, + "MASK" + ], + [ + 4896, + 3279, + 0, + 3263, + 1, + "IMAGE" + ], + [ + 4904, + 3283, + 0, + 3279, + 1, + "VAE" + ], + [ + 4911, + 3284, + 0, + 3283, + 0, + "*" + ], + [ + 4912, + 1291, + 0, + 3284, + 0, + "*" + ], + [ + 4913, + 3284, + 0, + 3247, + 2, + "VAE" + ], + [ + 4914, + 3265, + 0, + 3247, + 3, + "IMAGE" + ], + [ + 4916, + 3249, + 0, + 3279, + 0, + "LATENT" + ], + [ + 4917, + 1298, + 0, + 3249, + 4, + "INT" + ], + [ + 4919, + 3247, + 2, + 1293, + 0, + "LATENT" + ], + [ + 4920, + 1293, + 0, + 3249, + 3, + "LATENT" + ], + [ + 4921, + 3285, + 0, + 3249, + 8, + "FLOAT" + ], + [ + 4940, + 3302, + 0, + 1103, + 0, + "MODEL" + ], + [ + 4941, + 3164, + 0, + 1026, + 0, + "IMAGE" + ], + [ + 4945, + 3303, + 0, + 3248, + 0, + "MODEL" + ], + [ + 4966, + 3121, + 0, + 3264, + 0, + "*" + ], + [ + 4973, + 3323, + 0, + 3240, + 2, + "MASK" + ], + [ + 4974, + 3244, + 0, + 3323, + 0, + "MASK" + ], + [ + 4976, + 3327, + 0, + 3328, + 0, + "*" + ], + [ + 4977, + 3329, + 0, + 3055, + 2, + "INT" + ], + [ + 4979, + 3331, + 0, + 3323, + 1, + "INT" + ], + [ + 4980, + 3333, + 0, + 3332, + 1, + "INT" + ], + [ + 4981, + 3214, + 2, + 3332, + 0, + "LATENT" + ], + [ + 4982, + 3214, + 1, + 3216, + 2, + "CONDITIONING" + ], + [ + 4983, + 3332, + 0, + 3216, + 3, + "LATENT" + ], + [ + 4992, + 3342, + 0, + 3247, + 0, + "CONDITIONING" + ], + [ + 4995, + 3360, + 0, + 3343, + 1, + "CONDITIONING" + ], + [ + 4996, + 3344, + 0, + 3343, + 2, + "VAE" + ], + [ + 4998, + 3343, + 2, + 3345, + 0, + "LATENT" + ], + [ + 4999, + 3349, + 0, + 3345, + 1, + "INT" + ], + [ + 5000, + 3352, + 0, + 3346, + 0, + "LATENT" + ], + [ + 5001, + 3344, + 0, + 3346, + 1, + "VAE" + ], + [ + 5002, + 3346, + 0, + 3347, + 0, + "*" + ], + [ + 5003, + 3355, + 0, + 3352, + 0, + "MODEL" + ], + [ + 5004, + 3343, + 0, + 3352, + 1, + "CONDITIONING" + ], + [ + 5005, + 3343, + 1, + 3352, + 2, + "CONDITIONING" + ], + [ + 5006, + 3345, + 0, + 3352, + 3, + "LATENT" + ], + [ + 5007, + 3348, + 0, + 3352, + 4, + "INT" + ], + [ + 5008, + 3350, + 0, + 3352, + 5, + "INT" + ], + [ + 5012, + 3359, + 0, + 3360, + 0, + "CLIP" + ], + [ + 5013, + 3361, + 0, + 3363, + 0, + "*" + ], + [ + 5014, + 3362, + 0, + 3364, + 0, + "*" + ], + [ + 5015, + 3365, + 0, + 3343, + 0, + "CONDITIONING" + ], + [ + 5017, + 3367, + 0, + 641, + 3, + "CONDITIONING" + ], + [ + 5020, + 3369, + 0, + 3352, + 7, + "COMBO" + ], + [ + 5021, + 3370, + 0, + 3352, + 6, + "COMBO" + ], + [ + 5033, + 3374, + 0, + 3376, + 0, + "*" + ], + [ + 5034, + 3375, + 0, + 3377, + 0, + "*" + ], + [ + 5039, + 3380, + 0, + 3214, + 0, + "CONDITIONING" + ], + [ + 5045, + 3383, + 0, + 586, + 0, + "MODEL" + ], + [ + 5046, + 1117, + 0, + 3383, + 0, + "*" + ], + [ + 5051, + 3378, + 0, + 3386, + 0, + "*" + ], + [ + 5054, + 3386, + 0, + 3387, + 0, + "*" + ], + [ + 5055, + 3379, + 0, + 3388, + 0, + "*" + ], + [ + 5058, + 3388, + 0, + 3385, + 0, + "*" + ], + [ + 5071, + 3387, + 0, + 3397, + 0, + "*" + ], + [ + 5072, + 3385, + 0, + 3396, + 0, + "*" + ], + [ + 5082, + 3403, + 0, + 3402, + 0, + "VEC3" + ], + [ + 5166, + 3463, + 0, + 3450, + 0, + "CONDITIONING" + ], + [ + 5167, + 3462, + 0, + 3450, + 1, + "CONDITIONING" + ], + [ + 5168, + 3451, + 0, + 3450, + 2, + "VAE" + ], + [ + 5170, + 3450, + 2, + 3452, + 0, + "LATENT" + ], + [ + 5171, + 3456, + 0, + 3452, + 1, + "INT" + ], + [ + 5172, + 3459, + 0, + 3453, + 0, + "LATENT" + ], + [ + 5173, + 3451, + 0, + 3453, + 1, + "VAE" + ], + [ + 5174, + 3453, + 0, + 3454, + 0, + "*" + ], + [ + 5175, + 3460, + 0, + 3459, + 0, + "MODEL" + ], + [ + 5176, + 3450, + 0, + 3459, + 1, + "CONDITIONING" + ], + [ + 5177, + 3450, + 1, + 3459, + 2, + "CONDITIONING" + ], + [ + 5178, + 3452, + 0, + 3459, + 3, + "LATENT" + ], + [ + 5179, + 3455, + 0, + 3459, + 4, + "INT" + ], + [ + 5180, + 3457, + 0, + 3459, + 5, + "INT" + ], + [ + 5181, + 3461, + 0, + 3462, + 0, + "CLIP" + ], + [ + 5210, + 3490, + 0, + 3459, + 6, + "COMBO" + ], + [ + 5211, + 3488, + 0, + 3459, + 7, + "COMBO" + ], + [ + 5212, + 3458, + 0, + 3493, + 0, + "IMAGE" + ], + [ + 5237, + 3515, + 0, + 589, + 1, + "CONDITIONING" + ], + [ + 5238, + 3515, + 0, + 921, + 0, + "*" + ], + [ + 5319, + 1114, + 0, + 2476, + 0, + "*" + ], + [ + 5324, + 832, + 0, + 641, + 2, + "VAE" + ], + [ + 5325, + 2476, + 0, + 641, + 1, + "CLIP" + ], + [ + 5326, + 1117, + 0, + 641, + 0, + "MODEL" + ], + [ + 5327, + 1090, + 0, + 3548, + 0, + "*" + ], + [ + 5328, + 3548, + 0, + 3549, + 0, + "*" + ], + [ + 5329, + 3549, + 0, + 590, + 4, + "LATENT" + ], + [ + 5330, + 593, + 0, + 1359, + 0, + "*" + ], + [ + 5346, + 3569, + 0, + 3566, + 1, + "*" + ], + [ + 5350, + 3572, + 0, + 3571, + 1, + "*" + ], + [ + 5359, + 3578, + 0, + 3577, + 1, + "*" + ], + [ + 5362, + 3402, + 2, + 3407, + 0, + "*" + ], + [ + 5363, + 3407, + 0, + 3577, + 0, + "*" + ], + [ + 5366, + 3402, + 1, + 3582, + 0, + "*" + ], + [ + 5368, + 3582, + 0, + 3571, + 0, + "*" + ], + [ + 5369, + 932, + 4, + 1389, + 2, + "CONDITIONING" + ], + [ + 5370, + 3557, + 0, + 3338, + 0, + "IMAGE" + ], + [ + 5371, + 2774, + 0, + 3559, + 0, + "IMAGE" + ], + [ + 5374, + 3337, + 0, + 3584, + 0, + "*" + ], + [ + 5384, + 3367, + 0, + 3515, + 0, + "*" + ], + [ + 5452, + 3658, + 0, + 3450, + 3, + "IMAGE" + ], + [ + 5479, + 3679, + 0, + 3680, + 1, + "INT" + ], + [ + 5480, + 3679, + 1, + 3680, + 2, + "INT" + ], + [ + 5482, + 3458, + 0, + 3679, + 0, + "IMAGE" + ], + [ + 5483, + 3493, + 0, + 3680, + 0, + "IMAGE" + ], + [ + 5589, + 3330, + 0, + 3722, + 1, + "INT" + ], + [ + 5590, + 3266, + 0, + 3722, + 0, + "MASK" + ], + [ + 5591, + 3722, + 0, + 3263, + 2, + "MASK" + ], + [ + 5592, + 3555, + 0, + 3723, + 0, + "MASK" + ], + [ + 5593, + 3553, + 0, + 3723, + 1, + "INT" + ], + [ + 5610, + 3758, + 0, + 3757, + 4, + "STRING" + ], + [ + 5611, + 3291, + 0, + 3757, + 0, + "MODEL" + ], + [ + 5612, + 3506, + 0, + 3757, + 1, + "MODEL" + ], + [ + 5613, + 3507, + 0, + 3757, + 2, + "MODEL" + ], + [ + 5614, + 1106, + 0, + 3757, + 3, + "MODEL" + ], + [ + 5615, + 3757, + 0, + 3301, + 0, + "MODEL" + ], + [ + 5630, + 429, + 0, + 3773, + 1, + "IMAGE" + ], + [ + 5633, + 3773, + 0, + 1408, + 0, + "IMAGE" + ], + [ + 5634, + 3723, + 0, + 3778, + 0, + "*" + ], + [ + 5635, + 3778, + 0, + 3779, + 0, + "*" + ], + [ + 5636, + 3779, + 0, + 3773, + 2, + "MASK" + ], + [ + 5637, + 3780, + 0, + 3781, + 0, + "*" + ], + [ + 5638, + 1325, + 0, + 3780, + 0, + "*" + ], + [ + 5639, + 3781, + 0, + 3773, + 0, + "IMAGE" + ], + [ + 5642, + 3566, + 0, + 3783, + 0, + "*" + ], + [ + 5644, + 3390, + 0, + 3783, + 2, + "*" + ], + [ + 5651, + 3577, + 0, + 3785, + 0, + "*" + ], + [ + 5656, + 3571, + 0, + 3784, + 0, + "*" + ], + [ + 5661, + 3402, + 0, + 3787, + 0, + "*" + ], + [ + 5702, + 3386, + 0, + 3810, + 0, + "CLIP_VISION" + ], + [ + 5703, + 3336, + 0, + 3810, + 1, + "IMAGE" + ], + [ + 5713, + 3787, + 0, + 3566, + 0, + "*" + ], + [ + 5729, + 3395, + 0, + 3814, + 1, + "IMAGE" + ], + [ + 5730, + 3339, + 0, + 3812, + 1, + "IMAGE" + ], + [ + 5731, + 3387, + 0, + 3812, + 0, + "CLIP_VISION" + ], + [ + 5734, + 3397, + 0, + 3814, + 0, + "CLIP_VISION" + ], + [ + 5738, + 3783, + 0, + 3816, + 0, + "*" + ], + [ + 5741, + 3784, + 0, + 3817, + 0, + "*" + ], + [ + 5743, + 3817, + 0, + 3785, + 2, + "*" + ], + [ + 5752, + 3368, + 0, + 3828, + 0, + "CLIP" + ], + [ + 5753, + 793, + 0, + 3828, + 1, + "STRING" + ], + [ + 5754, + 724, + 0, + 3828, + 2, + "STRING" + ], + [ + 5755, + 1319, + 0, + 3828, + 3, + "FLOAT" + ], + [ + 5756, + 3828, + 0, + 3390, + 0, + "*" + ], + [ + 5804, + 3831, + 0, + 3210, + 0, + "*" + ], + [ + 5877, + 2219, + 1, + 1321, + 0, + "MASK" + ], + [ + 5882, + 3810, + 0, + 3920, + 2, + "CLIP_VISION_OUTPUT" + ], + [ + 5883, + 3388, + 0, + 3920, + 1, + "STYLE_MODEL" + ], + [ + 5884, + 3390, + 0, + 3920, + 0, + "CONDITIONING" + ], + [ + 5885, + 3787, + 0, + 3920, + 3, + "FLOAT" + ], + [ + 5887, + 3812, + 0, + 3922, + 2, + "CLIP_VISION_OUTPUT" + ], + [ + 5889, + 3582, + 0, + 3922, + 3, + "FLOAT" + ], + [ + 5890, + 3385, + 0, + 3922, + 1, + "STYLE_MODEL" + ], + [ + 5891, + 3816, + 0, + 3922, + 0, + "CONDITIONING" + ], + [ + 5892, + 3922, + 0, + 3784, + 1, + "*" + ], + [ + 5896, + 3829, + 0, + 3831, + 0, + "IMAGE" + ], + [ + 5900, + 3816, + 0, + 3784, + 2, + "*" + ], + [ + 5901, + 3920, + 0, + 3783, + 1, + "*" + ], + [ + 5902, + 3814, + 0, + 3924, + 2, + "CLIP_VISION_OUTPUT" + ], + [ + 5903, + 3817, + 0, + 3924, + 0, + "CONDITIONING" + ], + [ + 5904, + 3396, + 0, + 3924, + 1, + "STYLE_MODEL" + ], + [ + 5905, + 3407, + 0, + 3924, + 3, + "FLOAT" + ], + [ + 5906, + 3924, + 0, + 3785, + 1, + "*" + ], + [ + 5947, + 3949, + 0, + 3950, + 0, + "*" + ], + [ + 5982, + 3933, + 0, + 3976, + 0, + "*" + ], + [ + 5986, + 3972, + 0, + 3943, + 0, + "VEC3" + ], + [ + 5987, + 3973, + 0, + 3941, + 0, + "VEC3" + ], + [ + 5988, + 3974, + 0, + 3945, + 0, + "VEC3" + ], + [ + 5989, + 3975, + 0, + 3401, + 0, + "VEC3" + ], + [ + 5997, + 4021, + 0, + 3987, + 0, + "*" + ], + [ + 6002, + 4022, + 0, + 4000, + 4, + "VAE" + ], + [ + 6003, + 4031, + 0, + 4000, + 5, + "FLOAT" + ], + [ + 6009, + 4000, + 0, + 4005, + 0, + "CONDITIONING" + ], + [ + 6010, + 4000, + 1, + 4005, + 1, + "CONDITIONING" + ], + [ + 6013, + 4023, + 0, + 4005, + 4, + "VAE" + ], + [ + 6014, + 4034, + 0, + 4005, + 5, + "FLOAT" + ], + [ + 6017, + 4005, + 0, + 4006, + 0, + "CONDITIONING" + ], + [ + 6018, + 4005, + 1, + 4006, + 1, + "CONDITIONING" + ], + [ + 6021, + 4024, + 0, + 4006, + 4, + "VAE" + ], + [ + 6022, + 4037, + 0, + 4006, + 5, + "FLOAT" + ], + [ + 6050, + 4019, + 0, + 4018, + 0, + "SEGS" + ], + [ + 6053, + 4024, + 0, + 4018, + 4, + "VAE" + ], + [ + 6054, + 4037, + 0, + 4018, + 5, + "FLOAT" + ], + [ + 6057, + 4020, + 0, + 4019, + 0, + "SEGS" + ], + [ + 6060, + 4023, + 0, + 4019, + 4, + "VAE" + ], + [ + 6061, + 4034, + 0, + 4019, + 5, + "FLOAT" + ], + [ + 6064, + 4016, + 0, + 4020, + 0, + "SEGS" + ], + [ + 6067, + 4022, + 0, + 4020, + 4, + "VAE" + ], + [ + 6068, + 4031, + 0, + 4020, + 5, + "FLOAT" + ], + [ + 6073, + 4022, + 0, + 4023, + 0, + "*" + ], + [ + 6074, + 4023, + 0, + 4024, + 0, + "*" + ], + [ + 6076, + 3998, + 0, + 4026, + 0, + "*" + ], + [ + 6077, + 4026, + 0, + 4027, + 0, + "*" + ], + [ + 6078, + 4027, + 0, + 4028, + 0, + "*" + ], + [ + 6082, + 4032, + 0, + 4031, + 1, + "BOOLEAN" + ], + [ + 6086, + 4035, + 0, + 4034, + 1, + "BOOLEAN" + ], + [ + 6090, + 4038, + 0, + 4037, + 1, + "BOOLEAN" + ], + [ + 6100, + 4006, + 0, + 4014, + 0, + "CONDITIONING" + ], + [ + 6101, + 4006, + 1, + 4014, + 1, + "CONDITIONING" + ], + [ + 6102, + 4018, + 0, + 4021, + 0, + "SEGS" + ], + [ + 6103, + 4028, + 0, + 4006, + 2, + "CONTROL_NET" + ], + [ + 6104, + 4028, + 0, + 4018, + 1, + "CONTROL_NET" + ], + [ + 6105, + 4027, + 0, + 4005, + 2, + "CONTROL_NET" + ], + [ + 6106, + 4027, + 0, + 4019, + 1, + "CONTROL_NET" + ], + [ + 6107, + 4026, + 0, + 4000, + 2, + "CONTROL_NET" + ], + [ + 6108, + 4026, + 0, + 4020, + 1, + "CONTROL_NET" + ], + [ + 6110, + 4045, + 0, + 4000, + 1, + "CONDITIONING" + ], + [ + 6112, + 3785, + 0, + 3556, + 0, + "CONDITIONING" + ], + [ + 6114, + 4047, + 0, + 4045, + 0, + "CONDITIONING" + ], + [ + 6115, + 4047, + 0, + 4000, + 0, + "CONDITIONING" + ], + [ + 6116, + 4014, + 0, + 3340, + 0, + "CONDITIONING" + ], + [ + 6117, + 3556, + 0, + 3986, + 0, + "CONDITIONING" + ], + [ + 6118, + 3990, + 0, + 4048, + 0, + "VEC3" + ], + [ + 6119, + 4049, + 0, + 429, + 1, + "SEGS" + ], + [ + 6120, + 3723, + 0, + 4050, + 0, + "*" + ], + [ + 6121, + 3997, + 0, + 4016, + 0, + "MASK" + ], + [ + 6122, + 4051, + 0, + 4032, + 1, + "*" + ], + [ + 6128, + 4057, + 0, + 4056, + 0, + "IMAGE" + ], + [ + 6129, + 4056, + 0, + 4018, + 3, + "IMAGE" + ], + [ + 6130, + 4056, + 0, + 4006, + 3, + "IMAGE" + ], + [ + 6131, + 4048, + 1, + 4000, + 6, + "FLOAT" + ], + [ + 6132, + 4048, + 2, + 4000, + 7, + "FLOAT" + ], + [ + 6133, + 4048, + 1, + 4020, + 6, + "FLOAT" + ], + [ + 6134, + 4048, + 2, + 4020, + 7, + "FLOAT" + ], + [ + 6135, + 4048, + 0, + 4032, + 0, + "*" + ], + [ + 6136, + 4048, + 0, + 4031, + 0, + "*" + ], + [ + 6137, + 3993, + 0, + 4058, + 0, + "VEC3" + ], + [ + 6138, + 4058, + 1, + 4019, + 6, + "FLOAT" + ], + [ + 6139, + 4058, + 2, + 4019, + 7, + "FLOAT" + ], + [ + 6140, + 4058, + 1, + 4005, + 6, + "FLOAT" + ], + [ + 6141, + 4058, + 2, + 4005, + 7, + "FLOAT" + ], + [ + 6142, + 4058, + 0, + 4034, + 0, + "*" + ], + [ + 6143, + 4058, + 0, + 4035, + 0, + "*" + ], + [ + 6144, + 4059, + 1, + 4018, + 6, + "FLOAT" + ], + [ + 6145, + 4059, + 2, + 4018, + 7, + "FLOAT" + ], + [ + 6146, + 4059, + 1, + 4006, + 6, + "FLOAT" + ], + [ + 6147, + 4059, + 2, + 4006, + 7, + "FLOAT" + ], + [ + 6148, + 4059, + 0, + 4038, + 0, + "*" + ], + [ + 6149, + 4059, + 0, + 4037, + 0, + "*" + ], + [ + 6150, + 3994, + 0, + 4059, + 0, + "VEC3" + ], + [ + 6151, + 4044, + 0, + 4022, + 0, + "*" + ], + [ + 6152, + 4060, + 0, + 4035, + 1, + "*" + ], + [ + 6153, + 4061, + 0, + 4038, + 1, + "*" + ], + [ + 6161, + 4067, + 0, + 4068, + 0, + "IMAGE" + ], + [ + 6162, + 4068, + 0, + 4069, + 0, + "IMAGE" + ], + [ + 6165, + 3680, + 0, + 4069, + 1, + "IMAGE" + ], + [ + 6174, + 4069, + 0, + 3654, + 0, + "IMAGE" + ], + [ + 6178, + 4076, + 0, + 1331, + 0, + "INT" + ], + [ + 6179, + 3182, + 0, + 4079, + 2, + "INT" + ], + [ + 6180, + 3178, + 0, + 4079, + 1, + "INT" + ], + [ + 6181, + 1387, + 0, + 4079, + 0, + "IMAGE" + ], + [ + 6182, + 4079, + 0, + 1392, + 0, + "IMAGE" + ], + [ + 6183, + 4079, + 0, + 3132, + 0, + "IMAGE" + ], + [ + 6184, + 4074, + 0, + 4080, + 0, + "*" + ], + [ + 6185, + 4081, + 0, + 4082, + 0, + "VEC2" + ], + [ + 6188, + 4082, + 0, + 4068, + 1, + "FLOAT" + ], + [ + 6189, + 4082, + 1, + 4068, + 2, + "FLOAT" + ], + [ + 6190, + 4082, + 0, + 3493, + 1, + "FLOAT" + ], + [ + 6191, + 4082, + 1, + 3493, + 2, + "FLOAT" + ], + [ + 6193, + 4068, + 0, + 4087, + 0, + "*" + ], + [ + 6194, + 4088, + 0, + 4020, + 3, + "IMAGE" + ], + [ + 6195, + 4088, + 0, + 4000, + 3, + "IMAGE" + ], + [ + 6196, + 3680, + 0, + 4086, + 0, + "IMAGE" + ], + [ + 6197, + 4056, + 0, + 4090, + 0, + "*" + ], + [ + 6206, + 4099, + 0, + 4098, + 0, + "*" + ], + [ + 6208, + 4091, + 0, + 4099, + 1, + "INT" + ], + [ + 6209, + 4091, + 1, + 4099, + 2, + "INT" + ], + [ + 6212, + 4099, + 0, + 4101, + 1, + "IMAGE" + ], + [ + 6213, + 4101, + 0, + 4102, + 0, + "*" + ], + [ + 6214, + 4094, + 0, + 4103, + 0, + "IMAGE" + ], + [ + 6215, + 4103, + 0, + 4095, + 0, + "IMAGE" + ], + [ + 6216, + 4103, + 0, + 4101, + 0, + "IMAGE" + ], + [ + 6217, + 4093, + 0, + 4104, + 0, + "IMAGE" + ], + [ + 6218, + 4104, + 0, + 4091, + 0, + "IMAGE" + ], + [ + 6219, + 4104, + 0, + 4099, + 0, + "IMAGE" + ], + [ + 6220, + 4105, + 0, + 3343, + 3, + "IMAGE" + ], + [ + 6221, + 4106, + 0, + 4019, + 3, + "IMAGE" + ], + [ + 6222, + 4106, + 0, + 4005, + 3, + "IMAGE" + ], + [ + 6223, + 3833, + 0, + 3829, + 0, + "IMAGE" + ], + [ + 6239, + 922, + 0, + 3830, + 0, + "INT" + ] + ], + "groups": [ + { + "id": 37, + "title": "Depth Mask", + "bounding": [ + 7320, + -220, + 835, + 289 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + }, + { + "id": 43, + "title": "", + "bounding": [ + 830.17724609375, + 90.28895568847656, + 890.865966796875, + 989.3416748046875 + ], + "font_size": 12, + "flags": { + "pinned": true + } + }, + { + "id": 33, + "title": "Basic Pipe Setup + Empty Latent", + "bounding": [ + 3600, + 100, + 1430, + 660 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + }, + { + "id": 32, + "title": "Text to Image", + "bounding": [ + 5050, + 100, + 1882.51953125, + 654.6351318359375 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + }, + { + "id": 30, + "title": "Noise Injection", + "bounding": [ + 6990, + 100, + 1852.53662109375, + 647.7285766601562 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + }, + { + "id": 42, + "title": "", + "bounding": [ + 1749.915771484375, + 120.41236114501953, + 330, + 470 + ], + "font_size": 12, + "flags": { + "pinned": true + } + }, + { + "id": 31, + "title": "FLUX Config", + "bounding": [ + 2990, + 100, + 590, + 1110 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + }, + { + "id": 41, + "title": "Output Selector", + "bounding": [ + 470, + 140, + 330, + 130 + ], + "font_size": 12, + "flags": {} + }, + { + "id": 39, + "title": "", + "bounding": [ + 470, + 270, + 330, + 300 + ], + "font_size": 12, + "flags": { + "pinned": true + } + }, + { + "id": 36, + "title": "", + "bounding": [ + 470, + 570, + 330, + 440 + ], + "font_size": 12, + "flags": { + "pinned": true + } + }, + { + "id": 35, + "title": "", + "bounding": [ + 1749.76123046875, + 591.859375, + 330.59259033203125, + 137.2823944091797 + ], + "font_size": 12, + "flags": { + "pinned": true + } + }, + { + "id": 34, + "title": "", + "bounding": [ + 1750.4066162109375, + 730.0758056640625, + 329.8945617675781, + 200.3811492919922 + ], + "font_size": 12, + "flags": { + "pinned": true + } + }, + { + "id": 20, + "title": "img2img", + "bounding": [ + 3600, + 780, + 1390, + 640 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + }, + { + "id": 29, + "title": "", + "bounding": [ + 1750.8255615234375, + 931.1278686523438, + 329.2669677734375, + 329.1338806152344 + ], + "font_size": 12, + "flags": { + "pinned": true + } + }, + { + "id": 27, + "title": "", + "bounding": [ + 470, + 1010, + 330, + 390 + ], + "font_size": 12, + "flags": {} + }, + { + "id": 28, + "title": "", + "bounding": [ + 831.2684326171875, + 1080.7266845703125, + 890, + 340 + ], + "font_size": 12, + "flags": { + "pinned": true + } + }, + { + "id": 25, + "title": "", + "bounding": [ + 1750, + 1260, + 330, + 140 + ], + "font_size": 12, + "flags": { + "pinned": true + } + }, + { + "id": 17, + "title": "Inpainting", + "bounding": [ + 3600, + 1440, + 3131.747314453125, + 880.1497192382812 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + }, + { + "id": 14, + "title": "Ultimate Upscaler", + "bounding": [ + 3600, + 3150, + 2080.63916015625, + 664.80419921875 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + }, + { + "id": 11, + "title": "Detailer", + "bounding": [ + 3600, + 3830, + 2620, + 860 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + }, + { + "id": 10, + "title": "Save Output", + "bounding": [ + -2910, + 150, + 866.1715698242188, + 305.7850341796875 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + }, + { + "id": 9, + "title": "Sampler Params Split", + "bounding": [ + -2030, + 150, + 690, + 230 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + }, + { + "id": 45, + "title": "Outpainting", + "bounding": [ + 3600, + 2340, + 2740, + 790 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + }, + { + "id": 48, + "title": "Depth", + "bounding": [ + 3600, + 4700, + 1750, + 720 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + }, + { + "id": 49, + "title": "Canny", + "bounding": [ + 3600, + 5440, + 1750, + 650 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + }, + { + "id": 50, + "title": "Model Router", + "bounding": [ + -1320, + 150, + 906.1168823242188, + 554.1303100585938 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + }, + { + "id": 51, + "title": "IP Adapter", + "bounding": [ + 4130, + 6150, + 4170, + 770 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + }, + { + "id": 55, + "title": "Play Sound Notification", + "bounding": [ + -3260, + 190, + 330, + 193.60000610351562 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + }, + { + "id": 65, + "title": "ControlNet", + "bounding": [ + 3600, + 6950, + 4700, + 580 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + }, + { + "id": 66, + "title": "Conditioning", + "bounding": [ + 3600, + 6110, + 5170, + 820 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + }, + { + "id": 68, + "title": "", + "bounding": [ + 1750, + 1400, + 330, + 150 + ], + "font_size": 12, + "flags": { + "pinned": true + } + }, + { + "id": 69, + "title": "Canny Preprocessor", + "bounding": [ + 3600, + 7550, + 1550, + 590 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + }, + { + "id": 70, + "title": "Depth Preprocessor", + "bounding": [ + 5170, + 7550, + 1610, + 590 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + }, + { + "id": 71, + "title": "Final Image", + "bounding": [ + -3840, + 150, + 920, + 247.19998168945312 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + }, + { + "id": 74, + "title": "", + "bounding": [ + 470, + 1400, + 330, + 150 + ], + "font_size": 12, + "flags": {} + } + ], + "config": {}, + "extra": { + "ds": { + "scale": 0.8390545288824074, + "offset": [ + -316.4446071725007, + -11.63362806022615 + ] + }, + "frontendVersion": "1.19.9", + "groupNodes": {}, + "VHS_latentpreview": false, + "VHS_latentpreviewrate": 0, + "VHS_MetadataImage": true, + "VHS_KeepIntermediate": true + }, + "version": 0.4 +} \ No newline at end of file diff --git a/comfyui-flux-continuum/workflow/Flux+ 1.7.0_release.json b/comfyui-flux-continuum/workflow/Flux+ 1.7.0_release.json new file mode 100644 index 0000000000000000000000000000000000000000..0afc89a8c91b2d65b931b6205978e083b1ecfcb4 --- /dev/null +++ b/comfyui-flux-continuum/workflow/Flux+ 1.7.0_release.json @@ -0,0 +1,24723 @@ +{ + "id": "72381480-a0d5-4292-88ec-5961ca04ee42", + "revision": 0, + "last_node_id": 4184, + "last_link_id": 6373, + "nodes": [ + { + "id": 1026, + "type": "ImagePass", + "pos": [ + 530, + 230 + ], + "size": [ + 210, + 30 + ], + "flags": { + "collapsed": true + }, + "order": 253, + "mode": 0, + "inputs": [ + { + "name": "image", + "shape": 7, + "type": "IMAGE", + "link": 4941 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 1745 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui-kjnodes", + "ver": "d835ac96042394299f76793544ee3643fd4b0457", + "Node name for S&R": "ImagePass" + }, + "widgets_values": [] + }, + { + "id": 3829, + "type": "ImagePass", + "pos": [ + -4240, + 280 + ], + "size": [ + 210, + 30 + ], + "flags": { + "collapsed": true + }, + "order": 230, + "mode": 0, + "inputs": [ + { + "name": "image", + "shape": 7, + "type": "IMAGE", + "link": 6223 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 5896 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui-kjnodes", + "ver": "c19ad3491691dde7219bc0dab17acefb81bd0be0", + "Node name for S&R": "ImagePass" + }, + "widgets_values": [] + }, + { + "id": 1346, + "type": "ImagePass", + "pos": [ + 1780, + 1020 + ], + "size": [ + 140, + 30 + ], + "flags": { + "collapsed": true + }, + "order": 420, + "mode": 0, + "inputs": [ + { + "name": "image", + "shape": 7, + "type": "IMAGE", + "link": 4607 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 2073 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui-kjnodes", + "ver": "d835ac96042394299f76793544ee3643fd4b0457", + "Node name for S&R": "ImagePass" + }, + "widgets_values": [] + }, + { + "id": 723, + "type": "SetNode", + "pos": [ + 1431.1396484375, + 1160.7176513671875 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 276, + "mode": 0, + "inputs": [ + { + "name": "STRING", + "type": "STRING", + "link": 3492 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_prompt", + "properties": { + "previousName": "prompt" + }, + "widgets_values": [ + "prompt" + ] + }, + { + "id": 788, + "type": "SetNode", + "pos": [ + 1590.7579345703125, + 1348.9764404296875 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 275, + "mode": 0, + "inputs": [ + { + "name": "STRING", + "type": "STRING", + "link": 3493 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "slot_index": 0, + "links": [] + } + ], + "title": "Set_tags", + "properties": { + "previousName": "tags" + }, + "widgets_values": [ + "tags" + ] + }, + { + "id": 873, + "type": "SetNode", + "pos": [ + 6120, + 6090 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 425, + "mode": 0, + "inputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "link": 2206 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_Output - detailer", + "properties": { + "previousName": "Output - detailer" + }, + "widgets_values": [ + "Output - detailer" + ], + "color": "#2a363b", + "bgcolor": "#3f5159" + }, + { + "id": 1023, + "type": "SetNode", + "pos": [ + 670, + 210 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 335, + "mode": 0, + "inputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "link": 1745 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_send", + "properties": { + "previousName": "send" + }, + "widgets_values": [ + "send" + ], + "color": "#2a363b", + "bgcolor": "#3f5159" + }, + { + "id": 1075, + "type": "SetNode", + "pos": [ + 4870, + 2930 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 393, + "mode": 0, + "inputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "link": 1802 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_Output - img2img", + "properties": { + "previousName": "Output - img2img" + }, + "widgets_values": [ + "Output - img2img" + ], + "color": "#2a363b", + "bgcolor": "#3f5159" + }, + { + "id": 1105, + "type": "SetNode", + "pos": [ + 3440, + 200 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 258, + "mode": 0, + "inputs": [ + { + "name": "MODEL", + "type": "MODEL", + "link": 3494 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "slot_index": 0, + "links": [] + } + ], + "title": "Set_model", + "properties": { + "previousName": "model" + }, + "widgets_values": [ + "model" + ], + "color": "#223", + "bgcolor": "#335" + }, + { + "id": 1217, + "type": "SetNode", + "pos": [ + 1938.784423828125, + 667.22509765625 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 263, + "mode": 0, + "inputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "link": 2000 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_denoise", + "properties": { + "previousName": "denoise" + }, + "widgets_values": [ + "denoise" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1271, + "type": "SetNode", + "pos": [ + -2140, + 230 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 293, + "mode": 0, + "inputs": [ + { + "name": "COMBO", + "type": "COMBO", + "link": 3464 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_scheduler", + "properties": { + "previousName": "scheduler" + }, + "widgets_values": [ + "scheduler" + ] + }, + { + "id": 1272, + "type": "SetNode", + "pos": [ + -2140, + 350 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 294, + "mode": 0, + "inputs": [ + { + "name": "STRING", + "type": "STRING", + "link": 3466 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_scheduler_name", + "properties": { + "previousName": "scheduler_name" + }, + "widgets_values": [ + "scheduler_name" + ] + }, + { + "id": 1508, + "type": "SetNode", + "pos": [ + -2140, + 270 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 291, + "mode": 0, + "inputs": [ + { + "name": "COMBO", + "type": "COMBO", + "link": 3463 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_sampler", + "properties": { + "previousName": "sampler" + }, + "widgets_values": [ + "sampler" + ] + }, + { + "id": 1510, + "type": "SetNode", + "pos": [ + -2140, + 310 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 292, + "mode": 0, + "inputs": [ + { + "name": "STRING", + "type": "STRING", + "link": 3465 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_sampler_name", + "properties": { + "previousName": "sampler_name" + }, + "widgets_values": [ + "sampler_name" + ] + }, + { + "id": 1617, + "type": "SetNode", + "pos": [ + 650, + 940 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 250, + "mode": 0, + "inputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "link": 2418 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_max shift", + "properties": { + "previousName": "max shift" + }, + "widgets_values": [ + "max shift" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 2428, + "type": "SetNode", + "pos": [ + 650, + 1350 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 251, + "mode": 0, + "inputs": [ + { + "name": "COMBO", + "type": "COMBO", + "link": 3447 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_resolution", + "properties": { + "previousName": "resolution" + }, + "widgets_values": [ + "resolution" + ] + }, + { + "id": 2437, + "type": "SetNode", + "pos": [ + 610, + 620 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 252, + "mode": 0, + "inputs": [ + { + "name": "SAMPLER_PARAMS", + "type": "SAMPLER_PARAMS", + "link": 3460 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_sampler params", + "properties": { + "previousName": "sampler params" + }, + "widgets_values": [ + "sampler params" + ] + }, + { + "id": 3103, + "type": "SetNode", + "pos": [ + 1830, + 1130 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 421, + "mode": 0, + "inputs": [ + { + "name": "MASK", + "type": "MASK", + "link": 4608 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_mask_outpainting", + "properties": { + "previousName": "mask_outpainting" + }, + "widgets_values": [ + "mask_outpainting" + ], + "color": "#1c5715", + "bgcolor": "#1f401b" + }, + { + "id": 3347, + "type": "SetNode", + "pos": [ + 5260, + 6860 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 410, + "mode": 0, + "inputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "link": 5002 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_Output - depth", + "properties": { + "previousName": "" + }, + "widgets_values": [ + "Output - depth" + ], + "color": "#2a363b", + "bgcolor": "#3f5159" + }, + { + "id": 3454, + "type": "SetNode", + "pos": [ + 5260, + 7630 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 411, + "mode": 0, + "inputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "link": 5174 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_Output - canny", + "properties": { + "previousName": "Output - canny" + }, + "widgets_values": [ + "Output - canny" + ], + "color": "#2a363b", + "bgcolor": "#3f5159" + }, + { + "id": 3559, + "type": "SetNode", + "pos": [ + 1880, + 220 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true, + "pinned": true + }, + "order": 278, + "mode": 0, + "inputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "link": 5371 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_loadImage_IP1", + "properties": { + "previousName": "loadImage_IP1" + }, + "widgets_values": [ + "loadImage_IP1" + ], + "color": "#2a363b", + "bgcolor": "#3f5159" + }, + { + "id": 3584, + "type": "SetNode", + "pos": [ + 1880, + 300 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true, + "pinned": true + }, + "order": 280, + "mode": 0, + "inputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "link": 5374 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_loadImage_IP3", + "properties": { + "previousName": "loadImage_IP3" + }, + "widgets_values": [ + "loadImage_IP3" + ], + "color": "#2a363b", + "bgcolor": "#3f5159" + }, + { + "id": 3338, + "type": "SetNode", + "pos": [ + 1880, + 260 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true, + "pinned": true + }, + "order": 279, + "mode": 0, + "inputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "link": 5370 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_loadImage_IP2", + "properties": { + "previousName": "loadImage_IP2" + }, + "widgets_values": [ + "loadImage_IP2" + ], + "color": "#2a363b", + "bgcolor": "#3f5159" + }, + { + "id": 1320, + "type": "SetNode", + "pos": [ + 1890, + 350 + ], + "size": [ + 210, + 60 + ], + "flags": { + "collapsed": true, + "pinned": true + }, + "order": 281, + "mode": 0, + "inputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "link": 4446 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "slot_index": 0, + "links": [] + } + ], + "title": "Set_loadImage", + "properties": { + "previousName": "loadImage" + }, + "widgets_values": [ + "loadImage" + ], + "color": "#2a363b", + "bgcolor": "#3f5159" + }, + { + "id": 1095, + "type": "SetNode", + "pos": [ + 520, + 1060 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 255, + "mode": 0, + "inputs": [ + { + "name": "INT", + "type": "INT", + "link": 2305 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_batch", + "properties": { + "previousName": "batch" + }, + "widgets_values": [ + "batch" + ], + "color": "#1b4669", + "bgcolor": "#29699c" + }, + { + "id": 3950, + "type": "SetNode", + "pos": [ + 1840, + 180 + ], + "size": [ + 210, + 60 + ], + "flags": { + "collapsed": true, + "pinned": true + }, + "order": 277, + "mode": 0, + "inputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "link": 5947 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_loadImage_ControlNet", + "properties": { + "previousName": "loadImage_ControlNet" + }, + "widgets_values": [ + "loadImage_ControlNet" + ], + "color": "#2a363b", + "bgcolor": "#3f5159" + }, + { + "id": 3943, + "type": "SetNode", + "pos": [ + 1830, + 810 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 272, + "mode": 0, + "inputs": [ + { + "name": "VEC3", + "type": "VEC3", + "link": 5986 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_cn_control_line", + "properties": { + "previousName": "cn_control_line" + }, + "widgets_values": [ + "cn_control_line" + ] + }, + { + "id": 3401, + "type": "SetNode", + "pos": [ + 1810, + 840 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true, + "pinned": true + }, + "order": 271, + "mode": 0, + "inputs": [ + { + "name": "VEC3", + "type": "VEC3", + "link": 5989 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_ipadapter_strenght", + "properties": { + "previousName": "ipadapter_strenght" + }, + "widgets_values": [ + "ipadapter_strenght" + ] + }, + { + "id": 3945, + "type": "SetNode", + "pos": [ + 1820, + 870 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true, + "pinned": true + }, + "order": 270, + "mode": 0, + "inputs": [ + { + "name": "VEC3", + "type": "VEC3", + "link": 5988 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_cn_control_pose", + "properties": { + "previousName": "cn_control_pose" + }, + "widgets_values": [ + "cn_control_pose" + ] + }, + { + "id": 3987, + "type": "SetNode", + "pos": [ + 8170, + 1390 + ], + "size": [ + 210, + 34 + ], + "flags": { + "collapsed": true + }, + "order": 432, + "mode": 0, + "inputs": [ + { + "name": "SEGS", + "type": "SEGS", + "link": 5997 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_segs_cnApplied", + "properties": { + "previousName": "" + }, + "widgets_values": [ + "segs_cnApplied" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 4050, + "type": "SetNode", + "pos": [ + 4290, + 6210 + ], + "size": [ + 210, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 305, + "mode": 0, + "inputs": [ + { + "name": "MASK", + "type": "MASK", + "link": 6120 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_mask_processed", + "properties": { + "previousName": "mask_processed" + }, + "widgets_values": [ + "mask_processed" + ], + "color": "#1c5715", + "bgcolor": "#1f401b" + }, + { + "id": 1321, + "type": "SetNode", + "pos": [ + 1930, + 390 + ], + "size": [ + 210, + 60 + ], + "flags": { + "collapsed": true, + "pinned": true + }, + "order": 282, + "mode": 0, + "inputs": [ + { + "name": "MASK", + "type": "MASK", + "link": 5877 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_mask", + "properties": { + "previousName": "mask" + }, + "widgets_values": [ + "mask" + ], + "color": "#1c5715", + "bgcolor": "#1f401b" + }, + { + "id": 3941, + "type": "SetNode", + "pos": [ + 1820, + 800 + ], + "size": [ + 210, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 269, + "mode": 0, + "inputs": [ + { + "name": "VEC3", + "type": "VEC3", + "link": 5987 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_cn_control_depth", + "properties": { + "previousName": "cn_control_depth" + }, + "widgets_values": [ + "cn_control_depth" + ] + }, + { + "id": 3340, + "type": "SetNode", + "pos": [ + 8210, + 1140 + ], + "size": [ + 260, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 431, + "mode": 0, + "inputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "link": 6116 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_conditioning", + "properties": { + "previousName": "conditioning" + }, + "widgets_values": [ + "conditioning" + ], + "color": "#332922", + "bgcolor": "#593930" + }, + { + "id": 1392, + "type": "SetNode", + "pos": [ + 4660, + 5460 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 373, + "mode": 0, + "inputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "link": 6182 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_Output - upscaler", + "properties": { + "previousName": "Output - upscaler" + }, + "widgets_values": [ + "Output - upscaler" + ], + "color": "#2a363b", + "bgcolor": "#3f5159" + }, + { + "id": 1331, + "type": "SetNode", + "pos": [ + 1870, + 1310 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 284, + "mode": 0, + "inputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "link": 6178 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_res multiply", + "properties": { + "previousName": "res multiply" + }, + "widgets_values": [ + "res multiply" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 4080, + "type": "SetNode", + "pos": [ + 1890, + 1450 + ], + "size": [ + 210, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 273, + "mode": 0, + "inputs": [ + { + "name": "VEC2", + "type": "VEC2", + "link": 6184 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_canny_slider", + "properties": { + "previousName": "canny_slider" + }, + "widgets_values": [ + "canny_slider" + ] + }, + { + "id": 1330, + "type": "SetNode", + "pos": [ + 1890, + 1310 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 283, + "mode": 0, + "inputs": [ + { + "name": "UPSCALE_MODEL", + "type": "UPSCALE_MODEL", + "link": 2361 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_upscale_model", + "properties": { + "previousName": "" + }, + "widgets_values": [ + "upscale_model" + ] + }, + { + "id": 3831, + "type": "SetNode", + "pos": [ + -4030, + 280 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 317, + "mode": 0, + "inputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "link": 5896 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 5804 + ] + } + ], + "title": "Set_final", + "properties": { + "previousName": "final" + }, + "widgets_values": [ + "final" + ], + "color": "#2a363b", + "bgcolor": "#3f5159" + }, + { + "id": 3830, + "type": "SetNode", + "pos": [ + 640, + 1200 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 285, + "mode": 0, + "inputs": [ + { + "name": "INT", + "type": "INT", + "link": 6239 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_seed", + "properties": { + "previousName": "seed" + }, + "widgets_values": [ + "seed" + ], + "color": "#1b4669", + "bgcolor": "#29699c" + }, + { + "id": 3376, + "type": "SetNode", + "pos": [ + 3440, + 950 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 254, + "mode": 0, + "inputs": [ + { + "name": "STYLE_MODEL", + "type": "STYLE_MODEL", + "link": 5033 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_model_redux", + "properties": { + "previousName": "model_redux" + }, + "widgets_values": [ + "model_redux" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 3364, + "type": "SetNode", + "pos": [ + 3440, + 830 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 265, + "mode": 0, + "inputs": [ + { + "name": "MODEL", + "type": "MODEL", + "link": 5014 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_model_canny", + "properties": { + "previousName": "model_canny" + }, + "widgets_values": [ + "model_canny" + ], + "color": "#223", + "bgcolor": "#335" + }, + { + "id": 3363, + "type": "SetNode", + "pos": [ + 3440, + 710 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 264, + "mode": 0, + "inputs": [ + { + "name": "MODEL", + "type": "MODEL", + "link": 5013 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_model_depth", + "properties": { + "previousName": "model_depth" + }, + "widgets_values": [ + "model_depth" + ], + "color": "#223", + "bgcolor": "#335" + }, + { + "id": 3238, + "type": "SetNode", + "pos": [ + 3440, + 590 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 259, + "mode": 0, + "inputs": [ + { + "name": "MODEL", + "type": "MODEL", + "link": 4805 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "slot_index": 0, + "links": null + } + ], + "title": "Set_model_fill", + "properties": { + "previousName": "model_fill" + }, + "widgets_values": [ + "model_fill" + ], + "color": "#223", + "bgcolor": "#335" + }, + { + "id": 832, + "type": "SetNode", + "pos": [ + 3440, + 320 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 257, + "mode": 0, + "inputs": [ + { + "name": "VAE", + "type": "VAE", + "link": 4425 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "slot_index": 0, + "links": [] + } + ], + "title": "Set_vae", + "properties": { + "previousName": "vae" + }, + "widgets_values": [ + "vae" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 729, + "type": "SetNode", + "pos": [ + 5510, + 5290 + ], + "size": [ + 252, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 409, + "mode": 0, + "inputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "link": 2177 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_Output - ultimate upscaler", + "properties": { + "previousName": "Output - ultimate upscaler" + }, + "widgets_values": [ + "Output - ultimate upscaler" + ], + "color": "#2a363b", + "bgcolor": "#3f5159" + }, + { + "id": 1116, + "type": "SetNode", + "pos": [ + 490, + 420 + ], + "size": [ + 285.375, + 58 + ], + "flags": { + "collapsed": false + }, + "order": 318, + "mode": 0, + "inputs": [ + { + "name": "MODEL", + "type": "MODEL", + "link": 6248 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_modelWithLoRAs", + "properties": { + "previousName": "modelWithLoRAs" + }, + "widgets_values": [ + "modelWithLoRAs" + ], + "color": "#223", + "bgcolor": "#335" + }, + { + "id": 3220, + "type": "SetNode", + "pos": [ + 6790, + 4570 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": false + }, + "order": 426, + "mode": 0, + "inputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "link": 6323 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_Output - outpainting", + "properties": { + "previousName": "Output - outpainting" + }, + "widgets_values": [ + "Output - outpainting" + ], + "color": "#2a363b", + "bgcolor": "#3f5159" + }, + { + "id": 712, + "type": "SetNode", + "pos": [ + 6650, + 3860 + ], + "size": [ + 210, + 60 + ], + "flags": { + "collapsed": false + }, + "order": 430, + "mode": 0, + "inputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "link": 6309 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_Output - inpainting", + "properties": { + "previousName": "Output - inpainting" + }, + "widgets_values": [ + "Output - inpainting" + ], + "color": "#2a363b", + "bgcolor": "#3f5159" + }, + { + "id": 1280, + "type": "SetNode", + "pos": [ + 640, + 740 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 260, + "mode": 0, + "inputs": [ + { + "name": "INT", + "type": "INT", + "link": 2002 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_steps", + "properties": { + "previousName": "steps" + }, + "widgets_values": [ + "steps" + ], + "color": "#1b4669", + "bgcolor": "#29699c" + }, + { + "id": 4135, + "type": "SetNode", + "pos": [ + 610, + 840 + ], + "size": [ + 210, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 261, + "mode": 0, + "inputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "link": 6341 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_guidance_slider", + "properties": { + "previousName": "guidance_slider" + }, + "widgets_values": [ + "guidance_slider" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 4090, + "type": "SetNode", + "pos": [ + 7110, + 1440 + ], + "size": [ + 275.17083740234375, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 309, + "mode": 0, + "inputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "link": 6197 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_Output - preprocessor openpose", + "properties": { + "previousName": "Output - preprocessor openpose" + }, + "widgets_values": [ + "Output - preprocessor openpose" + ], + "color": "#2a363b", + "bgcolor": "#3f5159" + }, + { + "id": 2508, + "type": "SetNode", + "pos": [ + 4840, + 2630 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 329, + "mode": 0, + "inputs": [ + { + "name": "INT", + "type": "INT", + "link": 3544 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_height", + "properties": { + "previousName": "height" + }, + "widgets_values": [ + "height" + ], + "color": "#1b4669", + "bgcolor": "#29699c" + }, + { + "id": 2507, + "type": "SetNode", + "pos": [ + 4840, + 2580 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 327, + "mode": 0, + "inputs": [ + { + "name": "INT", + "type": "INT", + "link": 3543 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_width", + "properties": { + "previousName": "width" + }, + "widgets_values": [ + "width" + ], + "color": "#1b4669", + "bgcolor": "#29699c" + }, + { + "id": 3032, + "type": "SetNode", + "pos": [ + 4840, + 2480 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 325, + "mode": 0, + "inputs": [ + { + "name": "LATENT", + "type": "LATENT", + "link": 4514 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_latent", + "properties": { + "previousName": "latent" + }, + "widgets_values": [ + "latent" + ], + "color": "#323", + "bgcolor": "#535" + }, + { + "id": 644, + "type": "SetNode", + "pos": [ + 4250, + 2370 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 360, + "mode": 0, + "inputs": [ + { + "name": "BASIC_PIPE", + "type": "BASIC_PIPE", + "link": 1187 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_pipe", + "properties": { + "previousName": "pipe" + }, + "widgets_values": [ + "pipe" + ], + "color": "#322", + "bgcolor": "hsla(0, 25%, 26.7%, 1)" + }, + { + "id": 1061, + "type": "SetNode", + "pos": [ + 9680, + 2310 + ], + "size": [ + 302.3999938964844, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 445, + "mode": 0, + "inputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "link": 1783 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_Output - txt2img noise injection", + "properties": { + "previousName": "Output - txt2img noise injection" + }, + "widgets_values": [ + "Output - txt2img noise injection" + ], + "color": "#2a363b", + "bgcolor": "#3f5159" + }, + { + "id": 715, + "type": "SetNode", + "pos": [ + 6740, + 2470 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 418, + "mode": 0, + "inputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "link": 1538 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_Output - txt2img", + "properties": { + "previousName": "Output - txt2img" + }, + "widgets_values": [ + "Output - txt2img" + ], + "color": "#2a363b", + "bgcolor": "#3f5159" + }, + { + "id": 1518, + "type": "SetNode", + "pos": [ + 6310, + 2700 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 330, + "mode": 0, + "inputs": [ + { + "name": "SAMPLER", + "type": "SAMPLER", + "link": 2335 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_sampler_convert", + "properties": { + "previousName": "sampler_convert" + }, + "widgets_values": [ + "sampler_convert" + ], + "color": "#614a4a", + "bgcolor": "#3b2c2c" + }, + { + "id": 1114, + "type": "SetNode", + "pos": [ + 3440, + 420 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 256, + "mode": 0, + "inputs": [ + { + "name": "CLIP", + "type": "CLIP", + "link": 4424 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "slot_index": 0, + "links": [] + } + ], + "title": "Set_clip", + "properties": { + "previousName": "clip" + }, + "widgets_values": [ + "clip" + ], + "color": "#432", + "bgcolor": "#653" + }, + { + "id": 3301, + "type": "SetNode", + "pos": [ + -830, + 340 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": false + }, + "order": 392, + "mode": 0, + "inputs": [ + { + "name": "MODEL", + "type": "MODEL", + "link": 6250 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "slot_index": 0, + "links": [] + } + ], + "title": "Set_sendModel", + "properties": { + "previousName": "sendModel" + }, + "widgets_values": [ + "sendModel" + ], + "color": "#223", + "bgcolor": "#335" + }, + { + "id": 3377, + "type": "SetNode", + "pos": [ + 3440, + 1050 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 262, + "mode": 0, + "inputs": [ + { + "name": "CLIP_VISION", + "type": "CLIP_VISION", + "link": 5034 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_model_clipVision", + "properties": { + "previousName": "model_clipVision" + }, + "widgets_values": [ + "model_clipVision" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 3976, + "type": "SetNode", + "pos": [ + 3440, + 1150 + ], + "size": [ + 210, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 266, + "mode": 0, + "inputs": [ + { + "name": "CONTROL_NET", + "type": "CONTROL_NET", + "link": 5982 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_model_controlnet", + "properties": { + "previousName": "model_controlnet" + }, + "widgets_values": [ + "model_controlnet" + ], + "color": "#156653", + "bgcolor": "#1c453b" + }, + { + "id": 3986, + "type": "SetNode", + "pos": [ + 8660, + 440 + ], + "size": [ + 210, + 50 + ], + "flags": { + "collapsed": true + }, + "order": 442, + "mode": 0, + "inputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "link": 6117 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_cond_redux", + "properties": { + "previousName": "cond_redux" + }, + "widgets_values": [ + "cond_redux" + ], + "color": "#332922", + "bgcolor": "#593930" + }, + { + "id": 4087, + "type": "SetNode", + "pos": [ + 4490, + 1650 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 354, + "mode": 0, + "inputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "link": 6193 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_canny_prep_cn", + "properties": { + "previousName": "canny_prep_cn" + }, + "widgets_values": [ + "canny_prep_cn" + ], + "color": "#2a363b", + "bgcolor": "#3f5159" + }, + { + "id": 4086, + "type": "SetNode", + "pos": [ + 4880, + 1880 + ], + "size": [ + 210, + 60 + ], + "flags": { + "collapsed": false + }, + "order": 380, + "mode": 0, + "inputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "link": 6196 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_canny_prep", + "properties": { + "previousName": "canny_prep" + }, + "widgets_values": [ + "canny_prep" + ], + "color": "#2a363b", + "bgcolor": "#3f5159" + }, + { + "id": 4098, + "type": "SetNode", + "pos": [ + 6430, + 1920 + ], + "size": [ + 210, + 50 + ], + "flags": { + "collapsed": true + }, + "order": 388, + "mode": 0, + "inputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "link": 6206 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_depth_prep", + "properties": { + "previousName": "depth_prep" + }, + "widgets_values": [ + "depth_prep" + ], + "color": "#2a363b", + "bgcolor": "#3f5159" + }, + { + "id": 4095, + "type": "SetNode", + "pos": [ + 5970, + 1640 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 314, + "mode": 0, + "inputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "link": 6215 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_depth_prep_cn", + "properties": { + "previousName": "depth_prep_cn" + }, + "widgets_values": [ + "depth_prep_cn" + ], + "color": "#2a363b", + "bgcolor": "#3f5159" + }, + { + "id": 1345, + "type": "SetNode", + "pos": [ + 1810, + 1060 + ], + "size": [ + 268.79998779296875, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 429, + "mode": 0, + "inputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "link": 2073 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_Output - imgload_prep", + "properties": { + "previousName": "Output - imgload_prep" + }, + "widgets_values": [ + "Output - imgload_prep" + ], + "color": "#2a363b", + "bgcolor": "#3f5159" + }, + { + "id": 3328, + "type": "SetNode", + "pos": [ + 1910, + 1460 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 274, + "mode": 0, + "inputs": [ + { + "name": "INT", + "type": "INT", + "link": 4976 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_mask_feather", + "properties": { + "previousName": "mask_feather" + }, + "widgets_values": [ + "mask_feather" + ], + "color": "#1b4669", + "bgcolor": "#29699c" + }, + { + "id": 4102, + "type": "SetNode", + "pos": [ + 6650, + 1690 + ], + "size": [ + 320, + 60 + ], + "flags": { + "collapsed": false + }, + "order": 406, + "mode": 0, + "inputs": [ + { + "name": "*", + "type": "*", + "link": 6363 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_Output - preprocessor depth", + "properties": { + "previousName": "Output - preprocessor depth" + }, + "widgets_values": [ + "Output - preprocessor depth" + ], + "color": "#2a363b", + "bgcolor": "#3f5159" + }, + { + "id": 3654, + "type": "SetNode", + "pos": [ + 4930, + 1720 + ], + "size": [ + 280, + 60 + ], + "flags": { + "collapsed": false + }, + "order": 399, + "mode": 0, + "inputs": [ + { + "name": "*", + "type": "*", + "link": 6359 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_Output - preprocessor canny", + "properties": { + "previousName": "Output - preprocessor canny" + }, + "widgets_values": [ + "Output - preprocessor canny" + ], + "color": "#2a363b", + "bgcolor": "#3f5159" + }, + { + "id": 1281, + "type": "SetNode", + "pos": [ + -1000, + 800 + ], + "size": [ + 210, + 60 + ], + "flags": { + "collapsed": false + }, + "order": 371, + "mode": 0, + "inputs": [ + { + "name": "*", + "type": "*", + "link": 6340 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_guidance", + "properties": { + "previousName": "guidance" + }, + "widgets_values": [ + "guidance" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 726, + "type": "GetNode", + "pos": [ + -3070, + 230 + ], + "size": [ + 313.42822265625, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 0, + "mode": 4, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 2380 + ] + } + ], + "title": "Get_final", + "properties": {}, + "widgets_values": [ + "final" + ], + "color": "#2a363b", + "bgcolor": "#3f5159" + }, + { + "id": 933, + "type": "GetNode", + "pos": [ + 4620, + 5410 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 1, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "BASIC_PIPE", + "type": "BASIC_PIPE", + "links": [ + 1599 + ] + } + ], + "title": "Get_pipe", + "properties": {}, + "widgets_values": [ + "pipe" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 965, + "type": "GetNode", + "pos": [ + 3810, + 2930 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 2, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "VAE", + "type": "VAE", + "slot_index": 0, + "links": [ + 1680, + 1804 + ] + } + ], + "title": "Get_vae", + "properties": {}, + "widgets_values": [ + "vae" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 1079, + "type": "GetNode", + "pos": [ + 4170, + 2980 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 3, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "slot_index": 0, + "links": [ + 3363 + ] + } + ], + "title": "Get_modelWithLoRAs", + "properties": {}, + "widgets_values": [ + "modelWithLoRAs" + ], + "color": "#223", + "bgcolor": "#335" + }, + { + "id": 1099, + "type": "GetNode", + "pos": [ + 7200, + 2440 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 4, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "LATENT", + "type": "LATENT", + "slot_index": 0, + "links": [ + 2105 + ] + } + ], + "title": "Get_latent", + "properties": {}, + "widgets_values": [ + "latent" + ], + "color": "#323", + "bgcolor": "#535" + }, + { + "id": 1117, + "type": "GetNode", + "pos": [ + 3770, + 2280 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 5, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "slot_index": 0, + "links": [ + 5046, + 5326 + ] + } + ], + "title": "Get_modelWithLoRAs", + "properties": {}, + "widgets_values": [ + "modelWithLoRAs" + ], + "color": "#223", + "bgcolor": "#335" + }, + { + "id": 1136, + "type": "GetNode", + "pos": [ + 7770, + 3040 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 6, + "mode": 4, + "inputs": [], + "outputs": [ + { + "name": "VAE", + "type": "VAE", + "slot_index": 0, + "links": [ + 1879 + ] + } + ], + "title": "Get_vae", + "properties": {}, + "widgets_values": [ + "vae" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 1162, + "type": "GetNode", + "pos": [ + 3950, + 3070 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 7, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "slot_index": 0, + "links": [ + 1920 + ] + } + ], + "title": "Get_batch", + "properties": {}, + "widgets_values": [ + "batch" + ], + "color": "#1b4669", + "bgcolor": "#29699c" + }, + { + "id": 1218, + "type": "GetNode", + "pos": [ + 5000, + 5570 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 8, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "slot_index": 0, + "links": [ + 2174 + ] + } + ], + "title": "Get_denoise", + "properties": {}, + "widgets_values": [ + "denoise" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1219, + "type": "GetNode", + "pos": [ + 4060, + 3410 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 9, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "slot_index": 0, + "links": [ + 4691 + ] + } + ], + "title": "Get_denoise", + "properties": {}, + "widgets_values": [ + "denoise" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1282, + "type": "GetNode", + "pos": [ + 4070, + 3250 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 10, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "slot_index": 0, + "links": [ + 2003 + ] + } + ], + "title": "Get_steps", + "properties": {}, + "widgets_values": [ + "steps" + ], + "color": "#1b4669", + "bgcolor": "#29699c" + }, + { + "id": 1287, + "type": "GetNode", + "pos": [ + 4050, + 3290 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 11, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "*", + "type": "*", + "slot_index": 0, + "links": [ + 2006 + ] + } + ], + "title": "Get_guidance", + "properties": {}, + "widgets_values": [ + "guidance" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1308, + "type": "GetNode", + "pos": [ + 5010, + 5480 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 12, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "slot_index": 0, + "links": [ + 2175 + ] + } + ], + "title": "Get_steps", + "properties": {}, + "widgets_values": [ + "steps" + ], + "color": "#1b4669", + "bgcolor": "#29699c" + }, + { + "id": 1311, + "type": "GetNode", + "pos": [ + 5000, + 5530 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 13, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "COMBO", + "type": "COMBO", + "links": [ + 2176 + ] + } + ], + "title": "Get_scheduler", + "properties": {}, + "widgets_values": [ + "scheduler" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1313, + "type": "GetNode", + "pos": [ + 4780, + 6250 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 14, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "slot_index": 0, + "links": [ + 2035 + ] + } + ], + "title": "Get_steps", + "properties": {}, + "widgets_values": [ + "steps" + ], + "color": "#1b4669", + "bgcolor": "#29699c" + }, + { + "id": 1317, + "type": "GetNode", + "pos": [ + 5770, + 2560 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 15, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "COMBO", + "type": "COMBO", + "links": [ + 2037 + ] + } + ], + "title": "Get_scheduler", + "properties": {}, + "widgets_values": [ + "scheduler" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1318, + "type": "GetNode", + "pos": [ + 5790, + 2600 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 16, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 2038 + ] + } + ], + "title": "Get_steps", + "properties": {}, + "widgets_values": [ + "steps" + ], + "color": "#1b4669", + "bgcolor": "#29699c" + }, + { + "id": 1323, + "type": "GetNode", + "pos": [ + 3730, + 3140 + ], + "size": [ + 280, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 17, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 2071 + ] + } + ], + "title": "Get_Output - imgload_prep", + "properties": {}, + "widgets_values": [ + "Output - imgload_prep" + ], + "color": "#2a363b", + "bgcolor": "#3f5159" + }, + { + "id": 1388, + "type": "GetNode", + "pos": [ + 3730, + 5450 + ], + "size": [ + 268.79998779296875, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 18, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 2165, + 2166 + ] + } + ], + "title": "Get_Output - imgload_prep", + "properties": {}, + "widgets_values": [ + "Output - imgload_prep" + ], + "color": "#2a363b", + "bgcolor": "#3f5159" + }, + { + "id": 1520, + "type": "GetNode", + "pos": [ + 7150, + 2400 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 19, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "SAMPLER", + "type": "SAMPLER", + "slot_index": 0, + "links": [ + 2337, + 2338 + ] + } + ], + "title": "Get_sampler_convert", + "properties": {}, + "widgets_values": [ + "sampler_convert" + ], + "color": "#614a4a", + "bgcolor": "#3b2c2c" + }, + { + "id": 1524, + "type": "GetNode", + "pos": [ + 5000, + 5620 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 20, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "COMBO", + "type": "COMBO", + "links": [ + 2342 + ] + } + ], + "title": "Get_sampler", + "properties": {}, + "widgets_values": [ + "sampler" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1602, + "type": "GetNode", + "pos": [ + -3490, + 300 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": false + }, + "order": 21, + "mode": 4, + "inputs": [], + "outputs": [ + { + "name": "STRING", + "type": "STRING", + "slot_index": 0, + "links": [ + 4780 + ] + } + ], + "title": "Get_prompt", + "properties": {}, + "widgets_values": [ + "prompt" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1623, + "type": "GetNode", + "pos": [ + 4040, + 3370 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 22, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "slot_index": 0, + "links": [ + 2409 + ] + } + ], + "title": "Get_max shift", + "properties": {}, + "widgets_values": [ + "max shift" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 2328, + "type": "GetNode", + "pos": [ + 4170, + 3020 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 23, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "slot_index": 0, + "links": [ + 3362 + ] + } + ], + "title": "Get_conditioning", + "properties": {}, + "widgets_values": [ + "conditioning" + ], + "color": "#332922", + "bgcolor": "#593930" + }, + { + "id": 2364, + "type": "GetNode", + "pos": [ + 1150, + 150 + ], + "size": [ + 268.79998779296875, + 58 + ], + "flags": { + "collapsed": true, + "pinned": true + }, + "order": 24, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 3425 + ] + } + ], + "title": "Get_loadImage", + "properties": {}, + "widgets_values": [ + "loadImage" + ], + "color": "#2a363b", + "bgcolor": "#3f5159" + }, + { + "id": 2438, + "type": "GetNode", + "pos": [ + -2620, + 290 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 25, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "SAMPLER_PARAMS", + "type": "SAMPLER_PARAMS", + "slot_index": 0, + "links": [ + 3461 + ] + } + ], + "title": "Get_sampler params", + "properties": {}, + "widgets_values": [ + "sampler params" + ] + }, + { + "id": 2472, + "type": "GetNode", + "pos": [ + 6400, + 2500 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 26, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "VAE", + "type": "VAE", + "slot_index": 0, + "links": [ + 3499 + ] + } + ], + "title": "Get_vae", + "properties": {}, + "widgets_values": [ + "vae" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 3133, + "type": "GetNode", + "pos": [ + 4490, + 5270 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 27, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "slot_index": 0, + "links": [ + 4666 + ] + } + ], + "title": "Get_batch", + "properties": {}, + "widgets_values": [ + "batch" + ], + "color": "#1b4669", + "bgcolor": "#29699c" + }, + { + "id": 3217, + "type": "GetNode", + "pos": [ + 5360, + 4610 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 28, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "links": [ + 4788 + ] + } + ], + "title": "Get_modelWithLoRAs", + "properties": {}, + "widgets_values": [ + "modelWithLoRAs" + ], + "color": "#223", + "bgcolor": "#335" + }, + { + "id": 3228, + "type": "GetNode", + "pos": [ + 5300, + 5000 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 29, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "slot_index": 0, + "links": [ + 4794 + ] + } + ], + "title": "Get_steps", + "properties": {}, + "widgets_values": [ + "steps" + ], + "color": "#1b4669", + "bgcolor": "#29699c" + }, + { + "id": 3260, + "type": "GetNode", + "pos": [ + 5290, + 4130 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 30, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "slot_index": 0, + "links": [ + 4839 + ] + } + ], + "title": "Get_steps", + "properties": {}, + "widgets_values": [ + "steps" + ], + "color": "#1b4669", + "bgcolor": "#29699c" + }, + { + "id": 3303, + "type": "GetNode", + "pos": [ + 5200, + 3820 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 31, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "slot_index": 0, + "links": [ + 4945 + ] + } + ], + "title": "Get_modelWithLoRAs", + "properties": {}, + "widgets_values": [ + "modelWithLoRAs" + ], + "color": "#223", + "bgcolor": "#335" + }, + { + "id": 3349, + "type": "GetNode", + "pos": [ + 4310, + 7150 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 32, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "slot_index": 0, + "links": [ + 4999 + ] + } + ], + "title": "Get_batch", + "properties": {}, + "widgets_values": [ + "batch" + ], + "color": "#1b4669", + "bgcolor": "#29699c" + }, + { + "id": 3359, + "type": "GetNode", + "pos": [ + 3740, + 6980 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 33, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "CLIP", + "type": "CLIP", + "slot_index": 0, + "links": [ + 5012 + ] + } + ], + "title": "Get_clip", + "properties": {}, + "widgets_values": [ + "clip" + ], + "color": "#432", + "bgcolor": "#653" + }, + { + "id": 3365, + "type": "GetNode", + "pos": [ + 3910, + 6930 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 34, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "slot_index": 0, + "links": [ + 5015 + ] + } + ], + "title": "Get_conditioning", + "properties": {}, + "widgets_values": [ + "conditioning" + ], + "color": "#332922", + "bgcolor": "#593930" + }, + { + "id": 3367, + "type": "GetNode", + "pos": [ + 3780, + 2330 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 35, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "slot_index": 0, + "links": [ + 5017, + 5384 + ] + } + ], + "title": "Get_conditioning", + "properties": {}, + "widgets_values": [ + "conditioning" + ], + "color": "#332922", + "bgcolor": "#593930" + }, + { + "id": 3378, + "type": "GetNode", + "pos": [ + 4590, + 260 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 36, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "CLIP_VISION", + "type": "CLIP_VISION", + "slot_index": 0, + "links": [ + 5051 + ] + } + ], + "title": "Get_model_clipVision", + "properties": {}, + "widgets_values": [ + "model_clipVision" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3379, + "type": "GetNode", + "pos": [ + 4610, + 210 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 37, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "STYLE_MODEL", + "type": "STYLE_MODEL", + "slot_index": 0, + "links": [ + 5055 + ] + } + ], + "title": "Get_model_redux", + "properties": {}, + "widgets_values": [ + "model_redux" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3403, + "type": "GetNode", + "pos": [ + 4370, + 340 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 38, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "VEC3", + "type": "VEC3", + "links": [ + 5082 + ] + } + ], + "title": "Get_ipadapter_strenght", + "properties": {}, + "widgets_values": [ + "ipadapter_strenght" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3456, + "type": "GetNode", + "pos": [ + 4300, + 7900 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 39, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "slot_index": 0, + "links": [ + 5171 + ] + } + ], + "title": "Get_batch", + "properties": {}, + "widgets_values": [ + "batch" + ], + "color": "#1b4669", + "bgcolor": "#29699c" + }, + { + "id": 3460, + "type": "GetNode", + "pos": [ + 4630, + 7710 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 40, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "slot_index": 0, + "links": [ + 5175 + ] + } + ], + "title": "Get_modelWithLoRAs", + "properties": {}, + "widgets_values": [ + "modelWithLoRAs" + ], + "color": "#223", + "bgcolor": "#335" + }, + { + "id": 3461, + "type": "GetNode", + "pos": [ + 3760, + 7830 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 41, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "CLIP", + "type": "CLIP", + "slot_index": 0, + "links": [ + 5181 + ] + } + ], + "title": "Get_clip", + "properties": {}, + "widgets_values": [ + "clip" + ], + "color": "#432", + "bgcolor": "#653" + }, + { + "id": 3463, + "type": "GetNode", + "pos": [ + 3910, + 7740 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 42, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "slot_index": 0, + "links": [ + 5166 + ] + } + ], + "title": "Get_conditioning", + "properties": {}, + "widgets_values": [ + "conditioning" + ], + "color": "#332922", + "bgcolor": "#593930" + }, + { + "id": 3488, + "type": "GetNode", + "pos": [ + 4550, + 8060 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 43, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "COMBO", + "type": "COMBO", + "links": [ + 5211 + ] + } + ], + "title": "Get_scheduler", + "properties": {}, + "widgets_values": [ + "scheduler" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3553, + "type": "GetNode", + "pos": [ + 3730, + 6250 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 44, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "slot_index": 0, + "links": [ + 5593 + ] + } + ], + "title": "Get_mask_feather", + "properties": {}, + "widgets_values": [ + "mask_feather" + ], + "color": "#1b4669", + "bgcolor": "#29699c" + }, + { + "id": 1086, + "type": "GetNode", + "pos": [ + 4020, + 3120 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 45, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "slot_index": 0, + "links": [ + 4689 + ] + } + ], + "title": "Get_seed", + "properties": {}, + "widgets_values": [ + "seed" + ], + "color": "#1b4669", + "bgcolor": "#29699c" + }, + { + "id": 1298, + "type": "GetNode", + "pos": [ + 5290, + 4090 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 46, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "slot_index": 0, + "links": [ + 4917 + ] + } + ], + "title": "Get_seed", + "properties": {}, + "widgets_values": [ + "seed" + ], + "color": "#1b4669", + "bgcolor": "#29699c" + }, + { + "id": 3227, + "type": "GetNode", + "pos": [ + 5300, + 4950 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 47, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "slot_index": 0, + "links": [ + 4793 + ] + } + ], + "title": "Get_seed", + "properties": {}, + "widgets_values": [ + "seed" + ], + "color": "#1b4669", + "bgcolor": "#29699c" + }, + { + "id": 708, + "type": "GetNode", + "pos": [ + 5010, + 5440 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 48, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "slot_index": 0, + "links": [ + 2173 + ] + } + ], + "title": "Get_seed", + "properties": {}, + "widgets_values": [ + "seed" + ], + "color": "#1b4669", + "bgcolor": "#29699c" + }, + { + "id": 1406, + "type": "GetNode", + "pos": [ + 4570, + 6230 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 49, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "slot_index": 0, + "links": [ + 2231 + ] + } + ], + "title": "Get_seed", + "properties": {}, + "widgets_values": [ + "seed" + ], + "color": "#1b4669", + "bgcolor": "#29699c" + }, + { + "id": 3344, + "type": "GetNode", + "pos": [ + 3960, + 6850 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 50, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "VAE", + "type": "VAE", + "slot_index": 0, + "links": [ + 4996, + 5001 + ] + } + ], + "title": "Get_vae", + "properties": {}, + "widgets_values": [ + "vae" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 3355, + "type": "GetNode", + "pos": [ + 4550, + 6900 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 51, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "slot_index": 0, + "links": [ + 5003 + ] + } + ], + "title": "Get_modelWithLoRAs", + "properties": {}, + "widgets_values": [ + "modelWithLoRAs" + ], + "color": "#223", + "bgcolor": "#335" + }, + { + "id": 3455, + "type": "GetNode", + "pos": [ + 4550, + 7890 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 52, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "slot_index": 0, + "links": [ + 5179 + ] + } + ], + "title": "Get_seed", + "properties": {}, + "widgets_values": [ + "seed" + ], + "color": "#1b4669", + "bgcolor": "#29699c" + }, + { + "id": 3457, + "type": "GetNode", + "pos": [ + 4540, + 7940 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 53, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "slot_index": 0, + "links": [ + 5180 + ] + } + ], + "title": "Get_steps", + "properties": {}, + "widgets_values": [ + "steps" + ], + "color": "#1b4669", + "bgcolor": "#29699c" + }, + { + "id": 3555, + "type": "GetNode", + "pos": [ + 3730, + 6200 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 54, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "MASK", + "type": "MASK", + "slot_index": 0, + "links": [ + 5592 + ] + } + ], + "title": "Get_mask", + "properties": {}, + "widgets_values": [ + "mask" + ], + "color": "#1c5715", + "bgcolor": "#1f401b" + }, + { + "id": 1312, + "type": "GetNode", + "pos": [ + 4770, + 6440 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 55, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "slot_index": 0, + "links": [ + 2034 + ] + } + ], + "title": "Get_denoise", + "properties": {}, + "widgets_values": [ + "denoise" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1523, + "type": "GetNode", + "pos": [ + 4750, + 6310 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 56, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "COMBO", + "type": "COMBO", + "links": [ + 2341 + ] + } + ], + "title": "Get_sampler", + "properties": {}, + "widgets_values": [ + "sampler" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1328, + "type": "GetNode", + "pos": [ + 4620, + 6380 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 57, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "COMBO", + "type": "COMBO", + "links": [ + 2055 + ] + } + ], + "title": "Get_scheduler", + "properties": {}, + "widgets_values": [ + "scheduler" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3998, + "type": "GetNode", + "pos": [ + 3720, + 1050 + ], + "size": [ + 250, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 58, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "CONTROL_NET", + "type": "CONTROL_NET", + "slot_index": 0, + "links": [ + 6076 + ] + } + ], + "title": "Get_model_controlnet", + "properties": {}, + "widgets_values": [ + "model_controlnet" + ], + "color": "#156653", + "bgcolor": "#1c453b" + }, + { + "id": 3451, + "type": "GetNode", + "pos": [ + 4000, + 7620 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 59, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "VAE", + "type": "VAE", + "slot_index": 0, + "links": [ + 5168, + 5173 + ] + } + ], + "title": "Get_vae", + "properties": {}, + "widgets_values": [ + "vae" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 4044, + "type": "GetNode", + "pos": [ + 3720, + 1100 + ], + "size": [ + 210, + 50 + ], + "flags": { + "collapsed": true + }, + "order": 60, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "VAE", + "type": "VAE", + "slot_index": 0, + "links": [ + 6151 + ] + } + ], + "title": "Get_vae", + "properties": {}, + "widgets_values": [ + "vae" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 4047, + "type": "GetNode", + "pos": [ + 3720, + 1150 + ], + "size": [ + 210, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 61, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [ + 6114, + 6115 + ] + } + ], + "title": "Get_cond_redux", + "properties": {}, + "widgets_values": [ + "cond_redux" + ], + "color": "#332922", + "bgcolor": "#593930" + }, + { + "id": 4049, + "type": "GetNode", + "pos": [ + 4760, + 6110 + ], + "size": [ + 210, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 62, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "SEGS", + "type": "SEGS", + "links": [ + 6119 + ] + } + ], + "title": "Get_segs_cnApplied", + "properties": {}, + "widgets_values": [ + "segs_cnApplied" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3997, + "type": "GetNode", + "pos": [ + 3720, + 1390 + ], + "size": [ + 210, + 50 + ], + "flags": { + "collapsed": true + }, + "order": 63, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "MASK", + "type": "MASK", + "slot_index": 0, + "links": [ + 6121 + ] + } + ], + "title": "Get_mask_processed", + "properties": {}, + "widgets_values": [ + "mask_processed" + ], + "color": "#1c5715", + "bgcolor": "#1f401b" + }, + { + "id": 3990, + "type": "GetNode", + "pos": [ + 4230, + 1250 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 64, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "VEC3", + "type": "VEC3", + "slot_index": 0, + "links": [ + 6118 + ] + } + ], + "title": "Get_cn_control_line", + "properties": {}, + "widgets_values": [ + "cn_control_line" + ] + }, + { + "id": 4057, + "type": "GetNode", + "pos": [ + 6520, + 1210 + ], + "size": [ + 246.25416564941406, + 50 + ], + "flags": { + "collapsed": true + }, + "order": 65, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 6128 + ] + } + ], + "title": "Get_loadImage_ControlNet", + "properties": {}, + "widgets_values": [ + "loadImage_ControlNet" + ], + "color": "#2a363b", + "bgcolor": "#3f5159" + }, + { + "id": 3993, + "type": "GetNode", + "pos": [ + 5390, + 1240 + ], + "size": [ + 210, + 50 + ], + "flags": { + "collapsed": true + }, + "order": 66, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "VEC3", + "type": "VEC3", + "slot_index": 0, + "links": [ + 6137 + ] + } + ], + "title": "Get_cn_control_depth", + "properties": {}, + "widgets_values": [ + "cn_control_depth" + ] + }, + { + "id": 3994, + "type": "GetNode", + "pos": [ + 7060, + 1240 + ], + "size": [ + 210, + 50 + ], + "flags": { + "collapsed": true + }, + "order": 67, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "VEC3", + "type": "VEC3", + "slot_index": 0, + "links": [ + 6150 + ] + } + ], + "title": "Get_cn_control_pose", + "properties": {}, + "widgets_values": [ + "cn_control_pose" + ] + }, + { + "id": 3368, + "type": "GetNode", + "pos": [ + 3720, + 540 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 68, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "CLIP", + "type": "CLIP", + "slot_index": 0, + "links": [ + 5752 + ] + } + ], + "title": "Get_clip", + "properties": {}, + "widgets_values": [ + "clip" + ], + "color": "#432", + "bgcolor": "#653" + }, + { + "id": 793, + "type": "GetNode", + "pos": [ + 3720, + 590 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 69, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "STRING", + "type": "STRING", + "slot_index": 0, + "links": [ + 5753 + ] + } + ], + "title": "Get_tags", + "properties": {}, + "widgets_values": [ + "tags" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 724, + "type": "GetNode", + "pos": [ + 3720, + 640 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 70, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "STRING", + "type": "STRING", + "slot_index": 0, + "links": [ + 5754 + ] + } + ], + "title": "Get_prompt", + "properties": {}, + "widgets_values": [ + "prompt" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1340, + "type": "GetNode", + "pos": [ + 3720, + 5550 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 71, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "slot_index": 0, + "links": [ + 4714, + 4715 + ] + } + ], + "title": "Get_res multiply", + "properties": {}, + "widgets_values": [ + "res multiply" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1339, + "type": "GetNode", + "pos": [ + 3730, + 5340 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 72, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "UPSCALE_MODEL", + "type": "UPSCALE_MODEL", + "slot_index": 0, + "links": [ + 2163 + ] + } + ], + "title": "Get_upscale_model", + "properties": {}, + "widgets_values": [ + "upscale_model" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 4081, + "type": "GetNode", + "pos": [ + 3710, + 1790 + ], + "size": [ + 210, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 73, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "VEC2", + "type": "VEC2", + "links": [ + 6185 + ] + } + ], + "title": "Get_canny_slider", + "properties": {}, + "widgets_values": [ + "canny_slider" + ] + }, + { + "id": 3458, + "type": "GetNode", + "pos": [ + 3720, + 1920 + ], + "size": [ + 211.00416564941406, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 74, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 5212, + 5482 + ] + } + ], + "title": "Get_Output - imgload_prep", + "properties": {}, + "widgets_values": [ + "Output - imgload_prep" + ], + "color": "#2a363b", + "bgcolor": "#3f5159" + }, + { + "id": 4067, + "type": "GetNode", + "pos": [ + 3710, + 1670 + ], + "size": [ + 211.00416564941406, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 75, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 6161 + ] + } + ], + "title": "Get_loadImage_ControlNet", + "properties": {}, + "widgets_values": [ + "loadImage_ControlNet" + ], + "color": "#2a363b", + "bgcolor": "#3f5159" + }, + { + "id": 3658, + "type": "GetNode", + "pos": [ + 3990, + 7890 + ], + "size": [ + 330, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 76, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 5452 + ] + } + ], + "title": "Get_canny_prep", + "properties": {}, + "widgets_values": [ + "canny_prep" + ], + "color": "#2a363b", + "bgcolor": "#3f5159" + }, + { + "id": 4105, + "type": "GetNode", + "pos": [ + 3940, + 7060 + ], + "size": [ + 210, + 50 + ], + "flags": { + "collapsed": true + }, + "order": 77, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 6220 + ] + } + ], + "title": "Get_depth_prep", + "properties": {}, + "widgets_values": [ + "depth_prep" + ], + "color": "#2a363b", + "bgcolor": "#3f5159" + }, + { + "id": 4088, + "type": "GetNode", + "pos": [ + 4800, + 1340 + ], + "size": [ + 210, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 78, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 6194, + 6195 + ] + } + ], + "title": "Get_canny_prep_cn", + "properties": {}, + "widgets_values": [ + "canny_prep_cn" + ], + "color": "#2a363b", + "bgcolor": "#3f5159" + }, + { + "id": 4106, + "type": "GetNode", + "pos": [ + 5630, + 1180 + ], + "size": [ + 210, + 50 + ], + "flags": { + "collapsed": true + }, + "order": 79, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 6221, + 6222 + ] + } + ], + "title": "Get_depth_prep_cn", + "properties": {}, + "widgets_values": [ + "depth_prep_cn" + ], + "color": "#2a363b", + "bgcolor": "#3f5159" + }, + { + "id": 4094, + "type": "GetNode", + "pos": [ + 5290, + 1660 + ], + "size": [ + 211.00416564941406, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 80, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 6214 + ] + } + ], + "title": "Get_loadImage_ControlNet", + "properties": {}, + "widgets_values": [ + "loadImage_ControlNet" + ], + "color": "#2a363b", + "bgcolor": "#3f5159" + }, + { + "id": 645, + "type": "GetNode", + "pos": [ + 4820, + 6150 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 81, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "BASIC_PIPE", + "type": "BASIC_PIPE", + "slot_index": 0, + "links": [ + 3152 + ] + } + ], + "title": "Get_pipe", + "properties": {}, + "widgets_values": [ + "pipe" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1410, + "type": "GetNode", + "pos": [ + 3730, + 6080 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 82, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "slot_index": 0, + "links": [ + 2212 + ] + } + ], + "title": "Get_batch", + "properties": {}, + "widgets_values": [ + "batch" + ], + "color": "#1b4669", + "bgcolor": "#29699c" + }, + { + "id": 1325, + "type": "GetNode", + "pos": [ + 3720, + 5980 + ], + "size": [ + 268.79998779296875, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 83, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 2202, + 5638 + ] + } + ], + "title": "Get_Output - imgload_prep", + "properties": {}, + "widgets_values": [ + "Output - imgload_prep" + ], + "color": "#2a363b", + "bgcolor": "#3f5159" + }, + { + "id": 3833, + "type": "GetNode", + "pos": [ + -4420, + 280 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 84, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 6223 + ] + } + ], + "title": "Get_send", + "properties": {}, + "widgets_values": [ + "send" + ], + "color": "#2a363b", + "bgcolor": "#3f5159" + }, + { + "id": 717, + "type": "GetNode", + "pos": [ + 840, + 180 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 85, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 3426, + 4414 + ] + } + ], + "title": "Get_final", + "properties": {}, + "widgets_values": [ + "final" + ], + "color": "#2a363b", + "bgcolor": "#3f5159" + }, + { + "id": 3231, + "type": "GetNode", + "pos": [ + 5280, + 5120 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 86, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "COMBO", + "type": "COMBO", + "links": [ + 4801 + ] + } + ], + "title": "Get_scheduler", + "properties": {}, + "widgets_values": [ + "scheduler" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3233, + "type": "GetNode", + "pos": [ + 5290, + 5060 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 87, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "COMBO", + "type": "COMBO", + "links": [ + 4803 + ] + } + ], + "title": "Get_sampler", + "properties": {}, + "widgets_values": [ + "sampler" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1286, + "type": "GetNode", + "pos": [ + 4140, + 3210 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 88, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "STRING", + "type": "STRING", + "links": [ + 2005 + ] + } + ], + "title": "Get_scheduler_name", + "properties": {}, + "widgets_values": [ + "scheduler_name" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1526, + "type": "GetNode", + "pos": [ + 4140, + 3170 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 89, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "STRING", + "type": "STRING", + "slot_index": 0, + "links": [ + 2344 + ] + } + ], + "title": "Get_sampler_name", + "properties": {}, + "widgets_values": [ + "sampler_name" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1115, + "type": "GetNode", + "pos": [ + 620, + 320 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 90, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "CLIP", + "type": "CLIP", + "slot_index": 0, + "links": [ + 3432 + ] + } + ], + "title": "Get_clip", + "properties": {}, + "widgets_values": [ + "clip" + ], + "color": "#432", + "bgcolor": "#653" + }, + { + "id": 3302, + "type": "GetNode", + "pos": [ + 620, + 360 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 91, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "slot_index": 0, + "links": [ + 4940 + ] + } + ], + "title": "Get_sendModel", + "properties": {}, + "widgets_values": [ + "sendModel" + ], + "color": "#223", + "bgcolor": "#335" + }, + { + "id": 3350, + "type": "GetNode", + "pos": [ + 4580, + 7170 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 92, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "slot_index": 0, + "links": [ + 5008 + ] + } + ], + "title": "Get_steps", + "properties": {}, + "widgets_values": [ + "steps" + ], + "color": "#1b4669", + "bgcolor": "#29699c" + }, + { + "id": 3348, + "type": "GetNode", + "pos": [ + 4590, + 7120 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 93, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "slot_index": 0, + "links": [ + 5007 + ] + } + ], + "title": "Get_seed", + "properties": {}, + "widgets_values": [ + "seed" + ], + "color": "#1b4669", + "bgcolor": "#29699c" + }, + { + "id": 3369, + "type": "GetNode", + "pos": [ + 4560, + 7290 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 94, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "COMBO", + "type": "COMBO", + "slot_index": 0, + "links": [ + 5020 + ] + } + ], + "title": "Get_scheduler", + "properties": {}, + "widgets_values": [ + "scheduler" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3370, + "type": "GetNode", + "pos": [ + 4560, + 7240 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 95, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "COMBO", + "type": "COMBO", + "links": [ + 5021 + ] + } + ], + "title": "Get_sampler", + "properties": {}, + "widgets_values": [ + "sampler" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3490, + "type": "GetNode", + "pos": [ + 4560, + 8010 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 96, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "COMBO", + "type": "COMBO", + "slot_index": 0, + "links": [ + 5210 + ] + } + ], + "title": "Get_sampler", + "properties": {}, + "widgets_values": [ + "sampler" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3256, + "type": "GetNode", + "pos": [ + 4410, + 3960 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 97, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "CLIP", + "type": "CLIP", + "slot_index": 0, + "links": [ + 4827 + ] + } + ], + "title": "Get_clip", + "properties": {}, + "widgets_values": [ + "clip" + ], + "color": "#432", + "bgcolor": "#653" + }, + { + "id": 3342, + "type": "GetNode", + "pos": [ + 4620, + 3830 + ], + "size": [ + 250, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 98, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [ + 4992 + ] + } + ], + "title": "Get_conditioning", + "properties": {}, + "widgets_values": [ + "conditioning" + ], + "color": "#332922", + "bgcolor": "#593930" + }, + { + "id": 3226, + "type": "GetNode", + "pos": [ + 3750, + 4630 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 99, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "MASK", + "type": "MASK", + "slot_index": 0, + "links": [ + 6317 + ] + } + ], + "title": "Get_mask_outpainting", + "properties": {}, + "widgets_values": [ + "mask_outpainting" + ], + "color": "#1c5715", + "bgcolor": "#1f401b" + }, + { + "id": 3225, + "type": "GetNode", + "pos": [ + 3750, + 4570 + ], + "size": [ + 210.25416564941406, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 100, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 6319 + ] + } + ], + "title": "Get_Output - imgload_prep", + "properties": {}, + "widgets_values": [ + "Output - imgload_prep" + ], + "color": "#2a363b", + "bgcolor": "#3f5159" + }, + { + "id": 3224, + "type": "GetNode", + "pos": [ + 4430, + 4780 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 101, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "CLIP", + "type": "CLIP", + "slot_index": 0, + "links": [ + 4782 + ] + } + ], + "title": "Get_clip", + "properties": {}, + "widgets_values": [ + "clip" + ], + "color": "#432", + "bgcolor": "#653" + }, + { + "id": 3218, + "type": "GetNode", + "pos": [ + 3750, + 4490 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 102, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "VAE", + "type": "VAE", + "slot_index": 0, + "links": [ + 6330 + ] + } + ], + "title": "Get_vae", + "properties": {}, + "widgets_values": [ + "vae" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 3380, + "type": "GetNode", + "pos": [ + 4680, + 4650 + ], + "size": [ + 240, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 103, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "slot_index": 0, + "links": [ + 5039 + ] + } + ], + "title": "Get_conditioning", + "properties": {}, + "widgets_values": [ + "conditioning" + ], + "color": "#332922", + "bgcolor": "#593930" + }, + { + "id": 3269, + "type": "GetNode", + "pos": [ + 5290, + 4180 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 104, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "COMBO", + "type": "COMBO", + "links": [ + 4853 + ] + } + ], + "title": "Get_sampler", + "properties": {}, + "widgets_values": [ + "sampler" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3268, + "type": "GetNode", + "pos": [ + 5290, + 4220 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 105, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "COMBO", + "type": "COMBO", + "links": [ + 4852 + ] + } + ], + "title": "Get_scheduler", + "properties": {}, + "widgets_values": [ + "scheduler" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3285, + "type": "GetNode", + "pos": [ + 5290, + 4270 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 106, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "slot_index": 0, + "links": [ + 4921 + ] + } + ], + "title": "Get_denoise", + "properties": {}, + "widgets_values": [ + "denoise" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3333, + "type": "GetNode", + "pos": [ + 5300, + 4900 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 107, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "slot_index": 0, + "links": [ + 4980 + ] + } + ], + "title": "Get_batch", + "properties": {}, + "widgets_values": [ + "batch" + ], + "color": "#1b4669", + "bgcolor": "#29699c" + }, + { + "id": 1300, + "type": "GetNode", + "pos": [ + 5290, + 4040 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 108, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "slot_index": 0, + "links": [ + 2018 + ] + } + ], + "title": "Get_batch", + "properties": {}, + "widgets_values": [ + "batch" + ], + "color": "#1b4669", + "bgcolor": "#29699c" + }, + { + "id": 4139, + "type": "GetNode", + "pos": [ + 3770, + 2380 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 109, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "VAE", + "type": "VAE", + "links": [ + 6347 + ] + } + ], + "title": "Get_vae", + "properties": {}, + "widgets_values": [ + "vae" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 4138, + "type": "GetNode", + "pos": [ + 3770, + 2420 + ], + "size": [ + 210, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 110, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "CLIP", + "type": "CLIP", + "links": [ + 6344, + 6346 + ] + } + ], + "title": "Get_clip", + "properties": {}, + "widgets_values": [ + "clip" + ], + "color": "#432", + "bgcolor": "#653" + }, + { + "id": 1057, + "type": "GetNode", + "pos": [ + 7130, + 2310 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 111, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "slot_index": 0, + "links": [ + 1775 + ] + } + ], + "title": "Get_seed", + "properties": {}, + "widgets_values": [ + "seed" + ], + "color": "#1b4669", + "bgcolor": "#29699c" + }, + { + "id": 1291, + "type": "GetNode", + "pos": [ + 3730, + 3580 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 112, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "VAE", + "type": "VAE", + "slot_index": 0, + "links": [ + 4912 + ] + } + ], + "title": "Get_vae", + "properties": {}, + "widgets_values": [ + "vae" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 1319, + "type": "GetNode", + "pos": [ + 3720, + 690 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 113, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "*", + "type": "*", + "slot_index": 0, + "links": [ + 5755 + ] + } + ], + "title": "Get_guidance", + "properties": {}, + "widgets_values": [ + "guidance" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 2429, + "type": "GetNode", + "pos": [ + 4320, + 2550 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 114, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "COMBO", + "type": "COMBO", + "slot_index": 0, + "links": [ + 3448 + ] + } + ], + "title": "Get_resolution", + "properties": {}, + "widgets_values": [ + "resolution" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 2217, + "type": "GetNode", + "pos": [ + 4350, + 2600 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 115, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "slot_index": 0, + "links": [ + 3214 + ] + } + ], + "title": "Get_batch", + "properties": {}, + "widgets_values": [ + "batch" + ], + "color": "#1b4669", + "bgcolor": "#29699c" + }, + { + "id": 1618, + "type": "GetNode", + "pos": [ + 5230, + 2460 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 116, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "slot_index": 0, + "links": [ + 2404 + ] + } + ], + "title": "Get_max shift", + "properties": {}, + "widgets_values": [ + "max shift" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 596, + "type": "GetNode", + "pos": [ + 6020, + 2380 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 117, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "slot_index": 0, + "links": [ + 1360 + ] + } + ], + "title": "Get_seed", + "properties": {}, + "widgets_values": [ + "seed" + ], + "color": "#1b4669", + "bgcolor": "#29699c" + }, + { + "id": 1064, + "type": "GetNode", + "pos": [ + 9280, + 2260 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 118, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "VAE", + "type": "VAE", + "links": [ + 1786 + ] + } + ], + "title": "Get_vae", + "properties": {}, + "widgets_values": [ + "vae" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 1515, + "type": "GetNode", + "pos": [ + 5890, + 2700 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 119, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "COMBO", + "type": "COMBO", + "links": [ + 2333 + ] + } + ], + "title": "Get_sampler", + "properties": {}, + "widgets_values": [ + "sampler" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3336, + "type": "GetNode", + "pos": [ + 4760, + 710 + ], + "size": [ + 260, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 120, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 5703 + ] + } + ], + "title": "Get_loadImage_IP1", + "properties": {}, + "widgets_values": [ + "loadImage_IP1" + ], + "color": "#2a363b", + "bgcolor": "#3f5159" + }, + { + "id": 3339, + "type": "GetNode", + "pos": [ + 5970, + 690 + ], + "size": [ + 250, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 121, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 5730 + ] + } + ], + "title": "Get_loadImage_IP2", + "properties": {}, + "widgets_values": [ + "loadImage_IP2" + ], + "color": "#2a363b", + "bgcolor": "#3f5159" + }, + { + "id": 3395, + "type": "GetNode", + "pos": [ + 7300, + 710 + ], + "size": [ + 240, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 122, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 5729 + ] + } + ], + "title": "Get_loadImage_IP3", + "properties": {}, + "widgets_values": [ + "loadImage_IP3" + ], + "color": "#2a363b", + "bgcolor": "#3f5159" + }, + { + "id": 4141, + "type": "GetNode", + "pos": [ + 4240, + 1770 + ], + "size": [ + 210, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 123, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "VEC3", + "type": "VEC3", + "links": [ + 6350 + ] + } + ], + "title": "Get_cn_control_line", + "properties": {}, + "widgets_values": [ + "cn_control_line" + ], + "color": "#2a363b", + "bgcolor": "#3f5159" + }, + { + "id": 4145, + "type": "GetNode", + "pos": [ + 5820, + 1800 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 124, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "VEC3", + "type": "VEC3", + "links": [ + 6352 + ] + } + ], + "title": "Get_cn_control_depth", + "properties": {}, + "widgets_values": [ + "cn_control_depth" + ], + "color": "#332922", + "bgcolor": "#593930" + }, + { + "id": 4093, + "type": "GetNode", + "pos": [ + 5280, + 1930 + ], + "size": [ + 210.25416564941406, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 125, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 6217 + ] + } + ], + "title": "Get_Output - imgload_prep", + "properties": {}, + "widgets_values": [ + "Output - imgload_prep" + ], + "color": "#2a363b", + "bgcolor": "#3f5159" + }, + { + "id": 1344, + "type": "GetNode", + "pos": [ + 1770, + 1190 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true, + "pinned": true + }, + "order": 126, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 2792 + ] + } + ], + "title": "Get_loadImage", + "properties": {}, + "widgets_values": [ + "loadImage" + ], + "color": "#2a363b", + "bgcolor": "#3f5159" + }, + { + "id": 3121, + "type": "GetNode", + "pos": [ + 3770, + 3710 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 127, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "MASK", + "type": "MASK", + "slot_index": 0, + "links": [ + 6300 + ] + } + ], + "title": "Get_mask_processed", + "properties": {}, + "widgets_values": [ + "mask_processed" + ], + "color": "#1c5715", + "bgcolor": "#1f401b" + }, + { + "id": 1620, + "type": "GetNode", + "pos": [ + 4760, + 5270 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 128, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "slot_index": 0, + "links": [ + 2406 + ] + } + ], + "title": "Get_max shift", + "properties": {}, + "widgets_values": [ + "max shift" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3507, + "type": "GetNode", + "pos": [ + -1730, + 380 + ], + "size": [ + 230, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 129, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "slot_index": 0, + "links": [ + 6297 + ] + } + ], + "title": "Get_model_canny", + "properties": {}, + "widgets_values": [ + "model_canny" + ], + "color": "#223", + "bgcolor": "#335" + }, + { + "id": 3291, + "type": "GetNode", + "pos": [ + -1710, + 340 + ], + "size": [ + 230, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 130, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "slot_index": 0, + "links": [ + 6294 + ] + } + ], + "title": "Get_model_fill", + "properties": {}, + "widgets_values": [ + "model_fill" + ], + "color": "#223", + "bgcolor": "#335" + }, + { + "id": 3506, + "type": "GetNode", + "pos": [ + -1730, + 430 + ], + "size": [ + 230, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 131, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "slot_index": 0, + "links": [ + 6298 + ] + } + ], + "title": "Get_model_depth", + "properties": {}, + "widgets_values": [ + "model_depth" + ], + "color": "#223", + "bgcolor": "#335" + }, + { + "id": 1106, + "type": "GetNode", + "pos": [ + -1700, + 300 + ], + "size": [ + 230, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 132, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "slot_index": 0, + "links": [ + 6293 + ] + } + ], + "title": "Get_model", + "properties": {}, + "widgets_values": [ + "model" + ], + "color": "#223", + "bgcolor": "#335" + }, + { + "id": 4136, + "type": "GetNode", + "pos": [ + -1500, + 920 + ], + "size": [ + 210, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 133, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "links": [ + 6342 + ] + } + ], + "title": "Get_guidance_slider", + "properties": {}, + "widgets_values": [ + "guidance_slider" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3257, + "type": "GetNode", + "pos": [ + 3760, + 3660 + ], + "size": [ + 210.25416564941406, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 134, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 6311 + ] + } + ], + "title": "Get_Output - imgload_prep", + "properties": {}, + "widgets_values": [ + "Output - imgload_prep" + ], + "color": "#2a363b", + "bgcolor": "#3f5159" + }, + { + "id": 590, + "type": "SamplerCustomAdvanced", + "pos": [ + 6380, + 2450 + ], + "size": [ + 240, + 110 + ], + "flags": { + "collapsed": true + }, + "order": 386, + "mode": 0, + "inputs": [ + { + "name": "noise", + "type": "NOISE", + "link": 1371 + }, + { + "name": "guider", + "type": "GUIDER", + "link": 1118 + }, + { + "name": "sampler", + "type": "SAMPLER", + "link": 2334 + }, + { + "name": "sigmas", + "type": "SIGMAS", + "link": 1120 + }, + { + "name": "latent_image", + "type": "LATENT", + "link": 5329 + } + ], + "outputs": [ + { + "name": "output", + "type": "LATENT", + "slot_index": 0, + "links": [] + }, + { + "name": "denoised_output", + "type": "LATENT", + "slot_index": 1, + "links": [ + 1474 + ] + } + ], + "title": "Sampler", + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "SamplerCustomAdvanced" + }, + "widgets_values": [] + }, + { + "id": 624, + "type": "Save Image Grid (mtb)", + "pos": [ + -2920, + 220 + ], + "size": [ + 240, + 190 + ], + "flags": { + "collapsed": false + }, + "order": 290, + "mode": 4, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 2380 + }, + { + "name": "filename_prefix", + "type": "STRING", + "widget": { + "name": "filename_prefix" + }, + "link": 4781 + } + ], + "outputs": [], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-mtb", + "ver": "8bf3545fec5b2a180607d40394b025a1e09c14b6", + "Node name for S&R": "Save Image Grid (mtb)" + }, + "widgets_values": [ + "stickFigures", + false + ] + }, + { + "id": 837, + "type": "Reroute", + "pos": [ + 5830, + 2260 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 365, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 1489 + } + ], + "outputs": [ + { + "name": "", + "type": "MODEL", + "slot_index": 0, + "links": [ + 1490 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 932, + "type": "FromBasicPipe_v2", + "pos": [ + 4790, + 5410 + ], + "size": [ + 270, + 130 + ], + "flags": { + "collapsed": true + }, + "order": 195, + "mode": 0, + "inputs": [ + { + "name": "basic_pipe", + "type": "BASIC_PIPE", + "link": 1599 + } + ], + "outputs": [ + { + "name": "basic_pipe", + "type": "BASIC_PIPE", + "slot_index": 0, + "links": [] + }, + { + "name": "model", + "type": "MODEL", + "slot_index": 1, + "links": [ + 1608 + ] + }, + { + "name": "clip", + "type": "CLIP", + "links": null + }, + { + "name": "vae", + "type": "VAE", + "slot_index": 3, + "links": [ + 2172 + ] + }, + { + "name": "positive", + "type": "CONDITIONING", + "slot_index": 4, + "links": [ + 5369 + ] + }, + { + "name": "negative", + "type": "CONDITIONING", + "slot_index": 5, + "links": [ + 2171 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui-impact-pack", + "ver": "0e3e6a193a68748b5e68cfd19fb6c7d92b2fac57", + "Node name for S&R": "FromBasicPipe_v2" + }, + "widgets_values": [] + }, + { + "id": 963, + "type": "VAEEncode", + "pos": [ + 3940, + 3020 + ], + "size": [ + 210, + 50 + ], + "flags": { + "collapsed": true + }, + "order": 200, + "mode": 0, + "inputs": [ + { + "name": "pixels", + "type": "IMAGE", + "link": 2071 + }, + { + "name": "vae", + "type": "VAE", + "link": 1680 + } + ], + "outputs": [ + { + "name": "LATENT", + "type": "LATENT", + "slot_index": 0, + "links": [ + 1798 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "VAEEncode" + }, + "widgets_values": [] + }, + { + "id": 1056, + "type": "RandomNoise", + "pos": [ + 7260, + 2310 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 239, + "mode": 0, + "inputs": [ + { + "name": "noise_seed", + "type": "INT", + "widget": { + "name": "noise_seed" + }, + "link": 1775 + } + ], + "outputs": [ + { + "name": "NOISE", + "type": "NOISE", + "slot_index": 0, + "links": [ + 1776 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "RandomNoise" + }, + "widgets_values": [ + 1, + "fixed" + ] + }, + { + "id": 1073, + "type": "RepeatLatentBatch", + "pos": [ + 4110, + 3060 + ], + "size": [ + 230, + 78 + ], + "flags": { + "collapsed": true + }, + "order": 287, + "mode": 0, + "inputs": [ + { + "name": "samples", + "type": "LATENT", + "link": 1798 + }, + { + "name": "amount", + "type": "INT", + "widget": { + "name": "amount" + }, + "link": 1920 + } + ], + "outputs": [ + { + "name": "LATENT", + "type": "LATENT", + "slot_index": 0, + "links": [ + 1800 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "RepeatLatentBatch" + }, + "widgets_values": [ + 1 + ] + }, + { + "id": 1074, + "type": "VAEDecode", + "pos": [ + 4710, + 2930 + ], + "size": [ + 170, + 50 + ], + "flags": { + "collapsed": true + }, + "order": 372, + "mode": 0, + "inputs": [ + { + "name": "samples", + "type": "LATENT", + "link": 1803 + }, + { + "name": "vae", + "type": "VAE", + "link": 1804 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 1802 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "VAEDecode" + }, + "widgets_values": [] + }, + { + "id": 1128, + "type": "DepthAnythingV2Preprocessor", + "pos": [ + 7740, + 2900 + ], + "size": [ + 310, + 82 + ], + "flags": {}, + "order": 434, + "mode": 4, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 1923 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 1867 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui_controlnet_aux", + "ver": "1e9eac6377c882da8bb360c7544607036904362c", + "Node name for S&R": "DepthAnythingV2Preprocessor" + }, + "widgets_values": [ + "depth_anything_v2_vitl.pth", + 512 + ] + }, + { + "id": 1129, + "type": "RemapImageRange", + "pos": [ + 8080, + 2900 + ], + "size": [ + 220, + 110 + ], + "flags": {}, + "order": 436, + "mode": 4, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 1867 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 1868, + 1871 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui-kjnodes", + "ver": "d835ac96042394299f76793544ee3643fd4b0457", + "Node name for S&R": "RemapImageRange" + }, + "widgets_values": [ + -1, + 5, + true + ] + }, + { + "id": 1285, + "type": "SomethingToString", + "pos": [ + 4210, + 3250 + ], + "size": [ + 210, + 82 + ], + "flags": { + "collapsed": true + }, + "order": 198, + "mode": 0, + "inputs": [ + { + "name": "input", + "type": "*", + "link": 2003 + } + ], + "outputs": [ + { + "name": "STRING", + "type": "STRING", + "slot_index": 0, + "links": [ + 2004 + ] + } + ], + "title": "To String", + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui-kjnodes", + "ver": "d835ac96042394299f76793544ee3643fd4b0457", + "Node name for S&R": "SomethingToString" + }, + "widgets_values": [ + "", + "" + ] + }, + { + "id": 1288, + "type": "SomethingToString", + "pos": [ + 4220, + 3290 + ], + "size": [ + 210, + 82 + ], + "flags": { + "collapsed": true + }, + "order": 199, + "mode": 0, + "inputs": [ + { + "name": "input", + "type": "*", + "link": 2006 + } + ], + "outputs": [ + { + "name": "STRING", + "type": "STRING", + "slot_index": 0, + "links": [ + 2007 + ] + } + ], + "title": "To String", + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui-kjnodes", + "ver": "d835ac96042394299f76793544ee3643fd4b0457", + "Node name for S&R": "SomethingToString" + }, + "widgets_values": [ + "", + "" + ] + }, + { + "id": 1358, + "type": "BasicGuider", + "pos": [ + 7140, + 2350 + ], + "size": [ + 240, + 50 + ], + "flags": { + "collapsed": true + }, + "order": 405, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 2087 + }, + { + "name": "conditioning", + "type": "CONDITIONING", + "link": 2088 + } + ], + "outputs": [ + { + "name": "GUIDER", + "type": "GUIDER", + "slot_index": 0, + "links": [ + 2089, + 2090 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "BasicGuider" + }, + "widgets_values": [] + }, + { + "id": 1359, + "type": "Reroute", + "pos": [ + 6950, + 2490 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 385, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5330 + } + ], + "outputs": [ + { + "name": "", + "type": "SIGMAS", + "slot_index": 0, + "links": [ + 2092 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 1404, + "type": "RepeatImageBatch", + "pos": [ + 4010, + 6080 + ], + "size": [ + 210, + 78 + ], + "flags": { + "collapsed": true + }, + "order": 228, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 2202 + }, + { + "name": "amount", + "type": "INT", + "widget": { + "name": "amount" + }, + "link": 2212 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 2209 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "RepeatImageBatch" + }, + "widgets_values": [ + 2 + ] + }, + { + "id": 1405, + "type": "ListCounter //Inspire", + "pos": [ + 4730, + 6190 + ], + "size": [ + 210, + 78 + ], + "flags": { + "collapsed": true + }, + "order": 356, + "mode": 0, + "inputs": [ + { + "name": "signal", + "type": "*", + "link": 2210 + }, + { + "name": "base_value", + "type": "INT", + "widget": { + "name": "base_value" + }, + "link": 2231 + } + ], + "outputs": [ + { + "name": "INT", + "type": "INT", + "slot_index": 0, + "links": [ + 2243 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui-inspire-pack", + "ver": "ca5d942cefa0f75e3c4e778f75f71811f4abb65f", + "Node name for S&R": "ListCounter //Inspire" + }, + "widgets_values": [ + 0 + ] + }, + { + "id": 1408, + "type": "ImageListToBatch+", + "pos": [ + 5900, + 6090 + ], + "size": [ + 186.64999389648438, + 30 + ], + "flags": { + "collapsed": true + }, + "order": 414, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 5633 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 2206 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui_essentials", + "ver": "33ff89fd354d8ec3ab6affb605a79a931b445d99", + "Node name for S&R": "ImageListToBatch+" + }, + "widgets_values": [] + }, + { + "id": 1411, + "type": "RebatchImages", + "pos": [ + 4510, + 6080 + ], + "size": [ + 270, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 315, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 2209 + } + ], + "outputs": [ + { + "name": "IMAGE", + "shape": 6, + "type": "IMAGE", + "slot_index": 0, + "links": [ + 2210, + 2211 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "RebatchImages" + }, + "widgets_values": [ + 1 + ] + }, + { + "id": 1500, + "type": "KSamplerSelect", + "pos": [ + 6100, + 2700 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 244, + "mode": 0, + "inputs": [ + { + "name": "sampler_name", + "type": "COMBO", + "widget": { + "name": "sampler_name" + }, + "link": 2333 + } + ], + "outputs": [ + { + "name": "SAMPLER", + "type": "SAMPLER", + "slot_index": 0, + "links": [ + 2334, + 2335 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "KSamplerSelect" + }, + "widgets_values": [ + "euler" + ] + }, + { + "id": 1624, + "type": "SomethingToString", + "pos": [ + 4220, + 3370 + ], + "size": [ + 210, + 82 + ], + "flags": { + "collapsed": true + }, + "order": 203, + "mode": 0, + "inputs": [ + { + "name": "input", + "type": "*", + "link": 2409 + } + ], + "outputs": [ + { + "name": "STRING", + "type": "STRING", + "slot_index": 0, + "links": [ + 2410 + ] + } + ], + "title": "To String", + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui-kjnodes", + "ver": "d835ac96042394299f76793544ee3643fd4b0457", + "Node name for S&R": "SomethingToString" + }, + "widgets_values": [ + "", + "" + ] + }, + { + "id": 1629, + "type": "MaxShiftSlider", + "pos": [ + 480, + 940 + ], + "size": [ + 310, + 60 + ], + "flags": { + "collapsed": false, + "pinned": true + }, + "order": 135, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "slot_index": 0, + "links": [ + 2418 + ] + } + ], + "title": "Max Shift", + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "ComfyUI-Flux-Continuum", + "ver": "19b70c33f872fe4e57dea291bbdd0f5559258a14", + "Node name for S&R": "MaxShiftSlider", + "aux_id": "robertvoy/Comfyui-Flux-Continuum" + }, + "widgets_values": [ + 1.1500000000000001 + ] + }, + { + "id": 2427, + "type": "ResolutionPicker", + "pos": [ + 480, + 1330 + ], + "size": [ + 310, + 60 + ], + "flags": { + "pinned": true + }, + "order": 136, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "resolution", + "type": "COMBO", + "slot_index": 0, + "links": [ + 3447 + ] + } + ], + "title": "Latent Resolution", + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "ComfyUI-Flux-Continuum", + "ver": "19b70c33f872fe4e57dea291bbdd0f5559258a14", + "Node name for S&R": "ResolutionPicker", + "aux_id": "robertvoy/Comfyui-Flux-Continuum" + }, + "widgets_values": [ + "1344x768 (1.75)" + ] + }, + { + "id": 2435, + "type": "SamplerParameterPacker", + "pos": [ + 480, + 620 + ], + "size": [ + 310, + 82 + ], + "flags": { + "pinned": true + }, + "order": 137, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "sampler_params", + "type": "SAMPLER_PARAMS", + "slot_index": 0, + "links": [ + 3460 + ] + } + ], + "title": "Sampler Parameters", + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "ComfyUI-Flux-Continuum", + "ver": "19b70c33f872fe4e57dea291bbdd0f5559258a14", + "Node name for S&R": "SamplerParameterPacker", + "aux_id": "robertvoy/Comfyui-Flux-Continuum" + }, + "widgets_values": [ + "deis", + "beta" + ], + "tabContents": [ + { + "sampler": "deis", + "scheduler": "beta" + }, + { + "sampler": "ddim", + "scheduler": "simple" + }, + { + "sampler": "deis", + "scheduler": "ddim_uniform" + } + ], + "activeTab": 0 + }, + { + "id": 2436, + "type": "SamplerParameterUnpacker", + "pos": [ + -2420, + 290 + ], + "size": [ + 370, + 90 + ], + "flags": { + "collapsed": true + }, + "order": 204, + "mode": 0, + "inputs": [ + { + "name": "sampler_params", + "type": "SAMPLER_PARAMS", + "link": 3461 + } + ], + "outputs": [ + { + "name": "sampler", + "type": "COMBO", + "slot_index": 0, + "links": [ + 3463 + ] + }, + { + "name": "sampler_name", + "type": "STRING", + "slot_index": 1, + "links": [ + 3465 + ] + }, + { + "name": "scheduler", + "type": "COMBO", + "slot_index": 2, + "links": [ + 3464 + ] + }, + { + "name": "scheduler_name", + "type": "STRING", + "slot_index": 3, + "links": [ + 3466 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "ComfyUI-Flux-Continuum", + "ver": "19b70c33f872fe4e57dea291bbdd0f5559258a14", + "Node name for S&R": "SamplerParameterUnpacker", + "aux_id": "robertvoy/Comfyui-Flux-Continuum" + }, + "widgets_values": [] + }, + { + "id": 3164, + "type": "OutputGet", + "pos": [ + 480, + 190 + ], + "size": [ + 310, + 70 + ], + "flags": { + "collapsed": false, + "pinned": true + }, + "order": 138, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 4941 + ] + } + ], + "title": "Output - txt2img", + "properties": { + "showOutputText": true + }, + "widgets_values": [ + "Output - txt2img" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3210, + "type": "PlaySound|pysssss", + "pos": [ + -3850, + 250 + ], + "size": [ + 310, + 110 + ], + "flags": {}, + "order": 357, + "mode": 0, + "inputs": [ + { + "name": "any", + "type": "*", + "link": 5804 + } + ], + "outputs": [ + { + "name": "*", + "shape": 6, + "type": "*", + "slot_index": 0, + "links": null + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui-custom-scripts", + "ver": "bbda5e52ad580c13ceaa53136d9c2bed9137bd2e", + "Node name for S&R": "PlaySound|pysssss" + }, + "widgets_values": [ + "always", + 0.5, + "notify.mp3" + ] + }, + { + "id": 3212, + "type": "SimpleTextTruncate", + "pos": [ + -3240, + 300 + ], + "size": [ + 230, + 82 + ], + "flags": {}, + "order": 202, + "mode": 4, + "inputs": [ + { + "name": "text", + "type": "STRING", + "link": 4780 + } + ], + "outputs": [ + { + "name": "TEXT", + "type": "STRING", + "slot_index": 0, + "links": [ + 4781 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "ComfyUI-Flux-Continuum", + "ver": "19b70c33f872fe4e57dea291bbdd0f5559258a14", + "Node name for S&R": "SimpleTextTruncate", + "aux_id": "robertvoy/Comfyui-Flux-Continuum" + }, + "widgets_values": [ + 12 + ] + }, + { + "id": 3215, + "type": "DifferentialDiffusion", + "pos": [ + 5570, + 4610 + ], + "size": [ + 184.8000030517578, + 30 + ], + "flags": { + "collapsed": true + }, + "order": 205, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 4788 + } + ], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "slot_index": 0, + "links": [ + 4789 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "DifferentialDiffusion" + }, + "widgets_values": [] + }, + { + "id": 3248, + "type": "DifferentialDiffusion", + "pos": [ + 5420, + 3820 + ], + "size": [ + 184.8000030517578, + 30 + ], + "flags": { + "collapsed": true + }, + "order": 206, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 4945 + } + ], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "slot_index": 0, + "links": [ + 4834 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "DifferentialDiffusion" + }, + "widgets_values": [] + }, + { + "id": 3346, + "type": "VAEDecode", + "pos": [ + 5080, + 6860 + ], + "size": [ + 170, + 50 + ], + "flags": { + "collapsed": true + }, + "order": 395, + "mode": 0, + "inputs": [ + { + "name": "samples", + "type": "LATENT", + "link": 5000 + }, + { + "name": "vae", + "type": "VAE", + "link": 5001 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 5002 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "VAEDecode" + }, + "widgets_values": [] + }, + { + "id": 3374, + "type": "StyleModelLoader", + "pos": [ + 3070, + 920 + ], + "size": [ + 320, + 60 + ], + "flags": {}, + "order": 139, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "STYLE_MODEL", + "type": "STYLE_MODEL", + "slot_index": 0, + "links": [ + 5033 + ] + } + ], + "title": "Load Redux Model", + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "StyleModelLoader" + }, + "widgets_values": [ + "flux1-redux-dev.safetensors" + ] + }, + { + "id": 3383, + "type": "Reroute", + "pos": [ + 5270, + 2250 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 196, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5046 + } + ], + "outputs": [ + { + "name": "", + "type": "MODEL", + "slot_index": 0, + "links": [ + 5045 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 3387, + "type": "Reroute", + "pos": [ + 5920, + 230 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 297, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5054 + } + ], + "outputs": [ + { + "name": "", + "type": "CLIP_VISION", + "slot_index": 0, + "links": [ + 5071, + 5731 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 3397, + "type": "Reroute", + "pos": [ + 7230, + 240 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 341, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5071 + } + ], + "outputs": [ + { + "name": "", + "type": "CLIP_VISION", + "slot_index": 0, + "links": [ + 5734 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 3453, + "type": "VAEDecode", + "pos": [ + 5090, + 7630 + ], + "size": [ + 170, + 50 + ], + "flags": { + "collapsed": true + }, + "order": 396, + "mode": 0, + "inputs": [ + { + "name": "samples", + "type": "LATENT", + "link": 5172 + }, + { + "name": "vae", + "type": "VAE", + "link": 5173 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 5174 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "VAEDecode" + }, + "widgets_values": [] + }, + { + "id": 3459, + "type": "KSampler", + "pos": [ + 4840, + 7710 + ], + "size": [ + 220, + 318 + ], + "flags": {}, + "order": 377, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 5175 + }, + { + "name": "positive", + "type": "CONDITIONING", + "link": 5176 + }, + { + "name": "negative", + "type": "CONDITIONING", + "link": 5177 + }, + { + "name": "latent_image", + "type": "LATENT", + "link": 5178 + }, + { + "name": "seed", + "type": "INT", + "widget": { + "name": "seed" + }, + "link": 5179 + }, + { + "name": "steps", + "type": "INT", + "widget": { + "name": "steps" + }, + "link": 5180 + }, + { + "name": "sampler_name", + "type": "COMBO", + "widget": { + "name": "sampler_name" + }, + "link": 5210 + }, + { + "name": "scheduler", + "type": "COMBO", + "widget": { + "name": "scheduler" + }, + "link": 5211 + } + ], + "outputs": [ + { + "name": "LATENT", + "type": "LATENT", + "slot_index": 0, + "links": [ + 5172 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "KSampler" + }, + "widgets_values": [ + 858565440478174, + "randomize", + 20, + 1, + "euler", + "normal", + 1 + ] + }, + { + "id": 3462, + "type": "CLIPTextEncode", + "pos": [ + 3930, + 7830 + ], + "size": [ + 400, + 200 + ], + "flags": { + "collapsed": true + }, + "order": 212, + "mode": 0, + "inputs": [ + { + "name": "clip", + "type": "CLIP", + "link": 5181 + } + ], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "slot_index": 0, + "links": [ + 5167 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "CLIPTextEncode" + }, + "widgets_values": [ + "" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 3515, + "type": "Reroute", + "pos": [ + 5830, + 2300 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 208, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5384 + } + ], + "outputs": [ + { + "name": "", + "type": "CONDITIONING", + "slot_index": 0, + "links": [ + 5237, + 5238 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 3549, + "type": "Reroute", + "pos": [ + 6150, + 2200 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 362, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5328 + } + ], + "outputs": [ + { + "name": "", + "type": "LATENT", + "slot_index": 0, + "links": [ + 5329 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 3566, + "type": "SimpleComparison+", + "pos": [ + 5410, + 340 + ], + "size": [ + 210, + 80 + ], + "flags": { + "collapsed": true + }, + "order": 344, + "mode": 0, + "inputs": [ + { + "name": "a", + "type": "*", + "link": 5713 + }, + { + "name": "b", + "type": "*", + "link": 5346 + } + ], + "outputs": [ + { + "name": "BOOLEAN", + "type": "BOOLEAN", + "slot_index": 0, + "links": [ + 5642 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui_essentials", + "ver": "33ff89fd354d8ec3ab6affb605a79a931b445d99", + "Node name for S&R": "SimpleComparison+" + }, + "widgets_values": [ + "!=" + ] + }, + { + "id": 3571, + "type": "SimpleComparison+", + "pos": [ + 6660, + 360 + ], + "size": [ + 210, + 80 + ], + "flags": { + "collapsed": true + }, + "order": 345, + "mode": 0, + "inputs": [ + { + "name": "a", + "type": "*", + "link": 5368 + }, + { + "name": "b", + "type": "*", + "link": 5350 + } + ], + "outputs": [ + { + "name": "BOOLEAN", + "type": "BOOLEAN", + "slot_index": 0, + "links": [ + 5656 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui_essentials", + "ver": "33ff89fd354d8ec3ab6affb605a79a931b445d99", + "Node name for S&R": "SimpleComparison+" + }, + "widgets_values": [ + "!=" + ] + }, + { + "id": 3572, + "type": "SimpleMathFloat+", + "pos": [ + 6540, + 310 + ], + "size": [ + 320, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 140, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "slot_index": 0, + "links": [ + 5350 + ] + } + ], + "title": "Float", + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui_essentials", + "ver": "33ff89fd354d8ec3ab6affb605a79a931b445d99", + "Node name for S&R": "SimpleMathFloat+" + }, + "widgets_values": [ + 0 + ] + }, + { + "id": 3577, + "type": "SimpleComparison+", + "pos": [ + 7880, + 390 + ], + "size": [ + 210, + 80 + ], + "flags": { + "collapsed": true + }, + "order": 346, + "mode": 0, + "inputs": [ + { + "name": "a", + "type": "*", + "link": 5363 + }, + { + "name": "b", + "type": "*", + "link": 5359 + } + ], + "outputs": [ + { + "name": "BOOLEAN", + "type": "BOOLEAN", + "slot_index": 0, + "links": [ + 5651 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui_essentials", + "ver": "33ff89fd354d8ec3ab6affb605a79a931b445d99", + "Node name for S&R": "SimpleComparison+" + }, + "widgets_values": [ + "!=" + ] + }, + { + "id": 3578, + "type": "SimpleMathFloat+", + "pos": [ + 7740, + 330 + ], + "size": [ + 320, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 141, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "slot_index": 0, + "links": [ + 5359 + ] + } + ], + "title": "Float", + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui_essentials", + "ver": "33ff89fd354d8ec3ab6affb605a79a931b445d99", + "Node name for S&R": "SimpleMathFloat+" + }, + "widgets_values": [ + 0 + ] + }, + { + "id": 3778, + "type": "Reroute", + "pos": [ + 4400, + 5980 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 304, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5634 + } + ], + "outputs": [ + { + "name": "", + "type": "MASK", + "slot_index": 0, + "links": [ + 5635 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 3779, + "type": "Reroute", + "pos": [ + 5420, + 5980 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 348, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5635 + } + ], + "outputs": [ + { + "name": "", + "type": "MASK", + "slot_index": 0, + "links": [ + 5636 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 3780, + "type": "Reroute", + "pos": [ + 4400, + 5940 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 229, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5638 + } + ], + "outputs": [ + { + "name": "", + "type": "IMAGE", + "links": [ + 5637 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 3781, + "type": "Reroute", + "pos": [ + 5420, + 5940 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 316, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5637 + } + ], + "outputs": [ + { + "name": "", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 5639 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 3783, + "type": "SimpleCondition+", + "pos": [ + 5680, + 480 + ], + "size": [ + 240, + 70 + ], + "flags": { + "collapsed": false + }, + "order": 384, + "mode": 0, + "inputs": [ + { + "name": "evaluate", + "type": "*", + "link": 5642 + }, + { + "name": "on_true", + "type": "*", + "link": 5901 + }, + { + "name": "on_false", + "shape": 7, + "type": "*", + "link": 5644 + } + ], + "outputs": [ + { + "name": "result", + "type": "*", + "slot_index": 0, + "links": [ + 5738 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui_essentials", + "ver": "33ff89fd354d8ec3ab6affb605a79a931b445d99", + "Node name for S&R": "SimpleCondition+" + }, + "widgets_values": [] + }, + { + "id": 3784, + "type": "SimpleCondition+", + "pos": [ + 6920, + 450 + ], + "size": [ + 240, + 70 + ], + "flags": { + "collapsed": false + }, + "order": 427, + "mode": 0, + "inputs": [ + { + "name": "evaluate", + "type": "*", + "link": 5656 + }, + { + "name": "on_true", + "type": "*", + "link": 5892 + }, + { + "name": "on_false", + "shape": 7, + "type": "*", + "link": 5900 + } + ], + "outputs": [ + { + "name": "result", + "type": "*", + "slot_index": 0, + "links": [ + 5741 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui_essentials", + "ver": "33ff89fd354d8ec3ab6affb605a79a931b445d99", + "Node name for S&R": "SimpleCondition+" + }, + "widgets_values": [] + }, + { + "id": 2205, + "type": "Label (rgthree)", + "pos": [ + 1980, + 100 + ], + "size": [ + 96.72916412353516, + 16 + ], + "flags": { + "allow_interaction": true + }, + "order": 142, + "mode": 0, + "inputs": [], + "outputs": [], + "title": "by WorldObserver", + "properties": { + "fontSize": 16, + "fontFamily": "\n", + "fontColor": "#ffffff", + "textAlign": "left", + "backgroundColor": "transparent", + "padding": 0, + "borderRadius": 0, + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "color": "#fff0", + "bgcolor": "#fff0" + }, + { + "id": 3452, + "type": "RepeatLatentBatch", + "pos": [ + 4510, + 7820 + ], + "size": [ + 230, + 78 + ], + "flags": { + "collapsed": true + }, + "order": 347, + "mode": 0, + "inputs": [ + { + "name": "samples", + "type": "LATENT", + "link": 5170 + }, + { + "name": "amount", + "type": "INT", + "widget": { + "name": "amount" + }, + "link": 5171 + } + ], + "outputs": [ + { + "name": "LATENT", + "type": "LATENT", + "slot_index": 0, + "links": [ + 5178 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "RepeatLatentBatch" + }, + "widgets_values": [ + 1 + ] + }, + { + "id": 3450, + "type": "InstructPixToPixConditioning", + "pos": [ + 4210, + 7710 + ], + "size": [ + 240, + 90 + ], + "flags": { + "collapsed": false + }, + "order": 303, + "mode": 0, + "inputs": [ + { + "name": "positive", + "type": "CONDITIONING", + "link": 5166 + }, + { + "name": "negative", + "type": "CONDITIONING", + "link": 5167 + }, + { + "name": "vae", + "type": "VAE", + "link": 5168 + }, + { + "name": "pixels", + "type": "IMAGE", + "link": 5452 + } + ], + "outputs": [ + { + "name": "positive", + "type": "CONDITIONING", + "slot_index": 0, + "links": [ + 5176 + ] + }, + { + "name": "negative", + "type": "CONDITIONING", + "slot_index": 1, + "links": [ + 5177 + ] + }, + { + "name": "latent", + "type": "LATENT", + "slot_index": 2, + "links": [ + 5170 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "InstructPixToPixConditioning" + }, + "widgets_values": [] + }, + { + "id": 1488, + "type": "BatchSlider", + "pos": [ + 480, + 1060 + ], + "size": [ + 310, + 60 + ], + "flags": { + "collapsed": false, + "pinned": true + }, + "order": 143, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "slot_index": 0, + "links": [ + 2305 + ] + } + ], + "title": "Batch", + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "ComfyUI-Flux-Continuum", + "ver": "19b70c33f872fe4e57dea291bbdd0f5559258a14", + "Node name for S&R": "BatchSlider", + "aux_id": "robertvoy/Comfyui-Flux-Continuum" + }, + "widgets_values": [ + 1 + ] + }, + { + "id": 3388, + "type": "Reroute", + "pos": [ + 5090, + 180 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 210, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5055 + } + ], + "outputs": [ + { + "name": "", + "type": "STYLE_MODEL", + "slot_index": 0, + "links": [ + 5058, + 5883 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 3582, + "type": "Reroute", + "pos": [ + 6110, + 330 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 301, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "widget": { + "name": "value" + }, + "link": 5366 + } + ], + "outputs": [ + { + "name": "", + "type": "FLOAT", + "slot_index": 0, + "links": [ + 5368, + 5889 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 3385, + "type": "Reroute", + "pos": [ + 6250, + 190 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 299, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5058 + } + ], + "outputs": [ + { + "name": "", + "type": "STYLE_MODEL", + "slot_index": 0, + "links": [ + 5072, + 5890 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 3816, + "type": "Reroute", + "pos": [ + 6380, + 490 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 402, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5738 + } + ], + "outputs": [ + { + "name": "", + "type": "*", + "slot_index": 0, + "links": [ + 5891, + 5900 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 3922, + "type": "StyleModelApply", + "pos": [ + 6570, + 600 + ], + "size": [ + 270, + 122 + ], + "flags": {}, + "order": 416, + "mode": 0, + "inputs": [ + { + "name": "conditioning", + "type": "CONDITIONING", + "link": 5891 + }, + { + "name": "style_model", + "type": "STYLE_MODEL", + "link": 5890 + }, + { + "name": "clip_vision_output", + "type": "CLIP_VISION_OUTPUT", + "link": 5887 + }, + { + "name": "strength", + "type": "FLOAT", + "widget": { + "name": "strength" + }, + "link": 5889 + } + ], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [ + 5892 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.28", + "Node name for S&R": "StyleModelApply" + }, + "widgets_values": [ + 1, + "attn_bias" + ] + }, + { + "id": 3396, + "type": "Reroute", + "pos": [ + 7540, + 190 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 343, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5072 + } + ], + "outputs": [ + { + "name": "", + "type": "STYLE_MODEL", + "slot_index": 0, + "links": [ + 5904 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 3407, + "type": "Reroute", + "pos": [ + 7500, + 360 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 302, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "widget": { + "name": "value" + }, + "link": 5362 + } + ], + "outputs": [ + { + "name": "", + "type": "FLOAT", + "slot_index": 0, + "links": [ + 5363, + 5905 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 3924, + "type": "StyleModelApply", + "pos": [ + 7830, + 620 + ], + "size": [ + 270, + 122 + ], + "flags": {}, + "order": 435, + "mode": 0, + "inputs": [ + { + "name": "conditioning", + "type": "CONDITIONING", + "link": 5903 + }, + { + "name": "style_model", + "type": "STYLE_MODEL", + "link": 5904 + }, + { + "name": "clip_vision_output", + "type": "CLIP_VISION_OUTPUT", + "link": 5902 + }, + { + "name": "strength", + "type": "FLOAT", + "widget": { + "name": "strength" + }, + "link": 5905 + } + ], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [ + 5906 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.28", + "Node name for S&R": "StyleModelApply" + }, + "widgets_values": [ + 1, + "attn_bias" + ] + }, + { + "id": 3352, + "type": "KSampler", + "pos": [ + 4810, + 6960 + ], + "size": [ + 270, + 262 + ], + "flags": {}, + "order": 375, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 5003 + }, + { + "name": "positive", + "type": "CONDITIONING", + "link": 5004 + }, + { + "name": "negative", + "type": "CONDITIONING", + "link": 5005 + }, + { + "name": "latent_image", + "type": "LATENT", + "link": 5006 + }, + { + "name": "seed", + "type": "INT", + "widget": { + "name": "seed" + }, + "link": 5007 + }, + { + "name": "steps", + "type": "INT", + "widget": { + "name": "steps" + }, + "link": 5008 + }, + { + "name": "sampler_name", + "type": "COMBO", + "widget": { + "name": "sampler_name" + }, + "link": 5021 + }, + { + "name": "scheduler", + "type": "COMBO", + "widget": { + "name": "scheduler" + }, + "link": 5020 + } + ], + "outputs": [ + { + "name": "LATENT", + "type": "LATENT", + "slot_index": 0, + "links": [ + 5000 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "KSampler" + }, + "widgets_values": [ + 109096501913651, + "randomize", + 20, + 1, + "euler", + "normal", + 1 + ] + }, + { + "id": 3343, + "type": "InstructPixToPixConditioning", + "pos": [ + 4160, + 6970 + ], + "size": [ + 240, + 90 + ], + "flags": { + "collapsed": false + }, + "order": 295, + "mode": 0, + "inputs": [ + { + "name": "positive", + "type": "CONDITIONING", + "link": 5015 + }, + { + "name": "negative", + "type": "CONDITIONING", + "link": 4995 + }, + { + "name": "vae", + "type": "VAE", + "link": 4996 + }, + { + "name": "pixels", + "type": "IMAGE", + "link": 6220 + } + ], + "outputs": [ + { + "name": "positive", + "type": "CONDITIONING", + "slot_index": 0, + "links": [ + 5004 + ] + }, + { + "name": "negative", + "type": "CONDITIONING", + "slot_index": 1, + "links": [ + 5005 + ] + }, + { + "name": "latent", + "type": "LATENT", + "slot_index": 2, + "links": [ + 4998 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "InstructPixToPixConditioning" + }, + "widgets_values": [] + }, + { + "id": 583, + "type": "DualCLIPLoader", + "pos": [ + 3070, + 390 + ], + "size": [ + 320, + 130 + ], + "flags": {}, + "order": 144, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "CLIP", + "type": "CLIP", + "slot_index": 0, + "links": [ + 4424 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "DualCLIPLoader" + }, + "widgets_values": [ + "t5xxl_fp16.safetensors", + "clip_l.safetensors", + "flux", + "default" + ] + }, + { + "id": 3386, + "type": "Reroute", + "pos": [ + 4850, + 230 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 209, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5051 + } + ], + "outputs": [ + { + "name": "", + "type": "CLIP_VISION", + "slot_index": 0, + "links": [ + 5054, + 5702 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 3983, + "type": "Bookmark (rgthree)", + "pos": [ + 370, + 10 + ], + "size": [ + 210, + 62 + ], + "flags": { + "collapsed": true + }, + "order": 145, + "mode": 0, + "inputs": [], + "outputs": [], + "title": "🔖", + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "1", + 1 + ] + }, + { + "id": 3984, + "type": "Bookmark (rgthree)", + "pos": [ + 2460, + -200 + ], + "size": [ + 210, + 62 + ], + "flags": { + "collapsed": true + }, + "order": 146, + "mode": 0, + "inputs": [], + "outputs": [], + "title": "🔖", + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "2", + 1 + ] + }, + { + "id": 3773, + "type": "ImageCompositeMasked", + "pos": [ + 5570, + 6050 + ], + "size": [ + 270, + 150 + ], + "flags": {}, + "order": 400, + "mode": 0, + "inputs": [ + { + "name": "destination", + "type": "IMAGE", + "link": 5639 + }, + { + "name": "source", + "type": "IMAGE", + "link": 5630 + }, + { + "name": "mask", + "shape": 7, + "type": "MASK", + "link": 5636 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 5633 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "ImageCompositeMasked" + }, + "widgets_values": [ + 0, + 0, + false + ] + }, + { + "id": 1262, + "type": "ImpactSchedulerAdapter", + "pos": [ + 4790, + 6380 + ], + "size": [ + 260, + 82 + ], + "flags": { + "collapsed": true + }, + "order": 215, + "mode": 0, + "inputs": [ + { + "name": "scheduler", + "type": "COMBO", + "widget": { + "name": "scheduler" + }, + "link": 2055 + } + ], + "outputs": [ + { + "name": "scheduler", + "type": "COMBO", + "slot_index": 0, + "links": [ + 2313 + ] + } + ], + "title": "Adapter", + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui-impact-pack", + "ver": "0e3e6a193a68748b5e68cfd19fb6c7d92b2fac57", + "Node name for S&R": "ImpactSchedulerAdapter" + }, + "widgets_values": [ + "simple", + "None" + ] + }, + { + "id": 4022, + "type": "Reroute", + "pos": [ + 4880, + 1060 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 217, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 6151 + } + ], + "outputs": [ + { + "name": "", + "type": "VAE", + "links": [ + 6002, + 6067, + 6073 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 4023, + "type": "Reroute", + "pos": [ + 6030, + 1060 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 307, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 6073 + } + ], + "outputs": [ + { + "name": "", + "type": "VAE", + "links": [ + 6013, + 6060, + 6074 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 4024, + "type": "Reroute", + "pos": [ + 7570, + 1060 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 350, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 6074 + } + ], + "outputs": [ + { + "name": "", + "type": "VAE", + "links": [ + 6021, + 6053 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 4028, + "type": "Reroute", + "pos": [ + 7570, + 1020 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 349, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 6078 + } + ], + "outputs": [ + { + "name": "", + "type": "CONTROL_NET", + "links": [ + 6103, + 6104 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 4027, + "type": "Reroute", + "pos": [ + 6020, + 1010 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 306, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 6077 + } + ], + "outputs": [ + { + "name": "", + "type": "CONTROL_NET", + "links": [ + 6078, + 6105, + 6106 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 4026, + "type": "Reroute", + "pos": [ + 4880, + 1020 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 216, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 6076 + } + ], + "outputs": [ + { + "name": "", + "type": "CONTROL_NET", + "links": [ + 6077, + 6107, + 6108 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 3785, + "type": "SimpleCondition+", + "pos": [ + 8130, + 410 + ], + "size": [ + 240, + 70 + ], + "flags": { + "collapsed": false + }, + "order": 437, + "mode": 0, + "inputs": [ + { + "name": "evaluate", + "type": "*", + "link": 5651 + }, + { + "name": "on_true", + "type": "*", + "link": 5906 + }, + { + "name": "on_false", + "shape": 7, + "type": "*", + "link": 5743 + } + ], + "outputs": [ + { + "name": "result", + "type": "*", + "slot_index": 0, + "links": [ + 6112 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui_essentials", + "ver": "33ff89fd354d8ec3ab6affb605a79a931b445d99", + "Node name for S&R": "SimpleCondition+" + }, + "widgets_values": [] + }, + { + "id": 429, + "type": "DetailerForEachPipe", + "pos": [ + 5000, + 6060 + ], + "size": [ + 390, + 644 + ], + "flags": { + "collapsed": false + }, + "order": 382, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 2211 + }, + { + "name": "segs", + "type": "SEGS", + "link": 6119 + }, + { + "name": "basic_pipe", + "type": "BASIC_PIPE", + "link": 3152 + }, + { + "name": "detailer_hook", + "shape": 7, + "type": "DETAILER_HOOK", + "link": null + }, + { + "name": "refiner_basic_pipe_opt", + "shape": 7, + "type": "BASIC_PIPE", + "link": null + }, + { + "name": "scheduler_func_opt", + "shape": 7, + "type": "SCHEDULER_FUNC", + "link": null + }, + { + "name": "seed", + "type": "INT", + "widget": { + "name": "seed" + }, + "link": 2243 + }, + { + "name": "steps", + "type": "INT", + "widget": { + "name": "steps" + }, + "link": 2035 + }, + { + "name": "sampler_name", + "type": "COMBO", + "widget": { + "name": "sampler_name" + }, + "link": 2341 + }, + { + "name": "scheduler", + "type": "COMBO", + "widget": { + "name": "scheduler" + }, + "link": 2313 + }, + { + "name": "denoise", + "type": "FLOAT", + "widget": { + "name": "denoise" + }, + "link": 2034 + } + ], + "outputs": [ + { + "name": "image", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 5630 + ] + }, + { + "name": "segs", + "type": "SEGS", + "slot_index": 1, + "links": [] + }, + { + "name": "basic_pipe", + "type": "BASIC_PIPE", + "links": null + }, + { + "name": "cnet_images", + "shape": 6, + "type": "IMAGE", + "slot_index": 3, + "links": [] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui-impact-pack", + "ver": "0e3e6a193a68748b5e68cfd19fb6c7d92b2fac57", + "Node name for S&R": "DetailerForEachPipe" + }, + "widgets_values": [ + 1024, + true, + 1024, + 145061133652825, + "randomize", + 20, + 1, + "euler", + "beta", + 0.74, + 5, + true, + true, + "", + 0.2, + 1, + false, + 20, + false, + false + ] + }, + { + "id": 3345, + "type": "RepeatLatentBatch", + "pos": [ + 4540, + 7050 + ], + "size": [ + 230, + 78 + ], + "flags": { + "collapsed": true + }, + "order": 340, + "mode": 0, + "inputs": [ + { + "name": "samples", + "type": "LATENT", + "link": 4998 + }, + { + "name": "amount", + "type": "INT", + "widget": { + "name": "amount" + }, + "link": 4999 + } + ], + "outputs": [ + { + "name": "LATENT", + "type": "LATENT", + "slot_index": 0, + "links": [ + 5006 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "RepeatLatentBatch" + }, + "widgets_values": [ + 1 + ] + }, + { + "id": 3402, + "type": "SplitVec3", + "pos": [ + 4600, + 310 + ], + "size": [ + 210, + 70 + ], + "flags": { + "collapsed": false + }, + "order": 211, + "mode": 0, + "inputs": [ + { + "name": "a", + "type": "VEC3", + "link": 5082 + } + ], + "outputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "slot_index": 0, + "links": [ + 5661 + ] + }, + { + "name": "FLOAT", + "type": "FLOAT", + "slot_index": 1, + "links": [ + 5366 + ] + }, + { + "name": "FLOAT", + "type": "FLOAT", + "slot_index": 2, + "links": [ + 5362 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "ComfyUI-Flux-Continuum", + "ver": "19b70c33f872fe4e57dea291bbdd0f5559258a14", + "Node name for S&R": "SplitVec3", + "aux_id": "robertvoy/Comfyui-Flux-Continuum" + }, + "widgets_values": [] + }, + { + "id": 4045, + "type": "ConditioningZeroOut", + "pos": [ + 3930, + 1180 + ], + "size": [ + 211.60000610351562, + 26 + ], + "flags": { + "collapsed": true + }, + "order": 218, + "mode": 0, + "inputs": [ + { + "name": "conditioning", + "type": "CONDITIONING", + "link": 6114 + } + ], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [ + 6110 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.28", + "Node name for S&R": "ConditioningZeroOut" + }, + "widgets_values": [] + }, + { + "id": 4016, + "type": "MaskToSEGS", + "pos": [ + 3940, + 1390 + ], + "size": [ + 260, + 150 + ], + "flags": { + "collapsed": true + }, + "order": 219, + "mode": 0, + "inputs": [ + { + "name": "mask", + "type": "MASK", + "link": 6121 + } + ], + "outputs": [ + { + "name": "SEGS", + "type": "SEGS", + "slot_index": 0, + "links": [ + 6064 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui-impact-pack", + "ver": "cd34cfdd638a996fd011be1b490c70a7e0fb505f", + "Node name for S&R": "MaskToSEGS" + }, + "widgets_values": [ + false, + 1, + false, + 10, + false + ] + }, + { + "id": 4031, + "type": "ImpactControlBridgeFix", + "pos": [ + 4820, + 1250 + ], + "size": [ + 230, + 80 + ], + "flags": { + "collapsed": true + }, + "order": 351, + "mode": 0, + "inputs": [ + { + "name": "value", + "type": "*", + "link": 6136 + }, + { + "name": "mode", + "type": "BOOLEAN", + "widget": { + "name": "mode" + }, + "link": 6082 + } + ], + "outputs": [ + { + "name": "value", + "type": "*", + "slot_index": 0, + "links": [ + 6003, + 6068 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "ComfyUI-Flux-Continuum", + "ver": "0524a071ad9f1b6a4012f083a610a7a7d5f2991a", + "Node name for S&R": "ImpactControlBridgeFix", + "aux_id": "robertvoy/Comfyui-Flux-Continuum" + }, + "widgets_values": [ + true, + "Bypass" + ] + }, + { + "id": 4034, + "type": "ImpactControlBridgeFix", + "pos": [ + 5940, + 1250 + ], + "size": [ + 230, + 80 + ], + "flags": { + "collapsed": true + }, + "order": 352, + "mode": 0, + "inputs": [ + { + "name": "value", + "type": "*", + "link": 6142 + }, + { + "name": "mode", + "type": "BOOLEAN", + "widget": { + "name": "mode" + }, + "link": 6086 + } + ], + "outputs": [ + { + "name": "value", + "type": "*", + "slot_index": 0, + "links": [ + 6014, + 6061 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "ComfyUI-Flux-Continuum", + "ver": "0524a071ad9f1b6a4012f083a610a7a7d5f2991a", + "Node name for S&R": "ImpactControlBridgeFix", + "aux_id": "robertvoy/Comfyui-Flux-Continuum" + }, + "widgets_values": [ + true, + "Bypass" + ] + }, + { + "id": 4035, + "type": "SimpleComparison+", + "pos": [ + 5720, + 1310 + ], + "size": [ + 210, + 80 + ], + "flags": { + "collapsed": true + }, + "order": 310, + "mode": 0, + "inputs": [ + { + "name": "a", + "type": "*", + "link": 6143 + }, + { + "name": "b", + "type": "*", + "link": 6152 + } + ], + "outputs": [ + { + "name": "BOOLEAN", + "type": "BOOLEAN", + "slot_index": 0, + "links": [ + 6086 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui_essentials", + "ver": "9d9f4bedfc9f0321c19faf71855e228c93bd0dc9", + "Node name for S&R": "SimpleComparison+" + }, + "widgets_values": [ + "!=" + ] + }, + { + "id": 4038, + "type": "SimpleComparison+", + "pos": [ + 7380, + 1330 + ], + "size": [ + 210, + 80 + ], + "flags": { + "collapsed": true + }, + "order": 311, + "mode": 0, + "inputs": [ + { + "name": "a", + "type": "*", + "link": 6148 + }, + { + "name": "b", + "type": "*", + "link": 6153 + } + ], + "outputs": [ + { + "name": "BOOLEAN", + "type": "BOOLEAN", + "slot_index": 0, + "links": [ + 6090 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui_essentials", + "ver": "9d9f4bedfc9f0321c19faf71855e228c93bd0dc9", + "Node name for S&R": "SimpleComparison+" + }, + "widgets_values": [ + "!=" + ] + }, + { + "id": 4061, + "type": "SimpleMathFloat+", + "pos": [ + 7250, + 1330 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 147, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "slot_index": 0, + "links": [ + 6153 + ] + } + ], + "title": "Float", + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui_essentials", + "ver": "33ff89fd354d8ec3ab6affb605a79a931b445d99", + "Node name for S&R": "SimpleMathFloat+" + }, + "widgets_values": [ + 0 + ] + }, + { + "id": 4014, + "type": "CondPassThrough", + "pos": [ + 8010, + 1140 + ], + "size": [ + 220, + 50 + ], + "flags": { + "collapsed": true + }, + "order": 423, + "mode": 0, + "inputs": [ + { + "name": "positive", + "shape": 7, + "type": "CONDITIONING", + "link": 6100 + }, + { + "name": "negative", + "shape": 7, + "type": "CONDITIONING", + "link": 6101 + } + ], + "outputs": [ + { + "name": "positive", + "type": "CONDITIONING", + "slot_index": 0, + "links": [ + 6116 + ] + }, + { + "name": "negative", + "type": "CONDITIONING", + "links": null + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui-kjnodes", + "ver": "5dcda71011870278c35d92ff77a677ed2e538f2d", + "Node name for S&R": "CondPassThrough" + }, + "widgets_values": [] + }, + { + "id": 4018, + "type": "ImpactControlNetApplyAdvancedSEGS", + "pos": [ + 7790, + 1390 + ], + "size": [ + 270, + 178 + ], + "flags": { + "collapsed": true + }, + "order": 413, + "mode": 4, + "inputs": [ + { + "name": "segs", + "type": "SEGS", + "link": 6050 + }, + { + "name": "control_net", + "type": "CONTROL_NET", + "link": 6104 + }, + { + "name": "segs_preprocessor", + "shape": 7, + "type": "SEGS_PREPROCESSOR", + "link": null + }, + { + "name": "control_image", + "shape": 7, + "type": "IMAGE", + "link": 6129 + }, + { + "name": "vae", + "shape": 7, + "type": "VAE", + "link": 6053 + }, + { + "name": "strength", + "type": "FLOAT", + "widget": { + "name": "strength" + }, + "link": 6054 + }, + { + "name": "start_percent", + "type": "FLOAT", + "widget": { + "name": "start_percent" + }, + "link": 6144 + }, + { + "name": "end_percent", + "type": "FLOAT", + "widget": { + "name": "end_percent" + }, + "link": 6145 + } + ], + "outputs": [ + { + "name": "SEGS", + "type": "SEGS", + "slot_index": 0, + "links": [ + 6102 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui-impact-pack", + "ver": "cd34cfdd638a996fd011be1b490c70a7e0fb505f", + "Node name for S&R": "ImpactControlNetApplyAdvancedSEGS" + }, + "widgets_values": [ + 1, + 0, + 1 + ] + }, + { + "id": 4006, + "type": "ControlNetApplyAdvanced", + "pos": [ + 7800, + 1140 + ], + "size": [ + 300, + 178 + ], + "flags": { + "collapsed": true + }, + "order": 412, + "mode": 4, + "inputs": [ + { + "name": "positive", + "type": "CONDITIONING", + "link": 6017 + }, + { + "name": "negative", + "type": "CONDITIONING", + "link": 6018 + }, + { + "name": "control_net", + "type": "CONTROL_NET", + "link": 6103 + }, + { + "name": "image", + "type": "IMAGE", + "link": 6130 + }, + { + "name": "vae", + "shape": 7, + "type": "VAE", + "link": 6021 + }, + { + "name": "strength", + "type": "FLOAT", + "widget": { + "name": "strength" + }, + "link": 6022 + }, + { + "name": "start_percent", + "type": "FLOAT", + "widget": { + "name": "start_percent" + }, + "link": 6146 + }, + { + "name": "end_percent", + "type": "FLOAT", + "widget": { + "name": "end_percent" + }, + "link": 6147 + } + ], + "outputs": [ + { + "name": "positive", + "type": "CONDITIONING", + "slot_index": 0, + "links": [ + 6100 + ] + }, + { + "name": "negative", + "type": "CONDITIONING", + "slot_index": 1, + "links": [ + 6101 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.34", + "Node name for S&R": "ControlNetApplyAdvanced" + }, + "widgets_values": [ + 1, + 0, + 1 + ] + }, + { + "id": 4021, + "type": "SEGSPass", + "pos": [ + 8020, + 1390 + ], + "size": [ + 210, + 30 + ], + "flags": { + "collapsed": true + }, + "order": 424, + "mode": 0, + "inputs": [ + { + "name": "SEGS", + "type": "SEGS", + "link": 6102 + } + ], + "outputs": [ + { + "name": "SEGS", + "type": "SEGS", + "slot_index": 0, + "links": [ + 5997 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "ComfyUI-Flux-Continuum", + "ver": "0524a071ad9f1b6a4012f083a610a7a7d5f2991a", + "Node name for S&R": "SEGSPass", + "aux_id": "robertvoy/Comfyui-Flux-Continuum" + }, + "widgets_values": [] + }, + { + "id": 4032, + "type": "SimpleComparison+", + "pos": [ + 4600, + 1320 + ], + "size": [ + 210, + 80 + ], + "flags": { + "collapsed": true + }, + "order": 308, + "mode": 0, + "inputs": [ + { + "name": "a", + "type": "*", + "link": 6135 + }, + { + "name": "b", + "type": "*", + "link": 6122 + } + ], + "outputs": [ + { + "name": "BOOLEAN", + "type": "BOOLEAN", + "slot_index": 0, + "links": [ + 6082 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui_essentials", + "ver": "9d9f4bedfc9f0321c19faf71855e228c93bd0dc9", + "Node name for S&R": "SimpleComparison+" + }, + "widgets_values": [ + "!=" + ] + }, + { + "id": 4051, + "type": "SimpleMathFloat+", + "pos": [ + 4420, + 1320 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 148, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "slot_index": 0, + "links": [ + 6122 + ] + } + ], + "title": "Float", + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui_essentials", + "ver": "33ff89fd354d8ec3ab6affb605a79a931b445d99", + "Node name for S&R": "SimpleMathFloat+" + }, + "widgets_values": [ + 0 + ] + }, + { + "id": 4058, + "type": "SplitVec3", + "pos": [ + 5650, + 1240 + ], + "size": [ + 200, + 70 + ], + "flags": { + "collapsed": true + }, + "order": 222, + "mode": 0, + "inputs": [ + { + "name": "a", + "type": "VEC3", + "link": 6137 + } + ], + "outputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "links": [ + 6142, + 6143 + ] + }, + { + "name": "FLOAT", + "type": "FLOAT", + "links": [ + 6138, + 6140 + ] + }, + { + "name": "FLOAT", + "type": "FLOAT", + "links": [ + 6139, + 6141 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "ComfyUI-Flux-Continuum", + "ver": "0524a071ad9f1b6a4012f083a610a7a7d5f2991a", + "Node name for S&R": "SplitVec3", + "aux_id": "robertvoy/Comfyui-Flux-Continuum" + }, + "widgets_values": [] + }, + { + "id": 4060, + "type": "SimpleMathFloat+", + "pos": [ + 5540, + 1310 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 149, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "slot_index": 0, + "links": [ + 6152 + ] + } + ], + "title": "Float", + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui_essentials", + "ver": "33ff89fd354d8ec3ab6affb605a79a931b445d99", + "Node name for S&R": "SimpleMathFloat+" + }, + "widgets_values": [ + 0 + ] + }, + { + "id": 4037, + "type": "ImpactControlBridgeFix", + "pos": [ + 7580, + 1250 + ], + "size": [ + 230, + 80 + ], + "flags": { + "collapsed": true + }, + "order": 353, + "mode": 0, + "inputs": [ + { + "name": "value", + "type": "*", + "link": 6149 + }, + { + "name": "mode", + "type": "BOOLEAN", + "widget": { + "name": "mode" + }, + "link": 6090 + } + ], + "outputs": [ + { + "name": "value", + "type": "*", + "slot_index": 0, + "links": [ + 6022, + 6054 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "ComfyUI-Flux-Continuum", + "ver": "0524a071ad9f1b6a4012f083a610a7a7d5f2991a", + "Node name for S&R": "ImpactControlBridgeFix", + "aux_id": "robertvoy/Comfyui-Flux-Continuum" + }, + "widgets_values": [ + true, + "Bypass" + ] + }, + { + "id": 4059, + "type": "SplitVec3", + "pos": [ + 7270, + 1240 + ], + "size": [ + 200, + 70 + ], + "flags": { + "collapsed": true + }, + "order": 223, + "mode": 0, + "inputs": [ + { + "name": "a", + "type": "VEC3", + "link": 6150 + } + ], + "outputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "links": [ + 6148, + 6149 + ] + }, + { + "name": "FLOAT", + "type": "FLOAT", + "links": [ + 6144, + 6146 + ] + }, + { + "name": "FLOAT", + "type": "FLOAT", + "links": [ + 6145, + 6147 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "ComfyUI-Flux-Continuum", + "ver": "0524a071ad9f1b6a4012f083a610a7a7d5f2991a", + "Node name for S&R": "SplitVec3", + "aux_id": "robertvoy/Comfyui-Flux-Continuum" + }, + "widgets_values": [] + }, + { + "id": 1387, + "type": "ImageUpscaleWithModel", + "pos": [ + 4060, + 5340 + ], + "size": [ + 200, + 70 + ], + "flags": { + "collapsed": true + }, + "order": 224, + "mode": 0, + "inputs": [ + { + "name": "upscale_model", + "type": "UPSCALE_MODEL", + "link": 2163 + }, + { + "name": "image", + "type": "IMAGE", + "link": 2165 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 6181 + ] + } + ], + "title": "Upscale", + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "ImageUpscaleWithModel" + }, + "widgets_values": [] + }, + { + "id": 3132, + "type": "RepeatImageBatch", + "pos": [ + 4650, + 5330 + ], + "size": [ + 210, + 78 + ], + "flags": { + "collapsed": true + }, + "order": 374, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 6183 + }, + { + "name": "amount", + "type": "INT", + "widget": { + "name": "amount" + }, + "link": 4666 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 4668 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "RepeatImageBatch" + }, + "widgets_values": [ + 2 + ] + }, + { + "id": 4079, + "type": "ImageResizeKJv2", + "pos": [ + 4420, + 5350 + ], + "size": [ + 270, + 242 + ], + "flags": { + "collapsed": true + }, + "order": 339, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 6181 + }, + { + "name": "width", + "type": "INT", + "widget": { + "name": "width" + }, + "link": 6180 + }, + { + "name": "height", + "type": "INT", + "widget": { + "name": "height" + }, + "link": 6179 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 6182, + 6183 + ] + }, + { + "name": "width", + "type": "INT", + "links": null + }, + { + "name": "height", + "type": "INT", + "links": null + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui-kjnodes", + "ver": "5dcda71011870278c35d92ff77a677ed2e538f2d", + "Node name for S&R": "ImageResizeKJv2" + }, + "widgets_values": [ + 512, + 512, + "lanczos", + "stretch", + "0, 0, 0", + "center", + 2, + "cpu" + ] + }, + { + "id": 3178, + "type": "SimpleMath+", + "pos": [ + 4200, + 5430 + ], + "size": [ + 320, + 100 + ], + "flags": { + "collapsed": true + }, + "order": 288, + "mode": 0, + "inputs": [ + { + "name": "a", + "shape": 7, + "type": "*", + "link": 4716 + }, + { + "name": "b", + "shape": 7, + "type": "*", + "link": 4714 + }, + { + "name": "c", + "shape": 7, + "type": "*", + "link": null + } + ], + "outputs": [ + { + "name": "INT", + "type": "INT", + "slot_index": 0, + "links": [ + 6180 + ] + }, + { + "name": "FLOAT", + "type": "FLOAT", + "links": null + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui_essentials", + "ver": "33ff89fd354d8ec3ab6affb605a79a931b445d99", + "Node name for S&R": "SimpleMath+" + }, + "widgets_values": [ + "a*b" + ] + }, + { + "id": 3182, + "type": "SimpleMath+", + "pos": [ + 4210, + 5660 + ], + "size": [ + 320, + 100 + ], + "flags": { + "collapsed": true + }, + "order": 289, + "mode": 0, + "inputs": [ + { + "name": "a", + "shape": 7, + "type": "*", + "link": 4717 + }, + { + "name": "b", + "shape": 7, + "type": "*", + "link": 4715 + }, + { + "name": "c", + "shape": 7, + "type": "*", + "link": null + } + ], + "outputs": [ + { + "name": "INT", + "type": "INT", + "slot_index": 0, + "links": [ + 6179 + ] + }, + { + "name": "FLOAT", + "type": "FLOAT", + "links": null + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui_essentials", + "ver": "33ff89fd354d8ec3ab6affb605a79a931b445d99", + "Node name for S&R": "SimpleMath+" + }, + "widgets_values": [ + "a*b" + ] + }, + { + "id": 703, + "type": "GetImageSize+", + "pos": [ + 4000, + 5540 + ], + "size": [ + 200, + 70 + ], + "flags": { + "collapsed": true + }, + "order": 201, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 2166 + } + ], + "outputs": [ + { + "name": "width", + "type": "INT", + "slot_index": 0, + "links": [ + 4716 + ] + }, + { + "name": "height", + "type": "INT", + "slot_index": 1, + "links": [ + 4717 + ] + }, + { + "name": "count", + "type": "INT", + "links": null + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui_essentials", + "ver": "33ff89fd354d8ec3ab6affb605a79a931b445d99", + "Node name for S&R": "GetImageSize+" + }, + "widgets_values": [] + }, + { + "id": 3679, + "type": "GetImageSize+", + "pos": [ + 4140, + 2060 + ], + "size": [ + 210, + 70 + ], + "flags": { + "collapsed": true + }, + "order": 226, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 5482 + } + ], + "outputs": [ + { + "name": "width", + "type": "INT", + "slot_index": 0, + "links": [ + 5479 + ] + }, + { + "name": "height", + "type": "INT", + "slot_index": 1, + "links": [ + 5480 + ] + }, + { + "name": "count", + "type": "INT", + "links": null + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui_essentials", + "ver": "33ff89fd354d8ec3ab6affb605a79a931b445d99", + "Node name for S&R": "GetImageSize+" + }, + "widgets_values": [] + }, + { + "id": 4020, + "type": "ImpactControlNetApplyAdvancedSEGS", + "pos": [ + 5090, + 1390 + ], + "size": [ + 270, + 186 + ], + "flags": { + "collapsed": true + }, + "order": 379, + "mode": 4, + "inputs": [ + { + "name": "segs", + "type": "SEGS", + "link": 6064 + }, + { + "name": "control_net", + "type": "CONTROL_NET", + "link": 6108 + }, + { + "name": "segs_preprocessor", + "shape": 7, + "type": "SEGS_PREPROCESSOR", + "link": null + }, + { + "name": "control_image", + "shape": 7, + "type": "IMAGE", + "link": 6194 + }, + { + "name": "vae", + "shape": 7, + "type": "VAE", + "link": 6067 + }, + { + "name": "strength", + "type": "FLOAT", + "widget": { + "name": "strength" + }, + "link": 6068 + }, + { + "name": "start_percent", + "type": "FLOAT", + "widget": { + "name": "start_percent" + }, + "link": 6133 + }, + { + "name": "end_percent", + "type": "FLOAT", + "widget": { + "name": "end_percent" + }, + "link": 6134 + } + ], + "outputs": [ + { + "name": "SEGS", + "type": "SEGS", + "slot_index": 0, + "links": [ + 6057 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui-impact-pack", + "ver": "cd34cfdd638a996fd011be1b490c70a7e0fb505f", + "Node name for S&R": "ImpactControlNetApplyAdvancedSEGS" + }, + "widgets_values": [ + 1, + 0, + 1 + ] + }, + { + "id": 4000, + "type": "ControlNetApplyAdvanced", + "pos": [ + 5080, + 1150 + ], + "size": [ + 300, + 186 + ], + "flags": { + "collapsed": true + }, + "order": 378, + "mode": 4, + "inputs": [ + { + "name": "positive", + "type": "CONDITIONING", + "link": 6115 + }, + { + "name": "negative", + "type": "CONDITIONING", + "link": 6110 + }, + { + "name": "control_net", + "type": "CONTROL_NET", + "link": 6107 + }, + { + "name": "image", + "type": "IMAGE", + "link": 6195 + }, + { + "name": "vae", + "shape": 7, + "type": "VAE", + "link": 6002 + }, + { + "name": "strength", + "type": "FLOAT", + "widget": { + "name": "strength" + }, + "link": 6003 + }, + { + "name": "start_percent", + "type": "FLOAT", + "widget": { + "name": "start_percent" + }, + "link": 6131 + }, + { + "name": "end_percent", + "type": "FLOAT", + "widget": { + "name": "end_percent" + }, + "link": 6132 + } + ], + "outputs": [ + { + "name": "positive", + "type": "CONDITIONING", + "slot_index": 0, + "links": [ + 6009 + ] + }, + { + "name": "negative", + "type": "CONDITIONING", + "slot_index": 1, + "links": [ + 6010 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.34", + "Node name for S&R": "ControlNetApplyAdvanced" + }, + "widgets_values": [ + 1, + 0, + 1 + ] + }, + { + "id": 3493, + "type": "Canny", + "pos": [ + 4080, + 1890 + ], + "size": [ + 310, + 82 + ], + "flags": { + "collapsed": false + }, + "order": 313, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 5212 + }, + { + "name": "low_threshold", + "type": "FLOAT", + "widget": { + "name": "low_threshold" + }, + "link": 6190 + }, + { + "name": "high_threshold", + "type": "FLOAT", + "widget": { + "name": "high_threshold" + }, + "link": 6191 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 5483 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 80, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "Canny" + }, + "widgets_values": [ + 0.010000000000000002, + 0.32000000000000006 + ] + }, + { + "id": 4082, + "type": "SplitVec2", + "pos": [ + 3930, + 1790 + ], + "size": [ + 140, + 46 + ], + "flags": { + "collapsed": true + }, + "order": 225, + "mode": 0, + "inputs": [ + { + "name": "a", + "type": "VEC2", + "link": 6185 + } + ], + "outputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "links": [ + 6188, + 6190 + ] + }, + { + "name": "FLOAT", + "type": "FLOAT", + "links": [ + 6189, + 6191 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "ComfyUI-Flux-Continuum", + "ver": "0524a071ad9f1b6a4012f083a610a7a7d5f2991a", + "Node name for S&R": "SplitVec2", + "aux_id": "robertvoy/Comfyui-Flux-Continuum" + }, + "widgets_values": [] + }, + { + "id": 4056, + "type": "DWPreprocessor", + "pos": [ + 6750, + 1180 + ], + "size": [ + 270, + 222 + ], + "flags": {}, + "order": 221, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 6128 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 6129, + 6130, + 6197 + ] + }, + { + "name": "POSE_KEYPOINT", + "type": "POSE_KEYPOINT", + "links": null + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui_controlnet_aux", + "ver": "83463c2e4b04e729268e57f638b4212e0da4badc", + "Node name for S&R": "DWPreprocessor" + }, + "widgets_values": [ + "enable", + "enable", + "enable", + 1024, + "yolox_l.onnx", + "dw-ll_ucoco_384_bs5.torchscript.pt", + "disable" + ] + }, + { + "id": 3360, + "type": "CLIPTextEncode", + "pos": [ + 3870, + 6980 + ], + "size": [ + 400, + 200 + ], + "flags": { + "collapsed": true + }, + "order": 207, + "mode": 0, + "inputs": [ + { + "name": "clip", + "type": "CLIP", + "link": 5012 + } + ], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "slot_index": 0, + "links": [ + 4995 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "CLIPTextEncode" + }, + "widgets_values": [ + "" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 4019, + "type": "ImpactControlNetApplyAdvancedSEGS", + "pos": [ + 6160, + 1390 + ], + "size": [ + 270, + 178 + ], + "flags": { + "collapsed": true + }, + "order": 398, + "mode": 4, + "inputs": [ + { + "name": "segs", + "type": "SEGS", + "link": 6057 + }, + { + "name": "control_net", + "type": "CONTROL_NET", + "link": 6106 + }, + { + "name": "segs_preprocessor", + "shape": 7, + "type": "SEGS_PREPROCESSOR", + "link": null + }, + { + "name": "control_image", + "shape": 7, + "type": "IMAGE", + "link": 6221 + }, + { + "name": "vae", + "shape": 7, + "type": "VAE", + "link": 6060 + }, + { + "name": "strength", + "type": "FLOAT", + "widget": { + "name": "strength" + }, + "link": 6061 + }, + { + "name": "start_percent", + "type": "FLOAT", + "widget": { + "name": "start_percent" + }, + "link": 6138 + }, + { + "name": "end_percent", + "type": "FLOAT", + "widget": { + "name": "end_percent" + }, + "link": 6139 + } + ], + "outputs": [ + { + "name": "SEGS", + "type": "SEGS", + "slot_index": 0, + "links": [ + 6050 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui-impact-pack", + "ver": "cd34cfdd638a996fd011be1b490c70a7e0fb505f", + "Node name for S&R": "ImpactControlNetApplyAdvancedSEGS" + }, + "widgets_values": [ + 1, + 0, + 1 + ] + }, + { + "id": 4005, + "type": "ControlNetApplyAdvanced", + "pos": [ + 6230, + 1140 + ], + "size": [ + 300, + 178 + ], + "flags": { + "collapsed": true + }, + "order": 397, + "mode": 4, + "inputs": [ + { + "name": "positive", + "type": "CONDITIONING", + "link": 6009 + }, + { + "name": "negative", + "type": "CONDITIONING", + "link": 6010 + }, + { + "name": "control_net", + "type": "CONTROL_NET", + "link": 6105 + }, + { + "name": "image", + "type": "IMAGE", + "link": 6222 + }, + { + "name": "vae", + "shape": 7, + "type": "VAE", + "link": 6013 + }, + { + "name": "strength", + "type": "FLOAT", + "widget": { + "name": "strength" + }, + "link": 6014 + }, + { + "name": "start_percent", + "type": "FLOAT", + "widget": { + "name": "start_percent" + }, + "link": 6140 + }, + { + "name": "end_percent", + "type": "FLOAT", + "widget": { + "name": "end_percent" + }, + "link": 6141 + } + ], + "outputs": [ + { + "name": "positive", + "type": "CONDITIONING", + "slot_index": 0, + "links": [ + 6017 + ] + }, + { + "name": "negative", + "type": "CONDITIONING", + "slot_index": 1, + "links": [ + 6018 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.34", + "Node name for S&R": "ControlNetApplyAdvanced" + }, + "widgets_values": [ + 1, + 0, + 1 + ] + }, + { + "id": 2334, + "type": "Image Comparer (rgthree)", + "pos": [ + 840, + 150 + ], + "size": [ + 870, + 920 + ], + "flags": { + "collapsed": false, + "pinned": true + }, + "order": 231, + "mode": 0, + "inputs": [ + { + "dir": 3, + "name": "image_a", + "type": "IMAGE", + "link": 3426 + }, + { + "dir": 3, + "name": "image_b", + "type": "IMAGE", + "link": 3425 + } + ], + "outputs": [], + "title": "Img Compare", + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "rgthree-comfy", + "ver": "32142fe476878a354dda6e2d4b5ea98960de3ced", + "comparer_mode": "Slide" + }, + "widgets_values": [ + [ + { + "name": "A", + "selected": true, + "url": "/api/view?filename=rgthree.compare._temp_quelf_00009_.png&type=temp&subfolder=&rand=0.9973055114185437" + }, + { + "name": "B", + "selected": true, + "url": "/api/view?filename=rgthree.compare._temp_quelf_00010_.png&type=temp&subfolder=&rand=0.7971125669079543" + } + ] + ], + "color": "#222", + "bgcolor": "#000" + }, + { + "id": 3920, + "type": "StyleModelApply", + "pos": [ + 5330, + 620 + ], + "size": [ + 270, + 122 + ], + "flags": {}, + "order": 361, + "mode": 0, + "inputs": [ + { + "name": "conditioning", + "type": "CONDITIONING", + "link": 5884 + }, + { + "name": "style_model", + "type": "STYLE_MODEL", + "link": 5883 + }, + { + "name": "clip_vision_output", + "type": "CLIP_VISION_OUTPUT", + "link": 5882 + }, + { + "name": "strength", + "type": "FLOAT", + "widget": { + "name": "strength" + }, + "link": 5885 + } + ], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [ + 5901 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.28", + "Node name for S&R": "StyleModelApply" + }, + "widgets_values": [ + 1, + "attn_bias" + ] + }, + { + "id": 1051, + "type": "SamplerCustomAdvanced", + "pos": [ + 7440, + 2310 + ], + "size": [ + 240, + 110 + ], + "flags": { + "collapsed": false + }, + "order": 419, + "mode": 0, + "inputs": [ + { + "name": "noise", + "type": "NOISE", + "link": 1776 + }, + { + "name": "guider", + "type": "GUIDER", + "link": 2089 + }, + { + "name": "sampler", + "type": "SAMPLER", + "link": 2337 + }, + { + "name": "sigmas", + "type": "SIGMAS", + "link": 1769 + }, + { + "name": "latent_image", + "type": "LATENT", + "link": 2105 + } + ], + "outputs": [ + { + "name": "output", + "type": "LATENT", + "slot_index": 0, + "links": [ + 1773, + 6243 + ] + }, + { + "name": "denoised_output", + "type": "LATENT", + "slot_index": 1, + "links": [] + } + ], + "title": "Sampler", + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "SamplerCustomAdvanced" + }, + "widgets_values": [], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 1134, + "type": "VAEDecode", + "pos": [ + 7910, + 3040 + ], + "size": [ + 140, + 50 + ], + "flags": { + "collapsed": true + }, + "order": 428, + "mode": 4, + "inputs": [ + { + "name": "samples", + "type": "LATENT", + "link": 6243 + }, + { + "name": "vae", + "type": "VAE", + "link": 1879 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 1923 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "VAEDecode" + }, + "widgets_values": [] + }, + { + "id": 3332, + "type": "RepeatLatentBatch", + "pos": [ + 5480, + 4750 + ], + "size": [ + 210, + 78 + ], + "flags": { + "collapsed": true + }, + "order": 359, + "mode": 0, + "inputs": [ + { + "name": "samples", + "type": "LATENT", + "link": 4981 + }, + { + "name": "amount", + "type": "INT", + "widget": { + "name": "amount" + }, + "link": 4980 + } + ], + "outputs": [ + { + "name": "LATENT", + "type": "LATENT", + "slot_index": 0, + "links": [ + 4983 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "RepeatLatentBatch" + }, + "widgets_values": [ + 1 + ] + }, + { + "id": 1573, + "type": "Fast Groups Bypasser (rgthree)", + "pos": [ + 480, + 1460 + ], + "size": [ + 310, + 106 + ], + "flags": { + "collapsed": false, + "pinned": true + }, + "order": 150, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "OPT_CONNECTION", + "type": "*", + "links": null + } + ], + "title": "Options", + "properties": { + "matchColors": "", + "matchTitle": "Save|Play|Tea", + "showNav": true, + "sort": "position", + "customSortAlphabet": "", + "toggleRestriction": "default", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + } + }, + { + "id": 4109, + "type": "TeaCache", + "pos": [ + -1220, + 370 + ], + "size": [ + 270, + 130 + ], + "flags": { + "collapsed": true + }, + "order": 336, + "mode": 4, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 6295 + } + ], + "outputs": [ + { + "name": "model", + "type": "MODEL", + "links": [ + 6246 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "teacache", + "ver": "9db9e3393f674bd32cc1ce5ce271fb4994ef19c8", + "Node name for S&R": "TeaCache" + }, + "widgets_values": [ + "flux", + 0.4, + 0, + 1, + "cuda" + ] + }, + { + "id": 1072, + "type": "FluxSamplerParams+", + "pos": [ + 4390, + 2990 + ], + "size": [ + 280, + 286 + ], + "flags": {}, + "order": 338, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 3363 + }, + { + "name": "conditioning", + "type": "CONDITIONING", + "link": 3362 + }, + { + "name": "latent_image", + "type": "LATENT", + "link": 1800 + }, + { + "name": "loras", + "shape": 7, + "type": "LORA_PARAMS", + "link": null + }, + { + "name": "seed", + "type": "STRING", + "widget": { + "name": "seed" + }, + "link": 4690 + }, + { + "name": "sampler", + "type": "STRING", + "widget": { + "name": "sampler" + }, + "link": 2344 + }, + { + "name": "scheduler", + "type": "STRING", + "widget": { + "name": "scheduler" + }, + "link": 2005 + }, + { + "name": "steps", + "type": "STRING", + "widget": { + "name": "steps" + }, + "link": 2004 + }, + { + "name": "guidance", + "type": "STRING", + "widget": { + "name": "guidance" + }, + "link": 2007 + }, + { + "name": "max_shift", + "type": "STRING", + "widget": { + "name": "max_shift" + }, + "link": 2410 + }, + { + "name": "denoise", + "type": "STRING", + "widget": { + "name": "denoise" + }, + "link": 4692 + } + ], + "outputs": [ + { + "name": "latent", + "type": "LATENT", + "slot_index": 0, + "links": [ + 1803 + ] + }, + { + "name": "params", + "type": "SAMPLER_PARAMS", + "links": null + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui_essentials", + "ver": "33ff89fd354d8ec3ab6affb605a79a931b445d99", + "Node name for S&R": "FluxSamplerParams+" + }, + "widgets_values": [ + "?", + "euler", + "beta", + "20", + "2.5", + "1.15", + "0.5", + "1.0" + ] + }, + { + "id": 3170, + "type": "SomethingToString", + "pos": [ + 4220, + 3410 + ], + "size": [ + 210, + 82 + ], + "flags": { + "collapsed": true + }, + "order": 197, + "mode": 0, + "inputs": [ + { + "name": "input", + "type": "*", + "link": 4691 + } + ], + "outputs": [ + { + "name": "STRING", + "type": "STRING", + "slot_index": 0, + "links": [ + 4692 + ] + } + ], + "title": "To String", + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui-kjnodes", + "ver": "d835ac96042394299f76793544ee3643fd4b0457", + "Node name for S&R": "SomethingToString" + }, + "widgets_values": [ + "", + "" + ] + }, + { + "id": 3169, + "type": "SomethingToString", + "pos": [ + 4200, + 3120 + ], + "size": [ + 210, + 82 + ], + "flags": { + "collapsed": true + }, + "order": 213, + "mode": 0, + "inputs": [ + { + "name": "input", + "type": "*", + "link": 4689 + } + ], + "outputs": [ + { + "name": "STRING", + "type": "STRING", + "slot_index": 0, + "links": [ + 4690 + ] + } + ], + "title": "To String", + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui-kjnodes", + "ver": "d835ac96042394299f76793544ee3643fd4b0457", + "Node name for S&R": "SomethingToString" + }, + "widgets_values": [ + "", + "" + ] + }, + { + "id": 1389, + "type": "UltimateSDUpscaleNoUpscale", + "pos": [ + 5170, + 5260 + ], + "size": [ + 310, + 570 + ], + "flags": { + "collapsed": false + }, + "order": 394, + "mode": 0, + "inputs": [ + { + "name": "upscaled_image", + "type": "IMAGE", + "link": 4668 + }, + { + "name": "model", + "type": "MODEL", + "link": 2169 + }, + { + "name": "positive", + "type": "CONDITIONING", + "link": 5369 + }, + { + "name": "negative", + "type": "CONDITIONING", + "link": 2171 + }, + { + "name": "vae", + "type": "VAE", + "link": 2172 + }, + { + "name": "seed", + "type": "INT", + "widget": { + "name": "seed" + }, + "link": 2173 + }, + { + "name": "steps", + "type": "INT", + "widget": { + "name": "steps" + }, + "link": 2175 + }, + { + "name": "sampler_name", + "type": "COMBO", + "widget": { + "name": "sampler_name" + }, + "link": 2342 + }, + { + "name": "scheduler", + "type": "COMBO", + "widget": { + "name": "scheduler" + }, + "link": 2176 + }, + { + "name": "denoise", + "type": "FLOAT", + "widget": { + "name": "denoise" + }, + "link": 2174 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 2177 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui_ultimatesdupscale", + "ver": "778a475dde8116a2066fe07f6c9ca15554e0b5be", + "Node name for S&R": "UltimateSDUpscaleNoUpscale" + }, + "widgets_values": [ + 568143175032075, + "randomize", + 20, + 1, + "euler", + "normal", + 0.2, + "Linear", + 1024, + 1024, + 20, + 20, + "None", + 1, + 20, + 20, + 20, + true, + false + ] + }, + { + "id": 594, + "type": "VAELoader", + "pos": [ + 3070, + 290 + ], + "size": [ + 320, + 60 + ], + "flags": { + "collapsed": false + }, + "order": 151, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "VAE", + "type": "VAE", + "slot_index": 0, + "links": [ + 4425 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "VAELoader" + }, + "widgets_values": [ + "ae.safetensors" + ] + }, + { + "id": 4048, + "type": "SplitVec3", + "pos": [ + 4450, + 1250 + ], + "size": [ + 200, + 70 + ], + "flags": { + "collapsed": true + }, + "order": 220, + "mode": 0, + "inputs": [ + { + "name": "a", + "type": "VEC3", + "link": 6118 + } + ], + "outputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "links": [ + 6135, + 6136 + ] + }, + { + "name": "FLOAT", + "type": "FLOAT", + "links": [ + 6131, + 6133 + ] + }, + { + "name": "FLOAT", + "type": "FLOAT", + "links": [ + 6132, + 6134 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "ComfyUI-Flux-Continuum", + "ver": "0524a071ad9f1b6a4012f083a610a7a7d5f2991a", + "Node name for S&R": "SplitVec3", + "aux_id": "robertvoy/Comfyui-Flux-Continuum" + }, + "widgets_values": [] + }, + { + "id": 2469, + "type": "UNETLoader", + "pos": [ + 3070, + 170 + ], + "size": [ + 320, + 82 + ], + "flags": {}, + "order": 152, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "slot_index": 0, + "links": [ + 3494 + ] + } + ], + "title": "Load Flux Model", + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "UNETLoader" + }, + "widgets_values": [ + "flux1-dev.safetensors", + "fp8_e4m3fn" + ] + }, + { + "id": 3234, + "type": "UNETLoader", + "pos": [ + 3070, + 560 + ], + "size": [ + 320, + 82 + ], + "flags": { + "collapsed": false + }, + "order": 153, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "slot_index": 0, + "links": [ + 4805 + ] + } + ], + "title": "Load Flux Fill Model", + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "UNETLoader" + }, + "widgets_values": [ + "flux1-fill-dev.safetensors", + "default" + ] + }, + { + "id": 3279, + "type": "VAEDecode", + "pos": [ + 6020, + 3860 + ], + "size": [ + 170, + 50 + ], + "flags": { + "collapsed": false + }, + "order": 408, + "mode": 0, + "inputs": [ + { + "name": "samples", + "type": "LATENT", + "link": 4916 + }, + { + "name": "vae", + "type": "VAE", + "link": 4904 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 6308 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "VAEDecode" + }, + "widgets_values": [] + }, + { + "id": 4119, + "type": "Reroute", + "pos": [ + 4520, + 3580 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 333, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 6305 + } + ], + "outputs": [ + { + "name": "", + "type": "STITCHER", + "links": [ + 6306 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 4118, + "type": "InpaintStitchImproved", + "pos": [ + 6380, + 3890 + ], + "size": [ + 216.33749389648438, + 46 + ], + "flags": { + "collapsed": true + }, + "order": 422, + "mode": 0, + "inputs": [ + { + "name": "stitcher", + "type": "STITCHER", + "link": 6307 + }, + { + "name": "inpainted_image", + "type": "IMAGE", + "link": 6308 + } + ], + "outputs": [ + { + "name": "image", + "type": "IMAGE", + "links": [ + 6309 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui-inpaint-cropandstitch", + "ver": "2.1.7", + "Node name for S&R": "InpaintStitchImproved" + }, + "widgets_values": [] + }, + { + "id": 3219, + "type": "VAEDecode", + "pos": [ + 6220, + 4640 + ], + "size": [ + 170, + 50 + ], + "flags": { + "collapsed": false + }, + "order": 401, + "mode": 0, + "inputs": [ + { + "name": "samples", + "type": "LATENT", + "link": 4795 + }, + { + "name": "vae", + "type": "VAE", + "link": 6321 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 6326 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "VAEDecode" + }, + "widgets_values": [] + }, + { + "id": 4122, + "type": "Reroute", + "pos": [ + 6000, + 4470 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 320, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 6328 + } + ], + "outputs": [ + { + "name": "", + "type": "VAE", + "links": [ + 6321 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 3245, + "type": "Reroute", + "pos": [ + 6280, + 4510 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 358, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 6324 + } + ], + "outputs": [ + { + "name": "", + "type": "STITCHER", + "slot_index": 0, + "links": [ + 6325 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 3216, + "type": "KSampler", + "pos": [ + 5780, + 4630 + ], + "size": [ + 270, + 262 + ], + "flags": {}, + "order": 383, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 4789 + }, + { + "name": "positive", + "type": "CONDITIONING", + "link": 4790 + }, + { + "name": "negative", + "type": "CONDITIONING", + "link": 4982 + }, + { + "name": "latent_image", + "type": "LATENT", + "link": 4983 + }, + { + "name": "seed", + "type": "INT", + "widget": { + "name": "seed" + }, + "link": 4793 + }, + { + "name": "steps", + "type": "INT", + "widget": { + "name": "steps" + }, + "link": 4794 + }, + { + "name": "sampler_name", + "type": "COMBO", + "widget": { + "name": "sampler_name" + }, + "link": 4803 + }, + { + "name": "scheduler", + "type": "COMBO", + "widget": { + "name": "scheduler" + }, + "link": 4801 + } + ], + "outputs": [ + { + "name": "LATENT", + "type": "LATENT", + "slot_index": 0, + "links": [ + 4795 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "KSampler" + }, + "widgets_values": [ + 795803743143650, + "randomize", + 20, + 1, + "euler", + "normal", + 1 + ] + }, + { + "id": 4124, + "type": "Reroute", + "pos": [ + 4530, + 4500 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 319, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 6327 + } + ], + "outputs": [ + { + "name": "", + "type": "STITCHER", + "links": [ + 6324 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 3214, + "type": "InpaintModelConditioning", + "pos": [ + 4910, + 4650 + ], + "size": [ + 300, + 140 + ], + "flags": {}, + "order": 321, + "mode": 0, + "inputs": [ + { + "name": "positive", + "type": "CONDITIONING", + "link": 5039 + }, + { + "name": "negative", + "type": "CONDITIONING", + "link": 4784 + }, + { + "name": "vae", + "type": "VAE", + "link": 6329 + }, + { + "name": "pixels", + "type": "IMAGE", + "link": 6314 + }, + { + "name": "mask", + "type": "MASK", + "link": 6315 + } + ], + "outputs": [ + { + "name": "positive", + "type": "CONDITIONING", + "slot_index": 0, + "links": [ + 4790 + ] + }, + { + "name": "negative", + "type": "CONDITIONING", + "slot_index": 1, + "links": [ + 4982 + ] + }, + { + "name": "latent", + "type": "LATENT", + "slot_index": 2, + "links": [ + 4981 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "InpaintModelConditioning" + }, + "widgets_values": [ + false + ] + }, + { + "id": 4126, + "type": "Reroute", + "pos": [ + 4720, + 4460 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 237, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 6330 + } + ], + "outputs": [ + { + "name": "", + "type": "VAE", + "links": [ + 6328, + 6329 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 4123, + "type": "InpaintStitchImproved", + "pos": [ + 6490, + 4600 + ], + "size": [ + 216.33749389648438, + 46 + ], + "flags": { + "collapsed": true + }, + "order": 415, + "mode": 0, + "inputs": [ + { + "name": "stitcher", + "type": "STITCHER", + "link": 6325 + }, + { + "name": "inpainted_image", + "type": "IMAGE", + "link": 6326 + } + ], + "outputs": [ + { + "name": "image", + "type": "IMAGE", + "links": [ + 6323 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui-inpaint-cropandstitch", + "ver": "2.1.7", + "Node name for S&R": "InpaintStitchImproved" + }, + "widgets_values": [] + }, + { + "id": 3284, + "type": "Reroute", + "pos": [ + 4710, + 3550 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 240, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 4912 + } + ], + "outputs": [ + { + "name": "", + "type": "VAE", + "slot_index": 0, + "links": [ + 4911, + 4913 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 1293, + "type": "RepeatLatentBatch", + "pos": [ + 5420, + 3960 + ], + "size": [ + 210, + 78 + ], + "flags": { + "collapsed": true + }, + "order": 369, + "mode": 0, + "inputs": [ + { + "name": "samples", + "type": "LATENT", + "link": 4919 + }, + { + "name": "amount", + "type": "INT", + "widget": { + "name": "amount" + }, + "link": 2018 + } + ], + "outputs": [ + { + "name": "LATENT", + "type": "LATENT", + "slot_index": 0, + "links": [ + 4920 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "RepeatLatentBatch" + }, + "widgets_values": [ + 1 + ] + }, + { + "id": 3246, + "type": "CLIPTextEncode", + "pos": [ + 4540, + 3960 + ], + "size": [ + 270.4624938964844, + 140 + ], + "flags": { + "collapsed": true + }, + "order": 234, + "mode": 0, + "inputs": [ + { + "name": "clip", + "type": "CLIP", + "link": 4827 + } + ], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "slot_index": 0, + "links": [ + 4829 + ] + } + ], + "title": "CLIP Text Encode (Negative Prompt)", + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "CLIPTextEncode" + }, + "widgets_values": [ + "" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 4120, + "type": "Reroute", + "pos": [ + 6190, + 3590 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 368, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 6306 + } + ], + "outputs": [ + { + "name": "", + "type": "STITCHER", + "links": [ + 6307 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 3213, + "type": "CLIPTextEncode", + "pos": [ + 4590, + 4780 + ], + "size": [ + 430, + 180 + ], + "flags": { + "collapsed": true + }, + "order": 236, + "mode": 0, + "inputs": [ + { + "name": "clip", + "type": "CLIP", + "link": 4782 + } + ], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "slot_index": 0, + "links": [ + 4784 + ] + } + ], + "title": "CLIP Text Encode (Negative Prompt)", + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "CLIPTextEncode" + }, + "widgets_values": [ + "" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 1278, + "type": "StepSlider", + "pos": [ + 480, + 740 + ], + "size": [ + 310, + 60 + ], + "flags": { + "collapsed": false, + "pinned": true + }, + "order": 154, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "slot_index": 0, + "links": [ + 2002 + ] + } + ], + "title": "Steps", + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "ComfyUI-Flux-Continuum", + "ver": "19b70c33f872fe4e57dea291bbdd0f5559258a14", + "Node name for S&R": "StepSlider", + "aux_id": "robertvoy/Comfyui-Flux-Continuum" + }, + "widgets_values": [ + 20 + ] + }, + { + "id": 1279, + "type": "GuidanceSlider", + "pos": [ + 480, + 840 + ], + "size": [ + 310, + 60 + ], + "flags": { + "collapsed": false, + "pinned": true + }, + "order": 155, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "slot_index": 0, + "links": [ + 6341 + ] + } + ], + "title": "Guidance", + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "ComfyUI-Flux-Continuum", + "ver": "19b70c33f872fe4e57dea291bbdd0f5559258a14", + "Node name for S&R": "GuidanceSlider", + "aux_id": "robertvoy/Comfyui-Flux-Continuum" + }, + "widgets_values": [ + 2.4632880742680037 + ], + "tabContents": [ + { + "value": 2.4632880742680037 + }, + { + "value": 3.0086776144413783 + }, + { + "value": 3.538963349390465 + } + ], + "activeTab": 0 + }, + { + "id": 3548, + "type": "Reroute", + "pos": [ + 4890, + 2200 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 326, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5327 + } + ], + "outputs": [ + { + "name": "", + "type": "LATENT", + "slot_index": 0, + "links": [ + 5328 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 1131, + "type": "PreviewImage", + "pos": [ + 8310, + 2950 + ], + "size": [ + 230, + 200 + ], + "flags": {}, + "order": 439, + "mode": 4, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 1871 + } + ], + "outputs": [], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "PreviewImage" + }, + "widgets_values": [] + }, + { + "id": 1130, + "type": "ImageToMask", + "pos": [ + 8360, + 2910 + ], + "size": [ + 230, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 438, + "mode": 4, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 1868 + } + ], + "outputs": [ + { + "name": "MASK", + "type": "MASK", + "slot_index": 0, + "links": [ + 6242 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "ImageToMask" + }, + "widgets_values": [ + "red" + ] + }, + { + "id": 3127, + "type": "Note", + "pos": [ + 8080, + 3050 + ], + "size": [ + 210, + 88 + ], + "flags": {}, + "order": 156, + "mode": 4, + "inputs": [], + "outputs": [], + "properties": {}, + "widgets_values": [ + "optional mask for details.\nuse remap range to guide where you want more detail." + ], + "color": "#432", + "bgcolor": "#653" + }, + { + "id": 1090, + "type": "SDXLEmptyLatentSizePicker+", + "pos": [ + 4510, + 2460 + ], + "size": [ + 230, + 170 + ], + "flags": { + "collapsed": false + }, + "order": 242, + "mode": 0, + "inputs": [ + { + "name": "resolution", + "type": "COMBO", + "widget": { + "name": "resolution" + }, + "link": 3448 + }, + { + "name": "batch_size", + "type": "INT", + "widget": { + "name": "batch_size" + }, + "link": 3214 + } + ], + "outputs": [ + { + "name": "LATENT", + "type": "LATENT", + "slot_index": 0, + "links": [ + 4514, + 5327 + ] + }, + { + "name": "width", + "type": "INT", + "slot_index": 1, + "links": [ + 3449, + 3543 + ] + }, + { + "name": "height", + "type": "INT", + "slot_index": 2, + "links": [ + 3450, + 3544 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui_essentials", + "ver": "33ff89fd354d8ec3ab6affb605a79a931b445d99", + "Node name for S&R": "SDXLEmptyLatentSizePicker+" + }, + "widgets_values": [ + "1024x1024 (1.0)", + 2, + 0, + 0 + ] + }, + { + "id": 641, + "type": "ToBasicPipe", + "pos": [ + 4060, + 2370 + ], + "size": [ + 240, + 110 + ], + "flags": { + "collapsed": true + }, + "order": 322, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 5326 + }, + { + "name": "clip", + "type": "CLIP", + "link": 6346 + }, + { + "name": "vae", + "type": "VAE", + "link": 6347 + }, + { + "name": "positive", + "type": "CONDITIONING", + "link": 5017 + }, + { + "name": "negative", + "type": "CONDITIONING", + "link": 3212 + } + ], + "outputs": [ + { + "name": "basic_pipe", + "type": "BASIC_PIPE", + "slot_index": 0, + "links": [ + 1187 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui-impact-pack", + "ver": "0e3e6a193a68748b5e68cfd19fb6c7d92b2fac57", + "Node name for S&R": "ToBasicPipe" + }, + "widgets_values": [] + }, + { + "id": 2211, + "type": "CLIPTextEncode", + "pos": [ + 3920, + 2470 + ], + "size": [ + 210, + 88 + ], + "flags": { + "collapsed": true + }, + "order": 238, + "mode": 0, + "inputs": [ + { + "name": "clip", + "type": "CLIP", + "link": 6344 + } + ], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "slot_index": 0, + "links": [ + 3212 + ] + } + ], + "title": "Negative", + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "CLIPTextEncode" + }, + "widgets_values": [ + "" + ] + }, + { + "id": 591, + "type": "RandomNoise", + "pos": [ + 6160, + 2380 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 243, + "mode": 0, + "inputs": [ + { + "name": "noise_seed", + "type": "INT", + "widget": { + "name": "noise_seed" + }, + "link": 1360 + } + ], + "outputs": [ + { + "name": "NOISE", + "type": "NOISE", + "slot_index": 0, + "links": [ + 1371 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "RandomNoise" + }, + "widgets_values": [ + 1, + "fixed" + ] + }, + { + "id": 589, + "type": "BasicGuider", + "pos": [ + 5980, + 2450 + ], + "size": [ + 161.1999969482422, + 50 + ], + "flags": { + "collapsed": true + }, + "order": 364, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 1424 + }, + { + "name": "conditioning", + "type": "CONDITIONING", + "link": 5237 + } + ], + "outputs": [ + { + "name": "GUIDER", + "type": "GUIDER", + "slot_index": 0, + "links": [ + 1118 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "BasicGuider" + }, + "widgets_values": [] + }, + { + "id": 593, + "type": "BasicScheduler", + "pos": [ + 5960, + 2500 + ], + "size": [ + 210, + 110 + ], + "flags": { + "collapsed": false + }, + "order": 363, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 1123 + }, + { + "name": "scheduler", + "type": "COMBO", + "widget": { + "name": "scheduler" + }, + "link": 2037 + }, + { + "name": "steps", + "type": "INT", + "widget": { + "name": "steps" + }, + "link": 2038 + } + ], + "outputs": [ + { + "name": "SIGMAS", + "type": "SIGMAS", + "slot_index": 0, + "links": [ + 1120, + 5330 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "BasicScheduler" + }, + "widgets_values": [ + "beta", + 20, + 1 + ] + }, + { + "id": 586, + "type": "ModelSamplingFlux", + "pos": [ + 5400, + 2410 + ], + "size": [ + 240, + 140 + ], + "flags": { + "collapsed": false + }, + "order": 328, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 5045 + }, + { + "name": "max_shift", + "type": "FLOAT", + "widget": { + "name": "max_shift" + }, + "link": 2404 + }, + { + "name": "width", + "type": "INT", + "widget": { + "name": "width" + }, + "link": 3449 + }, + { + "name": "height", + "type": "INT", + "widget": { + "name": "height" + }, + "link": 3450 + } + ], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "slot_index": 0, + "links": [ + 1123, + 1424, + 1489 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "ModelSamplingFlux" + }, + "widgets_values": [ + 1.1500000000000001, + 0.5, + 16, + 704 + ] + }, + { + "id": 1052, + "type": "SplitSigmasDenoise", + "pos": [ + 7140, + 2490 + ], + "size": [ + 210, + 78 + ], + "flags": { + "collapsed": false + }, + "order": 403, + "mode": 0, + "inputs": [ + { + "name": "sigmas", + "type": "SIGMAS", + "link": 2092 + } + ], + "outputs": [ + { + "name": "high_sigmas", + "type": "SIGMAS", + "slot_index": 0, + "links": [ + 1769 + ] + }, + { + "name": "low_sigmas", + "type": "SIGMAS", + "slot_index": 1, + "links": [ + 3717 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "SplitSigmasDenoise" + }, + "widgets_values": [ + 0.45 + ] + }, + { + "id": 2600, + "type": "Reroute", + "pos": [ + 8950, + 2510 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 417, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 3717 + } + ], + "outputs": [ + { + "name": "", + "type": "SIGMAS", + "slot_index": 0, + "links": [ + 3718 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 3283, + "type": "Reroute", + "pos": [ + 5870, + 3550 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 323, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 4911 + } + ], + "outputs": [ + { + "name": "", + "type": "VAE", + "slot_index": 0, + "links": [ + 4904 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 1053, + "type": "SamplerCustomAdvanced", + "pos": [ + 9130, + 2340 + ], + "size": [ + 240, + 110 + ], + "flags": { + "collapsed": false + }, + "order": 443, + "mode": 0, + "inputs": [ + { + "name": "noise", + "type": "NOISE", + "link": 1770 + }, + { + "name": "guider", + "type": "GUIDER", + "link": 2090 + }, + { + "name": "sampler", + "type": "SAMPLER", + "link": 2338 + }, + { + "name": "sigmas", + "type": "SIGMAS", + "link": 3718 + }, + { + "name": "latent_image", + "type": "LATENT", + "link": 1772 + } + ], + "outputs": [ + { + "name": "output", + "type": "LATENT", + "slot_index": 0, + "links": [] + }, + { + "name": "denoised_output", + "type": "LATENT", + "slot_index": 1, + "links": [ + 1787 + ] + } + ], + "title": "Sampler", + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "SamplerCustomAdvanced" + }, + "widgets_values": [], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1060, + "type": "VAEDecode", + "pos": [ + 9460, + 2310 + ], + "size": [ + 170, + 50 + ], + "flags": { + "collapsed": true + }, + "order": 444, + "mode": 0, + "inputs": [ + { + "name": "samples", + "type": "LATENT", + "link": 1787 + }, + { + "name": "vae", + "type": "VAE", + "link": 1786 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 1783 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "VAEDecode" + }, + "widgets_values": [] + }, + { + "id": 1054, + "type": "DisableNoise", + "pos": [ + 8950, + 2260 + ], + "size": [ + 210, + 30 + ], + "flags": { + "collapsed": true + }, + "order": 157, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "NOISE", + "type": "NOISE", + "links": [ + 1770 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "DisableNoise" + }, + "widgets_values": [], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 834, + "type": "Reroute", + "pos": [ + 6900, + 2270 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 387, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 1490 + } + ], + "outputs": [ + { + "name": "", + "type": "MODEL", + "slot_index": 0, + "links": [ + 2087 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 921, + "type": "Reroute", + "pos": [ + 6900, + 2310 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 296, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5238 + } + ], + "outputs": [ + { + "name": "", + "type": "CONDITIONING", + "slot_index": 0, + "links": [ + 2088 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 609, + "type": "VAEDecode", + "pos": [ + 6580, + 2470 + ], + "size": [ + 170, + 50 + ], + "flags": { + "collapsed": true + }, + "order": 404, + "mode": 0, + "inputs": [ + { + "name": "samples", + "type": "LATENT", + "link": 1474 + }, + { + "name": "vae", + "type": "VAE", + "link": 3499 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 1538 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "VAEDecode" + }, + "widgets_values": [] + }, + { + "id": 4110, + "type": "ModelPassThrough", + "pos": [ + -1030, + 370 + ], + "size": [ + 140, + 26 + ], + "flags": { + "collapsed": true + }, + "order": 370, + "mode": 0, + "inputs": [ + { + "name": "model", + "shape": 7, + "type": "MODEL", + "link": 6246 + } + ], + "outputs": [ + { + "name": "model", + "type": "MODEL", + "links": [ + 6250 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui-kjnodes", + "ver": "1.1.0", + "Node name for S&R": "ModelPassThrough" + }, + "widgets_values": [] + }, + { + "id": 3375, + "type": "CLIPVisionLoader", + "pos": [ + 3070, + 1020 + ], + "size": [ + 320, + 60 + ], + "flags": {}, + "order": 158, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "CLIP_VISION", + "type": "CLIP_VISION", + "slot_index": 0, + "links": [ + 5034 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "CLIPVisionLoader" + }, + "widgets_values": [ + "sigclip_vision_patch14_384.safetensors" + ] + }, + { + "id": 1055, + "type": "InjectLatentNoise+", + "pos": [ + 8710, + 2320 + ], + "size": [ + 260, + 150 + ], + "flags": {}, + "order": 441, + "mode": 0, + "inputs": [ + { + "name": "latent", + "type": "LATENT", + "link": 1773 + }, + { + "name": "mask", + "shape": 7, + "type": "MASK", + "link": 6242 + } + ], + "outputs": [ + { + "name": "LATENT", + "type": "LATENT", + "slot_index": 0, + "links": [ + 1772 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui_essentials", + "ver": "33ff89fd354d8ec3ab6affb605a79a931b445d99", + "Node name for S&R": "InjectLatentNoise+" + }, + "widgets_values": [ + 807923933249340, + "randomize", + 2.5, + "false" + ] + }, + { + "id": 3390, + "type": "Reroute", + "pos": [ + 5210, + 520 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 324, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5756 + } + ], + "outputs": [ + { + "name": "", + "type": "CONDITIONING", + "slot_index": 0, + "links": [ + 5644, + 5884 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 3787, + "type": "Reroute", + "pos": [ + 5070, + 310 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 300, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "widget": { + "name": "value" + }, + "link": 5661 + } + ], + "outputs": [ + { + "name": "", + "type": "FLOAT", + "slot_index": 0, + "links": [ + 5713, + 5885 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 3569, + "type": "SimpleMathFloat+", + "pos": [ + 5250, + 300 + ], + "size": [ + 320, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 159, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "slot_index": 0, + "links": [ + 5346 + ] + } + ], + "title": "Float", + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui_essentials", + "ver": "33ff89fd354d8ec3ab6affb605a79a931b445d99", + "Node name for S&R": "SimpleMathFloat+" + }, + "widgets_values": [ + 0 + ] + }, + { + "id": 3810, + "type": "CLIPVisionEncode", + "pos": [ + 5010, + 660 + ], + "size": [ + 253.60000610351562, + 78 + ], + "flags": { + "collapsed": false + }, + "order": 298, + "mode": 0, + "inputs": [ + { + "name": "clip_vision", + "type": "CLIP_VISION", + "link": 5702 + }, + { + "name": "image", + "type": "IMAGE", + "link": 5703 + } + ], + "outputs": [ + { + "name": "CLIP_VISION_OUTPUT", + "type": "CLIP_VISION_OUTPUT", + "links": [ + 5882 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "CLIPVisionEncode" + }, + "widgets_values": [ + "center" + ] + }, + { + "id": 3812, + "type": "CLIPVisionEncode", + "pos": [ + 6170, + 640 + ], + "size": [ + 253.60000610351562, + 78 + ], + "flags": { + "collapsed": false + }, + "order": 342, + "mode": 0, + "inputs": [ + { + "name": "clip_vision", + "type": "CLIP_VISION", + "link": 5731 + }, + { + "name": "image", + "type": "IMAGE", + "link": 5730 + } + ], + "outputs": [ + { + "name": "CLIP_VISION_OUTPUT", + "type": "CLIP_VISION_OUTPUT", + "links": [ + 5887 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "CLIPVisionEncode" + }, + "widgets_values": [ + "center" + ] + }, + { + "id": 3814, + "type": "CLIPVisionEncode", + "pos": [ + 7500, + 660 + ], + "size": [ + 253.60000610351562, + 78 + ], + "flags": { + "collapsed": false + }, + "order": 376, + "mode": 0, + "inputs": [ + { + "name": "clip_vision", + "type": "CLIP_VISION", + "link": 5734 + }, + { + "name": "image", + "type": "IMAGE", + "link": 5729 + } + ], + "outputs": [ + { + "name": "CLIP_VISION_OUTPUT", + "type": "CLIP_VISION_OUTPUT", + "links": [ + 5902 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "CLIPVisionEncode" + }, + "widgets_values": [ + "center" + ] + }, + { + "id": 3817, + "type": "Reroute", + "pos": [ + 7680, + 450 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 433, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5741 + } + ], + "outputs": [ + { + "name": "", + "type": "*", + "slot_index": 0, + "links": [ + 5743, + 5903 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 3556, + "type": "CondPassThrough", + "pos": [ + 8440, + 440 + ], + "size": [ + 220, + 50 + ], + "flags": { + "collapsed": true + }, + "order": 440, + "mode": 0, + "inputs": [ + { + "name": "positive", + "shape": 7, + "type": "CONDITIONING", + "link": 6112 + }, + { + "name": "negative", + "shape": 7, + "type": "CONDITIONING", + "link": null + } + ], + "outputs": [ + { + "name": "positive", + "type": "CONDITIONING", + "slot_index": 0, + "links": [ + 6117 + ] + }, + { + "name": "negative", + "type": "CONDITIONING", + "links": null + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui-kjnodes", + "ver": "d835ac96042394299f76793544ee3643fd4b0457", + "Node name for S&R": "CondPassThrough" + }, + "widgets_values": [] + }, + { + "id": 3828, + "type": "CLIPTextEncodeFlux", + "pos": [ + 3910, + 520 + ], + "size": [ + 280, + 166 + ], + "flags": { + "collapsed": false + }, + "order": 241, + "mode": 0, + "inputs": [ + { + "name": "clip", + "type": "CLIP", + "link": 5752 + }, + { + "name": "clip_l", + "type": "STRING", + "widget": { + "name": "clip_l" + }, + "link": 5753 + }, + { + "name": "t5xxl", + "type": "STRING", + "widget": { + "name": "t5xxl" + }, + "link": 5754 + }, + { + "name": "guidance", + "type": "FLOAT", + "widget": { + "name": "guidance" + }, + "link": 5755 + } + ], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "slot_index": 0, + "links": [ + 5756 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.26", + "Node name for S&R": "CLIPTextEncodeFlux" + }, + "widgets_values": [ + "", + "", + 3.5 + ] + }, + { + "id": 4068, + "type": "Canny", + "pos": [ + 4080, + 1630 + ], + "size": [ + 310, + 82 + ], + "flags": { + "collapsed": false + }, + "order": 312, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 6161 + }, + { + "name": "low_threshold", + "type": "FLOAT", + "widget": { + "name": "low_threshold" + }, + "link": 6188 + }, + { + "name": "high_threshold", + "type": "FLOAT", + "widget": { + "name": "high_threshold" + }, + "link": 6189 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 6193, + 6355 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 80, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "Canny" + }, + "widgets_values": [ + 0.010000000000000002, + 0.32000000000000006 + ] + }, + { + "id": 4144, + "type": "SplitVec3", + "pos": [ + 4490, + 1770 + ], + "size": [ + 140, + 66 + ], + "flags": { + "collapsed": true + }, + "order": 245, + "mode": 0, + "inputs": [ + { + "name": "a", + "type": "VEC3", + "link": 6350 + } + ], + "outputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "links": [ + 6354 + ] + }, + { + "name": "FLOAT", + "type": "FLOAT", + "links": null + }, + { + "name": "FLOAT", + "type": "FLOAT", + "links": null + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "ComfyUI-Flux-Continuum", + "ver": "ae6c4fbf1dc2c59fa7b663bf246f5cff96288c19", + "Node name for S&R": "SplitVec3" + }, + "widgets_values": [] + }, + { + "id": 4148, + "type": "SimpleCondition+", + "pos": [ + 4710, + 1750 + ], + "size": [ + 169.37916564941406, + 66 + ], + "flags": { + "collapsed": true + }, + "order": 381, + "mode": 0, + "inputs": [ + { + "name": "evaluate", + "type": "*", + "link": 6354 + }, + { + "name": "on_true", + "type": "*", + "link": 6355 + }, + { + "name": "on_false", + "shape": 7, + "type": "*", + "link": 6356 + } + ], + "outputs": [ + { + "name": "result", + "type": "*", + "links": [ + 6359 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui_essentials", + "ver": "9d9f4bedfc9f0321c19faf71855e228c93bd0dc9", + "Node name for S&R": "SimpleCondition+" + }, + "widgets_values": [] + }, + { + "id": 4103, + "type": "DepthAnythingV2Preprocessor", + "pos": [ + 5530, + 1640 + ], + "size": [ + 310, + 82 + ], + "flags": { + "collapsed": false + }, + "order": 227, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 6214 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 6215, + 6361 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui_controlnet_aux", + "ver": "1e9eac6377c882da8bb360c7544607036904362c", + "Node name for S&R": "DepthAnythingV2Preprocessor" + }, + "widgets_values": [ + "depth_anything_v2_vitl.pth", + 1024 + ] + }, + { + "id": 4146, + "type": "SplitVec3", + "pos": [ + 6070, + 1800 + ], + "size": [ + 140, + 66 + ], + "flags": { + "collapsed": true + }, + "order": 246, + "mode": 0, + "inputs": [ + { + "name": "a", + "type": "VEC3", + "link": 6352 + } + ], + "outputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "links": [ + 6360 + ] + }, + { + "name": "FLOAT", + "type": "FLOAT", + "links": null + }, + { + "name": "FLOAT", + "type": "FLOAT", + "links": null + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "ComfyUI-Flux-Continuum", + "ver": "ae6c4fbf1dc2c59fa7b663bf246f5cff96288c19", + "Node name for S&R": "SplitVec3" + }, + "widgets_values": [] + }, + { + "id": 4091, + "type": "GetImageSize+", + "pos": [ + 5870, + 2030 + ], + "size": [ + 210, + 70 + ], + "flags": { + "collapsed": true + }, + "order": 331, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 6218 + } + ], + "outputs": [ + { + "name": "width", + "type": "INT", + "slot_index": 0, + "links": [ + 6208 + ] + }, + { + "name": "height", + "type": "INT", + "slot_index": 1, + "links": [ + 6209 + ] + }, + { + "name": "count", + "type": "INT", + "links": null + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui_essentials", + "ver": "33ff89fd354d8ec3ab6affb605a79a931b445d99", + "Node name for S&R": "GetImageSize+" + }, + "widgets_values": [] + }, + { + "id": 4104, + "type": "DepthAnythingV2Preprocessor", + "pos": [ + 5530, + 1910 + ], + "size": [ + 310, + 82 + ], + "flags": { + "collapsed": false + }, + "order": 247, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 6217 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 6218, + 6219 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui_controlnet_aux", + "ver": "1e9eac6377c882da8bb360c7544607036904362c", + "Node name for S&R": "DepthAnythingV2Preprocessor" + }, + "widgets_values": [ + "depth_anything_v2_vitl.pth", + 1024 + ] + }, + { + "id": 3723, + "type": "MaskBlur+", + "pos": [ + 4040, + 6210 + ], + "size": [ + 320, + 102 + ], + "flags": { + "collapsed": true + }, + "order": 214, + "mode": 0, + "inputs": [ + { + "name": "mask", + "type": "MASK", + "link": 5592 + }, + { + "name": "amount", + "type": "INT", + "widget": { + "name": "amount" + }, + "link": 5593 + } + ], + "outputs": [ + { + "name": "MASK", + "type": "MASK", + "slot_index": 0, + "links": [ + 5634, + 6120 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui_essentials", + "ver": "33ff89fd354d8ec3ab6affb605a79a931b445d99", + "Node name for S&R": "MaskBlur+" + }, + "widgets_values": [ + 6, + "gpu" + ] + }, + { + "id": 1343, + "type": "ImageCrop+", + "pos": [ + 1760, + 980 + ], + "size": [ + 310, + 250 + ], + "flags": { + "collapsed": false, + "pinned": true + }, + "order": 332, + "mode": 4, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 2793 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 3481 + ] + }, + { + "name": "x", + "type": "INT", + "links": null + }, + { + "name": "y", + "type": "INT", + "links": null + } + ], + "title": "Crop", + "properties": { + "enableTabs": true, + "tabWidth": 50, + "tabXOffset": 65, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui_essentials", + "ver": "33ff89fd354d8ec3ab6affb605a79a931b445d99", + "Node name for S&R": "ImageCrop+" + }, + "widgets_values": [ + 2560, + 2560, + "center", + 0, + 0 + ] + }, + { + "id": 2453, + "type": "ImageSmartSharpen+", + "pos": [ + 1760, + 980 + ], + "size": [ + 310, + 250 + ], + "flags": { + "collapsed": false, + "pinned": true + }, + "order": 367, + "mode": 4, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 3481 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 3482 + ] + } + ], + "title": "Sharpen", + "properties": { + "enableTabs": true, + "tabWidth": 50, + "tabXOffset": 120, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui_essentials", + "ver": "33ff89fd354d8ec3ab6affb605a79a931b445d99", + "Node name for S&R": "ImageSmartSharpen+" + }, + "widgets_values": [ + 1, + 0.75, + 0, + 0.5 + ] + }, + { + "id": 2454, + "type": "Color Correct (mtb)", + "pos": [ + 1760, + 980 + ], + "size": [ + 310, + 250 + ], + "flags": { + "collapsed": false, + "pinned": true + }, + "order": 390, + "mode": 4, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 3482 + }, + { + "name": "mask", + "shape": 7, + "type": "MASK", + "link": null + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 4606 + ] + } + ], + "title": "CC", + "properties": { + "enableTabs": true, + "tabWidth": 50, + "tabXOffset": 175, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-mtb", + "ver": "8bf3545fec5b2a180607d40394b025a1e09c14b6", + "Node name for S&R": "Color Correct (mtb)" + }, + "widgets_values": [ + false, + 1, + 1, + 0, + 0, + 0, + 1, + 1 + ] + }, + { + "id": 3055, + "type": "ImagePadForOutpaintMasked", + "pos": [ + 1760, + 980 + ], + "size": [ + 310, + 250 + ], + "flags": { + "collapsed": false, + "pinned": true + }, + "order": 407, + "mode": 4, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 4606 + }, + { + "name": "mask", + "shape": 7, + "type": "MASK", + "link": null + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 4607 + ] + }, + { + "name": "MASK", + "type": "MASK", + "links": [ + 4608 + ] + } + ], + "title": "Pad", + "properties": { + "enableTabs": true, + "tabWidth": 50, + "tabXOffset": 230, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui-kjnodes", + "ver": "d835ac96042394299f76793544ee3643fd4b0457", + "Node name for S&R": "ImagePadForOutpaintMasked" + }, + "widgets_values": [ + 0, + 0, + 512, + 0, + 120 + ] + }, + { + "id": 1274, + "type": "DenoiseSlider", + "pos": [ + 1760, + 650 + ], + "size": [ + 310, + 60 + ], + "flags": { + "collapsed": false, + "pinned": true + }, + "order": 160, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "slot_index": 0, + "links": [ + 2000 + ] + } + ], + "title": "Denoise", + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Feather Mask\n", + "secondTabOffset": 80, + "secondTabWidth": 70, + "cnr_id": "ComfyUI-Flux-Continuum", + "ver": "19b70c33f872fe4e57dea291bbdd0f5559258a14", + "Node name for S&R": "DenoiseSlider", + "aux_id": "robertvoy/Comfyui-Flux-Continuum" + }, + "widgets_values": [ + 0.2980000000000001 + ] + }, + { + "id": 3361, + "type": "UNETLoader", + "pos": [ + 3070, + 680 + ], + "size": [ + 320, + 82 + ], + "flags": { + "collapsed": false + }, + "order": 161, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "slot_index": 0, + "links": [ + 5013 + ] + } + ], + "title": "Load Flux Depth Model", + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "UNETLoader" + }, + "widgets_values": [ + "flux1-depth-dev.safetensors", + "default" + ] + }, + { + "id": 3362, + "type": "UNETLoader", + "pos": [ + 3070, + 800 + ], + "size": [ + 320, + 82 + ], + "flags": { + "collapsed": false + }, + "order": 162, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "slot_index": 0, + "links": [ + 5014 + ] + } + ], + "title": "Load Flux Canny Model", + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "UNETLoader" + }, + "widgets_values": [ + "flux1-canny-dev.safetensors", + "default" + ] + }, + { + "id": 697, + "type": "ModelSamplingFlux", + "pos": [ + 4960, + 5310 + ], + "size": [ + 210, + 150 + ], + "flags": { + "collapsed": true + }, + "order": 286, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 1608 + }, + { + "name": "max_shift", + "type": "FLOAT", + "widget": { + "name": "max_shift" + }, + "link": 2406 + } + ], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "slot_index": 0, + "links": [ + 2169 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "ModelSamplingFlux" + }, + "widgets_values": [ + 1.1500000000000001, + 0.5, + 1024, + 1024 + ] + }, + { + "id": 4174, + "type": "Hint Node", + "pos": [ + -1610, + 590 + ], + "size": { + "0": 20, + "1": 20 + }, + "flags": {}, + "order": 163, + "mode": 0, + "inputs": [], + "outputs": [], + "properties": { + "hint_content": "### GetString_Output\n* This outputs a string based on the output you have selected. It's used for conditions. For example, if you have the *inpainting* output selected, it will use the fill model.", + "saved_size": [ + 20, + 20 + ] + }, + "color": "#232", + "bgcolor": "#353", + "shape": 2, + "hint_content": "### GetString_Output\n* This outputs a string based on the output you have selected. It's used for conditions. For example, if you have the *inpainting* output selected, it will use the fill model." + }, + { + "id": 4169, + "type": "Hint Node", + "pos": [ + 780, + 1400 + ], + "size": { + "0": 20, + "1": 20 + }, + "flags": { + "pinned": true + }, + "order": 164, + "mode": 0, + "inputs": [], + "outputs": [], + "properties": { + "hint_content": "### Options\n* **Save Output:** Saves the generated image, using the beginning part of your prompt as the filename.\n* **Play Sound Notification:** Plays a sound when the generation has been completed.\n* **TeaCache:** Speeds up generation across all outputs while sacrificing some quality.", + "saved_size": [ + 20, + 20 + ] + }, + "color": "#232", + "bgcolor": "#353", + "shape": 2, + "hint_content": "### Options\n* **Save Output:** Saves the generated image, using the beginning part of your prompt as the filename.\n* **Play Sound Notification:** Plays a sound when the generation has been completed.\n* **TeaCache:** Speeds up generation across all outputs while sacrificing some quality." + }, + { + "id": 4168, + "type": "Hint Node", + "pos": [ + 2060, + 1380 + ], + "size": { + "0": 20, + "1": 20 + }, + "flags": { + "pinned": true + }, + "order": 165, + "mode": 0, + "inputs": [], + "outputs": [], + "properties": { + "hint_content": "### Canny Prep + Mask Blur\n* Control the Canny filter that is used as an input for the **Canny model** or the **ControlNet**.\n* **Important:** When previewing preprocessor output, if you have the **CN Canny** strength set to higher than 0, it will show the image in the **CN input**; otherwise, it will show the **Img Load** image, which is used as the Canny model input.\n* The **Mask blur** adds blur to the mask in the **Img Load** node. It can help with better blending when inpainting.", + "saved_size": [ + 20, + 20 + ] + }, + "color": "#232", + "bgcolor": "#353", + "shape": 2, + "hint_content": "### Canny Prep + Mask Blur\n* Control the Canny filter that is used as an input for the **Canny model** or the **ControlNet**.\n* **Important:** When previewing preprocessor output, if you have the **CN Canny** strength set to higher than 0, it will show the image in the **CN input**; otherwise, it will show the **Img Load** image, which is used as the Canny model input.\n* The **Mask blur** adds blur to the mask in the **Img Load** node. It can help with better blending when inpainting." + }, + { + "id": 4167, + "type": "Hint Node", + "pos": [ + 2060, + 1240 + ], + "size": { + "0": 20, + "1": 20 + }, + "flags": { + "pinned": true + }, + "order": 166, + "mode": 0, + "inputs": [], + "outputs": [], + "properties": { + "hint_content": "### Upscale Controls\n* Control the upscaling for both the **Upscaler** and **Ultimate Upscaler**.\n* The **Resolution Multiply** multiplies the resolution of the image in **Img Load** *after* any resize, crop, or pad operations from the nodes above.\n* Select the upscale model you want to use. **Recommended:** 4xNomos8kDAT\n* [Watch a tutorial on upscaling](https://www.youtube.com/watch?v=TmF3JK_1AAs).\n* [Ultimate Upscaler Calculator](https://robertvoy.com/ultimate-sd-upscale-calculator/)", + "saved_size": [ + 20, + 20 + ] + }, + "color": "#232", + "bgcolor": "#353", + "shape": 2, + "hint_content": "### Upscale Controls\n* Control the upscaling for both the **Upscaler** and **Ultimate Upscaler**.\n* The **Resolution Multiply** multiplies the resolution of the image in **Img Load** *after* any resize, crop, or pad operations from the nodes above.\n* Select the upscale model you want to use. **Recommended:** 4xNomos8kDAT\n* [Watch a tutorial on upscaling](https://www.youtube.com/watch?v=TmF3JK_1AAs).\n* [Ultimate Upscaler Calculator](https://robertvoy.com/ultimate-sd-upscale-calculator/)" + }, + { + "id": 4166, + "type": "Hint Node", + "pos": [ + 2060, + 910 + ], + "size": { + "0": 20, + "1": 20 + }, + "flags": { + "pinned": true + }, + "order": 167, + "mode": 0, + "inputs": [], + "outputs": [], + "properties": { + "hint_content": "### Image Processing\n* Resize, crop, sharpen, color correct, or pad the image in the **Img Load** node.\n* To preview the result, select the **imgload_prep** output. The image you see there will be what is used in any *img2img* operations.\n* To \"bake\" the image in this state, you can copy the image, load it into the **Img Load** node, and then bypass the image processing nodes.\n* **Note:** Once you've processed your image, you should bypass the nodes (`CTRL+B`) to avoid processing them again.", + "saved_size": [ + 20, + 20 + ] + }, + "color": "#232", + "bgcolor": "#353", + "shape": 2, + "hint_content": "### Image Processing\n* Resize, crop, sharpen, color correct, or pad the image in the **Img Load** node.\n* To preview the result, select the **imgload_prep** output. The image you see there will be what is used in any *img2img* operations.\n* To \"bake\" the image in this state, you can copy the image, load it into the **Img Load** node, and then bypass the image processing nodes.\n* **Note:** Once you've processed your image, you should bypass the nodes (`CTRL+B`) to avoid processing them again." + }, + { + "id": 4162, + "type": "Hint Node", + "pos": [ + 2060, + 720 + ], + "size": { + "0": 20, + "1": 20 + }, + "flags": { + "pinned": true + }, + "order": 168, + "mode": 0, + "inputs": [], + "outputs": [], + "properties": { + "hint_content": "### ControlNet and Redux Sliders\n* **ControlNet** uses the **CN Input** that is preprocessed once a ControlNet has been activated.\n* ControlNet and Redux have no effect if the strength is set to 0. Once over 0, the ControlNet is activated, and you can preview the preprocessor result.\n* You can preview the preprocessor result by selecting the corresponding output (e.g., *preprocessor canny*).\n* **Recommended values for ControlNets:**\n * **Canny:** Strength=0.7, End=0.8\n * **Depth:** Strength=0.8, End=0.8\n * **Pose:** Strength=0.9, End=0.65\n* **Redux sliders** correspond to each **Redux** image load node (1 is Redux 1, 2 is Redux 2, etc.). You can mix up to 3 inputs for Redux. Use very low values, as Redux has a very strong effect.\n* **Note:** Redux and ControlNets work across all outputs (including the Depth and Canny BFL models).", + "saved_size": [ + 20, + 20 + ] + }, + "color": "#232", + "bgcolor": "#353", + "shape": 2, + "hint_content": "### ControlNet and Redux Sliders\n* **ControlNet** uses the **CN Input** that is preprocessed once a ControlNet has been activated.\n* ControlNet and Redux have no effect if the strength is set to 0. Once over 0, the ControlNet is activated, and you can preview the preprocessor result.\n* You can preview the preprocessor result by selecting the corresponding output (e.g., *preprocessor canny*).\n* **Recommended values for ControlNets:**\n * **Canny:** Strength=0.7, End=0.8\n * **Depth:** Strength=0.8, End=0.8\n * **Pose:** Strength=0.9, End=0.65\n* **Redux sliders** correspond to each **Redux** image load node (1 is Redux 1, 2 is Redux 2, etc.). You can mix up to 3 inputs for Redux. Use very low values, as Redux has a very strong effect.\n* **Note:** Redux and ControlNets work across all outputs (including the Depth and Canny BFL models)." + }, + { + "id": 4165, + "type": "Hint Node", + "pos": [ + 2060, + 120 + ], + "size": { + "0": 20, + "1": 20 + }, + "flags": { + "pinned": true + }, + "order": 169, + "mode": 0, + "inputs": [], + "outputs": [], + "properties": { + "hint_content": "### Input Images\n* **Img Load:** This is used for any *img2img* operations, including inpainting, outpainting, detailer, upscaler, and ultimate upscaler. It will also be used for the **Canny** and **Depth** models (not ControlNets).\n* **CN Input:** This will be used for the preprocessors in each **ControlNet**. The image will be automatically preprocessed, and you can preview the results by selecting the preprocessor in the output selector.\n* **Note:** For **Depth** and **Canny** preprocessors previews, you must have the **CN Canny** or **CN Depth** slider strengths set to more than 0; otherwise, the **Img Load** node will be shown when the depth/canny preprocessor output is selected.\n* **3x Redux Inputs:** These are available to allow mixing different input images. See the **Redux slider** below to control the strength of each input image individually.\n* Use the `CTRL+SHIFT+C` shortcut to copy an image from the **Img Preview** to the **Img Load** node. This shortcut can be configured in **Settings > Keybinding > Image Transfer**.", + "saved_size": [ + 20, + 20 + ] + }, + "color": "#232", + "bgcolor": "#353", + "shape": 2, + "hint_content": "### Input Images\n* **Img Load:** This is used for any *img2img* operations, including inpainting, outpainting, detailer, upscaler, and ultimate upscaler. It will also be used for the **Canny** and **Depth** models (not ControlNets).\n* **CN Input:** This will be used for the preprocessors in each **ControlNet**. The image will be automatically preprocessed, and you can preview the results by selecting the preprocessor in the output selector.\n* **Note:** For **Depth** and **Canny** preprocessors previews, you must have the **CN Canny** or **CN Depth** slider strengths set to more than 0; otherwise, the **Img Load** node will be shown when the depth/canny preprocessor output is selected.\n* **3x Redux Inputs:** These are available to allow mixing different input images. See the **Redux slider** below to control the strength of each input image individually.\n* Use the `CTRL+SHIFT+C` shortcut to copy an image from the **Img Preview** to the **Img Load** node. This shortcut can be configured in **Settings > Keybinding > Image Transfer**." + }, + { + "id": 3933, + "type": "ControlNetLoader", + "pos": [ + 3070, + 1120 + ], + "size": [ + 320, + 60 + ], + "flags": { + "collapsed": false + }, + "order": 170, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "CONTROL_NET", + "type": "CONTROL_NET", + "links": [ + 5982 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.28", + "Node name for S&R": "ControlNetLoader" + }, + "widgets_values": [ + "FLUX\\FLUX.1-dev-ControlNet-Union-Pro-2.0.safetensors" + ] + }, + { + "id": 4099, + "type": "ImageResize+", + "pos": [ + 6100, + 1900 + ], + "size": [ + 240, + 220 + ], + "flags": { + "collapsed": false + }, + "order": 366, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 6219 + }, + { + "name": "width", + "type": "INT", + "widget": { + "name": "width" + }, + "link": 6208 + }, + { + "name": "height", + "type": "INT", + "widget": { + "name": "height" + }, + "link": 6209 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 6206, + 6362 + ] + }, + { + "name": "width", + "type": "INT", + "links": null + }, + { + "name": "height", + "type": "INT", + "links": null + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui_essentials", + "ver": "33ff89fd354d8ec3ab6affb605a79a931b445d99", + "Node name for S&R": "ImageResize+" + }, + "widgets_values": [ + 512, + 512, + "lanczos", + "keep proportion", + "always", + 0 + ] + }, + { + "id": 4150, + "type": "SimpleCondition+", + "pos": [ + 6410, + 1710 + ], + "size": [ + 169.37916564941406, + 66 + ], + "flags": { + "collapsed": true + }, + "order": 389, + "mode": 0, + "inputs": [ + { + "name": "evaluate", + "type": "*", + "link": 6360 + }, + { + "name": "on_true", + "type": "*", + "link": 6361 + }, + { + "name": "on_false", + "shape": 7, + "type": "*", + "link": 6362 + } + ], + "outputs": [ + { + "name": "result", + "type": "*", + "links": [ + 6363 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui_essentials", + "ver": "9d9f4bedfc9f0321c19faf71855e228c93bd0dc9", + "Node name for S&R": "SimpleCondition+" + }, + "widgets_values": [] + }, + { + "id": 3680, + "type": "ImageResize+", + "pos": [ + 4430, + 1880 + ], + "size": [ + 250, + 220 + ], + "flags": { + "collapsed": false + }, + "order": 355, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 5483 + }, + { + "name": "width", + "type": "INT", + "widget": { + "name": "width" + }, + "link": 5479 + }, + { + "name": "height", + "type": "INT", + "widget": { + "name": "height" + }, + "link": 5480 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 6196, + 6356 + ] + }, + { + "name": "width", + "type": "INT", + "links": null + }, + { + "name": "height", + "type": "INT", + "links": null + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui_essentials", + "ver": "33ff89fd354d8ec3ab6affb605a79a931b445d99", + "Node name for S&R": "ImageResize+" + }, + "widgets_values": [ + 512, + 512, + "lanczos", + "keep proportion", + "always", + 0 + ] + }, + { + "id": 1630, + "type": "Label (rgthree)", + "pos": [ + 770, + 100 + ], + "size": [ + 26.10416603088379, + 36 + ], + "flags": { + "allow_interaction": true + }, + "order": 171, + "mode": 0, + "inputs": [], + "outputs": [], + "title": "v 1.7", + "properties": { + "fontSize": 36, + "fontFamily": "\n", + "fontColor": "#ffffff", + "textAlign": "left", + "backgroundColor": "transparent", + "padding": 0, + "borderRadius": 0, + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "color": "#fff0", + "bgcolor": "#fff0" + }, + { + "id": 2413, + "type": "ImageDisplay", + "pos": [ + 470, + 90 + ], + "size": [ + 330, + 65.24058532714844 + ], + "flags": {}, + "order": 172, + "mode": 0, + "inputs": [], + "outputs": [], + "title": "Unnamed", + "properties": { + "originalWidth": 956, + "originalHeight": 189, + "maintainAspectRatio": true, + "imageBase64": "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Y0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALEwAACxMBAJqcGAAABoJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDkuMS1jMDAyIDc5LmI3YzY0Y2MsIDIwMjQvMDcvMTYtMDc6NTk6NDAgICAgICAgICI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiB4bWxuczpwaG90b3Nob3A9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGhvdG9zaG9wLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCAyNi4xICgyMDI0MTAxOS5tLjI4MTUgYTI0OWQwNCkgIChXaW5kb3dzKSIgeG1wOkNyZWF0ZURhdGU9IjIwMjQtMTAtMjNUMTg6NTQ6NDQrMTE6MDAiIHhtcDpNb2RpZnlEYXRlPSIyMDI0LTEwLTIzVDE5OjIzOjMzKzExOjAwIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDI0LTEwLTIzVDE5OjIzOjMzKzExOjAwIiBkYzpmb3JtYXQ9ImltYWdlL3BuZyIgcGhvdG9zaG9wOkNvbG9yTW9kZT0iMyIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDoyYzZmNjdjNy02NTI1LTdjNDctYmU3MC01NmFmYWQ0Y2YzMmQiIHhtcE1NOkRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmNmNTZlYi03NTZhLWY3NGMtYmYwYS1lM2JlZmY1YWMxMWYiIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo5MmE5MDI5Ni1jOTE2LWUwNDgtYTM0My1jNjgwYmVjYWNkNTEiPiA8eG1wTU06SGlzdG9yeT4gPHJkZjpTZXE+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJjcmVhdGVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjkyYTkwMjk2LWM5MTYtZTA0OC1hMzQzLWM2ODBiZWNhY2Q1MSIgc3RFdnQ6d2hlbj0iMjAyNC0xMC0yM1QxODo1NDo0NCsxMTowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIDI2LjEgKDIwMjQxMDE5Lm0uMjgxNSBhMjQ5ZDA0KSAgKFdpbmRvd3MpIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJjb252ZXJ0ZWQiIHN0RXZ0OnBhcmFtZXRlcnM9ImZyb20gYXBwbGljYXRpb24vdm5kLmFkb2JlLnBob3Rvc2hvcCB0byBpbWFnZS9wbmciLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjJjNmY2N2M3LTY1MjUtN2M0Ny1iZTcwLTU2YWZhZDRjZjMyZCIgc3RFdnQ6d2hlbj0iMjAyNC0xMC0yM1QxOToyMzozMysxMTowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIDI2LjEgKDIwMjQxMDE5Lm0uMjgxNSBhMjQ5ZDA0KSAgKFdpbmRvd3MpIiBzdEV2dDpjaGFuZ2VkPSIvIi8+IDwvcmRmOlNlcT4gPC94bXBNTTpIaXN0b3J5PiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PpGGSOYAA3j5SURBVHja7P13uK5nWSYOn9ddnvLWtfZau+8kO72TBJJACiUUg4iAUgVEBAfEBiM4Kli+0XEcHXUc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", + "lastWidth": 330, + "lastHeight": 65.24058532714844 + }, + "color": "#00000000", + "bgcolor": "#00000000", + "shape": 1, + "lastWidth": 330, + "lastHeight": 65.24058532714844, + "imageBase64": "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Y0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALEwAACxMBAJqcGAAABoJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDkuMS1jMDAyIDc5LmI3YzY0Y2MsIDIwMjQvMDcvMTYtMDc6NTk6NDAgICAgICAgICI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiB4bWxuczpwaG90b3Nob3A9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGhvdG9zaG9wLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCAyNi4xICgyMDI0MTAxOS5tLjI4MTUgYTI0OWQwNCkgIChXaW5kb3dzKSIgeG1wOkNyZWF0ZURhdGU9IjIwMjQtMTAtMjNUMTg6NTQ6NDQrMTE6MDAiIHhtcDpNb2RpZnlEYXRlPSIyMDI0LTEwLTIzVDE5OjIzOjMzKzExOjAwIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDI0LTEwLTIzVDE5OjIzOjMzKzExOjAwIiBkYzpmb3JtYXQ9ImltYWdlL3BuZyIgcGhvdG9zaG9wOkNvbG9yTW9kZT0iMyIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDoyYzZmNjdjNy02NTI1LTdjNDctYmU3MC01NmFmYWQ0Y2YzMmQiIHhtcE1NOkRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmNmNTZlYi03NTZhLWY3NGMtYmYwYS1lM2JlZmY1YWMxMWYiIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo5MmE5MDI5Ni1jOTE2LWUwNDgtYTM0My1jNjgwYmVjYWNkNTEiPiA8eG1wTU06SGlzdG9yeT4gPHJkZjpTZXE+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJjcmVhdGVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjkyYTkwMjk2LWM5MTYtZTA0OC1hMzQzLWM2ODBiZWNhY2Q1MSIgc3RFdnQ6d2hlbj0iMjAyNC0xMC0yM1QxODo1NDo0NCsxMTowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIDI2LjEgKDIwMjQxMDE5Lm0uMjgxNSBhMjQ5ZDA0KSAgKFdpbmRvd3MpIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJjb252ZXJ0ZWQiIHN0RXZ0OnBhcmFtZXRlcnM9ImZyb20gYXBwbGljYXRpb24vdm5kLmFkb2JlLnBob3Rvc2hvcCB0byBpbWFnZS9wbmciLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjJjNmY2N2M3LTY1MjUtN2M0Ny1iZTcwLTU2YWZhZDRjZjMyZCIgc3RFdnQ6d2hlbj0iMjAyNC0xMC0yM1QxOToyMzozMysxMTowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIDI2LjEgKDIwMjQxMDE5Lm0uMjgxNSBhMjQ5ZDA0KSAgKFdpbmRvd3MpIiBzdEV2dDpjaGFuZ2VkPSIvIi8+IDwvcmRmOlNlcT4gPC94bXBNTTpIaXN0b3J5PiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PpGGSOYAA3j5SURBVHja7P13uK5nWSYOn9ddnvLWtfZau+8kO72TBJJACiUUg4iAUgVEBAfEBiM4Kli+0XEcHXUcHQuOo+PMqIwzDqMCCkiHQEgggVTSy05233ut9Zan3O33x3U/z/uunZ2gv+87ji9/vFeOJKu+5X7Kus/rPK/zJCIBhAClFISUsMYghAApJZz3CCGAAEgp4OEATwie4OGhEgEQIXggUQmstQACBABjHCAIeacDZw3qqoLSCUIISHSCopqCIAAAQggAAcYYaJ2ABAEAnOXnz/McRART1/DewwfHr4sEhJJACHDWI0kSBO8RKCCEAIDgnYeUEkISrLfwziNYfs6l4RDWWdR1BessnPVQSkFpCWsdfPBw3kFKieAcfAjQ8X2mWYIQAGNMfM8S3nmQBCAIzlgIKaGkhHMOUmpYayGkgCCCNQaAgBQCIMBYw88TAoL3UDqBkgpVXSEgoNvNUJU1vA2AIEhB8C4ABKhEwzsPZx0CACIBUICzBgSCkhrOO/jgoBMNJRRqY4AQEBDg4YFAkEKABCG4AK0TWGdhTIUkSeHjuSCFgjUWgIfOUhAAUxsEeBAEiIgfAwHBOwihIEjAOgcfLCQpgAjOWWilgQB4eD7uklAWBQQIgiQCAJVIGGvgrYeSCsZYyEQg0QlMZWCt4XNXSHh4fp3OQwoJ5wKIAjx5AACB4L2HEALx9ACBAAQEAMHzzwMEBMyKACL+3eZxNleI/yUQ4u+3X6f2/2HuZ/knZz/bfDZ7RbOfxdxX6AmPfeLrOPFr/O6ICETE10UAaO7Hwtyvhfg9ImqfN4TAP4MApRW8j98Jnr8eAFCAEBJAiOcKIOK5ABC8dyAiCCHgvW9fS/CzhSZB7fM0bz0gzI5TCCdZqaeuZo2pXcb2wG96w/Pr05wjzeMHzN5/8zA+8D1ECIKzNl538VgSnz/8fkJ8v/G6DPE1hfgSRHxJ8T5IIDjn4zEDBEk4bzcdDyUlPBDvbQLOOpCMx9bH+2lo3hMgtISzDkpqeMf3AQcLpVK4eC0vLS+hLCtMJ9P2tfBxD/F18bsPYfP527z2Zu34dcYrIQQIQQAFPmdCcywEr4Hg8wYOEEIiUHz8eL4pJUFE/P6lgLcO3gcI4q/74EAQkEohBA9BfG4poVGZAv3+AMPhEMeOHkWW56jqEiEQut0eqqKA8wYueNRlBSk0pCRIrfneTASlEkwmY3Q6uSCh/HQ6RqIUSMh4fgPGWT6nnUNdV1jUoha1qEUtalFPv5K8WWk2MgHe8SYlIPCWhhjsaqV4syFV3NBEXOA9yIW4ieGNbYibex88QvDtBi54/j0PD+8cJEn4+Lwkqd3INJtg7xkIBe9R1TVICCgpIJUEIEBCwMfHFSSAuBFnwMevm0AQRHDBAwHodrsgIqRJCh88yqqEIIJQkgG/NVjdugoiGQEQb0iV1Oh1+8jzHKauYUwNAFBKgwJBKYVAvOFTWkNKCe9cBAz8mnzcHSaJQgB4nYmBA29SASkkhJCobQXnHBBcBFq8AeX1B6zzkEJAawaBQhA3KaxtN6xK8bFygTfcfLwCgvNIEg2lNDw8nLMtGJRCQCcJjLHwzkFIASlVbEoA1tVQiebdXiB4Z+G8BSD58YKH9wwiAh9ECCVBgkAk2nVhTBAiEI7nU/Dw1oHiGkjJx8AaAyElXLAIFJCnWcQqAVIq+HACxBQzwCiFAoEgSfA5GgJkBGaIIKZp6lCLiuL/TsBTBAYRT/zeE4EXPQkApvjPZiDbfG0ewoX2a/Po+4m/O//8JwGAEbxSaLAdAWIOZkfAJ0i094DN74Ffn9aqbVYFBHjnW8DIYIfP483Ah+JxFHzehdACpk0vURAozDUETsDtgkS8Sc0dh38C2MXcym5ekBNbBNQeW0FirhEQZoC5+bU5gEeg2FzD3LHC7ByZOy4NEAzNmoEQmq5D/H/wAT54SEEtyPTBt8CZ4s867xhsN9d7BNNK6hYok+SmpA+ANRYEIE9zWGfhKYCEACARrIcAN5qscSAhGHwGD0ESMt5vAvymRhAJghQyrlnz94J/pAHuIYR4f4t/X5p7EMVmgI/gNr5PUHMfiI2NuC4+eATHwFtJHY9N/NsQuMmVpClEfH3GGaR5BqUU1tfXoBL+2yWl5r8VQiLAo6yreE8VSPMOlle28N8q6+GMhfehf/2Lv/Oay5/1rBfef9+9R73364F4Xa210KmGd7ZtCvzcz/3cYkexqEUtalGLWtTTsFSzeUEAnPPtHs25GSPjnIdzBkpLpEmCyXTCrCnFTj0RvAd8sHDeAXBIkhTOWTjjoJUGY9D5TStvLDudLopiiuCBNE1RVzUAQpIkkEqhKEo4UyNJNIgEnHNQCTOhJCSG/S6qaQGtMmitMS0mcN5ieXkLjDGoygogQjmZQicKeZbDO88sa23bjb6SEiqyCMeOrjGrrRSsNcjSNAJWD+ssZKKRyAzOWxTTKbRKeRNHzJIaw8yqFIoZYiHjRtoCwaOsfAsUQARIAQoewc025GmagwjwISBRKeq6io8VN7TwcCEg0ykDf89sdCCPAAclEmaTVYK6rqCk5I1pYIbFOQ8fauSdvGVipNRxY8pMp9aKmXEbWXIhQIGZFUkSzhgEBAgpIYWElASQQF1XoMBA2XkLpRQz6xFQWxBvrKWAEB5aatSmhvEOQjJArW0NyTt55FkHzjvUxkFIQlXV8N5BCmbjnTVAZNKBgE4nR1nV/HlkFhvmloRoGcIGnMyzWSGEGUSiTTgLT42xaI573AxmN9PFc78xB4oaIBhOANGbH/PksPqkX55DdMyyzoHNOQAS4usgQRCxIdAguwa4EhFUVB8wm9+AZCB4fgACM3kgioApxMfwcI6fR0pu+jTvqGGbT2RsW7ZUAOTj4wb6f3eHa1ndObAbTuDaY/MluNAqFHyksUkQ4APmewHUgmaP4BvwG8FcwGYWnbix1eC4poHWcNW+bbbM2GQRGUQPD2oZ4IbpZmUL/06AUPwkkuL5HxiIgjwcBSgpgKBBPmBaTvn+TICUEgoBTvLxMtbFBgU3N2pTt++BSMC75vjO/kZwc0kgROVDcx2hhfZ83NqvNZcDBVAgAAJC8nNa5+J9SCIIIASH4CzD7E3XbLxO4/OJJOF7n7NwxsCFgG6/DyUFxuMRtOB72qQYIc1ypDrFtJwgOIdO3kGaZlhbXwOCh4ssrXEmOWXvqWd08+5L3viWN77lW3fftWKsqQjyf9u6KldWtmBjNEYxKdDpdeCdR1FMF7uJRS1qUYta1KKepiVF7OhTs1ETMyAgpeTNlJTMwPgAa03LkvnADEIAgywfPCAIQkokSQL4gDRNAMGy1wY8B88S6jAnXVRSQwqB2tQQSqKu68j2RtYIzCILqWCN4U1fBH4NAGqYqLIqUJZ1ZAAFrHXodftRSmxRVzWqqoJQvDHPsgxwAS5u+khIlhXH9wgiGGthbA0feJNqjQNIING6ZUZBEciRgDOGF7hhSCJ4SJIU1lgkadKymCJKoLVSzAJT4I+db+WQgTWBCMGjk+XI0gwIgHWO5dBKgkDQaRKZjgBrLbPdkb2lECWV8Vg775gBFxHMkoCpa1jnGQALyWDaOQR4CCmgpIJ3AUqqCA4EpJYI3rF0WytorRm8e0AlySYm1XsPlWh+PgEIyQB8MBjCGgMf+HkIIcpgRSsfbOTa3rF8eqYgcOh0u5BKoK5rKJ0ycACDDR9ZoAAH0bBGcV2llPwcfjPQ3fT/CMpokxT2iRfTTPBKcxB49tkTQB1wwvfn/w2bWEM8Kav5TwOCLZCnGdpuwH6zHi0Ajs+OGfadwY2IY0TD4Mf1VEqwLH0OBAkilqK6zYCWwPcSkjST/9IM2of4TyN9DSdKsOdlyk8FdDd9Qps/p5nkl+YkzT74zQ8TaCbbjUxto+SguHYNYG6PUSNnxgzotWAXYQZu4z1BRKY0ksDted2+riifbmUIUV4f+IfRNC2991DE9xTH3TN+PZ6VFIECpIpSbe/j+EdslGEmJ4bz8Zpx3NFoxRChfc8No8/nDl9XzTFsAD+i6oRAoDCTiAuS7VFhJYqMCoBmnVvNPEQE99w0ZGDcXLfG1KziEQRTcWOTFCtbQhxlUVrBWocsy6GTFMbw+IXSClIoFJMCaZ6h2+2hmE4xnkzxgue98DnHjq29+YorLn/boSNHLvjiF760vHPH9gNK4yYPPzYmQAhe86qsEBwfr1/8xV9c7CgWtahFLWpRi3oalog7HcTtE28worSPAaqDtRYuWPjA8lOlVLt/9N6CECCUgE5TSCERXEBd1CwjljyT1kh6lZIAIcpgA6q6gncOtjYoypKBVNz4MJBlAGSMgXEGgQJ0qpEmGsF71LWBUDznORqPUFYVlGRAVZUVAAZy1vLMajGdQGsFnaQtaCsj+PVgUKmlgFKCX6Nn5ruRz0blHZy1oBCQpCmD/kDo93osMQxgWW6UVLtmo+iBqqx51jFIZrO9QCISECRklOvBE6x1zJ75AGMsb9CUYqDngdow+JYkEZyHqQ28D8iTDEpodDo9CCiIIJGnnShPZABb1SWklOj1+m1DwxrLAFzxZpSbG9w08JHZM8bA+sBrCm5shOChSEGT4lnhOAOe5im01vDWwtQVfAh8nIyFtQbG1TC1A3kJ4wwz51E6ba1tN6tCAc4ZeM/ycUECQrGcXUoJoTSk1phMxzCVgZSK2XDjWBIpJAM0wcBfyNhkkBJErGRwjs/F2Bt4IoqlE7jU8GRY8+QgLDzJZw0LFk6AusDJBMvhJCg7nPDxU3DBRDOAecKvtgAFm4FlI0v3sXnivG+ZzIY1bl6bc47PD2fjWEOA9wHe+giCadPjMrKjuXc3e7etXLiZEabwhFX+tmD3pEsxt0ZhrpnhQzuj3jQBRNTF++BPAOIzyXLwswYA5llY8USJebvGEU+391nJjTvv4uhCbEY1zSHvPVzzGqJ0tpE7sySdkOqUwanwcHCojEXwkfW1LjbaEug4IgCwggQkQEIhzXOAApTm69/4ZoZYgITkblNk6xFOfg4K0VxTEfRGDT0JAmT8N8qwA3xsJALOWVRVzRJqAMGz94OSkhsoTSNE8HwtCeJ7SQTYxlo4yxJvqSSU0CinFXsrhDgzHoButw9nDKSQGHSHsJVBUUxAgnDaqacBAaiqCt1ub7tK5Cvf9aPvfONLXvjCvetHj+Ov/vp/4vf/4Pcu6OTdfgAhyTSMM6iqihuygpBm2WI3sahFLWpRi1rU0xbwErE5lZ9tOENgxscYCynZWImIoBMNrTS8ZxDcmM8QCcBTyzw202rOuQg6I9BtjKYiq6NVwv/qBEmqICJzIaSCJAktNaTSUDpBmqfIux2enVKapZFxLitJEmRZjixPIWTDnvCGyloHKQUEgCzLkSRpu1Gv6xpZniPRCWycHe10uyApUNWGTaoyjU7eQSfrRvki0Ol0kOUp0ixFXRnkWQqAwTcBMLZmJkUQdKqRJArG1lBpgjRL0el2YQzPwgbymBYllNZsJKMVb5Q9s586TSMb7qNsWMPUlsEb0wxI04zlgESYTqaoLbO0vDl0MM6ABMF6j0DgBoLlRoNSGlIwkDd1zcBYCGRZhk6vh6Iq4b2DTnWcJWS21zhuQHgfUNc1Agkgmg4FDyB4WFdHwxmemRVC8nxzM/MJC2MMlNKYTico6xIEQqI0SPBcXQCvQ5JoEAjGGG42SAFSUY4uJPIkh4xstIiQyDnPBjTBI00T6EQzwG2AG6hlu/mMEA06aTEZ5hlAnBwMY/Mo5gl8YtgEY0PL+s5+mU6C1+YnaE8+o3uiQRXhqdheZtmonaNv2FyWo4YIvGiOaQ0tUJ7J2UNUdcxmKkmKJ3QCnJ9J4NsphuBbdcRspt2169u+yjDHBNMM/Lbs9KZ/w0nJ23mZ9MlWdvMyhRPRP7xzrH6Izy2FhFTccOImn48g2UXqllntdm61AYskWrOt5mg2HgUNAPYuzGaFo5x60xx3XH8lFRBNmWJHDQieRw6cZaJX8DVBghtlzvHcbSfvIM86ICFbYG+tgwshKjEISipkScL3T2ITOwHRzum2jLMQLbifN3LzgRtHrZIgNgG943lv7yyfax487iAkIHjGlzBrHlD8WzNvtEZgk7+6rhnYSlZ3aK0RACRpgrzTRaPw6XQ6CB5Q0WDQOYeqYk+ENM1gnEG320Gn00W/38ejjzyI9Y01XPLMS7YuLy+//jWvec2bfup9792xZfsK3v3eH8Mpu3fh9tvv7EHIJE9zVFWJqqygtULWyfg8XtSiFrWoRS1qUU/bUgEhzu/JaEziYwddQERmrAHDwXsETwAkEi1gnZnJjK3FdDyF95aBD1j2miYpjKmjA7IGSQIcxY0VWiMWdjuWkIpA0cSpkbT6QMxUhBqJ1CimJYSIhlFgtjXJUggIlEUJ62zcwKUQSqKqCuRZB94xc2idg1YKVVmy6ZHzccNFmE5LeG8jmyEQXEBZFWywZA1konjmOAA+VAyyvIMxNUxtoJMEUoBZSqUQPDtIa51AKQlTGRRmAiHZhdR7D6GJGXTrIUlGV2wJBwdWlfN8nrEG3W63nTUjCSgp0cm6wIRBvrEG3V6PmxhglhYuIEkzKKlBISDt9lCWJcqCwSwJgSSy8/AeteP3kyQDZsJJIO922NimtpCRDddJimAtptMpnxfkT5jXI4g4B621QvCWpZRSIM9ylEUJlaiWae10utBKo65qOG8gSEBKjcpUMNYjOIc0TaE0zzia2razy1D8fCTZoCzRCTSIzz3nUNWGZfseIPJwnhsEcUQTDVJveMuAGdidudUSTpyq3eTee8KcaSNyPTkhfCKHu9ncavbZvKlVeGpw+8SHia+xYZKpnTNtmkINY8kOvwGhnUedve7mPHU2glxC69zcvirP4EUQO4i3cm6aza02wJZNmfieoaSEJx/l93FUt3l9tNkdOeAEBjrQyZfxCatzguV2uwCEBoo20urm24Jozrk6IMS5daUk2Iw+tK+R4uyr96E9BwQCIAk+8P2u1YfPmV7xsgX4MGcaJlji7NsZaAbPs+YEz/Y2LRpusBmohJtE3troF8CmTwEOVVXDBcNNMikgiK9JEZsOVVlAaY26NlF5g1b6b0zF92xgUyOkWfsGkDbr1DjNe++jEZ6bgVfE8Ze2iSRYvoyZyZ1onLKdhyd+PMRGY/AeQTQKFMBGlZCzLNd2sbkHWJAgTIspklxj+/ZtGI8nSNMUAQ5aC1Bg5YfSAkr1ceYZ23cN+8M3XfAd5//wW3/gB3bdftvt+MynPoN/9f6fxt/937/F4/sf7ZZV0Tl27FicuyYMhkMYY1DXBk+lrljUoha1qEUtalH/fwa8vFHljVbw0X2zcdOMLG0bP+GbmTECT32x5M05BwJgrWHWLcqQAwBjeI5USPCcKRGgAWcdyqJkp03DzqGAQ7BAkAJSadTlFDJG91jDhixpoqEEs8yEgDTPUJQF6rJGp5NDKolMSXTyDpIkARFw4ECBjdEGspRnDPuDPqaTKfr9fnSABfr9HuqaTbfKyiNJFNJEozYGUgvkaY5JMYHWCRssmZrfo5RxXYA0S6F1AkhgOpoA3sOECgEs0TOmRmUqCAikWcKzjVH+2Mk7KKZTwAV0Oh0Ml5dx7NhR1HUNqViGm6YpsxveYdu27RhNNjAejSGEQJJnsN4hRIOXECNLQBrGmna+2NQ1ksiwSq0Ay0wIb/4knAPSkMI6h7IqkSiNRCdwxqHX7WHdrUcWnuCtBQXi90wCJHiDWpsadVUjURpSSVTRrcbUBiE4JLrD0uk4i8dOqQwminIaAYSIc4YBWrH7LBQhSTWMtajKGqnm5oKLjFnjaOuMgwkxLkqxbN1Z185t+gg+lFKMc93MxXoOxW4CJvyxaBmsmbkTngBnT4K/nrRoE7wNc27N4QTLq7AJDtMT0O1JQG9LaEbGVAgGppHRbY2Zmh9uDJ0aB92IAdn5m2dXhZjFOxHQzq9nWYZpUcRGl4S3IboJzwA0RUTrfUDwzAZaY6NRk5iB8/ZnPTaLnWfvJyA8kdndtAZPsj4n/PAmF21CBIF+tsINY+sJXvjooh7ZaQ8INNLnEOfl+eed9wx+BbGqPpp7+fie+HjMeUA1mDg0PnY8q87jthY+Rve0zHaIs7+CG5PBRdVCYOmvJw8ijxCiL0A0bKOo3qEYqSTCLH6uiU2TUkBGA7NAClmawnkbxybisWzOybl5ZMbDFGOF4t8VzLtqN67WHt6L9o374KGUiOcaG9cpoWCdhW1kNbGR4J0H+SihVtymDT5EFQufq22sm1atA7WpDdJBF3t27QYBuO+++3Hm6afTcHlp6/Fj6+ddeNEF36Wkft1bf+AH9yot8IXPfQbXPf95kJDYvWs7XviS6/pfuuEr6u677kK3N4BSEuPxJP5NIdTVguVd1KIWtahFLeppC3h58+Zn8UAkWulcY0oykx3y5kPGTSEQWTIpIhhQvPGIETA+eBhrYz4noSzK1vAl0RpScr6r1ArwjplDzyyntRZpkkAIjaoqkegkMh0eIcYKFcUU4/GYpW3eYzIpoNMEtrJwzsJadvRNU4XhcBXHjq3BmBIDKSCVQJokMRJIojYGRVW2s2CJZqCoUgVJPEO8tLQEZ2MuL3jezlsLEKHb60JKibKqkCddZnwA9Lu9Vk4HIiQ6ZfCapZCCMyRN7aCkQH97H/W0hHFskAUiaK3RHw4wnUyiYQ5B6xRlZRA8IISC0hr9QR9FMcV6UYI0f00qiSRJ2aV0OmUTsSRFmiRIkgzWGtSRRU0TjaKqIISA1il6gwxVWcJE8CoUoSwreBeQZSnLg42DgECn10VVVZgWU+TdbnSC5rm2qq4A79m8iwgqTSGl5nPBB5RFibzXRaY4S9gag+XlJZAUGK3ze9apag2FWKQpIAio6xJSaRApSCVQVBUz1dLBVoYRRXSubaJQEHyMJhHRn2fmqOtPAnxDBIjYNKs5h5EacBaHOv1T4LB51jacAI7nQ4zQsnezOdkAPMEA66Rg7okPPAPIzUylx2bDquDn4oVibBOF1rW9iV1RQrWz0M56nveMRmMQaJUiggQccT5yohOUZRFZZo/GdtiF0I5KuDga4SJom40lgJtqcbaewVSLqWZA8ckW/Mm/sQkY0yyTas7Mi9lfiqCNDfw44kcpxWC/yXqad71u1CkRKCsS8Hbm+EyBWonwbCwhSpvjYfOuAaR8D21dr9vsWXZUb1jl5hg1ShwhJZw3HP8lWD6cZh1UpoYpLYNp7m7yvdttVi4QGvaUGdnazEvy46ztvMN380+TO9zGjAHzMVAhmlFpwfFALvjYwIvN0+YcdA4hSqk9OKaJI9D4nstzwKHNSCcCRBBQCY+MlGUBqTRsbeFdgIFBliUI1uHQkUM4fvQ4BMn0uhe/8FW7du5+ad7pXqC0OLsYT5evvvpqwAMXXPQMbN+xHSurK1hdXcEtt3xj7dav33o8SXKe+Q8MspumKrxf7CYWtahFLWpRi3q6Al4SAhTzZtkcaiZpk1Ky8UzjFBxYQiuVhDfRxCZmjvhgkeU5PEV5sPcs0xO8oVZSwzWSPOdgpUCSZqinRSvJU0qhrmqUdQmtNNIkQ1nXSNMEzjLT6oOHrT1Is9unsTWsqZGmGbYsb0FtDBLJ86ZlWUMKgYsuuhAk9Pbrr7/woqNHDhz66k033qZ1AuccdJqiimZHw8EAQhDWRxvcta8r6JAg6/ZR+xqHjxyG1hq9bhcUeH1Wt2/HoaOHILVCMSpgvYN3YyRpgjTNWuksKYVuZ4AkkRgXE97sSgVnPbq9LopiwjO0SsLVFdbX1qCTBCRVnMdzPI8sBJTWKIoC3V7exkmtH99Aonn+FoGhUpakUDqBIKCaFgzA+31UBedP5p08Ni/YVGv37l0YjzdgjeF5PGIzs26eoSgKSBmNubxjZi4A1lawziCAnbaDC2zmpRN45+Esz80hAM7XUEGhmE5BxFLZQITgHaZlCS0VlFJYW9tAt9tBnrOx2GQyhmsY3CDYsEzFhkRkaa3hTWijQmgM2DhXOkBL1RoQCUEs63TRWIfiVj+y7RRC4y00y3XGCTmy88xWwzmGyBhuyjKax1dhE7QNT4BjM2r2iQLnJ5sLxklnWOc/pzAHRnxgGbeLIDXO9voo525YwqbJ1WZFg+W6dVVDQHDMleBmlw8e49GYM48FtZExUvAcO4Ron7NxcRbtHGojIBdzjtHMAgopIEBwjmYxP2GedQ+blyPMmUoBTw52afMyzmT4c4xlfLyZpD1CtmaOOd7LmuYJf8yPp7WGta4dlUA8h9jwbs4p2yOyoNE1OjLLTU5yM+/Mj8dmYCSZfedrKyCAM7WdZV+FLMuZEfY+zssLOBdQFCWz0k3UFBhACiEQKKpziNiRvRlp0RLOIhraNbPBTcMhAmyaGVGF+F8+bxSrgBppcwS75IEgqf3pZjE4Uim0l45vzKt00rLXHJ3GzbyqqkGeRxOaBmJzT+r22HHZO4vBYAuqumJ1DEmM1yeYTifDH/+Jd//Y85/3oneuLC2fIpTC333kI3j+dS8Axb9Xz3/B8wEAo9EESqf4wz/64NcfeviBfcsrK1hfX0MnzyEkoZhOOYJP2MVuYlGLWtSiFrWopyvg9d61JjLN7FpMVQQgEIKFEhw144NnIyBr2UQpytEamWfzWN56hOCg0wTeATICaJHyxk2lGefVVlX7fMF6TO0UUkokKbOStTFtt18oBWNqhCA415cEhAzopF04zxuyBlD3ej0cOXIEQhEoSHQ7/cuvf9l3/NBLr3/py50xD77hDW/6+Xvu/dZnt23bhtHGGN579HodON+wE2zqIkgjT/Jo/sJ5uERgkympUNsKh48dATw4UocaF1Vi52YB1GWFTt5BbS3ybg5T1W3UifcB06JAURRIswTTacGmWtFV1Fo2aBpvGOhEt1FEIXiILGXmCJy1WdU1dKLQ6TDbmucZamtQ1DVvTAVHkUwn45i7WaEoC1hjYQy7NgdvUdUVptMJvPdI0xRLS8tYX99AWfLGrqrAub6KzcKctTDOIs1zNs0aTyC1gqsNjCmhdAIfiCXWxIwgu7AyW1jVFabjKXq9HpQQmJYFspyPv5Ya4+kESZbCVDVsaeB8lCqLKJm3M8aqYYesMa3ZFQTi+48RM67BtTGCimjOlKfBsXGivZ0f3ezOyxdIaMcyGfBEABDoSXXMm0HsDJnSJontE3+aTkCx9GTM7pN6VoVN5rotSR1diAWxoy+vYRNDxaAneP4ZkszACWJ2zQYHMnyOa53AVRYhOBjnoEhBkIB1HrUp2mPVsOohAhvvXAsGvfeQKs6exrGJVk48tzBNPE6YNxZrv0FPcHTGky/JCZ/P8nB94Ll7QoCQKh5r3/Y5nHObZpIb8z5BBCFY+cCeeQIhOAjFzRYXY8La3FoS7TEXUVnTtkQEwVteH1Ozi3FjjNVEGEnBZnZEYNm/C62xXi/vwTgLa2NDEoHVHjqgLitozaMhZV3G+W3OSQ7CAUFHRYZnIz2pWEJNQJAN4A9RuRPgnGlncCleBy7GNwkSPNMdqI04Y4k8v1Pr/MyVO15pQgk46zgCzTqEmGUOEKsKXB1dpblpqZSCkAKu8qyEifLtPOtgMp3EJmvAxmQNRTld/tCH/vcvX3/9S37o45/4VHrNtVfhE5/4NK699lpc/x3XxetBwNQGf/xHf4Ibv3oz3vWud+Dhhx7+hhTpyNQGWkk455GlKeCr+HdvwfAualGLWtSiFvW0BbxEFHMQ0eYxiplbC5RUMb5HMJAIgWN9ZAJnHUvOJLMItamB0Mj/2D3YWwvv4zxfYMmjFswkO8tGMGnSQYBHWU2ZrfAuOgczIwXHLs8k2MAkSTSqsoKQxAZGhmWYVV0h0SmcZVfijfUNnHnmGWe+5rWv/5nnPvea733owQfplNNO2f2vfvpf/fpf/dVff/DOO2//mFlf35/lGcqKgdTGxghpmkAoQi/rw9QGtqpgTI0sy6C1RFFWSNMMWZ7F2WB2Uq7jnGtdlhguL7G8ug5IswxdrVAVFaQU0EkC52Kmbp5yZrAHsk4GEQhBJm0cFMCzz0tLS1E+GjCdTCGVhNYKCVJkWYqqrlHWNbIkgTEGo2KCcjyJm2S0jBRa4BEgoWmwNBj2l3b3QEEEgIZC6l7e65517lmDLE2S2lTj++57sNy+bdUdPnzYHjx4ZCoEHX30kYcnSknkeQYdQszHJJAApCRolUBKARMjf3SqIUCo6hJZnoMATKZTCBBsYOfr8XgDScZA2FUOYzOG9R6uDOhmGbRKOL+YBNbHI3TzHqqaI0h0omN2bEAvzVA7C2MNyHvEtBckiYIgwHoHgoCWzG4772YA0POcKqPfsMnjiK+JGahqMGbjnBvmWMiTMq3xl2ayZnpKX+UZLguYDwGipwJxhCeYVzXJPkIIbgC40EbsNFLZmbyX2gaWlDwz6i2QSB3n+Zlpc8GxesEThBfcPhCELEsBsPwdDsg7HThnOV973giqUZVEOtN6h+CiZLcxbjJ2k0vVvIHVk4F82hwm/MQlPVmqTpSvNGAacyx+sx4+hM0u1mEOmPoQ2UfJ0mQfmWLyUXQQI4UosrckI34O8XeYMRbU5A7PwLWSKo5DyFZe3bwXDwsigjUeJAJ0msLVFpAs1ffeI+vmqMsKiJnkzTy7IAFIVo4IIaGTBEoSSuOZp7UGQhASlcSorxrOhZk5V5MLHF2m2axMtDPyvjWAC/Dxbws1ubrk4eaEEo2MvpF5EzGwDb6R13N+OwmCdR7eOWiVtAffOoNyXECrhFlv75B3cu60WrBBYV2iKIvkv/7Zn/1/Xv/6V//o2toaLjz/bJhgccrpu3H+eedi/+MHMJ6McfbZZ+FTn/oUbrnt63jt616LXbtOOUSge5yvIJAiUSlqY1GWPFZSmxLdbnexm1jUoha1qEUt6ukKeEMIrelUCNElWBBc3JH44FFbgyTNkOY56rKE8Q6aCJCA8IC1HDvB0SGiBVVVVXI0j9IIFkiSBEmisba+BmdsnC1L4EKArR3PQwkBeAcQm6hkeQqSAtZ6SKVg6xreW+hUx+gihSzj+dmN8QaDQsPmUzrJ+t91/Xe/8xUv/+5XpnlGS8vLWFnZgmdcfPEVb3vbD17y6c/84823fvOWj37ik5/5Xx//6N/fu3PPHnSMgZTMRNauxGg0QqebQ0gB6z1EEOj2utAyidEWPRw/egydfh86zZElKdDrwnuP6WgKJQUmozE63S4bwiQSVVVBxaaAUgK9fh91ZVAbw8ZR3mPL0jJqY1BVZWw6aBpPpqHX68Fbh7KuUNc1rHU4sP8AToxXISUxWBoCLqTbt20949lXXXPm2trGoN/rJ3mW5Dt2bt922WXPOmfPaaeef8re3TtCgHbOBVdbvbplpT8Y9GUIAeNyHI4fOVYPhkM7mYxDptPJo48+9tWffO97/8ftt9/+D4cPH9oACP3eEKAA7wWssdCJ4rikso75mh42bowFJMqygFYaSaKRWoe142s4de+ewRte99r8D37vg4dVIrxMFFwIUEJBSoHRaIrVwRCJ1lifjqGyBNYb+MDNFSJgNBoj0SngCcFFQOH9zImbGIBIybEr3roI8ELjixPlmr6VRfN4bngCwmrA7WZ2h04epgvE2ea5yJ+T4rbNllSzh2mDlJ74PCfG8Z4ACJsGR/vzYvZaWNLKcUAixmG1jx/nW0WMb2LndAZOCAQSPmZSewiloBLOTi6mJUtZowa2nQcNYLfuAFgyCC6w1DXOFJMgwGGu+RYiGz8D4c2i03wH4anA/z8R9M4f+5lEObSqlXnQzfE5M3dndpyPcmCwsiB4P3NT9mjzYCkQpFYIznHD0Mdc2eYYNc2NGJVlrG3zwq0xIMlz/SEEzq4Wkt2xhUSSpah9gKcAE9dckUBQCggS5bRAmuZIkgzeW3arjyxpcA6OBNKsAyEIdVFzpBDATG9gltXHa4NnuiVso+4JAcG6dr62kR8771qFSfA+mhOCc89jo0kQ571LJaCkio79aP0VqJHVh4Y1F7DWQScSUrLbvpCITLNAt99t45e0UlhZXcX9992PH/7Rd/34W9785ncAwNLSEu6752688U1vwC/8wi8BAEaTCZyxOH5sDY8++jh+6Rf/NZZWVvH+9//CJ7729a9/I8lSFFUZGxYe3nOsm5DiJPnEi1rUoha1qEUt6ulS1OTiBsE7CimijNE5kOKZUOsi0yiYwXDe8IbFMSshWmfgEGcFo8soeHPMEj52dtVaw1iHLEnbSBzvPKSWrVGWVJIBi/WAAmpTcyyRALYsraCsKhhToZP3QQKoqxpKJTDGYs/unVjfWMeBA48PX//6N/zI97/5LT+xffvOHWeedTqWl4fsIFxyvI/3DjffctPGffc99H9+6Zd/+eeOHz3+mNa8mVo/vsYztt5CSIn+oM84nAjBW2YcAktBy2qKbr+PTqeL42tHGeBHeXhtDEuRKcBYy7OmiA6tgp2gpVJYO34M08mUQSI8lJQIgVBVBZukzJVOEmZkSCbLy1tOO+3U0y447dQzzt97+hl7dp2yM+/2cr17zw61PFzOnPHbO93OGeeff+6OJ842PrG8cxhPJuj2OgCAqqr49Ue0JISAKSp84hOffOwvPvS/P7rv4EP/0Mmzr376k595TAgVXWUdrPMY9AcgARRFyTJBYyJzA1hbI0kSWGvQzXNMp4X8gz/8gx+55qqrnvGa7/3e/3r3ffd82Trve70+xuMRn39SYsvWrZiMJpBacv6oYeAgo4NtXXPDQkSToMYFmCKo83DMuEWjmxCa+JywKUc3xDleMRdLxN+jzba6EYwJQZvNrU680ATNgWOaC9pB+7ihjSCan9ulJ0dzJwJe2gzM5nNcG1l+MwProyS4MdxqPOnQvl/fKoSZzZMQosleDbN516jCUFrBx+iuVCfM3ArOiHWenXdDvIZBAhTjZJrZ4nmgKQRfg82ba9a8nZaOs9htDNTJ4piebG1OnhEVo235i1prAGBXccwMzqhxqiZ2XbexkRJV8PCOGynMCAMQcRaWZIxV4wUNsYEyz9dLFaXi1vIwieL5cx+lxkIQR51JBa0UnOcIskYeLaOTeXAOSZbxMXMBSgjUtsbycAuEVJgWY5RlwU0KKQHMMtiNNUjSHFknxXQ8QXBsG92abJGIow/R5ND7yPZKHsd2ob3+hSBuUBp2+CZBrYRdSI5BM3XNzDYknHccf9XM4cc1cVEJkKYpvOMxF3afjmqhVLPUOoTWg0JKgrUOWZZCkgKJgD2nnvad/+3P/vvvro+OnnnantNw2ml78Vu/9u9gncR7fvI9SDJ2f9eKGzZ5nuGmG7+G3/jN3/7c337sb3/OGPNFJXkWvWmGJYmG0grjyZgj8cpisaNY1KIWtahFLeppWEpQ0z33CN5DRraimbdC8KDAMRu8uROcKas1ynIaNzAyZiTyxjd4jtKAZxMW1wBb73lDohSEIBjD85ZKKpALqOs6gg6KbtGArS3yPEfwHnXNxiqkBDRlnLOYSrjgAEtYHi5hfX2E6XQi3/+zP/8v3vx9b/ypO+6+c/kLn/88zjr7jIjwBYSQGI0Y1J155rmDSy955uvuv+/eG371V3/jP29d2YJJWaA/HGA4XEJZVrDOot/roq7YzGkyrSElNwNccEgpxcZoAwHE8j3n0O/1sbJ1FYcOHUQZZ+ayLEOJAoIEjh45iiCA4Cy0zsSZZ565YzgcdEfjsSEKXkoh+v1hPhwMVk7Zs/v0paXlM/ecumf30vLSlh07ty/3eoN+lmS9QX+wvG3L1pVuv6uavEwAqIsaKuHZtvl9vvcNWPKw3kFCxnVpjIMIx9aOwgfHJmSRKSHi42ONwx233YFde/bs/rVf/9W3H984cv4NX7zhP974pa/+9dr6BjPvWiNJBerIQgcQ8k4GFRjcZ3mCjY11VKZGN+9i67atSLJk166du97wtZu/fuWBQ4cGr3rVa174ile8vP6Lv/gf5pnPuizVSu8497zzdz/7qqurH/uxn/iTv//o332q1+sjBGKWC43xjodzDo4IMsToI6UgJcGUFQiERLNZWIiu5EKgdd1mZe8sY7YBsE9sFkTwKGZOzcGHOROrzSCrjW15Ul4XmOd/n0rsvHmgFU9qQNyAVxfnJBtQFxAg4/txwUMKBYQADwdBEkrx/G3zkpMsgXWes1sbU7QIpEmx/NQai2DZnI5IwHnHsVtgWS7PsnLTg4iZu0a2CgoIgdljIrSNLwbA84ZhM1D6hAzepwK3OMnnJ8qh5xheF0cJmFAW7bFsjiEJmguJovZcCMGj+dUkS0BEMJUBKY588/CRsWZGMAgAkS0NwcfGAEdHUbwHxgTeVjIevGd/Ac5HVxdffNkZhCDvuOvOxyiEjSTNUFclsqzbmv2JCHoHnRzrGwYkBbp5DucCK2bIIklTCMtmW9ONafxbIFo1gI9NUHbk50aIbSTIjbO3EPEaZMwarON7SjypW8k22AjL2zgzTgFCNm7hHBfWjHRIpRGCRzEpkOd5NIdj13fnPJwxEGkCQRJSKKhcw9gaWksgEHQiMZpOd/zMT//suy55xkVnfvhv/w9sXWPb1q14zeveiFNPPzUy+dEDIPBs9I03fgXfuOObxx/d9/BHlJA3e+GwvGUIW3HubpKlHHdkLBKVwtRmsZtY1KIWtahFLerpCngbx00O/2gMd3zLVjXzflKoNo7HegdbWgQfkKQaSgrU3sb5No4NIpLtJs57QAkg73ZRlRxTY60DNYYmIJaYSoKpLRs3IcAFiyTTUFrDVjWU1BhPChABq1tXUEwLWGehEwElE2TdDI8+8jDOPv/cS9/xzne8a3VpdfnGm76G8y+4AEtLA5S1gdYcOeQRMKmm2LK8BB9cZ+34xlnLS0s9EMadTo4sz6CURDmdYjAYIHhg/4H92LZ1KwaDASbTKQN3SPSW+uhZg+l0itXVrQy6rMWRI4cxmRYwVY3JeIy6ruCcxWl7z9x6zjnnnXHBBeecsrpl5cxdu3df/JyrnnvFzt27Tq3qMkynE5tnKQa9oer1ukmep/LbHciAgGkxRSfv4Btfuw1fveFG/5o3vk70hh3YYCCI5YK18ZACkIpZNqKAclrjyNFDsLbCtq3bceDxx0E24KA5hPsfug9n7D0T/d4A+w88jtXlLbjgoguhkxxZpuR9n7t3x2//h99ZIwj0hz0Y20hAOf9yuLSMLM9x9OgRaJnAO4O64mzd/mAIbwMefvhRnH/R+Xt3n3LKOR/7yMfVlqWVl/3BH/yn71ndulXv2r0zvOAF11ETCwMAv/kbv37RLbfc/BMHHt//uU6338aEaK3ZbKjJLo0KA3hma0OYSQ8bBjVJeENtogGYD7PJ2iatpjGsasDsE9HTCazn/LfDDEjNM3onsribBdNPgWRPhmzn53Vbk+jQmiKF4FuGEkSbMnwpypbZZTuFltGIyAfIyMqZqgYRx3h5FyA1uzEbZ+Etx4m5wNnMSirUVckMupKtA7QkBjFplsFbD+cM58UGD0EKAbadfXWO7w3tXG1sSsw3GuZnq5/Up+pE5vdk0bwnZBbLaH7XMM4sw43HLMqpG8f0hv10ziPLMqxuWcHBw4fwjMsuWdq9e4f7+498fCQlN/eSNInAnRuL0CqqaMQsEg4MaBHBcaNE8C5AkWLWNghIydm67/nJn3z11i3bXnX06EF/zfOvvvP++x64L1HJg5//3Oe+tTFaX8+WtiAASNMM02mB4dISVle34tChwzxrbH2MYdPMpAKA8xwnlecICCiKacxrFlBawJtolKcUnAdIxjgu6xDAc/wqSeEsezQ02cGcywsgCATHcuxowdU2N1xUDDUKCBmzorm5otrYKghmmrUSqGuLqiyQZTmkBGpjkSU5tFaQQuKxx/fhe17z6pe/4Q2veykAfM8rvhcPP/IwKuNw6umnticQRxvxtfBX//N/YbgyxPaVnQ8V4/GNnTwtdSJRFuyR4L2HqQzqykTFxkydsKhFLWpRi1rUop6OgNf7dkZQkIA1DkJy3IgDz2shRsj4wLJcgGejhFTR3bUBFB6mNNBJAqkklNCcuek8ut0ey0M1y+wqU0MpzRssKdkgJ9TI86w1RsnSHM45TMZjJEmCfn+IsiyRdThrdzKaIskSLA2HMMbFDZLFFc+67LW7d+8+48EHH8Rzn3cNtm/fBh/AeY6eDVWyLMXGZAMbo3UcPXwUd99xz85tqzu3PH7gofHS0hLqymB9ugGhCMeOH0WS5uj3BiimBbZsWcHUT1AVBUCEY1WNPbv2RPdYh+l0ivFohMl4jICAQX95ePFll5xz6p5TL3nuc6+9+roXveiK00477ZxOJ0sIhKqocGxtHYOlARK9BeujDSRaYdDtPYGkcoGl1I1TrSCBsq5wfGMDWZaikwOn7T0Fe/eeIoYrA7jgkFHa/n6eslyzAYMChCTR6PcH7EBd1jj/gosxGPRRlTX6wwHquoDSEuedcyE6XT4+TYmgy8NHj9wzriYYDPrQCaGuDMqqRNbJo+Ot5fzfLIUzFhujEVZXV5DmOY4fPYbalDj1tFOec/HFF67+i3f9EF73plf3VrduRVkU+NY999GeU07DueecjfGkgNYJzj/vvGf89m/+x1/7hZ//ufffc989n9Y6hXEWWkgIIVn+GCymxRTWeAihIAIzvZz161uzIu9dS+U2xl6zeJyGkcOMYaRwUt8kNt+hGQg7EROfAGCfyrBqPpG3AefzYDnMmxG3z0etdFtENUWbJdaAtRBiXI3i2dQ2j5jnm4UEmxN5B6WTNuyWTZk8giUAHIsVvIetLc+712xwpKSCNfy7LEPNYI1FWU2BdpYaUImCLQyM4SaZjLndAb7NcObZ6/gaiQFXiEB0FgA7l/c6B/hxMvOweWK4WZcwZxzWgGjM2PwZ6OVRjTRJUZkSIc4ne88yWqXZsbysbf/Nb33ry6655ppXbt2yYsbHJ3/1pS9/6ePWwCqtoSRHabEpH0WgH3hG1vI8LmIMEQht7JZ3jaszS3y9s8g6Hbljx7YL9z2279p+1t9unTl05OCh4489tv++F1z3/BvuueeeT95999235nkO7RWkEFhfP86NwSyNsmOgrAwbPHkf2WW+j1dVGfN/gSTh7PC65pxy61wLPpvrIaqQ5+6xAYIUJM3MECmI9tA1SoFoIQ2CQKI1XJw91lojgBlcBAblgOe/Q+A5b6EVAIdOtwdrDNbX1qE0531nWYr1tTWoTG9/93ve/QME6I11lh5LmaDT6cRrPHA0VAiQpOB9wFnnn4Nzzj4T7/nx93zzzrvuvqfTSwEhUJY1g32SGE3W4QlQiuLrk4vdxKIWtahFLWpRT9OSFCWDUikkScIGKJBoRJVCCHbEDBQ3Iwyy0iQHQCirIs748s9JwfOrLrAJVZ53OKfVg41UfGg3c1nGTr5VVaM2FZIsaTd4zEyksDXPaBIBSksgeJTTEj7w571eD0IoLA0GePDBB3DJM5/xvA9+8IMfmE6nywcOHsSgO8DS0hAgz5toGxiMS4H9+w9gOilw5pln4JJLLzcf/9Qnv3z02KFHdXwNJNmZ2lpmrVdXtyDJUgZU8Oj0OhgMhnDGYn20gWNHj2A0niAE6p919hnPuP76l73s7W9/+zv+5U+8+1+9773ve9+bvv9Nr7nyyisv27p1dVuitWxgjbEWSsuQ5xkpKZFlKazj18vz0SwdtMbi5q9/HQLAcGnIgEwRnLVI0gzDXg8heOSdHGmetWmuTQaoCKJlxprZzRCY7c3zHFmeo9vt8rpbNmQZ9vtYGi6j1+1Ba42qMrC1xcMPP4Qbvvwl3HrLNx767Gc++6dCiLKuHNKMgVLwPpqfeVR1Hc1mWDlw7jkXoq4tJpMximKKvJdt+8MP/v4vrh0/fup4NMI111wDADi+dgyPPPQArrj8Sug0BTxvMAVnK+957etec/EtX7/lqw8+8NCBlZUVWMsu4sbUMLWBlAJZljFjFuWiSkkYZ1nuLTj+xAcfgZVoI1JmWHI+umhmGjwX/Trn2ruZTGw/oBkofSL0fcKPbUrhDZvsqqLUdf4X5lOQNj0X2tlYiu+reQVtnm3LMzfzuNGci2I8WQjI0g4rLIJlwyOdoigmzMxKZhvTJIkyWwnvLHSikSiN2hpoxSACAkjThBmx0FgzUYw6c21uL5s7ReFrwz5zNlK7/k08FEWE24LUzRHJT5pP3B5jCpHxRlQFzM1qx+fRSRrBr0dj8CcEg7M0z5CkCcqigNK6++rXvfZfvvz6l7333rvufc73veFNz3zlK155fZan6Re+8PlbjXWViJJkkOScXjgE8m1zgyTLp6WOmdExIgfN+HXMHEqyBMH7sH//gSMrqyuD0cbooo9+9GMrSultV13z3PPKsnrmj/7wj1x97jnnbLvt9tsfGY8n62meYWN9AiEVtmxZgvceRVmwGV/M1CUAzlo+toJgo4OzUgpAjKMLDP7bBorjdVFKgiRFKbvnvN3YYIBoriFusBExMxziDEFjhtZIyI0x8V4R4/JiNrBz/LrYwGs2UqCiUVa304NKFKq6QlkWmE6nePOb3/TO9/z4e95e1pbKqkKep1haGkBFgNqoCmRklo8dH2Hbrq04eGR/ddtt3/jrybj80sOPPFK7YEEywNVs8GUD+0AIpVpDtQ984P2LHcWiFrWoRS1qUU/DUoIIUicAEB1v2VXUBw+hJFQEXc567mRHkylmHASIBJRiuV1oZ8/4901dM8PrPawtoaWCEOxS3Di9NtmlSZIBzsEYlrAlWQZr2bkzUxm63Q6sZ5AkVYJEEqxx8M4h6SpMiwIgseeHfvBf/PjuHXtOv/e++3HG3r1YGizB2AqZ5gxbmbCRSggBK0srmE7ZaGQ83Vjp9DvqnPPOx61f/xp6nW50QvXI8xyDfh/WWIzGY6z7EYqigFYC/d5wsGP7rjPOvfDcC0/Zs+eis84+69yLL3rGWXtPP/XUratbh0o+udSt2SzmeYaAQJzvSajqCo888gh27dqJpcEQTYyukAJnnHoGuv0OGypJnl1lcEttnnJDcYXIm7HbcIzwiGyLhuTsUcExIq2sPVI1FABvHTyiaY4UIAHkeYJ9j+zHsUNrGHSH4boXveibf/SfPzjat+9RaJ1itDECxxXlKKsSQgmkOmMDnYSgEg0fDEQc7KurAt/3lrd99zXPvvY5d999J4rpBGVRIsszfOwfPobnPe8FGAwHGE8L5GkCEhLOBkhF2LFj5zNPO+W0S7vdzq39fg+j0RhKS3ZtFQ145QlI522MUOE8WWYLZ3ODTXZnc77yJphiTExzxEJkIOfA6TyQwgmAa06nTJtg8rerzWm9M/CNGQgO1BrENQesZSZ94LECzIFaH3UcIjLXkQ13wYIoZhB7liHbYBFEgISAh4d1NkY2uTjfHECSHa4ROI+VCCimY3R6XWRpiqNHjyJNU0Al7P4cc75DZNQEEbwAEqGjPBhw0bCoMUmSkhlBb5sVj4ZfYSZr5mOGNi6ImgU5kd0NJ6wuMauI0DQRCFKiBbxNmaoCCQFJkoGdZHMuFwLyJIGpagDA93z397z9T//4P//Mxz/2ic6555yFD/2PP8eOU3au/Mqv/MrPkMDGr/ybf/sfpFTwzsR7X4CQEkLEeVawKaD1DlVVAfDQmhsJWvD91QULCG5EKCFx5NCR2z7+kU/+ztZtq6Xz/gd27Ni15X0/+VP40P/885XSVCs//4u/cEXt/LP+5E/+9K9OP/P0W/c9uu+xw4cPjdMsgZYKnbwHpRSMtZxnKwWcYf8BHwLW19ehKMDUVatwEFIgy3MAQDGdtsym9dzgFEQxw5xYGg5CkqSwVQ2Qh9IJrOP7NhvFCXjPozDWGmjF/hBNvnuapAhKozZ1C5S9C+j1uijrElpJlEUZzQsN8m4XZ515Fu6+806cdfY5V//Gr//mj0bIjZXlIRoj8sa0TcjIWAcHZwO89Xj43ofwtW9+/cGbb/r614rJeLJleRnGlgjBwQaHNO/ChaYJaVCWJbRSi93Eoha1qEUtalFPV8BLgmNwnLUQQkBICQeHJqujrm2MJFFtB15KgnOWNwya58l8HTeGUjJxEjNNy6Js81mFEqjLGnk3B0LAxsY6pFQMdilAQEFpgbIsAc9S2EDswuwsg/EszzEY9rAxmkJKiTRJQV7g8NEDeOe73vma17z2dS+fTAvs3rUbVVlBKkIQKm50mZVQQsIHj27e5Vk2AAcP7z/yhS987v5Bt4ctyyuQUkBqhelkisl4jLKcYmNjHWna6TzjkovPPOPMMy8447S9z7rm2msuv+SSSy7asWvnVjU3x+UDUNcOZVkgzzJIwTzOaDyGkgLra+s4evgIBktL2LVnJ5x1KKsanU4OpRLs2b0HaZ7EWcxmzg3Ytn2FN5jBoa7ZQdl7AiHOBgYClICgAIrsI9EswoXA3/PRYVWConMu4Lxl5sk5EElopTnnGMDhI8f8xsb6BjwOf/GLN9z/pRtuuGfHjpV7P/GJT3xmNN6wy0vLmEwLSMHmMUVVIs86cN5jNBphy5YlEAhp2kFdW1jjMCkK5N3Olre99a2vAyDPO+8CnHfeBfz+rMXOHTuxtLSEaVEg0RrNHG9QM9CY5Wl/NN6IMSceZOO8uRKo6xqFsZzdG1kkQTHj1cfIHcFS/iZOhV1l45xvmAmLW8Mdtnr+p2BVPEFv+xT17VJ5m/O3VeM29DIa5+I56TJhkyS6AcRCsGGbtQbBB57tVnxtBx8glGSn9Tj767xHcB7BAVKqCHqY+U+1Ruk8AxLPYKU3HMi6qhQSUpdcfAk9uu/h6bHja7559b1+H6lgR94szTAtimhyxOBoXirfAFs23JpJxts1DptXb97JeVMX4gTwS3PmUy1FL5oGFAP5EKOXQuBrgtgtC0IodjqIvgbGWIwnE7zoRS988bve+a4fDw6dsihx2ml7cdfkDmwZDgEge/e73/MDH/7wh//vnXfc9aDSKecLwyN4Qm09Eq1BIcDEaDdmglnJAIrxRt7FEQYJUxlAC4xGG7DW3p0k+r9561d+6J0/8HolbLo8HOCWr30Tznvx1rd+//e+5fvf8orTzjh1sraxcdcH3v+BP/zzP/uz/751dZtfWV3BkSPHkGUJQgBGowlUkqAoKzjnkKQJKBDqqoRQEjLe/+u64mYmOGrOWIvgPYyp0aS4U/Rm8PAwVcUmWErBB4fgXbyefIzEi+7cxH+LtNZQxOdJIEJVldBK8zVKPFteVSUCBVjLp1e/1+dcaCEw2RiDSCz91Pt+6ke3bt16hndAEoG5jwZyRLN597quYySfxtatS/jqTV8u9u/b94U77rzzq+TJd7td+KmDECmcmaAsS+RZDk8BMiikadJmpi9qUYta1KIWtainIeDlubnA+bsk2LG52SQ2ssfoYkvgeSytFOq6Bojnu4iAaMjK87tCYjIaQygBkWgGbNHlVwiBbreH6XiKLO2AJNDrdVAUU1jr0E1zaJ3A2AqBeCPbyVJ4AHmWAZ7gHX8tTZm1LesSaZovv+z6l71yeWmYra+v47H9j+HWW2/Bc658Ds4440xYa+GJXaYhgGA9SBK6gwwE4PDRg3cpgX0rq6sYjyc4vrGO8WgE4ZGcc97Z515z7bWXnXXOOVc859lXPvOSCy+8cLi0NNy85QbgWZ4shEBZ15AgaKnQqBJFZL4PHTqO/Qf2Y8vyEpaWlkEkoRKJQZpG6SIw6PeYSXKOmw1gVsKYGlmiIQJHmEDPjJWMZ2aFvMfaxjq6nS7SNGeWzPsWMLGU2sMFA++ZvWrMYVKdgFLegI7GBfbft2/8+S9/8db//X/++h/uv/f+zx89eOhhCBwUSlZ7du/GvXffw1JFpaC1BLmANE3hSgcCQQmBPE8wHo2QpjmybsC+x/ah28mRdzSe85yrvuOa51zz3AZwAAQhgaIo8LznXocsS9m9tjVgmmNQAdS1qQAgTXjTXhUVnDMxa1fBE0e7NLOoQQA60XFzTgAx0G2yRYUgNrfCnLw3AkXvXewDhSeC3DBjXhEjkYiI1RBPIq0Nm7yZadNXNv/w7HtNHi5FQ6UZrp7FHlHMdG3Ab5hjPZuPpSQEF3/PR5BCAsbXCPCQYOdmuIBO1kFAQF2XsM6h3+8hzVLUJbvVHjl6BK9+7fe+6Kd/6qffcOddt/f/5L/8SfkLP//z7o//6E/u/vRnP3PX61772uLOu+585NOf+vR9/d4ggAhBAInWcX44NIlIiHIEJFrBRFd2rRUAlu43rz8Ibjz4EB2oieW1M1b/JE2IqF2mQCwlJmolzYiNn2ZOOFoXtMfdkwcRZ69KqZDnGTZGYyillt7/gfe/69IrLjvroYcfwZ49u7HnlD3Ye+ap6GR9AMDW1a3nXX3NtWfcecddD0ohI85miX+aZlBaohhP544n/+Msqy5ICnhn2rlsEQ29dJpgWk6hU/H4Fc++6k5bV8WNX/1K6q3D29/2FpCQ2LZ1B5aWhgoUhsNdu5/zP/7rfz19/77H1z/9qU/9316/gzRR6HY5+st7C7YsZ3bdOgstNfJeD1XJs8vGViw/lxrOWQaoSqHyLH9mWXQzIsCztj6wDNxFs0IAkMSyFaV0e0yV4gzeuq5ZkSICZNAQJNvjaqqaY4zgMBz04TyhKktACmRZgsGgh2/dfTfe+P1vfvU73vFDr+LrmA3VfDy3xNy4AAB0ohu9EAKHDx7Bwf2HH7jnrvs+Hkiu1bbE+MAIICDrdrCydRuOHz8GkgKmLEBCQqsE3rjFbmJRi1rUoha1qKcz4OU50bg59h6J0gxiHc+uBm+hJJtUsdMw556SEGye49kQCOAZsLSTYHl1BXVZoixLOCJ0up2Y60lYX1uDJAmlJVSiEOAxHo0hhIKtN7C8MoRwEpWp0ev2kOYax4+vgyoTASBvV6aTAnkngw/AsNu76Iy9Z1xW1xZ/9t/+LFx66aX07Cueg6Xl5bjBlzDOQQme+2qyRolYRvilL96wPNkorhyNJrRjx65dL3zxi0/de9qe0y+64PxLrrrqqov27Nq1euLiBY+WmSIBBEHQCa9DR6WRUWaU4ok5vKXBAJ2sg127diBJdMs6OOfgRYCIzKO1DiQ1CARTV7DWQCmN8WQC2R8gUEAn6cYNMEtbUx2bD/BQKkXwvEn0UfIpiGcIOQfXwXuPPM/a9QGA2755J778lS9jPBl9647b7vjCPffc/02V6dvHG6NbqkmxZqzDjp07ABnw2GP7kXc7kIJQW4vxaIJ+vwetJTrUQV3VKIopsiTF6uoqrPPIkgSrKyuYjscYj8aDH3rbW18jhcgjlgTFSKB+v48QjaRiYhLDkjkM6LzDkaPHRwDHv3hjkSQaWZagrmsoncA5g6Io2jlbRUk7z+ocx2UBfK576Tdl7qLJiPXsGN40BWYoczO0orm4oHAiw3hilNDcz4cTIO7JrIXn2d8QM1BDM+saxctNU6oxWWKjoDmH6fheRJS9Bwo8201guaY3PItJGghs6EVwMLaADzzPKr2Hcx6TYorh0hDH19dw6t69V7zn3e/7t1c86/IrL7rgQlhjceGFz8C//43/YA8c3G8vf9Zl8t777r3jZ372/b/7d3/3kb8wVVmSICilEOqYQyv4NZESkdnl18bmVTEPVsxyf5s1FnE2dNPaAO1c5YmOzCFeuPy7vLJhLpO4iWOTQnBDiViZghCgJMGDxzK6XZbQX3XVVc961rOe/cJEZ9i+fRWnn3Eq1o6v4/Y7bscVV14OADh0+Ij5ypduLJrD6TxnjQcXEKyDDYFNwhDY8dhFWXcEagzMBbvChzhrTR6TyQRaa0ym5cbDDz16x9333Pf4j/3ITyytLm/BZDLCtGR1zmQyhVIatXXo5fn23/jNX//Z177+dQ/URfnNPM9QTAuURYX+gI3rjq8dBzw7qSOa2xHx8Zq5KnNjqMkF5jEXAcTZ/aZBp1Ucl7EOShDf45SEd0DwDjrT8N6jqiqQizPcnufqRRAwNUeJOWchKEGedvjvkg+ojYV1AZ1eD3VtIYTC4SNH0N8yPPu9P/W+dwLoTKsKiggIEiKy9s1pwa7YjRyJmf4bbvhK9dlPf/6Wf/jEP9ysBMEB2LptFWVRoSgrjNbHEMSz/84F1OUEAoENGBe1qEUtalGLWtTTE/ACgU2hhOC5QDD4UkrFDQLP/zUxIfAElSStk6dMs1aWJuKcXlFUGC6ngMtgaovas/wtTTi70HneqAsh4CqP2rBxUpakMX+XIyzyrAOlFKz12L5tGyRJjMcTeLD8d9gfQEuF0WSM61/0kqvPPPu04YFDB3HhhRdTojWWlpexZXlLCxx0lGVOxwWMMTh08DDOOe8s/M2HP4JEdF/4+7/7B8/csrrkr33BtVu2b9vWVXMSS9dAD+tjTjHiJlDMGPFWbhqixRDXtCohBKEua/R6PSSJYqMua9lEydScRdzEdCDAOgcJNlPROoFWGgHgiKRA2Pf4Y9ixdSs6uoM4ThazkHlD3O/0YrYuotMws40HHjuA4fIQ3X4XBw+u4cD+Q6inBmefdwZKU+E973l3+PRn/vFjO3bs+N3gcaMxrkqz1MDDKiXQHw5grIMWEkcOH0aaJtCJAkmFTq8DUxuM1kfodDsQWkIKiaXlJSRpCqoMjh49huHSAJPDY1x68TOe++IXfceL5xGJj1J2rTSMZ6flpf4gfpdBTFXWbIDkgq2qagMIMLVh869EIUs7qKoKxXTCctDAUStSKhjrUFWuncdsJN8+2HZ+WfAwZ5wvn8e1NPsknDC4O18NtvXhJPLbTSh4M1D+NpLmVvbcMLWEGfONOfdizBsBzZybAcBbzt31znBWmAtItASERlGVSBRLVG08NxOdwFiDPM/Q7XVx5PAxIEjoRGP9+HEMh0tn/tZv/dbPXXTxxVfefufdeHzfPrzuta9Hv9cHALVnzw4VAnD2WWdf+tf/63/92vXXv3T7Jz7x8T+syuq47Cs2D4oXl6k551pIwQ2g4CHBHzfviRUAEcD7+cYVzYy5nhA/1Lp0QTTxOBzKtYklpznLbe9ZIRAoxGsrwFm0rtbrGxvwweP0M864YjjoLU0ndcteHjp0CLd841Zc+9znAgAOHzp05KGHHn5Aa80mS1F+LwXnEAfLcT4usLGa9QaSZFQX8PHw3kPHe0Wv04dONIQWWFoa4MjhY+VXb/raza974xu+vmPH9gsOHDiEbp5haZAh63LerhAEYy2KusZll1x65b/517/8S29+81vfvbI8fLjb6cB3cpAgVGWFpeESRusbrS/AZDwFN0Zlq5DhzGCJumaDOB2zcxtzr2a9pRawxvK9KB4fzlnmWeSqKNscdwuDJEkAaxlkyxjDRAIBDqauYIRAmmTopF3UdQ2tFBKlkPR6KIsJjh0+kv3Sr/7bn3jmRZdcUdaG83+1jI2tRuGCE+KoBIQC1jc2IBO1TtLdUJXFI1oL9i8QAiRkm00sSaMoSngELC0voy4r1HW12E0salGLWtSiFvX0BbwEpSSUTGBMFaNZ2ClTSQnveDda2xpSKGR5zpsdAeR5jjzvoCoL1FUNoXUEPRXWjq9BSQ2tJVxNmEwLpIkGQSLVAra2vHmKQC3NWFbmvIUbMTMwXBoC3mFaFFjb2AACoZt3kOZdyMmUDbWUhAtuy5vf/KbrAWDHtu14sPMgPvmpT+P88y/iTX4jdWxkpp5nWbdt3YbggSuf/Wxc+7zndVdWBt0WXESnae+YbZJCQCnehLX5qc1IYTiBkwuAJ5bOWetRmQqdlA1dGpyTJklkfQOU1pBEcAiwACQRpErgagNI4NjoGJTU2LK0BIAZqO1bt4KEgnGcgUkxOgpx/hBgE5c777oTO3fvgPASxbTAQw89jOUty5hWBT7xD5/A4489htHGBq597tXY2NjAaLR27IILzrtxbW39a1LrtTwjlGWFoijQGyxBConjR45Ba43VLVthfYmN8QgBAqtbViB1Bus9uyoTQSUO4/EUaZZjuDTEdDrF2rF1FHWp3/Yv3vHq4WA4DH4uAgYBQSpAAhKRVaI5kCeIo0cEUE0re/jgwREAQArAMWhaq9aZnRQESQpaa9RVxa6/8DHjU7YSfSkkv1YpmamKNFCAnzkhR+Owdk40zBjUk4Hdk+Dab/ODT1X0xE8jppidi9Se4yHGD3GkjIa1NrKKIkaMKTgf4ODY7MfW0RiNYCxHzmipeZY7lUhzztnd2Fjn2fA4Vx8gBv/+3//6z776la94BQAkp5+KvXtPgSKFsjKQSkBLGZl0CSmw+oe//3sf+OxnPtd790++91e89VOtNUKUsEOwAkQJCeM9JMV4tOAAH02v5nKSQTP2msdsT7DQbj8Omw9H8x8ikJBz2czRCzt4BDB7SRKR0dRQQrEPgTEwpkI3z/rPu/baawHA2Bo+MOCdTKd49Wte176IQ0eOHh4X4wN5plHXJkawsTN+EGil2sxiKqQ6abNvQQLecQycEhJBaZAUGE8mCALodntQMgFEOHDb7bfeCODN/WEPcAE6UTCVieZYAoePHIEUAvmO7XjD61//yvvuuf++n/+FD7z/jNPOqnftXMXRY0dx9OgRDJeGyLIOJpMxr51gcJ7oFF45lFXFADDOsbDU2bC/g9JsbobAMUzGwlkDioZciLL/4H1rpBc8IEUCEhxn1DioC7AxoQvsZg3iNSLBozc+BORpypJ453D40CG8+ntf90M//zM/+0MAoIWETDg1gJq59xMuKSJittY6rB3bsLfe+s2PfukrX/polqbBxfGM0cYY3gekWQoInvmt6wpaJxypRAI6SRa7iUUtalGLWtSinraAN8pyvavgA5vQKJWgKKbwjjctpCXPRfoAaytYY9Ht9FBbzlslQXAiwJsSoiBUFc8BQgdUVQ0hiHNdqwrOWagkRXfQ5dlPKWBrg063C2MqlHUJZz2SVGFSjLCxvoFevw8tFJx3KOsCoIClpSFMZXH0yFGcd8H5z7/kssue3b4rIfFdL3s5hsP+bPMb3U0RAvqDTotcvAd27NzK780Edgv1FlIoJFrCgzMzmxiL+flR3hbPR6Sglbr66IYslMSWwRKAgCylTRsuTjUV8AioXSNf5HnqI0cOw9mAHbu2ctRHYMdeCX4vWZrBec/OqghttqUtLe6+627c8rVbsb5+HOddcD4OP34IX/rylwEi3HTTTSjKKeADtu3YDuc8tmxZwm233Y777n3g+Eu/86UPnnPeOfSnf/zf6JZbb0GaaKRZDusC1o6vQUoJ5yyqukC/30e/twSQwmQ8Ql2UEEoBCKjrCtZaJEkGIRWquoYUDFoOHz6MCy6+4IyXvfQ7XwQAdZynFdH9l+XVBKkE+pHZLssCggQbUElex7o2E5Go9U53AKU0z3wKNl1KiGcMbbBQKmtnf73jxdc6QR3dZzlTlOWNTURRc4yUUHPSYe6ENCCLIsPafj+cBODSU4Hef/rPhfld+twM8PxssyCwyVSUnSI2XEI8d1iJQdGwjM9fZrk9m8qBmwDcAOC1UEpDSMJ0MkGn08Wgn2E6meL42lG88U1vesUPvPUtbwVYsppmOQ4cPohO1sGwP2DpcDQSIgooSoPTzzyzu7Jt24/+/h998Os33/TVv+72Byz5h4MAD7tXlv0BlFYxxohaBpbde5mFbzynqJ1vjpA1vt+5gOTZGkdQ3f5ca2TlY3wTv38JbvaFOCecdxI461BXBp1OB+sba3jWFVee+4pXfs+zATY/G29M8LnPfR433vBl/Oqv/Som4wopgIceePAovEOSDKCVR1lWSJIMZTmdzWSDc2rJS0it4FwJDw9vSmjJjtoeHkmawHuHNMvgfcB0UgIigILApz/xuRsf2//Ywd07d283lnPJJQDrWcK9urIMW5tWKfBzP//+H374/odu+eM/+89/flZyLqbjAvCE8XgMJRTyTs7XpmMnc+uZeXXWcf4sESRJCMHsdICDb43FCLauIKSEUgmC9/Bz57gQrBQSINTGQGkFgkBZFVCJ4hGDKMd3zqM36INIoKoqCJIoqwJCAbUzyJMUh48cxCWXXnz5f/mTD74HQObtTFo9u98y6g1zkVYgwmQ8wdduvhX/92//7jO/9/u//R+1lo9olcL7gG7SRZ51UNYlSAKTyZgbEEkKArCxvh7VSrTYTSxqUYta1KIW9XQFvKJhOIggwEYlLgRmyEgyCAE7bEofEGxAmii44OGcgbUGQqrWmMp6C5UIKJUCISBJUmitmHFyAVoncUaV58uYAeIZrk4nR5rn2Fhb4/xb79Hp9iBA6HW7qEyFsqwwHk3Y4KrXwcrWFf2uH3nnK5aXh52Dhw7jvnvux7btW7F71x4Yw87GECFmWvLOx8VZOQGO2uH5M4rMqEAgGWcKG1fq2b45hM2oN8zhFRdYqiej8y+7qoYZI0hs/oUmG3UOwCgSMRE5oKqYDU/7Gayz2Lm6A0Qej+/fhzztYDhYAkmCVArG1VhfX8fxw8ehtcLGaIS//IsP4fM3fBG7d+4I+x57zFeVEVIRjScFXvSSl+BrN98MKTUuvOhCHDp8yA56vcMi4IFHHn7stsf2HXi8P1i6ZzwaleW0RF0bHDlyFEIIZGmOAAeREoQhjMcjTKYlsiRFJ8lRFhVk4tDr9eCdh60tjDE4de9pWDt2DAAwGHaxPkow7A+euW3bjlObyCShFIypUYxG6HZ6SDLNDYq4tjI6iFOcvZVK4u67v7X/vvvvP9jtdQDnIbo5jDUoywp1MFE9AFRVBaU4L3Y6mbTnXgDa+KLgA8fvELvkMuMpotzZY+bcHA/YnHx9Jic+CWg9kW18Mtfm8FRf2DTB20pD2yxl79mIjVjGTBQNygRnZxPAMmAX0Mk7qKNLs5QKSipeDzAN1kQ+kRJIVIKqKuEiQyyURLfbAULA8TV0X/3q73kLAFmXNVSiYKxBN8vR73XbWeymVRAApImGcx6Dfn/4S//uX7/ve7/7e+6ejDbuYBdtjsGi2ACSkuWkZVlH+bZor7vGbZ0i4g1BzGKZ5lOJ5tld2uxmPVtNz7njxKMJwQVIzUZmFK9jJRWctajLCjpJoaRu1u+ZvUF/FQCyPIOzPezctQNblpfxmX/8DK557vMAAAf2HzwMAHmng9HGCCQEsjQByGM6LdoZ1SYibFpOAWLlhzMOQhKsDfDkoQMhOI+s24GAwMb6OoTkN3j4yNE7vva1r39198t3fzeAODrC54FxHlmaoQ6srlFagkh0f/+P/9Ovfuvhe4584XNf+Phpp52KosogJDcCdJIgTVJMplM4Z2FMDUKKJNEw1iKNEUMqUVCej3/LwgfimKnA6hiPEB3AeXzFx2QAF5sNtq4BSFYFRXm0dQ6KFNI8Q1mVUFoh72QwxkFrzZFO1mF9tI66rJI3vfn7f3A4XDqTWW02dUMbiRVa4yt4lrVb66C1wtEjR3HPvfeOv3zjl754+hl7Hx2PxphMCrhgUZoS8AKdbgckPANyoZGlGSbTMXxw6HZ6KMtisZtY1KIWtahFLerpCniBAKkFnONNu3MBiRBIkxweDsYYiIogpYoMFiHNUljL81ZVWbEEV2sABKEkymnJj5OnkCRhrUdZFMg7HXR7HWxsbKCuDUhGpkYKFGUJYww76/L+HcJTm+na5MQO+gMsLy9jNB5jbW0N3V73wjPPPOvZANDr9nH2OWeh3+8hSZK46Y8ze4FjTYgo7oFZsioiwEGYsXZK8IbM+lnW6SweaIZrxKaNc4APDYPGjYNUJ+2sJW/OHaqqRFnX6GQ9pImGD5x1q4RE8A7WeZBUGC5lIAKMMQiBmw8ry1vhvMW0HGM02sDBg0dw5MhRPPzwQ3j4oUewc8dOZLnGY48dxAXnXuxP27v7yJ133L32nKuuEueddbb88o03jR95eN/0Gc+4RAyXlvRkOq1P2XvqfV/67Oe+cu89995ivX30tjvuWP/Qh/7npKynptftwdQ1pJLNqBuCjSxoNCKrCoO6rng2MU2QpinKkjMz806OaVmgKCaoyhLWW1jD4OmVr3rVi/JMoygrJIqdvAVJJGkKmfA5QDEc1vtofhNNi5q82X2P7btntL5xKE0SOGOh06SFVz7OZuokgXOOnz8CPRLMwHPuaYCIrLLFLLZGxI248zMTq5OStz5s9lY+eXDuP0/BDJz8F2jz11uDK5o5+wpBMduUn7TJEobnDO3KGACIPxdnxj1AspFBewQvoINE1ulAkkIxncCZCoIIGxsjHD56BFdfe9U1L/vOl7KqggR88NBKIxkkcfY5RGMjatc0RNMv5wO+84Uvfc5v/tZvvu+9//J9P10W5aFEszIg7+SwxqKsC9iY+StIQGlWeJAnEMnWoTmEGCHk52amMfO1btYldq/Y9CoaVs1ijGbNCCGjVLcxT/IGicyghEKWcub4dDoGAHnttdc+N08TVCWPf/QHQ1z6jMuwdmQda+sjTCYjJOkSnLcPpHmHm3jxvllWJWfvagUpJFxwUFpBkIB1dSu11prd6MeTDSipmOG1DlVZwXug18vR6XThQ8D+x/dN//xDf/k3r3j5d1+vlUxslIWHADZuAmcdyxDPkeChVXLKr/zyL//yj737x9cfuO/Br+w99TSMJ2MQCayvjTCZ8vMGxyZWIbDLuXMeJBTI83nDZoIsQQ4R1CoojrYS3Pg0dR2bL5KN+ryf2dtL2UbamcrwOeMcvJZ8HcboI2tcPOaKZ3mHOR7f9xie+awrrv+RH/6RVwOAQ0DwDqPJBJ1OjizJ2PFaUXsO+hBa1Y41FkLgsb1n7r13dMu6G21MkGYZjLUoY9TayBl0ez1okSHLUnZsJ5alG2ugk4Vp1aIWtahFLWpRT1vAKwSx5C12wAUoGrM0e8QAIVQr7RRSsKTUAiQVtu9awXQ0wmQyRbffjaYlno1/nIMJvgUfxhg4a5FnOXTCxlhVVUFrNgHJ84ylbATs3r0Lp+zeg6PHjkFGV+VjR49hWkzx6KMjEAR63e6Fz7zsWT9+3jnnnQ0AeZ6i281aSWNrtguBOVFqtKuJpjVgLWjwLrq9EggCo40xhBAYLnXi79KcJ1BoQS61QJmgZXRd9h5SzJxzms13iDFOWqVsWINmjo1n4OApMu38upzzMFUNTxLrow3U1mDn9u246867ceNXbsSho4dxfG0N/W4fz7v2eVjduh2f/uxnDj7/ec/f98hDjzx077fuv3dpy/Cxv//Yx47/37I8cv+DDx5XUpl+v4v19Q2HEGqVyPWDBw4eLKvK97pdFGUBIQRSnWJaFOj3uhj2l7C+vo7asNFWp5Oz4Zi1CMSRI6Y2QHSW7fd6KGsD6wK2rq6AELC8sgXGWDx88GGcdc5ZZ77pzW+6joEXHxuPgCRR0FpxZEwDWzxaGa6ILFxT3/jGrbf54L3zHh6BZc+KZfK9bh91VaE0FZw1bdasSiSsYUto513LGvrW+Gg28x3mpbDzcuXN5Osmpv5kmLWZO/2nZO1uRtPYxEzOyOW5j9soJd7kh3j9EsUsbSFmzZwoGU5SjbIqEWwASWJVhuLoFykTZjmFgiTB0VxCoNPptk7eztS47roXfWeWdQcNkGjQY9NQaGacGyl+gG+vHefYOOtH3vkjrz/42OEv/dIv//IfC8F5z9YZBBGBZ+CYLZ6llTEuR7dya2rfP8fUBDeTJTfy5lbL3rDBmJvXDdRGEzVuxEDM4w2xuSV47tnYaCQFYFpM8YzLnrHrXT/8w88GeB781lu+iaPHj+LCC87Hi1/yQlgbQCLgHz72D7d/9CMf+XRVFAjeQZJAXRs4x07HIs6zpppBpBceSqewtoILAiT5fiqVRgDP6/uYj6y0xGQyAYgwHA6xfecO/M2H/+ZjH/uHj37xZS/9rhcGF0AK8f7L512ep7jjzjtxyqmnYNDrY1KUeO61z73id377d/7NK77rFT9WFpO7lVJY3xhBKL4edGxGSClhrUNV1eh0u9y8ChbBS77+wcaEzsVGKYlodshrL1p39Ng8jCoFIgnSAsHxLC2RQJZ2kHcF+0oEjzRNISUbGKYZ+yFIpVCMC3jvd/+7f/dr7+52u9ud9UgSbs4OBn3o2KgV8X7MKpvQKng+97nP41t33VNMp8XNX/jMF26cTsbrWZ5DCMLqyhYEBIzWRqiNwXRSYDgYYmO8xoZZWrNCwrjZH5tFLWpRi1rUohb19AO81rG5T57n8M4jWA9nDRx4pjTLOzz3SDyHV9satakRPLGbqJCoqxLOGdS1Qd7pYGW1g+lkChEI/UEfo/EIkiS0kjh69BhWVlYRrEUxLbl77zyGgwF27twBnaR4/LHHsL6+hkF/gDRJcOTwERxbOw4CyVP27t67dXnL5a961au+4/rrv/OFKysrpw6XBsJZZnd8CHNZlowcPDADNk0cCZu88maIQswanm10+71Om93YML+hcYBtYXNLGkFSzHmMLrAyAiyWy85gtiABihGn3rHUFIHZJCUlpCQcOXIYWilMpwVWVlfx4P334fOfvwH79z8eLjjvQkrTDGedfQ5O2bsXx48dO3Ls2PoD997z0IN//eH/881bvvG1bxaT8qH9+x9//PjG2jEbN6IAoHSKbifDww9P2A01AGVVotPpoNfvsgurYOZHEINeYxxG4xGqum7nW4uiiKYyACTBC4csT1kyaQ0qU8eZYs4xzbIOAEBLjeGwh6uuuPLaPTt3nDEejyGlauOZWjY8UHSYpnbNheKD5n2AVBJVVdcf++jHbvbOIOl2kaQ9TMZjntu1Hsg4Tkb56LgcWSEpFIIkWGPaZof3rkWnTfNiPlaomemdl8zOvvntLzLO8RV8fbXZON+mGrA7F4NEczPibdyQbxQMM+fz2SyrR3COWz4iMq3Os6OsABKRtI0spRVAAs7Ydk1sbaGEAimOxHHeYWN9HbtOO+3c73vTm18Ivi1AChnn4/kKQxAzt3JB8bxhsEdEUCB4FyAk5alOtwMOMslBTkRGvRk/QMxvdTCFZRWBJMD5OHLBxkauiQ8iGa/wmRIjZg/NHcPZaELj5uwisCYAxtioGCfkWQaSEs4bUJxFbZzP62m1t5tke9eOjqAyiZtuvRmHD+xHUYzwnKuuwdJgC2xp8W9+5d/9/VduvOHLUkp2yNbRoTk2V0xwbAblPUvqvUCWZCAeYIX3HnVdQicJbF3De8cjJFH50s062NgYYTqdQAqJajrd/2d//F/+4mUv/c7rtJZUxzggEhTn1xkAHzpwGIOz+kgThQDg+c993ot++7d/671ve/vb393vD6ZJkoBI8qxwnDO2xsH6aLDlHeq6hnceXrC5k1IJvLPs8i94FtkaB2sNbDQ9lFq20UvB85y2cxbCA1Jp1PHrIcYg1VXZAmVTGzjv0VU5x7ClGR49+BC+7/VvevNLXnzdi4BmZISNqFRs0PjmPCDPxy/mbB87cgz33nOPUzp59JOf/NuPHDp44IHlLcsoywL9Qb9ds/6wD2/Zw2A02UBZlTzTbG1skLCR16IWtahFLWpRi3qaAt7GBRSRmQ2CAZrWGs46NvKxHjZY7ooH3oykeQplJAgBSZpx5946mNrCOwdjOLvXODZcss4iwEOnCazj+dksUdi6dSs2RhsgIow2Ruh0WGp64MDj2P/YPmSdDnr54Lzv+u6XXffa17/uxVde8awrl5eWdmmpxQyQzLJ1EWaxJCGaSrXN9/gevZjNzzKT5+PuV8AHggCgkrhp5+0Sb6jRPC7Fz6mVRPpZEkcLnqgBH3FzKznPg/GLFJDRfCkQITiLo+trePyxRzGdTDGeTLB//z7X6/WFlJLOPedsXHDBhXT06DFjnDs0qabfuv3222/9zD9+9uZ7Hrjnlsf3PfZgWU6rNNOwxiPPO0h0ikFvABcNjOqyhnUOvWEP9bSGEBKrqyuoygob66MICDlGhIFogmI6xmQyRZ5nkCJmLXuPLMvhjIFOE3b79Txj6W0jGeRZ3jRLMRz0cfjgERRlAakkrr326qsQgLvuvtufe+65Ikc2m6ltmxOERx55GKsrW5F38lkSUOw4PPTQQw8cOX78m1KmkEpGAAt4H5AkEpPpGMZaaK2QJimMNbDOwVkf5z25KaI0O8kG51v5Ok5wPt4EbOmfAXbj93kW+Z8BducfIiCen5i9lvg6AsIJTLBoHZqFEFBSw3kLUIjseICjGCEWCNa5aCymYWrL4wVR7eCcx9Q55HmOTtZDURWADyimU7zmhS98wYXnnntxM2Edjd0jAOfHlUrEcePAx1RICJIRaEa218N//otf+BbicbNNw80xuJVawjk2c5IywHuLEDgiRhHHxITg4eO4A1GA842Z2Fx0UcPqUpgLgGK5NQS/PgGCdyyrF0pG9bwHjOf86CyDEEBZ1VCpxsUXXXLJcMsWvb6+DhmAl17/Evyvv/qf+Mv/8Ze46MJLsG3rVhTBwsPfDMAMhksIPsBYiwSANXVkuhkAG1O3CgMigBTfWxQ4OqsueZZad3sM2ilgPNlgQBgUNo4dR5530O8O8cl//Ow/3nrrN+649NLLLpKCeEwisEeBCx4XXXQhNjY2MC0n6GRdGOegpcQPvu1tb7njtjtv+Z3/9B9/P0k0rLNIkhTFtGBgC56ddYZgCoMsy2BsxU1EIfhj79u56CbmLtFJy5Y7a5ntVRKQvlVRUIiNi+AglEZVFCjGE0glkKZZm80LEbC+vo5O3sWjhx/C9p07z/3AL3zgbQB4TIZYFdLkHQcSMasZMJ6PtRSc290fDPGSl36n+Mu/+Muvf/bzn/1SlqUIISDJE6ytrSFNUz5HgoOUEjpRKIopeoMeRusbQJBQpFD4GjpdSJr/f1FCqvSsc845fffOXReecfre884484wdzju5dnTdkYRzwt/7tVtv+cqtN91y5+j42mJwelGLWtSiFvVPA7ySBFSWoCpLji7ROs5SRQZTCEhF0IIAQZAihXEGtamQJgmSLENVlujmXTgXMJ6OobXEtm3bMZlMQFIgzTKoxHGsUZaDZ0O5S+5jNMpkPMZ0UkBIQq8/6O0984zTzj/v3Cu+6+Xf9bwXPPcF15577tlnzcMN59l1NjiLJE3nwGuUmNJsjg+B2LyKd+UMyFyTuRpNrOKDS5oHGqHdyM9jGDpBlTqLG4q0kQsgNQPU3ntUJbPhOlXwLmB0fAwpgaIscejQEdx7770w3vj7vnVPtXfvabrTHWCyUU7JJ+Wg35/effe9j+3ff/C+42vH7/nqTV/9xj333nvraLz2WF3VMQ9YotcboNfvwRqLqqpBnmf9dKpRlTWcs4h2RvDBwzlmmY01bJxjLUizQ3KiU3bmDhYiZlAaZ6C1RpZlKKsKztSo6goqTUCBj2GWZQyohMR0UmDPKbuxsTFCVVfI8hTDrf2dl11x2TNG4xF6vYHo9npxXWMebvyMQBBStkZSo/EIUijkWQ4A+PKXb7x7PB3vH24ZQoJQmaqdz6trA6kklFIwxkI0vZGAmC3N0l/vuaFDaHhBmuHHCLpbuXCYzfL+82dyZwZOs4bIUz9IA455sy42Mc7zqJcImxykm3nxZpPfGAh58lEqHA2DAiFLU9QVR6wIqSGkAAXAeQuVMBArqxLBCywtDdmYhzRe8pKXXg2AvGdpamMuJmLzRkg5e13R/Itn3ONa+wCpBB5//MD9t9122zcgWE4tAhCEgPfsxi2VgLMVS60VIRjBWbfko+O3j+cK2vVtwJOQIjLLs+tSxrlYZsJj5Fp0cA9etMoCKZlVtk0+NlHMAub1scbj+dc9/wqEAKWZad172ml44xu+H8++8moMh0MAwMMPPlLse/jRRwBg+/btOHb0GMqyhFKKo6EcM6UiHjsSLAGujYlzvAJCaQQX4J2HkgreekDw+zO1RTmtkOoMSZZisDxElnZw3333PvzxT/7jDZdeetlFUcPL6+Xj/Sz+88CDD+Gi8y+EkgJlWSHL0uRnP/Az//JjH/v7rz708IM3dzpdlNMSACHNMlR1hV6/h6qoUJQFiAi9Xh9FUUawyiMbVVmitgbkHDrdDme2lzUosvfwfA5A+Bhxp0BCwhsLpTRIcuPBVBbeAWVZQWkR33MNgoSJubevec2rX3PhBeefU9Ul4CXn9wqOtmK1DytvKHiomDUPALfdfjtKW2PfI/se+txnPv+xvXtPf/yhhx5EmiYtcPfewRtuhpZFhbyTxQbeENMxx+INlgaojlQ8j7yo/1dFRL1tO3dc+oNv/8HrPvyRv7n60mdccvG21W3b8zRRT/Irhz/y8Y984opnPuvPb77l618NIRxdrOKiFrWoRS3qKQGvtRZSK5bJycDGPoI3rN4HWOGRZQm8cajqGlmeQSuNuqxQk4MPBVxl0VsZQGtmBfJOjuB5M9dNUvQ6fXT6HRQTbsjWpoSpK6hE4dChg1g7voZONx9edvlll1/3/Ouue+7zn3fNOeefc/7ePadsF/Ngs3UA5S49SQER5YDNLB6bW82DlpmM0Uc6VhA2x0iEmYGPx8ztlQS1Dstz/5vTQ2LmxBzAUtqACGp9NJbxqOsa49EEK6sr8CA8su8R3HvXPSDFrHY5Lcxd3/rWdDweHd6xfcexB+55cAOgI0ePHXt43+OP3Xv3XXfed/DQgXsOHzm4X6o0shgBw6U+TGJQ1RZKMRg4cuQIpGRWJHjA1gbescOubQ1+KQJcg/XRRpSuJ7DWMDsoAakIrvIQQkGn7Bbb5Lo2jqRCSI4qiVnNSknoVKMua6ysrMAbwvGjx1HZGoP+AI888jDOOf+8y1aXV88dbYywY9t2blpIwez3JnYVWFlZ5TUFkGgNqRRiCg9uuumrXz1++LBZ2boVo/VxdByWUHmKyWgCYyx63S7HvQhEaS8/vvcMeNjl1cYM4HbSmgFmZFW9m80/Yvby/llMbasmOFkQ6LeHyk987ubcprnHFxRlu6Ft+FhrGfxFV1yWQYtoZBQNoaScnd8xd9Q7D2+Bbdu2oa4t6tqBiLC+vo5du3dsf+F1z7s8vqFZwwdAUVZQUvLMZ2gAML/CVlIsCFVRIstyfPjDf3PzwcMH78uzjGfaKcAFzgt2jgFncMyueRtagB/TheDjPYqak4JEO9/bAL1mbhMUmOElEZ3n+fPgmB0WMfPW2hLecf62gOD50jh77IOHThL0B/0tz3zm5c9cX99AmmkET4AE+kt9XPnsKyAFu79XVVFaY8p+t48jhw5jY30EkgKTyYQbR2kG64mN4aSK8XAGWifQgg2inHfwjlUvSmsE52Gsg1DsjN8fLMN7j6IsUFUV0iTFyuoqvnrjjZ/zPrwVRAk1ecXegzxLVQaDAfRBjX379mHPnj0AgPF4ipXV1bN+9md/9ife/ZM/8SNaq7HUCh7M0vrgUZc1qqoCBaCcljC1hdQSKtGoypKjwUggzzSMdagrbrQBgFI6qoS4AWNtNDLTYCAPAikJeA/r2YldgGfMnQ9IpMSWLSsgCKytHcfK6tbz3vGOd74GACbTEr28O7uvR8l/43zvQgA5VivpVEMnCT7xmX889IXPfvG/f/GLn/9Yr9tzdWXhEWBqj2F/CO8dimoKnabYsmUZ3nlMiikOHTzMIwo+YGNtA1oqjmla1D+rtq2sXvT93//G7/qjP/y9a65+7vMvvfCCC09pvmetQ1XWSLNk/s8tAGBjbWPry1/80jfdeuPNlz//Rdd97b/96Z9+/ec+8HP/55HHH3twsaqLWtSiFrWokwJepZjdTdMUWZajKAv4ANi6Zolz3BCbCBjKaYk0zdHp9KIRVYVOt4fJdAKShMFwiBAcinKKXq+HsijgUwuzXsP7AFNVWFtbw+q2AfrLg1Oec81zrnzWpZdfc/HFF1571dVXXzDo9bvzL5Dl1gRq0pPAH0/LAloqCKE3QQhrLIz3yPIUtWFX4EAs0dZKok2YmVeHkmgdb5s4lfYPbJhtsts4GpyQQBNmDrnWe4zHY5i6ZjdSD1gH3PfgA/jUZz+DRx/dh/F4EgSFtU63Ww4Hw8Ias6/bze944IH777j3nnsfPHL40KMPPfLQQ0ePHhk1T5FlXfS6fZAQqMsSUsvWsVQnGs5YeO+QZBnK6RTWjqEVg0TnDDM8tYFzzJIkSiNNNbzn91dXJspZA5IswbSawluPXn+AqioQgkei0wgGgTzLYWwNUxn0en2EQNGEbAKtJabTAkJIKCfR7w4wHPYhE4nvefUrrx4Mh1vW1jawa8sQk6JAKhIGsrEh0ay99x6dTgYASJMsStaBw4ePjb75zW/eoJIkuj8b2OAA+Oh2m0J4E9nJwBJbIaC1RF3X8TgKKMHzgw4BSZoieI+6NlHWTG18yWwg9J+Ebk8OiP85UuY4x9xq8+fA76aAorgercEWRXOswECQI2l4HQkUM5R928xhGa1s2TDrLMoqQJICZEBtDKrKIE1zyEQCCNiza9eF3rrTAUA2MUgigtA4q9w0poTgV+u8g7cBKmHzozTLIITAP/7jJ250tg5JrwdTG5ZjBx8dcPl98SxpI8sNsSUV4mw9tYZUzVrM5p4jKx9BbmP4xBqCOOcv47x44CaY9Y7X2DNDCEFwroa1FlmeQQqN2lg86/LLTz33/HPO/MoNX8azr7wSvX4PR48cw/HRBk4/5TQYY6ABDIYDvWV1y9A6g7KukHXYDEkQYJ2HcRbOctwPm7exq7ggCWcdfLDAnKmWMXV73G1dQ2mB2lSwniXXVVnjSHkQBIkvfO4LX/zyl7/y9Wuuueo5LuYXk5Rto4OIsPfUvThwcD/uu+9e7N17OhACrPX4/re++fU3ff2mb/zu7/7Ob55++pmYFiXqskI372I8mbDbt3XRFZ2N9yaTCUIAskxDCDb/k41Zlea8XRccrDe85vFcUTrhmVvHa19NawhJ0BHcQzPoVVKjk+dw3iNPE1R1ibe//h3f+4yLLrrUWo9erw8tBatrpGjHS0K8PhSxsZbSzA5/9KMf83d9684v3XXH7f97PFk/Oi3GWFragul40ioWvA9QOuV5ZWMw2ZhwU08nKMsJN2GIVQE2gvpFfZtbGxFt37Xz4h/8wbe+6YYbv/zas846+3RfO4hEzhll8nU5Go9Qmxz9fme2H/Ae/+n3fj9cfdWz6aff/4FzhZDn3nPXXa/+0R//0St27Nz5gQP799+/WOVFLWpRi1rUEwAviciYSglrbJzpS6E7XQ7u8Q7T6YSlzVIxCCaOmbDWcEddBBTFlJlfpZBlGt4LmJIBx/59B+BDwOq27YOVLauXvPJ7X3n5a1//ysvPOefcy7cubz8rT3NxIjho//jFuUrfON3GTb2ZMyUhEjHiwrdyxaKsoJREkuq4+RZtqovfBGpn7FsTXySI4NGwRLPM1fgnF9Y5CIrusM4B0SlXCsKxIxsYj0Z4bN+j2H/wcdx//0M4evg4pFZ2MOgdPXjg4NqO7Tv2P/LII7fddONN37LOPnzw0IGHvLePPLrvsY2imAIAOp0uVldXsbGxAfaZRjTnISilYY2B8yyPtK5q82kzEuh1OijKgo1jlMTUVtFoSiHRCkVVwFoLB4pyb95sSNJIMominCDLc5AmVFWBOs4XOm8xGtVQSqKoSiB4ZGmOqq6AQKjrCs5ZaKWQKI3hli0YjccAHMpiCqmketWrXnnVsD+ElgkAIM9SPDFqh7FLt9NpP26bDgTcf999j95+2zfvTpSGdxyHQ4pgKzbREcQSTorRU42JE0UjHO8dvHWAjPOxPnBjpJknpNDGDT3BVfmfMsP7/61ha9tRCSduFueujzkH6TkX6dDE1foAIWmO/QwxJzpKt3kQFEqpOGPJBl51XUFqAescpkXJ11icja/qEs+6/LJL9+zZnTdzws1ranJ2A2bS7Wb96rrG8WPHsXV1K3Si2bgIwMb62jcAwDoL7z2yLs9qTkYTQDCA9jEz28dHZizLc/ftrP58o6Sd9W5yeqPpWZDxsHj2LApscuURAO/hvI33tNCCZ60U6sogzTI2MSKBQ4eO4oy9p5+rhMiXlpbR6Xbb+1S3k0W5PKsS6rrSo42NFecddKJR1wZ1ZTFcGmI6nWAyLiAIGA6XIaRAWZYcoVVxswiBIIWCyARMVTPwSxSk1CwNDx5aSZiCFRfOWB4/yRMcPLD/kQ/91Yc+dc01Vz1nppJp7mVsepamCXbu3InHH38cPnhkeYbKWCiI5Kfe969++MMf/vCnHnnkkVv3nLIHE+dnOWxEyPIUOkswHY9hnYUUCkqrNkqNSEAKQl1Zfp2agbC33AgR8a7mnANIQKYKMjDjnndzBBewUa6jk3bQ6/VRT2s4HzCZTlCXNYSUq2948+teCnCzTmuJsiqQ5BoCs5GENhIrNgaNqfAHH/xDGFsdL0fll8fro28tDYcwNsA5HgUZDpY4Ik8BzjpIkthY3+AVNIDONFSSgBSPhghJILtwaf52tby69ZJ3v+dfvuGH3/nON5533rmnAkAxmcIYh77qRYO7OFqkBZaXl9jcLP4j4kjS933f99HK1hVopTGdTvHN229P3/NT7339YHlwF4B/vVjpRS1qUYta1BMAb/CNYyY7PyU6ZdmcM1jesgQC4dix41gaDiGIUJQViqqEjsCB4gTk0lIfqcqwMR5jOh2hmEwBQJ1z9jmnXXHFFZc9/wXPu/r5173g2aecsvfi3Tu39098Id6HNj4inLj7F4BoslADUNUGWZIi0RpN+oiMbqxSJjxG62aZpA0rMsvcDK0ME2EGdilu5lplbTR7Ys+hGJUCAe/ZyZUkRTflCR649wEEBNxz7wP285/7oh30u0mSJiLv5MeH/e6ja/8Pe+8dp9lZl41fdzvlKdN2draXbHqFFFJJIPReg5QAglIFlaYC0rFQFAQVAVEECSrwCkaQhABBSSCQnmyy2U2yvU6fp51yt98f3/ucmU1B3ven7+dF5vYju9mdnec85znnzH19r7bQu2f3rl0333H77Xce2L///snpqX0Ay4zW8N5BRdTHOTQyDKMN4Bi0NojjGFobFEWGKI4AMBTaIFIq+HANpCTfauXD9c6BeY6yKIEyyEo9fbZGF4BjARiF9NYAConJpaqNfq8HwQUxq46AoUpU8POSxLXdHka/14cBhRvlWY7CaAwPDUEqiTzPsWLFGHrdHnbevxvjE2PHjrZHTwEAJSupGq+B3VJ/9EOJfytmav/+AzvmF+aPrBgfh7MOeZYj61MgVqQEHaMl2Wpe6lCVRZ+jEJykvow84NU5sMYGkLRI4XPOIZiAdXYRYD4Q/PqHAcPsvwD4LkG/1XEe5SWuK5FYUPNWx+7hOKXd8tCB6kHS+ip4zhoHLkkCnBUDJEkKJQXKwqM/6BEo4Qm4VHTOyhJxFOOJj3/CmSQT50Eavgh4idCzi2Ff4TwmcYIVK8aDt4D+7J67tx/Zed+ug7FqQAiJPCvANQVmgXk46yG5gHaGZMeVXSEAcGtdfV7qh4B/4DkPsDtI2IXgMF4vJnE7R8BLUDdw1evrQ3yagCIAGSkAwT/sDIbGWqcODQ3hwgvPR9X5PDY2il279uCuw9tx6qknAQCGh4fiiy684JhvfONKREkEyQWSVox+rwtrLeI4grWUziwZ3f9Fngewi+DpBbgP16h1cKUGYxTGplSEZrOFLMtgysAwcoFerw8wjjtvv/V7+/bsftWGTZtXVYFu9Hz1IYyJpMobN2wEQOnrMkirN2xcd9wff/TDb3vZ5S9/7SDP+2WRoSzpXEgRA96h0+0CnpKWQdZiFJrSmKWQGGS9wLb60FUbk+c3z6j6SkhoXcJzC2bpWIzXMFqDgaPZaBEIzQroUoNzjlXj4+jrPi598tMeffIJJ51z7/07se3uuzAxNo4TTz4BcTN+0Mxoabr6fffuxP337nXnnHXmjq/90/+6fm6+UzaaCT074hiwgDMGxmlIxlHkAyQpdR0vzC8gThmcN5QkziVcacGZPNr2sLyOWlEcr3/5S1/2iu9f893LzzzzEScB1OduS4MkSZA26Rnm6p8D9Kyme3bpk5Cm1Mds2UR7Bu+Qpikue94LICTHcHPkUsbYn3vvZ5fP+vJaXstreS2vowBvlMRIRQNFlkMpBiUE8oL4lDwvAU99kYPBAGmaQgiBViMNfboJGs0GFhYWMDU5VW1+4lMfeepJl176uEsuOPv8J1386EsetWbt6lUPxWAVJclolZTBd+fBvECdOIUlIUHgNSBRQsLB1hvXGjBx2ly50Bdcg1W2KEIOUUT1HhnsgaCKGGBe1b8E2SYXHL1+H1YTQ+O9x51b7wRnwh7af9Dt3btHz83PT+7fe+DwyaecXBRlkc9Mzx0+tGv3bbfccuNNe3bvuefwkUPTMlIQTCBOY+hSI1VRkK9yOE8bfWcdJd9qwFpNFUIApREbC+c0HBgiRcE+zltkeU4b5iKHsx5RksCUJYzTgd1mMKUO0mPySxpDXchKygCyffB+knydcyAvM/J1egsH8oFqa9FsJCiLAp4DSRRh0B8gbSSAZpAqglQR0jhGo5EgGxTQ2uD0M04/c2JiYvWDmMmlXms8vHqYhe7Mn9740+sAYl+MMWEQ4KFNCWsctLckKeccUkkYYyFAwWWV9JCkuLx+UfJruyCFrRPPAtP/kBh0yeW5GHpWh6Y9TCfvEh38g9/pQ7HHrAIoHswefbGyejhDQUAs9Mhat6RT2FvkeQYloxBeRey35BwyIh+oLjW8cyhKjWarjTIrwAUjwOEZ4jgFnMfI0MjI6MjYaQDV9yglj6q5BSjQiQvaqFoHlGWGOEkQxxGpCix5M0tTzjvuu8Mjw5BKoMhyFFlRhytJKRHHKXSvCxZ6oa22MN7UclUG1NVf1TmrVBos0JEOLozkbPD+UpgV44xAtPXwjAPMUSASC2DeIwA2hkG/gPcORmtMrFmTPubxTzj78MwRrF6xCt6QxQIARodHsGpiApwz9HoZ1qxdg2c/55kbv/lv/8bSRuLBKAyu1+tRJY9kwatoUaA4SsZNvdYEIKGBWMVgwkBwBeeorzYveugOekiiGJJzZFkGzxRUHGFkeBh33nbnrf/xg+tuu/xXNz+5et5ZR+FNdYVbqBw6eOQwDuzZi3POORs2iFte+qIXv+A711xz/d//7ef/asuWY5HlOZ1T42CcQ6PRgjPEXvfKLiXzS0XBZ9aAMQGqbHeh15lS3H3oYSafrgS8gxQCztP9bI0BEwJK0vCtKHK028OIpESnswAWifZb3vQ7Lx0fW5F2ul2cdOKJ8M5hZGwMFBjOjgpwq+5vALh76zacdvopU9f/5IZ/3X/wwK3toRYGeR+pamDQ79Gz10dYtXoV5ubmyNOr6bxHKgK8w2DQB+cC2pQAY4jiGEwvA94HLiFl44UvevFz/vXKf33deec+6tEjo6PMa6oqy7IBVBTBc1//jK66mQHUtWTWOZRFgThOgjIlCK9cUKtwYoMBYM3aDceeesppmwEsA97ltbyW1/JaXkcD3qHhITjj0Ov2iG1jBh5Ao9Gog6eSNEVZFMiLHFwIREKCS6Db7WBqahLDw6NDlz7ucY+88IILH/OEJz7u0jPPOuvM4dbwSPUi8/MdeA+Mjg7B2ZATzBmk4DVgFUzA80p+6sOGtQJCQYIcwnWYZIub/woULAEIzAPwrE7+9VVVEao/C/JoPLhtxoVdc9Wt66kvFP1BhoP7D6KRNmCdxZ59ewfbtt1zeHpyeu/czPzeffv33L9/7/7t+/YfOHDPvXf35+Y7/e3bth+xzi4ggIyRkVHq09QangEGOkjJHWxpwCQx3K1WG/1BH94S0DeW3keeF4F5JCDc15p8jYKBMREShSkpVwgBHwtKGQVtMmAdVSUBocPUw5Ya3jhEiYIFSXshGJ1/xhDFlFILQ2m/1lJnqTEaWlOljXEaTDCqMwJDp7OARtpANsgx3+1iy7Fb0O3P47zzLriEgWH33j3YtGHTg1W77GdYZcOG/eCBw91/u/rbP262hpA2UvR6A0RxhCROML+wACUldGmQpim00cTuhevDGFNLeIsir6W6LOBea7GoAkDVcbvoeXxInMoWQ6nwgHCVo0Dvg9he9vDv8wH/XYVQVVZixpYyvazugq52ihyCpNoekEoBxsGYEh4egpGkmIOh1JQczhiHLiktveRAs91CWWpYD0qmVTGmp6exYfO6LavXrNmQZzkcQOFUDxhSCCnrc0VWznAeBQuduPR33U6n351fKBa6HSSNFIJzWDA0Gi2UZY5Ca+jSwDsLDkkBeo4qzuqAunB/V+nsHlS5dNR9XQN/R6x/GAp45+E5sUrC+Xoz7byHNVS/E6X0DPQeUDyCdQaxUhvPOP3001etoBmer4djQLPVoj5v7yEFR7/Xw2233TakdeGdb6Lf7YHzPuIoRq/fB2OgrtlwHzsX7BShr9lbh0hK8t7WShySWFtrIBkLadwMxhq0WkOhbxaIpMTk5JH52++47duX46VP5oz8j2BLmTTUFUIjw8NYaDWwe9dubNi0GdoYCCmjD77vfb99/7333nHvPTuuHxsdw/TsDGA9+lmGVatXAdZhcnKSuoyVgLcu+HGBOIpJni3Ir1sUBT2Lg3dX2xJSCHCmUBZl/XVgITzRe0RRhGZzqGaw5zsLePJTnnrpxRdd/AwA2LJpc32r2CWKg7p3PXSKA8C3/u076PR7uPP2rTd+5tN/9b+Gh0eyVtoAhIdSEi7Ilx08up0u+v0BWs02yqLAYNAjcA5gqDUEB6C30KGgQ0dBa8urvufE6MqV53/iL/7ytW983Wuf3+v2G3mWQxcaKlI4ePAIjC2xceOG4Ndf+vO+6hCn/AQaTvFakVXZJFx4/jnPQzo/cOnjH7P+vHPOOw/ALcufwvJaXstreS2vowDvwtwcypJ8md57yEiAGQ8pBEpDiaHDw0PodnuAIy/W9NQUvPc4ZssxJ77gVy571nOe+7ynnHPW2Y9SUtVSZWdpgyYEh9ZFzc45uJCUSqAsKwpYa5HGaWDZAkhdWuHij3ZSsgDq/AP1pEtSiAMUqP/M1TLmUH3jHawhSTaXEtYQ6yPChrFmHTnDwQOHMd/p2Jnp6cOHDx6656Zbbt66deud91lj7jt46ODOfn8weeTQkW6SJtY5g7vvuRMTK9dgqD2E+flZjIyMkvyP9nLgnKMsS7SH2xj0+uBgELFEaSgwqdvpUvBNFFEwWFmGWiUf6lhC5YZ3IXCLgwUZKKq+TWNgnUUcxRCcY9DP4JmDYPTaUimqRjGWjicvQzWPgKjSbq1HnEQoizJ0HTMoJWljyQTSOIKMJKQSGPT6sNZiYtUEms0Gsn6O4eFheMYwOz2D+dmFlRddcOF59EmJRWDIjvr4Hh7whr+4f+fOnbv37N7GwFDkBaTgKPIyyNRRJ9tKHiOKFs+DtzZIVuk8sqVhR0EJUPlb6+Ajthi+5B+qh/dnkToPTDZ7kMT5gclpSwB0dW27B24kcbR/NzAjlWyTiF6LKIrAGQFaH6pvmCD1htEapbGIkjhUZlkIwcMgCsizDBx0bbRazTrcanruMB79mPOPO+nkk1ZUzMtD4fla4hzuuzRJ6r+XQWoe/n1PO1M4b6G1hpQCTHhoUwSJuUZhDFioUSrK4igvvguePiECwLVVuVglSabBmhISTHCUugxOeE5dr7wK+qL3whmHlALG0WukaQyAY1DkaLWbGB0ZwcF9XWzYtGHzirEVEwyADR+QcyTFds6AeQ5IDsY9Yhnj7HPOg3WOGWv80FAb/d4AxpjQD+7Jf844tC4hA3i1ISAwiiJi0gVt/K0jtY3WBdXtWAMX5M4eHkmSYNDPSLYdvsfffO6vv/XCl/zKr5999rmnW+/AmAggsEqmp27eRpJiw8bN2LF9ByZW52g2mxgUJTZt2Hji+97z3vc99clPf6PVZnvSSBBHDQipMD83CyUiNFtNDAL7K2IFZy2844B3aDSbaDRSdBZ60M4hjhswVoNLjlhGyPO8/lnQbrcwGGSQUiAvczBOvutGmmJ2dgad7gIAxK97w+tfwRliG9h9zoCyLGGdrWvLFq9Buh6nDk3hx/9xA57yjCcP7rp769WA22GtxfTcHKQCBhmxto2kgX5/gOnZPhppA4JzaKthnUcSEcuYFUUYpHCAA8aUNExYXmg3h059y1vf9rLXvP41LxxuNjf/y9e/jrMe9ShMjK/EkcnD6HUHSJspVq9dFZ4Xom5ZqIZL1c9wshtIKEGp737JM5AzgVJTcJsUPCh3OJ713Gde2Eqan+3lfbv8aSyv5bW8ltfyqgGvNRbD7SEUmkJqYpZAKoaiLJBlOdqyhaLIobXGSHsIc91ZnP6IM058wa+88PJXvuJXn79uzdpTFkGuh/WWejarxFYA42PjQRpmYb2h8Ct4cMeRRNESJraqOHkwujgKLzCqHqr9tljMU6l+YFasXNUHyquOVU8hOMZaZFkGpWKkUtZdrc57dOa7GPT6mJ2Ztdrqvf/6r9/66S0333rjIOvdfujQkfsGWfdIr9/LB73MT6xZiUHWh/MaIyPjABMocg1jNTp9jX6eQ/Z7NSvXzwaUSuo0Yq2gVATtS6qGMgbeUTqukhzOajBBPcje+cDGBYlr2JhXabRVDY0QEmD0/sA81buUms5BzbzRcMNoA+cpodgYFtg0wNsqCddRMJkAmkND6Pd6sIENy7MM7aEhxLFCvz8Agkx20O/T5nWoRYFHnGPy8CFsXLvulNNPPfW4LCuwZmLVUQDSe3/U5vRnrZ3377yr31mYi6K05uilkCi1CUwOyZLzLAOT1JvqLW2olIzAwFAUZQ0sGXztf3Vs8do5qn6IPYwhdylm9UtSlB9YXfSQ/5wd/S3qC3cR3LoHYmr/4NeuritWawA9jLZgjFKUOedUycI5HFxITuawltQUUkryqDqgLAtIESFNYvT6PfT7AmvXrsXBg4cAAGc98sxHAUBZashI1ffV0kOqnQIPGGDUI6hQdL13374DDGygVIwojoldCyFwxpgw2KEKKRo8Acy5+joh1t7Buuq6offCOCkNqrNrjAMLYKRKD/YQ4bqztXy9kvh7xsG8Rz7IwaUADwMVLgSYFFi9es0W7xEXxiKSHOBkQSjKElEUEWjWGnGc4K6td+PbV109Za2T3lqdGUvJ9UVeDxmMMYiTmO7H0DltranvD+89jDEAGIUjLQHKpfNQSgV1gsPCwgKssUhSskCMjq7A7NzMff/yrSv/+eyzzz1dCVX71qtBCWeLwWOtVgtnnX0WOr0uet0+ojiBthZPfMITnvDBD77vbR/56Id+p9FI5jvdPuI4gS41etkAjTRFI23AGI1+dwAmUNdgeUOgxQOIkhhJGqHbzZEN+jRkCTLWOEmgjUZRFmA8QRwlAGMo8hKTU1NI0wR5WeIJT3rCs5/59Kc/vrqDeHi+SyUQMfVwczJ4Djz5qU/Cv//wP378xS996crh4VFEcQxelAAsjLOIVIw8L8L5lRBSQGuLWFH3fJYN4Gw1FGOh05sSw51bDq26+HGPe+q11/7gnavXTTx6cnISul/gvHPPx1y3gx337sDpp5+OTSvGyQcuZf3U8J4G5JX0nC2S5fktt9x+6Iffu1Y+/klPHD/tEaemlQ9da41BkaOtWvDehxBLiemZae0FlqcPy2t5La/ltbyOBrxRnCBttuGzDB4eeV6AAzDeYu36tTC6xPzcHJrtNg4c2o/nv+CyE7/2la9+AsCT5xcWsPWuu7Fx3QZK9eWAVJT4S9PaRfkhD/23iovA8AQmplKgeb8kdOfBzJdnde3nInjz7OgvP0oS62vXrg+vXRYlykIjihWEFBgeGq6/uiwLv+P++2b27dl7ZGZydv+e3TvvuufeHXfs27vvngMHDt134OCBmSzrY+XKVRgfH4cPKaeDXg+9Xh9pM0Z/kKHRbCJpROh1u5AqQpIm6PS6gLdQKiGJFgBjNaZnZ6CkIp9onsFbi7TZJpaZg9giT87DygtpgnzLewcODu8pnIsLkhM6S7JPISWYQ133IaSAs+TTVZLAinEGXHAIyVFqF0Cbo/qY4LMjKSVJ3jkXaA01UAwG0KYEkwwLnQV475GmTeiihLdAv5eh1+2h3R5Gd24B0zOT+O3ffONjxidWDhlnwdzR4JCxn7/1566777pTCoWhoTYGgwEajRRGaxSGkqSdtQR+ogjOuRAuQ8FTXAi6JowLgIpwJg9wrAKQddVO5e+tan8egph90ETGP8SXPHB+4x+8Ia8obo9FsM2WaqSDP7WytjPGICQxYMSoVZ24HN4R2+kZD8MkCkFynmG4NYxc58izHFKQjNNyAc45BaRZg9mFOTSbTaxeuxa93gBHjkxixYrRxrOf+6xz88EAs7Pzfs26tWxRSfHA9/Lg//aVSiOcp6u++c3dg8HAj69cCW0N+roful6pMzVJE5iSEn5d8CiDcVh4QIRBhjHwcIuefM/gbRVC54PVgYAXOAv+zCDkDf29kVIAByV3Ww8Whh3Uc8shuEBZahw+fASRinHJoy8+K5YKsRQh6IxBcIFGkgIc1DXOqHN2z56d9qc33tCbmFit8kFfe+/R6S6EqjC6V7UxyOZzxEkEwYmJJiabpOZSUVgWZ6AO3aBQccE76i15HMEZPBNIkiiA6ARxFGNiYi3++Z+vvPJFL3jJS045+ZTjETrMKxe0x+I16xkNMPK8RLPRII+xsygKi3e88x2/euttt2796le/+olN6zdiUPTRHGpA5gLaWHQ6C0ijiOrSjEaapDBGo7QavX6PBqAgJtU5ApEyjsA4R5ZnsI5SktMAnIuC/NRp2oBQCo1GApWq4d/+rd98mWB8yFgHwUlO7EHDwMVrbXHYCTAszM2jMDkuvPi8/p/+2Ue+MHX40N6JiVUo8wKCcWjnMdIagRACc/kChBSwLlTaOYdSl2g2GzBaIzckvXaeNAYA9Vc7+8uLsRhj4oWXv/gVX/j8372jzIpj77/vPpx8womwFpicnQNnDI+5+JIAcumJYa1BqUukSQrOPNiSz+/g4SM7rv/RDVf+6CfXf/PK//WNHTvvv/f8L6//8kdOe8SpxzlG6o0okpCqBcY4ytAfDwD/8e//MdXv95enD8treS2v5bW8jga8jHHMzc5BSIEkjpHlOWIVI5EKpizQ7XZRBAkXABw5NH3eF//uSxecdtop6A8GfmhoiAlBlRQ+7MoZaY7qPj2/ZBNiDXlKyatVl68SPOWoTZ1LyK4lia9B6Oz5EgzhjyLHWNhcV76tJblU6HcGsMZAMKDX60OXVh86cGj/rTfddPf2Hdt/tGf/7lvv2b5979T0zOGFzuzMirEV6Mx2MbF6AuvWrsMgG0BwqqgY9AeQSqLb6YSwFQ6tgG6XNnRCSiRxDG00mo0meShD7YaxtpaSEuPCAzAj+TcXHEZrCBGHkChdSy5daSCFgLe0ERZCwFgLZgm9CanAg2TR10Ffnmp4SGUI66vAL0BwgX6vX7NGzlE9D2cSzWYTeZahtBreWMRxjKzfBxjQbLVhCoPh9gj6/R6sNtBaY9PmYyC4RJ5n1Ofb62DlxHjr0ic+7jEAkGc50jR9iG7bh4e8FK4lUJaluemmn97RbDXRbDaQFwWsdiFkK/SuguSpgnFwwVAYA6kUOPMoy4Ik4IyDQcB7eq9au/o680s2zdWvVUURr2TOSxldv+gtWwxGYw8LiCs1w8MlOLOlU5ujbgIa+BADQhv9ihWpwlsIqwXmiZGSgfbhNHCSXGKQ0XXbbDQBRuFT5NV3GOgCYyvGYDUNTcq8wMz0NACDkZHRdRs2bjw5aTQwJiQD+88+tYdCv76eSp148ql7rfsHCjICJ6BuCfR4Y6E9KOhIyLpf2zoHBkvv29G5ItBPqco2DDuqIVuVss7Cs8h6CxEkkqXRdfUPBwOXApAeuqRgLQiqMmpGKclYswHOfdS5K5/ylKeclsYxef0FdfiCA3Oz8xj0BojTCEkjxuzcHJ7wpKeId8x3Rj/5yT8XWdbH/n0H4AwghYQuSLrNOUOj0QDnDEVRQHCBVtqEsQaF1uFeDNJ6waGUhDYGVpewDIhUjEQ0oE0BwEGHAY/gAt1eB63mEO66/c5br/zGN75+ysmn/C7j4qggNlYpX+qMA2Dl2FidXG5LW9mu1R+87w/eun3rtq2HJg98T6UpjDdI0hixAwaDPgbZAEpFdb+u9WG4Zcl6IaQA4wKmpFAq5yysNogVBV1B8PBsdGgPtenZ1O+i0Wpi+sgUzrvgvMc84ylPuxgABBjyosTcwjyG2+3FCrMlfvtudwFHDhzBd77/XRy75Rhc+bV/+c5V377qWxMrV8MZCl0rSw1jqLO7zDX1t5eaBiqhD1qFui3GBQX4OQtnsERZQQOaX8Y1OrLi5I985KNveNaznvHi/ft2jbWaYzjzjEfin7/+NTRaQ3j8E5+EFaMjNGxd8tBzqKrGGBgX0F53b7z5xhu/+Pkrvv69a675l3t37Nj3guc9Gx//8EfwxCc//sDjHnfpWPX55oVGJEWw5DjEUkGFOOdLH3epXt7WLa/ltbyW1/J6MMOrIlhB9TZFXiCJg7fPO3Q7PeQ5dTzmeY44SbYcOnjwSXPzC0PHbNmCRrPBoiha3JcvJcGWMLPV3j3XBboLXcRRjKF2+6geXM+q2gHqBfZLTJ0PUHseVS9USZYdyHNKYIZBPGAnPj15BIpJHJ48ov/yr752/fTszPemJ2fuAtje22+/Zc/c3Nz0QqeDFSvGQ32LQp7nkLFAt9cjgOE9tLMYZH0YZ5EgRtpoAAzkkbXUW0xSNyDLcuTlAGnaADx5IRmjyg7LyIeo4giMMZR5DhEqQUQkIRCSTn0I2eKC2DjjKOk0bLYqeTNC4Jf3xHiRDLL6LHwtv6tkkVVCs/eOjplxWEeAwBoLxqgiRaoI0lqSe8KBMYkkTeA9MOgPkM/maLfasNoEuXAOFUnEjRjdhQ5GxkYx2h4+Lk1aJwGUNivqwKF6ZAH/APq0DhGzDt1Oz7fbLabLcr/3brvgEjPTMxBSoiwLOHikcQrnHf23JamnsSZ4kUnGKYSovbrEHC6C1MVOWV/7OyuP9CJYxZJEZwK7tZS40h979mDWt7oBQj/uf7p+Bou8lGl2SwBd5U0m2S4xTiJch8zT/cyYhbWuBs0cHErRdR7FMbigMCvHqB/zyOFJjIwNY3ZuCq2h1ilRHK0EABXqwNj/RjAtQ3jvnKHb7WZ33HH7vYpH0FqDK4lYKRRFEbx4gTHzhnzJztWf4aJyIwQwObJRVGKReqBQwTnGjhpAMBJM1MdurA6fCYNUMtgwqPYojhKsGF+BQwcOYWh4CFkxGNt5386JE084AdYYkjyHALd7tm3DuvXrMTa+AmVZgPMIkZI4dOBQunv3bjM80g73JK+tB9oY+jyEQ5nrcKxAUZahAtzRgMo6gAFpktbJ1FKS/NuFyixrba36oBoqQJcaLtVYNTHhv/JPX7viaU95xhPOOPOMs4ylKiZgSRDaks+qKDVVvqECeyTZPuGUEzZ86tOf+r3nPe+y+6xxe8A4Ot1+qEiiAR/ngurQPHmsSU1BrxBHDYADeZ7Rs0VKJEmCIi8hhQSHh3cWSsVQlb9XSMRxDM9d8tLLL38eGBv2np6dc7PzSJsJ4jReVEaEDzbL+lhYWMDM7AxGV4xgzep1ez72sT+7wlkza61BZ6EDpRSEkmg0mxj0+6QACZJyLgSUiiCVQpYNkA0GsJaGkpwF5c2SmjD7S8bwxlEcPfoxlz79O9+95vfOPuvM87bdtQ1jo6swPDKMrdvuQpYP8NSnPSOAXfp54owjdQY8lIighMK2e7bd+Y9f+cq/fueaa67Zvn3HjbOTk/0Hvtapp558/KpVq8eqekApSLOc5wWkVHXaOBiwa9fuzvK2bnktr+W1vJbXgwDvIM/ABdVFxAHsWmswGAygdYmxiYnWxRdfdOZIc+TSxzz24qdf9sIXnt2upukIMuOwB+dLwqJqhWf4HwcPJRRWjq8I/5YKJGoW9qgqTU69t3WnxJJwoTrMqtKPEptbAUC+ZOdWbcoHgz527dkNb/z+G37843/41lXfumLfvr13WON9qzWETncBSRxj5cQESeScR7PVCAEzGtIYRFGEotQEEhmBh0HeQ5okUEKh2WhAMIHeoA+jST5rHW2mi5zSrZ3zEBL0+9KBC2IVdVECzkMoYlgFC7VLNoBMziE4oI2hDRcE1Q0JFpJXKXWZCVn3lTpvA5tJ50IIAofWWnAu4eHgHFvsTOXUUQtP/a1RIpHlBYQw4Jz6N72nY88zCqhJGymyPCegrCSk8yiKEsYYtNvUK3pg/xE87TVPe8Spp568VmtXS95DMskiq/kwfCEXHEmSMKkErvzXq27fef/Og8ZoeMaQpAkW8pw2nYIjjRMAHkVO79NZS32/zkFrTWmfnNWyVh5kdN5TuJpzfjHp1fmj7LusBua+ltb/bHR3NHDlIY3cBQDmflZzJ/vZINjX7Dira5QocMtDcAbrQZVDngMhEKYC3FJKOOah8wJKKqgoQhRHUEqBc4b+oF8PkoQSWLliJXr9Hl79mtec30xbMFoDjNfy8J9rEequue9bb79t+933bLtj9dpVOHJkGo12g76EcyRRA2WRASF52AWA7vmiXnzRCkGS5ZBCR+c5VE3VdUXVPwtBN8455HlOCeSB+XfBK+ycgxTkLdRWw1mgN+iDRXTNKyZWnXf+uROLH9OiCmB4ZBitdhOm1IAFooi+z+T0tOj1e3wwGKAockRxAucpYIwCqxiMLmGNBhcKKpKhkog+W60NDSjA6vtOcEHmVUvPbS4EpCT/sJIKvf4AwjMIIdEfEOt66+233vHhj/7J56748hc/LjiLq/NTPR9cNTz0HiqSQT5Pzw9jHYw2UErhoksufuKb3/ym177/D/7gXe3WsIuEgDEGw6MjKLMCYAzWG8zPz0NFCmmDwgjzQYn5hXkwDjQbDXjmkWc58jyD0RZSKTjnEMcJoojk3YJzNFpD2LtnDy549IWPufylL30GQAMAD49GI8XI8NCiPYKB/OoAGBNopk3kRYGRoWH9D//4pX/5/rXXXjPSHobWJSIVoTQaMlYo8hK61FARQ7ffg3cOkimUWodAPAclYgju4BmlfSsloYNFxHsP48pfmk1DI24OP+f5L3jdpz71qd+MIrlu/4GDGB5bgb0H9uDAof244NxzceGFF9G9YR2pvEK/tQgX3O7d++79+Cc+8aXvfe/qr22948673/+e9z7s642Njp1cDRV1aajizGrMzs9hbHQFJKPGh8Egw1e/8rUd73//+5Z3dstreS2v5bW8jga8Qgh4OBhnoKDgrUe304MQvH3xYy55/Ove+PqXPe85z31iIuN2ta1cTDwm3xeWBPVUysX664CaZWGB1aSv40cnMVfsGVsqC/U1c1VJFavgKfLgoQ67YqFeppK0dXodeAsMDw9hdmYeN994692f+fRn/sAZ/VWZRmZ2roPR0VG0WuQ163S7dSKx0RpMNDA8PArnLPqDPrJ8QPtqY2nKLBVcWQAO6PS6YODgXtRpkxbEVEml0EgbtNEuNXVMYpEttNqQ75R55Dqj0ClnA+ByoYaIBQ8iSTZrSbLlR4VYVW2jnvl64w8AkkkooeCEg3UGjNPm32pD/rhmE8aQJDlRCZQKqbacKh9c+LxkpAi0OY8kjZEN+kGOTX7CkZERWOso2EoI6LLEYNDDpo2bzrHGwRoNKRSOmkosQXQPJQZeyiRed92Pbtq7b2/WaDRhjUHe53XFlS418iyvGb4sH9R+3GoYwkDn0jmSkNOl5wOjF1hC72u2ljZqdBBVFXTVzeyDd3BJ8evR4LS6rANAc/XXH/13Dw0QHwY8Pwj8+kXfehh6WE9QmntBYBfkHHAhGCZJ4zDUcZBKBsBMkuFmswEbBihtqTA2OoZ+r4dikKvjjz/xNCAkE3sPwfjDibcfAsCzow5/x/btt+3auWsqSWKoWCAvMsASAK3SxpWSoUM32BM4Fn2SAZzRexfgzNVDCyFpiFFq6hYmMEfHQAMxHoZPFtqWwReLwNYRmDLGII5ixFGEPCuwYnwcWW8BJ51w8sljY2Ot8OCsPwwuJDZs3IgoUnDeIY4j9Lp9TM1OY3ZuZm3WH0ysXLV619j4OHRRoNfvQ8QCSil0Ox2owK57T2qE6vdRnIR0akCKKNgf6FotbQkG0HCMeSRJDGscBr0McRTTcENxCmjzDKNDK/Gtb1355R9d/x/PuvCiS55inQP3DJ6TuoeBfNw+SIsDEQ7jqLYoSWQdUPbW333b63560013XXXVd644+ZQTsLDQRZ5nKEsNLgSpLZoepSlgHYMUCkkjhnMkky9DLZsUCnFCTG6R5xBSQEUR8rKEtQ4qikNQlGm+6bd/+9VpkqygIRj1KadJgsmpaYyOjFBFVjhmxqij/HvXfxetVgvjK1bu+sEP/uPrrUazYz0DmEQU021edZsnUYI4TZAXBYzRMKYEA6vD3Rhj1GDg6edarJIQDEiKh0pR8z99tRqtNS97+eVv+/O//PPXHzx0JNU5hQXeveNOrNuwBo+48MJaXl4NDT1IYcSZRLfbm/r4R//s7z7z15/9mwOH9m4H/uQ/eXQw9bE/+9ipAMjrXd3nIsGa1WtgQsidFBGst9NRmty7vK1bXstreS2v5fUgAi1NYigRQUqJIi9Q5AUe//jHPuJ/fe1rf/mdq676+5dc9qLnVWDXhh/21OUY9ttLwmj80k16SD51OLprtRYY+rA5WUytWgS9gU0DW2QgGeN11RHCJt6D1wJHzxe/PzE9EkmaAh5oRCmu++F1X52ZmfmHw0cmzeHDU9i4eRPKssS+fQfgvYOQErqk/s0kTlBkBRY6C+j3u8jyAYSUcNbCGl+/d8UiFLkhloVzGGdgvSHm1dqQgErS5kGWkbSYA9ZpYtAg4UIdEhcSnhMzmxcZGCfZIg8yXGNsCJEC9Q4GtlFIQT5G78IGn4J3IhUTE+RoCFDqMrBefElYFIMzhqp7DAFvbXXdUesdbTrjOCEWo9RwIRmWGEUOJSWiSCKOI+jSgDFAlwXm5+axdv06bFi/rjU6PHLG1NQ0pBJY6CzQxv0hIo4eEgaHhGEAOHjo0K3t4WG0Wg1Y56m6KVZQSlWIjwBvJfGthieMfGIOgNa2BrusGhR4X4eeVJLWKg14KffMQzczFzz4QpdqnY++9pcCWraEya58wqxiKo8q0/EPD36XhGI98ET5IGXmQpBE1gFOWzhL9wlXIU3YOThHUtMkSuGthS5LeGdhtIV31OGb5RlKZ2Et9RA3mo01XvtNAKCkpHohPLx/1z8kll9Mkr7lp7dsz7J+SBa3sDrcK/AoihwcVH8lI0WDGWPJ9+k8lJCIZFz73p0jBYII9UXWWrq+liQQM87AJQ/p48RyC76EoQ4MkWAcHAztdgtJEgFwyAcZnNaAdzjmmE2nAajTza2hgcfU5DQGWYY4jhFH5Nufmp7Gbbfchl//1VeeesnFjzl2MOjBWYveoE8qEUsebALYrr4vKaCKwRhDgCqw+CRdtqjst5xXI0ELD4tsMIAuCmhThgGmhS41mmkDQnEMjw0hGwwWPv4XH/8sgFwG7781hq6JIOnngkOAgtBmZ+dhCkPnhlP1T1mWUEqNfuRPPvymibWrNx+anISUlCcwMjoMzhglG8cRlFSw1iPrZ9BaBwY3pS5w50ICtUMUxWg0GxgaGUZeFCjLAsZZ5HmG+dlZXP6yy1982XOf96xqAJZlOYoQPthoNuoBGg0M6D4u8gJDw8M46ZSTcd1113/vphtvusEYg36fvMYeDEpK9Lo9Ur4EZYgQHFJICKlgvIdQAnEagUuqhzPOhk70nM6+syjKAlKK//GbhbGh0RPe94EPfPQzf/3Z387yPFVcoNVq4Dvf+x4mVo7jrEc8YtFL7ej/GaOhAmPMXXf9dd999jOfedl7PvCu3yWw+5+vLcefePzjnvCkMwCQVSaOsNDp4J577kZnvgPBRd2B/M0rv7n1nm3b9ixv65bX8lpey2t5PXBJIUjm53OHsshx2umnr/yTP/3Ttz7ijDNeBlCnqdaWuvCC948d5ZM7mogCFu2MIgC+2p9ZM7gMD9BoBnC75D/DJobqkTJoY2G0RqvZovAlDwy1WsQkh7wr5xc7fFvVlBlA2k7dQOc3DPIc4A55v0cTeU+b37woIARDLx8g9jGcddBOQ3KBfFCCCYE4SmDK8FPc0+ZIqRhCKUgmiBFgPhB+FGbjHdFvxhliBpyFD5tyBgPGgt/XEfjinpM30zloA8RJAs45ssEA3lqoKITsMAnBGQFs40KoEpCkCXWWFiVQJdgKkhg6vbipBgssbRyT9895CsUScjHlmUswHiSNIY1WKkWdts7DFhYqUuBcIu9lEExQ52azAS4FGmkTHhyNVqtx5tnnbFo5MQ4hOFrNdh0ohqOuGQ/2UDCYM8Sxwsz09NStN928I88yKEUJukzQ+bLWQWuqjhGCwxlLPq867ZYkdYITKGIhsbcCivC+HuRUf+bC8GCpUdWRcbb2AT/owv/PunqX/JPqmPxSuP9A1vfnoU+DosB5h5BQBSkUrNFwIeApURKcCTpf2sMJHyqKOJSgvysLg16vh9EVIxAFhwBHFCkcmZzCBRee/4iTTz5xQ5iRHdVh+5CH9KChxaK90hqLmdnZ/e2hEWzavAn79x3AYJDBlCVM8OBzztEfDMCFQByn1JEqXBiEIQwpaPhgwufJQF2czpBVoqo38cbVzx1K8XYofQnvKNiNS/LU2jAM8t4jFU3k+aD2vu/fvw8MSDes33gMANpge8BzBus8mq0m4iSmflvOcejwYdy/6z7cv2snNm3ctHF4aGRzlg1Az1MgjiQG/QG0NnDOQTCSc1tPbDFAtUu6LOm+k4IsHoGBJS86RxQLWEfgloEjiilwaZAPgj2FoygNpOKYnDqMuNHE1/7xG9f8r5d849+e/8znPK+6hqMoqu88bTQ4ODhjaLWaIYyQsqF7/YXQbx3huGOPO+fVr/6117zrHe98J1atpqFaUVKAHiflincekguAU+qxZx4y4kDhIZkAFxLGWDDOECkJo4m1ljJCGsWYnp7Euk0bjn3/+z/4WwCUDdPTNE2DrJmh1WjUPlrnXA1+O50e1q1dj9179tz3+S9+8e+Ns3nSTKGMRb8/QL/I0EhisIIjSWIIwZFlGbytZN0KDSkB55DlGXW0C0GVekFamyRJ7ff+nx4LfNIpJ53+/f+49k8f+chHPnH3/ffhyKEZpM0mvv/v38Vxxx+PM844lZ6R2oLJkBchaaR9cP+hXR/9049+8u+v+OKXpyenJ/93Xvfi8y844fRTTtkAEJOe9QeABcZGxxCnZFeB84AArr7q6n/Ns35veVu3vJbX8lpey+uBizfTNsZXrECeZ3DOsYXp6TPe8XvvOPvaa39Yb1aVkuCCQXBGks8lO9mlvBR5mcxiCEpgz6wzIXhlySb/KEaY/tyWJAsrshL//oMfFl//xtc7//gP/9j/9Gc+W04emcTYijEkjQQ1yl0KFkIIUtVpShJSWnv37ju0876de9pDTYyNjmFsZJQCpLiH0SW0sbDOwRqSIQvFyavlLZIkhuQS83PzKIsCSkWoYrKycgDryuAhppAZU2qUpoSlGC0IKeu6G2tM3YNJfbmoQair2fPQrQmPsshRZFktzSythmcWjFcpXgywqL14WmsCfix8TqGWByAPL+ckSvSkjIap2JCyIP+ilAQ4GIeMREhGLqC1AecCcRJDSQVtSsRxhHyQw1oK2YpS8n9PT8/AM0AohdtuuxllmbXWb1g7Qv5gktFWQWNLARFtkO0DkOMieLpr27Y7J6cm97kQ2tUepmGHMcRSihBuE8s4bM9p+JGmKaQQsNYEGfyivL5id+naIUbbBeZp6bEtetQXJeQPZHEfdMD+IWjPJSCeC76YGL00NYg9DFXqSTGxmIlFfyEYh4okgUFHib7G6SC1lBCCw5QOzhh4b1GYAtYTSJRCQYgIQ0PD2LhxE+I0xtzCPFqtNtKkgV5/AG0LPPaxj7lg46aNI6XW6A16FCbE2FHKjeqYjvpcseiDrg67s9DZv2ffnnuHR4aQZSWKrEAax2Agj7rWBuAB3BlHad+xRLvdgmce2pQwVtN1HT4PG5hSqhHiwYPt4IPkdKmnVwhBTC5j4X5gkFIhjlIIzmGNQbfTQVlqDA0NY+269fDO49hjj11zwUWP3oIAuBkjUI3gSRXgNbsYxwlWrV6DtWvXoz00zI474biVFFQlkCbkM48i8kyTFJdSpuOYvKvGGOqtjWIaNAIhdIy+nofLxBiqUnLWUXK7B5JGgjRJ4Y0NydYEhpn1GB4dgozi3h+9/4Of7fa6h+NYIVIEdvOyRJEXMCU9ubiggQf13Fpo79AaGkGz1UQZntNvffObfu0xlz7mKdMz02imDWhtMbFyJeLwPRmntPAojgjIe2KOraPEbSkpTdo7FwZ7BdI0QbvdgGMO1lk85/nPe8mxxxxzundkN+CChgFScooq9MSye4cwqOOAAxpJgjRt4M8/8akv3nn7bT9uNNtwHoijBMNDwxCMod8bwHsalpWlpmeIiuAsMeZlUUAbTWoeEYExAV0a+jNQbzIc1TyVRfE/dpNw8eMuecZ3r/3+3z7ykY98YjHIsG71Gnz+C3+LD/3Jh3D+BefjGU9/OtI0JQVJeDZyQUPN6667/tsveenlv/7xj3/sz/53wS4ApCo6jjMqWM4GGbr9HpI0wcSq1XUwoVIK2++59/4bb77pW8tbuuW1vJbX8lpeD7XkxOpxRFEcv/jyF5149TevHs3LwQXHnrB5XZKqGkxSUO1iIFUFboGjhagOHsY66tWr/oYx2JKYDBYRKOIBNDhnkA8KTM/M4Cc/+SmOHJ7Cueedh/HxMfz4xz/ub1i7rnvaKaePTEysTo47ZguUlNBao9Vo0mZzSYdrJUHVWmPnrvuxZtVqDA2PAAB27du16/DhI4e9s1i9ZgiMl1BFBCUEeqZPclyjwZmAKTWBVcaRlwaKezgL6nKFRl4Q86RkBBmqW7xxiJIIxmh4mBDWRd/DGgfOBLy3EEyAycUqIg7AGB3CdeicUW8og5QSxoTzBgYmQoKwEPDOw1i9KI/lFDRlrAX3dKycEUvpLW2muZIUguUdpKTP1jsHzwEVRcRa6xIigGIXvGvOOjBGfsMyL2C0QdJIkKQxikJDxQJRpDAY9BHJBPAevW4PVjsIJrBly5YNcaxSAHDWw8OSHJMd1UAbinOqOLJF2Xv1BT/5yU/vnF9YyFvNJvn7AvvCOEOcJLWv2bnF7+i8Q1EU9fCDc1ZLKau0ZVd7eRflyYuVRJRwXTG/3vuHpzQfqPFlDw10j2Kjfk5P70PJq6tUUuc9VVKBPnfJGElhObF/8JQyzZmAZx5KcQKHXoDHHGVRotPtAYwhVgr9XhdZlCOKEgp18hArx1Y+EiCFQjW8wUPg+Qcy9LU1AaR2YAL41yv/9c6bbrzxns1bNmNhbg7OOJQokTRTSBehLDR5SEMXcmlKSB/BVN5wFq7PcLKUiknG64hZ9BWru6SHtQa81ZQtpAa74HuvLAHOesRRSsM3Z5FnJZQk6eoJx5986roN6zZUczxWBxU4qkvilNxrjcHE+EqkcQP33LUdq9dO+LXr1goAiJQEFwJFVsJYByk5WkkbvV6XEuGFqL3ZdP9aCC6gtabhjrWwhsLX6FqknmDGOLSx8N5AgmTZ4AxxpChleJCTUqMssGJsFLfcfMvVV/zdl/7+dW98/e90FnqIUwUeGOYo9AHXOQ2eauAYOKSsppTUTZvE6aoPfvAP3vKc5zxnm4XfM7ZiCBwcw+1hWGuR5wWEkBQIZg2iKKYk/cDCDnp9NIeGwESMNErhLKBkhEhF6A/mcOJppzz6db/+qhcBoSN4iXS5vh/Y4vCq8hjPzM7gnm07sHPP7pu+873vfIWFOqfefA9ccqSNBEkUI7MOcaJgDT0nVAhtjJSiSqWQbi6VgtEanEtESqDUBZgAtC6opsjStfo/bTHG5DOf+exX/OB7P3i/YHytd8DBQ4dw9x1b8cIX/QrWbdqIE447HtUQyDuEMDuGbr93+EMf+uNPfuyjH/vzLM96/4evz/7gfX9wJgDoggZdd22/C8duOh4bN66H0QZxHAMAPvHJT15519Y7ty9v6ZbX8lpey2t5PSTgXTOxCo1WY+zMR5z56LmpufEzzj7zsS/+lV8ZTlLagHDB4byFY/4B9R7sqA29C7QtAZFQ98EYBBOQUtWBMZ1OFzMz01izbo3fvn0727VzJw7sOVTMzs/Mbti8gTtnWp1u9/Alj3309c76mz/96b82hc4ve9Sjzr50PB1HVUnBsSiBXpRKA956rByfQLPZQpZl6HUGuPOOrbf3Bv25RpLAWYe9e/ZifOUKDAYZwDh0WWCQD+j9hr5bxgV6eQEfERvrvIMQ5K2DIybBOwKnxlj4gvpzpZB1iBI8iE1jCNJFSb25RsNYktt672q/Kee+lidTBQNJHTlbusFXsNrCeBNCkAycZaGKSQT2nMF6V8uEPQAXKo4IuFDljocDLL2WjBREtXHkoq7lcd5CKgELh0bagFUGRZlhLs/RbLRR5AVVLrkS1ho0Gm2MtNsAGIbHh3HsSSecLIgWh7EGZanRaDWPxoWMZKKL3mI8SB48OT15J721qjqEwLvRHoxbWFsFgnEwIeoBAgLQFaA+V+sdbZyXgMhaJssYgsK5fu0lLdEPjUfZg1Dfz97EhXvHBeDLwB4EjPGQcHJJPdeSe4/Stv3iIIlxxHEMYw2MKSGEoA5MxiAU3cvWeQyNDCNNEsyXc3DO4MjhSchIoD0yhFjFMEaj1Axbthy3+ayzzz4JAKRSVBGDxeA6j0Wy2zoPbSxiJWrVBq+HBQ6AwM49O+/mgi3MzsxAlxZCcmijwTxHnEQwRQlvLKwhtp8LCW0tTEbeXu9Imi+FgPUexpBdwLPQw2ypbokxBiYq37+FCOncDIA3JgRfERiumFkfUqy995BOII4jZHkOoRS2HL/5kYNBtzUyOkQSY0/5BAhMsbGhHzuAa5VESFtNfOazfz37g+9fOwlwFKUGYBGpKATNEdDiLPRlCx6GXuTZdZWCxvtwXEG17lmonOJw3kEJAefoGWG1ga3evy2hnYa1VDc2eWQGmzZvQDNt4z3v/cAXn/P85z1t9ZpVp+alRqwUoIhJtqHuikKmNEqr0UgTepqECaMIfb4XX/ToJ77z997+m+95z3vfsX79Oj0zN42JlasQRxF6vR4El+ACGBkZAcCw0OnBOo9WsxW84B69Xh99DBCHVGd4hiwvRj7yxx95w2mnnHYKQgI5Qqd73Zdd37/h+ucMzlkMD41gZGTY//BLP/zB1OSh7cMjw/DOQioOzgUGvQGSOIaUHHlB3dyeeRhdoCxo2EDscXifhj4LZzUECwnZgQWnZHdbg/H/QWA3esKTnvKqv/v8F94lGF+z454d3ljNvn/t97CwMIe3v/33SaUUngXUiU3n4IfXX//vv/mG3/jQbbfdftUffvAP/4+P4axHPuK0l1z+kosAwDEGEUU4ZvMxaLYadN8EFrkoiukd997z7eXt3PJaXstreS2vhwW8hyenMJQ1sxuu+0k/iaPjBPcn3n/vLpx88slgcpF55Et27NWEnSTNrGZZKx+iIzqN2MKwAZyenIEHcMftt4MpgXUb1rHNG7YglnF3YaZz0/277r9jYX5+bmZyprtr5+47Duzbf+PhqcMLt9+5Fb/+a7928vj4+KX9QQ9laZFEMW0GGWU9Y0kQkC5JUm2tw979+5DIBDf88Me39rsLSJTE9PQsWkNt6NKg11mAlBGcJ9aPJHwMSiiUugxyOwbL7GL9iSfmxRuS+fIgyyNvK6EQbynpl0sBDvLFVeyt0SRzNlrDg0FGEs66UJHja3bYWkNnNJzjqlrFGlt7GBlnVAfp6ex7hnDOOaw3NXJTUsAa2sRSKinJK1mQYTJQyJZH5Qf2iGQEDwYnqeLGW4ter0sJ1bEC9wSyy7LEyMgIRhvDYExAcvJVRVGMLCswOrLieBHoD6WIcXqo/lZ2FIhDGBLQ3lIb07ntlltvp+OXBNQWFoL/OIAvziGiGMbSxtZp8uhqrevQM4TzU3cYV2nfWCR5l/ZJV1/zn+LRpQztz+rQDeeWYek99J8zvPXdVUeg+zowixh+Xn9vYwyFTXlbezNzm1NIFTx0YMfzbIDuwgLASDqbJBGiJEEjbRCqYkBpS6zfvOGUVavXrAcooK5C3q76XkzUoWLeeVIRKLH4vAjHW6Un79t/4D4PDudIgp80EjSiJga9Afplt/7whRAUNBXYcFfVmwDgkkNFClpb2NJASKrjMo4sA1wweLA6vIoxBhVHNJhyoT+ZCXjuoKQiSbCUwTtfwDuPOE7RbDUxN7cApWJ28WMuOkYphbnZOYyOjcJ6CpsCGMnKhYLxZIOw2qCRNmBKjfnZuWLQ7S0kcYSipB5uAlLExFvv4JgjptYjAOfQpRw6dulesPAhid45A6USeAeUxtKQJoRbSSlBIQfUnd5oNBAlETwTEJK6hcdWrsC+vbu3fvITf/bFP/rQH3+YeVDCMmPU0131e3tGIFFFNMQzFkoKkuMj9EAz4I2/+Zsv/+a3vnXNddddd/Xw0DAOHjoYuoIlWu02smyAwSAjFlVF9P2YR7fXARcSK8dXwhpDlgkVY//ePbjowgue+pQnPfE5NKBzNbhhDzEKopovB2sspFToZ30kjdaugwcPXgsAjbSBubk5Ujp48uxmWYFISaon0mWoXzJBAeAJ6HpHPxtAPmdtNLQpQ1CSgnMeRhuyv7j/ORQvY0w8+7LLfv1Lf3/Fe1pxtGp+agFXXfVN9s///A381pveiNe9/jUEdkPwHl/0LBQf/ujHP/ehD/3hn87NTO/6/3scp5/+iCdv3nzMpoX5Lvbu3429+w/g4oseDSE47t62DaeeQr7hv/u7L377xhtvunF5O7e8ltfyWl7L62EB7/07d+G5z3v64Jprv3t486ZNl73sV3917SmnnVIzSn5JL0wl8WQg4FXJiiu5qNaa2DQpAdAGd3pqCjffeiukF0ibLZO206lWszn7z1+78sjuPXvu2H9g93ULCwu3duY7h+7eui0/5vgt/uCBA0hkjCiJcOxxW0Yve8FzTwWAe+7d4SfGV7PRkeEaH9jwOxHA9tzcLJx3GGoPY82qCXS6/SN79+25o91ownmHhe48lIqghEQcJdRVmQ8IHDBKiR0MMiglsGLFGObm5lAWJaI4or5ZIcFcYOgYhf+AeWIOHWCtCR3DDDAhfMuR39B5SlBOVEqdvFyAcwZbJQcHUOS8gxQKTHBKRvbk9QUcrLb1ro/haPOndw6WeTBeBTKR3JE29QVJLz15Rq2zgX2PwARQFAUYSN5MKbQOEEDEFKX5FhqCK6RJDEgCj91eB+32EMA4PASKosDYSCvIuUkivXb12pNqwLgkmAwPUWpDX7ME8YZ1y8233n3Lzbfd02q2IDhDt9cNHtgIcRyhP+hRiJES8AwwmtJnq8AqIQX1xwJUJxUScsnTebRP96GCp2oJJWMPL2v+WaD3ganKD3ytn4WoWW1DXYKcAyONyv25WM8lJfl5qzTm0pR0bQfPdqPZgrcaxjgIJRfZzcDC6kJj5cRKlIXGjh3b8YLLXnDK6GhbGQsw5+A9A5cCDA6l0cFTyUN1DoeU8VHnzNeJVUC3081/8uOfbhVcotGksKEiL6C5ATiDZFTh1el0AQFwwVAWJOvnoJAyGYBiURTg4HVfLxN0XqqUbZKML/odrLM0RPKgFF4uUepyMdk5J0l0HCk4xmGdRWe+C2c08kE33b97z8qVz51AUZIvljPAWxoqVI00nANgHCpJAAAHD+7HEx7/xNG777xrdV7kaDSakFLSwKHICTRr8iNXVclRFAPOwjILMBF82ZUigNLNuRShN9hCCBrmkEfdQToRwLKjpHYZocwzJLHC6OgI9u/bjyiOAAB/+vGPff6pT3/apRdffPFTSl0Sw8yXVMxxD8ZFfQGLiGN2bh7tdgvOOBhdIm40EMfxyne+611vf/Yzn7Wt1x3sbbZSyDTGyqFx6MIg6w+o6ilJwMFQGoMs68E7oDnUQJKk4JzCubLBAFk+GH/1q1/ziiiKEqstHEK43xLFSm2hDz+fOOPQpcHhA/ux9a47sn/4yte+/N3vf/d74xMrYaxHszmEQg+gQr+usRrWajRaDfJ0c6oy8o4yDYQSEF6G5GYRapIiMM1hjQY85T5wBkRxFBK1f/GXYEI+6xnP/o2//cynf7+VRBOz8wNs274Ve3btwytf+Wt44hOfAimS8BxcfNDt2bNn+4c+/OE/++xnPneFtWX3/+9xtMbHRj//6c881QuHue4MpGQ4/fST0Wq1YKzB8ccfjyhSuH/nztn3vOe9/7QwPze/vJ1bXstreS2v5fWwgHfN+Ep855tX+xNPO3ndn//lnz9q1apVVYkunKfOQ2IYaMPFQ52HeIgahiOTkzh44BBWrx0/9J3vfn/vVVd/r2gmUeviSy6M1q/bMP0vX/2HGw4fPPjTTre3p9Pt7c5LPbtq1QS0LjE3PYNBvwNnLNauWQfBPfbv3Y9Iqc3HH3v8qRbAcVuOZc1GE6EqlLyrHrQhhIPTFhOrJhAltKE7dP8kvnftD+68b+fOHWvWbwATwKGDhyiEJFIwISQpjRNIpaAN1e4ISR64hc4CrDEQwXfLuQibZgZ4B+ttqGgKSbCcQ3EFzzwBX0+gg0KKaCOqyxJFkQGOJHjeklTPBZBYox/G6hAQCkta3OwhsHqLXkIGMFcDI6ooqgCHRVkSOAcjL52QnAJtEECiC92qMqpDxay38AWx0VRFFAHgIVmVwGOz0YRSCgvz82iYJvq9DvrdHiYmVqHX72Hzxk3HPP7SS2l64kI/bDU8eRi8iNAjTNJq+pNtd23bJoToCSExyHKUZYmhoTa0LkG1oVS/VBYlBJeQXAHh2gBf7OKVQhJ77gihcMaDx5ACch4IditQKYSovbcPArNL//uhfv8AeXbNkj4QBf+sAKzab7oIIit2mIcKJgJNFDhmnYXzDtqZkCILWOiQuM6pCxkUAOSMJym4oJofSrl2mJ+bQ3u0jQsuPO8YOgYTUqod8kGBJEnRiBuL8ns8oEk5KEGW2g0OHTm0ozT5DikEirzAyvEVmJvroNPtQAYQV+oSxhlwJojBdbb+zpxxqg8LFVqec3BBnmRnXWC+KdKpei+ccxjjoEtN6gfBYZ2HlAB3LNzXxM4Zp2EcJxApSLkx0+3grLPPGT373HPXdTtdKBWDyQjOW6g4Ql6UVFXFBXzoZKbBk8NrXv3r6HZ76aq1K59ywnHHfXPHfffd32hwRFGENE1IfQDAmDL4ri0iJlCE4QxnDExxOGshBUcUpTDawITPlVXam3COpSBpNeMCUSTBOUOZD2CsQV4MEBcqyJs5JlavxuThw1O/87u/88HvXnPNI1qt9hpStahwrhfF/H5JgroQAv3uAEISABXhOfTExz/+sX/whx949e+/413vXrV6NfI8R54VdXCZjBQlHhclDTucRWt8CHmW4cCB/RgeGcbEypXYvXsnXnL55S95yYte9HgAmJqdwsrxibrPlYGhqn6vq9WCdD7L+7hr21a0R4fv/NEN1/+TtWUh5DBmZ+cwMjSEwXyBVkOGQQHJkfvdHjwDkjihwDBPCe9aawgmA7NMYWlcpJBShgDGUA3FAOscfNUR/Qu8okbSftvv/+6b3v17734LY2zkrru2w8FjdnYOv/Xbb8KmLZvq69t5DxG6qL/+9Su/8frXvebth48c3v5Xn/rUf8mxXHjuOY99wWUvOBcANm/YjN17d2P/gcPYuG4T+r1eUDIA2+7aerMx+Y+Wt3LLa3ktr+W1vH4m4GWcIS/1yBMf/6RLVq1atQoASl1gZnoWY+PjiLgK7AULXBKtA7v3ozvoYd/+A5idnp2PknjHVVddvXX33p0HnDUHmJIdMB5NHR6knPHMuOvvObj/wG0HD+wrhIrQarZhyxL79u7G5KFDKIzFBeefQ5K03gCOAVPTh/GMZz7rEatXrZ7oLCwgUjGkkCGMB6HLl1I56ReqzqlWMSj9tru2/Xh+fnZhbGwFXKGRxHHdd0n9ttTj2ektoJE00Gq2MRgMUOog8WOcwLT3EKg2WA4yUmBQEEKhKDJ4byElbZQAT6Ai0G/OeHinISPy8DLGAO6hraadGxFVwaMI6ox1FOoluCCfZgD2CHUwQhBQNdYtgcGLKdVVawxjjJhdxkKYWOCGhagTSr0FYpXQBtmUiCIV/LsBNHoGazziRFJYy4BSgKMm9fF655HGCcbHVsCUFkmSYNfu+3HOOeecefzxWzbRIZE/9kHA8CGWD5v9at2/c9f9U1NTaDUbYIxqiiiR2qDfH6DRaMAzB1MYeMED0CF/oAt9wlIqAn/BG1ptlF2pjzqWxQ5o1IyhELIeYDx0WfDDoHf/c3zdQ/3dA5nium5raUgcqw3QnLMw/GDEXHkbWEEbKpgMpBJgnPz1IpKwxkEXJZSipN7hkWHMLyyEHmOPodFh5NMFskG2qgKzXFTS8GrIE8KNwGtWEQhpukEFAAA+BE199R+/dvvu3XsmkyhBWWj0+wOUuoDgDN5Rx7XmFlJRT64xJqQpy1rabCv/LQB4CxdAZiUMQNWxHKqlvPP1sKkKLHPWw4buWyEJrDrn4Eug1RqC5BJlqZGEarNNx2xa94gzHrGp1+lhdEUUZMWA5BxKCXDBYIyDt5SM7TkNR1QcYYi38enPfOYpn/vrv37iq1/zmvuTNIEJzLIOwNYGsOScQ1mU4fgRBhg0zPN1VgJZJrj0td+WewokI7+2AxOA9Qa2RMgeEGAcGGQZmo0WyrJEkgisWrMOP7nhJz/604997LPvfc9736uUqn3OlcpisUGa/mx4qI2syMAYQxIlsNbDOItYSbz+9b/x0n/6ylf/5Z5t229K0wYW5jtoNBPqE5cCUkhwXqDZbKHTmUM2yGGtxcjIEDjjmJ+fw7p160581zvf9SoAYmZ2DlGcQgQ5cyWhrYc+qFRIqGUQp55yavmP//SVf9l1386to6OjpATwHr1el55vms5vo9GA1gZFWYS+YIssG0AIRZLnPIPzlLyslILiVDvlQyhjxSx77+G0w5L49F/I1UiaQ699/Rve+ba3/N5vttqNxvTkNL785S/hoksuwmMf91i0Wy16nhrqhg4Db/fXn/3cF17/+te93Vgz+V91LEPtdvSpT//V8wG05hc68MagLEqMDI0AAAaDAYaH2wCA71/7g2tnZmbnlrdyy2t5La/ltbx+JuDtDvpDq9atOntkfOz8QwcOY2RFG1obJGmKOFoEj928i/t33O+bacNm/cJ/81++pX90w4/z2dmZOxnDNy38ddkgn1m7fnWTMWXiKO52Op3ezvvvXbj//p1m9ZpVUCpFVmhEDjg0fxBr1q/C/FwfzVYLJ2/ciDhqYGp6mtgXITE2NoqzH3X22VwKJHGCOI5hK/9lCHeqeGYW5JxgHsZa6FzjyOHDh++8844fKZWgLHP0+xmSmGSwWhsURYGyLGuPYX8wgOSSJMneQaqk7pJkYLDWwBhNCcrWkIzOZLDhz6yxMIZqErynfkbmgtzUWXjjKVgqVH3UuMo7cKHAvIdlDjxsXDknlkmH1NkKA5HM0dUdnb4OTqE0VQ9LEtiqN9ksoifnqFKJodrok/9VKaobIoBLdUYi+AGFFHDewDmDzkIGKSWajSYajQZyXaLVbsF5i36/D6VilHmOMi+wZfPGSypoa7mvsP0S2HY0pVpXVoVBwfzcPDy4nZ6ZuktKHhgrDSEFioKqkZx3yIuCWLBI0XXhHUnNa+BMcmSjTQC7BIrhKVW8Dq8K58YH9peSsclrWjGoi7vsnxPk/jx/91BAt/qlCoQRJBumxGlfJ9R678C4JH+rr3pIw2dmQpVNTDVX9H0IvBd5hqSRot1sIstydOY7EIIjTVP0swGssSiybGhsxeh6AGQZCMF0LCR7McYoTTmwgZwJFEWOLM8wNDRELJp3VTUqbr35lp/ossDKlSuRZzm6nR7AyR+ZZRmEkiRPBaO09KDAMN7UMN9qWzOPdEIWe5M5QtpysARU4Nbb4DNEqC2SCKm7gmTdAJigdN6834d1wNDwMNJGFD4Xd6y2emRkfAWkJJk4B0dpS0roZRLz3T5aSYKYR0tCnyw6WQ9jahSjo2OPB/BpzgUyXYDBIYoUjDYhFdgtXiLBZ+ychQ2pxtZaDLJB8DH7uk/aG0qmFuAQXEJJRoM0CxjjICOBZrOJwSDDIBugKDRaQw04Z9FqNjCxajU+9KGPfvbiiy86+3GXPuEZWmtEkQKWqkkeMKcSQqA36IMzgUgqeM/g4ZAm6eZXvebVr3zjb7zhllUTEy5SEkVOCdzGGhRZAecd5mZmICXHyOgQet0BrHGIEokDBw7gPe99zytOPuWk0+dnZzF1ZArHH3dc6OoNSo7qWMLPAQrrA3rdPu67fxdu+NGPv/eu3//9LydpCqUi2LKAVCJUsNFzUko672VZkBWCC2hrKYMgNAHQ85eTIiPcWy4MvarhkxQUEuiMwy8y3GVMRu9/93ve/p4PvOstcws9tW/vIdxww09w7qMehYvOv4DArvfQpYGUHFwI5GU5/ZEPf/jTf/SBP/yL/0qwCwAnn3zi+U9/8lMf11/IcOjQIUxNT2Hz5s3YuH49PICVEysRSYVdu3bv+fq//Ot3Pvaxjy3v5JbX8lpey2t5/WzA22o21uzbfWDN7j27iiMzB8pvXX2rv+Sxl8oTthxbbr3r7oP33LN9109/+tN79+zftfeWG28ZbNy4obnl2ONGBt1B1B5pL6xet+q2fXv2XJ8X+XSStP32HfcgGwzgncfw6CjWrV+LPCtxcP9BmrZzjoXSYdWaCczPd9DvZ1izZhUEl5hbWMDGTRsxM30Ec1PTgGcbTzr+hHNpM43a41olclaJzTTxZyAigGGQZWCco1N0b7hr2903Dw0Po9vvU6iVMZifWwAEAdIojsn/Zh0EU5CRhLUMvlwMGTKlIel07RMkWbcUHNYALiTAghM4hiNPr3cOXAlwL2Cch7YmSOHIR8tCqig8yfRsCFFyrgxBYDwEw1A1EJYkU/vAanHOye9HVFrAJDxInT2M8RVKDv5qkoB6xiFCIiyYR38woE2l5GGDScx2ksSwxoIzAsdSKKQppQDPz88jbTQQNSI4S5LhNI6w0F3AyIrhsWdf9txHh/07JUB7VgP3So5Y9QQHbEfEZUBIUijcve3u3Vd/5+o7GmmzZmwV41BhwOAMJUkLRf5iUxpkeV6nggMItTM+hPLwurfYWgKONTvIFocn3vklEvPFA2RVzQ0IlNRfcxQj+3OywD8D+C4mOFMY2dJ+4NpnWQVquSpBnH7PWfiMPQUqOWMQRzHJ9rUJfdIS1mj0+oNQw+OhIFDkWfBYZjj19FOPv/jRFx9Hbz2MKtjiRt97DyboXFSlUkLKGiAAJLFmAJyxHePsTQBgSo0oilAWJZSkfmetDZz1KMqM5MJKQYqI2GtryX5gfei2VnVnMgGuihJFYNps7eHlAhRuBk4+YSXBPEeW5zXLyqUKNocIHBzGlRj0B3Wn8MknnXpauz3EJaMqLCUVvAWKUpMaIzCfSgpYRxeBFGRJyAeZx9AoGx9fubnRbI847+aVFACCp5+RvUJ4hzwraiBbBaxZS4nV1X1oQ8gcsezV+fZgnCPPMwgpKBTPGaQpWTW88zBGQwgGbXI0myvhLVlGWo0WFOMH/+xPP/4XF198yVlRFK011oa6oyXsafjFeQq0a6UsWDokBXBpB6k4fv2Vv/biq6666kfX//C6K4ZabUwdmaG+4JA4HScRolYL3W4H4AzNZhN5nmN2fhrnXvSox7/5zW9+CQDce++9/tjjjmdCCZRlWYfN1RVdnK7xMs8RxRFUFMM6fehvv/C5vyl0sbs9OopskMNYCyEiOKvBOSjx2xoIJmDMoncaAcgLEYaZ4RqXQsG6MOgUKqh9LKoeIm8D2GX+F3MDoFL+5je/+bfe84H3vAmAGh0ewt/+zd/AOYffedtbASB0eDPq+2YMc7Nz977mta9921e/+pUr3/Pud/8Xg2/Wetfv//5LR8dXrBn0cxyzeQs2bNwILiQGRYE8z9ButQAAf//FL1256/57b17exi2vh1pRFKknPfkpEwf27+3deuttC8tnZHktr19ywNvvZ5lS8c6pw9Of+OmPb177kY/+ycKVV35rhjE/vWfXnkPG2ak9O3cvDA8P20arKffv2x8dPHhEGq2F906njbS7d89+7bzDmjWrUOQlikxTKby22LVzL8q8hIoUmo0G8rzA0HALzUaC3bv2IY5jDLVHkKQJ7rv/fkxPTmFi5QoUpcUjzzzrvEc+4swztC5JggssSbZloY+T+jOVoMojY0mKPDc/r7/1b//2b9NTh6fOOvtc9HtdHNh/IIT0MHAmAEFMqGASYAaOAXmWEeMZRXXnJBOy9hJyUbGirJZ2ssAAV8yoB1sE5oxAKwHY4PVjPni+yNtLPkSSWLPak0kAuiKyAHeUf9N7B+dYHZbCGK+rTipkQsylA5cC3tLrS6ngXBn8wSRFFQIAI9kjPIOS1AdqjEVZlHV6aRI3EDcoBTWOYjTbTQq18RSYpST1GO/dfwCPecJjHnnxhRefjMCcijCxWAosq80reZAXveIIG+vWUBPd3sKt01OTewFiONM0QRRF6Pf6MEaHgYUFYwxFVoILYqtdkHFb6wC36D8Eo65Uv6gIPgqNEkMenIdL/KfVufe1hJdY6AelLP+c+96HVHUfBS4WUUbFPlcduKzq3636rL2FcArM83DNkK8zThSsszCFRYkSeV4AoXqHMYYkScEY0O10IFUEcImiKBBFMVorx3H++RecMtymMmvGWeh3rSrIUL8+Ed50XEIwNNtN8kZbX8tRv3TFl7fu2LFj+8TKVcgHOaRScM4iyw2KsgwBQByNZoosy8K97uvOasEFJRgrBXhP6eiOk9/c2vrkCc5gXAhZEqxmBT2jkKc8K4JygpKgrXfQpqSBgBBhcKagpEKns4ANxx7DLrjgwuNnJ2exZvUE+qWGdPT5NBopjLHkhRckixZVYnWwAgy3RxkArF23urViZLi578D++WZrqK7Tcd7B68A4M44oVuRRZq72+NYZCqAKJM/IbgCP8HyxFELGBSIVwzpSOBSmRKk11SQpAmvCcsxMzSBSMZqtJsqiQBKnuOmm267+8pe/9JlfffmvvUdW5kwsgkHng1SdMTgAkVIwZsnzhzOUpUYcqdHffsNvveqqK6+6NpbxwfFVK6g72QPaWAghkKYJOr0OpqZmsGpiAiPJEA4dPoAX/8pLnt9utTZqq3HMcceydnuIBmlSEovvQ9+tC1YFHzrKGRDHUl//4x99dXZu7poNmzaj1+khK3JEkUIaN2ANBd1xIZGXOTzzaLVb8M4jzwcQUlGYWJ4FKTcLYWcanHNEKqYKLF51FpBygPmQZ/ELSvGecc6ZL3zdG1/7JgDp3MwCPvD+9+Os88/Cy17y0nqYZjUNbhljmJ6a2fr85z7/jf9+3Q/+/b/6WFpD7RW/9ea3/s6b3/LmlwNA0qAAvAQKYDRgWpjvYGx4BEcOH9n7pSu+9OX3vPddy7u45XXU2rRlU3Lk4OETXvrSlzz3b//2755y3fXXXicZ/6DxrrN8dpbX8volBrxam8l169cNvvPtq2/5wt99oZRSlt+96mqfFRlWrVoLzgVWjK8ICbBROTV1ZDA9NYlG2qBO1bQJGSnEaYTJySnqSQXgrEOeZ3DOI202wDmIeWMMURRhemoWcRphdGwUzjvMdxawcuU4Wq0WikGOqckZnHT8yeeMjo8n3X4GyQNo5BymDGnJLCSjCto8DrI+hlrDsMag2+vs23r31huTtIkD+/ZCSIkoViiKEmPjo8izHGVZUDpxSOl0WpO8mQnyArLQuwsgTVJkRU5MWmlgYOGLAASkIPbJejhYMHAIRSDYOywJV6HuW+p9JIQTRTGF7uiS/jwAGy44eJBgOiEqepuSnVkVTkMdUIsWNh4Y70WwxpgI3rcg6zUEGowOmzfGQ7WNB+X+OCgmCaQyTt5X56nz1JaIoOB9YIFBx9vr9KEigV6vizSOodIYF1zw6Es4WAMPJD0dCJRVw4sa0QXcy2iTxThH1s/x3e9//4aTTjnZ3HLjrUjSBIJT4BHR2xQuFoewLWMtnDWwRte1Id6TLHTxfLBaNuqXVuDWybRLaNYlSHYp8K2qtvzDSZt/PhL3wX+wlCV+UDAWq7uRq+PgjBGj6AHjbH0/MMHgLX0Da0z9noUSsKEuC9YFb7dHHEUYHhmlPmWrIaVC1s9w1hlnnAjQ4IMzTm03FQsffvOgzmJGKgKqilp8E3lW3D89OzMfRwplXhLwVgpZnqHINYSQkEogjhMY62CshrcO1jpwTkoGzhkE58TKhhc1uqyvI2J9QV3g4NDGwMLXjDnnAswzcO/hOQ3LOKNqMB5C4oy1IRyLg5UMLtdjqUpWt1ttGOPJXyzIK73QG6AoSoyMDEMyBjAB64mFjaQCE3R8QIrOQrfodXqF4FFIaKfxT3VPMsFCXRJ1wHL4UDMmKMCrLAFGLJs1AJwLIXr0/qWUEELBhGGOEAK61KFTnHzXcRTDaUqGVlKimbaRM45+v4dcS7z7Xe/5C87kJS972csfr0saUjoXpMMVFRrmcGDA5JFppM0UoyPDsNbUvvtHX/joxz76woue9eObbvj0xo0bMDMzizLXGF85Dm00ZuemkSYNOOtw/HHH447bb8cxx2w54WlPe+aTSAFg0J1bQLvZhookvCeQXQ0NPfOwJYHnpJngEx//5ODAkQM3fumLX/6nuemZzpr1a9BstJBnOZyzWOjMUegUI8uHlFQjZ6wOAVj0HKMwK0E+f059zlT1pcHDzxvyrnti+YMlwgZf6y/aetRFFz3tG1/7p3dsXLdh3fSRafzZn30Mm4/bjBde9ivh2aEp+TulerMd27f99PLLX/7mG2+68b88JIox1vjwxz/6jt9909veBEA468NAcVFaHymFTZs2wgP4ow9/6Iv33rv9J8tbuOVVLcXkpt97x9tfdP311z95757dp27ZtGklALZyZM0jnvrUp/Y3blj36b37DhxePlPLa3n9kgLeLM/yffv251YXaDTT0EuaYHTFKLS28J5jkOXodLpQM/MwTmPjhk3o9Dq0u+YMTADOekQqQWHI4ymFQJ4VaDYbKIsiMCINqrxxDp1uF0wwxHGEXrcLbS0mVq2EsQ6HJw9jZLTdOuW0k88J3Ca0tZCePHpSiTqpkwU2yxoD7hgmj0yi0Wpgz559OxY6nV3Dw23MTS9gfNU44oQ206Up0B900Wg0aWMuWABRDElCHb/W2BAWFTyenOKM4iiBC2CBQq0E+egCi0uhUwheQkaSt4r1ATFWjTiGbDTR7XZRFhrekUSOcdr0isD6lkVJabSMzoIPzJYLx8WDzBSB8eOofICs9gZTCrEl72KQSCIcH4cM/Z48BPtQ3YpzHsZqjI6OwnkLrRnSRowsy9Dr90lO7C3m5mfRag0hjmPqIjYluGAYHhpuXnzxoy8EAGNpc4/FvC3yQxuLQhdIkoTAVI17GbIiR5qm2Ll715ErvvQP/9HvD5A2UgAeRVGAApJIQm10idzY8C9R1zEtrc0QXAQGfbHD9iiwyo4Gbf4otjXIhpd8vYf/T4O3HgRkfw7K96iXfFDhqA8DkojC1nQZ7tUg/+YCDh7GWMBoCClRllQ9BUnXM+f01UWRk1dda1hj0Gw0wAVHr9dHkqQYardw8HCXDQ0Pn1C/Ng8e8sX5RPAFY7ET2DPoELzUTJLFbmUAnfnO9NTUEQwPjQZZOXmjlVSIowhaa+RFjtKUxF7CBVlySF0OJ1OXhsAHGJwzxHgGaT+Fdpnw7y04CHRbRzaEKn0eIZHamQDmHGC8g1AkbTbWAPBotVrYuH7TydMzM5u7/S64kIgbEYyzEEKBMTp3SkiqsylKCMWC5Js+G7pugZnp6clu1p2L0wZarSZ0USDPS/KM+1CTBdSBY/S+w3MBDJILmKoKJ3Rte+fBEM6lMZQW7OhcIMj3EZLIWWAtvSfbQmlL9Ac9rFm9CkeO0GBhdnpu9qc33vDV57/g+Y8f9DI0mg1IpSCYJEtCCM9j4f9WjI1S6rV30GYx3VgphQ+8932vefkrf/XarN/fXgwy8CiCNgZlXmBhvgPOJVavWQWjC8zMzOB5lz3vmZs2bDh2bnYe/awHxkUdQMgeMPRhjJ4fURiY7Nm/e+HI4amfWmu2SikwMzsLKRMkSYJudwEOFlLKxWezRegwLsNzm8F4A2187SGnfm8XhjY0DFmqujB2sUqurkf6BVpnnnve8/7xii+9b+O6DafPz3bwF3/5SWzYvAmvfc1riU0tCiglwgCb4Xvf+c73f+ONb3j79h33/rf03b7i11/1oje+4Y2vNloLoRQNoMN0pfKtW+MhFce2e7bd/4XPf+Er/hftpC+v/7Z11plnX/rTm3/67jPPOutSAFi/Zj3tC7XFps3HpJ/97Gfeee9996497rgTfv+++3ZMLZ+x5bW8fvkWn+/OI9d9DPIMDBy61CiNRqkN8ixDtzuP+dk5DLVaiGKJNFbQxpLssdkIm2iOufl5GG8wPDyMJI0x31tAqYlBzfMc3jPkWQ7rLOYX5tFsNjE2tgJwlABtjcGeXXuhSw0uBLYcf8KpjzznUWdo6xBHEu1mM0jbAvgU9Guv10Ov28EgyzDXWcCdW29HI4px+62337jj7u2dvCgQJRH6vS6KPAO8RW+hCwaObq+LsihgShM2z5TimRcZmKgkyRKMCxS6hLWWGCDBwTiHVBGUiuqNkJAScZzUNTnce0gparAqeQQhFMpSo8jzAL6ItRYheAdL/GkIvrfFdhr6nTGG/GZK1MEt1D9KS3CS7jnnYYypK22spZoXXZZgPvg8LbEVPARaMUEDjDiJ0e100VnokkTSOsSRgnUaKqZKCBVSs6UQiGOSSB48dBjc+ZNPOf7E0wHAMQcTUq7ZUubSAzo3yPs5Bn0KSbKG3q8QApwBc/Ozu6Ymj9zT7S7QeWRAnEbgoVvXhwRmJQUkFwH4iJqVcd4GRpbXrGklS15krZaAXY8HVw/5o5lXko0/dPzy/9nuy9evX58fdvTrMsFqE7vgPJyLJRLrEIrmLHmtOaOUY+9RVxVV3lruASUiNJtNShQOTtWFhQUwALosMTMzg3VrV61at3bNsUAAi+FYeThkzlhdVcOw+PtYSLTTlKS9S87T9MzkPMDQaDaQlRlyXcBqUw/C6Pp1sFZTYBwTkFIRQGEugNCgYvAO1msaboSBFzG4PMjYLawzlG7MXFA8EPj1jCTYkktwMHDPoSLq/GbCI0liMACDQQZtHd7w2791yQtfeNmGRpqgKAeeg4ZSnHEIJiAYx6F9B/GNf/4Gdu/eDSVVAGQOxtgatF1//Q3bjbE2jmN6ZnAJWVd+KSglAuBm0NrAA4iTlFhnb+B5GK5ZQGsDYw08c2GI5RAnCeIkJktFLb1nSOIEUkpkWY5+L4OKiHlmwRc+OTmFsiiRFRmsc7jxJzd/f3524Ybx8XF4BkRSwegS3c4CKVi8oxRqBkRpDCbJWBIpBRFAZZ4VOO+S88989Wte9ea52W5rzfr1aLfb6PV64JLjhBNPxtnnnIVGkuCaa65BHMfHvPZVr7tcSo69B/dhYtUqbNq8qX4vrvKuh+FKWZQodQFwoNPt4rWvft2gETfvmJmZ6aiYQqeKoo+i7CNJE7TbQxBcUCo7XP385pwqugR5OWrptQihbELQvcZqX4kPsu6QA+BRqxh+kZDXk57x9Mu/e/XVHzvx+ONPn5mewQf+4AP+tEecgVe96tXw8NBlgShS4FxCCol/vOKKr//KC174hv8usHvWWWePf+RDf/SaqampIeP8UQO1alTMgnIEAL79b/925fz87J3L27flBQBbthx/+rU/uPZPzzzrrEstHA3/LDVYeHioVGLN+vXqksde+vJnP/eZT14+Y8tref2SAt522oApQiCHI12pYgJlVoArAcE94jhGpBJkgwwMAmVRoshLeNDmUmuDJElQFjkmDx5BmRsMNYbBQRu/9vAIkiTG8PAwOBdQMoJnHkaXmJ2ZRpomGB4ZxorxMXTm57Bn516sWbXmsRs3bhiXgsMFxiUvCwp4WkKbcSYxP9+DMRZRpLBp42b0utngmmu+d93KFSsxMjyMFSvGEKkEgkl4AGXwYvmwAbKeaiV4YHI5E0s2rBKScZiiRJqkIZEzdJk6D12nyfogWwacJZZFKurkZaEOSEgRUnItiiIPrBTqug0hOLyjqiDnHKQUtT/MA4tMTeWHrSpEsCgRdjWgQ82kUWK0hfOWJODMg0cMPKRhI/gbRQCA1pgQgOsDg+agy4LSmZstSCEhpETSSOi9M448yxBFMUpT4gUveO7pmzduWK0Dq1gdm7bUDwuQvNZ5j14/g/fktTXGwBpb57/svH/XNmNdt9lqQijy5lrjarksYwj+XAHBFSkLuAyy8OAN9tSJTCFjgpjswPTWPbFB7s0YfjZz+0CPrscDKOKHx7MP/mMfvh178Pf29NmR5zgw42EjmOcFirwAQ9UDGoK4QhiXCBeUMRYIAw8bzgfxnj74Zz2yLEeaUB0V+RsFwCz6vS4aSXPFujXr11fHypivc7IILAF5oWswslSJzRirvdjVmu/M7+aCwcPCaUvgOFXw1lFac5CJShlB8CBjtfSanDMIQdemjBTgq95dgAsBpVS49onJU0LVjC5nHHESE8MXPnPnKbjIegfBJYy1KEsDXRiUWqPZbEJKhaQRYeXE6FkAkKQNGKdZnmeIhIBzwEKnDyEl7t15H6659ntot6kqhbp9aQhVyXx379l9Bw2JyH9eFDnJdV1QiwgR0t4FmmkbRmuURUaqTk/3J0A1bEpGBH5d8HKDwWoK3mMc4JJSva3zKMsSRZEjViqANw8dnt86L7Aw34UJw6x169fi5pvvuPedv/vODwPYzxzH4YOHveICUZLWbDHqKijKTyBRgYU3FkrJOjr/8pf/6gtPPuW05w/6PbQbDbTbQ4iTBuJYIY4UktCX/opX/NqLL3nMRWdaeIyNjWHQ6cMZRwCH+VoxA0/s7MJCB4lKMTszj3/48j+ZK674hzuuvPLKH0qpwIVCpBQU55BcQckIaZzCWgfBOExBtXGNNA3p3jbkHXAIHu4pzuuBGjHobFGsQUmJkIzCwagHmf3CZFadcdppZ3/i43/y1hWjI5s6c11893tX45nPfga77PmXQYgK8MvQZw186q8+8w8v/7VXv2VmYe6e/65j2rh5w6pWq7Vp9fgEkpgUFI4CLeqfQ7rQMKXBvffdd8dnPvc3X17eui2vsK9I3vTW3/6N4eGhM7Uu4U0YXDFGieJcAMYjPD7j8ZHxs5bP2vJaXr+kgNcBSOIUggt0FhaAMAEvTUE1PM7COYvZ+WlIJeEZR38wQL8/wEJnAaUpoa1Gq9Wkqh0GLMwtwBpiHwZZhpHhESzM99DtdiEjCc8YlFIAY1gxNoZmsw0P4ODBg9i3dy/aw62hZz/nWU+KlMT9O3di8vAU8iLHzNxsCKih7YcxFvMLXURxAiUlvGFYtWoN9u7fu2vr1q13O2eQZQWKskS/30OpNZI4rTfoSso6vZY8rhyRipCmaajkAcoyR5YP4JxFGTpbtSGpseQCIvS+SqnggrS6qr+wNvhcw8acg1GPYUiErS2sPFQqYTG12Icf+pV0d6ksN00bBGqsBcDrB3wVcAMGOGfBwBBFMURIheaChwoRQtC0YbYoipKk25KHzSxV+EglICSxzyqKIaMInHP0+gMUeYFIEaM9yDLISGCQ9ZEmMQRnI9pSAm8FOgBAVLLKAPaGRtpYsXIEjVYKFSvEiVqUGwP4wQ9+eIfRBTjjKAuNoigpXTdIO40xtX9b65JY3SA9FEKiMrVWHs+KNceDcOsi+K3lyv8bAVT/Kbp92K/zD4+rfR2dBTgsBrZVPsKaFga0MzDeEkCoBgEVUKg8iIxRZyvncNYjy7N6Q8CDBzRtphgeHkWkIqwcHx8fWzG6oobzYTBQvXaVTEuu9KNZ8mrAUf1+253b7tl65x13OeswP9+BiuLAQDMY7+CcDWysD5Vb5AGuaoloPkG+aWcNBJck1Q7PAOMsJa0HibfnnpTLQlFCsKWwORbk7ZwRQy4Eee2dtYiiCK1WC5xRGnA+yFD0stF2q3UsAVWBdqtd9Y8C3mNoqAXvgampSaxevRLr1q8Jf8VqzzEA7Nh+//wtt916FxcKQpDX2DsatEmlKKHdOGJfGVCWBdKkiWazBVdViDHqEibVAo5KOWecPP1l8PnaIG8WnIV7gmwMIqJ0aCZ4AJMUvBXFCs56zM7NgQuGL1zxhW+8/Xfe/heNRmLaw23W6XYRKUVDwuqadXRPxUohlhKDLMfUzFyQHHPM93pYs2Zi5NN/9cnfHG62z+10OhgbG4azLihHOsjyAitXrT7u8stffBnCdT4xMYG0kYJLFgLkQthfuPZLU4JzjrgZQcUS46tWljfffttNkzOH9kSRomorAJ1eF8bRs216ZgZlWQQ/uIA2hirKgnSescpGosAYecSrZ4k2ZvGaZ7wOByyNpiFi1T39C2DhbaTNVY94xFm/ds/WHY/cvWsPvvj3X8C2u7fjwvMvDNdtyEEIH/FnPvPXX3nLm3/n98tisPu/87hGhoaKrbffuT2KYoTSAHBO97YPvdMqVjDeZK//jTd+avvdd9+0vHVbXgBwwfkXPOk1r3rV8+j6JVuYIIEdZVSEjBXnSCF06qmnDS+fteW1vH5JAW9v0Ee310GWDRBFxPZ1+z0oGUMwCnkxRkOXBazV8I76Z+MoQjNtgnMOo0sMBgNQIb0MnjxKYm0NNbGwMAdI8kFFUUSTZEb1QYXR2LV7F+CAdevWoV8UOOXEUy+9+KLHPOrQwWncdcddfuXKFZBxhDUTa6iGJBy80QalLjCxagytoRbWrF8NYwyu+cH3fwrOjkhJTEKR57X0ryiKkMgqoaIYzjlYrUP/okE2yCggJvQzSs4RxxH1dXoHz8PG31pkRYYoISDoA0j1jkAV+WA9IpmAMQEhVA2uKjmtQ6jJMCZ0AUvwkEgKxpekvjJibwJbaQNorlhKv0RSK5WiZNwQqkRpxQS6qaaVEYB25INUURQYQgajNax1SNIUkVLEXhtHLLeSgGPodbskE5IS2SAD4BHFClxyZFmOJIqx0FsYy/Kc9rCWVAMu9BHX/VLwARSIuo+4AkpxFME776ZnJm/jMqJKFc4RRRFURJUw8K6WizvmYRECveRiVy4PvSqVn9c5YpjZohvvQezs0r85KjyK4T/17LKfO7iG1V/N8IDXCIymD9dQ1b7sH3ioAdRWXaHe0mbVBnCDAEWl5IijFNZaCA5IIQFPQTsUbFRSz7MHOvMLJKVtJjj2+OO3tIeGhHeVrDQcW8XeMiCJIkhGmdWs8sdWrDkjpnNuag5//slPXnXP9h3b0jTF0HAbzjtkWY4iL0g9YGiYQX7y8BkxUpZUHbRVBZfRBOC4FPU96ayt2fDSlHCGvOi8VmtY5FkWanFiYrNDgJH3FowzaFOiNEXwenqUtsAZZ5xxznBraHOeF+h2BmCeQ0iFwhhwyRFHCr2FeWSDPlatXE3srl8MOJuZnQMA3HzzTfft2LHjzpGRYeRZGaR2QHehCxFSxb0DTGFQ5AW0LRE3FaQK6b9Btk3ntVJvBMkn/ab29FYSYM6CoiT42bXWIZeAIYkSxCqmvICaRRUwpUW71UCzOYyPffKTn//mt751bbPZhHF0jhkQ0t7DUK1WlAAjI20MjbSQlyViqdBuJACA0884/ewLz7v4dyYPzm6en1tAnEhESQRjSU79spde/iuPetTZZ2aDAs7R9RnFMYxzWOh24R0Nqqyj3ALjNIaGqJZm+/3348wzHulXDI/sJvYbsNpgMBgEabun4CrrSAGiJGSkIDmHtiWM1bBLwudcALDV++NVWHUYSnJBKeWeecqtCJ3Pi0/g/3fXeedfOPZHf/yRd/79FV98xYqxFex9734HVqwcxXve9z5EkUI2GCDPCnjGIJXAD6697rtvf+d735fnnV3/3ce29Y57pv7u7/7+dgYKtuz2ejDa0MAULHQoA1dd9e1vf//aa/9pedu2vMJeYeQDf/iBVyZxMlEUJVmdQv4Bq/JdQJkkRChA/+C67y/XWC2v5fXLCnhNWcI7CymJpYzjhNhHzmoWJklTRFGMOEkBzmBtDg+DUpd1mq8uC3DPUBYFojiCdRa9QQ/eWCzMzyNJUmR5jumpGQwGfSzMzyFNI7RH2nBw0LbE+PhKWFvi9DNOPX9kqN1OGgnOOecc5hiBUjh3FDiKkwibN62vmbI4irB/397i3h333ZANMm2sQTYoUOQ58qKAcxbWO1hrKBDKeWJOAnskJW22nLWwVsM6AxErpM02pIqRJA244J+NoiQETQHeWmhdUIiMYIAA0kYCxkGsGgSco5AmMBe6cC3gHCTjtMlmi6yYcy54o4mhZcHfiMBEEnMcWJ+QW2WD7NtZT/JCUNqx0fTnJFnlQSLNaubIGVeDLC454B1MqVEWBYQQi5UwWqM/6CFtNIgtkxzWe6hEIUkUFIsghQBTqvnKV77qjKHmELQ1EJzR5puHPtnKl+f8okyxBqUVlchw38777tpx7z33qOBz9ACM0bClJvZKSKRpCs4EBGOIIgWlosXvU39fYhAr3y3nPDBVi0zoQwLcpXQrexjM+qAv/fm3vWzpN3lQ3a+vWelKUsmOAsqLDL13FOpSDafoqziqsCfGyMtLlTUUDuWZD8nrlFDMRABE1mHVygnAMaxZu+ZkgMHUIUksbCJYLZMvtQ6fJ2A19f4yzmrGV4Te28Ggd/P8/Nyg0WwhjlIw70k1EPzvSimkaUJ1T54YaMbJp+3CfWKtCVJ9Yii9p2FQHKm6qowHpg6M7kljDVD1t4ZTbYwJvbwh3Cn4351zyAYZOGOIY6pDefzjn/DYE086eQQADZFCxZKSEvDA9nvuwd69e5EkCueeczYO7D2CI4enIMPXHdi3vwrjOlgWWTdNUzAeasBA50CXGoUu4bwJlgcFLjgW5hYwNztHScHVdezJ0e/pQq5j2iqWkXMByRV1xxoX5P/03IiiJNwTxFxSRRWHKR1cCbQabUhJDOnGTeshOJv81F/+5acBDMZXrABYqIUTYZTiySJRCfOd90jjBEkcoT/o1df05NQk3v3Bd1/2rg/8/ssmp4+gPxggHxSYnZ/D8PjYaW9521teWJYaW+/cirLMIRiDccHaAAbGifUvC40sK8AhoKIIn/jEX+CbV14Jo01+xx2376vZfl1i/YZ1iKMY2hSIUgmpFJqtJpI0oXMSrCjee0jJ4WyQZhsLJQWSNA0J+8Gq4ln9PKm8u/CU4qxUVIeE/b+8jj3uhNe96U1v+E0AjZNOOh5DIyNYv2Ejtt1zD/bu3gfjPLgSUFLg9ju2/uQ5z3vWW+dmDm77v3FsN93y04Wx8fHrAMyVukSUxCi0hjEORlvEicKevXt3vvnNb/kTp4v55W3b8gKApz/l6Y+99DGPezpACd5SCdoleQ/BaN+BqsqMAdd+/7vXf/GLX/rW8plbXsvrlxTwCiERJw04BnT7ffT6A/J/aYN+L4P1Do1mA845DAY51dqEpNg6tCaEtHCIEMTiEMcRrNFY6MzBeYd8QMm7kZJot1toNBsYGxnDoJfDlA5xnGBqcgppEovjTzp2i3YWjUaMdevXgHNJMkbOFytsnIdni+DGOY+8LOE49t977/ZbrKV6kPmFBbRbLQyPtGmDFiSvnnlkgwHJphhVIBhrQ7qpXJRWGqDb6UIXJUToAjbe1OEnLtSDRCqmxFYpoaKI5G7WwFtd+2CXAqqqW5VemlMgjHWIwmbaG2IObEgRlVICnEMoRXJP74K3zYeqo7Bx9ybIoisURcfHOKcqDmNgrYaxJawzJG/kEjAA88R6aWMAxoPsnBJgWfAkG2MgGEOapGg2mpiZmkGZl4hVhO58BxMrJ07cvOmYswiEk6SIpIFUJSMQlMaMWEnUVTu0sa2SVP/m81+4cvu2ew5XYWV5nmPQ69MmVXFkeYFBVtCAwDh461DqEkYTMKoCquqTXtUJBQ/nUfD0IX25OFp57H/G1/1vM7w/e1EYl6/F3/WR+sUDqQK2KOiMrsWqdsdZV6fyElA0sMbQJt+ZuvopzzLo4Df13iNNGmg0m9BG842bjjmhelfWUeBYqUt0u/26mqiKEnLewzIHJhbTaj2o/khJUe66f+feKtV8fnYOcZySD50BIlJ13Y2QikCuNyg1DaWqWhJqj1msKHGO1BrWUsiZ85Q0TIw0SFXBOTj3YJLCm8AYJSkLUfuftbEwRocu10YtlT/5xNOHN6zffOb+vQfABSCURCxJfswAOGPRbrYwOjIMgGPlyglEsUQjJbDsrcOGDRuhlML8zGxn8ZJhKAsdatJiCCGgJHnijbVwzNUAXoZnAcK9ThJpku9brQMr6Rf95yHZms6Bq3MBqF5Nk4LDEPNP2QUG2moUZYlOZwFalyjLEgsL81gxvgLf/va3r7riiiu+Scw1qQJ40K37KkiILR3IAHk+QLfTqdmVVruNNWtX4ZWvfOkr1q5Z88i5+TmkrRj79+/Fr7zwec9dt3rtGcwzTKxcDSVkrSKIVIShNjG5LKhsojAYKbIBJo8cwkteeDm8xJ6puek97fYwHPModUnKAQBKKBqAwJHyYUnKehSRD9paStdXKiR/e8B7W3veGQOkDPJ7beAqIB46qblYUlT8/+Bau2aNeMlLX3r5O97xe29AiDs/fGQSL3rp5TjvvHMxeWQSSSNBu9VErBQmp4/seMmLX/C2+bnZO/5vHuf3//271/zRh/74j+64/Y6bJVgxNzsFJoEoloDHwh988AN/unvXrh8vb9mWV7We9ZznPFcIrrz1oVbMHRX4aB2FHQZrSeevP/e3fz09ObVn+cwtr+X1Swp4eehulYISR21IQ3XewrgSQnJ0O12AU6dpf9CDUhGSJEUcR8ET6BDFMUZGx6CkQn/QR14UxCpFCYRSkBEDF5SCzDhDlmusXDmBoaE2Nmxch3YzxR13bcXoxMSKc847e0s36yLLS1jnkMQReRFL8uPZkLJrjEG31wMYgzYGBw8ewF13b7399ttu2zY8PATOBdrNBuI0hRQSuiypIkkE766U1LcZOjgB8s9R+I2CVAplUdTlo1k2QBRH1H/pLBg8sn4G5wEuJQpN3b4+bKKqyh0K3RGIogiMSSiVQHCFikEzztSbVx+YTx/CharNPf37mDZaztfp2BwkaSUfMoEiFSkopUJQzxJPaOhslUKSnxc+sPiOakBkVF8YUkkgpLQqoajuxVpYY6GNRZ4VkII2omVJbA+8xQXnnXfKxg0b11cMHwOQFxmyPIPWFkWpwQAYQyyTD+DNWQetNaQS2LHjvvnP/83ffjttNFFojTzPoaREe3gIcRKTRFFQ3zNHFWwSNvt1mBkLDN6i97ViYfzPEzb18Lj25/ra/7Ptb2BwGQPjWEySxuJGvQIA1ZdzxuHBYawNAVbBnyoFVKQgJIe2GsZZRHGM1hAFK/X7fcRphDLPoUuNNE2RpDFuu+M2lGWRbNmyuTKkhuMA8qJAt9cNklmGSKkwzPHk3w9VPJyhVg54wQa5NgdWrFhBPdhljkJT4J02BYwpQF578mYzXnWdEkPJGIOMKAG4UkXQtSXDZ+9CwJsEFyFoqE7kpnvHaQPmGWKZ0FAghG4JoTDUbCFNGrDWkL8WHrNzC+BcDZ991qM2bjpmA5x3KMr8qE+Jc46x0XH0+wP0un3EaQzHHCUVe+r4HRkeAgCMjY9OMggM+n16zghiMel5SMFfQsg6gMq7wPBXxdQ8pCOz8GuoI6pk7fB0rYAD1pkQJEc1QlxQbzcLm0BeJ3w7yEhCxhRUpo2GNpQOXZRF6DJmg4989COfW+gsHFSSoROSmhkLXuhKaWBRT0CSJMWq1WthtMH07AyiKEJnoYc1q9ZuedrTnvGrutTMaIMtmzcf/4ZXv/4FALDQ7WFs5QqoiBLsjbFggkHbECYoFruzAeDa/7gOz7vsBTjhhC3427/5++/MznT2qzghtYCUmJudJ/WCkihzGgyUeYGy1BCSwxgHKRWiOCJgHtQtVGFliP32oHqiwKCzJV5fJng9yCvLkBvA/99keE899bQL3va2t/726aeevLbX6/rvfv/7aDSbuPD8ixCpGJc+9jFYtWoC/cEABw7uufvNb33Tu++6a9t1/7eP8/r/+OH8O9/+jj959Wte85yLL7z41778hX/6pgB38Fh4w+t/86Of+9zffGl5u7a8qrVuw4YTL3nsxRdXPxe5CAGOYARwGYKKSKEz3/Xvfte7Pn311d/55+Uzt7yW1y/vksaVgPVgXoX9P6UEe88QxSpM6hk4FzC6hBIKWX9AslhPrI1SEt47TE9PwVpKSo3jmEIDGEezlaLMNUbHRiGVQpblxAA7i/7g/2PvvOM0K8vzfz3ltLdNL7uzs71QloWlN1GkIyCKDRR7EmNvMYmJ0SSa8ktUsCtEghQFFKyAIFV6B2EX2F229+nzllOe8vvjfs6ZWYoVJclnjp+V3SlvOe197vu67u/VQLPRRORiQfZbvmLFIQcevizLDIZ3DyEMJILAh2UC3HPKrnELkUwjjlNUysDY6Ch27tylHnr44Qc4Yw0YsjzrjKPeqBORtlxGkrSgTAYufFKmXedfK+UiRYi+aVyUUE6ATdMUxhIMybpZWqMs/CCkrNo0c5mOtKAqlcuwWqOZthBFIaBJZRFCEi3UGJTLZVKNnSKVpQkBWXwPiUqK3N4soxzjcrlCc2bWQoLmEL3Qg8oUNEi9FoIsjbCWrI3GQjtgQz6fCJtbMz0qmZ0yqJWCBYOxCtoCvgyRJRpSCvjSnyLLWkaqh6GYDp1lCCKyYkZBOJgv/SgyxiIMQ+RALuYyLjkn2zdnHODGRQfR64qT1nCWZRsEFxCCIU0MuB8WVtJUZC67lKzcbNoMLIMrmJjcIyM2JzFrbfZQe59TmT4rN5fh13//uUWvfQGt9/m90dNt0Pnrtc7GWqjeKMaSC2UydzdYlscSOUq4Jvt2lmTgjI65J6lgpILGzbrGKcrVEsIgQKVScTnUwODgXFirgzTJylP7lCzo1XIFtUr1OfHFUnBI4btCjGZ8Jycnba2txnbtGtq4a/fQkNIaExMT8ISHSqWM+mQdggskcQIhPAR+hCxNCuWXWSrsPU9CeJRJbY2rqwzlwVqWP5+BkIJM3ELAkx4y16ARTAKCRgpyGzMpkgaZSt01KSCED8EZ0cBDiXIl6CuV/F4AaNQb5HZwRzZTGkZZTEyO4cmnVqGrqwNSEJE9cDA6ZQwCT2JseNxeddUPnghDj+zkxiL0A5pHVmQJNtZCwEIKyty1QjollpoNxtGk83OWOTt+/v7z+fw8eze3wRtjkMYpFWqehNIxpDuPPM9H6AdoxQ0a3ZB0XeuMosrGsjFUy1U89uhjN573pfO+/g9//6nPeJ4nsiyDF3jF8wJkc57Sr6mhoK3FZH0ClXIZlbYKjLb4+Ec/+qZNm9c/eMPPr7v0b//6k68emD17v1tuuxXz5y603d3tTGsa3KD5appT1srCkwxKGQSBB601fvLjn6JW7dRbN2/58bU/+cllzBrTmBxz9xjaB1maQSly0GhHfUvSFjlqGEMcx5g+IpLECbTRU9eXMZQ9bSwkl/A8z0WdUdYxWVEYYPJZwf95Cm9/b1/XO971jrcceMDKQwBgw+bNrLe/D/PmDqLVSqBVilIpAhcSN99862P/8OlPvf/hBx/85Uv5mp9avWoLgMt7enrvWbZi2dV33nnX+Ncv+MbN1tqJmeXazJZvb3/3W0/ca9myBXmzz04PiAeRvZXK4Ps+7r3/7hs++7nPfd5aG/8pXttfvPvP3l+vN0s33nTjTbC2OTo2+kymVDJz1Ga2me0lLni1UUAGKKvh+T5BYzTNkErhuxm0BFIKBL5fKBKeJDuYDAKyEioCm5TLZTDO0WjUEQS0oDJGw5cBpOQIfR/1yQa6u9sgPeqyZ2mGRqMFHSeY2zvwClhUBSeCKOfSzVu6GUJhoTODuJVB+h66ukI0my0YbTE4MJCse3rN0624ha7uHmQqQ73Vcjc/jVpbDWEYoNVqQmUpLQxBdmjP98EcpVJwD57wkaZEoJacQ3hEOG7WG454nBc1BllGikAQBDDWIo0zJK0Y0sUIpVkKAUfDFURUJUq0gB/5aLUSWENZlsooBKUItsUQpwmMpqxSKcn6yWlJ6SJmDJh29lxjCjUwc6oDF0SiVcaAmSlrdJamsIyDMYE4iUlNdIVhKYqgDNmim40WJPNguYKyFNMUBCGEFGir1TA6PIpaezv65vUjjZuYaNRRq9W6p9d4FoBwZFMLAe4oqsJllxhtnYBuifwc+KhUqyOzZvVPrHriccyaPYfgQsag0ajDGioqjDGUZeyK16niFg7SkxbqusnhzC7GibkC8QUL2F9X1Npfr88C7AV+hL3AV6cpuEXuTw5+mgJwUeHpYGfWFNFFFm7m2xU42ugCkMYYoI2lhhGAuNmCNT6k5yHwOXRmUaqVAEMFRabqqNZqEFLySntbmD+GoSehIs3qwtpvXNYr/Yx1zmRHD+dgnDPcdPMvVm3eummiFEUw0KjWanS/cJEv0vPBbG4bpVxgLomunJNacxu+c/q6Y5fnZNNseJaSZZ4LKuzhZt5pv5ECDqsJ2gU3825IBVQOzFaulNBsxVA6w74r9lnueaKrPjkJnRl4khf7lAHwfAEuOFY/9RT6+/rR0dVRzNpSJJSLI9qwbufqJ554jDGGzo52qMxgYnISYRQiTRsI/YCysl1zQzs7rYGh2dG8oHJUZsEkwAjiBEdEJpqxJWeJUxo5404R1gTE0hmE4EQrNRQv1Gy0kGYZpC8BA1JWWYZyFCHLUjCPIyqVcd4Xz/v2YYccevDJJ53yapWqfGqXMpHdGf/smfQoDDCrbzac8Ix6EmPW7P7+j33sIx/8/pXfHzjogENeH2cZFi1ahP7ePpZHLAW+KDLCcziXKfLMgd27duPvPvlJ/c0LL7jmzLNe8y+RX3q8HJZguUGz2aR7a5a5sQaCKBqlC9s8XSsCQpBLhwsCE6apcjR5VrgapBTFsSE6s6Pou3OOC06nmTHPk8390m/v/9D73/w3n/ibtwDANdf8EJZznHrqKc79Y9FsKhrfAZo33njTF17qYnf6tnv3rmcAPHPm6WfgP/7t32ZWajNbsXmeF1703xcdT/dxXfBO7LSP2Jy8PzkxMfIf//75r1lrd72Yr2Fw3lw+PjpuJybG7coDV77pL9/znrNvuukXP9+yefPIlVd+/z8H5swJnn76aWWgW7/85e3XzRkc+Kstm7dumjl6M9vM9hIWvL6MkKkMnuDQOi9mPRitkMYUV1OOaOZOeh6UmwNtJQodHR2QQmB4aJhifJhFo1Wn2TNGkUSVSglWW0RhgJHhEZoBFgyBLzE2OgY/9NDb043Nm7dgcHDOgtececbxtHDjaGuvQudFAEwR9zE8MoIszdDX30s2VqYRVSLoiWxkstFcB8ZyWAwylSH0Q2iuMDY6Bs45oiCCtTEyNwcHTgWltRY6bRaqiIVxGY4KhhnoOCWiKqPFYeD7zlbKIKQHMAFfCAif5pjL5QpkypGlqcsVpPlKYyzKlRLSNIO2pD9mWQzOOJI0RaqUW5RxKlSlD+6IuhZAFJUQlgKMT0wgjWMEYQTpbK6+JOImm5ZhKLgobJNSCGip4Xm+K4y1WxzTSjVTCkopeJ6ELwP4foBW3IIxCh3t7UgzjTTJoJQClwJaWwwNDQNGoa+rB/PnLRhImiksNMJSBKMNNHSRSWqnF42ugOGcIUkSTExMoH9WH376s59tXLNm7WRnVw/iVhNZSgqUlB5URjAiKaSz2nJwS00EJpzwwjkV2TZXc1HYnadbhDE9d/dFWa8+W8X9Df9+1ree+9Km5neLLFDGwC0vZj2tdkqvgxpBMFhGRY7gEkYptOIYUngIw5CKYp2R3dyRaXcM7Ua5XKXiQCtwZkOPyRJcM0gIssJaADo1BCdjU7O12lgIcCRpDMkZPOmjWqH5y8ceeWyVFNJW26oYGx9Dvd4gmrQm4rC2RGaGpggp66K34NwXlMHNCoiXEKR+Gzdvr60psndbcQwLwA8CpHFMc+tagTOy8FOhqGlmVghIZ/tPWgnSJMPI8DiCKIQfBTjiqCMPGpg3yEd2DcEPI1SqVWgDMG7BJVmEZ82ahTNOOwP1egPjo3UwDsRZjFYrxuDAHADA+MTEtiRJN6dJBun50DpBmibgDEiSFOVyCZ7nodFsutnivPALXR63BueisDLnlm0hqBgrMFbaOPWb7pWZ1pTHKyW0UjCMyOqcS6g0o1gqJlAKI1jOHMmUEdjPGJSrVfhhgCzLMD4xuu0TH/vY51cecMDyvr5Zi1SmICTdH6c3mopT2TUFJhp1MAt0dwWIggBZprDXsn0O+tY3L1yyYNGicjkqgXdzWCaQaQNPMqJmM+5AUI68rA2E4KhPjOP2O29Pnlmz4fb77r33fM7Fw0TmTtDd243JyXGYTMPzAxfBljeOBKQUFGcGynf2OAMXRIDX2kU9uWxzzhgMI6YDMQJoBj4viO3UnEhxVf9PK3dPPu2MU6//6Y8/DaDcbDZgoXHgygMQeh6SJAGzDOUymTj+9V//9b++/e1vX/Wl8z8/syKa2f7Hb3vtte/BJ59yyqEAitGfvNENxsCsLQjrF/7XhT+98aYbb36xX8PmjZsMAOy99z6n3XDjjd8dnDOAc8899+QkSbL29o7AWoulS5dKANW9lu79hv1WrFixYMH8V69fv+HpmSM4s81sL83GM6VgjUaSEpCKMUCrjGxyzMWYMIZmi3J3rQEVTm4hNTE5Cc/zaJ7PgY44pLP1ZSiVywjDCGPjYxifmACXArVaFVbTwnlyfAKlqIRZfb046OCDD9hv/+X71uuT4DwXtmxh7SOLr0FnVxd6Z/eBSw6lM4wMj2Hn1h246+57nt66ZcvG3t4+1Jt11BsNtLe1Q3g0z8iceEZzYgqeoBlEbTTiOIaFoQWolJCegB+GYJxTQ0D6kNIDE6xYYHMuae5Uegj8AIFHURyd3R2o1qpoa6uhUqkhiiooVyqoVtvQ3tmNIIwQhBS90YoThG6eOFUJXNwmCRIa8DzKCTbGujgYTrEucQvglOdrjSVYkzaQgmaPwzAorIFRGBZE2iRNC5ox50SklZKiOqw1SFUKz5PgXCBJYiQpzVhaYxBEIYTH0d3VDa3oQ4UAQykyreEH4fy58+fuF5SoQEeRycoxnUvMWK6UUTHFOOD5Hnp6SRzetnnLek8K9HR3IYlTJHGMen0SrVYTxhB8SWkNxp3S6M4PAM5mzxEEQfGecyWVFYWT3VOtfdFWq+x5tVz7fE8yDa6xR9E9LeaUChzAOkWailVdFMGUU2lczJd0hYIrRBicU4MX9nPlbLJJEiPNMnR2d8HAoq1Wg+9JDMyeBd/30NXRPdjT3d0GTLMAM2I/+54sChzuFFaPc3BBMWHKqYy5cr123drHkyxGo9EC4xKJyqC1gpR8yrI87fzIbdE0h0XHUnDh4rZEcRwpl5eEXGY5XRtw+dOMLLvlcsWNKAhIwafivBgV5b70EbdaAGfw/AAMHGEQohyWogXzBxdJzjG0awj1yXqRO0y5xtRI0anC8PbdYIajraOCSrWESqWKjo4OcA5AAdu27dg2WW9MRqUIWmk06g3AAipV4GCI48SpzxZaZwAj9ZVzKqgEly6+ixcz6QbWuReEc5GgaOYwRvuVzidG+09KgpTFMZJWCwBchJeAthpplhUZ39ZaN75BrpGhXTuxz1574VdPrP7lxz/8kX8DkEmPMsN1pqCdmmodyThvYmkAvZ1dCPzAgcIoz7u9rZ2/7e1vbW/r7PQyRVnfbozWHb+pqyavKbmjXj/0wKPqpz/62dq777rzlocfefiO9vZ2SF8iVSl2bN8Oay3CUhlRKaJ7tIPu5TnbSpGzgJoFlLGrNc0vo3AOANKX8D3p7pE0yzs9Ni3/L71nd2241/g/YVu2ZNnAmaef/j4AnQDwxKpVmDN3EPPnzkeSUEyTcSz1W2/55S//6dP//OX65GhzZjk0s/1v2E4//fQTuju7+jOlwBiHdg4u7pxe2tj8fpLc8Itbb7PW1v8Yr2PugrkHXPmDK38yOGcgFyL89vaOsjEW2kFIs5TuLYcfcsRef/u3f/O5maM3s81sL2HBK9ydIQh8ROXIkSoJdqIzN8fEDEUwOFJy6AfwpYfGZB1aKQiPQB60QGFOmTCQXGJo9xBaSQvlShmM0cxesxVjbHIczWYdWZpi3bq12LR5M9qrbXs3G61yo9HcozLIbXtwxarwOIyi+B2tFMZGxjDZqOO22+/coJQaq5ZL0EoRcTjVRf5vuVKGcDEUgefDQDswk1/kVTLBYIWBhkGrWUdjchywjCzQktNsnbYFDbVcqoBzUk7C0AMDofG9QGJ4ZBijY6OwnBZTHIwyfmHRaibwPdqf1gKBT3OuME6JYRxWMwRhCdVq1bkzuYNTMbRaCQCGqFwCwBC6KJXxiTGnjFmXlxzAagPBXGatoRntVquZ45IpusiSXVIICS/wkWVUGCtFoBfGOYaHh5GmCZRWUFqhs6sDvheAaWqSnHDq8Uccf+IJewMAlxxJmjl6MC8il/YAO+WxrQZuoU9d2VartbHZbCBJUoSlCFxSdifNXCt40ofnkxqpFOVpFrOzjEErjWajgSzLaKY1zz7OC7Fcgnp2xu7vkLmL59V27POouXmQDHu+KvgFN+H2GWeM1FiWF3pUEOakYSKFT2UuW5M7osnOygVBlLRSxWvigmjqI8PDaDVbEJ4PpQwmJ+pYvepJHHzYwQf09feU8qZIDlLKN5oLt1O0dDfvXilF8AOf1H/BMTExuWvNmjWPC8YhOUdHRzuqtQrlQHMGzmie1fN9mk3XxsVvOTVT0/2HC+4KQnKXFJmwlrKXwYBMp27MwCJtJTBaoz45SUqwtY7WSedXligkaYpGswEhPHi+Dz/0YGEQRgHmDMzq3rltW8/w8G4Mzp2D3p5uaJ3HW1G2MSP11o1ZaDSaTYyOTiDwPDTrtL7KMoW777x73UR9rFmuVGGNpf3NOYHqHOVd6QzCowaRUQpKZYhbcQFby6O1jKVREw7mLM10nnDBHFWYzgH6OUFwPbcaZGBglqLJ8pEMLjm0KwgJAO3I7zBo1hvYvX03OBeYmJjAwMBc/PwXN3z35huvvRoAslhTQS0J/JQX3fm5KABopZE0WkhbBIxK4sRZ1Tkq5ZIjvpOlOKdJO4utU1EdaE/Tebfy4AP4scce5/X09O8c2rkLaZygrbOGaq1KaqyhUYZ6vY5mq4k4iaEMFfJpkhW2fJnn68LNfrvzwrr3kGXkcmGusYBirh6OKD8tnos6LtNi1V7ajTEWnX7Gme98z1/82XHU3Erw8MMPwRcEJPR9D75Pbo8kVtv+9d/+40tx2lwzsxSa2f43bEFQGjzppJNOLNRduNz6Yk3hyPRguOr7Vz+iMn3fH+u1HHzIwb377bO8AOpZl0lOKWUUoccZg8pc0XvY4cvb2tq6Z47izDazvTSbZCDbG+OisN5qo2GSxIGpOExqKL5GSqhU0YwagCCMaIGlgSxJnaqkwTgtwgOfOu1KK6RZRlmIfoCuzk6kKkUYhQiCEFs3bUVHV1vHsr322nfr9m1sr732gVFkH4yTBNIX8LgHwQWiiFQJLg10ZmAMMGv2LBhlUS2V4snJCVstV6CVhvSJnBz6EamQipQGw2gxrY0FBxGppSdoljHVSLKUigKPsmW1okUTFaccYRgBjHJ/4ySFH9B7IgqrBsDh+RLaWGSpRRCUMD4+iiAI3YKWQFBCUtxSvmDyZYAwCiGEQDOOARc7pK2F9D14QkLpDEmWwA8DGGPRbDahtUIQViGERKvVgtYa5ZJXzF9TprLL/mW5RVAgzRL3YWGhNCm2HBTdwjlHFIUYGx+HH5RQKZeQZQlKpRKajSaUyTAxwQpCa5KlOP64E08BwPKsy0LbLJTeZy/Opv7CnLKTJEnrmbVrnwKAkdFRsneGATxPomWbYAzIMoNWvUlUVQBsWsHHSZJxRTafsq07y3axMGXA88qx04tR9puK019nX36+r/2an7d7eprzZgBVlS432LFxchp3AbayREbmzobPGSeXhSvMwDiYpPgtxgXaSx2IE7Letre1k0IcBQhCH7VaBXsv3etgUtvcrCyn124o7Nbl/dri5Ro4oi2j5ok1GtAWN/7ixie279ixxfNDKG2QxAkyR+YGAJ1lqKcJvMCHNdrRcBms4MjjtIwlaymz1mXK0vnCXaFrYGGUcu/VOqWbCO6MC0jPWfsNQxD6sMaQRd4V/cpo6JhcDNWOKnYPDeOAA1cuPPLIYwYiP8STTz2N3r5+zJkzQBxqN7dsjca6DWuwa2IYJx5yArlbAulyfKm48EKJoeHhXwHkyhifGEMQ+vB8aig1mk3kEVOw5JyhGWxRqJLcXa/5sWY8n0Wle3DqxhymFEbtzg1qtZDizajIc3wG45RqKEPOF24RNxNITzqyu4GFchmzwNbN29HT14s0Fo0vnvfVC484+thjozDqJTXfYmKyjkpUApOCCN2WZowZLLp6uqGMQpIkgAakD3iegFIZ0kwVEUSWWRf55FgNnLsxkCn3xq6hIT5n/uCI+aVZrY2CsQYqVmi24gJalqUZZZ87SzOzxBCAR+eRMQaZyyKGm81lnMNoXRDHCYTHXGwRXafUcyFlP7+X5tF81vzP+DDv6OiRp55y+tvefu5b3gMgWP3E4/j5Ddfjda9/IwbnzAVgaSQh8ACg8d73vv/zP//5j78/swya2f63bG94w+tPefnLjz4UTlwx7r7htIIigxcAvnnBBRtuuvH6jQAwe1Z/MG/BvMBa2McfeyI49NBDejw/KFttZE9vL1Y/+cTY4II5o2tWr5lYterJ1vM998DAINu6dXOxGujr7tkPrvFqDZGi4ZrNDAQBZQyFM+fx1U+NaYbhmaM4s81sL1HBm2UKYRQU9q4oDKG5dDOPKGZOuQAyRcqtMQZhGKEUlVCvN6Ad5CqPbaAVu0KrGaPNRXNwIVAqhUiTDJOTk/B8H0krRbVaRittYe/+pQv2Wb7vfv0Ds9HV3UGzn8YiikI0mnVkOgUTAtpkKFdKzt4oEIQB4lYCy4Dl++8zZpnF+OQkuro7oZXG+HgdSZoi8D2oLHUZwxppmsLzPYoryhSk9FzBSn/nQkwt6K2FVhqlUgUsYo5uGiNNU0gp4Qc+6o0mMqUQlHyMjQ1T5AVnqLWVAZCFUvqesxRLGKtgjEAURaR86AxBFKBaq8LAIlEpSlGESrmC4bFRsnVKiVK5DM4nXJFANsUojBA3Y8oG5hyRHyIMQ8RxWiiC1uWc+pwjzVJYaxB6IQwsMpXlgThFtrA1QJJm8P0QaaYAtOB5HuI4AxhDpVKhghwG1bYqwlL/0v323/9wWoRTvJDniaks3OcpLPMPqOlzgM1mc8fuoaG1gR/Bl25eOlVoNikfmo4FFSzCk8hiAy5FAR/LCavWMFLwi8LavhAo+flE2d9Khf39t1yPtntKyns8v3WlZK5Mo1BU92RBuxgmwR0wyQCS4EQcNPvJPQHP82Fc0dhsNSE5RxiFqDcbqHXWUK3UELcSNNMU3X09A3m3vMh4ZVMFO9vj76ywfFpQVBHjVPA98vCjT8StOG5v70DcbMEoytvWikBy3JOwmQW33M3WesUsfZqmZHkWHEo5Bd+BhzgXU0Z1FyXDDMV4UdMun+uiWVYpSVHWWsPzJNJUQQiJMAjRaDYARoA+oyx0pjF3cP6yBQsW9AFAR3snwogKMu4aDzAA4wJttXaUqxVIF5sWBSEYZwh9ev9jIyOjTz715OOcc/ieB600lMsXFlKgVqnRe7M0kqAtFafGxTHl1w4XwtHVbdEUYGDkRjFTSijnDMyplZRLrGg/cQbtfsaAYssYrLPb0Yy/EBxBGJGDI00hPIFAUtNFSok0TTBrzgBuv/OuOy699JKr/uzP/vx9XFAGsx8Q28Fz9Hd6nRR1B8YgmECpXHKRVXnxOozRkXE0G00csP8KhCW/uB5yblsey7VxwyZcdvklqFQqj1955Q++ed999z3oByHSNMXkxCSMIUp+4PvQUsOXIQQXU9BBQYAxDkMuAhetRIA0DsklEqUp7k1w13si9wucks4Zgy7uksLNGk/FhnG89JbmlYetPPGqH1/1yZIMZgPAnXfchd1DwxicM5fmuLWC55MT6F/+5T8v+/ZF3zz/v779jZlV0Mz2v2Lrm93ffeONvzgbAFduJC4HXjJYWOaaWwD++78vMTt2bV186qtPec/f/90nSxdddOGsXz36uL9oySL5zDMbqrP65/QsnL+oo1Ip1RYsWBjVW+MqRRb7Mlz3la+e9/X3v+/Dz2kENZt7gpbnL1zwCrg1MsEkbeGmyRuWQnAwLjA0PNw474vnfaw+Nm5njuTMNrO9RAUvFaoCnNNCIIlpMea5xaO1QBSFNOdkDbhkMIbiXSYmRpGqzGXWBlBaI3NFJVm9DKJSALQsSmGEpJVASAFjDLq7u2BBZGJrEnS0VQ/s7uxaOnfOIC3YmC0W0mmSgimGiWYdEBbVStX5NhmyVgZPSmQqaV526XcfFIxTIZRk8DwBP6BCsdVowfNIofY8mlllnBQV6UuKFAlDpClZCSUX4L5EY7IBX/jo6eqCMhpZqjA5UYcXyCLn02rqMlptoAwV/76k+d5mfRK1tjbUamXU63VEUYhqqVxkFUsuwEohWrGFlBKTkxMQbuay1WqRUqMyiCB0c2i0vxnjyHSKLFNUmHAO4XJJ0ySFaBOYPWs2LICtWzchTWNEYTlHAbvMUpoDjaKSe2yn3jsLrGVAKYrQmKyDBZQVE/gSStECT3oSYZlmhfffb7/DFyxYsDCJU6g0gRQhLQzZ9CKPPYsPRaAlT0hyBgiBe+++f/32nbt2dnZ3goNDZRkSrcjiyty5wEARL9YQkEyrQr1lriKzToGcKs5+8+eMhXXq5QuIufY3P8KeP8heUBlmzwewmuaQttMkcKs18Ozok+KvHBYaShGRWAoJT0okaUK5rEqDWQYGCZOmsNzCjygOimy+9DsMFkHoQxmFalu1SgovNVByYnAOqpr+Guw08Bd3UDbmaEOtVuvJLMvoevA9F1NFhac2CkwwgHFkKcVmUb4poDKK3mKaoneMMQV4jTsgmTIEbOJGgDNJXX03yyWkAJhFlir4zuqfpQmgBKwGAl8iCP2iGOvo7ECSpahWKigHIbi2CwAwYywG58+DlAxKpQA4BPegtIGKM7S39+Cww/rhhyGyjEBvkxOTiOMmonIZ9973wJpnNjyzvq3WRjnDhhgElDmdgkuy3mVpUtiX6f44BUUie7gsKNz5MWCg+43Ns5gNWb4BAlpxxp2KSVFVfiBgOYe03MHxEggHSiASvYS1GlmawPd8lMolNJsJGAd8R+sXUqC7ozP+5tcv+PKBBx60fPny/V4eBD50PmrAJIyBi//SLtZNkl2a5eME9OLnzhmAx3yYLgW/JKGhwC131ms3deB+dtfQbuzeMbHmpsduPv/OO395uZReCk2wg2azCSG5Yz5oeIEHGIskSYl87/tkB9eaLPLWQkgJ3yfrPbmP0qIA1pruw77vo9loEEuesYKiTe/NgjMBxqxb5BJw7aXcGBddP7v+uo+WZDDYqrewa3gE8xcuxvL99nNQLlfAM4ann167+j//89+/ZK3VM0ugme1/y3b4YYe9YsW+y19GPTxW8EDgGvp8mkOqs73KLvzq1w88+LBDDxodHUZbpR0HrjwYo6Njdv8DDmbcEtCwvbMdcRqjr38Wdu3eBWYw78AVB7YPzBpYs3X71kenP//o6K49Pv62bNzyCIDTCPjHC2dKvhXiD4BPfeofvnXfvXff1d3VEwwN756JKJrZZraXYONgdOFnaeYAJwKZSpGkCS0qmUWaxkgTop560ie1yFBxJ6WA9AWUVpTfC4MsUyiVy+ju6YI2pBzXJybRjGN0dnbB9wKkqYI2Bs1WC2FQEqecevoxB6xcGXiedPm9ABMMaRKjUq2grasNg3MHMG/OXJoh1BY7d21DphOMTYzhsV89fNOmzVvvBjwopRBFJQhO8SxpkiBJW8i0QpIlNO8nKZtTaw1f+jRbyxkq1Ro834fKFExm0dvbg66uToRhBJ1qBGGIUrmEKAxhrEWSJqg36vADH7VqDV2dHZg7ZxBpptBWa8f8+fNgodFqtaDSFBMT49iwaSPGJycxPLIbW7dtxu5dO1CJQipOwNCcrGNyfAzz589D6PtIkgSe76Faq6IZx2i0GhStlGpwRgCWqFwidc0BVEZGRwkGJSmCg3ECfNHiJ5+XtUUMVZamLoaZLIR+GEIwWuhLn6zXUViCNmQvbdYbmBidcJEvmbdk8aIDSmEoLICoVILwJMGkXJHLnqd+ZEzAE5LmX9zXn1n/zOpNG9e3JibG0Wo1MTnRQJKmFHfl5hkZtwCjMF/OGTKVFTb76VZfYGrudar+ZHsWjC8anRnPU+z+jg/Onl1NogAJGWMKxTV/d8a9L2qAIM8PglKqKOA555DcA3OWK89lMXu+j3KpDCkkmvUGJut1GGvR1dGF9hpFEhE8ibuXQvvRPus9sdyJ7b5cbzQRJ/R5/vivHl8HWKRJgjTLMFmfcFnT9Np0pgCt6FgyiphI0pTOMQ5YqOK9GBhnrbZIVVbENWmtYUxG9xlL9w2izedwPa+AP3mehPQ5jGVoNppI0wTCo2zXZrOJHTt3orevR7785UcN7t49hEZzAtYm2L59G+r1JuI0g4IC4wT/ktJHfbIJBoYwDJApiuqpldsBAKuffuopLwh2DQwMYHxiHIwB0iNitCc9JHFKyrebu9Wajp141qLJuvlmA1vMkDqvHLizS4NZRGEEz/Op2HRKMOy0QhM0j6q0Iw7nmceOdKyNobxZnZFa70soQ4p0mmR4Zt0zUFmG9c9seuqd7/rzL4+OjYwAgBQ+Qj8qQHgAQ+ATARsO7ATjcnvZVHNp1kAPBgb6wfdoNNlilAMAWs0YaRLvqtaCix7+1a8u7emdlfb29qEU5WAq4azIDEmWwXNws0xR5KbRyl0/1kXn0v1IORo9zaDTFRWEAWQgoVSGLI3d7UKCcV4wAGhenZpIxlpYRn+0yV7SD/JPf/qf/vLUE088FgBkILFx02bss88+OOLII13DJ4PnBQAw8tnPffbfR0Z2PzGz/JnZ/rdsjLGBN73h7L8AILRzszyHPaksNqxbjx3bt+Hlxx7Llu+3gknhoRRU0ZhsoL29G709s9j8ufMwf9E8LFq6CF3dXejq6YQF0NvTi+7eHsxbsOjAz37uXz84a9bctl/3mn70ox/9YNeu7dTMdSNUG9ZvwMjoSPEz1/zgh/d98IMf+bsfXfOjfwKAmWJ3ZpvZXkKFF9ZA5TRXT0DZnPzqQXoSaZIQAIkLJGmGKBAuqoSBiYDUtjQB5wQ84uCwAoiTFEmcIEliRFEJBhphWILKNIQnEKcxTCvDxOQEMm0W7bvigCMAUu5ozcTRTFpY/eRqDA7MRU9fD1oNmtsMoxA6JRtbpVrBJZddvuWiiy++uFIt7ZBSYnJsEnEQwyqDarWCVJO1rVKpoT45Ds8p2NDKvdYY5VKFKLhKA5yhs7sbRhmkcQbONeIsgWYGXBMZMI7JKhdFASkr1qBcqcBojSRJMDk5gVargSRuAYzJtkq1s3/ZkvbFyxb2z5+/YO+VKw9cWZ+sd8bNeOcdt9+2+p577vvV8O4t2z2Pt5/x6tcccNThL1s5MHtW/L0fXHnL+rXrb9+ydfNEksYoRSFSATRbMVF5Zb7o1ZThGwYwhizbQ7uHiOQqfdi4BcvhYmDIapOprFggqyxFEJagkUJymlnTmUWrGdP+1gpxkkBlKdoq7YjjGAMDA2hva8e6Deu9BQsXLABoQZ/n7j5LrizqTfasOtECxSJ/3bo1DwNk3U0zBRkImNRlbGaZiyuxgCAbrE0NRG77dAUZy2FKLrqHPbsIZayI/XnWh+pzi+DpyuuvrWGfbyiY/bbV7dTjTxd9p9GOyafrfsAY2ByaUxTDblbIMiijwDjB5xiocZQlZFO1jhAc2wSZzjB79ixkSYZmvYV6o4kwCtsqZVJ4URwvNq2BMLXXps9k5xywMArg+x42btwwtG7dmm2e9AicBEvKq7MWSymgFYfVgBSkIsNaepv5vuAUMYGcPpznoMKCGQ4mPCo+XIdfZZnrsgswy2CZRbNRRxiFRayXkJLGIwwDVxrGZohKIaQnkKUJtu/c3Sa8cG6iUtz6819AMIaXHf1KtNU6kLlINk9SHvjd99yBzq4uzJs7C9ooQACjE6OolWsIEGDb1m1rhoeG0F5tp9ikVqsAJJGzxr1WPtWkYYwI1dpB54psaRBd2EUyu9PATGtIWCidwWhb5PIWigdnyDJF1yVzJg/GyPGidKEcZ0nilGGg2WyiVq0RiV1Tdm2ctDCcjUJyH8PDQ9c+/NjD159ywinnwBLELC928yZI3gixbi7X5pnOLs5I29wNwNxctC1Oce7mdp9ZvxGf/39ffHDd+qev6ujsiHt7erB58ybU2toQxy1MTIxDcAHPl7CModUkYJnkkhokjDlwHZHgOeMEPlO6KMCZi29LMwXLyZaoMoo+My6bnds8jihPXycYHhdEEVfOpfBSbEuX7XP01Vf98G0A+MjoEIy2OOZlh7vXbmCVhu+yuD/8oY99/TsX//fFM0ufme1/+lauRHJwzuzBUqmy4h/+/lNvP/vsNx1LTVbiVrBpU0BgDJZbVDvaIDlHW1tbkQnvBT7KVYrgag/aiIHg0gTIBENNNqMtJBcYmDOAd7zzrWevXff0IwC+/EKvb9OmzY+cfsZpf3vZd7/3rzu37cIFF37ri9+59JLvHXXEkfv09PT4O3fuSG+84YYb6/X61ssvu0zMHNGZbWZ7iQteYw24ZdTZVwqZSh10ysBkpCAGpQhSCNQnJ5ClKSnBQroYErKDcUlKsXAd9nqj7sjIVXjCg9YpqqUIrWYL/bP74HkC9fEGykEHlu+z8oj+vtnzWs0EgjFoDjBmsHP7TpSjCjw/QNxsIYrCAm5iNNDX1wcoA6vNmi1bNt88e9ZslEshFUaC8hatJUhNlmVQWYrQi+BJD34UotUaQRj4SBXRhJVSqNaqBJVJM2SGQFee9BFEITxJnby4GUN4AmEYoLurE2Njo9i2fTuGhjwYoxAnMXr7Z7cP9HbPK/nhge/70IeOPeqYYw6PStFAV1dHyFi+nKPt3e96l33owYeHr/v5z3dv2bTRO/vNb+5cvGRR9e477rbvfMfbT7fa/OAjH/3ofz6z4ZnhWrUGo+GiXSR8z4dycSd5bI3RGlortNU6EIYhdmzfUUS9MMaQJilsYh3ciSFLM0gXu5SkMVSSQgQcymiEUQmeL5GkLahYIQwi+GEAO8nBmUSpFMIXvLp0ybJFU4WbBWO2WFyz56vvipHMqR8YHhnacMMNv7jHd1FMzQbN7XIQDEkbWvRnWheQGuuSZvKZ8zyXNJ+BLLJ3qTosAFr5Qtey5ylw2QsIty9Y9LI/4iWaFwuWqgWX4MMZZVIbY4g+Cw7GBKmlLr5KMA6rLeK4VeSaWguEQYQso1gc64BoAeMYGhrGy489ZtHgwGD39Cp8SpizLzgGzQAkaYIkzuD7HsbGxsfrjca4sUCaknoopEDamKTHyOjxZECuBKsyWGOcCsnBmHE5r66gy+eamcsXNhrMFUh5Tqsf+oUFmFkGrQDJfTCQC4BzgngxCmt27gZ6R5VqDdu3bUdUKvUuWrJ47pxZs7F42VKkjQQ9vT2uO8ghhQ/OGB58/H5ccdUVeN9734exsUkEgaQcaFgITwIA1j/zzGZrFLIsRltHGyYnG0jTBKHnOYXewJMejW1kUwphljmoks3fMqmLQkrHUMjR5oB2RS8DQ5Y56yrRn+A04cIqzIVwhSaBmXw/AJAii2nf5HPxVgFh6INZIEs1GCxRocEQBhE6uzvBhWj98z/+638vW7LsZQvnLxxkrjCENfAkjYo0my2UyyV3njrYlzVFNBQMwCTN5U8RkXMIjEGrmWKi3swOP/Lop55++umhZr2BbUmKZqNVROfRJWEALmCVhoCA73tIspjukZ4/lVNsLCw3UIYAVZ4nCV6oNVnGlQZjxjl/KRkgb6gwm5+Te/LlrH6u6+FPufHQ7zv//PPfu3zF0sXjI+N46vHH0WoqvPLE4wEwaJNicrJuu7u72IbNzzxy9Y+uvuj8mbzdme1/4NbR0S4BzD308EMPPvtNbz7q5ltuP2jJooWLo3LUEwUlTrA+l7jAnqdXzBm6Ojv3+FQSghfZ7dMb2pzxInYs5zIIQSM5KtMIQi867LDDjv91BS8A/PQnP/uPVx577A0To5PJ02uefOL//fu/AcBzyNBDw7tmxgdmtpntpS5482zLnE4puHAjSaS4Cc4RtxqQwoPgkuyCXCDwSF2hKB8JLhhUZmC0omKEURGdKQ2jGDq62zB7cA7GhscBADu27YDgAus3bpKnnvaqI+YM9HupI5eWy2WAMcyfN4+yDpkj4DmNyRgAArCZQb3RhOf5jzcm66O/GvoVPCkR+D5FeUCj2Whisl5HuVJGGhMwqt5qwjcZ2jvaqNBPyQ4puABjHM3JJuXOBj7KpRLZnY1FFEUoRREmxSQ8T2J8bAxP7NiGNM1QLpfZ7Fn98+ctXHzoya867ZUnn3T8oYvnDc7bunFrx+y5gwij0BV6FpOTDYShD98jy3WjmbDNGzd3H3H4kd1tJ5+CPJbl+ONPRBD4S0ZGR/5m//32f3z1k09c1hAefN9HW1s70jRFkiRIk5TydAOfZm9hEEVlNBpNl9WqIT3PxQzRjHYQhGAMiFstKK3g+yG0UvCkB8AgzVKAcVSrVaRpCt+LkKkMUgq0WnVUqyWEQYSnn3wag4Nz9l00f9HiXOkzsHtkV2IPNXV6Vq2dUuyYxPXX/fzO9RvWr5o7by52De0mWrjR8DwfTApIAGEQgicpVJbCMk5RMdMWnNzNuhr3uNZOPZ91SrM1dkrsdZTqPSo5ixcmNP/ate2voWLtUSg/z89Ne768HpgedcLAAe4AVXyqCMyhZESp1I5zxWAsxbRILoiO63mOMq6htCr2z+jIKMrVMvp7erF161YYZRYGUdhJ5yoprPl86fQ38bw9AWMhHS2YCzYGjslSOYLgAlq5+BZtXENEIMsyJElMCw9BBRnFgzrF0zUpOOMOuGWnKaOOjmvhFjUESCK1OwMcQIlx4g5x5oELRrnifgRjtAM1+Wg1G2CMw5oMAwODcxfOn98DAAfscwDl/VrKVARnBRRFJSmOOvwILF28BGkWo9LWCRigt6sPYegjTjOlobaCc0zUJ5Gm7tqyFlwKJGkMgGjSnKOIl4J1Vw/jRdwTc+8LrpllC9AUjZLQmAEr1GHj9iHjDMwwNwPNoU0Gow1R+RlDY7JBTS/GAeMIxUYX2bzNZkyuHacmt7W3w1qGibEJ9M/qx5Orn7zxokv+++v/+Kl//CxnjMNl3IJRAd9KU5RKJXddkuJOzwVkyrh7unXOal6cVI16E1kaw/d9/PKOWx67676775tojI6NjA45OFXkVFaDIKBGbZqkUEohCH0Y5iBdzBKAS1LklJRkT7aWQH06s8U9mXECajEmivih1GZglvZpAf+DzsO9SFUyhvY/e2k+wD/8Vx8+693ves9rAWB0fAjj45M45LDDoF3jSwqB7u4uBkCd98XzL9q8Yf26mWXPzPY/Zevq7ArnDA6uOOyIw1950603H1OtVfad3Tt7oFyuiGd/tFqQW2l6sv0LXXZmj/51Poowza3EXcMtX4cwVjg9gtADgKHrf/7za8444/Rf+/rdHPxDM0dyZpvZ/hcUvJxzUkgYKQj5/JdWmgpfSzEk1hh4ng8hGCyjeVDGGSQLICTFNEg/ABgQJwmq7W2wmjIrS6USxsbGofQGlIMQraZAf/8sJK0E/QO95VNOP2HvRjNBlsVEtzMGXuhBZaQWjE6MQWuD7s4uV9VY+MLDWGMSgvPkjjtu/2XcaqJUrSJJUpTKFWirMaFGKUqnUkVndzdgNMrVMnbt3A2tMlTLZcSpgvAk5UZqwsgHgY9aew3NRpPyhD2B8fEJjIwMQRkL6UtIxtGqN3qPPf7Yw88663VHH3booQfPmTOwtKure7YQorgPL1y2hFQbpSlblTNUymWsXvUEJibqKJVKaLRi9Myehf1X7ItyuYwkSbFt606gBCRJgtkDs+CHQQsA2turiOMUrVYLYEC5XKJsUM9Hliaw2iAKaYY2SRLESZOo05LozEppKrStRRqnsAYQwisybhljiKIK4lYCbRRGx0YAcEguUGtrQ7VWwvjoOJI4hulV6OzpwNnnvP64nt6uqOXijBjnxRz2dHDDdHPxlGuVQWUa3AOuv+HGGxvNph2fGCfAWf67jENwOgezLAWMJrsnp5lzbXRBpBWCu+xRRgAgB7LKbZt7vBZuC5W0KHpfoAj9gzf7Qorw88Or8iI2nz8UeUyL+4H8/TA3hGmcEgXL4QkPxhoYZmAZKY5pmlIEjB/AwCIs+QikD88PkKYZQr+McrmCqFQayLO5GX/um+DPV8e7wtzzAjSyBgDg/vseeGbH9p0jtWoNxmgEgY9GswWtLcLQd+/FEjCLkz3dya/FXGVuVabMqikngFEOusaJOswYoBU5OUjt5FRccQYpOYH1BJ3zcZJASgkuJLQ26OioIIpCGA20tddQKgUHbN68qTQ0vAtcMCyavwTdvT3g0uUdAzDKYr99l2P/FfsjCCJ4HneLLIYNG55BZ2cb1q1bt/aRhx5d193Vg/a2dmzduhUtrei5lIZOFcqlMrIsJeiaIwMzTg1IAwNmKJ7JOuueNe68sHnergO1FQ4EUsgFp0JYcA7he0gSStlgeZxTDngxDMIV19KT0EYhbcWQMijixsAsKrUqskyhXp+EtcxFvnmo1ir48nlfu/SIQ4865tSTTjrZUiIbNVM4Q2d7mwMY5vbmaT4BjiLuCtYWlngA8KSHNI3x+OO/2jI8NHx7fXLywaHhUcogt8QdaGvrRCtpIo6brklnKT9cKRidQkoPgvswyrjrm7KLde4ksKTiEpTNUcCthbH5rC69rnxu3LWa6OvCvSFtwJ73mv4TfXhHYf/3r7n6LZFkwTMbtuGq738f577lXHT19kJlKVpxDN8PIQLgiu9fefX5X/zSd877wvkzq56Z7SXdGGPe4Jy5y0484cRjv/vd755+5MuOOrRSKhfzssZYtOIUnkcCRHGbYHkWAHuO12gqedAWri3iXRCtnxgBDNNIV0Xc2bTBIUgpMDw6su3jn/jE//vvC//r8q999SszB2xmm9n+rxS8SiuyPeoMnh8giig6iGIKFVKVIghCAAZJ0oIQHnxfIlMZhOeDWYY0SeAFAQV+u+gLWCKgAhxxHCONE7BKFVGphPGxCfT29SGOWwCz8/pm98wXkoGLEKUoIKVBUYQIAMStbA8IJmMMzUYLmzZsxe233f7gTTfddPfe++yDeqOJkdFhNOMW+vv6EAY+olIJjXoTgechSTRUqlAql9CqN6G0QRQFiOMYcRwjDELK6gSpIiMjw5gYHyue148i3tlTGzj0sEMPOffsc4/db+8Vxy5atHDvIPD3qAO0cRm/jDnFi+YXjdYwmYFkNBe3afMGpKnC8SeciFn9ZJtM4hiNZgttnTVYMJSiMi67/MpLrr3uup97fojJ+iSa9SZFswiGOCFVJo1bNNMKEreM1QAzUFkKaEAZ5kAP1PtM0gTGaoJLGUNWWRf5E7eIqgsmkMSOgp1pJHEGLppIVIYwLKG9vYpqZ2XecScRLAVTI4PORqphLdmK9hy4QTGoaS0gmMTDDz+y7fZbb7sHVmN0ZAy+76FcLsFoiyRJoJWixSoc+ZXzAuLDwWgq0FqXWWqmJogL4K2DQPFpCnNO2c6VVM6mQoN/r0L391j0PksayknTdo/nZ9MyeZ0FK1d6wWFzWytjsJYaAZykdlcsO2XNLd05Y2i1muCRAKyieKJ6HUoprNhv314AbpY9t3a61/A8O8W667HRbKJeb6Czgyxljz722CpYst9aq9FSlDkrJc0YK6XIhUGe5CkYk1PnGWPkNuF5v94V/K54IXgZNUHoORj2OLDOYSKkRJopmnd1JN4kjRGEITxfotFskHqsLPY/cEXf+z/w3iP6Zs3C2MQYRsZHMDS6G129PbAuesIaCyEZIBjqraZTMBmSOHVjBFVUq1Xcfd+9j6xfv35Dta2KVtxCrb2K3bt2E5/AWoJluZlgqlUpt5ZLD0brYhaAC+6ih6Z0C85FEU8lhKBC2M1sk81XFQtHrg2kI1wbTYWukJIaJJwU7ziNYdzcr5ACnhCk7ApFzgFlISGhbIZMKUjBMTS0G+1tHZBMbv7if37hq4cffMgBHR2d/VmqIfzccs8KC/AepzpjkIVqSv+e1stB4AdQibEXX3zl3Y899uiPt+/YutFai9D3IRlHs9HCZGOcooK0piWrAdo629BqtVCfnIAGB5NwjTfmoH3KNTVzBR1FFBQrZoiJ0K80xa8xzomPB5pTlkKCMQtl9LRr1e553/gTbSeddOqpxx5z3KGrnliFx371MLp7ulGrlgFY1BstWGtQrfrY9My2p//qY5/8V2vt2MySZ2Z7qbb2WtuCN7717FNuuPnnp+63bMXh/bP7u6aKXE2Ed9A1F/jetHvGdFcYm8JRTltPMGuLZIN8jGlqOoljeqdWa41Mp4Bh6ZatOyasMUPr1q7ZcMvNt22ZM3fO1jvuuf2OKy+/4lZrrZo5ajPbzPZ/qOBFrsIxURRruZUuh/twzikz1dnk0jQm5YxJKGUo45DTIjqfOWw1GiiXyggiH0maoFZtQ6lUhtYWSaqxbcsOjI+N4NQzXnXkwKw5g1ww+NJDs9WEYBxBGLqZMKCvtwecMwwNDyH0A1SqVSRZgkq1jDXr1q5Os2RLksaYnKyjXKqCgaFUKsFqAw6BUlgiGnMYoNFoQCmDnu4eWJBqPTk5CcCi0Wxg2/btYMwibjUBBjZrzsDA3sv23u/oI4849NCjjjhw/wOX79Pf079Awnuu5cZaGABJphB4HjhnSHUG4ZSEOIuhEoVyuYx9lu+LvfbZG8ZoTNZbGBoeRX1yHJ2dHahVK7CcoTmZ4oH7H3rq7z/5d18aGdndKFcqaDWb8KOAMlYNRRBxRytWhoqEzJFuc+UIYBCMIQxCGvHU2ilsnCyOgoMZiyxTRHG1GmkjBhhHuVSG7/uQnkUrbkH6HO21DrRVati5azfCarTPnDmDywHAE6IIYbecwQs8gglpDc9FsEyJplM5rpAM6zdueHL38NBGLjgBaFwR43kS9UYdxmiys4JBCIkkzaBV5op4N6PLppRczghMQc9hpwo3gyLyNj9mJJLmM7/TytbfA7T8+yq/pGhyB99lU9E0bOq7uULGnDpFC20NWLKxMsHAmEWWJaTkOWAXE5Q1ygBwT6IxMQlrDSRPYKRFZ08HBubOwZp1a8C0bQOAVrOJcq1MTQFrkcQJZA57ex5t2vM8VCtVeJ7AyOg4tm7dug0A2jtqiJsJlMrQbDbAOEeWZLBWgblmEBVpDmDEckgVc0WaJqqx70ErA2Uyd/xsoYRzLtwsr6YmDhdg4EQ314Yo7FkG7ezQ7W3tBC4yBipVmEwnoI3G9h1b5ML58+bXqhUsXboXbrnlZlQrNZp7BdmxhaAmXKPRxNDwKPp7eotGVaZSzJrdTwX/Q4+sBYyJoghJlsI6kJJRmiBIksGm5GYBZyBospyWv4up92XNHqlUlk1l1MIyaJO/53xudyqrWClFhT6tJmEZOT0Yp3tCksbQxkDCNTcMPZ/nMVjN0YpjaFWnWf3AR6kUoVypYNfu3Qh8icVLFuHmm2/66aWXXHr7Bz/8wTd4gXBxRHwP5YQaGbmaS04BZvNrdnoxDAzvGsFVV3x/81133HHTk2tW3+EHgSJXCuW8e9Inm7whGj/jDHErxvj4JLk8OFmYjSnsEjCW7OBwirYQ1ChSVk8tihmjzGbnGoE1jpyfN34onzyfPy6Ohf3Tq7u17r6eL3/xi69vKwXiF6t+hQ2bNqBSacePr/kh3nj2OQiiEgK6VtW/f/7/XbBp49pHZpY7M9tLsXleUH3jG88+6+HHHv3zBfPnHwZXflpYWj86KKELjijWmfnnca7q7lHgTnWIp1Lp2ZRim2/10YYdb03seOjRh55a9djqbYNzB8fvvvfuzQ89+MBawcXmkbGxIWhM7N61a2Lnru0xAHzgA+/FFZd9b+bAzWwz2/+5gtdlXebZr2ma0iKTcVISGNFPLWgOUGVUTEnhOVCVhuf7Lrc3g+dJaKsRxzGpvlojDEJ4XEIrhdF6E9VaDRYWtbZ28Wfv+otTq1GNaa0wNDSMerMOzhh6+3rhewEt4ByhdsuWrejr7UelWkVjogE/CDA4d+6WarUDDMDA7NmQnoexsVGMj41Dcg64wo9LiSgIkMYJoshHUA6wdcs2tBpNpIpo0kIIBJ4fLdt72fIjjzz6yFe+8pXHrDxo5YHzB+fNf06dYtxCPS/dcksiA0q+j1SlqLdSSC4ggoAItn4A7flQ2sCTnOAumgO2iYnJcTQbdbS3tWN8YgKdXZ1oNhu7fv6LG85rxskD1gJaZfC9AIJJhFEAYyzGxhIADEqTzZMzV1A4lYuUPwL71BsNp7q4mUnLnUUQ0EbD93wwIQAYWEF2ImuJ/qqNRbkSoj5RB7RFV3s7Nm7YjhNPPnGf9kpHNY/I4cVzUtFmjKMm2ynxbTqp2Ti66xOrH3+g1ajHgR8SbAwEO2pkGZiz4uYRV5kiBSwn3k4b0HXHgO3xQWgdiXHPEVq7hyCb7wdWoGVZYbH9vRTf5y2Wp1Ov2B6VNSsgXnmUDF2XzKnl1oF0cpWXCiNSN/P4GeGsvNqSCqldJi4phqTu6zRFqVyG1gphFKBcrmBiYgJr1j6NOGli9pyBDgB0zJUzhDGDNE0gRXmPdzE1hw34ngfp1EYOBl/6TQBIM4VWq0VFt7NaE/2Wu7lKDypTheWMuwzf/NwDc+8jzQoRjQtWxMxwp7pyIcCFKeKaGAw4F9DawkKTBdop4RwCOkuhtEa5EiEIA4yNjmPV46u8jZs315Yt2we+J3HsK16JUil0cUcc2iowq6FToFapYVZff2G9NpbI2SrJKJqoUtkNAL7vI1MGzWaMcqlUWJGN1Uh04kBUmmz4nEMIihXTShfnZL7gA89zv00R9pU3gaaU1Hz/0fw1NZ8ooik/v6zlVLz7Pgwz8ODyIx0UzRpDjcEsQxCFUCrD5LhC6IewkYeJyTqkJ5HpDE+ufpKo8Dr9JYA3WGuRaQVhBY0hTIOLU+Mg7025e4+D0AAWw8MjaK91YPOmLbjt9lu2lmvh5t7eHjU+Ucf8wbnYsWsnGs0Gap01mMxgvD6JIPIRxzGMBUyWAdaSPVtbKKWJgK2JRSE8H5xzKJddDs7gMUcRNzmdOUWmqKEgJfEdchie5dYVwrTPJZfQLqboT25pFjhu2d5LDgGA4046AdsvGcJBBx+CIw49FFppGJWCBx4uvfyK6y/49oXf++pXz5tZ7fyhu1wINjB3zpw5c+a2N1v1nY888PCumb3ywlvgB3LRwiXHnXf++e9+33vfcyqA0vTPWsqNpzxrbaaKVnJj2T0+p+2zCtmiTczc/d59Tg4PjYw/9fia9Zs3bl27afOG1bffefPqzTu3rF6/fv2a8dHxBgCcc/YbZw7O/7GtXK6ISrksd+3elVpr7cwemdmet+DNLXNGO7KuNWCcww8DGEWKhtKG5tQsZWoycJqBUzTj1Gw1IdOMlEIO2MwiDEP4gsPzOFqtBsK2DpRKVWg1iba2Cur1SQwPjy8qV8oHCwGkqUGqM7R3dODxxx/Dzp07cOghh4GBY3xsAkYDSxYvQxg6qwtn2Ll7aPPukd0PVaoVCEkqRhSFGN6tkGUJyuUytAWY4KjXJ5BlPiYbkzCTwLZtW2khrll5ydIlex9xxOEHnXTK8Qfvtfc+KwfnDi7tbO+oTt9RWtM+IuAOAU60pZlSpUiJltJDFAXItEaqNDxPIPQCWAukipRUAQsuAMEZspQU2M6OdnR2tBdgLgB44onVD3/qU5/+4vU/v/7ywTkDKJcXYOeu3ajVqmjU62jWWy5HkkH6lGWrjUZmFbzAB4yBcjPJzNmJrYt9CUMf2tFJhRSwMEgzDS8I4XkSWeZszIpyLbMsRZop+L6PUilEW0cNE/VJxGkTBx24cvl0hZsJjjhN0ahPwg9CVKJyQQcu1Eo3Q2gtMDY6jkazjoceePgBt6iAthqSCcrX1QqlqAQLA5XQ0lMrIlTTfCsRV62hTNY8C3SPex6bFqvDpgG09uRoFeAaa7HnTC/7PRRf++uqYDZN1c2tnbaw6ho7ZcuCzeOFLMCclTXPIHTRDHlcTW4LZpxDp9opW1RUWu0ssk5lq1TLiJsJOEvgeRKtRgvVSpm319q6AKBUKYMLVhSwYRBCerLouNs93hOmYpEA+IE/EafpTgAYGx2FyRTK1SogPGRZDIDI8MqyAjpGM9k0SkD2Ul3MqNL1p6dFE1lMt3dTayOfaQU4OLxAQisNbUjJ9QIf3BPgYBgfH6M8XM5QqVYpustr4aSTT1p+2CFH9LXiBFpTpJk2poi5kp4HAYZG3MTI5DCkxxF4IbJEIUkyVKpVgAlkWdoYn6hvyM/nifFJpHEC6RoN+fHiXEAr5fLNybGRZZmz5BNEcKq+yenV05wRrsFkGEU7WUZqL42VmGkwsymF2FoDwSgfN05iSE8QqT3RYFxASmpalKII1kZoNhuoVqrIYoVKtQIuBIZHRiADia5yGc3WMABg7dNr7vvJtT/btGjx4rl7L11G52JOF7dTagzL4U/MQltDjVV3TkUR8SA8L4C2uhlE3iT3OOOcWyEFkjRBmqZo1EGjGVajUa8TmM0aB0ukfUv5yzQnnCnKfPcko0I9S6EVNUSEkGCWbPT5vrTOFWKLm5Ypmg7Wod25sztzSw0h/AlJzbPnDu7z2X/8zNuXLlrYtWrVY2hvb8MhB6/EYYceCmuBZpygXC5hx45tu772lS9+O23Vt8wsdX6/bcXyFYuPP+GEQ0cmR/f68le/uvz4E05YsWjhwlm7d+64btk+e7/vqVWrd87spT23WbNndX3wIx98zTcu/OZZb3vz246cGB+r5fGGOaOBcb7HqBFnU/8WHNNUW1p3Gsb2pKO7j3VrCOD32JNP1D/1yU/915Z1z3x33dNrHh9rNRoA8Ff46MwB+T++dXZ3V7769a98cP/99j/uiVVPPXHW69/w3R9cdeXdM3vmpdtmDwyycikScb2pN2/f8kf7cPR9r+cdf/bOow/c/9CDuWV84zPrN95+601PPPjIg482kmTiOQWvFBKpTovxRWudKpEpinlwygAsI6WUMYRRmebPdIowiMAgkSQxMgWURIggDIiaaRRh3lMFKT2EYUBqjeGYGB/HUUccun9/b3dPrtr09faCWWDpoiXwA98pgAblShnccuzYtQOdXZ0IwdFqxrjie1dc++Mf//Cu8YlJTDYayJIE5WoV8+fNRZYkGB0eQ71RR70+QRAX6cPYDG3t7aUDVq446swzX3PCYQcdftTSpYv37entaZtecJLKRZ1DmlsTZDvkpGDGcQJrLcIghPVp/oSUUgIFRWHg6rvcpkoqkXBFX76YZYK7CCWDp59cl8Bjj19/w7XXffmLX7sySeNfuYgXio4JA6Rpgma9DiFp/wiPu7lcRhReZahYcIUDAyn0xlqCVzmglDXGiZgMnAn4rmGQpimklIjjGFmWkXLnefDDEKUwQrPZhNUGk40JdPV115avWL4vACilIXMbY34eSaJ359h/6+jNpL4awHJ0tLdj99DQrnVr1j4NgOip2sArB0CiYI1FphSUpugUyTmRavUUtEk56BpRwVWhfNFsp30uQfXZMUR5wU6vysUX2aJR8OJue4KzckXZCU6Fsjxlk7ROaGZTErkrdrngrjDSRf4wKZgg4rFlYILBcvp9zylfSZJAeoIs4z5dl6UwQpYktSiqtFNBxaE1LfwnJybheXT+GeRAKYBK4efGTt1z933r7r//gTXVSgWe76PZbEBrjVYcIyqFSOIYlllISaCk3H5uDAPj04BcjLmFUG4RoEWQcfOrdC0KIse7+VUYgMupjGIpCcgG7opAy2i2v1xCM47RaFDBlCQNvO6s1xzZ1lYrPfrYY0izBHMH58Joi1mz+qHdSW0B+EGALtntZmnpvZfKJSc/c1xx1Q/u+f73f/BQqVJBkiTwPYnYGjTrjaKI55KOVWYtuKWM2CzLqADOmzSuOGSMOTe7KZwSzNn3lbuOsywrmnF5HpjJ4VCMwSjjFBUJozU834PPyfbNIYvcXMoABpIkc0Wri6izBo24gUq5glqtCqU10iRDKYgguzguvvSSzeW22uaTTjhx7h4cVYuiSCzm6pz7g7sGE11yDKVShZShKAATAo88/OiYMZRvtmnTZsrRbbh5Z8FQq1WQpApxq+UQBIYI2HEKKQUB7JS71xmDLCVKdd6csdY4m7Nzpbh7IKzbXwXrFUXTjrn7rDEGSmWuScbzO8efZHvXu9795g++5y9PuurKq3Dd9T/D+g3r8apTTsVhhx1JsWOhD86AK6+46mf33//Az2eWX7/HXZqx3nPOPufs62/4+Ttnz561Yo/PDgb09fSfFcjwAd+LPp9mrexP8ZoOPeKYY7/xtS+/u1QOe++/997HL/7OxT++8667b201mvZ/0H4LL7jgvz717ne/80P5/qrV2goiOywAFxPk8vX2SC8ogFT555/7OW6f/QlqYA0raPw/vuZHV/34mms+5qjJM9vzbGFQ8vv6+mfPmt3nPfboY5ubrUb8x3quqFzp+8Lnv/DmM199+lG33nTzzh98/5obr73+upubcWP8xX6uU151yrlvf+vb/w5AaeXKla886zWnH3f0kUecc8dddz86c9T/dFtUqbW/7W3nnv62t517xu2/vH2vUhj6gvNdP/zBD2/70Ac+dPXGbRtfNJp5VCpXznrdWa+56eab3/Gyo192NIBi1s6ozzTvuefu6w4/7Ihv3HvfPTdNV/ylMrrI3QUswjAA5wJZk+IcsoyIl1mmIIVEe0cFaaqgMoVyWELmQELlchVgpIaUojJqlTZM1McRtxJUa22I0xjxUIJqpQrhMwRhgBX77XdIvTEpjdXo7OqG0gZJHENpg2oQTakbgiA8s/v7wQXDurXP4Lbbbl/zy9tu/8nRxxw9NH/+fAzvHsPo+BguuexSCMbR2dOHNEsxPjnG9lm+fM7BBx64ZGR8ZPa+K/ZddPJJJx6ydMk+h/d0UV4DAEcANs5iA5f36SJQPDm1hHO7LlUJjLZEXYWAdDd0rUm9Em7h6e7HznaKYmHEhUQOc06aibr4ku/85AvnnXfBxPjoHeOT45OVSjsRRrXBxMQE5WAasp4LIQulyBgFpSyE8IhqaOh3hCdgtCP8ClIipKTFbpY5hTTTSE0KLriz6Wkoo5EmCaJyBHCLVpIAMAjDCJxXC7Lp5EQdy5etmL9k6dKF9PFjYEAFfRAEtB+FI7Yij/ZwFnAX8q6UQhBIrHn66Ue37dixrlKpusInQRK3KDpGcjBYeFzSTLcr441Td4UQBbCCSwGmFfI4IvasApdiPveMNXh2KTpNC8YeSOkXeaMCle2hJOfF+XTrdQHisIBgDFYIAnNBA1YUxTx3hRF1zikTVUgP0pdIkxiS+5SpyhkCP0CrkVDck6XjpaxBqa0a9s3ujQDKus3Pdc/34Ht+8dpp7lvsYVHX2mBkeBzapHj0sYee3rlj++aOrnZwJtBqJQ5ERQ4RKnQNtM6mnRNkuc6jliwYhFMoiVpMkT1SeuCGU+ySO2hS0riE5BzM49DaIk3osZmw8D2fRjUsEXul9BDHCTgY0lQh0SmYZbJULu8LAB1d7bjggm/h5JNPwSEHHUL71+bxxgQ1ktLdnwwgPYHA+kiSFOOtcfzs2p9c24rrW9raOmCUQbPZRKlcojloQQ2nJEmct5fuGXEcF3O5jDNnL6a8cwa6Vp4NMWPuvPCEgBUMOnMgJUYxG3za/rOFu4Iq5izLCieEgQWTZPnOlHJqOhFLBZcwGohKETKjMDIxDG5pfweBBz8IoJXGwgWLuo8/9pXdvuchzagQ9IQorPfMEiWZO2ozZ+6CtFPgMwCIWzH6ZnXiM//4DwvvuvPOrpGxEbTV2jBZb0JYgUqtCmMNtAPTZWlCThUuIfhUk0hrF79lyELPwIrIJe7UJWZNAUiDE42Znh5l4mKt9riPMKLF5gqw4dNcJH/8rbtv9r4//PHVpwFAW1cVURRhyd774r0f/KC7Ngn2uO7ptZu/8B/nXZhlqjmzFPvdtmV77X3MTbfd/levPOZlp2Ia7shai2ajhSiK0Gw18LnPfvZ9l156+S7G2HestUoIjwnJWZokL2r3ww/D3uOPP/mcH/7givfPnj1rEQDstXTZ8eee+9bXfeaz/3RBZ2/nt0d2jbwoKr6Uku2/4sCFrzzhlXsJbsqNybpmPODt7W2Nn/z4J+vXbli3fnJs7AULpdNPP+uMd7/7ne/K742WAVzyQrzIwZk5r8FOH8q11JSEnkp3sG40iU9zqYHlMZoanudhfKye3nj9L66cKXaff1uwZMGCs9949ilXXf39k/bZa+99B+bM1ld9/wf37HvAfpetWvX4rTa16Yvc9JCf+vRn3vOX7/nzvzYG0evf+Eac/uozz/nxz358+ezZ/Z/btm3H1hfruWodbYvvuvOudwAokVtKICqV93nbuW87DsD/iYJ3Vt9cFqcNNjo6/Efpqr7sqKMOfNs73vG6BUsWD65avfrBa3/60x9d99Ofrf+dPpd6+5ZfdfVVnzjtxJNeDyCc9q2lZ5515tHL913+ur/7m7+75Nobrrv44Yce+oPuVaUo2uv8L335I3/+Z+8+B0Bl2jKU1mpSlI48+uizfnHbzYd+8q//9guMsQustQ0AkBwM3KM5MqUU0pgKXOkJGE2LH+6yC5UyaLUoD9NAQ1tauHrCg5AUF9JqtOBHASq1CkZHRxFUI3AhkKUJ4jhDKSphYnICk+P16jHHHnvwnMG5aDboM1mlCpnSqLXVnKWOFvLWoVjymc3u7i5MNia2zFswsOmIww7F4OAgWvUYYxMT2LVzGy+Xo7YDDlg5l3vygCiIjj7mZS97xcoDDlg8faelqUKaKkieK7cczrUNN/JZrGHyAkswTgRkANVytVBrrCEQi1aarJIOEpNbVrWlWJkCjuK2kaGRoWt/9OObf/ijH11z30MP/iLO0iFSuRmarSYajSY8z4OUAibT4JJUCZqzU8gUFb0UmJ4iMY60yjh830Oz2QIYgx+EzpacwBiDKCzDkwJNTbFLFEVlASkRBgE4E2CWipqkFaNUKkNwgaHh3ejs7kRHexfWrluDlQfst6gaVroIksOJ/pvE2LVjF3q7ekgZDjiacRObN23B/HnzEfg+tKb9wSXQqqf4yY9+cvPw7l31ru4eqCxDrVbB5GQDiUrBOZFUOTiMUW5ek8NyVsx2U+FP6nTRXIAle2IeuesyQKdmdfcY/S0umVwZf8GRPIvf8A32a8vc4oxi0zrZjGy4BUCrsOnm8+Hu33Zqzomoy2T9nYp8YTQbaabGE+JmyymENL8KRqAymgEHRkfHUK5GaCUxxseGvV27toeLFi5Cs9FCra1WxGgZQ1m0XHAwK8CMmyl17zhNyarsywAMfLs1VptMI85oNj7JUprNdtnd5BgxTi0jixuDgLXaRefYIpap2HPWgcjohCNVzzioVRAW1lTAQLjZYJ0ptJSB5BKekIAgG7PVFo1GHZZZVGvtkF5HW62rYw5As/IrVx6EwcF58D0fmdI0my44koTmRIPQd+KDm2EO6Trd+cz67c+sX/tLxjjKlQqa9QY86aNULoOBo9lqFKoGEdwZDKdCnINB+IFTq10ckXVjJm7+Nge3kC0QhTWQFdHSNLbApsVv2D2KOsoB5q6rZ40Gh3Dvw0AbQPoeZJ5Xm2XIbAbpS1TLVUw26tQcVTQrG4QBNm5cj1e/5oyTTznllGUAHISGuVlqd/wYqcYAUAqD6TfXqcYJLHzfQxiF2LtWW/DWt5978vnnnXebhbWeL6GUhmEMRmkkSYIEzN3/KG/W9z004xZlLReLZVJipZBE7RYSsJaYDVw49ZpIzVYz+O53tdKU+ckspEsbACeImjHkzuGMT80Q8j9NwfvWt7zx5MMOOWjFHXfdDmY5/umfP4fJ8QmUAvq8lI6l+K0LL7xsw5b1d80s93+nhTo75PDDX3fZ5Zd9+uADD9x3z6YjXR9C8KKJe/oZr5oTt5LP3PHL2w78xF/9Vf3HP75mPhgvX/G9K3fcedud995w43W3PbVuzdrfd6awo6uj8+1vffub777n7nMPOmDlgQAEMTVo7MxqM+czf/8P//iX7/2LY1591hkf/dEPfvzY7/veq22V9sOPOuKYCy+84DVnn33OCUEQDDz7Zz7xiY8P33//vfe+8U1v+sGjjz360ydXrd5jhrlS6apeedXlbwdQ0dpOsZXZdD5Gbpdwi1NGzfLc1gzn9pmYmAQYQ6VannYP41PXtQaN6XjArqEdd6x++sl7/zefe0cddXTvwYceNuvrX/vqujSJ6y+G0v6qM1718tNPP+NVX/jiF496zWlnLgfg52fiuW8+Z+m5bz7njG9c+I2LymHp3xtx80Wz5u+zfL+j/+I9f/FnWWqiOE0wMjKKKPLbznnT2X/ZVi1PAvjrF+u53v32t525fJ99DwGcO8kqcHjYe/nyff7gRpMf9P/H57/wuqVL91pw0bf/657bbrvllzt3bN/xpzonBufO7X3DG84589sXX3B8f09v5bzzv3TreV/+4iUb1q7f/qI0T3t6+cc+/pE//8nPfvKJ9vbOBQBw3Mtf8ZZzX//Gk5fvte+bH3/yieHf5nGOOfbYV1x3/bX/esiBBx1ujSW3q1uoCLeGWbzX4mWf+7fPffbt73zn0YvmL/voug1Prf59XvMxx73itDvvvetTK1esPJQctbZwp1l3rzHOnVkJo8EvnX/e59pqbS0A3wQAaWChkgRSSHAHZtFGgQuBIIxIAdAWViekHIEWRCpL0Wg0EPgBLeSaDbIPcgHf8zA+OoZGsw7hSbTqLYQlH7Nn9yFNKLtwcO7sxYLzvQAQkVkpGK1QikJIXyLTGoIxpCoFYBF4IcCI+NvW3obAl92jw0Pzfnj1j4YWLF5Y8aTs8INo2TnnnH3Q4mVLVwwMzNmro629vxxFzFiNRhxDCAnBKFe4Xm8A1qKzq90V8I4cOq3YKeA8DEWsS55Zbt0cL7OgbGILcI9Nm5cFjFaQHi0e845nsxmrp9Y+9eQ3v/Gt6x975JGrNzyz7r5Ws6m9MEQQlbBjxy406hNQVhO9VTCkKoNSKZ1AXCIIPRhoqEy74sZZo5kA4wxZliJuJjCa1Pskbrl5V+OAOBmyNHH0XgGVppRxaSziuAXfC1wBy9HW1g7BBJQy6OzqQikKi1nRFfuuWAaQnVmIPN9ToFIuw/fpXIC1kMJDminUGw0EgQ/GAKVcvvHE6PabbrnpVik9V1QIKG2glILvedCazkdDnFyC/MDAaAIdWeEaIYoaDDTPa6gCmB40b1kxL7RH3TodHPXs6KQXLHaf/UMWvx20Zg9KVlGgMMsK0HQBKXJFbD6DbZxdHrAQTEAKCW005Ya62V/LSO0DoXTcPDNHEATgYDTTzel4SE8ijVNUahGE5GiNtbBg8YJyV2dXpdVKYDRdj0wzKBiC1LlFvdIG46MTUCpFT28XjLMZd3d3goFhy+Yt24QUsIyh0WwBFvB8Ce4JMDe3arTOsUsIPI+uf2vc8ZuiZudAEiouDLTLYBbTKMSpVuDC/a4ju6ssdZRjRpAiLuD5IaSQaDVjR/um+XXGgVlzZ1fnzR/sa8UxYAUOPvBgrHl6Lfq6exEEPrTRUxTk3C7MpjIcyWHAsXr1qvvWrd3wRLVapfuoJ8DBMTw0jLZaG0QikGUKpVIZDBQPZk3ejEHhtLFsemSWLSzayGndDGBMAIauv+KcQW40RxFBRk0ir5irNZrI0FZTwSylQJZldO9mHIEfII7pHCiXK67ZqRDHibvfAykXiFsJdu/ehTmDc5Z/7KMffUtRKFJHDqnJyErvbOVB4NP7yxtR01yLjJHrwxpQzi2Ac899y5nf+Ma3rknS5N4wDGHBMT427iLLKmTjNhYZqCmrNEHcpGCOQxCg7AdoJU0wzlwkEXPnD3cjDBZCeuCCI0sTKHcO0lyuuy9oC87I9ZDfh/KmTBF3Zv74lmbGWPt5X/jiSc2JOrZs3oojDj8Ka9euQztNIRQwxM2btm68+pofXvHv/+/fZqrY33IrR1H0sY997P0f+/jHPzarv78vB/0xZ7/ljAGMI4xCaEX3oCzL8Po3vnbw+JNf+b4wCBCFU660N77pDe/etP4Tmy695JJLent7L9q1a9e63/FYz//mty/8pz9/x7vOna4w59n1HAxJpqzgnPV19h13zmve/E4AH/49zinvtFNPO+mnP/np+15+zCtOyK++QklVzknlCVQqla5jjz3u1BUrDnrlgw8/dED/rMG/3rF9cyt/rIMPOWjWcccdt39+72FCuNdM6QEWU3O4BZUfU2urZqOFrdu327aOjtbjv3pUbd68ITr7TWd7vhcU2bo524JLgVajiZ27to9944KvX7Jr+7bR/63nXm9v/6ybbr75C/st3+eUQ1YeeMXihYsv275z9/BrX//a3r5ZfcNf//LXnmjUJ35r9fqYlx972DU//OGHjjrqyDN6unvK1gKjoxOIwsA1ug2sZeCctb/n3e/5yPrHN9QZY59+MWBPjDH/W1//1rkD/f0DzUYLURiif1YvsiRxa8b9Dlm6dHHp6afX/sHOk56Bvr5bbrjptYV7gHFyVgIYHR37g1TEOYNzFl115RX//Oozz3yDtlacctJxZvXqNbcefdQx/3zHnbff+sc+J/Zfsf9BP/3pzz67/4r9Ts6/tvKglacsXrhggef7H83StPWHPscRhx962t/+9d9+BkCf1SQAcgZYbV42q79/GYDf2DDd/4CVL7vuuuu+PHtW//K40YInJbgnYYsMbKp7VEaOvCVLF5184YXfGt1nr/0+uOrJXw39Lq/3ta997dt+cf2N/+J73myjNbI0g/A8GENuXHA25Qx0a0fOWelt5771PQvmLLhu/Zb1m+B7ATzpEzSGcXDuQUrKr/R8H0J4iMISylEZUgZo7+hEtVYD5wJhUIIUPqTwUSnX0NbWhY72bixcsBi9Pf3o7O7G7NlzMDAwiJ7ePuyz7z6YPWcApXIJn/vc595orbVxnFhrrd25c5u9+Zab7JatW6zSyiZJYrXRVunMZiq1Siurtbb0O6m98ntXNi785gV3ffn8r/3shz/+6f2r167ZNjw2oZJU2efbjLFWafd3a22rmdpGPXbfM9bYqe/lf/b4fWutdo8z/TG1VrbRmLRGKWuNtVu3bjNDO3fbLEmKR0njzN5378NbP//5869+29ve+eHjjjvxoL6eWT4HRxSUsHD+YvR09iPwKxDCR7lUQRjS/i5XqiiXKy4OhoFzD2EYwQ8C+H4ALiQ4F/D9AGFYQqVcc3AfDil8REE0Vay7ZoVw+cZcSng+Hf9yqUqFrpSQfoAoKqNUqaCt1g7f81CrtmHW7AHMm78Qhx1yKBgD/uuSiy+i96esUsZqa6wyutg3xkzfb8Yqd/y0NjZJU2uttd/97uU/FUKWe3p60dnZhVKpCs8L4HsBQr8ET3oQXEB4EmFUQhSWaRaaC4racTRxltOhHSFauII9/zrcPmCYZv+d9oc7pXiPr2Paf92cH+d7fo0VvNzf5n94zt+nF8PCvfbpz8sZp9eVvzcQjZkKPuayQqfev+8F9LuCgwlBxbHnISqVIIUH3wtRrdZQrbWhUq6hUq5hwbyFaK+144jDjzhkeGik3qjHtj5Rt41m06ZpalOVWu1OfG2tVcbaNEttq9W0RhubtBI7PjpurbV2+5Ydyctf9orXRVEJHe2dCIIIgRehXK7R+colPM+HlD4834cUHjwvdDFKKM5dwQUdV+7aUM5KzxiD9OgaEFzCkx6k8Nz36XzwpE/E9TCEJz0EQYj29k5EpRJq7R3o6uzF7P5BdHZ0o6urB2ASS/fe++CtO7e2Mq3szt277Zp16+ytt99ulVbWaGuV0tZYM3VOG/q3NlP3hImJSftnf/EXH/HDEF3dPajV2lCp1lCq0LXc0daDKCKltxRVEPghuKOhE1GdjmPh8psGqRJcQDgKezE57d6r5B5Zepmk80h48P2A9qF7jKnrhIM5WBPR9X0wMARBhFKpCikCMAiEfgmVUhX9fQPo7xtAuVJFT08fqtU2dHf3oL29C3vvvS/K5bL8zKc/80VrrU2TxKpM28nJhm21WnZsYtzWG013DzDPuac+e9Na2zhObStuWqPpPv6l8877797e3s5ZfbOxcOFitLV3oqOrC51d3W6fdqNcqiIKy5CCPq+4s0NKKVEqleh+ICSkIIXXlwGk9CG4BGMCvhfA9+hYSOlDSG/qGnWgNM6E26ey2I/uIIEzahza3PHzR/pz5JFHHL9l05bRX952h/2rj3/Cju4esz/4/tV2aGjEWmutch99553/lfP+2K/l/9IfAPITH//bv7fWxtZamyWpNcoU6wL6nNdWaW2N+3yz1lqlDf3JjLXa2izRVqXaarXnmX7D9Tfc/trXvv4MEYTeb/N6KrXK3tf94tpr6LM1tc063WeLdYgxz1mc/OL6m37V1d7d+7u877333WevCy+6+CuNZms009o2my0bx6k1mp7DmKn7nXX3Olp/ZfaBB361bc6secdOf7xz3nzuImvtBjoXNT2Gtbb4f23ss1+6yrTdsG5j49GHV23atGn3zZ/9t89/5qCDDzt65coVH7z00ouGi3tDvp4wxhqlbRorazJjv/WNb1zb19fX96c8X4TwvXPf8va9Vuy3f9eL8Xj//Nl/+Wz+2Wqt1ccd98qHjzn2+Jvuf+jxx7590Xe+d/Bhh+7/W57HlVefedZ74jR56pn16+2DDz5i42a2xxqWzmU6CCqhG8aWjVs2L5q/6NAX470ccvAhL5+cmBzJ13nFc2X0XN/61td+Ui6XoxfjuV77urPeku82k69PtLG33377rhNPOvnoP+B+ID5/3vlftNbaLNPFe7DW2k3rN92+eP6i2X/M82vOvPlLN2zefKu11mqV2dGRMZtlysatxLbqyeMnnnTS8hfhntd9wYUXXlMs6rS2WitrMmV3btluDz/o8Hf8psfo6Zu15Oabbr7ZWmvTlO5TcSu2WZYVx0Irba27blut2Ka0L7MPf/CjH/ldXu9bzjn37dbaIWutbbUSmySZ1ZqOjTHGrcemTnSj3U3DbW98/dnvtdZCMk6Kpx+UwMApczOJC6ouA0GbfN8HExxpnCKOmwjDEoGBrIHv+WR5zFIwxjA+MY5KpeIyMSVKpQiNZguVShVj42NoNppI0nRFrgggAOJUYWJykoptLmCl03/YVNytdTbQwPfwuje8vsQYjnheIS5n3DgyaQ7VEUVIORBGHkWY5DRcTJ/snJYXW+wHt/Od8pQXTdt37LS/euwxHLBiBYTw2OjoKJs7OAjp+xifGJ38r29efOeqJ1bfvmto1z2PPPboY0PDO4d1ptHZ2YWoVAEDw9DuEXgOShVYjyJgpEQpKiHLFOKkCc4FoigAs6B4FC4ReBTJkakUmVKwJqFFLjg0NLTJAA1SboRX2NOhLeAUH6Oocai1pripwIPHPBilkakUmmuEUQmcCUxO1jFrVhk7du5ApVYpz+rvWwyASM/OZpSDv0bGRrBt6w7Mnzcf1WoJOSE5TmJSW40FPA8PPPDQI1qrhlLazYMbikxiAlmauTWlgMoUPGFJpQQVdkpn4LkayIh6qzTNqVpH1C46zJjKd52u9E6dW6TSFLCqYq7IHX+Wg4Kerev+lk3RwnYMTDEoURStsFOUZip0yMaVA4nzv9B4Ab0wyt11oB2HpE2zhGzH7rrhkrksVioABedIswwAQ+D7BF3jgBf4YGCVqBSWoyhAkjCK66o3UalUCT5mbZFxzKUHT+YFFke1SlDz3buHJtNMbdXakMIPOHK5IuiYYNCaBiV5Dv/JEgghwWGLmCXr3P9Mk++NOWcGQLbSVBunFgpX0OTWXvqvcJRxwSUil8mtVAalFES5inqjDq0VOro64TfqWLHfvgtn984Oh4eH8fDDD2PRooU49JBDCAbs1IkckF1ApaYp8QAwPj7WvOeuu+7njMMPAjQaTUSlEHGsoFSGRnOSrOWCO3q0LRwleTyPBQezeirLZ1qTBECRXczyPOncxp37mgEHF/SK+WjuQG+cCfhBWMTyCE4ztMopLzn4SkoOpRJ4QQlj46PgXBKrwJCyKaWHSq2EzZu2YK+9lh333vf+5RsAQAgPFhbSI5dPEIR0prv4qNzJWChme3gk6HUKaTE6Wkfmh6jWqvjAhz50zv33PXTPJZd/5xvtbZ0IwwiNeh2pSgBYxGmrmGXO70OMcUDQuakynSsPxbljQGRXIQWs1lBKg4NmlqX0kaUZLBNuTt4WjQetyYUgpOfAgHDcHQ5m+R9dCXr1Ga99zcDAQPu5b3k7Km0VXHfz9dh37+WoVmrYuH4TypUynnpqzdBll15+/Yc++L4Z2fa32CqlsvzoRz72sc/9yz//NYAgjclRJv0per7SBnGSIAxDgDGkSQYuuKOtWyRZBt+TEIK7cSMLozSMOydPOOmEl51w0gmLP/DhD/xjbq17oa1/Vv/Lv/Sl8z958nGnnDi8czeCKESlVkWSUBpEuRwV5zvyzx/GsGLlAQvmLph7IIDrfwsVTpz5utee9cs77vx4V3v7ITt3jkBn4+ib3UvRXEbBk9JFvxkIyaczAxEEEgcdtHzWX/31R17HGLvTWpoBvezS76z75je+fvlfvOcv/5bnYDox7T427RJJknT0nvvvve3an137i+3btj/0zNoNw3vvu2/c29+784H770kGBwaaxx93IgcAZU0Bu4NxSRCTkxCexNYd2x/csWPHH5WUvXDh4trJJ57U/V/fviBOtRr84nlffuOHP/C+d+7cteOBfffZ69NPrHryzt/3sectXLzfXXfc/iYASBOFMJD8gP1XHnDAykNx9113m56eWs+HP/TBG3/TPKrne93/8fnPf/LjH/3ouzes31B95KGHcOJJpyCIZOEiyw9gfu8VPn0+DwwMzPnzd/35mwHc94fuq9ee9drXVqqVDuOgovlaS0h6rl27d7e44H/wzHBnd2/txz+65hwAHNPs8gRd1Gvvv/feJ37fxz7okIOPfOtb3nZOo5kQAJATxJBLjsH5g0fut3y/lwP47h9rrOLf/vM/3zVvzpyXA8C2bdvBHPCx2WjhgYceag3tHvuD1fH3fuD9r3r3u951Gn32mmJxy6REe2cHTj/zjMOXLd3rO089/eTzOgs458FXvvqV9x37ymOPzZIM2hoEpQBWk3uAXGtkOc7Xe77vIckyeIEvP/ih952zcuWBP3z44Yd+46zwm85+8xsv+c7FnwXQpZQlgZbn3BdMpcBMI3oyB4LNYbAf+Mh7z9x7370ug8d9CCapw1+uIgiccuIFaGvrRBiVITwfnhegXCqjFJQQBSX09PTSosYPUS5XwbhArdaG7q5eVCpt6OruQ2/PbCxbujeWLFmGwTnzceRRR+DwIw5FVC15l1/x3euttTZJSOlrtlp2ZGTEdQGNU3e11dOqdm2nunzWPFu9NdRZNdYqa6zKlcVp3a1nK7jKaqvttM7As7VdY11/0hRtg7yTpDJlx8fH7K6du+3w0LBN49ROjjeszozdumX7zosuuvjK4447/jVRVK11tPdg4cKl6O2dja7OXswbXIjZswfR3taJzo5OVMo1tLd3or2tA7VKOwT3EMgAPV19KJfawJmE5B7CsIRSVCmaAFL6kDKEkNIVc6QCCiGLiA4GAS4EQafc14SQCKIIvh/A80jNDfwQnu+jvbMdfhDAEz48P0AYldDd24PenlmYP38hli9fgVqtHQuXLFq4bdf27XkXLMsUdVusta04truGdtoNGzfYifG66/bQgYrjlm21YpvEqc0SY9909jlvBhh6e3tRrbahWq2hXK6irdYBTwYO7iVpkV2qohSUCoVXcAnfCxF4kVNCuVNhRaEShiHNkJOyO01BBZ6j8OZqzrPV3+lRMHv83m+l5L7Q96cK3qnH58V/OZ8iIHM29ZicuzgUp/jlFk3uKjHGGZjkdG4Ium7z1xqGEbq7exFFETwvQBiUsffey7HffisQhRFOf/XpZ+ZKW73ZsLtHhuyOXTvsZH3iWdeELVQ7bZRVijp6q59YrZ94ZNWGN77+zfsAQHutC54MEAYRPM9HFJZRiqrgXGJ6DjGpst6U8ij9oshgTvnkjM4D7pRtUvFFoQRLz4Pv+xCc5i3pGvAAISA9UpKjUhmVag21SjtKYRXtbV1YtnRvCO7hve95399Za+3wyJi946477Jp1a+zY6JjV2lil6OaTqxNak9rhNN/ijrFu7doNixYtmt/e1o6Fi5YgKpVRq7WjVK7A90NEYQlCUMHo++4aE6R007VK56Dn+fCddZgxgowxN7NNvy/dfvKcNVvSSAqfiobyPB9+EDn3h+esg2Tr9jxS2oUgtZ0xAV+GhQIalkJwySCkQKVSRRSVEUX0Xjrae9DR3oP29k4ArOuKy6+8plBrlLZK6eI+mmVZ0e3Nd5I2xmZGWzV1V7XT77L5vTVpJkWD9uYbbn5o1qzZc2UQYO68BQj8ErlAfA+1ao3U8rCMarUNDILcKaUKAr+EIIhQLlchuHO1cA++H8J39nYuJDiT4OBFTBFAoxVk4WfFfkHuuhAchWmE5SZy+UdVlRYvXnbI6lXrNjQmm/bLX/myvfeeu+2WHdustdaOjY7bdWuesju2brN33XHPLxcu3KtvRrn9zX/6Z/eF//Jvn/uUtXbSWmuTVmJVkliVZjZNnavMKGud2mmttUZrm8ap1VpZpbXNYmVVZmyaZlZlyhptbJYpqzJllVI2S5XVGf3u6PjItjNfd/opz68ayspHPv7Rj+8e3bnRWmuTZsuO7B4hhcRae/U1PzS33f5LY621KneXPEsx/fKXvnL+b3rPBx1yyP6XXn7ptzOdTlqdq3DT1lXW2l3DQ3bd+mdskqZTa6tcYZ1mc5uoTw6ddtoZr5r++LVabfDqH3z/J8/n4JiYrGfPbNy4/me/uP7rJ5966iF+UPJf6HV+/KOf+PdGs+nuK+TuM+59p0lqn1z9lN22Zas96ZRTX/vHPEc6Orq7f3jNTy/MUrXqFce+8ravfONrT1prVZrQcXn04Yfueuvb33rg7/v4n/j7v/m4tdbqTNutm3fbJMlss9Gi63p8wq5Zs2Hkve/94Lm/7jEWLlm84uprrrnaWmuzNLNPr3ratuotq52rrlDapt2IjdnTrZjG6dajjzrmmD9kX82dP7fnqbWrHyL3g36WG5L+ce89d1/0YhyXV73qzBOttcmz1yXWWvuDH/zwu3+IunvZFd+92FprR0fH6XPeObystXZibML+17e+fVF/32z+xzjf9lu+4pidu3ZuttZalWZ2aGi3zbK0eH/X/vyGy6JyNfgD1d3ajTfddEu+1stVf6Wm1nLNRuuulQcc2P5Cj3H00S9/x87tO4fJ2ZVZraiOSpPMZpkpjvn46IRtTDZs5hT+LFM2c07PD77/A6/+Ta/1wJUHnzEyMrY2d4PozORl2dRa9AWsY+Qwye9pw7tPOPGkfaTwBAIvRBInyLIYwiNroe/5RBKFRRgEIAVOO8qexfj4OIzlCHwPfuBBG5qxyrR2C1GG9s4ajDLIUoVyJQIsw+5dwzjiqGOWn/2GNx08MjqKSrlcWMPCqESzHRbOwjmV8TklkuUwH1vADxhjNHjC6KviWbqbIbHoOZOWeQIke54ZyxxUMb17pLVFPNnE+CRlx/b396OntxvrN27cde3Pr3/0mbXPPD050Vi9dfvWR2675ZZHVabqs2fPgtIaYxMT8CTN79WbTacQaAA0U5tmMc2t+iGEx5GmGYZHdtPiXXqA1cjSlN4jp8Wr1hqcmQJuJAQvAA+58gomoHSGNMsozoNzmkdUVFAolUAIIsPmx8r3A2Q8KyJM0iSFtSkss5g3fwE2bd6Mvr5Zg7N6+vtz8IQFoHQGCYoDaWvrRE+XnLZn6VXmCpPnSYxPTO5+YvXqXwEWzTguwD1ZmiFDBuEJcJfVKrhAHMek5ApGs4KckVqdQ56MU3fcz+Sz1AQQmzqehdpq91R4C+XVTmXkYhq47NnAjd9qVvc5Ku8LfT9XDNkeMK28m8+KM9jtTfe+cjgR5wxScEgZoNVogUuaQ6RzjCGMIgAWjXoDXArolGa8jdLQDKjWqpg/ONgJAKnK4Ps+oiCENaSqazuVRcoMc8Rrcl3AXafaaLtt585Na9evHRXCQ6ZJMdQk8SHJUlhjICWHlA5C5N5jnqFs8+vekpporJtTxxT4JGc4Y1omrzUG1oGWPCGgrSHFTkgkLXI+VCtVKK3QrLfgez6CIESapeAc/uJFi/ZpxQm8wMO++y7Hjm07ivudUgYmh4lZIM0okq1cKhWUbcaADZs3rR2fmBgy1qJer8MPyIGhM4UgCui1pjQ6YrSG0U7VZAKaafeeLLQhWjwYJ9iST7nZyu0jmsECrGCF+8BYCv2iuWRybHCn/E9XkimGxzp1yjkKOKnCzEWuaUX71/dDeL4Hm2aFmuVHPgZm9eHxxx7Dn//5n73lDWe//szh0SEYY213Vw8zRiPL6P5jjIHv+3tcLnza+b2nyEtfb8YtTDaa6G3vxM5dO9DW1oFjTzh25emnv/rcb33r65+bnJiEgUYQeNBKE3nbWuISWKLTZ1k65RKwU2RqxgVxKIwip4zRECz/nCHIltaaCPa5I8Q5DbglCznnRCQHo5EJwwwYuLPe//G201512qsXLFww797778Xg4DxYbnH7Tbfi7HPOhsoyVKo19Pb120svv+KWdetmsmF/CyWFv/YNZ733b/76k58AUImTlPLplYJWBIaEoVn6zCp40kMrySAFhxd40JmDBXKaTyW3C20ij1IDI76HsdCZRnutY9bn//PL/7BgyV4PrV/zZHGM5swf7HrvB9//sS/8x+c/CKCsMgVlLNq72sEYM9+94oqnv/zlr8Tfv+qqZQCivJ1qKbGr+Dw96ZQT9x2cNzfavHHT8873LV6y5GW33/HLz8/u6z9EpQpxmiIo+8XHkTEWgjFUS2XiN7CpCPtpDDwYSzO41XKl668++okPlIPKPY2kPkwul/HNBx160N+tWHlAumjBoqOfenLNrssuv/y2Hbt2PrRly6b1O3bs2i4FX3/fvfckL3Rs3vnOd+19/vlfPK0URbCaXlPu7uMgV+GyvZZi147dOzZt2LTqj3mevPf97/vAq8981TsBsP++6Nt7P/jIIxgdG0FHeycsgBUHrDzsiEOOPAjA7xy5wnxeu+WWm18NAK0kRVQKIKSA75O6niUW69ZsaF3zwx+t/upXz3/ex1iy15LDrr/+2s8vWbjkKO0+r5bsvSQ/oI5mz4u14RT/YWou3FgDL/Bmv/Xct7wOwO2/777iXB5aqlYX59eAcTd55pxhSil89atfXXPoYYf/wcfluGOPPROAn9/j2bQPk1Wrn9r82t/zcQ84YP9XvvpVp5zWqDdQqVYKS2j+GVltq+J1r3/dEV/5+ld7Aex4ke9J/uXfu+wdvT29c1qtBJ4UqJYr2LRpM2ptbeju6sLPfvKTO5v1ieQPeZ6TTznlsONf+crD87qLuUV8HusIAI889mi8ceOG51Xijz7q5adde/3PPlWrVjrTOCtGJHWmiQskGJ5YtRq33nIr3vq2t8ILPFqzawPGaXQPAEaHR2f/ute5bN+lB954ww3/3NHRtih3pxYuEYZpfAByXq5atcp2d3Wx/ll9tH506zUwoLPW3h0EQVXmC6hc/2UMKFcIVMINg1YGSZxASAFjDaIgQqvZcoAZmpmjyCJS0YQUaK/V0Go20ajXkWW0IAA3aMUt7B4ewhFHHvUKAF2Ut8mhtEaz1US1XC5kavuskzgvQ3PQTbGIYQX6B7CAtgQtwR6U5ecvQxheuHax1rjoDIYsTrF50xa7Yf1GpGnCSuUIcwfnYse23ZNf/9oFP7ns8ssu2TWy8wEYOxKEJdPe3g5jQQveVhOZ0gh9H0YRfKkVN2C1RuAHgAX8MECr1aBFpTZuRiwDGCMCtieRJsq9JgFmGRXrHNCG4qIY4zC5/dUwKnasLni/vi+hNQFvOOcQYPA8n8BgMQGshJBIlULgUzGQxRmkJyCFgLWcPm44EEQ+Dlp50NI9LN+cgAEMnGJzjAakJMu4o5iSRWrKznjbLTc/vWndM5vbam3gUmKiMUE2Q1ioTKHkhbBMQGd66uYJimDijDJcCzvnNNJYDuexBkiS2KmEOdV5qmjCNEryHuwp+6z5WjsNrvM73Vqmk3nw/DlI7i8UEWOmns5OFe95AZ5XCrnam3tN8lxQrRWMdvm83I0LWEuUb+NuNkLA90gdpIxjjagcgQuO/tkDtVyvEm5BP9lqIPA9CMZgALKsGOZmQy2U0qjXG2ivtGFW/2xx1fevfubRRx4ZLZfLroETQENRFrfggCASM4MgQjCfKuSZo6TngINSVEKcxmSJcYUxZ7wAcuUxPjktPfA8KpKNLmxAzJLS73kSI8PD8AIfpQoRqo1R2LxpE5YuWzz3rNe/boW1Ftu3b8PPr/s5dGrwzne/E4V7OS+0GUMYSFhL9ztjbBGHc8V3v/dAq9Wsd3Z0IM0yyo7UBBnzmESiM0e5BrShGC1rDb1fS/dJgi9lBZXeWIs0JTI0Z1N3LeFgOlO0byq8jbGFzV257xtjnDrOIT2BuBVDaUvOB05RIQX13FiarfZCKG3QmGxCSI4g9DAxPon+vl5MjI2hv2/WwR//2Mf+EgD8IIQvfUbgmSbNVXsepJR7FLU5QdpYAgTmOeDTL7PQp7xvYyhypF6vY2ysjte+7nVvefChB+985KFHbi2VqVHh+z6MtkSpt1RkeJ6HuNWC5/tgsNTACyIEvo9Wq+WihJyF2s1O51m6RhEh3JM+lFZQjgpvckq2BSz4tCYHc1wwjT9mDO+sWbOXfO+73z/eGI1HHnsEJ55wAlatfhxPrH0KALBj1w4smL8Av7z9zvv/6Z8+892PffzDmNl+/faK44896+KLv/PXDKg04gRhIPDU2lXwZYT5g/OLhk2aKoRhgGazSQWsDNy4DBV90pMwFuYXt9+6+olfPbHpxONPWLH30qUD1MQzLpaQPmOU0lg4b97hr3rVSS8D8H0A6J010PHWd731E//x2X99P4BSlmZoTDZQbauCMWa/c8nlV7/rHW//fK292r9u3bqvz57VHwnGisUeLTSp4N09NLTj1xS7h1933fX/b3Zf/yHNRovcP6FXJCAU2d6wCIIQfeFUsoiYJjxQf3PKUn3M0Ued8B//8W9vBfDF/OcfvO/BxxYuWvTW/ZYfMFirVuNLL7t44+8CRNJaH1it1vam4jofG6Hc7vHRUVjLsX79ZmzfteP+VOmtf6xzZOk++xz22KOPvSX/pK5Uq6i1EfcijjOEoYfxkfHkkosv2fGe9/7F7/z4L3vZy5a/4qhX7E/3UI8o8vm+NgbSAw44eJ9hKdmG5/v97u7OI6+48op/XbJwyVE6Uy6Gj8j7WZYVIEVPyOcuehmKNVB+B371a047/Iijj+y4+467fmcAWFQqRd+44Juvn9M7UJ1a79A5mqQp1q9fj3KpVB8eHX34Dz0u+yxfvte999xz3FShSOsSAswBY+Mjm37vBscH3/eGcrmts16nUZkspUawlFTnCCGxceNm3mi1XvQO5wGHHHjwKae86gwAJDxaWutGUQWlUgWrn35qzdXXXHPtV778pT/oeQbnLzoKLjrIWgttLLgkiGW+Nr/lplseHh4Zfo51uqOrc8Ett9z2t7VqZUGaZICYcizCEtwUAL5xwdfvuuSii0cPPvTAVx12yGHQmaJxrGnrgY7ujtqvKf6DS7976UfnDsxfoTJFjXKOItmEFbUfsvsffHDNRRf9N0vTbOAD73tfrX9WHzJjCO7nRsOE5KiUo0gabaBUq4DmwFKhlCYZGMhqKCzNhRoYpJlCGJWoMDFAW1sbxsfHXP6fh+6eXlij0IqbUIa0VWsMhoZa2LR1K0yWrjzhxOPOAoCgFBWE41q1BslJ4YBTeIqid1qXMVfzCGc/bfLW5XIwg18Lzf31PF07TTUCzUoai527dmHVqifY3MFBDM6ZBy/wcfMttzz8N3/9t+dv3bbpaul5k5VaOyTj2DW0E9u2b0WpVILv0aK43mxQjikTKEVEm54YH0eSxABnEJLgKdZQ/JJ0kBVDbTOkcQylKTuXWRCsKa8TrMjXutAmV8cZOIQjG7rFpaU9lyuGBgatpAVPeOBuYSo4/U6z0UDkmg9CUKPDlwFmzRmAL30EfoD58+ftl99s8kI777YIxqCsgcocOVnQ1y1znT9D+3fT5s1rUqPGfenDkzTrLYREliak0imDLNNuoawAw9zfqaPOuIS2ipROa904h1v4WwsuJGX05rOwjsJs8qKR82J+Mq8sn81ehn3hhsnUDO/zE5vtnjXt856A1lLMEgMr5kXzopPmpuzU+c+mOlaioFEzF61iqAlijGuEpG5uwoeUkppWVsBAIY4N2jvbYQ1Rj40xGNo1hO6Orgo5Azx6TChwSaRw4zrB+TmROx50prFzx3aYHoP2tjYkcXOrlDIGgFqtgrHRcaRZAs8PABcplcT/n73/DLOjONPH4buq48mTZzQa5RwRCoBEjsY2GNvYBht7k9c5YuPwc14be9c54LiAsck5iZyDyEignHOYHM7MCZ2q6v3wVPcZEbxIwIf3+vvspcvaYXTO6e7q6ud57hRCaJTRMDlptxVFE0GqRF/q+57OWNXTYqndrHVjWHtgqyTTlY2K25FKwTIYstkMvKoHxjmy2RxEGMKrVmEXLAgp0N7e0dHc2jwh5boY39EByzEgwgBm/CAFq+03iVEyq+VDAvCqPnZs27Ej8H2MDI/ArwZgzIBpWHAcB0KEgN6EFRQYV0k2cWzKpaSO6ABDJBU1UgyQodTHSA8VcgXWml9FcVFJ86s17LFpE+cGIj+E5ApSRDpaxdQ0cQY/9PRAzCU0Xbs4C0mOxulMGkEQoDRcQhSGyKRTCCNR97Nf/vLCadOnzxBQyKYzUEICUsKwzYSOndxAmgkQ7w88iUtSiaw91gf6oYAUIdLpFBQYyiPDaGtvxztOP2UmxA+/eNZZZ683DKO3kKqDFBLlsKw9D2xIJeBaFqIgRBTQcME0LQgRQgiVNLYMXGdHCx3HR/pmSGp+Pd8n3ZlB6G8kRW1fgZYNcAbOlGY+AG9nBOgJJ59w/FFHL16wetVK5HMZTJk0EXffcx8aGpoJIRzbDr/i43vf/f7VxeGhjfjn6x++2lrax999791fybrpFs8LkHEdlCrD+OtfL8OyY07EpImTEIaEltmODUBhuDiEuoYGcIMj8AMYFpkmDhWHD/zg4ot/dfkVl1430jd4YMK4ycf/5jc///77zj33VMOIn3UKhskh9HOvrbnpnQBuZow1ffVr/++7P7/4J59kgFsdqQKcoa6hDmAI/vS/l1765c9/5WdhFOw57oTj5rrZtAfQ/UnDPjoeN+2i4nm45JLfr1x2zKttTbKp3BG33nrrT6ZNnXJMpTwCEQqVSqUYGOAFIRzbAhRPGCxS0RAp7nJp0MeTZ52I8+KlALMMfsoZZ3x0ypRZV2/fvrE3/swd27eXAWwCgKuu/tshXZ/FRy0+kigXoAB0DnAYGB4uoqu7B23NY1Gp+qU//f6PN2/bsmHk7VonH//kx97pWubk8tAIDMdGY0MDTjvpZIpMkgqua2FgcGjD/s7uVYfz/q2tbacByFWrHvyqh3whj8D3URqpYOv27airz2Pz5s0v7dm981VutjNnzjrl6aee/tn0GTMXhX4Apfd7KQUM0wBjho5s4yj7/v7L/vznFwKvWv7ShV95v23bqaQo0bWFkBK9ff0NftVzDws1fPc7T/rXCz72rnh9CklrnnLQLUyaMgnr1m3YtH3Hjje9P513/gfPzWWz00MhYSbPU6rtKuVyccO6dYf1GVNnTT1i1fMrTwdAKRZhCMswtSeKgm06hEwWB/f5flB8q9fbccce9566fKEBCrC0iadSDG2tLWAc2LhhS1/n/v1Db+YzUoV6+w+X/P5IEUmEUQDbtIjpJWjwrSVRleeeX/nQqwYsza3GZz7xmc8smD9v2WjgijFARLXYsPsefODB666/6eJsPtcgZHgUgGbOiZEarwnOOSZNmtD2et/zIxdc8OkLzr/g/VLQwN9JOVRJCCC2ddqxd/fmyy7/69XXXXXt3nef/e6zvnbhlyePG9uOUrkMgCW+UzFw2tjc6JimbUKBzKiYdgH1Kl4ScSMkFVD5fAFKSfQPDCCdTsE0LUAxmKaBVCoNzkxUvBGUhgfR19sHpSSCMEQml0djQ0OuvqF+Qi6fW3rmO8/8lw998PxjpQLSjpsY9PAkkiXOmjzYwzahoY5CBeLJghxlNKV9WF43NIa9JsgmNR3WGEUrjTM+GFpb21DX1NB1oLdr1449e3o2rNuwZvnyO2/bsWv7qsamRtiGjcHBQbhpFw319SiOFGFbFqIggOd7CEWAIAjAweAZBmXHcm2QIiKEYQTODQRBANOwEEZhQj9UWo/K40Y8RtbCEErryUQUQmlqnlIysWg3TUNTdGkhRzICY0ojsNTchTLQOZIcSgZwHAeZdBaBTwY/9Y3NhLr5ArZlolgahohEbuHCIxcAFIVhaEqgYrphtw1YtgklNDE4NvpSDEKbYADAvv3714tISMkJJWScIfQqNPPgJhQTMKxaXIthW0lsSxSFFFHDiSIao1wxEsoVIWlqVMMYV9Z8VCZpbWGoUaAsG5WB+3qjkVE5g68F27LRyLA6mLiparE71OjKpHWuGVvV1n8c4aBipHcUehcfn8HIkVkqTWNmIMaAVGTco5spxRmkDNDT042Uk0F2TB5ccUyYMA6Tp0x0AGBwoA+248JJOXBdp4ZOjwKs+3r7oZREc0szmlua4VUrGGYMFa+63zA4qpUqwihEJELKsY4ov9TkDkzLTChOURTp96XrJbXLgNLUagaGUESJvrV24+v8a9DaNbmBqufRwMWwdLNH1OFQKdi2DaEkKtUKUqkUHEU64bq6AqrVan1XZ7fd2NKI4cEhHHvMMYhCReuNSb2+2EG0voR2rn/Q1dmr5s5f4D33wvOoVqsU46QHV+VKGUHkw7XtJFpNJRm1mq2iXWGkQG3goWn6Sbac0uZc8XnSiC7XDZgUteEJTdcpt1uCBkKckamb4zgQUiCKCOWMBw3gDGk3hTDwIZRC2nWTGKZcvoCxY9qxdctW/rF//+h/vO+9732/73kIoxCpdFpTiBnSToq+W0wqVqPYFJq6HoZEmeejacDJeZUoV6uwXRuN9fVwLIq927VrLxrqmt912smnv+vRJx75e119PYqDIzTsIksxWNxC4Ic0jNWNNeMmQp+MiDhneg9kSSoBGWjR9JCM7+j5o4QAYEL3xvqY6FlBWdfQNPea9v7teDU21Gd+/avfnMF83/nJj3+Ec84/D5Zp4Ix3noa2lhZ4foBCXT1WrXx5/bad2+//Zzv7f7+OPenY8xctOvIYKQHHIUTCtlP4xte/jXw2h1BFhFzoGkREEVpbx2jmkYBpU4Tjls07HrngY//ykxeeX/Hwb37+MwDA7r07npw8efLF8xcsnDVlyqR2xukekJK4AQBwzLJj3332e8++4YGHH5h0+imnHwkFMwwFYBlIuTa8arX7S1+68H9uvPXWP/rBSAAALS1jRMZ1/YOqFn3vKyEhwtBvaWrZPPo4Gxpb+SlnnHrWg48+9K2lxxx9dBD6sFMueNpI5rSuQ4h1HM1omgY4oNZv2LL1zrvvWPHcs0/vXbrk6KVf/8bXz2CMJ7nrTGkDR6XQMW7c7HHjO2YA6H2z18Zy0vYdd966KH7GJnWhvje7DnRj2/ZdaGxq2XrPfXc9+PZR3rnx9LNPLgMAJ5OGaRmJzMm0TKTcFKIo8n/zu99csWvP1kNGmceNm5B/5NFH3wUA/X39SoiQ1TXUYaRYxkhpBOlMBiLCgVvuuOOm95x99sGNckvroqeeffqnUydPWaQExarRMJpr1hFg2Rb6+4aGbl9+9xVXX/P3Pz760APbJk6anP7kpz9zum3bqZjxxTRF3DAMlCuV4e6u3sOKuzl26bGnAmj2gwiWaYAbtXmnYXIYcLB8+V2PbFy/YdebuS4trW3TH3nskfcBFAcKKXUtIWBaJlavW/fyC88///LhvPe7z3zXOflcYYKSgGUZEEoAXIEximaNZSvPr3xx5a4dW8tv6RCuvW3sY48/8W4ACKNQy2oOlv1MmjDhiB//6MfXX/KH39xwyR//eNuW9VsOufkdP6G99R1nnDrPMDkYc8AMqjXiaEMO4JHHHn/qoUcfevaV//aYY455z0/+58f/qoQiZojBwQyG0AvJG8g28NJLq5/7f9/8zlf7OjvXzpg9fc7ECRMYAAgNlozO4z75lNMbX+s7nv2e93z4mmuuuQhASogIdsqihSSZNu0Efve7P9zxs1/+8rv7du9Y+/C9D7X86Pv/dU59fcEZKZVgWhYc20n2DiEoP50bJjdjdMi0Lc1X4cjn8giDiOIZOMPwCGXqAgwpN0XuwVGEcqWaTMOzuRyaGpuQSrkwTRvtY8emTz75pA8edfSSd02eNGVOY0PT2Lr6fCGdStEJkK/Ax1RNLzK6h4j/m2IH00tHtxo8djpNppEMNdXoqMZZaWUNIxdflkwxmUZMJHXM+uVVfTzy0OPbVq5aec+NN9+wfM/unS8ZhlEaHBr0c+kCGhqbkM1Tw2CWRhAGESoVoiZXSlVEIkQq5cKSJiG1QYgoDGGYJoRSQBRRxq0IIBi5hFJxBdLwaboSZ5zoj1qT8UpKp9JusTG5GxrVDEM6XlPTRpUEuEN0VSgG27KTrFND6wG9ig/HJt2Mk0oRW08JpDMZQCiUqyNobGzumD595syE7ol4EEGfIyETgygpNUKmfyfm7/d0d5cee/TxVTISyDcVUCwW4XteYqkdhJ6mkpBWM6Y0QCko3TCMHmYwKEjFaBrM6HrGzbF+gB1MRdTfdLRO91XNrXqNKYl6RTv6D3jxyWBmVL7vQb8+WtOrzx9lmI7iP2tahtIIOhlwMX1sSLSuUJRJS0wH0rvGmgrGFemhOddorQEmgVQqBdu20NLejP0r96Bzf6cTeAGqFV/YtmtwzmqNplIUvcJoWJJKkVvo0OAQAj/E2DFj0dnVJfr7BjqjMCKnYMHg2C78IIBhmAkiGYkoQYkp0zaeN9Tcq+NzxTkn2joOZoZLldAKtH5c6CGPqfU2EkwxRJLcmRsaMhBSYXh4RDusA1EQoVyuYOy4jqZStWQMbB6AZdjIZHIYVhWYjkWN4ut5cbMarXCgr7+ye8+eYdt2kMtmIaVEpVSG51cRiQi2aUEqkMu4IsSCLjXdq3EurICg6ByLaLUiEgBIPlJziZfJXoY4R5ZzhCrUNG7aTGVEwyXbdvRUlUGGQmeeE+0/lU6TbMP3icKpqXCWQ6ZWfrWshyccgOKLlyz5wIVf/OJnAemWShXYLk1eacLODnLFH72+kwc3Y9pbgL3i9qLd2rTIIGp4uIxCPove/j4IEaE4UERLS5Pz2S989mOPrHj4Lq9S6VciQjqVQbnKwE06XtM04QUBrSRuURa6RtqEpL1UKgUhQ9i2C664HjpIQJGzbpxBCkbIR9wUM4Na6zjrWcUpAnoPfTte7e1jFh179LIT+vsHMXXmFDV33mzWP1TEqmdX4l//5SMIwghSRrjrnrvuGRkZ2Y5/vv7ha+kJJyz+8x//cEFMlzUZsOLxJ9Dc1oYZM6bTXiJDYpVEEXbt3o2WphbkC3nSkxoMjPHwwQcf+/NXv3Lhd9esfelVSM+OHTse+8XPf3nbRV/76ueY4lCaOSQlPSGPO+741uOPO/ZDjuVARgJ+GMHgDCnXxoHOru2f/cynv3f77bdf+5f//XPynstvvzP82AUXyNkzZ+k7hSfafW5wDBdHDqxfv/YgPevpZ5xyzlVX/e03tmmPp/ufmB3xvss0o0FqWZtlm4iU7P3+93505Z/+9y+XD3Qf2AgAmVy+8dR3nrli8RELZsbPT6Yz3oVSyGZS7rKlS+YCWPFmr8/cI+fNXLxwyRz6jjKxeVQMSKcz8CMPTc1NeODee54oDQ93vl3rZPK06XPaxk6aS2ifURucQyKdSkGICL+95LeP/u53v7n1t7/99SG//9iO9lnTpk5epCTgOC7b39WHCQCGBgfR0NCEiRMn4Bc//81Td9+1/NHR/66jY+z066+79sdTJ09ZTH4Mmm2i6ElkMJK67d3Xufezn/7sD5ffddtlH//3CwAAJ558yrJCoVBX4wFTDRQJAcMwMNg3NFwcHvYO9Via6pvGXnXV1ScAgGWbACRobFKr26uV6tCzTz/16Ju9Lme/7+wT5s6avYiQZAEzAQz0fXLnHWt7+3r6DxndnTFjwaOPPHx+vC9wg8PQw+gYzWQc8PwwuPWWWx656MIvvbUsnmNPfvfMadPnhhFR00UkSUYqKdVBKYUFR8xPH3nk/HcAeEf7mLEtAH56yA1v+9hpY9vaJkmpmY+SBtOmQfKeasXHf1/8P/eWhwcPorVn8/X5m2664V8BtES6rg6jEDbT4ILJ4YViy3e+/f3vv7Ty+bUAkE6ns66dyiBmRbHYe4b20fUbN5lHHDH/4PNwykkn3XLDjd/K53IdYRgmUlopyAfGAMOTT664+ze/+e2F+3bv2AkAnZ2d/Vu2bXOOXrIIgR8kfjXqFXr1wb5BwePmiBEcBhkJlCtlVP0qGANchxxDlVQo5AuoK9RBKcBxXGTSGTAATS11mDB+DAq5PBizEERy6nvP/cAPfnzxjy455+z3fGje3Dlz2ttb6+JmVwqV3HPQddLrQbAKo2SW7HX4yEwBSkIpSQXKqzAyVQtSV3G8ykHjPHDTADiHFMCzz6zc/ac/XXbzRV/7xkWf/NQnL/jeD7590dYtWx8KheoPAuHn0gU4aQfMYBgsDmJf5x5EMoRj2vCqVURRpBEXAa/qQUQKJjOpyI8pxTJCtVpCpTJMVGZtwsQ4ACnAGYNtWZAqShozqSgVnimK5bF1frLJLbLrHxWhQdM7bdalFMKQENEwFLR49MmUWqNGlEQGy3ap6APQ0tqCMIjgeQHctINCXR6DA4MYM6ZtViabbk6aOVZrOgFACUAIIOISitcaUzCaXgFAV1f39q6u7vWRCFEql2BYhAoTKik1uM5gcpMoN5FEFAakg9ZTPdMwdTMoRyFEurmHouYMsTxd8xG1UY/StvkH6cRZDb3Fa1GR1euw4PHaIG/cYL9W06ygqamjfsaTZlfrHSEAg/KSucGhQN9bytofME73k6J2iTEGU+evUi6vNjyKKGpCRRwWs5FKpWFaJiA5env6MFIqw7bTE2zHRjaXN2zHgcWtZExbA7FoY0xn0khnUohEiFw2AxD9L6r4lUGhBBqbG1HIFYg6yzkh/lJp0yToDQwAM3QGLxVdhtaCK11QJWhcTDlXpJnljCUDIp1ITKMWIQiFMSwagogQpmmhXKEBSjaTQeiHiCJCe4PAx5y5cyfa3DQD38OMWdMxaeoUzJ41WzeYKhkwjV4CSsoEjQWAocGBvVs2b97uuC4c20XgR/D8AIwDmXRaDw0oWsm0TMAgEwzSM0O7i3N9TxLdKBIRDY+0Y7BSCiqSyd7J9fqNIqLw0j5XK2AUo+suRETIsoy0FpjDdR0azFUq8D0PluvAsR1YnNZaFEWo+j7R44XA0GAR8+YvmHvNtdd8bfqMOVPKZQ+ZfAaZtFvTEcfnKln/bJQZtz5/khBSkZj2IYmHA+japiwXoRegt68XA/09cCwT02dMU3v278aRixaceP6/nPefXd1d8ESEIArADa4pTA4sy4JlkhOz69gQMqJ4NUlsAcd16VwCCEUEKQWUErBMogBKobU/ejBnMMrc5ZqBEE9mOTf04KSmA347XlOnTD0qU5cd8/cbrkU18Nj8ubNw791347prryZk0jKxZv3aXZf84fe3DQ32Cfzz9Q9QO+acdea7PnLE3HnzCR2lG8m0GYR+LilBkiFSExnI5uoQRRGGBgfJG4Bz/P3aa/70gfM+dNFrNbvx68Ybb7o/ioSvdGEeD+OlFLB0FnTgBShXKnBcG7Zj46XnVz513vs/8IXbb7/92le+3/HHn5heuHBxQZPOEkOpeNVt375t72OPPpEgjbPnzp/01Qu/8g3btMcLQfecyQ1AUrnEtdmWFBQDaNkmdu/d89J5H/zQZ35y8Q++FTe7AFAeGe6vDFf2xHdxLKUBA0ojIwoAxo2fMP4tKfyPP+7IlubG5oPmzXo42dnZjaXLlmHmtBmVO++666W3c6289+xzl2bSuTF+GMRzZWK66dp11Uur+g907r9PKXVYTfe0aVOXADAVU8gWMhjbPhYADa0pNhDYtm3bqr6u7gRJnDVr9ti///3vPzv51FPfEfnEyGQsTm8gVhU4sK9z375PfPKT311+122Xjf7MCePHLgJgJwwiRR4c8TN5cKB/0OCHHhl0+plnLD7x5JPn14YUPGGjxfXV8y88/+za1WtffrPX5ciFC04AABFEJF/Udvlc77+Oax/W9fj4x//1rHFjO2bFTbrSZoiInwX6OHbt2rFz+/Zt69/KtdbQ0FT3pS9/4X1UF5HE0TDpmeoFPvnhJPE7tP5amtoWHc5nzZw2fXF8bxEb7FXMxXK5PPzCqxvyY888/ZRTTyNmidA9BhCFIbjJsWP3rjWf++xnv7Kvc1/Cujjp5JPGNzQ0peL1xl5RB5ujM2cBZLL5cRf/8OKvNze3zA3DkJhXcXyiloU88thDT338Pz/+7R07tiRxRr293fbKF19w6XloQ4TUP0m958az6Lr6QmhqVgplt0oJEUVwU+QW54UeBATq6urBGUN9fQO6u7rRP9CHVDaDsR3j0MQbkc276O3vRXnEG3vUUUeffdFFX/7wO975jqWlUsUSUsC27MTAJO70eYLAvpaqtvYzdhCJ9JWN7KgGQunICJ6Q6Q52X459XZRExfNhgGO4OOyteHLFgSAM+wuNhaFt27Zvf+GF559a8cSK5/r7+nZEIhJuKoW2tjEIwwClchkSDKZhoFqtQMgII6WSdsi1MFwehuO4AGeQUaRpcgT/VyqVxGTJNDgMy4QU2liKk35TCtLZQSlUq9UECREyGoV0G2AGEkMVxjUlXDcNlE5jaI44S3SahhFf31ifI+F5HhyXdAnVqod0NgfIEEpRFMrw8DC8wEehrg6ukwLnDEEQYMas6Yttx0EYSXBIMMPQucexswtdAY5RHPOa+BFQwB13LH9s9+4d3el0liY4kYDveRRDZFJWMFEOqQhRUoEZhna9JFaC5rOPMjFTyblUumCJBzpITK9oDMAM3bRoavdBA5dRZs44JODmNdbyK1gLKslv1RQpVWumGGTiCpt8CaUw2pcrPmzSaesmiLyGoEaTrfXxen4VQpLuXkDqLGYFKRnKpQoKhToYhoGpU6d2LFq8ZG6l4kHKCP0DfWhuaIZp6SknWJJxykYNkJqamiGEQHFoCAN9feG2LduGOOfIZrLo7e1FtVKF7ZCZVCqdQbVSoabLMIiKD7quHByK0xAjishRXDGutZGslt+qmybFCDFJYqI418Mbapxsx04MGVzXRtXzUSlXYHITpklonWWnEcgIy5YunTZ5/GTs3LUTGzZsQEOhHvVNjcjnMomRGEON5i6lhB8EcCy6d8rlKjZt27KmODy4KwpCGAAkIjCDgXOT9LFSoVKpaPOj0W56TN/jkoYgnD6HmmH6NSFEwt6I6bOcmxBSJIwVEdPepaoZx+n7TgqJtOsiCkMITvdOGEnS3msWhl/1CRmHADcYpJBI2SYAE/mcjcD3sHnDhuOYwRYpRdTOdCql0XSlKWyEeMuE4MxGmQ8yXWhT816uVuB5PgoFigyiGlqBKyCVtpHKNBHVq6UV1UoVPT3djHEO13LMy/5y2VcGhko99955zxWzZsxGd1c3evv6AYMhjADHTUFJhcD3qRF2tEO2Ygh8H1IKmLZD7JrIp4GMZdL50m6QUghEWtcUP2+UhN6vyZ1ZQcIArWUF9XY0aObvL/n1kW1j2pBKOzjyiAUwuYUjFy9Bx/iJSfrAfQ88+EBfd/eL/2xp/wGFtH0cW7p02bvPec97PkBFG7FMhAywYOEiuFrWKGSI7v1daGxuRirloq2lCVJEWPXSSkyZMh23L7/rqc985vM/9crFf9gYrHp51WMrnntm50nHHjczfj5RRqgEQ2zCqJDL51AuVYpXXXnllb/6xc9/s2XH9h2v9X6ZXLYhX5dvJbSE1542uhB30nbx/ee+XwHA1OnT2+68a/kvZ0+fcbQIdXPKa6ZTjJFDOY/TDMCw4umn7v/YRz/6/3bu2PmqRnL8xBljHn/8kSnxlhU3F1IqDBaLsCwHg4ND7ltxnWZNnXFCjLIxPZCI/97S3ILHn1iBcrW6a8aMmW+bWVXOrWd/u+qKU1sacvo4ZaL7j1/XX3/j5muvve6ZX/7sV4fXUL/vnMW03iQcy0GqycXAQD/q6xpRKBTg+SGqlZF9o/YC67LLLv3mqaeeds7QwBCy2Qw9FTnJKxgDBoeLWLV29c4//fEPFz/x+GNXv/IzJ0yYSE1pJBEK0qhbFpllAUDf4OCBYnHwkO33lhy15MR0xnFiAKTmrRhnzEv85c//e//+zv1vytV4/lFLZt5/713H0zORENAgCGBaRrJHb9+265Ap0/X1DS0PPHD/e4h6q2toxg+2XdH/z8svrX5xsK//wFu53o46+ugzjz122QlRRH43Bo8dyYFMKqXrP03vl3QTD/QVD4tSfdY5tO5iZmZ8XJFOJ9iwaXPf3n37Dzq+6dOnz37g/ge/alpGpur5MDnXLENC9Hfs3ln51Cc//esH77//7oOeX5JPeFXnFi9WAPPnzUsnCHK2YPz85z//8gnHHfdOPwiI9WZpWW1EEr1I+YM//dkvfrNl8+aDMqlnz51bf8pJJ7cCwGBxEHX19XBh69oHCYjU2dk9YlqGBS8UyOQLEGEEz/fQ2taGnv5uhEEEzm1ksykMD5fQ09+LxqYG1NXlUKqUEQUVhBLo6ukeu2jJkad95ctf/uhJx51yiu2aXCoJJYkKN9o6PKEnjqID4lUgGHuNVoIlvUNs7HNQI6unnVIKch0zTGr2AmoobZdu6n079/Xf88B9K194/oVn161Z9/zOnds3WZY12D/QPxwEfsS4gcaGBoofsCkmSUiJwA+Rclz9kBSaegqYII0tUwwSgoxQQnJRNW2TKIzMQBSRhtc0DEipEFR8cEM3unoSJjQyIyVgcQ6pKXjQlugG55qyyxGKkIpxPZ3jnIMsISmGBJKDK2q2FRRl9UpJulpF6CaBp1REm44Dr1pJ3G0BB66bAjjDyPAIGuobUSlXUa6UW45asmRp2tE0SY34ERIWI6/03clB1appUxVRJcvlsnfffffcD5A7oVfxKAYnnYGIIkglIGQEMBN+4EHp+BZAEm2ZaQqoQqKxlHoDh0b44+xd+RpobVyEM229Gt/8alSny9QrHJbxOkiuek1ot6Y1jyed6hXd9KjpJ+LYIUbHg5hqrZt9MJFQqjjnesRP15JpAbySCrZFrrUxW4BQDAPZXA6RELqpMRHIEFEg0N7ajpGRIoLIw8knHNfa0FQ/PjYUyGayMEyiWEuNdMYDA6VhBiElTL0hVcselGJKhpFQUmJgYAChH1LEVRhCCE+j1IrM0fTGl7QTjJADovSQoRW0dpsipqirJ2q/SlB907II1YxkQl9hYCiNlGDaFiyt++ZMEU3IZrAcG5bpQAgB4QfgBm+z0haOOOJIPP/CcxBtIdra25I9S+nOIjFW8n0MjwyjtaUVAOBHHnbs2bm6v39gpJArYLhUQihCGAaH7/kIvAi2ZSKVTsH3PIRBSFTzWMXLNfWfaUYGYwdRfZGYz2nNtgKkUaPnx2srzqAWUUSOxbZNPIEwomgxALbrIvA9CBnBMh2kXHLTrngl7WitwGHSuTUNFAp1KJWKKJfKrR/91387q72tnXmeR02xIpPAOAIMB7l+0pohM67477FnvKKhKlcJA4WzmrO+0u5QMWpqOxYeeORBzJ+7APmGPCxYLVf8+S9fO3nzqZs79x142rYtitACSVJKlTIc00bKTUNIHbMWhbBMC0EQwICJSEgI7YSvFIPnBxDaOV8IASHJLd9xLERhqKfFsZvCKCM3SbSwt6PhdRyrae7sI+YCDOd+4FwMDw3BYAYyroux8xYgEhJd3Z3y6quvf1gpFf6zrf0HVL4ZkyZ891vf+sTc2bPH9XT2or6hAM+v4rmVz2HSpMmYoJ2Zd+7ZhY3r1+Oc97w3GR9yw8Ts2XNg2w4eefDBp7xy8f8seE3TXGQyM58wyDjVQZbJtZxAwrYcbNy09fmLL/7BL6+75to7pFKvGzdSjYIx9YW8QaRaOeo5DYRhiL279jvpVCo/pqVD/eKXv/zV7Okz3hdFNOhlRm0YGpsjMsXixtn782V/+dvXv/K1/x4eHn5Nd9uJUyZMHTN2zFg6FE0VVPRMmzRhPAOAzn37zTd7jdLZwtjHH3/0OOoy42d07FfAYNkGuro7vYefWPH83n37t71tw5EJY+YtXLjg2LipVzGLTSmYnENEAlOmTDnQ39e/5bDW4vjxTXfdfddCOk4GZtJ13LNnD8JQYknrIuzatcvbum1rMkT44AfO/fDHP/6f/+r7HjLZLEzbpMQEhcS9PwzFhh9890f/9dBD99z0SlfscRMmND5w3/0LAICZHEwJzewD9ncdgJASa1evO+SIp6am1tZbbr31xFrZw0ZFztFP9u7du2Xfvn1PvtnrMn/67NPHNLZOBAArZUOGkZanAJZpYMf2XX0vPf/SIR/DqWe849QlS5Ys1ONhzRJE4pkWN/DdnT3i1ltufzII/eitWmt2Jj3m8ksv/yiANDeT0SpYTHulNDxK5YjIkAwAtuza9uyhflYmV6h7/rnn5yaUhaTzVYmRbHfXgZHuvp6EuZJOp/mll1722YmTJhwlFWA5FlREQJFpGDC4geGh0ss7tu88yD9i6VFL3bPPene7RnmS53oscwQM2LELGIB3vefd7//sZz71H1Racl3TSkDpqEnLxrXXXnftqpWrb3/lcXEm6tOZVEssW3Js6vUMzknbbRrYvm1H6aknnxoxoyiEYQCe5yGbSiOVdlGulKGURGtrE6qVEHv27IPjOGhtbYXBDTS2NaIQBti5fZd7xjvO+MBHPnr+f5x43HHH5LK5VOwgCqYz6FQtxC2JEnrdtvYfTLtf1XfUmgnFYmMImsj7kYAKfChFOZ9DfUVs2rhhy5MrnnrgkYcfue/A/r0v7N67u0cqCddNobGpGa6bQmtrK0I/QqVahqWbh0gKpFNpRGZATriGAaEUFTlSIJfLIxIRqn6Zcmsj0sgyTbNwDA4/DGAYBjgziTYeO7+CaKpRSKLvmGonlUiKW845DFMbQGnKuYQEMyhy5SDjJSi4TgqezrRlhkE6HcZgWw6qVY0wiXi6w1CtlGEYlnZai1DX0ADLNDEyVIQfOEilU8gX6tDYUI99+/dhwuSJC4499tiFCZ35tUSsOvMSbJSmWru/QgJbtm3dvnvv7o2pVBqxBqXqe2CKwbYtcBjgpoXQD8G5CYMDXuQTYqsjtJjFk8Le4AxS0s4gtebOMMkoaXSWEBtlIsX1hqK4pjwkG0BstFNrcPAKJ9nkUaL+AcKbFO9UXIw+TTE9OKFiK1DnYDDKq1GA0sU+07bvUsg4PCJp+Limr0O7bsebF+Pxz2nY4vsUa5NJZRBGEQzbRjrtwvd9uI4LUIPaUhwqZguFAgaKg2hsaNRNp0rWJQNZFcfHFbM4hZAIPB/5QiE3dtzYxvUb10PKFAzLAmeAYaUgogiB72umB0MQaHSSa/MVTROVmi7HNMpWy5HVUSBSQukm2DAMhGEIppupGEExTBM6NhhhFCaOxIopGAYhda7joq+/B4Vcxmyqq8tVPB8N9Y044fgT4flVxJp3mufovUZPr23bQj5H0W1hEGHn1p19G9asfS6fzyEKQ8rNrQoEwgcMGvyFEjAUIbFkWqdNtZSoZRCP8lcjozntVh/nS8fsFR0fRHpU4ijGBmaGQbIMISJ9Xjk4TIgo0kaDtD4MmIiCEMoGDMOEZTiwLEK/FYC07cAPAgwO9qNUGsYHzzvvI5/65CdOI9qQBdux4UcRbG5ARgoVr4K0myKzDSn07G0UAh9nLTNiN4S+h9AXMAwgkgG4BLFNVBxRVXs6SAmceNIpmDC+A329vRgeGsHMWTNnffd73/rCeeeev9l2nP5cNq+HeAbK5RFEIJaKwU0IQbplQw8RpawNR03D0mi4gqW10FEUECLGlJbJiMTYRWl2mdQmH7THHurT7A0WePPnzTxy8ZGTAWDblq0YHili6tQZePyJJ7BgwSLMmjkdvucP+p63Hv98/cNXtVI9Ytkxy04ABzKZNDjj6OsfgMkdNDe1JUheuVzGEUcsoH1ND4YBhXSaMjknT5/yupEnra1tY9937vtOPeG448988skn3rVkMVGQk+hEoVDxfFiWCcu2cNVV19z1jW/9vy8d2LtnxzVXX/MPv//Jxx+3MEFLXuFm09XTg3wuPzb01Xd/9OMfz7rgY+e9Q2rPhwgSTLvDG5yG7VzR4LC3t3/3hV/5yn9fc/WVVymlKq+LeGbTWdfkbq14rQ3qQj+E5Vg45bRTjDd7jT76bx87fcmihdOTZ6RiWn5FdUS5EmLpsqXFK6++8oHHH3tg19u1Vs5533veN2nKxPbe7v3I1zXActyEaSWhYJgG2tvbBoIgGDqc958+c/rsSRMnTk7ooaD6ZeKkKSiXS9T87t5tLjzq6OOnTJ2x2uRi7JMrVnwTQC4KJRyHIRKCPAu4CZgMj614ctWXPveli1avXvWaOtnZM2YcMXPmjKlxr2NZJgCGgf5B7NyxA7Nmzurft2/PIVOO58yZderxxy2dH78vGz3I1/97y023rtm0cePmN3NNmpvHZq+86qqz4vpN6cQH13IRaglcpVzuC6PokCjNpunwq6+87r0AjFK5DNd1dLoJkmQRBjJn3bFn9+a9nXtfeGup8+9718c+8uEzidgnk+DV0Y8TMqOseV489tijL/7sp/9z/9e+8uVD+qy29jFTWtuaOqhmU7A0e08qJJ4qEydP8sZ1tCeV7dhx4087Yv7cc4luL2CYBLBQcgUHgODBBx66Zvu2LQedd8llQ31L/bi4GJa6vuGMkTeJElBgVQDoGD9h6vXXX/tlAHW+H8G0WI1VJyUsy8LGTZtXfOc7P/hpb3fnq4YNzU2NLa7rFjhnGNcxnkBJoQEEXUc0NDaEEyZMCM1UKg0GYExbGwzTxNDwEDn1ZtPI5/LoDfrRUF+PKCS0tOyVYDk2Oru6MHXG9A9f+r9/+VEm7Y4NwhBCF6YxCqE4P9i09jVyFw+vTGCvoG9qnQxIf5NKEcrR3TMwtHrNmhcfePDBB2695dYH9u3dt84yTNHS1oKW5jZEKkIYhBgYGIBjW/DDAEJKlMoVNDamYHKO6nAVJTmsdWDU6AZRAMd0UK6MILBsTR314dg0ybC0I6zveUSV01mcCqSpU7p4Iq2dBUBoTWbtqCKh0V0FKkw1lY4maHEWqs6ZYlzr5iRpZBMHX5lMSiplYkAYhgFmMZ2PS1m8QgjYjgvTsbUBUATHdeCmHJSKJXSMb4BhGejp68GnPvupIydPnJRPHuSqRjKPKYye58Fx3JoJmV4AIhLYtWs3brju+h2DA0P76urrEQQBmWkxcpv2fQFumnAcB17Fg2VxOOk0vCFP5x9xGDyOFiF0K9Z5jvI2gopUYgBVC6jmSUwT5RaLWjPBVA1p5eQIdxBlHrFLH9O6S/YaZlav1ANrVoJmM8TMBBXzIxUblQmcKCvoJtV6yNg9N0GmY1qt0gY6DOSQBwYRylq0sG4yDNNAEPrgjMOPiIUXeSEymTQiKeC4KQyXBmG5TltDYyOkEGisr4fUGkvGOYQStH6ljumJZQmco1KuJOhhuTISWZYlaEMN4XshOGNwMykoRU2d7djwgwASgqb3Qu8CuhGG1I7SSmjEtkapjhUfCuRILGWU0Nq1tbfW28TduEqCzjnnqM/lMFIugzGGcmkEUkpMnTF7Wl1DoW1kZAjpVBb19QUUhziUZKOydw/OYDYMExwRSiMllEolrF+/4aW9e/eu5UphaGRYN9wKruuSFjcIwbUWlukmNQpjJ0ZtrsaUdhWP0Zc447XmcszUKKOnxABBm34xQEWCMrU5BzcMyIhM7izLhmk6iSGTUoL075YBz/fIRdPkCCIfjDkwTRsiVDC4iRmzp6PrwIFp3/jG1z9qOaY1XCwhmyUmkmtZCIIQBjeQS2f0ME9A8VHuCYmBXghuWUkunmOnIaWHcrUMx3KglPnqyab+X8s0MX3yFADA4OAAbr7+Fiw9fimmTp52ztLjjnv2mRUrfoesVKbpIhICtukgzkHNZQvw/Qq8ahWBCsC4AdPUWudAQWgXasYZwihAEKrava1Nq0ZHrtFeKxNnccIEFN4GgBdLFi9Zls/VZcNqFW7aQXvHbEgpsWDhAsycMR1KCIRe1Kki0fPPlvYfUsPZDy/+4Vn5XD4tI4VMPoPhoUG4roNlS5eNYsNwzJs3j54lSsJgHKN2bIyUSsEdt9257b+++30qDidNrq+ra2zNZdMTTzr5uKOW37X8tKOWLDkKgBNDREojrL4fIQwCinq0Laxbv27gir//7VcH9u7Z8X99/9lz5jb+/Yq/H+P5IYojg2isb4Q5qr0sjRSxZfvmSXPnz/n3D33o/XkAiELSp3Mdy6EUkkE7Mw2MjJT3f+HzX/jq9Tdce8vVV/39H35+T1cnL1UqyKbTiSaO3IE5du3eje07dlV37dqz981ep0/8x7+fHO8ZiI0nIwXTMRFFAS655PdVCbl1aGhk3du1VqbOnNl403XXvFNFEcJI1EwilSQKOOfwPQ/XXnv91vee877D+owZM2YuyOXymbiJiASxUOoKeezbuxdDfYO47robzNtuvf34JUcv7vjxxRdPbmlpm1guV5NnRlw7cIshEtHAz3/60/95vWYXAI5ctPAIxpidDNr1MySTyWDhgoV4+eWXN6xbu3bDId5X5lXXXX0O5yR656OYcqPr/NJwaXNPX0/pzVyXjonjpi456sgjksZaS/mEVIjJx0HgdQd+9ZA+Z/z4sTNOOGHZMZUqDaJMnVms1OgkBjpnTzz+5BPPPfPs5rdqraWy+bYH77//PwAYsXsxe42OiJrdJF1EPvnU0zf1dncd8sBn6XHHzKyvr88pkHN2TAKIPUSGh0Zw9/K7Bqt+YABAob5p/N+uvOILM2bObgtDEXu2wdSRocwAbrrx1uUXX/yTv3/taxce9Flj29udU04+dQwxUCgnPGZEmdyAYZp44fkXw3nz5heuuubKLx637NhlQkiYFq+ZrkYCtm1jeLDY9bnPfP4XO3Zsfs095oQTTp7U0tJiF4sjAANy2YwGaUZV1kIOlsrlqmnZNjVEnodCIQfbtmEwA7blIPKp+89ms/DKPjL5NAp1WfR09eXymdwHP/7Rj30rk3bHVipVVCse8rkc8a5HGSqog4jK/7i9feWN8krsbLTrmxLUCMQ3mWHRQt13YP/QbbfevqpYHHjknrvueWLz5i0vM2Aklc6irbUF1YqHgcEhOJabuKO6touq51MxAzLwGh4ehsG5zhA1YTs2wogmMFJK+H4VUkp4vgfTtGAbFLMhwhCVykhichTGdGVFZjqxRlMphdg4g+moIUDpxo1CtG3LRBTFDmU6v0qfXMY4oTmSjHqoZ7A0wkkW9ZEU+ncZPfyYkbj1VrwqDMNErlCAjGga4gVVBFWiKzY1NmFkuATLsNDW3AIOA0MDA2x8+9hl8SI2TWOUqRMJTIMoRP/AANrb2l9VwAopMHnyJEybPqOvUqlG3LB12B4Z+wRhAM8jt9jS8AhsHRlRrZSTJoJcfUnza3ADEhKRkIk7NaBzYrU5mULNII0Qm4O1hYSUj2osRsUg1NJUYrdlXlvHr+Uazg6mNsa03YSJgFhjrBJjMTIX0tRIQXTfBA0HRRIZzIBpmuSuqyk3DDVKm1SUgQrGYRgmIhEmzSoYYJkW6V6VADcNiDCC7wWwHIeierwKCoW6dsu04AUBZU9yYH9XF9rb22HA0KZaDDCp6fJ8P/aLQF1DHQqFAm65/ZaRdRs2lHK5PFzbQcoh3WrgeWQupLPYmESS6x1TlCElxbzEbABNmUtIPozoV4wxWKZBzZuUGo2XME0LpmWSC7r+YkoqWAbZ+0sRoVrxEYYSrW2NUFGEgaF+dIwdO725tbl1YGAYYST0gzMA4xxuytZ0XJY0vXFuMzMYcqkcisUi7r7nrif2HzjQY3IG16Gmy7It0ihHCiJSkCyk+5wzGMqA0shu3NSDacpybJgxmgavHwBSyw+4HvIJFcGyLHDTgF+t0tReMCjGaV/kNEQTmpnCAQR+kKCnNNQIEQoGxhUcO0WDFEYax/EdHTiw7wCbPm3GBydNmLww8AOk0jU9rFICBuO1zM5R7AWeNI0M+/Z2olwpY9KkyVBCohwOI5Oph5tykYaLSrUKISkGSB6EEIzKutaj9vaxY3HK6adg1649qMs1pO66/a6vnffB83Y89Oj9y3O5AhhjKBTyAGMoDo8gEAECr0rDRgm4pgXD5MR24XT/m4zQ9iCQMC3teB2FpAnXcopICAghtb6XfqZogqDN1d7ajteyjJb/+uEPjwUD7r77Xtxx3z245He/xX0PPAhuGZg3ew78ShUP3HvfjsHBwRL++Xp9pPzI+e/49Kc+ebYMQc/haohKpYK6xoaac7wSeOqZp4fmzJyZaalvsdRBJvx6DxKCveMdp77ve//1raMWL1wy65bbbp3W2t42qTFf15hy3YTtIkMJyzUBRlp8zg3YtgnTMpLifMumLVv37dm75o18/1mzZ7UsOWrR7GKpnDBZ4iEgZ8Dadatx+213OH/96xVOvpBjYUjDRNM0YZqGdignagK3OcqVyu7zz7/gwrvvvv22N4SuNTa2p133oOdajAi1trbixRdfHP7zn/748oUXfvGwr9Gc+fPSV/7tb5OSz5C015u2oen9NhYvWhSu27hu164d2/a9bWtl9rypE8aMO3KwWET72PF6bkFDTykVDAAiVL093T3PHe5nLF167DEASCaXspNcYwAoVyp46cVVuPW229DT29VxzlnnjJt/xHxzZLgMEQawshmYpokwimDbJgCUf/u73/7yqaeevvUffebM6bMWxxTtWBwYPxcyro2169Y+u3vv7sFDOY6FS5Z0nP+h847TDPSExlzzbQDKI+XBPfvfPCo6Y+qUpU0N9a3QbDfDNBBGIXmZaJO5Z5599qWde3cckrb1pJNPPK2tvWW80k1f/NyNv78QEWAY2LVz98DyO+64T4rwLYkjstws/8Uvf/61445duiymD45W0b3qJclk6s7ld63+4x/+eM93v/3tQ/7MpkLDTEP74sQdvdLGtYIpuOkUbNspWIY9tr6hkZ9z9nu+8L6zz343kSol5dsrCcYMuCkbIyMjPb//4x/+Uiz2vuqcPPLoY1F3X3/djBlIGk+K/KvZJvf197RMnTrlS8csOeYDrzpWAAZpy71vf/+7v1nx9JN3vu7gIFOYBwApx4UfeuS+zzm8ahXcsGDYHM888+yGvfv29vJ0Kg03lYKbTqGuoQ62SYifk7JRrpRhcA7fD5AtpGAyE70HivWnn3bml5946rH/+fh//vuU3t5eOK6DxqZ6MAMIo2hU7At7lbHy62mdRqO9SVc+Op0FNVopB2Vw6SQdDA0NRw898Nimn//sl1d87aKvf+b66687/ze//M2PN2zY/KRhWCOZXBaRiFAuVQFGlCbfryLwSDtq2zay6TSYoEbKdRw4pgXbcpBKp5FOp8E4RxB58LwSlCAufT5XB9N04LouTJNDhBGiiIyBpJKwbJuaMkEZmNyggtc0TDJgMk2izIlIj4N1XWcwSBEh8AUhYBKjXNo0rYhrp1BuJIY+MhKk69D0UNO0YBoGTO1AGsf6BH4Ig5tgiqFaKkEpysaUQiGKIpiWjSAIkcnmkCsU4AU+du7egSmTp8444dgT5iTNnRztQqw1lYaFltYWSCa02QM1KzGn3jANbN60aQchRCaZh5hEc4i1m4Y+V5Zl6xzZEI7tIpPJwnFsyhJWtGFLTXE2uUkNnqF0FjFpgbn+TGboyRGTFP4iIygABkzS6ej3SaQv6tWsAino2tZWJHtdgDd29mPQWintmsxjPZAuWqR2XSYNJon0VTLZ0+YkGvnnvJa1HG8jdPyyFo7I6VzEnyfCEBCk4TYNA0wB6UwaUkoIESKXT8Ov+ki56XrbsZImWUDAMjm5gscxX8khS5gmNQWGYelpH8OkyVN9y7J8QjJIK8t0TrJl2TAtE55XRSQC7cZswDQsmJatDcaYNnTSk06d4coNTlpxjdLHjD7G2UEO70oo2LaDIKQ4H6L7aoMFoRBGEVKOjaH+AWIWQCGdz3ak7Cwb09KOlGsjEgJ19XmkMjQMUEzFGF7tFHNyBH7q6afE/j37R0rF8otDQ0Vk83mks2kyqhMCUSjBmaEHCJSZDalgWjR4UixuluJ7mieDGaZk7TgZT84JQ82ilZyoSVPG9M8iFZIRms7W5CYxJ4IwADcMmIZJ1F3GYXAThmXCdm0UcvWwLRvM5OAWRyadgV/2kM8UFv78Zz+/IJNNY6Q0guLQIKQSMBgpnUQUolr19BCJ/nBwYkhoDXYqnUE6lYJjW7j/kYfXn3DCKX9Zu3r1Xg7ADwQYN2A7NACJ0dTYFTV5ZuhBg2OlcdTRS3DyySeifUw7GhoLY3/yk4u/X59rmBZEATKZDDiz4Hm+ZkMopDMZpNw05Q0KgcCPYHATru3qPFGppRVGMiQjp0yeINIx0pxyUzANEyY3E+NFKvje2oa3rW3c2ObmtokAsHv/PlSqZWTTGezbtwdNjS3gDAiCCH0D/fv7+3qq+OfrNV+267IvX/iV80tD5dYDB/bDMk0MDRZxoPMApG4MOWf49SV/WHXKshP/7Quf++IvBocGBmKTOmJc0B6Qy+etn/73zz71w+//5IfvOft9H160YMHijpa2RseyEYYCYUgRIpZrYqh/EAP9A4nmTqgaMgoAHeM6ttfVFYpv5Bg2rd9k7dt/wC1kM2iub6KhuEbUfN/Hpg2bceGFXzLGj+8woojYJIZpaKNK2r24wWHYBgaHittPPfW0L7zRZhcAzv/IRxZwPXCnaEEDxeIQVq18EYYJvP/c90s3ndn9Zq5T9/6urFfxm2NqeUwn9T0ffqWCnTt2Ytz4jkhGYm1Pd9fg27Ve/CBY3NDWYjc0NtSQUEUMtLjJv/zKKx599vlnXz6c9x/bMaH92ONOWAyAdLig2EhTJ4Rk3BQOdO5DJASuuvpK6z8/9XFTCKWjX7TkR9FeBKD6y1/89hc/+O7FvxwaGHhdh/aW5tbWxYsWHzGafRZFEjJSsCwD1YqPZ5577pBN7yZMmDDD5GZ7vEfHYAIflUt+1VVXbbjsr5e9qTiiiZMnp049/dRlhIiH2lRKankT9QNDQ0V19913H9IQolBXxz9ywQUnkfcF02ARRmnjI5TLZZiMobPnwIade3c9/5bR5s9+93lf+txn/iMZ7ryqnlSI4sQOpVCqlJUQAt1dXS8NDgxtPPQGO1N34kmnLK0xFmkhcA1jG4xh3fr1uPWOO5f09fZ+uW1M+7d/8IPvfQoAi4SAkhKOa4EbBjzfx8DAIJbfc8/1EyZOfPq1Pm/ajFmqpbk1EyczcC11je/tUrmEBx96eOLnP/+5j7eOaRvj+4G+nkLn5xKgc8NNN1zzl0sv/V3ge6/5gJ0154jUjFkzZsf1ciaboQFmGIGBw6GhEJ597tmVxaGByDRNC/lMHgwSg31DGCmVwcBQrXrgBlCXycMPfARBACiOE0896Yxvfutb32hrackMDgzCthxtIKR0k8UwNFyEZdrIpFP/sLlNzHxY7QIkRi2jdY+xCZBeD1JK7Ovc1//UU8+u275l+8Zt27a99Owzzz5bHBnaahpmta6uDoZpI1NIIwwC9Pb2wzItbYBA2YmMMwgpUKlUyanONhFEEq5LCE2lVELKIM3jSKlEmjgh4ZjkOGtYJjVcQqBa9QBF7qcSEswkKnIQ+rqIB6Qi+24lCapXmh5TozLonUjKWhElQxjcoqJVRAnCKHVzGxuQkQU3koIxPlGxRbyU0AggQxCEkFIim89CCgXfD6C4D0jSJhqGCa/igymGupQD23Hg+x4cx0J9oW5CxfdagiiAbdo0LdTQl9IIKDcAAxyRCClvi2tDLymgFMOB/Qe8latWrrYSQy8O0zQS0ximiPrJTUNHioRgDAhCD8rTphkgUyqqVmsOumSExrV5DQiZZEobT6ikaVBxs6QneAyAYZr6hnuFyZV65ZAmNm96RaNb475Qk21QfjChubWNK3lPVUPzFRQ4N+kcad1lYv6QhMnL5EahZcASuig1yhT1EgYBrW+DBPucMXCLHtRRGCGMImRyOZqQ+tSYuq4DznhahHQ9UqkUKmEVmXQ6kQ/ElBopBMqVCrKZDJjt6ggpOj6/4nml4VLAOEc18OCXApqKcwOWZSMMAm10Bh1fwxGFoTZR4/o0yqRZV/qccmZAgFxV4wxiivDiYPohRSZRBuob6nGgsxNCSDiODSEi+IEPx3S062eMoNk09WxsaAKAUmkEEgp9vb3I1+eRzWSpUHyNzUtqXfP8efPUU48/tX3thrU7srkMMT88H5EfJnpj27SIiqwUSRj0FyAfAKnzyDV1W0pNY4fWyYw2PENi4qKk0i6OPBkUxehSHLEWhiEN5gyDzKsUIMJQ5y7S93ccQhfCUKAUliGlgJPJwDIttDY3Yc2adfjvn/zk/PkL5s72gwCu7cAwOUzLQhREmmVgwNZaICElDIPRNRUcYRhg7cYNmDt7NpSQONDVVb3yb9f8bvWql//317/77YV/v/zy/3FswwYoa09JWSuWWG3cG1PpiyNF9A8MoFDIwvd8KCGxbvUGLDlm8aL//MS/nf/zX//qR67rojRShRAClmXSsWpmSxSJxBjQtkm+IcMgMalinNzvmUpE9rR/Ma7PtYTyfM3AqXFKpRJ4q2N4Tcays2bPbAaAD1/wYbz3Q+/F8PAQOjrGYPq0KSiNVGE6JoSKev/Z1r7+q6Gufsrpp55xAnEuOQaLI2hpb8O9Dz+AJ558Gl/+8pcQSoH777/nKqXUHYyxOy1u9/z971d83zCMOhl7Byg1aujOkoiQ0I8SOlsUBQAz0d3TjZHhYUyaMFHLaADOlB7S0XvcfPMtzz///HNvyPymuaU5HTvpKM18iZebFAId48dh/LhxqJbLcNMuDWcTR32SSxjMgB96ez78kfMuevaZp5e/0fNnWI59+623TtMFCeVOM5I9vbjqRWW7FqurayqXS6WhN3OdJk+ePG7Z0qUT4iqQWDSA41gIQx/33HcPVr+0duPKVSuf+cqFX35b1kquvi7917/+9cRkyMxfzTrcsmmTuvaqqx72KtWRw/mMxYuOOnJ8x9hJNURHD9P1542bMAFPPfUczj7rLHz0go8lA3EnZdH9HsWsIES//8OffnXR1y/6oZLhP3RWPu0dZ8yeO3/ObHpGCEoJ4bqGAjBULI688OKLhzywmDRh/JE11LhWUzHtjssNBgH5slJy+M1cl0JD46Sjlxx1JD1+iRVWqVYBZcBJU0MjorCvWikfkomY47pjx7aPnR+jioZOFIkRas4Y0i71MKteXLVi/57db0nu8/wFCxbds/yuiwDUCSF1xv1BVjyaJYWEcRZ6PoOdwp49e172vPIhx8+d+c4zj3jPWe86OjmHMfNQUs40ADzz9DN4/pkVzPe8D1/wsY/yyZMnmUoCRsJwo2FGIZ/DI48+/MR3/t93/rxjx9bXRLyjUNUV6uob4jpX6gl2DcSB+vSnP9OxeOFCFhv5CiXgGMRSNUwTO3bu2PjNb37rd0G1+roD3XKlnOvoaB8PAJVKCeVqFa2trSTbYmaif97fvX8DAJj19QUMF4twHCoI3ZSNyCfqbcf4DrQ0tSCoBlizdjVgK6RcJxJhMFKtBplsLg/LMqgApEqMFr8CXF1QHITuqlqzEOd0xdoZVuvTEsroK3ObhFLBM08/s+aG62+4+/kXnn1oaLC4sVrxhsCZcF0bdYU6CCHQ090LbhgY6BuA69gwTQOZjIuRUhlSRmCcPtN0HIABQ8NDABQMw8RIqQTTsiBEiHC4CMOwEGkKhWVaUIpDMRoISCm0W6EJFTvGSkCIoEaFVdTYCkn0P2mAYoYUIDUazsBrBhm6yDcNU6NUQjdubNSNyJMMNYaaKUZ80mLkUCFWmNFUxbVcCCEQKkJzWdz8g/SsUSBguibqGuoAqdDT1YNCfYjp06dg7Zr1aGxonjNv3rxc3OwqxUZNxGrRMYT0GhTdQSGblANr2yiWRjZUypU1pqZcK8XgewFpnw2KWjG4AdKE02ZAlFdo51R9o3KlDXhY8uCP9VJco4OcsxoKDGi0hkJjGAxCw2MapsFrWtD4j8IrzKZYcl3jiCuGmo457nmlVFBRpA3FElJ1TOygZi0xtaLGLTYjiRF7QADgZISmjZpYrDPmNf2FZdKQwg88aqINA0xRQLdhWJCSUHupJGzLRiptIwh82KaFxoZGDAwUEQmBMe0t2cHBQWSyWQgZobe7G2NaxxzU1cfZbelMhnSiuoiMT1DFKxe9wCtBDySkplGDgfKfpaR1AQXTtBCGGtU3Kf9UaZp3vM5jR2fTMIg5oin9Simdo8wTGYBlk6SgODREml1GiLxlGchmMrBNG4EnUPE9GDbD0BCBK4sWLW4GANdNQ0iBnQM7wQ2FbCZH/us6FqP2RKK9rupXsWbdavPOe5fv7+3tHsykMyiXyxrtpL0AINOsSGd8xui8CJVGlnhi9EHMA1bT1cT31Cgb/3iNJKMbzdigB0o8ODPIBI8DUnJEYQQ3lYISUmtpyAVeKIlACEBJREGAdDoLbqTgplzU5QsYHh5CU2vjcSefdvJHYmqXZVnwvABbtqyGZVqYM3sOwCUMk/YPw2QYGRlBqVRGY30j0rk06hsa8dLatZg/ex4evu/RJx64//7bFi0+BhvXr/vLJX+4ZMa//+snPpXNpjRbhIEZ+uGImk6WgyEUPsIowKRJExGFAmEgUCqXkM1nEIYRPvTBD5/3979de+9g/+CL6VwGCg7CUEDAQ+QHkL6EMsjxOQgClL1QU9go5zreezkzkiGSZApBFNXy4jW1i3ODXPJRe4Bz9daZVtXlCyztpNtTtlsAgNuX34nFSxZi1XMvYfny+3Hyyach5ToYGOjH3n379+Gfr9d9HXvsCUc3NjRPCrwyZBTBcahAXnb0CahUqFZ7+YU1nZ27Ox/TNYpy3dwfsuk0fv/HS75tmlYTNbnEEIr8CExHqnV19aC1fQwcmwZxvu+j2NOLYnEA4ydMgptK032JUQ7rnKE0MuItv+vuF372s5++oWM46uglYzva291yuQrHdhBEIVyHBnaWbWPurLloam5EKpPWGbmjBraSEFkA1W9+4xu/uu+e+24/lPOXz+eybWNbGqHvE6WfRY2NTfiXC/6NVb0qbr99eVdX5/43Ras/4dQT5jGDpaQuioUkJ2oRRRCRwowZMyo7tu3c3dXZ0/l2rZWjlxy96NilJyz1vRCOa5HBoEbSmVCAwTBx8uSehvqGNYf7Ge8+84wlBoepFJLaN14XHEChkMOxxy/FkkVL0NXVie3btmPJkqN0EgiS637l1Vdf+oXPf+5ipeT/GSM0fmz7nPjpVS6X4fk+6usKeOHppzFz1kw4jtUHhe5DYk7YtrH8zuVHxcMBbozyGWEMXM8DO7u6Nr3pe/j4pSfMnzd3plRUhwsRApzBtROTX+zZu3NNtTpySFFVy44/dtbUaVM6AJ2MoGopD3ENUxwuonN715Yrr7r67i9/6Utveo0xzlvvvf/+73SM61gogeR5F3tExMCNUjUJneM4sA0Lvb29BwYHiysP53MnjZs0x+A8O/oaje6yd+7Yg8v/ehV8z8Oy44+xP/upT1BdzZQG5+J6yoSSKF1++d8v3bFj6+siza2tzZNamhvzChKGRd45NAih2iebzbJ3nvmOxKzTMjliO3mD2AvRNddd//ud27f/w3stk3bGpl23hUpRC7mMCc4Aoc16ucExNFQsrXt5zW4A4OVymZqgSJD1O7fQ1NwE3w+wf/d+PP/s89iwaRPGjmtHx9gO3H3H3becf/5533jooQf2xs1uzVmTmpN8Pk9oplI1c6nkJGvaaOwgGl9wxuBVPQwPlxAE4UGU0v7+AXzne997+JyzzvnXL3z28++++aabf7Bj684VMpL9KTclWpuaEfoB9u/dh84DnbBsDse2kctk4Ng2TI1yhELogk8iDAJtVgJYNlH8TGbCtWwoQXEV6Uwa6XQq+S5SCQRRgEhGOnaH4l9Mk4rPwPfBADg2xRdJJWPiKUzL1PRkBdPgMXZD6LJpJfEsRNlkGukjswTK4RydOVrTbyqoxEE01vZQFqZMLM1NyyRjrdCHVEo3SAH8KIBABCEop9VNpSClRC6XgWUZcJwUOto7wBnDgc59hc9+8fOnp1wXoXZAowGhOmg6xWP0U0E301RchyGdqxuvu2HFiy+8uLu9vQOWSY2aH/iAboJio66YDg4Z6zo5iHKrj19KQEht307TEmbEVEquQ+Ij3QTyGvUbAgpEeVaQScEahQEUE2BcI7KxVlodPLCp0exHhRoy1OJ1EGum4+EO1++RWEQnGkwyHiNab/zfDW5ql29DD0WEprzHyTzEKmCM9L88Xku6ESaxvoSAQCRCMC6RSqdhGTbCQIAxA6lUCtwgZL1SGoGIwNNOOm0aDKURyl6mGp8nn0v5zpoep+k/QlNU4lzZrv1dvcMDQ8VqtQq/UgHniqK8uIU4etwwTBjMBMDh2I6mG8uELWDoTFMhBCAVIiHhh5rGxGvu0EkWZfyw0HSnqueR9suydH6jAcd2NNuAps7plIv6+gIy2SzGdYxr0s06wtDHEfPno7W5HZ7nacrqKOaJ9hAjbVIJnudj2vTpQwbnwrZtMINDyAjcMhBFxBxQUpIJYCarXYKhHQvlKM0GuV+TCZ2hUSGWAADyIOMkvd4S11XNFjDi80jrW4yqgwI/IDYFJ/TXtK3k/Dq2g1whj9YxLchk08hm0ujt7kN9U+uRt995+8+OWrK4PVIRPL8KN0Xn0TRtNLe1gBkKQoYIg1DLNjhs20JLcwuCwMfmLVvR0tiE9pZWRFIOPfjQI38dHurvFZGP+lyhctlfrri0u7d7o354gJjQtHqlNi9jirKaDNdGc0sLDMOA49poH9sO23KSvXDeEfPnfPe/vv+JoeGBVBj6xG7gjHwQwgCWY8O1UjrexEI6nSbjLlCMGgPdV0pKjfjS3+PrzqBp+aaVyAzIG83ULJq3DuINVWh8/VtfPXLm9On2isefwIoVKzBp3GTs2LYVrusgn8lBCIFyxavs3L5jG/75et3XWWeffULKNRMfDse2cc/d96B/sB9HLJhD9cXQ4Nre/r7EPMrzRsKrr736j+d9+MP/9uSKp27eu3d/P+c0aLYcC6ZJdctQsQjXNtHb3zfwyBOPPv3Cc6uu/NEPfnzJxf918U3lkVI1HhMmA3w9nN2wYUN/d1fnnjfcXDj2zLg6pWg3SU6nkkyVjjr6aIwZ0xGHz2t5DO0H8fPtV7/73d9+8+vfXXbIw5dCPtPS0tyYABaj5sE9vX0oV8rI12WHpJJvKhZr3py5R8VIm9KaVpJqEBvnySee8UzL6psxc1r57Vor06bOOlZKdPT19QCQ0JVY0pACwLXX3PjYMy88t/VwP2Pm7JkLaU8XYFqTx7U85MCBLqx+eTWKA0NYvHgxWlvbcMSCBYiEQLlUhVchoGvbrp1P/dfFP/6lUtJ7I585ZmzHbKpfQRI+iwbhgYxgmjZuuuGm5zduWHtIzWJ9XfPcRUuOOiZmHILVHJrjnbC3f6C8du26jW/qmsycMfH957znQwAMEQpEPrnsu7aT1MD9fX245De/e+bZ51e9oaZ9wsRJDADaWprnWIbt4iDflVHNKQO27dgR/erXv7i9VB5+S3LOf3TxxZ858/TT3xszMDGKQVALC6FBeyRDRJJqP2Zy3HXPvc/ecP11Lx3O53aMbT8iRuPjA2WjBMPF8gh27dsFAPjyl76ChvoG+EGQmLxCS7nAgLvuvefG51e++A8lETPnTJ1ssBjU4xCCTEXj5BbFFGIneWg2ShSEKgZzL7/8r1ded+21V/1fx7X02ONmjhs3rh4gpNpNuTRIMngCoO7fv2/fnj379gCAWalWkMlk0d/fr5sLBS8I4XmVxDXMcYGxY8eh80An9h3Yh227Nl/34CMPnXr22Wf9C2e0pYtIO41ydhDFdHTjGiNtUAzcYBgqDsJ1XLhuCus3bkRfTx8ampqQTqXQWF+Pl196CdOmTMZTzz678fJLL/2cya3NTY3NaGtrhxARMtksquUKKqUqXNtFOku0wkhEGC6OED05EBBKoThSIhqblPD9AICEEAZ8X0AxCTeVRlANIJXQRb1JzUUUaHMsHRkkIyhB+kyKWCGUQOo4GeiQaJVQbakhYKBiOL64cZMfCgGmRM0YKW4ztDuvwWJ0N6a+yFqDFRt2cSpiozBE7EwrlY7aMEwdtSFgGERfVQpkWqWpo2TQ4yLwfVSrFZRHyrAdGxMmjUNrczPuWn435syb/Y53vuvM4wCiONTovaqGOI3mAo9CpKWUqFQq6OsfwJYdO1bm6+swVCySAZFlQlmmbtgJCRdCgNSj0G6NRE+0HAuVskcPc03pZKxG60xUjpwykRO0TMXoqs4f1vThpIllDBBKRxSNSnxOEiBYwk4wNKIpxah8VO2EKYRIEHqu/w86aYglmaP0nRWTyfkxGIMER6QLfdIvcMTqUcu0tct1lGhYTZMo4b7vw+A07LBsRxtYkRM41T8mgiDUUzQDMhKoBj5CM0QmlUFzUxNKIyWuAF6oK2B4aBjpdBpOx3iNSsQDq9FRA/E0NDaOo6Jq+5btBzg3qh3t7eju6iKjJMbh6zgipTc+BToWcMpxk0oQdVWRNvug5k4pfa8ofW8R7dXkeqCkDCgFVL0qoH8eU1ZNraP2gwAG4zBtohe7jov+/n6YnFlhqJppjQjsP9CFqVOnY6RcIgMoVlMIUFyYRBRGsG0b9Y2NmDh+Im677bZhcC4yuQzCQKCIIURJsx4RTVkI+FFE93pMVNbmITSkgh7CyNpdpKniimlDPlljbcS07kgPPqSSMBRp9blBcU4MBukHlULgBzBsUzfaCpxLcCXRUN8ABoWRSgWeX4VSERhzYbnWzI/9y7/8aNlRxywdHimjVB6BZTEEgY9cPo15TbPp+yIEg4TByTm0Uq7AcVMwDIZdnd3YsmkzJk+YgAP7q6V/+/i//Xzj+g23T5o0FXv27cWuXXswNNS/8g+/u+Sqn/7qFz/xA0+jFzUkmjEDYSRhcY7BYhFp20Uq5cbqDHR0jEUk9DDEsfAf//mvH7t9+a1PP/zAg39PZ3KwbQsQ2vSP+lT4vg9mavq3IvTLMkyEChCQ5K8ADqEUuDYCJMd8BiZ1vAJUYoxHUV3s/zRkPCSqne3wydOmjPPCKtZv2oDTTz0Z9YUCFi8+BnPmHwEeu2oHXl9XV9ce/POF19Z3zcnfc8+9Rw+PlFEZGUFbexteeulFrFuzDp/49HHJ7z38yAP39HUfOIh2WSqVAgB3NzQ0P9RQ13D093/4g+O379zhlIrlcNz4cU2trS32yy+t7Pz5L/dsWL9p08YDnd07u/furZxy2vFYtmzppzKZzPuQMNmELvqI4eKk3P5CIfeGdddTp0ydDwC264BzQvmEfv7E5C6poGsvJHKKmCp5z7333fKrX/7qv5VSh94sMuShWH1cLMeN//atO3Db7bfh6GVHI4iiwXxdfXC416lt4rjmR+9/8OjRbCJiwBjghonh4UFks6murVu3bVr5wsqBt4XOnM1mrvjb1cd2tDdBRAENLBWvxSqaBtasXV/5y2WX3iMjHNZ36BgzftwDDz40O24SjVHGk8QyMrH87jtwyiknYkx7m47PS8GreoiiEHUNdfCDsO+b3/zWJds3bdz+hij9Tc2pm2+9eQYAiDBCKuUinXahFHDKiacAAO69957HDjXH+0Mf/PAZDfX1YwhZo0SBmC0XH9GLL76wY/PmLYcdmZbP59nnPvu5fzntpNNOjpF2ITkYNzQTh2qyxqYmgPE3vA/u3rVTAcCcGTPnjG5uD1JQ6veeNGFSeaBv6LktGzd7b3aNffazXzjvkt/97kvEmNLRorHEbhRgFL/MOKZRv1a99NJDvYfh15DJ5bP333vffOgaJpagIoldAzKZLCzTwoIlR+PMM8+k55BlQyqp0zQkDMvEy6vXrP7yl77y39u3b/qHe0l9vtBMa8NIgAwylK0ZkiqloHjMlDQQhYKlM2m8+NLK537x61/9duO6df+nbKC9Y9xkgxvM9wJUqhVks1mYzCImXSTAbY4Nmzat7+ru7KSm2LIw2D+AMAjIjMOyIFSEMAzgBQHa2loQ+T4eeuBhCCVQ31KHzn1lBL7v79vfiXw6A9d1E70DGTMhMbKhJJhaIzL6JbU7ooTCmJY2TBg3Hv2Dg+jt6kNjQxMmjB+PTDqFbVs2PWia1ub2tnYMFcsYHBzAmPY2mNzE4OAgyuURNDTWQylCLPL5HMrlfQiCEL7v0TGFAhyA6zqwLBulUglSUG5tEPraqVijqJKKGNK7Cl1/auqa1h2apqXNpSjjEYyMThQIzZSaihg3t0rbp8t4UqrdhJUi92LOYgSR6N2CSfoeiFGtUXTH+OFmGFA6IzIMQyipkV6ttYzzW4XWcgIMlWoVhmnCMnUjrHNL44ejbdmwTBucGaiMVDCcGoSbslNf/MLnz0k7Tra3tx+5TAZu2oUfBZRLatqvWogE/LP4iY/mlibs3r1P7d+/78DQ4BAaGxvBmaX7Q4Xh4ghsRyUIH2cMURCAGSbADARhgCAKtVOzjn9yLO18TQY+Uobk4KynUYwZScbp6MljjNgo3XgkSK2mNCs9da0NGmL3ZqYjSLSJVIwAqvja1Ej8hCSjFm+kGN3cWl/FdRRGJEOIOJNWR0kpjYQqRaglrS8yIiEEkNEDmTFww0jWRcxuiumwnDNEUaizzBxYtqXRYQOO4yLluOT2bVm8u7tPVkZ85AoFmNxEGPooVyqor68fRTdliXETOIPJyL1W6UGXYrIvm8tp3bSEZTpgzEgKGMW1aYseghijwshHxz/EQmWmXf1oKBHPV4jRoHQmrWERDUb4lLNKlvlk9haGAlEUwHJMSMZhOymEfoSR4TKgJCzDaYRCC0Bma4V8HQCFbDZFBkZQNS01UzAYh4BCtVqB66aQzeawZ8/esueFYbE4Ass0UV/XgFK5Am4wBL6nr6WNKArBmNQsGDIaI70uS/YVbQVai1aKu22p7yUNN8YyCHJ3l4giCdN0yKVaN9lKCjDJtIM7o9XKJKIohMlNmKaNMArhV30IJeFVPIRBgEqxOvXzX/n8Dz70ofe/S0lg8+bNmDRpApoaG7F71w5Yjo32Me00nZYMlukAnGNfVye6DnThiDnz0NPTh/0H9iIIAmzcvMn7818u/fPy2+64pLGpOWhuakLQR7LTuroGXHf9tde/673vPu2UE08+pVrxYJomAj8CB4dp0zkQkURDPgcpFaoeuYgrpsBMTqit1qa5bir10//+yRdOff75J/1qsKPQ2IBicQT5XIHuIY3wm9xAEAXkNmm7yaCBMglZMsgyTQuWYeoBIiD1UFdBQSgqiLnkifv6W/aSiNauWe8tO/Z47NmzF7ZNDrmr166HkAJnnnE6AGDvnr2dxcFi3z9b29d+ZfOF6Y3NTRNLlQrKvqfqfJ9t374T//6Jf0ddfR4AcN/996+96qqr7v/5T//nNd9jYKDXB/CE/nPQ6/zzzn3Nf3P6me8al8vmzbiAVdpYLgxCVKIQW7Zt2SaVekMa0DEdYxtvu/mWOTGLKtK+GCZHwhJTtRStBIWN6ZA33Xjjg1/+ykXf3r/v8GKDFi5a2DZh3IR8wmrSU8B8Lo8li5agvW0crr/htm1dB/bLw71OC+YunD1p0pSZABl2Ku1jwA2Gvp4+3HzrzXLb9i27unv2byyODPpvx1ppbmqateSoIxcTmkYDRigGg9cwm56u3mIUim3jJ3QcHmX6mKPnzZ47fQqApN6iRwDVhtlMDuee+0FMGD8hIb2IIIJhcdhaS/rLX//62rvvXP6GaempVDo3fty4STE3W0iSAvnVKlKpNPr7Byqdvd2HFEc0b/6R9ddcc+07OEfiw5J4m4zSMXLDfGnThnVdh3tNlixafPy3vvWtT8fAhGGYlAOrB9BqlJdKNpc7pCHE1Gkzs7fddtM8ANq/QTsIk+osOQjOeMWrBG86cmvBwsUnP/H4oz8yTFYnNBtKC4YPGnok8YcM+hmv2XMHDnQ9ueKJZw8LJZ88ZcKM6TMmJwAS4v1CJZLEh+9/CF7Vx89+8lPkMjliE+qhmVQiScG57vrr/7p9+6b/k1XEuZVNmJcauKFnLK/VzVwiUjIBL1KZFACUrrjib3/ZuG7dG5IN2Iy3cD2My2SysCyTrieIuQsATz7x1PoPnkt7NZ8yZQoVpJzD831EIgBTgGnY6Bg7FqVSGQe6OhGEHjgDhgZGcOrp7zx+6pQZc194caVas34tunv6YDs2oTiS6JSKqYSaRwV6iH37DmD37j2IohCDg4NwLAfZVBoijNDQUI+uzm7cvfxubNu2Fes3roblcuzat2dgxTPPPNzY0IAgijBSGkJzSz0Cv4p9+/YhjCT8IERPbz9GRkbQ39+L7u5uSCHIiVVJBKEP0yA9W7lSJv0Vo4gCz69CCAnP8yAh4LguHMclXZqmEnLOtDEJWXIrIMlkFVFEBSpAekXIJDoJo3KuENNhmb6h9BRWiZoFM4shfy5H0SpqU1swHRkCpS+q0jmlcQ6xNmKSUr+XpswYRi1OhTEyPgBHpJv8KAgxXByGZZjI5woYGhqE51dh2hb27N+H933g3OlLl51w/LZt2+FHgfKjAJEIUalUtXvuawyGGTEYYsMj0iJY5WqlNCBFiCD0URwpwg8DDZ9JiIhykZVUsEyLnBmiAIbB4bqk80tcbUHa3yiKwDmDaXLYjgPbsg/K3zo4WoglN3KcU5sMOaApZwavXU/d6NLBMDCmHZEVyQ2gBzo1UxNqMrlpJO8hoZKHWzxVIxS3RmG2DEsjfVL/0ZE1SsQjEv1dadgShgGEDPVQo/bepG0MtKkR0aYMQyN9DLAs66B8w/7+fkgl4bgud1IOmG0g8IlCU6mUUCwO6yIrghg1AI6p1V4QIJ7wAsDg0GCxXB6BV/FRKDSAGwaCiOKRolAj90bsMq2ReEnUPDaKuotRMoiY3sYY13peC6ZhQTEGIRREqO8hTfFVkYRtOoDOV85ks2AAPK+Kvr5+2JaLdDqNSCk0tDSPzWRTLQCQSmfQPmYMDf1MByY3NW1bkOFMnP2rAD8M0d/Xh9bWVsybO9cXkS+GBgdRLBbheb528haItFu7EBLQiL/JqCnnnFgN8YCK0oc0+i2FRhLpugoR6WksNKKrknxgqQuYMAxQKZcR+hE4J/1/4AdkAGYaWntD+b+e5yEIfQwVh2C5DuoKBVQrIWbOnH3En/78599/5cKvnufaKbZnTyfmz5+HlOOgUqqipa0drW3tyeNSCBo+BWEIyzIxf/4cWI6Jl1atw/XX3qImT56M22++4+Er/3b1/3aMGzcilcDIyDAcyyHX4VwOUrCdX/vyRf917wP3beW2Adu2kEmnYNsWiiMjYEyCm4waUW7AcixwBhhgCKMI23Ztx65dO7Hm5TXYs3MvFi1cvOjS//3f7wEqG4kI+XwehVwdDNMENwE35dDAz3bJdEhG8AOP6J9aYuOmUnAdF2EYouJ5iCLS7SqDXJ5ty6Kcce1cqxBBQbxlxffA4KDctm17uam+CWknh56eXj2FdzGmrTn5vfXr1nf1DXQX8c/Xa76mT5++LJ9OF3J5am7XrF+P+UcsQhAorN9IcZpbt297rn9g4C3L1swUCsYpp5y6qLZPquQ5k0qlkM9ncc1V1z67e9fuN4SILjzyyLmzZ8+ZGCNcnLFRXkc0FRuNAtWea0BfX2/n7//wh9/u37fnsI/vxJNOaIuHqQbnGkoG6usLqPo+hkvlUl9P15o3c87Gjx8/zbWtdNLCsxo4MlIawYGuzqi3q3uoODz8trkzn3f+hxZMGD+hTei8eIoM1ENF3fwsOWrhQBhUe9esfvmw9AszZs84CoD2LlGJ/IuDIQojrF6/EfUNjUin04lLvePYBCrYDtasXr36Fz/7+R+qldIbbvqnz5jWNnnS5DFVP0AYBmRqCWB4ZERFYYj+/v7+4vDQIfkAhIE3pa6QWxAP8g1tmhrXqZ1dXejt7QseefCRBw/3enBu8H/993/7j1w+N0bKWqMGSUPzuIwGgL7u/h2rV2/ccSjvnyvkx+cLdRMSgEARUzVmT8ad9KqX12zvHex/Uw7kDQ318y/5/a+/n8/lpo2y5ABTByP8LGGTaalYLXsXN910y9bO/Z07D+fz5x15REdzS2MLMMqCVKmDxIgLFy7Azy7+EU46/rj4slLdqhMfAODlVWtW3XH78rveyGeOHd+RBwAZCijtI0AgVI26rRSASEGEAqFP9eV99z3w8C033n7HG2KGjG0z5s2fPR4MMC1yOldCJXVS/BKIEvSf9/f1IZ1JIZ/LwbINlEol9A/0ww98KCUTTZ/v+/CqAULPx9FHLc6988x3Ye7MeayhvgkNjYXkktm2Q0W8aYEzBt/zsXfXHlx11VXYtWcXcrk8hoaK2L//AKQgenEY+JChwLp165DLZnDa6afANBx09/ThqaefXrNu/cYXGpubUCoPw7Et2JaFgcF+9PR3wbA4HCeVuGxKIREEAUxd5JmWDdtykpiSSAhEkYCEQCRD+IGHIKiCM2oahZQ6IJnopQbniQuuYZpkD88NovQJCaZDlA1O5k9x7m1CL1IgWnJsKsOoYWOa/sx10atGtWlktc50Pmft5iPoH0nTR5SO2uJl0HmmUlJ5ndjD10TxpmVoGh650jEdH6KERLlURRAFqKvLwzBMFAeL6O8bhAzFrHHjxo4bP348OsaMYblslvKZ0ykacozWuaJWqBN1U8LSboD7DuzfuHvX7gOGzoWNghD5bBamaemsU5ZoUv3A18izCSEiCCFr51ixxMjJ0Bth1ffgBwHRSXVOaM2squb4y5K7TU/Emar9kTKW6iTmHOSaLXWzGut56L2kknEVkqCQSv+ctIjUpFi2QwgmIzOlOGYmOXFcazJNE6ZtaWMu7S6dMMR54tColKJYKaazmXWeL+NkYmVZ9JA0DTOhWkdRiJGREUSRQspNwXVs2CkHYAZMy0Rzc73K5zPI5NMY6O9DT3cvWppa6a42KN4mmeEwBUNrJ71qFX7Vg/AkDuzrqoZRCDftEgPA8xHoQZJQkd7IhW5wFelTkmuur7/WIcfrnWaDquYGrQcXMoop6QxRnI+qJAQkHJ0lbnAO26HoLjeVRiqbQhAFaGisgzI4GtqaFrSOaW0sV/wk95gl9wsQhiGiIMDowDTbslAoFNDY2IAnn3wSDz34cNUwYy01ma1ARgi9AJaps2+DKoLQI++AKCLWgab7GJr2XXOir52H2CmSG1zHL/FEC8gYg4yIyu+mUjomjK5P6PskubBMmJapDe7I5TqTzSGTzSV7ViGfQyqVRjaXbfnVr3/1kwv+5SPvCCohtmzcggkTx2Dnjh1YufJl2K4Lx3VrJl6Kabov7ZEN+SaISOHRRx8FN6He+d53swmTJnaueXnN39Kp9NZ0KgWugL6+XigAzY1N6O7phASwds2GJ66/5vpLK+VSxHQhH0YBOFc1ExG9mZqMQYgISiiYMNDS1IzHHnsc115zLaIwwoa1G/GBc8790Omnnn7e/v37USwOYqRSovMSRKBWmescbwZHyynAkbjhB2GgJRaGnsATkhFTwCLNniEDNpm851v1SqXS7Kyzz3YA4MKLvoIf/vhH8ITE2Wefg9POOKM23U7ZPf9sa1+nYDat+o9e8NH3A0DasjBuTBtjzMBwaRhr1qyFofeYZ5967oXQq75lAuxZM2bOX3TkEYuS527sWxI/cMB7MunUY2+4GZw4cUk+n8scNEhm8bOmJhM7KL9T//3WW2+/5qWX19z3Zo5n9erVYxEP+KWCVAJ93V0oV0qYOW0KIt/fsmHDpjdlTNQ+sa01QTsFPWullIiiCG1j2rBkyULW0toecGaGb9d6mX3kEeMBINLmihyxLIz25K6uLtx0w40v79+378Bh3dP5nL1g4fyFAMijI45x09cqiAKM6xiLtpaW5BrS0pFwUykACP/nJz/93UB/7yE5Ebc2tczlgKukhAhor1YMqG+oZ5Zjobene/WeHXsPSRZx3MlLZ40f39GoyeeQEtoHgQ6mp6cX//uny9dd9r9/WXG41+OUM057/7nvP/dsqt+UBncUYABChShVRlDxqPa44cYbntm4ZfMhrcF0Jj2urj5fV2P81SSCo/0Y7r7rzudefP6Zw95n2zvGtF/+18u+d/yy40+MDV2ZbgDkqDoUo31eIIllG4Sj32d/T2/X0OF8B9dJTcDBGBzdzzHAphSWHL0In/rsf8JyDN2M13oRQ+cc3778tjs2bVz7hgYLpuE2AIBpGsSMHJUyAij6aI0fiUjAcR0AGLr0iiv+2tW19w2h9fUNzW2LFi+aCZBUiSLZ2CgTX6BYHPE3b9qcDHT49m3bwRgw0N+PwA9RKNTDthxUylXs2rkHjusglU4hlc6goakB6bTL/nrp5Y9845sXfe5b3/r6f1z0lYv+eOMtN768ffvOMAwjREJguFTB+k2b8OiTT+CFlS9g187tYJzj6CVHoaGhDoNDgxjbMRa5fA6SAYZlghnA0qVHYfa8uXj4kUcxoWMcspk8+vr714Sh37lr524MDQ7Ctm1UvDLK5TKhfL4HMAXTJIMjqWNhLNMiL17D1FRVHdsTF9KCEEXDNMBNM3liBD4NXqMwpBPHObncyppRBDiIMsgUlBKIwgBSKQihyHlWoy5M62PBWW1yCUCJWnPIY6MeXUTG1NZ4eqvkKKo1Gy1uJ5RXCEJ68QonWWrY9e9IASftwnYdTd2mpiUSEXKFPLLZHMIwQsp14ZgOUm4WmVQajc0NSGVSmDRlynHplAvbthCGFGBvGRZpS1GL3Yk/Pm5SwjDCcGkY3DSwacNmXH7ZZU9UPK/LcRwya7JMFItFlEolpFIpWBZZkpM+g5xuLcdKGhzGFKQME7TSMMxaZm1MB9Y0UCWl1h8wHFSLal26irWhiRGHvlGkzoFlNDBgSSyJHntpJJgzMqNianSTpMkbQoLF9GhISBFpxLb2vjHqLqVAGAUaxSNtsEqwYdJrU/NTM36Lp4A8zg2VtM5jZFkKQdFXUhuXcJ2Ja3BIFZIhD4Bq1UM+n4Fl8ai3p9+j6a2PYmkYuXweYApVrwqbO+DKSJyl46bTsWxYlg3bcWC4HE7K9gCgNFLG0NAQuMmRSjmwDAOGaWldqYWUmyIEPDbDlirJTKVryGr0nkQ/TfreUISIVJg0jEQPo2m80iKi4ZEiStUypJQYGS5BKkXrhRsIgwCD/YNwLavwmU/8x7umTZpiQJ8vLwjomggFKQHHduBoOin0oIkygWlQNaZtDFJuWpiGxVzH1fnX+jppNJoZBizHgWPZmh4UD9QiRFGEKNLXQ59chZpObvSUUsNFNAyLkR1IcIMhEiGiSBDLxuCwTBspN6NR6YjuJ42Ics7hOE5Cm/c9D3v27sIJpyw967jjjn1HGETYtn0rJEJU/BIGBgcxbfp0MubDKI8Bna1t2SaqVQ/lyghKlWH89L//ByseeZwde/RR8tvf+fZVtyy/5bZ0Lo1yhfZr13GgVIjGhibkUgV4lQoy2RTuv+e+m667/tpHewf7YXLKCM6ksuRiqu+t2DtABALVchkiDJDP5nH2e96Dpccdi2qlhLq6AgIRpb79ve/+x/hJk2aAmcngJwpDbeRjkvmU1j9zw4BigOO6sG2botHCSJvHsaQgoiafhpee5yGMAiSudm+hS3M2m7Y2rFvLh8tFbNq0GU8/uQKGAl584UV07uuEksDw4DDWvLz6bXOs/f/nF2Msd+zxR3/y9FNPXAYQFV1IhRVPPIkXnn0Bxx1/LGbNmI7h4VL3vr17Vr2Vn/2OM854XzaTadZglI4Ro+Hj7l175H/94OIbt+/Y/YYopNlCnXH00qUnALHmXI5Kfk4qVxh6YDY6Uu+xx598+L9/+rNfDRcH3xT14JijjiHtn5RJ9GAmW0Cl6iOdSQePPvLwQ1u3bj4sHfmRRyxhABD51bq4eEgSO7QRXxRG2L+nO9q1e88+z6sMvV1r5rnnXmwEoIelOiaG1Yxv1q1dU7zpppue7+3rPizTrHnz5k4+/tgT5yeXTstWWG3IhbaW5oNnFgqaSgZceeXV11x34/U3Hurnnno6Za8ajCGbS9OzQCqYpMMOr7n22nsr1VJ0KO85Y8YsbbxFtHPGa1CHkBJHzJ+HmbOnbu4f7Nt1OOdq6tTp8y+79NKvZ7KZBhHJJN9dqlqlpRTVzdWKh80bN+/q6dp3SNrWuXNmTihkCw6daz6KCXjw8Ki788Cb2h/Ofu85//m+9xKfVsnRtEOtfT6IrBHXOhymYVG9oAdagYgOmxp+5BHzZgJav6tZCzXwYnSDqC12R0VsQtfPzz317Oo7b7vzDaG74yZMsjvG0BCLGRoE5LWamz6DtiXLsmA75LZ9xd+uuv2O2++4540eV2NTw6SGQn0HAFiOTYk6kvqw+Bj7+vu7d2zfkSDjphd4KFfKSGcp2zDSMQyGwZDL5eCkHWSzOWTSGQR+gFQqpYojQyOPPvroS7NnzXrJ87y7rrjiyiMff/Spufn6fLo8XAwOHOjy1qxdm5sze9Z7v/a1ry5mgtzhLMtEb28f9u/vQmNjM4Iwgoyo4BgqFjE0UIQIJEzTghf42Lt3X2njxm1blQIq5TKyuTxax4xBGPo4sL8bDIDrWiiVKnAsCylNQ/P9EJ4fkGspg9YFAplMBl61CgiAwUgot9RIRYnmNAxDAIy0rIaO+dDNL9PmJWSwQ02KZVlJ/E1MnYWkKawUIinaJGqGPPHdFUkBrpstAxxSN4uJgQ0jcyZd80PqaVfsPBxr9Bigi3EGyYyahlg3w0FMtdT6X8e2IcMYHaRIl2wuC5ObKA4VkcmkUCoNo7GpYe673/3uU+MbhPOYS6KNuWJR56j8Xwgd68E58rlCQt3t6+nb7vsBVKQ1eqaBatUjlJYb0EJmGKYBgxEFXYgQBjcQRRKGRbRVKGoahYx0MRzrnEnfKoDkBqPt0QCYbiBHpQ0xjRCy2JQs1kwnlCNDO+3WaFYybjyUSPQ3BlPkfquvh9RxOnFjGYZhghTFEy4hI0IFY5DXoGzoIAhq00YF2I4DzhhCvQY542Aa9ZYqgmHyBMEjtNfQbsgWrQEC/WEY9J0UDPi+j5TrwjBMVKtVDA8ORSNDwwEABGGA8RPGQ0kg8ELYOq+WJRpaomRFYQDLssi4jTMEno+e3h5Pw9Va6yjgByFYrK3VjuPc1AZuum2j3MVapNZoA7d40yWEl+jRtm0hioQ2LCKttlIg1Ebb2humSbmqvkAulYFiQF0+i5TrYt+evVh49MJTP/C+D55E+0IaoYhQ9kowTQ4RKTBbJbraZJY0CpRnDJg6bSrGjR+nnn/hBR3xNASvWiVTNJ3/azsuDM6JSqbjkqDdmOPscpr2yoTSLQWIRaALIsrqs2icoojpIKDzjJWCDAOYWgMdiZDMy7SpFVc6fJ0xYt3AQBRGSKfcOJUare0thQ9+8IPvBGAMF4so+xUYIcO9d96PRYsXYcyYFqLhSTLDYlyzU0yGzVu3on9gAKXBIcydNw8nnXQS5s9ZgEcffuLZyy//6187xnYIGYYYHh6BUhGymQyq5Qp2794D13XR0twIPwrQ1dWz67abb7ty4rjJM8849YxxpmlAMUluy4amKhkm7acGYNoWoBj6enpRV1+P445dBgBoaW1BX98gJkyceMySJYs/eMuNN/24Pt+ggmoVUIr2E9OMW2iIiPZHk1tkvihDrTunDcK0TO24rZLjJn0fTckNboDr7PC36mXZNsvnc1UDDNdc+3dUAw8nn3oyZOQhk7LJbdV10NPbU8I/X3GTyxYvOXrZl77wxXOuueGaozrGjl1oGpYlpIBlGvBChZkzp+LIIxdh06YNqnPffmYYxtbde3ftequ+Q1vH2MY7brv9DACIlILByMwzzhhftWpV70urVj777DNPvaGmqZDPTz/umKUL4yKZmC9s1GB5tIEktFEm0Ns3OPSd737ntzu3b31TA5GOCePb1q1ds2T0QBlgSGVS2LZ5Cy776+Wbdu3bc59XLVUO5/1fWv2CAoCOsRPGjZ7rxZ4Ovh9g+7Yd6Ow8cGDXrp0b+wYG+t+mtVN/9TVXLxg9FJdKZw6DfAyKwyOdtuMcNpI9ZeKkxWPaWieIiNhkxmuZ3BHmQYY7QsJiJmAA69avX/ONr3/zd0rJQ7rfFy1anFu+/M6jAcDzPSiuEAYCqZQLJRVeeunl/TfdctNTf/rzH984Pbe1JX3zLTcsORhAqL0C30cq5eKF55/bcu4Hzj30vc+0Mnctv+vCiePGL/FFBCtmEGrfk+HBIQilUNdQDygFp7EOs2bNOOT1N759/KTaMaiDWETxq1Ku9haLw4ftyL3slGXvvPPmOz4NQJvG6ghX1CJLR2e3Js2vpCaTgeR1gYjwzDPP7vrwh84/DDp1o33jjTfMiBt7NmqiwsCI7arjhsB11jgZL8XzNABQDz/22O0HOjtffiOf2dzckJ0xbWorDUVGUYy1PlpICc+rwjJMGIYF0zTQ19e3/xe/+PmlkV95w8OXhsaGiXbKyQJIam+uDISRgBQctm1i06aN27o6uxINtum6NqqVKgr5OuRbcujr6UUgAqIOCIXiUBmKKdTXNaA8UoJiEql0BmEQoampBbZp9q5a+dIDu7bveqBcHoEQArbtsN6+bnfBnPktzU1Ni5966llk8zkUR0q497570dLchkrZQy6bgWlSbMjmzVtRLVdgWynMnTUHLU2t6O7u2VkqDW9izAA3Oaqej/0HDiBl23BTLvzQQ+CHiIIQXqUC0zCRSqcApuB7Hm3STNIUlDOEgU/Nq2VqoyNdFAeRLraFdtYhd04JBaHpbSY3EakoMeSJEUHDNMEMDuWLWkSNbv64vtBcx5EoHUfCDnpo0VRMKQUBkaCFpkm0cEKMlW6ESWcW57lyZkAoytLkhqHD0qmRVCCdppSk84wLMopD4YT2SoZyuYx0Og3XTWGoSKhca3MLGuoK2L5zJ45ccOSy8ePHTfMDQXmDsYZW1cZhcRMgQl2cKmoUIp/QWCPlYuq0ybBttz/wKjBME4WGAkQkUClXIZjODI7IKEYphSDwdLYz1w7gEpaZQhSFlNHLKK9XKKLIGoYJFlMn9PlgiBFQpY09asZfSeFgaDqyTGby2l1ZaY0enV8FDtMyYXAkBmFxIRBrUIWKp3isZjGvIWCuI7uEFIleU2oNIFHPOVQYjcrdoUZbColIiqSZlZBQQkAJCduhIj3wA4risS2dVxzpzY0BTCKdSWt9NNHEXdchRD/rwrJscG7xfL5gayogDJiQXMF1qQkXSurGkiXH7FV9KIHYaAAjIxUwxRTnBiIRUESNYUNyBcYVRETRNYBCEPgJdRdKG2lwVTNfiRvcxLRJwbYJ/afLy3RkjDoIBTZMDtcmjWa5XAEk3ccMHCKK4FV9hH6IUqXcfN4HP/ThdDrXICKAGRKmxVEwc1RomOSMLuPLN8q+MZESgKG7uxsbNqyvgCllmhYcy0a5VIHtkFkCVwq2aUJGpJ1lhnbf1oMQ8Br1wOBcZxFrMFevk/glZZTkNEuFWlSVRiJsx6F/KxhCEZJkwaCHgB/4sG0bhUIdyiNlYsRYJmxTDyF8eWJjfcMyiQiPPPKImjdvLnPTaXjVAO3tY8il2GDkl1D14aQcODYNQu5afjemTJ2O3Tu2wzBNNLeMwZ6uvX233H775RJss2FaKA0PIww9pFIOBgeHwGEglUkjkgFGKhRDl0mn8ehDj982adzUybMmz/hGQ1NTuq6xAG5pYzQhwUyid4uI60EpBzdMhFGIltYWDBeLuPuOOzFt1kyk02l+1pnv/uhTTzz1VH9/z6OZbA7MMJKaRkQRDMughprR8DDwQoShB8YMLRHQAza9AGi50oTaTaWSnG3TsFCtVt6yArxS8qJN6zdUSqVhnHH6yXjokUfxwrPPYrB/kJgZXhWBFyBfqMv/s9UFMnWFpou+/c3P/fC73/vPlJOiXE2NdnJGRoMbNm5CueyhuakRfT29mD1zJu695/7+/t6Bt+zCTZ446YTFixctCPUzCIap42xov5g7d35PfV3jGzbAOf74ZSdOnTx5LO0lvMYwekWvFJvqxVmo11599fIXV6585M0ez7TJ0+fU5eumxHWDjIP9IoFcLoe5c+f33nzrrW9qYFDf0tL03NNPzdKkphoIoZH5VMpFQ3NTz8QJUwY3bdrwthhWferTn/7kBR+5YEmMgiW1jd4rxrS24fHHn9z63PMvrDvczzj66KXLAC2N4ExHU75i+D7KKTjwQ5iuAQYW/fxnP7+ys2vfIcfRmCZvy2SyE4nCm0KlXAHnBqrliuLMYFOnTh4e3zH+kJDDRUuOmnLiccfPSTiKMil4IaWE6zrwPA8rnnlmw+Gcp49c8NGzTzz55A8B2hRUSULc9fWo+gFK5RHUN9QngtcXX1x5yAyDuXPnTgDIx4fm8ySripmWYMALL764Y93GDTsO5zjaO8ZOv/WWW77R1NA8JvTpWRNLGWOZGqg1weDQIAzTRD6bS74DUwmXCtVyVa5es7b7cL6H5TiF1jFjJ+Pg3jr5W6XiQ0iBgpPTAAMSajcY0N/bh9VrVz90w403XtnVfeANGdM1NDSm6uvrM9Cl7OjEFmgwKGW7ZHim96xL/vC7y9evW/P0oe23k2fbhpXsiWEk4bombNtMaOkvr3p5Z6U8kqD/ZiQlLNNGd083UukUGOeojHhwHBteUEVTcxOKxSK6u7tRrlRgGAZS6QwcR+L5556BH0Robm5GXV0e1UoVzWPa0NjUrIJIZJeedOyktvFjMac0H/PnzIZX9TB7zlzMnT0LjHFUvCpc26GolEoZSikc6NoDpRT+etUV1c1btqx84cXnNzU1NcNNpbB75y50d44gnUqRniQQqEoPUkSQSqLsVVDxK7AthwpGzhOqo1KA73vgjCMUfpJzq/Q8wdE3qkGutYiCUNN4hHaVJXdbJXRQsjVKH+mHOs5G0y1Y3JgSGEDOuNopWOs2Eje2OCpER9hIjVhKqRBGYc304iCVEQekRKQC7QJpJJQjISRsmyU6ZEJEdYPOKYNSKIWRcgkmsyBDhWrVRy6XRegRvdK0LJR0PvMHzj33GHBulEZKsOsLpD+UgiiyqCFy5UoFYRCirq6QGBNL7X4HANt2bt394ovPb9IIBqJIwKtU4FgmFI/pqBKOS3RLXw8apJQIRQTTsBAEsUkV10hjBNOkOJYwJNdiKkjJRIFMxgg1j/kkTOf1KhETJVlCPVZ6NyKNDR/VHNPfwzBMYrdMh3TIUtaQyDi2gejmQpsySa3xrcUQsZgYqjTqKhWiIAIDNepSSnDDAmek+YyRRSGItsoAhCrSgwCmddSSjJp0oyulgJtyEIaKUONYOsDo/LtOGlASfX19cFzbaB/b6nZ3dUMIBVnIYmBwAOPHjdcXkhyavYCMjrjiyOfy4JyyKDPpDOoa8hgzdoyQMoQQElFIebCplIsg8CB0JqQCDTHC0AfjDLZtw5CSEGuh0RA9JFCMJVQfxnUusSR6OOMcTNUGJEJJyEBARpTpm6/PIwwoI9Y0OSzLhRQSXb378aEPvv9dZ5/5rlO2bdmIqdNnoeoFcBydxW0aGF2JxFq5+Ek1ep49MNiPoaHBiggiFfg+GT2YnJyQHRNZw8FwsQjTIMQ5jAKYJmUQSynJZIFB62tN7bouY6JD7W43WEKHIoqkJHM2pRAJAUtLDYSk/HBL/7eYfS507Fml4qHqe0inXRjMQKXiYdz48dMWLV74kWlTp7V3HjiA6bOmsWwuD6kEZs6ahkgQ9bqvtx+umUI+m9WRPEDF8/CBcz+IltZW9Pd1Y/ee/Thy0ZLoiksvu/Oh++69o72jA+VKGV4QIJVyYJo2OI+QyWQApWDbLizLQWXER6EuC9MwytdcdeVvmxvrpn/7O9+7gL67AoSCYZt4/oVnMaa9A+1j2rF39140NjehobE+kar09vbi5ptvxulnnoHJEyfhox/58Iy6Qt13PvChD+yTkFvrsgUM9A9QNiDntDYMSw8dIyglYNu0/wgRQoYSClYiJ4izhnnMPpEkXwmNkNzC36LXUHFAfPf73xatrR1YvCSDaiWAZVoo1NfDchxkMilkMylMmza15f/TjW6h0XzHmaedveKJx7965PwFxwJAf28/As/DLbfcqk48/RTMmzOHDQ4NIghCDPQNYe/+TtiWzabOmIpJW7cFrpuK3orvwrhRuOW2W843GHfAJJjS+7ge7G3auGVk5YsvLH9pzctvqGnqmDTJ/sMffn8GsW7omRfrjtlBJWuNDgkG7Ni2a/MTK576m1cuvem82pNPP20uAEPJeGjLdCMKTJwyGXUvvpzq6JiUeTOfMWl8+4SW5ubx1Hxot1woCCGRyriwHAurVq7sam1rGX471tBZ7373eXfcfscXAVjEomO1jHdt/pmvK2DlylUv9/R0HpZ+d9z4KZMfuP/e4wHCU/T2mVxDISX8ICDPGYP8AFzHBTMYHnvkscdXrVx14+F87px588YbBncBwDAs5AoFMDCISDBi0KCnWvEPiQrMIzHRgFmXsA5GcYCZHj6Xq5Wi47iHjIyeeNLJs674+xVfdV07LYTSz0d2UKPW2taCFjQjEhFMw8SO7dsHVzzz7CE112PHjbfvu/fu8fSdNRuN1aKIYvfnYnFw/Z7dOw+ZVcAYq/vb3y7/2jFHH3Ni6GuHYyaTdI5IKLBIJcamL695GW2trcjPmE1MQB1VGEvxMuk02lvbDmufamhubu4YP25s0ny+4kWJFDW/oeRc69/t7u4tf+Mb37569epVb7jxHxkeZkHgs3QmpWnvqKWk6IQVbpqwOD1L12/esPHSy/52/X99/4dv+LhOOPWU3Bc//8VZANXF5XJZgzc8YYVpJKEXAI5cuIi9tGql4lIAQRAglUoh8ANwzpBOk56Sc47hkWFEoUBppETUvDBEcbAflUoJI8MjJEVgCtu37kRxZBjF4SHs3rUTDY31uRNOOG5Cz4EuHNi/D/V19eBgmDBuAnbt3o3+gT44tg3HcbBrxy5s2bYF+/bvR0tLK45adjRmz5kZNdQVdpaK5W7f82HAQDadhQGK2rAtCxanpsNJuUhnUknYumFw4obbNomihYAIhW5iiIrHTL2o9EAvbh4UA2lytSOwaZmUbakRPdLd8iROSIhIN1a0UZKpFTU6MV890ZZSyjgtZB2rwlSsFWXJiozNKEREeZ40CqoZ9hhaG5xE6uh/xHUzFUXkiCuViO2HKYYmlQI3GAyLDChyuSwymTQhZUyh0JhDY1MDwjDEnj37MDQ4XMhm8zP7Bwa04ZckCq0O/qMpCm3druMgl81S8xHROUln07AsG/19/bjq6qvv3rV79ybHdan4D31Uqh7Fz2i3a9tx4Pkexb6kXHKrhYTjuvowFUzdFMRoOfR5jx19aXPn2ghMKz6SqTEhQtwg+jTjpLllPNZNGzAMK4kiShp6XjMtYkr77TIyN5BCai0vdSlK0ucZJqeQd9uFbTmkGYQ2I9I5wkqRtouMy4gyLxOHbdI58FGoJ+dcZ2Vz7d4rEh0G9LBDQSVU4zAkynckaCDjuCkocFSqVcps5SaampvR0trIFZPMdizKrpVAPp9PDMhi5MC2bLiOC26ZMB1Lx1uRVKE4NIwtW7YUAY5MJkuNrMHhex7CINR5zPp+gTbP0HFacZ4ssQNoXTEY2rWfduHADzS1lyalsfETdMMISdpMadBmGkXkvuvqfY04/xKcG00XXvTVjz32xIqGJ55YoQBoUzWWDMbUwaPQmpshY6P9v9Ha1oLm1iaAQxWLwygOjySIf+D7CDyfqPcqgoQAN8zaezLaP6DzeJWUZJg3WnseOzJrNomE1OeQ0GLbdpJ/C0VDNsuy4Ae0f0GRzIH2QxMiCmFbBoSgIYrn+WhrbV22dMnRJ/Z196LzQBcCL8TjK57BSIViB6MwQk9vHzhM1NXXkeeBHs69uHIlFARSrokojFAcHMS+vTufeOjhx37f1NLW39zUQMiQdhP3PA8MgO95KJVHEIQhql4VitXMAb3IL966/I5Ln1yxYjdAw6dYKjJcLqO/v4/ub9vE36+8Es+/8AI4OEIRoWPCBPz+L3/CzFlzMVwsYaRSwnvff84pP7n4p18YHi7xkeKI1jNrDT0YgihIhnOO6yCbz8JNaydng1g2TG/YsfM9N8nkyjAMmBZRjEUk3tJC3LTJoMe2bBxzzFIsW3Ysjj/+WKQzGVSqVKNOnDCu+f+zzW46X/eB97/v09dddfUf4mZXhhEKdXUoewEKdY1s0oTxDACy+TwM08CkqZPRdaAHe3buwWD/YNTf17e2t687eCu+z3kf/sh5Z7/nvWfFEiUOojPHcqrbb7t9/cf+5d+uefnlF9+QIQsTov3/R95/x+lVlev/+LXW2u3pz/SZZDKZ9EYKISSQhN4RFcUuFlSKXSmW41GaitIVFZUiSFF67x2kpkN6z2QmmT7z1N3X+v6x1t4znOM5Eoiv3+fz+Y2vvABhnrLL2uu+7+t6XzOmzThQCkFGPTPwz5Sw6lkI4LfX/fav99379+f3x3fK19dMifrrshmsFDWg6OnqQRgGoq6+1vwg79HU1NyYSmfSkXxSrmeqMgTw6j9eHdq+ddum5599tnN/Xj+EseRpp33q65f/+opfMF0bw0O5x4rUQtF5i/gvoOGq9/texxx91OwZM6ZOi541OlEwvFHPF8IUL0QV2kwjcByn9JOf/vTGd9a+vc+xOKd85OR0c0Pj+IH+QRbJ3SNBa9TUvfvue7Z07u3cJ5l0e1vbVDmpFjFrY5TUSBZJ3T2d/f19+zQ51g2Tnvrx074xcXz7AskKlY1rOupRHIoQvf29CINQ7pcAcPBKNpvap/dqrK9pra+paR3RkcvnO1fqLaoUIs8998Jb+7wuZRKZ6//0+0u+9KWvfE02q6liNSkStJzEgGkyvvW3v7/O/9tdf+NSFSZGaNTvUlcT6nnB+6IiLl2yeGJNJp0ZkRz+lwYGjWyPo5tnI9d/U0PLBt/z9mnymrCSSULkZoeM2KNHGvZRrKfSS7/4wkvP7tndseG9vv6CgxfRfC7XKAjqovWRGRo01XSOBmIA0Le3exAAVq1cIaLvC9MwYr+abdtxB5+HHHbFQaBiZKrVCkQQIgx8hH6IVCqDmlwtCkMlBDwAoQKeY2NPVxd0ptVPnjhlTHd3Hzo7d8N1HaxesxIB9zB16jTUN9THU5NCsYgVy1Zh2fIVqFbLqBSLOGzRknJSs7Z6vuNTSlEuF2E7NvK1srlUKBThhj78wEO5VIHjyPgaSgh8L1BRIHICy0Me+ymhsqAEVxmYEn+qPJJU+m4UhVNK3xSRlMnimgih5IdKZsrYiK5IjJi+IyktJWJEsgqARJO4CJgUXWyRN0zNHanKzgQhMTk62tzyUBVeMfhHdkZ1U2Zxypx0BkM3JCRJNQJc10Xgh2CEQWMaeMhhWQZMy0C1UsXwYAGUEhiMYbgwiHkHzlmUMBOThweHUFOTha7TeOwlo5GgokkkWrxcrsD3JV01CAJ4ng+NMWzetLX/iSeefqilucWrq6tH4IcIPLkx4IGQdDVGUamUpYTX88B96akOVUHAuZRSxX56Kr2aYRDAdwNoVAMjmhxmBzyGQMXgLyj5OUiMtWdULmwiUPLZUOb/CRX3FPuxIy+DGNGQBUpqPlomLWTXIW5GhEGoijc52ZSdu1GyNFXNhoEfTwMiGjTV1CZHeTsN04CmM/i+H4PVTCuhOu6BaubI7k0YcPiBBx6G0DUD6UwGggt4tivvdUHguT4Mw0RxqATXcQllBJaZAAFFqVyEYehxEyHyn1NCkM9mUV9To+RGIZJJCXVyPccZHB4s6LqmYqIYTNOEpsjaktYnYro2KIGmm5Cuc6pIfiN9bzGKW07YyMgzWrcZZXHGtG4a0A0ZNyQ4h+c5qJTLMcnasExojKFcqWDxkqVfQsiWdu7twhFHHEmiBTIGVqjaVmk7Iub4KOnZu/OwXdu1crmclsvloDPpIU8YJphgcD0fumkARMrySRRNRmXTKipuR1t5JIGZxvYDWfeKGI5EqQQuhT6HH/iyy66aO4TIJgulgAgDSbIW0i/meS5CESJXk0MmnUGlUgbRSPJTn/70SfPmHtzsc4GhwQJWvLUKRx15GGZNnwrPczE8XEA6kUJTQ72U0zPEMiTGJACra28XXM+FZZnbzj7rzKu37tq4ioBgqFBEyANouvx8jusi4LIZpquMW9uuIvA9VKsOwjBAPluLzZs2v/7Y44/ev3e3tCAyTQPnwDFHHYNZM6ajp6cbfb39qNo2GpoaECqxpa7rSCVTmHXADBx1/DGoqalF1XHxgx+d+8XPfvpTZw4NDyCTy4KHAo5jwzR1JCwrjoxhjKJcLkt7DGVynfNDCRkU6v4gFH4oY6N83wfTmFTNhPu34N20cWMZAFavWoFHHnkUAQSWL3sLuzt2IZlIgIeAriXrDdNK//9ToTumeVzmhGNOOvoXP7/04pnTpl7Q19PbAqiEBYTYsHkD7rz3HkyfMwvpdAYAUCmUsXtXF6ZNnYaamhyOPfFoPPjQw2vPPvuse/fHZzJMq+1LX/zyl3jAk4wy1awCdF2S4gFg4aGH7Jw4efJ7LlzaJ7bPmDhpwvhIlk1HS19HFbpRU4pQih3btm1/6IH7H9pfx7o2XztWdYPkvRCqZqRGsXv3br5p0/rhrVs3fyBfLTOTGcbk5piCgCigKNMINqxbj42bNg5NmjxpsFq191skESHE/PnPf/HD++67+9djxrROGujtB4n9i7J55btSXQcK7O3eu/ON117f8H7fT4BPBqDHm/xR9iAOOVhJ6AY0ld4QpRQ888LzT61Z+/bj7+c9V6582yNEyze3NFmy8Hq3KgAAdnft6S4Vh/cpP/m4k447QD77xChOyshzEgDeefvtrZs3bdmn6+JLX/ri577/nW+dDjXxlnCld48kC8UiHnjkQRTLJfBQxvUxplcc13X25b3qapuacvnaJtl4JnFU42gL796ebvv+++/bpyaHZSbYzy+67EfnnPWNbwGydqBq78Kicz5Knr1hwwbnl7/81fKklRuY1D5lpOnORwY1SmAnOH9/z5eGhoapPf0DUikV+WhHfc+4JopVbFzxayiqlSouv/rXT4Jh5z7Kucdlc5nESFkkRjFz3h21Wi6XO1979bVH9+X1ly97kw8O9Fk6o0koNawEU8qUDEoJXFfGcxZL744y0/zAV2Z5GWMhSZYhXEduqpOpJLgIYVelH5Mwhlw6Dd8PEXBJGRUQMCwLqUQSOqOwfRcTp0ycYRjJ2o7dnThw3ly88dYb2LB5AxYvWYyevm4IHmJM81i4tgvd0PHRUz8Ox62idexYvPTC83jk0ad2rFu/bl19fR0KhQLSqYws4gwdIpWCbdvRaVLQqBCGaUFjHI5tg/MQrhBq4io9rIHvq82t3LwbhoEg4AhD+R1kE1MGUHOVfxrBi6KLAYRIiSAlsU+IqNfkgkuJtJJiklF+AKaKpzD28AqEo5jkVOWAEUIV8EoutqNzSBH7FUNwlTtKKEUYSsiB73pKaq1yYLmkHHJwMCZJ1mHAYdsV6IaJsl2Vfk/BYNs29GwGuWwOCEIAhHz1zK+ems4kGnZ27BCB75A9Xf1oaGpCwpLTV40RhIFAT3cfEqYF1/dUHrMOgRDDwwUIIbB85YrNG9avXyW4kLE7hMCuVmHoBkwrAdu14XuOnN5CelG5ENANAzQM4XoSyiOo9NgQpijcIUfAOQi4WrhUD1N5Q5ki3QW+L6djEVhM/Y9Hjukor1gRp4mg8ENfwaNGIo2iH67gHaahIwgChKNC6JiSZ3POARLIq8iT55MqeTkP5cNCi55CqsERqQQY09S5pjB0TVEKJfggqsFlYSMl3BEIQdd1gMvrk2kMoS+juAgi+BWFXbGRSiVgWAyGQdHePhFr17+jFYsVlkgmZEFOuFR4kBGcvOoDyok2k02U4eFhEKKhpiYP3w9cz/EdWdz5qJRLAAN0KhUShEhqMaUCQchhmZakQPtVdQRGFkFKpW8zmugTQsGjXguXagnDNNR9zUG5NMQQCFiGBa5xeJ6PZCqtoE8BSsUiauryi+65955z1q5ZY06eMBETJ02R0U9qPYijgTDirycg7262jtpoEsIwZuzYzK5du4mEcAlYVgK6qWNwcBAhD+D5AqZhQjBDytOpbPAwTVPHhsD3o4msUMAkEUPnNAXKC0K5qRWKbEIIlJpFg65pUqEiJGhMhPIBQCmDH/hgjCGdkKRkShmyuSxc1wHTtCMOnDv/qIMPXoDlq1fikceexkc+9BEkLAt79+xFqVhBLp8FFxx9Q0PIZLNIMQPDxX7Ytoslhx6K4aECCsUhhL4I/3rr7beVKpUna2syGBwaApCHJOm7CLj8rJlUGiGX3IXCcAGccOTyeWiaBcetwvdc1Nc3es88/fxf28ZNmPvt73zz6ETShOsG0BhFd3cPbr75JixadChOOenDqK9tBHwOBhmfBRAM9A/CsV1MnNQuY6KA3He++Z3znnnquR3dvXuebmhoUo05Da5The86skHnO5LYL5Ruk0Cu0UyidoMwWj8kB4ExOdnWdQ2Gru/Xwq4u3zAMAI3NTfDCAIbGIDQNtl2RU3Lfw6x5M1vGto+tAfD/PLzKSiRSXz7jq0ee9dWzj0+lrEOnTZ8xM5VPpmpqa6S9YHgQuqFjT/deTJsxEQfPnxvfv+Wqjdq6LAYHB2NZ344dO190XHvD/vhsP/6PH3/ppBOOWRyKUbvIUVmQN998cwdl+rNz5sx+z+fpmOOOOUQDIUEYKrDdu6XMYlTzLQxC6LqOF55/8dEdHTvX7a9jPnv6rJZYqkopoJHYR1zfWBcsXrK4569/+1vfB7rOG2uzdNRESyrwIvq+jnLZ0VOZDBs7foyzP74TIcT49je/+8Of/PhHPwBg5WuzkOabEAO9PejvHURbayvSo+zxt9566xuEal3v9z3nHThvTvwVR+8l4hM56v/jsiG6cePGnT/9yU9/Wy4U3peUe09np3f2mefkTdOkALC7owM7d+7CATNmYt269aJp7BgyZ86sfYrjapswMfvQQ/dNi6b+EKEiC+Ndma7LV6xYZduV96ycGNsybt6qt5efByDve0KpCHnc+I6ewalECscedQySySR8Xw6ydu/u6Ojq6tonH342U1OTVJ166Zelal89IiN2PK/c1Dym972vT0n9u9/93vnfP+9731P9AFBtlCJMKG4Llxaz/sIw7x8YeGbC+AnrDpp7YB5AQ1zoRs0QzhX7JeSECv5+roNJkyfPSSQs/FcHb/yZyEiNwUfbKwFs3Lx+057uPU+vXrlyn+TUpqG3EQIr2iuR0RrpUdwVALjk4kufevCBB1/Y1+9VLlWyM2ZMbwSk+k9QeZw1SGCvL2MYfTfw32VDoAil31BORlyEQaA2UgTJVAKMUgSenAYZhgEv8BCoFxSCo1wpwUqYmDJpEhoaGmAl03BtBwvnLzykt6ebvvLqy6HOdAgCHHvMCTD1pJQkKgmf4zlYs+ZtiMDFQfPmor6+GVOmTMXSw5b29PUP9AeBDDyvVCoQnGBwqIBSuQxN0+Nph5WwYtmjH/igGpOeOEX7C6NoHyr9tTJjVcD1PITcj3NWgyCQ0R2aJgEplIzk7sbxrgScxGmzaoKn5KZq00wVUEpEMsiYwqq6NJQAjKppjnpwRZMcJa8gJBoAysLWNCwJ4KEjcrxQcHi+px4OmqL7CUmwDUIlY7Wg6zqEkDLnkAfQNAOGYULXqJS9EoGG+jowUIR+gM69Xairr2s69vjjDkmlkjh44UIEIcfmrZvQ1yvXANv2JHlOo8jl0khlE2hsqodddVAolDAwOIjuvXtQLhdBdbpHAH1MY6oA49A1Tfm4qzJghY+Y2kEAPwzicZ4IVa6wRgEmlz9f+XmZxkA0quSe/ogfQxlfeRiCUCabFspDy3RFxuWyMNQMSRqOEOxS2qTIySROLZIDd5XzJRT+nDIGplFEWaw8kjVDQY8oICAzPBE3SMiI/zsMZWQPlb9rGAZAAc9xAS4bNhACvudCYwy6IUEofijPr67pccSRAOAFLgAOQzdhmJbyN1Rlga1TFf0kZCYpoeju3YNCoUQFmMG5gKYzJJNJMKKN0qLEabiAkusHYYBUKg3TlPAi3/UDymhYV18LAgpdN0GoBp+HIIzC83xwQqApq0QYcLi2o0jFVMnLoY6DUizoI5YESgig5N6MaXHDyjAM6IzBMizYtovA50imskikkvBD6Un3Ax+Vainx5TPOOD2ouJN79u7BEUceFm8iS5UKCsVSDI/jqqiOZeqjNDlhTGIH8vk8WlvHpkrFEgehSGXT8PwQg4PDoBRIJhPgYSBfi47I4KO1JlC+5WjKPJKrOQLcEQBCHq0zEYROqQyCACHnqNpVKX9n8v5JJlLwpbkcuWwOQjX+6mrqYFdsDPT3Q7eM+gsvueiMSZOnNHZ27EFheBhLj1iCWbNnoXvvHhAdyNfl0dTciLr6WuRyaSQVqOq1V9/EmWd8HS+/8gYKhSrGj2vHylWr1t562003Q4iQ+0AqkQDTGGy7Cs/zwAhFwpJ5weVSBa7nIoSczieSSQhwaExT8kyBLds2rr7hpj/9+uWXXto40DcA05TXYzaTw+c+fzqOOe5YzJw1HcmEhVKxjOGhYbmuQ6CmpgapVAL9A4MA56hWHcyaPWfKDbf9+buE8qbBgX7JqqhUYDsumK7LSa1mgXACBgZdN+SaAg5dyfcjcJVUDsjnSRiG8D3/3fK+/fCzYvmyvl17todjx47B5MkT5eZl0gTU1tRi985OuJ6DpoamMUnNGvv/cqFLCNGnzphy6Le+fdaFxx513M+bW8ecMX32jIPnzZ+XOnzxUjieixVrViMUAkwzccIxx+HTp56GkEva/Ttr1+PNZSuQtDIIXA8tjU3o3tOH3bt2vrM/Pt/CQxYf861zvnW257ly0vrfpnvAY0889vL3vvvtZ+6/7+73VGDUNdRbsw+Ys1C1QmNrzbvUo6M2j1bCwqZNmzuv/c1vb9yfxz6ZSObkhEkg4F5sIVr39hqsW7ex+NxzL76zbeumD+QVHj++JfahCyKlvZGNZerkKbjg/B+Q1rFtg2+vXu3th2up9txzL7jwmmuvugCANTRUxFurVgAQYNCwfv0G7O7cDSNhxZJOz/OwcdOmTatXrSy9r4JjyrRJH//YxxZDreNRrGDUVKVq2iWTD8K44Lr6qqvvWL1yxSsf5PseecyRLbEKQTdhmAaEAFrb2khDXQN6u3r2qYmgMZpPJDLjRqr1EQWctM8QlIbLeOHZF9/zZHTi5Im1t915ywWNDU3zXNdHnFmtUhcCpZIDl0rUSe2ToDGZL2+YBl559eV1g4P9+/Q96sfWZ6OPHclq45JM7dFEIBzLeG9NTN00yDe+dc7Xf335ZT8AkBQR7RIizrOVA0IOqlEkk5Z45LHHHvz8F8/4yeq3V18GEr75rmY6EbHfFQCqxQrnUY7PPvyMa2vXFxx44LRsKiX3HkIoxo3cY3AiFDOIjMQAC/kZPNfFjTf+5dVdO3fsM5k8X1NTHys4CJWWI9+D7wcyqrRYljY0AK++9tqTlXJpn/O1a2pqJzQ3NY91bMlwsiwzVk8EnCOTSWHXrt19b73x5tZ3FbxCTayCMEDgeQCoLCYZhW07sB0bhFKk01kIQRD4LmynCss04Lk+mCIJV8pl9HTvwZ49nUinUmMWzJ03/5677sb8g+aT+qZGvL12LWZMnQxNJ0gnMsgkUmCUYteuXahUynhj2VtYuXIFnnriCSxfscYngu4ydaMAQuLpVMB9aJrMjnRdB17gIeQhHMdGGPoIAl8BYBiEyr4NfB++7yEMJRacCBJ7/zikDErEk2Cpo5fRFAS6bkrJq9poCzUBjILDDd2CxpgKO0Z8swpFZKaEIJlJQ9N1eS1RdcEp2Q6izW1EMlNTnhiTHqWPKx8bD4MRWYCI8ESyMxVJQEIF8JLUMhde4Cv/oJyGpZJp5NJZ+J58gOk6hW5oEKFANpeFYeoYGh5AyrImaoy1vfXGMrz4zCtYu34DCoUy2sa1KRqfoTDrQMJKAoJg79698AMZAO1UHKTTGeRzefieP+j7AXI1eRDBwYiMfJKFly+l34wh4HKDKeOTRBw7ozMdYRgg9D3olEFnenyMeRjGcnKqpNqUELn5V1nDgoQq80xIIFA0XRdcSpiVLFvT5HGQsVwy6oYSCkPX5e8pMBhlTHozVSTUqAeqLHC49N5SQmRhHzcp1FSOUgXkEvHGJQzD2PstlFdVCAkuCxSRlwsp36BKPeB5LlxXEZF1Q8KRlBIgDCRdmjEmJ79Cwk8kTEsqAKrlMjp3d6C5pYE01NUY1UpZRf4E2L5jKzq7dsvPLSg815XeGVWs7ti+E44jvf9y0WeBH/ie74VIZzNIJBIwVCEhc2WlBFnTddVNDGT2siZl99E9IBsTUcwWg66KLEqknJcqyVcQhPADOYVjuoZAyGvcDz1Uq2UwRhH6PhKWBT8IcMCC+Ud89GOnfuiKa65B/+CgMC09bmakkykkk4n4/ow93eLdMURQ108kX7XtCirlSmBYRhg9oGQzTZJ/5ZSWqqg0R2bXkpFcbaGK8Qh2Fv0Z2U9IeAtRjQJN16Ebeuxbl9nCNJYNBYF8oHieJ+VxajJsGDpsx4Hre6CMYGBoEFOnTvvwV758xol1dTmAAmOa2/CJUz+K2ro0xrSOgWEmkMym4HOZpW3phswa9zkOO+RInHX2N8AJ0DymGaDAmrVvP0moubsmX4tMJgOhmnGMagqqBjh2FZVyBdlMDg11TUhaCTiOi57eHgwN9sLzbOiUIfR9NDY2Y+vWzU8//PiDN1CNuK7rIxQh0pkMpkyZGnehA9+HYemwuYeNm9djeHAIhFDU1dVhcGAAWzZthFO1US6VcOrJHz3pEx//1Nc91yGFgUGEfoCmxgZkUikAstlkGpZUH0DGOPEggKHrMCKQofLJRwRsnWqgiga/P382bNrctWnzllI6lcHQwDAqVQf1dQ1oHz8RjuNg185dyNfkk/MPPGj6/6vFbkND88zLr736wptvuvkPBtO/etc9d8760KknZD784Q+hq7MLN990C155+RVMHD8ejfWNSCcS2LR5Cx545CEwasD3HVSdMurr8qiryWP8xDakMikYhuYPDQ/3fNDPd8ABB9TeeMPvz85k02Ntx5V096g9qBpZ3Xu7y0ccfuRKTTPfs8+wtqmx7bjjjp0TWWn+azboaCli9LNs2bJX3l675p39deytTF63nYoOpZCRAwq5I06k0njxhWf3/OEP1639oO/TUtdcH002I7ANVVafFWuWi5tv+NO2G/90/dsf9H2ymVzjgw/ff8VVV13+Y0pJulquwEoaKBYKYUfH7gAA5hwwBwfOmwvDNBCqDblhGJg9e3bp/b7vrFkzDx3fNm6yfIaIOL8coyPuVGEQWUVs2x5eu279Mx9Ykl5b0yyL9gANjY04ZNEhqGusx4SJ7cjnc9i2Y/s+3QP1dQ2Z1nFtdfF3kdJF1RBW34tyP5G2+t9jA4J+5zvf/8HRRx3zOd8PJZtBTUUZoygUhtHZ0Sn3RFTu24IghOt60CiDU7HxzFPP7drX41J1Slb8GdR0M4KKRjdauVJyLCvxr6eZ6SQ58sgjT7/opxf+EEDec1z1ekoNQaRpCwJwXRcAqn/7+z03XPfbP/yoY/uWd+xyufjaG6+9wBVLJppcEDk5k++RNELTMPaZUE6YlmSa3hhPczFiy1ISMWmxVFnhImLMACgMFyqeG7z+8ksv77OCI5PJstFdBM/3oj6CHE6oSEzPD3b5RLyvnOMjDl88N5fJUsMwYCYs9PT0oLe3H4SRGO7X29/bWxguvusap4RIiAgRAoZpIuQBiqVh2LaNMAzg+z78IEClUpbxL7oGRgk0jcJKJBAEHLbjYHdnpwQ5CY5cTe2cVCY79YQPnYjPfvoztKGpASefdIKkHHMO09SRyWaUh40gEMAhi5agfXw7hgqDKBXLPbf89a/LqrZdZkxHpSI/i8YkAVVmxzI1+fJUJIkGRmWxwwiFqRnS4xeGcjERBKZpQdNlRmZEHaSQxQsPIwiS2uxyIPDCkWkPkb5BIiTUR3qD5cY3FEpaq6KIZBVFwIn0pQYK2hOP4STLWV54XP6JMOSUyPiBqPaFgJLbeQhVh5UqWXVU2HLO4fuBksIqGSijMsiIB2CUKo07UaAVmWfJVWGVy2aRq8mC6RSe58FxPBx3/LHzDKbnzFQKLjzS1FCLE48+Rt47oeqMRTINIj2nhmmipiaPmnwN8vkaNDQ0wg85Vq9Zs813XZSLZQAEnh/CUPCqaOqqUU1u3hXIJwqAF4CcwKqpNgSBUtmOdK14JPOkaiisJmKEwrISYEST0sYIBKQibQhlUj4ehgrCxVWoOeJFnKvpP6VaTFYOw0AVRtFEX8qHiRAwdAOMyimsJC6rLRAP46gjQmURqjEKjWrQCFPRKCoSi+nQdTP2WWuaBsYYwkBlOgs50Ze+ZDkddVwHnuuqqbS8nik1wAMOpjHpSVWQq0qlCgEgk8ugZUwLgtAToCLgUNmtlMLzfQwPD8UTadOwFPFcQGMUbW2t0DQNxaJs8JeLZd+p2p4feKjaVYRckvN814PvylgbTdNGAayk7JirWCmumg5BGMSbAd/zpYxbwebk51dEZxHC913p1/YCVMsluK4DHnD4ng/OgUQiCappqJSKmXO/9e0veo43YdacmfwrXz2TZLN1iMBkjGmyeCQUXiBVIrbjSvJ3VIAqKRpR9+fGTRuxcuUqbN+2q6Trhq9rDIIDiYQeU0Z9z4sVCgIyXkqC8PR4qh1dQ5EqYLS5RghZAPPIBiEIAlfyCSQRWkmWKUMikYShS0AaJRSmYYIHXAGsAO6HSgXjQoTh4nPP/fbXLdPKdHXuxeo1K1FXV4uQC2iGBlO3kDRTSJkJeH6AZCIl74lAHn/d0PGRj56IWTOngwuO1W+v77jn/vueyOXS8HwPju2AEQ2VYgnJRBKpVEplL4dwvCpct4pSuSQhcYpgTkBRrTrgEKitr4ttHH/+05/+et3vf3ufpGgzEMrguC7KlbKUcho6EqkUGhoaQamJYrGMiu3A5wGmTJ2MydMmSyBfLgsA5A/X/+FbS5YuPsMPZMPPtiVBnAgJigt5INdNwaHrBkzTQuCG8BwPgIBpmSAqS1BwqfqIyOr786cmn99zwPRZewFgfNt42HYVXAhYCQNeGMINQlAAk6dM+X+u4KXUyH/29C985uqrrrhibGPr+ds2d8ybM29R7R//cL0+rqUFDz/8CK659lr0DffiiKOOQiZbAwJgx7btxe+fe94/rr782h4A6NyzB9OmTgUhHH29vVj7ztt47NFHUSqWC7t3d/Z+0M85c/qMg7Zt2TnP9X3kslIC63qu3C8wCWl77rmX7nvskWee6N8HONakSVPmZpKZMcBoZgCJEu7eVfVGDbJlK5a/sj/PwZyZ01Jt7eM0ANA0E7puSmk1CCZOmoSafK0xc+aMzAd9H9NMxtArrmwsAGCXK1i1clVlb3d3hxf6HwhYVVfX0PjAQw9e/dEPf+wrggtSKpWRTKewY+u27v84/0f3PXz/g8sAwLQseAo+F1NeAXR1dL0vOXVNQz351Gc+ebL8bhiVRyNGNVEjRR+JM5XXvbN23Z49nR+4mdDY0pgD5HOCYEReK0KB5198wVu/Yf0+FTOpdC5t6FpCjPoqEcE7ithzbJenspn3BFg64fiTP3vOmWefExf9lGJ0l7lSsiWoUjWSAj9Q6jVpeUvn0jhw/rx9ltbU1+ffVZCROD505L/x/cD1o0nD/1ywk3O//Z3vPPPE01dks7kxrmvDCT3BYxmvHFCEoYBuMuzYvt0968yzLj7jjDO+//bbK2KK9csvv7Zh5+5OG/EgTrwrC9d1fX94cHifmy6pVCrZ3NSUkuqCcBR+WVnAFIQzSg+hRMb1EULRvbdvc6lUWvF+rrvh4RFfuOt4cGxPgVTl3jT0pTXvrrvvuX/dO+t27OvrNzU3JmfMmjk1UmBwIVBbU4f6xjpl/5LHra+3t+g49rsm49Tzg/jBHpFfo2gLXdfhBxJ+4roOQj8AAoJ0IgdDl9megkgZRr62Bk0tYxCEPvvQKScd1jJ2TL69rRWNdfXIp2rQ3jZRXlyUxJM92ylj65Yt6NnbDceuorG+BQsWLMLUKVO2+L73DqGyABNcRsY4ngNNEVgJJaitrYVmGHBcT+bxBh64kJu8IAxi0qkgQCAClEolaLqGXC6HMOAQgVBTO0VGpULRqVWnVijzPFPYnlFFKAFVxFSVESmih1MkzQQoESqcVS0MalMrCzP5h6gMyMifS5TUOYpAiSA2lEqZNOcClFFoqgCkhIJRBk2TZF5NFf4QAropaaNcCDieD8oYiqUShgtFeb5DAd8NwTQNjuNieKCIgYEhWFaCzZgxY+7LL/2DJpIJfPmLp6O5cSxAJeEVFDGBmsSB9AK1NbUIPYHO3V1IZCwQAB07OrpWLlu5UtN0VEtliFBmoxZLBXi+DaYRhH6AwJf+Y0Y12ViAnIz5vgfHtRVZVhZiYeCDqo1mJCWnTMqlo0kL57IhIYtEJpsAQtGco4pZSdMjNaKUz4wUWBEl1/MlAMo09VEdONkACYIgBmTxUMlPCY8n/Dzg6n0Bw7JgWiYC34dddZRcNUQoApUHLPOaw1CC4QAJS4tgRLohiyqujPnRpDkqiKOpYBD6YBpVHlc58eMqKkjXDBBIdHsQhmhubgE4uF22e7OZHLiQjqaWlhY0NDTFMhu5sZLHg1DpCU5aCVhK0jw8NMwAoelMRrb4vo+ElYCpm0gkLNkUCny4nq2AchgpEhSQjaliPVqUOQ9j4neo1BBMkw0b2eSgMFMJhDwAI9Lfn63NwDB0JKwEKBh279qJefPnfXLRgoUf3rh6HSZNmEypym6LvguUm5uAgBGmZGccnIwUMer2jdeFUqmIcW3jkclleOgHsKtVOJ6Dqu3EygCdSECYYWjxRFBOSUZihjSqSSlvVNArWXVEqOZq0fF92dgzTAOEyqzoSCrNGJP/Hhy6IeVejudCMKlaME0TyXQSdsVGTV192+VXXn7+8UefcLDv2ejo3AnTsFDfkIemUVBBYBomdE02xVKmGcuSwiCEGwQghgYBSWYfGOgP//SnP93dtXv3co0xFItFDA0Pg1CZtRvBtkQoafrM0FGullCqlGS0BNXBwGBZKWQzGYAAxeIwdEbROrYVlpnqv+666375+uuvvEmI2lcp8jMkb1k2hSjD9KlT0TquFQlTg8ak+iWZSiOVSmGgtwcb1q1HTTZfd9utt/9g9ozZR7ueDbtiI/Alw8HzfBlvBUm4l88eAc9xwVWzxbQsaJqMfdJ1Q1lLQqWV2n8/O3bs3Hv77bevA4BEMoVMJo10Oo0gCNHWNg51tXVyM19bPzuZSOX+Xyh0s7ls9rgTTvjUn2/4/R/mz5t98QvPv3DM2jWrTSIYPvPpT6KuvhY3/+VGbN2xFVdeczm+/MUvIZVIQaPA2vXr1n3xjK98+4nHHrlw4aKDtgPA2OaxyGfzKJfLKFWKaGkaA8YYhoYKXXu7u/s/yGe96pqrls49cO53x4+fMCGXTSMIuYzDEDSOG7nq2quv/+EPLvjOU08/vE+ywKWLFh46GqAT757J6DibkVSCrq6ubU8//cxr+/NcOLY7DgHPYLScWv3Fd0J85nOnt/zq8suXTJo8iX6Q9ym7VRFr40aRixPpFA4/7HBjwYKDMWXytPftFzjkkCVHPPboo3cec/RRny8MF9Db1wczmQSAoR/++AdXLVux7OKGhrpdAJBIJTFmTAt8ZUMBALtaxaZNm/z3895t49umnHzySUujY0j+C+V/9LReKEgsADz40KOrdu7c+YFgYHMXzDPGNLcko2uFspiSgReefx6rVq4M8/ncPnkzG+pqsgajo+BOkTw7Ji3BtKyqV/X/5TTywHkLjrvpxht+aiWMnOcFiB77XEj1DABUbBc1NTWI8F6axkDV4CY6VvmavLGvx8atjBCgQmXXIkQOSWRRDVTLFWzbsu1/bFJZViJ73nnn/+yiiy+5FBRNQgC6aSGVSo2waNVzyld1c0ND4/IXX3zpBscuv8tzPHfebFpXW0fjiTNIzIkBgMHeQb56xep97qi2jW2py2bSEh6lLGPgYsRzTQhCIVSaC0cY+PA8yWp6/KknHnv11X+8L8WIiOQtalhiGFIhSRQUua+/B888/fzKn/30Z7dUCkP7/OBsbGpKjZ8wcWy0Egaq8a1TBiIEdEVrrq3J25Mmtb/r+tAkukeD7bqSrGpZsrjl8gHPKIOZSEDTddiVCsIwQNWuSKkzk3eqoTMAHJ27O1Gbrm09esmxh9XUpPH2O6vEymWEeL6DRUsWwXEcJCwTdTUN0BMmuvbsRl9fN/I1OXTs3oXenh7s6e7p37Jp00ulUqnDMM14quN7AQI/QOBJQBPnPgqFIgglyOWy8F1XShwBSXBTG2RKqYqOkRE0lFA5WYyIaSJEFBcjoVOyY8AIi7MXATWBESNgG01jsiAKQzWdlRdTRGjkkD5h0Ig+qPJgyUihCMIVkEhNDAUB4UpeAaE22JHegMbvFwbK+M1InEEKHsL1QpiGrgpDedw0pgLrhQDVGCx5U8IPPAhDen6rFQcCUoYbBBztEyfWTZ0+Y0bH9g7U1uVxx513oLWlDYcfvhSMyelhlA0LKvd6lbINUzdhO67Mz2MMDzx0r9i6Y8dKP/A2JpOScEoJgWWZKJaKSCYTsKsuHNsGCGBXXVCNgqqFD1R6G3kQQjclkMl1XXkoVMdSU3ClUIRqki4vdk03AMHh+x4MZoJqDKHng5HovAUglMFImHA8R4bej6InIiJwE4JAFcVCFdLRJE7TNFBNFo8RJj/gQezB0HQDjArYbhWCSMkp1IRMhBIi5qmcUwDQNSpfR0GJgtCHrpsIAw++L73HgRBIJlPwPEc1fiiELydkumHCMHUYYQjPc+A5ZVhWUk2DBRKmBc/3kEhayKQzyGQyGN/eDiEE3nrrrT2nfvxjGOgfwrSpU5HOpBGaiTjuKvJYy2ta3lOCA6alw7Vd1NfXp9rb22tWrl6D2rpahIIjYZlwbUdOrBmHq6jRknAu5cOaJunnfhAgCnCOoqAomJK7E1DK5D3GJFGdCw7DTMBzXIScI5uvRSplQTc0DPQMwXFdFIb6MW78+GNuuOHGH+7t6Uo3tDWJJUuXkKGhfgwELsa0tKqiccSHpDMdIQ8xXC4gl83H+80orkI2mRhmz5oLxigsQ08xyixKmaNpGjQqC8xSuYBcNgPHk35xDRqopkl1AI/kS5EKQ3Y8NV0HD0K5PjAy0j0nRF3X0tgfMQcEl8T4IOAKZMfBhYxssyw57bXdKkzLQGNdA97ufRvj2xce//3vnfvhkAN//9vtmDf/QBx66KFKqRKqCCQRW0M45D3ouz5++h8/xcKlh+C4Y4/Gxo4OtLdPDP9601/uuedvd93U3NhQ4SFHJp3B0NAQSiUVWQcBEAbCCLjrS79NIgGNaooDIY+7H3qgmgnP9+G5PnyLI5fPYlzbeOze3bHuvO/94MpHH3vsr7X1tQkIiijezHVceF6AVCYpPUOMoLenC0kzBdNKIlebx6YdG7F2zRrs2d2JtrY2TJg4YdqV1111/kknfmgziOikGoHBDBhEKm2iXGRXxSgxXUPAfRBOUSrKZw73Q6TSSYSQhbFhWPu1+BNCiHPOPmej3FwZ0lqjMsZldKbcU5x9zpkHv/jiC4sBPPF/c7E7ceKEQ267447vHnv4UacyjVk/v/iS8MgjjsBnPvc5yMgOYPmKt1BX14CvnHEWHNtBpVSGoVNs3rRh2de+cub5b7zx2svpbLZx8SFLCnKzpYFzgcWLFsP3fDQ21WP69Cn4xaW/6vY8R7z/zzqx9fHHnr5w+ozJxwoBeJ5c/4lSXbiej+3bt3b/8frrb+zas3ufoEPZmtqmN9947ciophgdXfOufx61bt3+19se27Bu7Zr9eT4++5nPH5CvyddEki4iWJxP++qrL6Ozs6NctauFbVu3fUBpA483xowwiFDKfgllqKutM1atWlHf39PbBGCfonkIIWTp0iM+//gTj19cW5Ob2N/bBy44mpqaAIHgP37y4+seefixKwHg0ssuFQDgOR52d+5GNpNFTW0eMhlP4PAjDn9fk+z21vELa7M10vNKVAEjaMQxHT1klPYlP4CpMfT093xg8JjnBI0QpBZq/e7v70d3Z6dsRJsGPv6RU81nn35G25fXnHHAzFQ0TIj3SZH1R32jHTu39/T39/6vUukPffiUo+/82+2/GjtuzLSIGzIaEknUZNTnDjhTEHoxkvXrez7CMERaT2Fvx959b7IUiqVR66zKx9VUtB9R0/FmzUpZ/J8fhzlTn33u+Z8uXXLoZ10vZLbrwzLlno6pGCI5EJLWOk3XEISi+PKrr/9185ZN/402Pu+AA7K5VMoUiiIVKRcje3FjS4Nx+pc/37yv33PS5ImTDF1PcQHoaqgWcUtsLwQlQk7Lo6EdoUimknj1jVfX/u2eO+/q7Ox4X9m/CTMTX96G8kGHQQCmaRgeHoYAH3rokQdu3bF9y/uyKhBimHU1DTXyec+ga8p+GIGE1Tns6+kfJoK86xqnGjMk6ZRIP5REfTP191xRTqVunjENTGfSS5VNIl+XAxeAaZkAIShXypg6ffrE5pYxE8MQ6O7tIUQXWHjwwajL16MmV4N0Iq1kmQLVahWu6yGXzuHwpUdh4cGL0LFz5+rnXnzhDUpJwbUduE4VTrWKVCIBy7Tg+y5M04BpGPA8F44jN/7RVEVwIYs51VFDnHslp6ClUhlDg4OqQ8rjCWUcPxJNV9QYT0BICS9GCMByMifln1L3HyULibhTGUXEELwb2y5G5WERlXUjIBRxmfwXIvCoV43I0roek51jmEWUycpDhKGQRaHK5oyGaDI7WE6zi+USKtUqDNPCmLFj5CLi+rAsC6VSCalketKYsW1TAyJoXb4eUydPR1t7uyTBqilf9JCSx5kinUqB6RSZXAp1NXVglKF9wgRn48ZNq3fs2NmdyWXBdClHHC4UAAF57nxfRvkwGuewBmEIqtHYiE6ZlAzL91LZtyoLmYchPF/5IJV0N5KA6ropZfSh9LtGObmcczBdBwiFpyapyWRS+X/V9FwBtASXnm0Gpgpb6SvVDRN+4MN1XenbBR8hc3MBCgLXcRTNWhZCQRBIuW0YgjFNxsoIDkOTmbXR9WeYhgRrqcdAOpOFEIDr+BA8jMnJumbEYKMglN1Ju2rLiWEo4WwRLC3wQxm1pFFU7BIKxUEMDgxg1fJl2LplM3ccz67arrzihIDOdOllUjLoyFelHCBSmqtROLYN3/eQzWQz9XWNNRKQJuIi2Qt8VG0bnusi8ipzPmIdCBVgLbo+QQSYziRYQVkV1KWMIJQNDBFyUMrAeQjfdaVUN/AwNDyM7r09CISPQqEfoGi58pqrzk1a6anPPv0yDpx7INE1inQqg1w6F0+ShSAIuIAfBAi8AJ7jo1KuxPcpFyNrBQ+4kkET6IaOdDJd64ehrhk6XM8BVXFgYRgg4AEoIShXKqja1RhSEoT+SFc/COKCWmOaCqlXyg3GpKw/RBy5FniSukwYgWVZig+gvNGUIAwlTdi0TPihi4SVhGv70KiOmdMOmDVpwtRPAtAct4LNW3YCoXyqSjCYjGWLHthSYi/XIsexceCB8zCxfQJefe1VXH3l1e4XvvDFB677/e8uc317I+chisUyfD9AMpkEeDgC7CKAHwRwHUdNZtUaGoay2UOk97lSKUuQl1xwYVcdDA8Oo7VlHF5/640XH3nkoZcBgOk6KtUqdu3aCdezkclKKEfge1ixYjmWL1+Brs7d4EIGFjU3taC9fSKamppx7713i9deeR3HH3PcSd87/ztfrFbL8DwOwhhMwwRlBJVqFZrGkMvlZaOFKgAJkZnGMnqGwg989R38/Z7DCwC5fH7X5s3bPC4EyraN3Z17EfIQ27ZvRfceudHTda3hsCVLT/m/tdBtqKuffOlFl154/wMP3nbE0sM+s2nrZmtoqID//OmF7ItnfIkZpo6hoQHccfttcGwbH/3Ix8ADyUmoa6zHE48/8eJnPv3Zb7/xxmsvy9WJ9qWSyXLUpKaUYNPmLXjtzdflhnzrdjAirANmzWx+P59X03T2sVNP/XpNbfpYAPC9ALohm54AheP4MA0d/f1DT+zetXuf/Wnz582d1z6+fda7qiG8O5KIcxErRIIg8O+9/8Gn9vd5IRRGNHDlQrJQ4mg4yvHIYw9tv+XW217+oO/T0tQ4GoKh9lcqL9bQsHTp4gknnnjipH0v2L94zuOPP3plbU1uol31YOgGGpsaAUBc9/vr/nDlFddeCQAfOuWEmiWLFzcCwObNG0VdbS1q8rk4jzSZTKFl7Jj8+/luhx95xKEA4AVBLAGmECD/vMEFM2Gif6C/Y3fHrtUf9LiOa2luq6+ra/JUYk8ymULVcbFl63aMHdeG5pYWWqnY+1Twhtw3Rg1346gsAcS+yVf+8crg9u3bC//jZNRItF580SU/njFj+vxoj02ihApBpG1K7a3z+Zy87jDqv6EEViLaHwH1jU373IwY6Ou1q9UKPM8DFbLREsnYCaXgADL59HC2NvPfJrxLDjvqo48++vBfly459HSlFoemycZ1jIBXHBCogWGhWBz+5Gmf+sXPL7n4zn/2ebr3du/YtnXLagICPwhULOpICowfBqRp9H3yL36+etbZBADqmhpmyBGBePciQuT+RUZGEhAwEMIUmBF4+NFHnly9fOX7ltT7ns9HX9eRbQgAenu7ccuNt7z57NPPPvl+X79YKLLQD6V6gcjoV845QiWtjU7DmtVrwv7B/taGhvpYwk7l5lJ29HnIYRkJJNVUiAsSS+I4l55R6ZNloESHU3EVYElDNp1GTT6LgaHBhlK1ZDz13LOYO28BTjrxJIwZNxZdXXvw9NPPwg8kGdd1Hbz22pvYs7cHg6UCdJPhlX+8HL76+qsb0ulkt+d7yKRTMaV4qDAMx3ORr80jFCEoY8jmciCEoFQsoWpXpZQ5CBREamSzKjeFIpZQapoupaIgsUdXqCKJEk1BdIjKQpUbHClTIvHNxyMJTjTdHdWpi3KsNCbpwFGUUHSCRGx7YHExGsuYY05VNG2koJoGAZnHG6WCRrIOAgrTlNMOxnT1YJLfkYApqSRXU02ubigPtm1juDAMP/DheS5830c6k0E2m0JLc9PCwPObGKUIBbB52zak0yloupQNUya7lFAIc8d20dffjyDk0HUN/QMDGBwaRuBzt2Nnx3rfdQO7asOxbVmU+z4CLunBXig3jRrTkUwm40Ip9GVxGPgBwAEeyKrHsixZ7EQ5cJLkFGPl5dRLg++7cF0bmqbJz0zlOSMakVAaDjDCwMBAhfwO8bUST9YoKJHXOwCYugVGZRRJGKjrBUz+DomiZCTkydCM+PwyTQcFg8EMWGYCjGkwLENSndU1qesmrGQKhmkgCH1Uqw4Mw1RUu4J8qDBN+Xol2ZkSBgIGy0oikbCkRzYIYNtVWFYK6VROgc6kNL9iV8ARwrIknM3ULFRLVWiGzidNnmSlk2lMnzpVArqE3CwyjUnZiyo6mZJG8UA2hnwvgOM46O3rJY5dTfqeBwoCRjWkUzL/Nwj82EOiaRoMQ/qco3gmUCDksmkQPUGFggMJHsZPWJ0xJIyk/HvdQCqZhGkZKgfVRxj6sO0qbNsGONjnv/SFMxcesuj4J59+GqeccjJax46B78kJYzKZReDJ4lU2B+QU3w99UBC0No+DxnRJpOahpB6r6DEv8OA4ciNxyGGL61PpJMtm0uBeCKdaQdUuwzAMVKuuKuYV9ZePAMiIgm/JIkpBnRxHrrGaFkO9ddNEIpVQ65Ra2P0AvufBdm14niubd0GIdDKNZCoBXdPk9zQthDxAMpWA4zlNRx111OcvveSiJQAw2NOL8887D9OmT5OZvIQo9bFkICRMU+12edx6O/bEYzFzzgFoqG/AxHGTOt96/c07enr3vE2EgFOxkbAMeIELJ3RgJnSkkhnVpAigEYZEUjYt3aoD13VhJhRBnggQRmN6vKZpcGwpEecI4PsuANL/9LNP39Pb2zMc+Yx2d3Rhx/adKBRlA813Pbz11nI88+IL8AVHTV0dBIC62locdOACLFl8JNrbJpBXX/2HWLdxI84885wzm1paDq1WihBcwLFduK4L3dDg+3LSHgoZiya5EbIpYeoGDEOD4zrw1YbMD7z9XgzedtvtK3d17toVcoGqXUbAPfiej/b2dkydPlWlDwMnf/jkk2YeMOvA/5sK3Xy+pv7Yo4760uOPPPrHw5Yc/UMRYPLw0DBax7ahrr4eVtqC7/nwHReD/YM44oijsHDhoapLryGRSuH1l9948vTPf+l7K1evjimnpeKwWLb8zZ0AoJsaHNdDa+tYtLQ0ortnL5atWMbHt4+ZcPIJJx2875MFQn99+RXnXfrzX3x7eKgAx3ag6/JelSBLiiAMcO99968482tnXft+jsucuXMWJyzLGC0lHol9UZNdNTkCgI5du9d1dHQs39/n59Zbbwl2796tVBO6tJGoTPujjjoGP/vpxRVNM7o+6PsMDhTseNarnrtUeUOzmTxmTJ3Nevv6vX04R9oPf/ST8+/8262/zGTSTX09vdixbZskIIOEd9x++w2XX/brX3ieXQKA/p4BM5/KJTkXqG9sJvmaGhiWKfccquDo2LE7ta/fq6llbPaoI4+eL0VJVCntgHeFvUbfO5TcCQD429/uemvZsuUf2L8bBH6Kc24ZpgWAI5lM4OBFC3HaJ09D24TxsN2qUyqU9inDO5vOxKOW0dckHUVUmznjgHDu3Ln0fzg31ne+9c1zFxw0/9hobx5LfJRiIQxDdHTsBgEJ77vnvr2PPfxY37u034jiGqX1e8asGY37emyYYQZMlwkPIORdhH3fC0ABbNq4sa9jx8742qzNtNDfXP37rz/55FO/b2ppWRSGCuJGoyJdgAooFgmJrYsAnPvuuedPzzz73PVr1qz8p7FkV1977dZnnnvuHwDg+4EI1HAnuv+3bt0WXn31tcPv9fuVFFelvrZhYlyvjD5hAAwmrYPgapih3qunp7fUsbPrhQ9y7bl+1Rl1zrFjx04plQYwa8ZspNKZtX29A1vf7+ubVDfy2ZzyJgupDBUEmpLYR0O+KdMmHnHcCcd96rRPfDJumFHP90EZiX2BQshs3UQyiYRlIhRcbu6E9DKFfgjLTEhoiC/gVzwgFHAqDnp69mLmjGnjtm/dbjiujSnTpsBWG4IAvgRWWQkIDgwNDKOnpw81uRosPmQRNJ0hW5PrTqaS69KpdJ/nunAcW2H3E7AsC5wHsG0HvhegXCnDc31oVIOudP2ECGi6Jv2pXCjpM1eeSOmPiza4EhKkIE6qsxHnp6rqNVRS/2haTOiIyRsxYZcrT6iI/beEKI8dJzFNGKO6WLFnRfnQhBCyoFNTZyFGvL4qDUedyFBurARivyqJoS8RUEWZ3dUkU2MUqVRSRvn4PtLpNOpq6qBpGvL5HBwFeAGVk41isZg/7vjjDqvJZdHa0oJx48dh2pQpyOazauLDYw8zIQSu58LxPFCNQlNdt2QigcLAEAqFIbfq2ru5CORUi0vQUCikN1PTGHQmGyoAEPoBBJcdM/ndNOi6IaXDjMhsXELBNDkNpWrSqEeAKy6VCropo3oMwwTToPy/DOl0BqZpymziUNJ0A19OzJhGAUoQhJLcHUlYQy59vT734StapTRsi5guHE0joyI8lUjGjQld1xEEPnzugzCBRDKJIAxgOzYMw0RTYwsSZkrK1DmUJziEpkl/MGUUhmEhYVowTB0aMyRR3ffh+Z70tVDpd+U8gJUwQChFEAgIITuFmqlDNyTBWqcGUokManJ5+IGHxpYWBK4b9O7dq9XW5JV8H2oCF8XjQDUNgKpTRalSlqTkMEQylUJdfR1mz52N5pbmdBB48H0Prm9jaGgQhin5AIzp8kFA6SjiubwTDM2EoVtgirItRNSYkrAy2QSS9zKonGzGObSaAdOUdGoRCEyYOJEkU0ksPOzQY79/wflfvPPOv2uLDl0oliw9VDYpKFRuc6hyW1V+NufQNSbp0gkDA4ODKAwV4txujVKEoYKFCcQUT00zrL7eXr5581YQAOmUahaG8nx6fhDvWMNQKAo4VfYKxHm50j5CgRAQgZquciAMOHigCnIurydN1+NOuIxlS0IQAddz4bseNJ1BEB9ChMhk0zB1TRMhn3/ggQee1DKmMXXrLTfj0SceQyaTkFL3VBLlalk21NQ58VwXvqfI126A9e9sEOvWbsCLz70AAWDOnLlv6dBfkWAwBsdzIAhHXb4GSdOSNgEivwdjBLomfcCabsG0khCCS7gVY/L6CiSFXlNAt2hyalds9A8OoKGuHn//211/v/32v99vWQbq6mqx9LAlaGhuQnF4GJyHSKTT+MpXv4ZLL/k55i+Q9QxV6y3TGcZPbMPhRx+FQ5csJdu37MD0iZPbr/3ttRfrhj7Fdx2ZFsc06IYWq0QoCAzdQDqZAQGV9wQdPXkjMHQT5n6WNAPA3r1dq5etfPM1nVHkczWYML4dhmGirrYeQRBicFCq46ZMmTzhuGOP/6KmW+z/9EK3saml7dSPn3r2Zb/6+V8u+8Uvr7KSiWOGiwNG67hW0T6hHY2N9TBMef9QRsF0hklTpqBlzBgJGQSwceOGrot+dtEvP/GpT5w9MNT736S8GzZvXBvJH8ulMpqbG3HQgQehtqYBRxx1FHWcoD6dSi+tr2msf6+fu66xIffVr57942MOP/KCNaveybSOb4OVkA2lMAhANQm8S2VS9p23//2ajRvX7rNcjxBiLl18+OKRKRqJFRJRM13CFoFySaoy77n3vhd7evb07u/z9OP//Mm81tZxI4WGkq4SStHX0xO88dprQ8XCUOWDvs/qFat7R2+OFehF7qMY8Ld779p91z13vycvYfOYMQ33PfTAr3/9q19c3NO9J18plOHYLsa2tiCdS+KyX/36juv+8Luf7e4aAZatXbuhtGX71gKlBE2NDSCURBmeUYY35s+fZ+7r92obP37yvLmzZ0bPTyFGRmwjuj/ESjkzYUJAiKeeevLJgf6+D5yrPVQY2lYqF7oAIHBDOFVbxTBqGOgdwPXX/d6ZNXv65Pr6xvccID44NECjApeqGE3ZmB0ppnZ3dLL1GzeIf3JtZy+44IKfXn71ld+QBbmCvFKK0TGttusiV1OLl15+9bkf/OhHl3V2dm7+r2oHAOjp7hGu66JcLGX39djY1Ypj6noo1wiikjuUgkNn8D0PTrmUn3fAAXkAGDdhovGt73zrh98995uXGQbGFovDMT09IpdrlKoYVBLvX7r3dndc8IMf/8d1f/jDr8rlwdK/UPNsVhJgQnVpH4gmvLNmzkwee/yxB7zX73f3328XADC5fdIYqd7i8TGO9abqlAn1LPMD+Zm379rx+upVq1d+kGuvf6Cv4EgiNXggUJPPxbYUzdLcrTt2rB4Y6n3fVohJ0yZazS2NicDzwAiBlbBUTTB6HQFc3x170IEHLS4MFurigjeiwxIqJ4i+78sbXchCwfc8SQgOA5iGiVQmDd3Ukc1kwMExtnUs0ikLw8MDAJBYtHDhIZ7r5Pbs7kRvz17s7tqJ7bu3I5VK4rClhyGZsEAoUKxUsXHdJgSeBBANDw/h6SeeeW5osPBKsVTek8vm41xU13Xg+56UWnsBGNFhaDoc14YgQDqTVrm7MqjH92VxrTGmLkI6MqGNYTAjskoRn/1IuqY8oqEAUZMdQkYtyGo6S4mETgn1RBIisqTIjkooIjkyYnCVQCShUBNbJZ/misAcEftkB0z6cEcIoGTUtDl6IEpYBoSEP3EexO9LWTSJloVhIiEnlIIT6ExDEISo2FXougad6ejr7UW+Pt968iknzacGQdv4drQ0N2DhgoPAqIR0CeUljhSumsaQyaZRV1sXQxGYRtHT24N8bU2xVCr2RVp7EAJNM5BIJJHN5gDVEdc0+ZlCIeWsEtZFldzVV94omcMpqbOqySBEnFOqEF/yQSnHz/ADD74nC2tZPIRwHVfRTk3VwOAAOBLJhIq28iSxVb0GY3ISZ+iG3MCrqT/nHH7gQWNMTQKFnFBpusKuSzJ2EEjPpkYZuC9Qtasqf1XAc33YjgNBZWEdBrKBwxiDzpiKjTJi91bgBdB0Bl0zZBGmMSVXDiIxPTSmq/f1EYQcyVQChqajWrFl7FgIKWGhOrgA+vr64DhO0DZuHJcLVBhDvKJ7gxIiO9QAdF2HYZlqoYwga/JPOpXOR34NyzThhzJGLPA9pJJJJBMpeK6HwA+VD1xGO3mBOyLlj0OPpZeSC9l88P0AAQQcV54/Ago/kBmogRci5Byu7yKdyohMKotjjz7mhPVr1rU7ZRsHz18Qh4aFIlRRPzI3MJLu6kyDKoURgkMzGaykWqSVGoQy2fAydAPptGyO9+zdyykI8rkcDMtA1XEAQpBKpZFKJWGasgHh+z6IkKAzqtQWlMpmhe/LRo6VtEAZQchH7CS+J2XzmqbJIplKyXRkZRDgcD2ZZ+y5npwmGyYo0VEuV+E6Lgtcf/KB8+adcuIJx80EgNaxrTj++OPUeEFGexnmSLMsDEMEbhjHrPT39aKhro5YpuE/+eQzHauWrXngJz/9yTUluziQyWRBNWkvKBXL6B/oB6UMSSuFkIcyVooQuL4H1/NguyozmEqlgoyg0OB7HlzHQRDIzHeNaZIsDYJUSjU8haj8+te/vn7jhg2bCIAgBHK5LHbs3I7uHpn6Yho6GusaMDgwgIGBfni+pyCCBJ2dXXjmqafQ39eNJYccgiDk+MwnPnXc97///e/ohpYJQynbtPQELN2Q1G9FK6OUKetAgGrVhufLDHAoRUoQ+Pu9OBRC8Oeefu6R7v6ekqnrIEJeN47rghCCzo5dqFQk/+TSSy4548OnfvTT/6cWurlc7eQf/fgnP7zn/nvvu/KKK37TUNt4CjXMuuaxrTjlox9iDY11JAh4nIUtp/4MfgC4tg/GKHSN4eV/vPKP008//cyLLrnoJ13dnR3/dMM1OLjeDYKqzKHOypQCTcOevXshoKOnb9hsHNOy8LOf+9RH38tnP+GkDx116y1/vfXqq6+8OFuXq09nkyKVSMAPuRKoymdEMmHi73+794Ynnnzq/vdzjMaPGz9x0cKDZ0VybEJGbFVcSKYHIQSO48L1AlSr1d477rzjgf19rtonTEwsXrp4lgTEjUyZIw/vM08/U3n2+Wd3Vu3yBy54fdfZMVrRHClZAMB2XBxz/FGpBQct+F+9hIaVSJ70oZM/cfutt9318Y+ceq5driY3bdwi+ocHMXbcOORq8li/cf2yu++9+6o3XnvjXf7Sil2pgGNHNGnlfISPEn33gf7CPnezli4+dAElJBtPREdl1sbydPHuOm7z5s07316z5uX9cQ5XrXx7+9p1G7tkQS2jRiO+yZZtWzFUKFinfexjC1qaG5ve62tOnDxZ1k18xFMeNf0im9u48WMzNfm6dzUIJs2Y3vrnm/58xa8v+/X5AEwZQTQS+yc4UXsCjnQyiY2btj7//e9/5wd2uXzd5BlTt8XrIR+Zeuq6pOpPnDQhO76tfZ/AacVice/g4OBeJd2PJ8yATDEYGBzECcefOLetdfxxc+bOT95y8y0XX/KLn1wCIGdoOsY0NI0065mMUeQhh+v7KBRKoJRi+7Yda7/2lbO/dsXll12zesWKfzmdfeGFVzbHvSWluFUTYqSSCXLqKaeedsSRR84BgAXz57+n79tQV5cfkYiMDjIjMeA0ygk2TA3Fcln88fo/PbZh3TvdH+TaKxULXZTAlmocgvqaelTLcli+evXqlx959KEPFLlVqRZZ/+Ag1QwF8KQq1SbmIwED/QPIpnNhe9sE+4H7H9w9UvDK8U1MoQy4zOr0XBnLoekaqJAZhYl0AoHvoWqXUa6WkUolUFNXA88LMTg8jJqauvlTp05fMm36LBy29EiR0pMwNB333X8vHn70MbS0tsBXXqeurk7oFsFHTz0Fe7u68Kc//nHwkcceXdG1p2sP5yEEJUgmM0iYFhzbhms7Mrg4CECZlDXpugYv9FCqlOQ0i0axKRpAVe4tpMxAY1oMgAGkjy7ykEXSlTj6Nu6uyG6jgFA+Ua6Cwmm8KY9ueJnBKdTEQmW+jkrLI6PGAvGUmCgJtRiJLCKgsc+UqBlDVBRLCayIPY8aY2ojLovgKD9WYxo0g8Um7jAMZb6dYLArFRRKBdTU10qPWxgglUhCNzSUKmU01jeMaWpoaBkeHkZn5x70DQxhqFSQ70VZHJweLeRMZb/yUSt3b28vQIGhocHtHbt27IlkKFEhCA64qoFBKYPv+9BNTU2BpW9TyjfldMx1HUkeVrIqEjUulBxDiFDm7ULm+bqep0jPJC7wGdPAVXYr0yRACCAwLBNeID2blBKZ86veX6N6vNFV4bEgHLBMSy1GVMl7CBjV4btSkjpUGJIxUZSBMSqJwZRBM01FAqYxpr1YlLJy0zJkTqrOYBgWKNMk2TiUBXsQSpBOGATQDB1WMglN16BpBgghKoJHRxjK4plSASshpWiuF8BMWMjmM7JoJwRB4KOmpgZBGGJgaAhbtu0o+l50L5A4titq3kS+daYUFSBcFmd+AN+TsvNMJlMHAOlsBoYpv4PMOAZs10EYeKBEdtC5asowBRwIQh9CbXhAAM3QIQiFRqLvqABWGJmuJhKWvAo1hnQqgUw6g42b1sO09IPaWsccvXXLBkYFBFMbtciDTihFoOKbKVUNPwUL4wLQCENtTQ2IrsF1JcU38nRTEFCdYeuObejc04GG5gZhJhIwLE16pkMOz/VU5BqPo84olfaQqJlmmQkZAeY66n4icB2ZJS4jMXgc5USUJI5Aep4d142bdQwUpm6A8xC6ZUiuQCip9g0N9VY+na3L19bM/tHPfnxcbWOt8de/3AwKgeaWFiXvkuwAXdPV2ibp58lsEoNDw9ixowPpfAapbML/801/fqRvsPvnf7j+9z/YsHntsoAHqFbL4B4HI5qS8UviOw8FfFeqf4igUrKnVCqh7yHwXUl7V03WgPsqfkKgUCjANE1k8lm1QSmjWCqibVw7env3Lj/3B+ddIwBPY0AqkcTcAw5Ex84OFAsj1jEiKF566WU89PCj6O+TwNP+/l4QInDEkUthuw5ee+01VCpVfO1LX/vUpLbJHyqVSyoTWTbibNsGYRQBl7L9aI2NeAxhIJUYGAU33N8/K99a+Y/777n3iR07tsVNGkKB+vo6cC6wft06hFwgm83kLv7ZT38ydtz4I/5PKnSbW8ZO+Pq3v3Xe4088fvsPf/CDX9TWZBcMDhbMo489AXMPnIuGhjrpgeNhPL2UcD9pazEMDWZCBwD+h99ff8c3v/6N7y5fvuJ/BXS9s/LtbZs2bNogN1w0trukrSS6du/E3u5O8swzzzYee/zxZ0w/YNaR/9PrzJ9zcPtXvnzmNy++6KKrTjn5pI8alskmTpiA2bMPIGEopJ+eEiWBD/xf//rKP5555hm/tO0Rme6+/Mw/6MCDxre3tUR7hHdvUIl61slGZ11dDW6/484n33l79av7+5zt2rlDPPnkE2ZUhUYx6fGUvrGJdu3eU+nZ2/OBdfzPPv3s5meffy4mD42WxyYsE1MmTZpmGux/lOsffMiigx957KEbHnnkob8ce9wxR/V1dyMIORYdupg01NeBMqC7u3v3RRf94upVy1f806n7Y48+vh4AdEMDAQdV6q3IklQqDzfW1jbuU1F19NFHLURsP8N/mbCNFPijS95XXvrHuo6Oji376zwODxd2ArJ413SplAo8H4sOXYgvnH66VSpXp9bk68a819fbuH5dRQiu8oJJDC0dfb3OnjM729LSFCsnamvqmn90/gW/PPMrZ55FGDH8gKsoOiGTUsBlxKba3z71xDPPnnPOWRe88/bqNQDQ17WnO5K7h4r/wLlAQ2MjMQ0LYejVer6d35fj8vbba3e8/sZr/4ingWSEmWOYBpqamsA0PTtl+rSzjj7mqCuXLj30OwC0IJCRdTISVO4Fon2663jQGEUul8HwUHHdlVddc/7jTz38ngu7F55/fk1X157VhkpV0SiL02OqZQeHLFy44PAlh59/2KGHf/3Cn134H4GHH1515bXj/rfXrG+pN6TsV9Y5gwP9qJTLkjcTE6xIrGTYtXPHrg3rN638oNfd8jeXr+zas+cuANWuzu7NN//15vs+89nP/nb1qncu//nPf/XLPV0fLBIuCIWgqhlPKY2tEMCIvdQyEzh04VJnd9fetxy/GseaaVIOCaSTaQRhAMd1pTSVkFjqGxKBZDKBXC4Hp+LA9lxFa/awedMQNAXC+sIXTz/u2GOOaUkkDQiAuH6IBqMRE8dNBCGaBGDxEDoY1r39DqigYMzAsjdXY/WqteUTTzoutXnzltS2LTuG/cCTnc0whK6bcvJGKXRGEXoBHK+q8kF1lcVLQBAAAjCYJSN8QikTJETCXN6lD1IHR5KDqQSlqH/PlWlcduF4XAhrTFP+iGDEXxPnWEmsFVFZspRIvYDgIu6MqiQcFa4up8Och3FBRTUNFEQFvYdxtiwg6atESHCNbphq6s7llDKUNwZjliyQweF5HsKAQy4KgZwqBgF0Q2blppIpGJoOz/Xgeg6CkAMiRNu4cWNTVtrKpfMYe/B4GLqORMqSk2YhoFFNxUSRePGJMnGjFd3zfKSsNK6+9ZrXXc8tp1IyKsZ1ZKyHoRkoVspyk24YcB0bnu+qZoUsMimAEKrwESKGFIkwhIgksVSDaVmolIvQNR2cyKJF0xTtUR13wuRGW9cNJFSB5VRtWcAQJn9XAAkzidDzFahenTfBEQQBTKZDN2W2cxCEqv4JpLc65Mjla1CplOB7CvwE2TyKJp66oQMIY/Iy1eRnZboOQiUl0DAMFYckKeP5XK2cdADQdElxDIIgjnGKfOEAUKmUoJsWDEuTuW+WnODbjgsQDQ11eWRzOQz0DaC2tkZOCJwqLDMBzoHN27bu8XwfCcscATTx6BAqSrOQ8iUvcGHquorhAnzfg25oyNRkm6EKY85lYe16HlLpDHxfTvcYZTCYDqYix/zAlwR1qRIHY0wde4YwlFNBECCVSinFiS/zmpWygWpU3q+GgXK5jLb2sc2/ve435yM0Zk+fNgftE9oJBwdCAl1JheJ4GyXflvYFrjKQKTq7ujAw0I9p06bADwJojEBwXT4c1e9phi40zSCDvYOEhyF8LwDRKBKmBkIY7GpVrQ0EjOkAl8VvGIQwDQuJZEq9P5dqBi79yozpYAYDQqjMcQpCJPyLaTpEGMLULQgiycw6k77tZDKD2ro8ioUihBColGzMmj7HKpWGWyZNm7R49gGzp2zasBnDw0U0tYzB5m3bkcvmMXF8O6IlLhSSDl0plbFnbw8ef+xRrF+3jv/HT35E773n3kf/8pdb/qO+rmGT7TpoaR6LUkl6X93ABdPl9RuGkloccNkkZDpg6AY0rsnJLqEQRCokpI9ISrNTybSarsi1k6vzIYneITRTgsCmTpmOJx594m8X/uynSy655NIveK6PXG0e7eMnYPWaVTCtBCaMn4jGpgbMnjMHfX39MSly3vwDsXHdJjz15HOoq89j0uSpSKWSmDJjSuM3vv2Nb3znu997m2l0PQRAmQZd0fxNPQld11EsF8FUg06Aw7IS0A0drvCRNK1/S8E4NDzYs3TJ4rvr6moWTpgwqZ0xDQaThvoZU2diz94uFArDyOVymDP7gJl33X3nz1Op9PmVSvnN/18Wuk1NTZM++vGPfexvd915aiqROEgIWOs3bMDMA6YjnUyrpqL0Lmq6kgNqRNk4SCyFB4COXbu3//a6319/441/vnl4eHDwX0rBu/cO3nLrbSvmzJ51UOB5EJq0uNQ31cHxbJx8yofo9m07zDdffW3+/ffc9aslhy655NXXX30cAJqbxyQSSXPKIYsOPube++4++aknn5i59p21jWNax4JzLtrHtRKuFCKWacSV4C9/ftnfL7nk0otC4fW832N20sknHwOlIiBEZriT0bQqNXTUNA3DQ4XCH/9w/Z1i9ENgv8nOm815c+YnR0/W4lgGQnDQgvnpxYuXNG/bsV0H4HyQ99q1u2vLwNDwTgAtkbx3tI2soaExf9JJJ3zk/HPP+8eVV18V+znTqYz57e9968uv/uOV8w3NmOy7DtzAQyKRFJrBiKYxMGqhe29X79fP+eZl3d299/zPE6PSei5CjxJmcM5lYzmC0YUUJ5x0bNs999w1DsCu9/q96msbZ40cO8Sxd6Np21HcXhSFt2v3zuf253lcs3L1po+ccoqyx6hnsi4b/fMWzIfjBY1dHZ0t7/X1Nq3f1iNCOESDRdTAgyjFpBImo7Nzt9mxY+uC1nFju1vHtC/80x///O1Pfvq0k6LcchrDW6X3NfADgErV1PPPPf/8N75+znnbdm6LGxPdvd3dSooKwVXDkYvY8qBr1gSdJRZhHyj1jlMNTvnQSfeeeMJJH2WMJSKGj1A2qggV++Mf//gIEBwh93DhyN5E2Q252htSSpFIyfX/tTeX/ePiCy/9z6eefPilfTlXWzZv6L7w4ouvvfjCC2+glOhluyJ0qhPGBUxLx9i2cdYF511w+mkfP+0zM+dM1yjjz61du/bv/9trdu3p8Sa2T4SuGwh8D8OFAlLpEKl0Wu3x5N7Ot124gmP9+g0bmMb6P+h11zfQX1h40MLv19U1X/7Gm69XfO4OQAhn3oGzw3vv/fsHvq4pI8SypH0nUsMKSE81VWtlKpPEG2++1XH1Ndc8c/Y5X41/V+MqZkS3TIQOV3QwDiMpwT6Rr7VcqiKXzaOuoR57unskzRkUxGJwqlUQgsyUCVMWdXbshtAImpoakcumYVccHH/MCUilU9KPaxooF4twfRuLD1uKutp6fPv73wYnIR8c7K9mUknH8xx4foBkMgFBGZKpJKrVCmzbRohQFbFyMmPoJsKAy7gPNU3y4SojtiT88lBOoAil0A0dvuereBUZ9h15cIUgI1MOQlVGF1cZZvKiH5FbxU2hUWIVEWc6xpJQSOAPgVBFojymTJObYC5CEMriDORorkuIpjo8kvTKmBYR/KHrmpoeyXPDuZREBoH0mEYm9IgqygPp/wsBJA250SgMF5DJZpA1EigUhqXnDoBGtWmEE0UypvD8ANQNkDC1WF4VNQ2iB2G0CIW+JAI3NzdBAD0dezpekpO4JBzbBTiHpmkoVUrQmI6KY4MLIWWfhKjOvox90UwdVPfldFs9fEzThEZHvDWgcvExDFP6qBiLpeMBD+KoISNCxtOomyVl4xrV4IVSagrVcdTNBDzPga7paoGjSGpphcIn8APp+aWMQtNl1JLnOvA8B5rGEIZMgd3URFTTkLSSCAIfnHAwKkPTLV1DtepCN0wwkJheXCmVwZiGIAzVe8oFlem6Rik106lU49hxY9rqcvWNTY0NqaHBIat1zNiUH4a9b61c9lwQ+HuKhQIc14fGEMf5lAtlVMtVaExHsViBpumwbQeN45oxZdJEtDQ3d1tmAmHgg+iS3AcSLe9C0nup/HuNaNJnBXlsh4YGMTQ8iEw62wZCMq7rlZjK+jUtC67nAEJCv0YDrBjTFG2Ux8VnEMpcOI0ClAtQg0kabhBICJyu6KuaBj8MQBShOZJ1f/y0T56ZSKQ/2rFrL/3wR04csQeEIwoQgECozlMUMUWpiGORiCAYHhwGOEMiYSKaEAuMgGQmT5DyLss0NCE45aH0B1dtG3U19TANA739fSBUypgd15WqA0XnDkoFxQWQ95jM+5bvY2omHN9RkUyQ+dcijMnxAZfqAc5ljmDIBWpyOVSrct3UdAO1NTkMFwaLru+0nnLyh4+1qy6eeOxpTJw8GccdfyJ6evpANR53SUXA4doBbN9FqVTAk48/hQNmzcGYlkayZsWawl9uufkv+Vx+kwT9yXXANA3YjhM3+TzXk9J8P5SZ2ppUJHiQVgXucdnkYQS6kUQQ+nAdW2WF85jQruk6qnYV6UwGsKQNwLQMlEslEEZRm28s3nbrbTcfesjCw5YsPbIdjKF5bDNCJrBl00ZUqyUADZgyeTKmTJ6Mgf5+FAvDyObyYKaGdRvWY+qUSTjkkMV48YVXsGDhQfjq175y2KtvvP7Vv9x044/HjhvvaaGOarkE3ZT3a9Wx4+xtYsj1Owh8+Zkoja/hf8fPug2b/6EZxnIA7YEfQmMyYk03NLRPnIhysQTHdmAYBpYeumTpgw89/Iejjjn2sheff+6Bf0dB9M8L3LEWY2z8/AXzZxw0f8HSx5947OSD5i+Y+vjjj7ONa9eHJ33ow2JcayuhDHAdD+AedI1BNzSEgQJialRuhFVzvHPvnv5rrv7tXY8/8chNG9auW3Xllb96z5/nxVdfev7LX/rCWYahj3BxOdA6rhWt41oBgP3llpvMXbs6F/7muuv++OtfX/FK85j6vv+86Efjjjhs6QF1+fpJLc2tbOHBC9A0dixax45BEASKWszjJh3TKXp6etc++sQTv/0gxe649vF1zz/73IFQe484354I1cSWOaHRWvTYE489tmHLplf+Hecyn81lsrl8LirMiFK5cWVv0TVGPvHpTzS+vuwtE0Dpg8n2w+rTzz23CsCh/8XzKeWcqSQ+9enPfOSb3/rGcgC/B4CxLc3TTv7wiWdc9ovLvt63pyebqcnK57lpQE8y4jsuGCXgjA7+6aa/XPb6G2/c0N3T/T/eB+s2btj0zttrd8ydO3eajGUj2NPdhUw6i3wuj107O5o7du044L0WvK3t462XX3ixcWSsIuLvE0uZVf/ArjrIZNJYt37dtjtuv/OZSy+5dL+dx+Wr3lzruk5omhYTikEDLtdY3dBQV1tbe/KHP3RCNpV5rVgp9f2r1+vs6Ni5bdv2jVOmTZ4XQ4mFlAXLSSdDPpurufjCS//zoIULfjzzgJljdU1PB5wj8HxoGpPPOJU5HIbSBmIZFlasWvbo187+2n9s37n9XX7tjp271hWKw+VcNp8mRDb9bdvG26vXiJkHzCLHHHt001VXX3vOuHET1+3evb3jvR6bJ5965vkHH3rwkdM+ftqn5EAltpHEbBw5rVDS3wjXpaIZI86OrkugbP/QwMBdd9/78n333H/5888+9cb7OV+/++3v7501e8aBn/r4p74lQjDTMhFyCU0MAyFS2SSZd9BcvVSp2l/5+lf/evtfb/9fr8dKsSSi6bim65g4cTTsnCglqbQzcRGIt958a0Mum90vUqW3Vrw1DGD437E+lYrlKoQoAcgGyrrKOYftVGFqllRdAdjduXPV3p5dy0b/rkZA4HsehrwBMKYhkUwgCAJ4rquASJA5Ur6PQqEgZXhOFblMDoamww89DA0OobG+flzbuHHTytUStu3cIhqax5BSqYRsIon28eORyWUACFQrRWzdvBVDAyUcd8I8JHNJ7Ni8Db4XdN59z/1rIcSAZuqyox9If2WlXIbruvA9H4ZlyAgbLsFF5WJRkqR1E57vxv5WOYUjEEROVSIKsgyWJiNxLipXlRAWy2MjLbhQ1amQ+3Nw8U/araNyn7jqgkrUiYRYRfJkEetZ5KY1DAL1QJMe4zCKOBJiZAOlpsqESD+xUFCrSrUqwTVqGs2U1NgwDYScw7GrsWfWdh1k0llAE2q6lEDgywK4Uq5IeBNkHldtXT65cOGiOStXrsCDj9wr5s5bQFxf4OCFCzB18gSE4Ag5ZJMAEt4iuJSZBH4Ywy269/bgkSceX7Fl89Z1GtNlZqyCRDm2DQ451bISCRBQuK4Nw7RACIOmMTiuDxYSaAaD4zjSz8dDuRlmmoRVMQrX9eC6DigYOGTGp850+EEAy0zANA14nh/DrqBR2OWKioBiYIYJzZf+1DCQIK2Qc5imIUFTviRY19VJf7KvunmmYcBxPaSSKSnH1g04ti3lsYTJnF0uO05yAurDdmwEo0iu/rAL00ppoR/oIaDV19eZAE2l0+lc4Ac1pqnXT5s5raG+tqFBcJotVYqZgw6cN6Z1/LjJudraMTSkVm9PF6GEkGwmTxzP797b133e2rffudu2PZSrFSQsHblsTkamEOkBjoBYXARwqg7cwAEIsKeru1oqV5DLpRByX+Wn0lH2FuVtIgQ6lfRiQgkGBgbg+z4s08JBCw4e1zJ2bMPQ4FCpsaFRMQE85UHVYRgGuBDwPQeB60vYnCCgTI87dBAibkAwTQPRCKDiX0AEdE2D5wfggQ/KNJgJCV7yHA/z5h901Le+/p0zzjnzHOOTn/lMQAjRwkD5dQnFKG6I6hJHCpBRtzQE8nU1qC83YLAwjPqaGlT9KgCCTDoNLqQsbLg0jMaGRmTzuUwimTTS2TR6u3vBCJPUYwW14AGX0nwikEik4Loe/EBSBaWvPJCNmECC4wglqFarCIMAhmkAhCJpWSBUoFypyMaY74ElLIQBRyJhIG1mYDANxWoBlpWE5/vQmI4d23fQT3/2U0d+5YwvH9CxswPtE8chmU1j27YOpJMpNDU0wHOlT9owNFhpA6Yw8NyLz8LhVRx3/FHo7u4mL774j5c7du1+LZ/LoWo7AFdQtZAhDELouprYByrWTmMIBAdHCMKUfYTLxqKggGUkJCsi5DCNhIqX8sGU/JRz6R8eGhxQlgSgVLKh6xqcqg3LtLCro+PNjdu2PHDSyR/+XsA58YXA2OYW1KvoUKguPVW2i7Vr38HCRYdiyuRJ+OmFF+Kl51/AhRddjLbxbZg5eyaYZuCXl/3iC6+99o/nN23Y9FhDUxNMy5KKJyYzt4UAAs6lL1mpaKQSiv1bPLzxlHewv+fEk096ZOmhS49vamrO+r4PEGlzICJEJpvB4MAgtm/bjukzpuO4Y4+ef+SRh990zbXXHjlnzuxbd+7atapYKAb7+3MZlkUt05pwyOLFS6+//vpjioXhWS0tTU3DQ4ONra2t+tbtuzC2pR2HLlrCbM/G8FAfCNWQTCbBBeD5vvSOK6WD78oG2Z13/h2Dff17H3jwoV8uX7XiT4XhwX0+uA/de9/rq7/xrbXz5s07QELgBMQoGikhBB/98MfpYLEoUklr3MwDZnx2zgGzwieffJJoLMHGjG2D7/k46JCFI5slTUPoBSo6Taq9Vi5fvfKSn1960bK3XvtApGRDM+oMw2yLpkmaRtTmWq4fkQUHAIqlYu81v/nN7Xa5XP13XG/9/f2Jzl07tTkzp8X3ERnlNXV8F4899nB5145t+wVNftUVl79w2OLFX0gkEplRC7GU/IBgXNu42muv/c2vn3z6qa9PGj8B6zesrXn++Rdrbr75L4njjzsW9YYpc8sFl43xRAKdu/f0XXTRJRfdeNMf/3Dhf/7nv5Dqbux69tnntwKYFvFScpkshCBwqjbmHzS/8YIf//jkurrG5wcGev+lXL0mW9uUTqVS0XAj8onKYnrkOFJKkclIFsQ9d939wvbt29btz/O4evU7ywYHh1a2tLQcHIShjKFh0k/seT6mTJ+Mn134sy8YKTNcuOTgWw1q7hzo63c2bNz4T6FZa95Z3X35r6948wc/vGCeGB25GXl6BUd7+0TzK2dNnDzS0JA2JF3XYkm+kPMlWJaFYqnSf81vrvjd1Vdf8+e+nj3/LVT36aefXbFz1841c2fPW0IZQ19/N9KpDNrHTyC+F6Czcw8++alTP/La66+sI4T8TAjxnta5IAiGli49/IZjjjlmUT6XH++6DkzTUhwY2VySgkGu8nRls5yrxJMohsnxguIrr7606ta/3L5s8qSJ/+jZs+d9S4IHBnorRx171K+6u/aI73z7e+cAsEQo64lEUiOSIQF0du55uFR0/uVEe9asGTowOj5KpsrEkFWuBiKUYNeO7rXZmtp3WtvGefg//KdUKOzd07n7ncmTpixhVE7aAcA0zNheCsB7863XnykOl951v2p+4COEpBZDRdgIQRCGHgzLgghChH4AQgg8zwMXEuTj+jZsu4qElQDAsWjRojnHHn/s+GeefhblcomI3r147fXl+NqXv4w3ly1DfWMTwiBAV+de6IaJxsZGPPzAg5g+czpWLV/lW2lj84RJ7TvWrHobY8Y2w3U8+I6HZCqBUqmEIPAl6IjKjK4oHxgKaMQog3BVaHk0SeUCIQ9gmJaaPMjpElWmFEpJbJpnlMkpcdSNEyIe+Y+AqkYye0UYrcuyvJVp4uEoP4Dy3yIc9c+RT0VK+oiacnFFjyaMSgAwIUAoVFSKMmQrb5k8TdI7GSrpq6Yx8FDGmmiaBl3X49wyzjkc14ZpGPITEMDzXCQsE77vIZ3KwnNcDA4NoH3S+LYPn/LhKfc/cD9WrXobJ5x4CtonTkNjXa0Cco3c6HLWx5UXQ3oEdMOA7/nYuGl9ccumTZuGhwp9iZSpJs0EXugh5Fzi4FWkk+tJyE8YyIdVoCa1QRgAPqBRAzwIwHR5nKpeVZK51QIq/3sOpmvwXR8BCcF0CX5yHE/GtjB5LFzXA6UyY5oyDkdIAm4yl4PQBGwFlPL8CN4koOsGqtUqfM8Dh4BpWtANE1wAjmvLzQ/VIMRIcwWOB8etIpFIIPBd2H4IIcJ0a1tby0EHzR/TPzBU29c/kE2n0jUHzZ+f2rVjp+6HQe6II44YP6G9vWVwcCC/t3tPVtfMDCN6wkoawVCl4Lyx7C2tra87vXNbB+YfdBB2b+8AYwSBz+H4TtDd3av39Q9qhqEHmXQKpqEjYSVRLBXhug50ZsB3XQjC0TSmGXalgsDxsHdPL1pbxzF578j7QRCo/FESXzfxA0yFo0f+oJraOji2jXQm3ZTP5Gr2dnahv68/liaapgnP81CuuNANQ8mTuVxrAgmrABVgmtz46lQHKAUPAnAPSCXy0HUmC0H1noZuwnE8UDCIMESlWspffPGFXykUihNczw0WzJ+nAUAgfFBQAOqBq4p3RimgGhJU5WHL4ljANAzMnD5TRs5wWexE2ZdCyM1uNpOFgEBjc1NdfUNjwrZtgBDopg7P95QXlsL1HJi6CcopKnYZOjNgmIaU9GqGWlMDiMgzrSTOmiEni4wAti3l0XLyA0RYSUap/Hc8VJFlAgQc6XQaTtVGS2vT8V/72lc+AQDbduwURx5zFKEGg6np0vcrpCwMQh4HprrvG9duxIKFBwEAfnTBT17eum3bb3K53EA2l8HQ0DAIJSiVS+ChQCaTgV214foBOLiKFtLhBQEIJTJnWHEIKNMBweF7AQIumRGMSQ+8YeiSiB6EMC0DqUQaruuhWC4hn62RAD8AumGAEIGWtnH2b377u+uFj5nf/NY3TmCUIRDyfbo6ujB2fCuYxlC1XeRr8gh9jpdfeBFHH3csDI1h/kEHwQ9DTJgwHna5DEopmhsaG75yxte++cMfnL+mNFzotBImLGKNgAEhGQ2Cc/ihB6J82UxtJP+dP88+88xj9z5w91HfPOc7X9Y1XTZOfD+OiquprcHujp14/fU30DpuLCZOmJD9wfnnf3PRggVHvbHsraeOOfaYZ1avfnv5QH9f3/v9DOlMLrV40cJWn4ftbRPaZ/z5lj/Pzprp2blMforrevmqrqFUrKB/cAhDhSLKxQrschW7OwWaWhrkc1rTYBi6itST6QQhF3A9D7oqIg9dcsjwjb//45+ef/HZm4UQ76uTMDQ41PGTC39287x5866iGiE8VHNe1VDxvRA1tXnU1tWQEMBRRx+LynCRLTz4UDQ1tshIJB5Chx6DLiU8kcbGxRdeePHRr5/zzYs2blq34oOe31lzZ+Ubm5trpGRPA6GA60pYF1OASY3JycXNt9zywIoVy5//d11rM2fO4pMnTbVHe01lw1/+lekMazesF8Vyab80UV5+8aUXn3risRdO/fgnPsI5QcwXjQYEACZOnJiaOHHirMCXDcJjjz4OoRDI1eSAgMO1JcjNsCxwzgsXX3zRpbfc8pfrb7zpj+/pM/T07FkB4ENM1+B5HhKJFHRdR2dnF9auX4f58xecMK617W4A/1KqOnPGrGnZTD4fqdBG0Z3i9AYKgpCHKAwNQTd09PT2rNnf53HXjp27zj3vvDuvvuqqAxjVEtIHKyGahqlLdQ4j6asuv+Ksv95x++xnnnzyne9+6zv8P370H3t3du189M7b7vxv8Ug7d21/BsDZsc2Jjlj0IvGfGKl24/uGKh89DxUk0tAxXCjuOPfc8y+++aY/3/rjH17wz4vAwaGBn13406fnzp63xHFc5HJ56LqG1vFj4XkBHLsC3/fw+c9//iwzadVf/8c/PL9m5dsv//HPf9zzLz3J69Y/f/WVV/75kkt//lPTTFhcxAg6UBoltsi9o+PKYZpMVaAYLhXLf/vbXcsLheHVw4XBjkULF3ZtWLd+1br173yggvGFZ1/otjTzsvraZvK5z3/mbN3QLN2Q6+Kbry0rPvPss08sW7Hs2oceuv9fSo+DINwb7dFksSvbV1yxRnSmA5Tg4YceX/bQw4/cvWPHtrf27unc+396wbtt27bS18762vU3/vnGuYSQtBDSKktAFGiT4Pbb77j3gQcfeuT6P/zpXb+raRqDQQ24rqtsGrL9YlkJ6TEIORJJC45jwzRltijxOUQIOK4Xta9wwJx5s5LpJN3V1YkZ02diwcL5OOqIo5HL5NDVtQcQBK5bRX19HSA0gIZ4/Y3X0DJmLNomthduuunmdYXBSl9TfQMCz0epXFTFtPQIaqaBUPgoF8rQNB2MEmhMByiD5znS/6czCEHA+UjhKqduiIOPmZK9xhe3AIQIwUO8S9ceTYEEwYjBW9GdR8hukQRa0l2hMnnV/BM8lMWuxjTpC+HKFyJkNieo1J7zUBXhYYhQdQRlcU1i2TIh0hcKLnHwHAKmZoCSAEEos3F5KKcOpmnG2cJMbdYpZSBCyp+TKQumbiBlpNHc2IydO3aC6RQ12fzE+tr6MdOmT8X8g+eTeQcdhGQiIdfsSMKi/Lsyk5XGXlVCpbxjzeo1WLF8ld3Q0DgEAAkrDT/04FZtEApV7AKVahWGaUA3dZiGiVKpBCG4yhTWUSq6gCAwdB0UGsAIeODHCw4IpPdWFWGBAqxByGaBHVRBmfQVuq4DSjlEqKjdmqZuDhN+aKNcKkMzNWg6kzcOAZiuxZmpvu8jk81IsnIQKHqwgGs7I3m1jMHzXOTzNbnmhqYxjY2N9YKSZLlUyR12xNKJTY2Nsxhl49rGjavZsnVbrev62edefA6mbrFDFy8RmzZvDLkXauvefoccuOBA69lnnqPbt27H7DkHiI998uPaKTNnWY8/9jgECKa2T8PwwDDaxrRhw8Z1KBSHQAgbTqcyQTKdYExjgaHJpkdPfy+okssbmoa6hjpwIaf75UIRg94Qxo0bi7bxbWEQhKGsBSPquIiBL5GmlxKCatWG4ALJVBKZZA66wdDTvZcHvptMJWWX3jB0gFBUKiVomtw06lRDwjSh6zpsx5PXLVVdbypBWJxIaXfgeCBE/n8iFPB5AFO3YLsOUpkETN2UcnBCUCxXMWvW7FOLxdKR9yy7Fx/77Ce11knjEYDHhUjU3CJE3qfSVsDguT76BwZQW1erYmfkFN93fTlN5gFMQ657QRDKopAABpHdxMkTJjcFrmcNDQ0im8vCd2R2dDKZgEY0+L4HgMAwNIhAQazCaCNJYZgGhJDEeR5I9YmZkBJ9CdTj6gEsJUiEKe9ToHgFugEQpgBgMrIonUjDLduTvnHmN85ecuiS9t//4fe45ZZbyWW/+oXcKILLbOVQTlL9gCIUBG+99jqqJQdfP+ccNDTV4aUXXt367HNPX9a1t/O5sa2tGBouwOcC4DIWSz4jpMXDtAyVfywQBkLRp6X9hAqmpNYUBBqkZQKxV04WlFJeRSlF4IfwdanKMAwTYBwG1VGpVlEIfKSTSWStHLZu3bLlqquuuuawwxdPnzZp2nhKDaRzKXg8wM4duzB9xlS4cMFDjgkTp+Dt1avkhDiZQF1dDU466QSsWr0GTzz6GJYcsQT5/CH4wQXnHbdz19ZvXP/7P15qJRO2blKZDGBo4ODwXQeUMWhUQzKVhBACju0ooMq/7yfwg4FEMnFFWstM/NLXzjjcNAxVfMnrwnE95OvrMLxrF5587HEcffRRYvr0mWTK1Gkza+rqZp72sdNO797bve3ee+7ZtGnT5vVr1q7bPdDbN1guFUulcrE8PDxUpYx5rusJwzRY4AdaTU1NwjDM/PTpM9rmz5s/5+EHHjigvql+/PDA0Ni6hpZ830AvVq9azrOpQXLggoMwY9YM1OZqkavJYKhYQn1tCFPTUCgVwYVAJiulpzzg0HQNnhcg8OS+I5lIwA8CvPHWm6uffe6ZP994y81/F0J8oAnmNVf85oZZM2dM/dynP3sOqGQtUBr5g0VsUfC8AJZuEKQzmDtvTrzYMWgjCi4F7iOSwLr3nvvv/uMfrv/dDbu2794vG8SK7VkJQ5frklp7mcbAlFyPqI+xu3N34ZqrrrlHBKH777rWNm/d1v/www9vPPfc78yJ1x2V0sDDEDW5evzuut/N/vpZ3xwDYOsHfT/bcfoPW7L4xlM/ftoiSkmTiAoppf8VChZJGEN3T7dIJpOora2VYxzbA2UEuq6Dahr6hwZ2XnDeBb965NFHbw5C/z3LMx9/4olnDl646JNTp0yZ4VMqwZe6hnxNHuPa2jB1ypRJX/ry5z/6XgreebNnzbQShhn7YAiJZfVkRBCIocFBVCsVeL6zY+uWLWv+Hefymquvvql1zJgJ55533rcDDkIFBdGoArky5LIZ2NWqcfpnPnfEFz9/+hEA8MlPfwoAjjzs8MM//crLLxdGv96df7vr+S9+6csPHbJo0UeFmu4SpcqKcsGl3J/HkFhBZCM79ORQBJQEz73w4pO/u+53Vy9b9taL/+o73HLrbfd+93vf/URdTf3sIAzguT546AEUCPwQnR17xbSp0+p+9YtfnAngzBv+eMNZAG74l0qGoX5uJRO/9Th3L/j++d+rq69ttW0HpXIZdbUyySZUPB9LMRoCHvhPP/30K8+++OIDb69+Z/WYpuZyz97eyu663f133HH70P44Z07g9s6aOfPnby1/46V8rnbRwQcfNLO1rbVt87ZN61Yuf/O6rVu2vPVeXueO2/5233/+7MeHVyrVWtMwVWyo3G9puuSgXHHFtY888MCDf54zY+aaDRve2bt3794A/xf83HTDTXcbujZ80Oz5Xzntk589Jl+XyY2oAp5+8Iwvn3GRH3gD//X3ND8IoDO5YeeCww/kRi/wA4TK/kMElVmhoUAQyE4HFxzJZBK27QIAyeXqmssVG9NmTBZLDl1IkqmknBZs3Ix5B85FMmViuBDCrlbx7LPPgYcC3/j6N9HS3Iw3X18+7FadDbZfKdU21qJUKCKbyYJzgcGhAblKcA7PCVXmLgMFVVEugdpAhTLuR0gQkSBcTVJlYU5BYrkcEaPUyEJOTkAJCCdx1AeBpC2HIlASBtldlXmkso3F4wgFjJoGj3S4oixHIeSNEyqIESERSpurTreKR2EjEACuXogxOrJRVzExMjN5JLObECI3lup1fM+LN9SUURAhIEKOTDYDSgDTspBJpVEoFbFx80a0No+B6zk4/Mil85mhJ59/5gVv2oxpxoxps5BuGws/COREnEk/aEx/5spDq+lxUZRMJnH0UUeK3/zud3s45EQ9DEcKhTCUbeJ8TR6O44D7IQL4anqiNnAhh65piqAHhOBgQgMVkuJKQOINv2Va0lermTK6wtDhOi6CELAsU3a1KIVGNVimKaeEoQ+mGSoOyZfwI6ojn8uir78PNfk6DA8NI5PKwHN9VKpFlEpVOaX2PLgylhqZTCZXW9/YPmP69NnTpk2ZObZ1TNPObbvSRIhExa4a/f2D6W9+/esNVbc6hvs8vXrVatHb1x9SjZFDDj6EPf7ow7jjtlvx81/9HGNajsCqZavw4KMPYvLUKVi0cBEOP+IITJ0yhXR2duKtwlvo7+tDT183KCF47tmn0D9URn1tAyyLoTRcpqZlmTqjyYH+PmKaiSCdzYX19fUi9D2MaR6L3V2dCLlAwjTR1bEbmqEjnZQ++9def2vnxs0b31566CEHShmSvHcE5SrjWMS2gFKpDCthKXUFUZ0zRizLxITJE1Jbtso9ENXUrkWdC93Q4bk+qratKOhCTjK5nPpRTeacahpAdQoCCkaAkAfwfR+maajpEBAggO+5KFWKmL9w4ZJvnP2Ns2679a6m0z79UXzp9C/ANHQlnVI5ryGXvuPIc66MVJ17usRby5aLk088kWazabhulC3IYfsOwAGNmRBEUSKFJOVGLXvfC/PpTMYqlosI/RCO68E0LXAly9ZUUW2YJlKGhmKhJGOFOIfruWqaQRXhXYt96FGclmVZ8D1fFrpEZjNHBXwykZb3vs4UqI0jYSbQ1bUHHz715I+dd8G5J+zcuQOrVy7HBed+H8WBYazfuBYzpx8AP/RjmbeuMQyVi7jsil9jbHMrQHWk0pZ/4cU/u2lweOjpmnwtPMeB63jQNQ1hIOEyBBps25HnigF+6AEwZC43JeAikA08IfNUPV+yExKJBAwmvZuu64HzAOPHt6GluQVvv7MWINILDQGkUmm4ng2hBbASJjzXh2cH6Kn0YEzTGKQTmRd+9Ysrb7/plht+ks2l4HsBpk2fip7uHlSrVSRSCXi+h9a2McjX5vD08y9gzuzZaB8/Dl4QYHzrOBx2xJFgBsX2rTtQ31CnXX31tV97863l61YuW3FHLl8Dp2ojkUwAgoNQBh6oZonnqfMh5P3wb/6xq/b6pYcs+u3HP/3xaZlMrgmCSGuAqcMwGca1tqKleQza28bhlVdeID29fVh06KF4+eVXgkwmXZ/L1jS0t008JG2m+OJDDh0ihPh19bUAJ9zjvm8kE2G17Ih0OkEAYhimaaQSSYMRmureu1cvFIdw79/v8saMaRMz52h844b19KMfP422No+DRoHh0jB27tqJSdoEVEsVZDIZpFJJWEkTTEUE8kD6uJ2qGzduUqkktm/dsfua6357633333djz949u/7zx//5gY9XtVoo19Y3XlFf3zTm+GOO/oggFK7nyueLAgTSONYiRDqTQBjKphNjDL7rA5oGShH76zs6Ol/79Kc/+aNly5e/8sMLfrj/zm25PADABpDwA8kBMQxTQr2YDsE4/CDAjl07V5WKhbf+nddZT3dn4bSPf+oVcu53PxXtY6Di2zw3gKYDfZ29c5e9uey4/VHwAsArr772yHnnnfe7q6666qeEEoOLaLpGZV66Gg60tLQQAcD3Jb9B0zX5nAHw+BOPv3TJzy+96I1XX39xX9//jtvv+MfZ55x1zW9/d91lpmbWcQB+GCCRSmLW9OkAgCOPOPKTY5pbX6utr3lg7dp3/scOV9UuxlE/lIxY2WSig5x4er4HM5FAfX0D/nT9H9569rnn/y0FrxCiRAi9uKWlNfPZz336DICBQzXrIdWQrgKgen4A23Ywdmwznn78yZlbN21pAPCugnd4aHBofHvbBb/61eXDn/nMZ06jFGkgii+kSkFJ4v1wpLYEZaAWQ7Vc2fWrKy6/7uprfnNDuThcfC/foWPnzvVf+PIXr7jtlr9eoTGtiVoKYCo4GE0imU4R0zLVcCLY89Bjj+4485wz31txWbXLAK46eNHCN35z1TVfKg6XZlaqduPJp5w8LpE0Labu+57+/v7X3nj9tfvuv/fuZx9/+tmDFizoffrxx8S/6x5ct359P4AHADwwZ868zJKlSw90Ha90/8MPrnqvr/HzSy/6ezqdzB144MHnTpsxeWJzcyM6d+9BLp9BJpPh99zz9/uvvubqi7v3dK0FgD/hT/i/5Ucpfx5jlD79yiuvLTnxIx86tbGlZc6qZStfvvraq2/yA2/3P/s9jVKmIkJ4TMINuZzg6oacTBIKpDNZUEpRLhSQyqTheA40qqNcrAKA3tTSUOs4FQz1D6k4E1nshkKgsb4OruejpbkJL7/8ItavewdnnHEmGhqbsG3LRiRTeoEj3AUIDBcKKBWLIAoeoGs6wjCE7wdIJBMQXGZTBop4K4SUIHIup42chzANE4JIbzKUZJExgiAQEJyDMgZGiCKvyaiQKLqHaQpzrbJ55e8ycGXwJrEMWowoVQiJzez/7IfzkbWRKjlUqDIo5bRSFnkjNTOJ31/mdUbFrYgnuSOvIRfTkHMl0ZQTF53pMHRDRtsIAdf3oPkyBkjYDqpVB7l8Fr4CCxGK9OIliw/u7e/F2g3r6PTZ01HfUDfyJdSmgEUxPZSACoBQBkBuxF3bw/TpM1BfW8eGBge2AJCxK9IzASuZhOvaEKFUEPCQwwt8VG0Hus5AGYPjOnKqzKgCPMgC2TA1eAoKRoTM1RVEZlImEwlQSuF6PqpVW0ppGYXtOEglU0jo0stLGAPTKXQzJWU1OkMqbWFwcAiVShnVahkiDNA/0CcLu6IPw9BSjc0tNe3jx+fr62vNwaEhUa26NbV1NRPa29pmzJw564CJkyZNT6WStV27u8PGRU2kprY23dvXS3t7+8SsmQeQdevXoqG1EYxqRHCidfd1o7NzL2bOnIU58+agffw4BG6I0798OmbMnoFyuYq3316DxuZG/OPll/HiSy+gWq3AMA24jhPnMhuaAadaQhDoMAxzUrVSPcUwrdYzTv+aoDrVVq9d09mzt3dTLlfbU99Y65RKBaejs8eZMHG8U19XH1ZdG7ZdRiqVxsYN6ztuvuHGN5YeesiBlCrvtK5DEyzOf4SQEvuGhlrZ8Vdwh5Bz1NbXk9a2cRBAvlAYRr6mBnbVRjKZAAGB4zpwy56arjDopoFyuQTueTKGikr7gRCARnUQTU7ThSAwTA2ERNIoAc+xIQw9ctkbxx9z4hfXr1s3t7WliX3uU5+DaegIfKGgW3KzGnlyuPLJU04ACn7DjTduGR4ask/72Mdmc4Dpmo5CoQDbqaJSrWBc67h4TWBMNVwUxAUAautqEplcJuns9NDSVA/TcOC6LgqFYRBCkM6koOscjmPL6B8mC1QeUgS+CyrkBIdpuoxZc10pqlJxSdVqFZRSJM0kKpUKqM6QMBOwq1UYlsx9rlQq8FwJAaqUK6hUi7M/+clPfx6Aedutf8XYMeNw3LHHYtXKtdjT0YMpU6Yj5IDDPRjckF51N8AVV16J1cvXQCMUO3duf2PTpo1/J6Bc1wwEfgDfD1RUkiGVEAxImhZsx0WpWoZhGmBERnH5vg+dmTExnjKZ9e17niz01TQ9ksoP9A+gUqlIErymwa9WASFQrRLZkGQSgsaohOd5ro8wCJFIpLxNm7fesXrNuhOOWLp0QbFURk1dHoEfYsumLZh74Fy4/x97/x0gV3Vme8Nr731i5c5ROWcQCCEQOWPAgA3OAbDxjMc5e64Ttsf22OOccM4mY3LOICEJ5RxbLbVanSvXyXvv9499qiTfe+d7vxvG13Pffuw2Mi21qqtOnd7P86z1WxKIpEQqlYQf+sgXC5g+bQqEUL7ohQvno1KtwjYSKFVKAMm0ffhDH3/fu97xtnWMsEOWZSOKOHSdgugUgYzinEQFcjN0JU3/W9RrW7Y/+vGPfmLJj3/8k09rhm5xol4Xpqlc+GI5j6nTpsHeksNPb/8Z5syZi+vf8EatUCxg04bXxGCxLAVCkRKpzN59B8i5F5yjHenrh2Vb6OjqhBAEvT1dONo/gIefeAIzZ81EtVoTURTw5lyOLlq8xDj33AuhmQyZdAomNXBk4Ah6ujtx+HA/pvT0wLRNtNsqgo4CoFTRrgM/AmMMXEQYGhnGjBnTAEb4K6+8+uynPv3p723c/NrTPAz/t24Y8uOjfa1tnV+896677fMvPPcS2zQRBGFd8geqUQWB5BxBnIddj57STUX39t0A/UeO7Lrn3vv+cvvtP/ndsWNHD/7vfl337dx9eO3atY+dddZZb2CaYqZEYajOFgyoVBz4oY+nnnj2lXw+X/mPvs4mxifWFcvFQ0253KzYtKWsFroCbE6bMdP82r985aNvfcubcy+99Mr9xwaP7ftf/Tv/8Ic/fa+9pTn1sU984iO6YZqcSyUJJidlsBIAUhH3T67D/X1PfupTn/7nnTt2/E97KDds2HDHd7/z7Y5/+ocPfjKdSWe4lIiCCNAZGAhOXX5q75q1L/9w7fr1r3/DG27YNWfOTK2jq6vYd/DQPT/84Q8bwDISS1DRMPGSE489HpTWqg5KpTLSyRReWfvqBill+T+uORB5O2F/lurw3nTDm95JQZKabsTyZq7SWKRaJXi+B9f1cOqKFdXLrrzyvy+V7j96wE4l33/7j37yxFe+9OV/PPfi81eTODS2vhj662tpLCyXyvteemXNMz/7xc/vWvvKK+u+fNtt/0Pfw1133P2n8dGx2jf/9Vv/0NvTfZau68lUOg1dvUUxOjwUDY4MbX/mhRdu37Bl44v/w/fV9RvWdLS1r+/tmdqWzTVNX7N+7eLu7p5pxULBmjV3RvGuu+/ZuH3LtlePDx4r/a2bu+3bt1YA/A/nM3uhHwH48S3vvfXoG6+9/h2rzjz7nEQilXMc/+hfHnzggY9+6CM/n8hPHMJ/4uJChABeAPBCMp3RnGqFSyn/3UGERqmK9eBcQGMEpmEiiCKYtgnTNODU1I2WmRpSyRRCwVGpVmFZFqIgRCJhQTNkx6w5s6Ye2rcfuYyJcimPRx9fh+7ubqw6cxUcT20yCNVx+PBRMM1AS0uzmuxPn45Nm7fsONzXd6SntweO4wCSwPVUbIxumOBSQkYR/MCDrhtK+hj7/gghMbWUxlIKFYdBKFGEZUpBpEAY1sm+sd8AEqK+6q1DrOKNIiFq+ypJPQb6BJ2YSOVdUNEpdbkkA5UUEid+VhMQ9fWBE94GSeJJ5V+lsaGeySJjqg6pk2TjXMJ6gw0CWLqJiEYKssQj5RTWaSMHUovvADzi4Lpo5IVpjMHzfOSampDLZjA8Oqqo12GEA30H0NScXbR44cJT/NDBP3/uM9r0aTPVaxzLOCWAIOTQTNaAedV9nJ7vKzk4VZl9Va/qV2qVwwCFoesIggBWIqGGFvHXLBYKceOjQQNrbM4NU4cfBCCSgEOASAnDMhR5OYpUM2/q0Kitmo94AFFzajE1T2/k8UIE8DwPlmVBgENIDjthw/NVHE6xUIIaFEkASLQ0tXTPnb9wSmdXZ1d3V1dTJpXpsFJmr5Ww20ymJ8vlUpCfyLvtnZ25dC7T09Xe2ZLN5rLFiRI70ncU+/YfQkdXK6oVH3PnzkJ3Vwd58KGHoZkUju/Ai1Qzs33nNhw8dAhz58zDTTffgr79B1FzS9i8ZQtaW9vx4EMP4rkXnsf7/uEWrFq9CqevOgNJ08bunbvQ1t6K5mwOYRhi8dIlGB0dQSqXw+KFi5P/8N5br+vumfK6a669VhwbGRDXXH9NsW9/385X16/ZVpgo9C8//XTxzluWHv/Zj3/xgsaIQwF4IVfPkWmhWq1sU6qKIg4c3I/ZM2eirbXtJFPOietdXdexTYBSuJ4nHadGNKrNBhTFVnoBXM9DKpFELteEiYlxFb1DFeQLBEglU7F8jCEIg9hWoPy74BLM1Bs+YAGuVCUVB2HE4Xo1nL36vLdP6eq+4pe/+rn1yU99kqRSlsos1lT+MmFAKFS2IiBAJQWhBEEY4Ve/+PVrP/z+D75+ytJlqWKp8LO21tYklxKu54ALgSAIG1YIEsPlENsj6kM9Uzc0nbHOhJ0AKOB5PgzDQDqdVlFfMYmZUqr85HFmnyIwU+j1IUYkwEHirGu11YZQ0pGIRyiXy4p8TBTUyrZsiEjA4z6iSCCZslQcUc1r+f4Pf/DJ6699/Snf+86/YSI/IW++6SayY9c2nHPRudCZAccPlEeJcwgqUCkWoekJCE7Q33dQdja3unf8+c/3FQvF/ta2NriOgyjOQCSEIGknUXOqiMIQtZqvAGMxAVvlKQKRF8b3XwYQIIz5AnWioiSiIX8DoQhDDs8v1VO2FXDOV89TBA7uqXt50k7GHjQDoQixd/9eNDU37/nBt7/7W69cmbNwyZKslbAwZWoPJiZGsWf3bsxfuFDFslGGN153Hfbu24ctW7ZgwcKFSCVTyiMZChyfOI6ZM2bi6OAA3vn2N5+zccP6j/zyV7/67LSp06qjoyOIRAjPcSG4RDaTgRBAsVyEbdlI2vrf5Ae877sepewni5Yu7P3whz56i26bCqQkJIhO0N7eCs4lrrr6alx0/vlqUBF56Ghrge+5dKxQwJlnrmCtLW3INbdiau80ZDNNMHQNnu/Btm0ILtHV3YXLL79UBmFE2lpbqa4bIELCSiaQSiXxl788hEq5jJmzamjvaodtmZg3bw5EpCSAmqapNAQCjOcncHRgQM6ZO59kUmmYmo4ZM6Zh1849e370k5/+4a677v5zfmL4yH/UczY+Nrx16dLFH3//P37g/ddc8/o3dvd0tQJ1IrxEFHIQCBj6CTBUo5E6fGTXD3/0o9//7je/v28iP3Loc5/7zH9Mg5kfdxYtXvjNH//gp7nzLzzvIsM04bmeisYCkE6noHn64eGh44/+La6ztevWbvv+d797/5duu+2TNPb2R5wDVCKMIqRyabzj5pvmvP2d7/paEHoffPjR+7539eve8M3/lb9zdHS42tbS+q81L6x88P0f+EBbZ2tn45P/jke+Ui4Pf/s73/7DY489/rOdO3b8Lx3et2zeWu3o6Pz2xFihdNttt/1zIpHoZIYOLiQCxeHAjJkzOltb2t9+wxuuV/YsYPjLX/naywAaDW8YRMPxpkPZ4Op3NSkbUT4AYFoaAHhHB4+99jdQh4wwXf/sn++8e+0nPv6xm85csfIcyzT/6qaVAtDSnMXBQ0eHHnnkwV/u2LF94N9XJNQcAHf2dnVveefN7750+pTpK2fMnLng1NOW9CbshDU4OFTt6+/vK1Wq639++89eXPfKmnVVpzr2rne983/q8Qe+JwDcv3DRgpd7OrrPPOuscy688urXzd64YaNjmNrBRx99eNNDjz22ToTR8U9++GP/c8qGsdEIwFD88erJn7vpne/+T9sU/uoXP3/YspLPXHTxRYt6p/Q2r3t1/ZEDB/YecGo1gf+Lqlb5fwczalEYgVICy7LgBz54oCBIEBKe48HQdAgi4dZcBF4AIoAoCBBpDMygcCbK6G7rWJWixpyNmzdKUEla2o5ByAhDQ0M4fPgwfC9AS1sL9h/bj8eeeBztHR0YHB5FrVzFob4Dw3fdfc/ThJCa7/kI/EBR3TRdUSghYeo6okAdfhilkIw1DmCUqBzHMAxBqAI8IAYpUUZjurFAMpmEpmsoV8pqMypU1qeAUNvVWHrCeR0hL+P/yvjQq8BUkohG4ytlfBPjHDwGODUy1v5K3HwC+NCQtzQgQKLRINc/R+IuVzaAQSLeqAm4vgsphPKyMtbw1dSb5frWmGlK9k2IhNSU2d7xXFSqVXDO4Xs+IIFcNod82cP5F563or2rfer6desxb/Zi5HJNJ7bYFGCSwtKN+HuQDQRXGEXwAx8Jy1aSZwL0HT40unvXnnHTULAwGU9oKSFqm+yHCPxKTD1W3t8w4jB0HRozQMGVjJYoWRHnqinTiAYrkUAkOSKh5O2e58cRQQaiIFBwLqbBqVXjfLSk8ilWI+TH80hlklTTWFtzU/usJQs7Zy9euHjO6WetmJvNZDrGhkZSvdN7Eps3bopGhodlqUa6jZTV7LuhX3JK1a6uDjF95kxrIl9MUU7Yzu27sH3bdixcMAubtm1DIp0FECJq8/HIYzthGyk4nouOjhYkE2ksWbQU+XwJSxcvhR/42LDhNdScGqBJzJk3H/axYYQBx4c+8kF84hMfw/SZ07Fgwdw4n7Qu+Ubjeg0jgXKlAsM0kU7Z+N0ffqNFgmjHh4dwSs8pYETLPPvs8+2DI0Opo33H8qaVqNSqZY1p1KtbFjRdQxCp53NkZKxvdGhcJHMp2ju1F1YiGdtNlY9Kiw8+igLMFPgpvo5TtkVGR8dx/vnnnfH4o48ki/lCjVINhFH4YYBUJg3LsuA6roqQYOpzEhJB4EPXDOXviUEXEVeTZ0NXECgeCeSac7BtCzzkKE/kyaw5C1//5hvf/MGJyviUd930buzfux933nU33vymG08QmSHBYs4AjbfEruOikM8X77rnrh9kctkHR8dH5+7bty9oa21NOp6LVDIDO2khkbAb3t8GrjqW9tWlWtnWHM5YeUbb5i3bYPsBPN9FwENlO5AAJEUUN86WZYJCUwAMgwGCw6k5cZ6yhCQxAAlo3IMIJWBEh5UwG/cKLc4Oj6IIhmGgp7cbgMTIyBAuu+zit37oAx94S36iiL17D+EDH/xHMnvWPNx3/z1Y7gaglg4eCFhJA8xUWeXj4xMw9BryxQmsPHsVcaveK3v37XtEYxogBFzXAxcKmqMxNVAKo1B5WXUTPAwQcQ4qAc4jaIYex2ERFXMFQBIKQhk0SsEJRxRHlOlMgxf4MdhMZZCapqmy1UkIDmVBMTU14BKCI4zCGKyohrTFfB5PPPH4A6eedso551564ZucWgDP8dDc2opHH3kUHZ0daG5uQRAJGBoBozp27t6DmdNnIJlIwLRMGIaFMMpDMmDK1KmoVn184XNffOfmHdvW7N65+04KIPACWJaJiAsEnCvvvk7hxnnWf6sSgo9aZuKLzc3t5jve/ra3U0NDJAVCP1TEfyFAqURzcwsK+TzKxSIgBObMnokNGzbhnmMD+MSnPoxND70G13dxtL8PoeehuaUdy5Yvh2UlQClBtVojvb3NOHZsAPmJAqZPnQ5KKQ6PjcHQDFxyycXo7u5s2Fkq5SIO9x/BihVnxLRuCkoZKk4F5WqZZNMpEAL+5FPPbL7r7rvue+KJxx44fmxw309/8oO/wZZk5w5CyId/8MPv/eFd77jp2jPPPPuS01acujCVShpgABBbloTE6OjYsUceeOTVxx5/7IlNW157qVwtHyrkC/I/+jHu2rl7Qzqdfu9nPvWZ9737He96e8/03h4AkBHcxx557KWf/PT2n7z62qvrf/nLn/+HP19B4IZtbc0/f/0brjnt1KWnXRjFqiJ1LxXK184YqEZgaomuhYuWnTFl+hQ20D/wv2RmH5sYLxBC/vX+u+59+TOf+8zbV5119uqknehoamlOCc51zdCDsdGxoz/+wU82Shlt2L1316sPP/zINi6497/j+x4ZGXYvOP+C2z/5iY/vO2PFqndecOFFF0+d1tPBTA2ABt8PYdoGKKFiz96DO19dt/bn3/n2d/Z/4fP/3Pgazz/z7JbaZ6tDyVSqSyn0aGPZKzlX3Bk/hG1Y2LRp4zO7d+7Y+jfZhoVhCcAfNV17/PVXX7NiyaKlp3R2dc3pndbb293ZlT186OjQyNjwa3/+859fXLfh1U1RGP6/+sSPDR3fB2AfgB9adiK1cNGC6c3ZXGrw2ND4/kMHjvAoDG+8/vr/bd/D7l17xgA83JRueuKXv/ylMTo+4oRRKN9763sxWf8/tr1ezQWw8f/rz4NW394puRhDJCIomlsIxjSYlq2gPwxozjXDqbrgkiuJbxBCS+jmJz/3qctkJLLTpk3B7AXz0dnVgRUrVmLz5m149PEnce0114BpFMdHhrBpw2YsXroIQeihvaMdr2167fD2XTvWd7S1olqtKWgMo0gYNsrlKqIogm3Z0HUDkiiao6jHDEHFepA4nV0dCGmcnxoTZRkB56oxI5RAIxo4eB0rpTakhCpUd9xgmoapNqTgjUOujA+6UipElSKlktjLFvt5SbydJSfy1ggIZNwXEElOkjb/9aZXURDrodYxTZbIhk+YsBiOJYTyKEM9Jk1TMCwab4aiKFIkRU3JgyljjYgi27RgmgZ4vKFQIAqBKIywYsUZSwr5Mjw3kLnmLOFcRYpQAQgO9ZxxCUPXTvgy4q4imUzUU5QAAMNDo/2e57q5plYwncCIoRNhGKBYLMI0rLi3j0CZqWTpuoLe6IYBTVMHZsFDcKEylhOmrfJ8fReB7yORSCjlQRxlojFdZfRKCUSRiltBiEgKmk6mm1vb26bMmDFt8bnnnH/6smWnrBgdGZ+9ZMlCmwHm88+9oA/2H8WUqb145NEno2PHBpz21lb0TpuTzGUydOj4MTufz9tgEhPlAnZs2wOdAqetWI7ead1obW3DRz/yEbS0dcLSdeSLeezYvRshlzjvvPPAXQ++62HmjFmYPk29fgISy5cvh+M4MK0zkMs2NwjY/3VRQsCFRLWqtti2bcH1XEhJ0NKSUwcUzjFl+jSYuoH582bj6MAwHnzwIZQrVevc88479/jM49X9ew4+e8cf7x5auHC+8Dwf27fvUHRUQ4PkHHv37D566PD+gSXLlk7TmYah0RG0t7Uhm0o1lA5KWnyCVFrPo7MTSbS3M9x44w2nPfCXv8xeu27Dtjr1nRKC4eERta03TRimqQYVsZHeMhPK/yPDWKGhItGoTlW+qGVg1uzpOHZsEK7jolKpYvbceVd87KMf/dTY8NgpIed4yy3vwMaN62AmTFSqNaRTSYDKBgRGCA4eARpjGBsfx0MPPvj0yMjIEzWniqlTpoQd7R1KH63roBZTQCemqUi0wINtJ2HqBriQSqYvgURCyfLHRse557lwXReZOAbKcWsAU5aEhG3HEDkCZmhgPEQY+tB1A7qmQQiVwZtMJOF5HsIwVN5+SsA0HTzg6r1MKCzbhFOtYcqUqajVyiiVyljSvRhBEKBQKK5457vffQsAbd+ePfKd7343aWrqxGh+AnPmzINX82EnEkilLOXLB2CaOrp7uvHC8y/KqTOmknze7fvExz/+g6GR4UOpZArlUhmMKf++8uMTVKo+GKXQTAO1agWIoXiUqQEbAW3I+BRZnkDGfIS6jxcAmKHAfRQEfuiD8xCCS7g1D5RRJO0EQh5AcAJN1yCFUDYWIhTHgVGY1AQhBK7vD95zz30/v+rqa05tbW6dW3WqmDNnNi67+FKMj4/BNEwYVgJRJDF3zkzs2LkD99//AK677hpYCROWxaDpRPEreISBwWNYMG9W5u1vefP7/vF979uSSWX3NeVy8DwfAmEcowWYlonAC1CpVP62BxjfGUznsh/ft3/30Gc+819uSSUSzY6QIIJD09UAEFLRWG3bAmUapk2fiU9+4hPwIw9tzW14x7vfCR4I9Pb0Igx8dPf0IJFMN2jYTS3NGB4axtDxETS3tyCdzYBRoCvViRnTp0FKCdcLYFsqpimdzuDUZadAYxqCMIyJmcDsGXMwe8ac2kMPP/jKPffee9dTzzz32Mjg4Mjf+rAjpQwArAWwtqmlpePCCy5atGDRouWdHa3dfQf6CqVK9djQ4ODA8ZHjR44c7u8vFPLh3/oxViqVwzpl/3zXnXc9/KGPfuyKilPj99x1xws7d2zbWC7/bS+ysbH8wfkL5t329NPP5Kb0TlleHwgAyu5Wpy9t27Hz+Q9+5IPf/V9tdk96nSIALyWTqVeack2ttm23tHd22jW3ara3twuNakPPPvX8oB/W/kNIcc+/8HwI4KnWlpbnli9fseLSyy6/5vyLzj0zdML27p4u2Xekb+9tt9324IZX1z/puM7oze/+663l0PDo7vvuu/exN1x7wy3JbBLDQ8PQDB2tLS1g8XsimbLxwrMvPfft7333m2Oj43/T1zUKowkAT8QfmDZ1upbOppOHD/ZVa26Nv/+f/uF/7p7kOlUAO/8W30OhUggB/M3fn5P1n7zh5ULlczU2g3G+n6Eb4GEIPwxAdQoZb0VdL4CZ0JFK2hg4OoDZi+Z2nXfxRWcc238Ujucjk00hYSVRq3qYPnM6BOGwEmpi39nRjtXnnIX58xaCEQ0jo8fR09vuLly8oDgxNgY/8JC0U3AcJ47r4DCoiroRQsXN1Am5MXFK+TVBGxApUu80pVQ9qVC+gigIEPjqoEbjwxIXceNKAAgaU5ZV7FE9kEXTGHjIY3mz2hLVm2nGqMrSFPUtraxDq2MZdIz0l/VoqPrONm53ZT23F3GTTOoTfPX1yIkIII0xSC5BNQamUURh1ABYSS5ULi9TFDZKKSRX8T6UUkRBAC2RQiqVhqYrnx9lGrK5DFzXRcRl6+IFS5Yd6z+GJx55Uvb29JBpM2dCCAHOVfavphEQncQZxYhdPQp4ky8UYJom8uN5lColbN60ReXJUYnAj2AaFhIpC6Ojo9CoDk1jYJTBNC2EEYeuGeCcwzQtaJqSrHMeQgoBU9ORSGdRqVTguA6EFNCYDgLAMEwwqiHwXBiWAY97KBXzSKcz9uw5M+addsbypXNnz1vW2ztlDhFyTmdPVy/TTO2nP7mdHTl8WD/9jBWYPnWKJCLir6x9mVyeeR09/5xzNcM0Ms1tLdi9cw+OHDmC9vYm2EkTPT3tIExDc64VQ4PHwXQTU6ZNw+IlyzB/wULU3BoMZqCzqweLTzkFXAqkLBs0phYyTQc5KdCQAMhlM//tD3wRDz+IIo5zrlQXBBRUV+HtKstSYmxiAqahg0Ni/br1WLLoFBzq68Pw8Aha29owbepUlMsFLFm4cJlGtB3pbDJDGZtZrVaOtDa38DDyUSjmYRgmHL86UKoW+izDnLZz1y6MToyh7Zxz/mo0Q0DgugE0RpBIWieFbQGFUgGe47Zms82Le3q7t42OjoJXfQgiFWyOqqzocrEC3dBVXA2X0OMBQBhEMAwdmsUUxRwSEeHwfR9H+g9DMxjKpSJWn7v6+s//l6983nWCU6qVMq6/4jpkm3O48nWXI/JDdX+o3waEWt4EQahgSzaDYRjlBx54+P7A8/MpO4lquRIVikWuGkADY2PjyGazGJsYR1/fIZxxxkpEkaI1gwDHh45DowzJRApRFOLY8SFkMjkkEmoLyaMITZkc3MBBKplW2dh+oJQVvh8D7ADKBbg8sQHwfK9BgtUNveHhJ5qC/RCq7h/NzU0olYqwLBPtHa04eOAgOJetN998y61XXXnlskcfeRJ3/+mP5O3veCeGzOPo6GrH6StWoFqtqm0yJTB0ta2YGC/i6JEBVMsVkrCS/InH/vi7/ft2PdqUa4aAAon5QXgiL1wI2EkLURjBd10ARNGKhYDre8q+IZRElDAGPc5eDhyvjiVAHQrEBUcQKglsGHu5Aa4k6ZLCMCyAGHAjX8GxoJQrmqapLXNMZhdRhEQygT27dz73Xz7z2d986pMf+/Ipy5frTGNo7+rAnXf9EYlUAje88S2AVAfOC88/H/v274EXOACaIQXDww8+hsoFVaxceQZMw0C5VsP7br31nD17dr/nB9/7/hdzLU1OFKnXTFlQJBgzYGsJhNHfPr6wUiyNEkK+OHB8cMdXvvSVz03tnTK3/jnH8QEiQDUGXbcghQJruX4RHR3tkJBoyTYjCjlaW1vBIwWGk5IjYSdUzJymoVKtYNkpy9Da0qxo/3HUHQHgBTzueSQ4Bywr2ZD6G7qOMAwR8qi4cf3G57/9ne/e/cIrzz9ZmigU/h4OPoWJiZFYhvrc39uhLFSQjjXxBz76oX/6P/ZY9u7Z99LCJYs+8G/f+s4/rFx+1pUt7elWSpXM+vixoSO3fem2Pz70yEO/Gxo+fuB/u0SxVhUARuOPv3mNT0xEUNLWV3t7pySigCe7e7vkyNhIaXDg2L/bbLU2t1W//pWvPZGwM5dcesXlU3/8k58fr7m1I+esXuUWisVo2syZtfxYYduH3v+Be4ZGBnb/n77ejhztj/Bfwakma7L+r2x4JRSIhlFFZVXocA11j73gAowyZLNZMEpAmGxQT5PpFHggOgv5YtdEYRy1qoODBw/h5aMvYur0GZg9dw6m9HQhlUxAcoL71zwAz3Pwtre9HdlsDtmmJO574AFnaGjID+PDkh/4MA0TQuhwfQ9BGEBjGkzThh964JHK1SSUKPIblFxWN3UILuMoDxUfxMBAoZo0StTvVfCZGBMfw7nqh5f6cUwI3pAz05Nkm/WtaqOhrUOiYtpdnfxaFzWTBpWPxjlkAlzyhnxZxrB6te08QbRTECwaf231QvBIxA19HI8kVNq3jLcrUsp4E0+haSbCOD9UCuXBdV0XhmGiXFYbJKYxEEj4oYfVq1ctnz1zzoKnnnoKgoFMlIpYYNuqqaXKgygBFUcUB1eT+DFDSgR+gOamJgyHw/BcLxoeGdqhaRoMTUehUoubcCAIAmTSWRiGrqStVAOjErrG4n0hhZGwwaMINb8SS9FTMEwTwcQ4bD2JTDqnuhgKlAol+J4LQoBKrWzNmT13yQ03vumSKy+/dHVTU3Z2wKNeIYi9efOG2ob1r8qO9q5EW1cHfW3jevHmN90ISST6jxwlGgW7+JJLMHfebKQzGQweH0ZhooRatYpFpyyAbSUwNHgcA0eOo62rHT09vVh1xko0NbWguS2nmjbDQkd3ZxwpgThG6qQUZ8kaWncRE495/PpHXEAKtX2sD00IVx5L1fwwSAHYSQXPUVJOiny+iIGBIXR1t6GlpQ3z58zHz39xO44PHwcEAzU0XHvtdWAEYei4+Xyx7EREMBlw88De/RgYHEQqnYKQgG0bKFeKztq169ZfeflVF0zpno6ElUBTJqdyr5migEsAhs5iGe6JxpwAGBsdQ6lU5slk6tRDB/rvSKdSwjQNVJ0aCCg0EAS+D8KAwHdhmjrCSCAIIpiWDV3TwQgFZQS+76ucUYMh8EJ0dXWhe0o32GLtdTff9J7PvfLymlNGxodxzjmrkE6msG/PLuSaMmjJNte9VbHvVr0ePFKhCYwBzzzz3EP79u1/wjQ0UEIRhlFVCDEYcdFWLVdRLJVAKIVtmZg1fSayMTFeSLWt7mrvgJASnEtUKhUkkslpNddBMqV86iASVbcGXdMwMjKKbC6HplwTBo4dgabr0JkOolPI+F5gmhY8t4aIi7jpU3FDYRQpaTdhsAwLgEBLSwsMw8Dh/iOwTBO5TBau42HOwrlXf/ozn7h+fGICv/ndb+RVV15Glp12Cu66927s39+Hf/3GV5HM2KhVa8ikMgj8AGNjE2CUoaW1GedfcB5+//s/rPnZ7T/+U1NTE6JI2QgoJSoCyjTguDUQqcBxnudDShXXIIXa3EKo7GHO1T2JUQbBZRzNFOcYx2RuIonyKcfTQEYZGNMU2ItSBTSrKXm0FW9RJThkxGFaKYRRoGT9QYhUOgnbNhG4Sbzy8st/fs8tN527bu36K8rlEq645mpcc831KJVLGJ8YQ1d7F6o1B9lMGmeuPBMPPvgQHn34q/jq17+Ky6+8DGteeQld3V2YNmUKKk4FlVqNfej9H3nHU48+9cqhwwcfbGpqRjKZQBiECIIAnuPG2dX/Z+xQUkoXwB/mL1hw8Ne//d0H5syYc1VbW1MmYZuo1GpAJEERqgxJXUMioWwmDBqE5MpnDQpCqbKb1N/TGkVCt3Ha8uWIOEcQ8bjZVT9PIsFhGMrWoDgPDJ7nwHVdNDe3YN++/Yd/dvsvHnzx5Rf+smvnzo2e5zqTx63/nLV7x65XCSWb5s9btOwDH/ynS6f2TFs4np84/MMf/vCJLVtee01K6f/f/hwcOzbgAPj/6xoWEDLb1LLV86Jf3vKe92UO7N+zbnR4ZO/PfvzToebOptLA4SMcAG54w+snL67Jmqy/acMrJcIoQCQVjEYCSj4sBMxUAlyoiBgzYSH0QugsBj5B+eymTumZIYMo6QUepk2fgaZsG2rZMjzfAaMSuXQGGlN+seODgxgeHsH+/XvQNa0bXtSG7Vt2HaqWan4yYSHiDvwwUmCmKAIjGihl8EMfduwfNA1LAWDCQDWRQiISERDFTaRUTSGNSapSijieBI1MUc4FhKxDWNBodBHHBaGRKUbiQ1oMf6I0zvBUOZNcqEl/3ddax+jXjbyEEAgeA67ilg4kDoKOZb51eTKAWDItG55B9eu6f5c3IlUirmTcTFPZoIRItQmK14dqUq+aLt8PkM5kYRimkgybGjLZNHTNhBd4GBkewbLFS89JJhOZeYvm4u3vehuhYArmwYXyYYE0YlbU80X/Kky9rbUVYRiio7UdpmaO9B/u32MnEiCEIJ3OoLenB3t27UBTUxNACHzPRyqTjv23BrgEHM9FJp2D51QAojaYnKttT8WpgOlKXhoKAR764GFkt3Z0Lbzp5ptXnX32Wadu27J1zjvf8bZ5mWxT+8aNm1CsVOXm7Vu4TnUhIpGcMXsOuts7cc111+O617+BmoaFRNLE1s1b8eLzL2HO9Klozibx2uatePa5F+E7ITItaZyTOwflagXNrU0447TTcOppy5GIEfj/7iE0HgmQk4Ty9KShSf06pESpA0isFiCQsc9HyZg1XdHBeSig6wwH+o+gs60D6ZSFUqkKwjQsW7oYjCr41CNPPA47kQlnTrFL6XSycvTY4PgvfvTzvVwGWwYHj21nOj3Sd6h/fHx0qAIQnsu0oFoqQ9MZkokkCmEJTzz+xMsf/McPfay3t9PQdV3FrhAGUr+mAZiGDtAYDtYgUBJEEce61zYYK04/87y77rx7FhfigK4ZSCcZglBllVLKQHV17QohEEkOwzZUXrLngkiKmuOAEtVMMZ3BMCwU80WMDI/P/fo3vnFTV0fPqU889AQCHmLV2atQKZXw6po16OrtxuuufB0YU7nYCogEVKsVMJ0haSXw5JPPrPvSF2/7ajKVKOoag4TAyPBQYdOmTfuXLV16iuu4mDZtGsbGx5FKZsGIjsHB4+jo7mxETKSSqUaj35TL4OorrzjlpRdfyLmOX9RNDRAUvh8gk0oroFqtBo/56OrqRqlcQhhEIIxAAI2mA4Q2uAUaUyobLjh0XcVxmYYJEIlSqQwCglQiCUgFyWrpbl74j//43pvSqXTzho3P4z233ETOPfdiJBIM733Pe7B7314lBw65grkBGJsYg8Z0NDW3oFAoIvA98eqGtY9wEfSFoQ1AeXZBCNKpNPzQRxRGgFDwGiVtpDH0J0QYBtB1HYQwAKHitQiuQH7xPZmcJH/hIoIQccQZUePBMAhgGHpMy1dZ676r5OS6YSCKZc+WZUE4AoEXgGoMnueCSEDXTZT90tFvfutbP/jYRz85v729e8bWTVsxc9o0FIaLuPvue/CZT38KjDCEQsBkahDpuh5sy8SypUvAGMW+A/uRTKaRshIYL0xg1pzpHV/96r+8781vffOaMOLjUcQBSRCFHKlECl7ggFrG/9Ef5Hv37HlV07SNpyxdftYbrrv+bbe+/9Zrm3LZNiGU+ieSAgISyWQKUgoVmUfUJlYI9V6hLP7Zp1JgVFpDDF1jUmVI89h7TVRgNxzHQcQFMukUNKYH23ds3HjffX959NVX1z1+4MCB3aXiuD95zPrPX1LIAMBr8QcA4Kab3jH5xPx36tChQ8GsWXMG7r7vzl88/NCDnpS8OPmsTNZk/R00vBQETKPgQh22LdNG6CsgB+KtpG0lEPlcQYY0As9z1UTXcbB61TkrE3bC2rdrH1acvgrz5s3GvHmz1fTbcwCmmie/4iKTy+Kt73gnZs9diGw2gS2bt1QefvihjYyxkFKGZDKBSqWCaq0CSqgKE2cMoVAQKiIYJKGNXDgSQ5oAKIR/LOdV21J1shJSEZjr3wulamspI3VIpzGMCvVsTkkaXx+gKiqljqASdW1yLBuWvBHRI2O9Xr1JhVTSRBWeLhoyS8oUQCqSSiZdjzMiVH1NIYSK/JAntsT1LbAkqhGqN8kEJN5mKdqkGgAAjBAFxQGgmQZovJ2zTBPZpgxGRkcxpWeqkq+l06nzzjt/9eG+Pvzg374v3nDjtTSfr2LVqrOwaNECcCnVVjpupk8i6zdk26BApVBBc0szHn3s0W0bX9t42LRsFAslmKaO4eNDaG5pByBRq9UUdZvSeHNvolKrIplKQzMYNM0GjwlfpXIJPApgJCzYCTs1d+6cWVOmTV88b868Ja2tLUtOO33FqXPnzOuaOqUT2XQSrutjYGC73LZjk1x15rl04dzF2u7dO5Cwkzh78WpcecWVkEIiOSeBF599CTuHh6BbDKefsRxOrYajR4cwtWc6vvLF89DS0gJqMFjpJJoyGWj/zQEgHvvEr0k9hw5xI0TjV4/+V3+uvsWXQg0UKCOIZIRyqYyEnQQjGjSdwQ8DODUX6WwahFIUS2UQESGVNOG5PhhjyKYUKGdwaAylUhmcY/fLL73yQjE/uocAlZrjDI0MDe+p1MrHIi7k9BkzUKtWkUgmYNtJRD6HrusQkiPkHF3dXdi/Z//Wl1585cANb75+UWdXizr01oc5cdPLIeK0CDVUqv/79tY2NGUzeN3rrj5t/bpXrvjt739zINfUBsEj1d0LpmLGohAi3g4mNQbP99WGM4ig2xqkkEik05AQ0HQNvuuj5DrNV7zuyrcfOnDwnN3bd+Hjn/oouJTIpVvQ2dqB3uk9MHRTNbsxGVOLG9RisYIpU7oxOHj86Mc+9tGvH+o7sO+ss86CW3Og6wYq1TLGxyeO2rYFrV3J6ylhYIzAcR04joemXDMSKRux5qIh3QSAc849Z8m0qVOm7t69t5jJZFUkTwwSIozA910EYQAr0YPmXAu4iFCpVFBzHUACtUq5QbZVdyQKSoGkaSMSIWRMe6ZEXVWmlWjkHQ4OHsXcZfMvve66a8/+3vd/gFfXv4Y7//R7bNu8A/niKGbNmIXlS5c1HquhGahUXXi+j1kzenDwYD/K+SKeff75Z31fPHvq0tPl3oN7kW3KoFoqQ0oBN3BRKdeQTKUQhB48T11/BAQ8VHAxBc6TkIigLHhqSMY0DRQMURTG5Ow4zzgellBCYweKaiLDkIP7PighCEMJQlR+L2MMdtJCzXGQL+ZBoMjdtm2jWqvA9TykUykIpLF+42vPv7j2xbtfd8VVH+vMdeiGpaO9swlvuPZ6bH5tM6ZOn4KOjk5ISFz+uitx1sqV8OL3xeJFi5BrbkLNrUEnGlpaWsGFxNXXX3XJ6vNXv+WFZ5/7YS7brHLqBUcgQggQcD/4P/7DPIqiEMCLuabmVwaHB//c3NJ01erVq1fPmDlzwZzZszMn7kFKoSGEgFtzYRkWNF0D52q4Wh+21nOwS1X18zidTEJjgB8F4ILDkDbfsn3n8J7dOw9Jju133nHPC4f6DrzQ339wYvJoNVn/X61yuSgB+ACGJ5+NyZqsv6OGFyAQde1lI75IqAk9kWCUoZQvQlAJ07ZgmBYkCFzPh23bXacvP+3MMAhx2WWXIdekfqYGgYd8Pg+DGUgldRwfGsSRw8fw5JPP4NTTTsXy0yYgZYCDBw/uq7nVLUzTlFyXMli2jYRN4TqO8gl5jiK5hj4IYSARbcCcgAiEUBia3jiYE0riibWMPbkqP1NICR4pYBDBCWRyY9NbpxzXN8GIMT1102W9YaXqcw2YVHyoVod/9TVPeG8BSYmKjDipQ+SRgIz/vIB6nuuZs3UJtBLE1vN3hcrfjZthjSqwSiQi6ExXcm2i8olpvEXhgiOKOCzLhlOroSoqsCwboQiRTCRQLBUwPDSCOXNnzZ09Y9bidC6Dy696HXG8CAuXLkBXZweEhIqHklTlFTKmpNaN70/J210vaDTCDz700KtCylpTczMKxTwYYSiXy9BMJVfUdQMWY3B9F6ZpwbQs1DwHqXQavuehWCghCFzops5yTU29CxbMnztv/pwVZ5+1etXZq89etG3rtq5ZM2ZZre1tKFcqqFVLGDwuoWmaHDg6QAxLIz29PeTo0X6ctepM9PZ0QNN1eL6P5559BocOHkY+n4fjOSgWizj/4gtw9rnnYWpPDyABzdD+u28UBXKTCiylzoQQiD3jYPH2LyZ41ze58bNSl8JHodqancgY5pBQGXiVWhmmaakhiWDYd3A/ho8P47TTTodlWuBcoqu7GzU3iJswB8NjHPv37h3es3vvjr17965Z/9q6NQcOHNgahcF4FIakqalFOk4FQRCCMg0jw0PIZtOoVMrQCYMbuRAaBaMafN+HrumoOd7xPfv3rAewiEsJISLVhJETNgc/DFEoFNHV3qqo6HFRwjBt6gx4fo1ccP6Fb7333vse9XznUDqVQblWhkENUDAQyaAzBoDCqdYQRiqnNZXNghDApkkwqkPTNNTcKlzPbXrTW9/6gVUrz7rltfXr2n3Xx4zp02HaNkqlMlqaO8FDE4RRBcliBCx+7l0/wJQp3XjumRcPf+d73/6XQnHi8flz52F8bALJZAKWYQKSID+ePwoAYRiCc64yW30HxwYH0NbSraBL8VVPIFXuKiEIA4Fyudrd1t6+yDjYt920DIAQeK6LqqwgkUiguakVjuvArdUQMA2WbUBKxFAfgoioJlDTDYQI4PsekokUpJBwai6SiQRYHOlDGUUU+UgkksgX8iCaNut9t956g6nb9Lnnn8ZlF12Jnbv24bXNG9Da1I49/iFMmzEdXqgI0rl0Dlu3bsJTTzyNT332U2hqyuHAnr37v/Xtf/uR6zpbbdNAIpEAESeAdjxSJHDDMBQojjEwojy4QnCQiDbsG4pKymLAHhRXIKbX17Nrtfg+wqMohvBRteHWdaXW4XUlDIVG9XgbHMF3BTRqxGoWiYiHKJUDWJYFz/NQc9wYZqX7zz334l8uu/Tyi3s7u04jlODFl1/G9W94A7Zun8CRY8eRbWrGxNgoenp6sXXbdvzsJz/Cl/7lS1i46BR0tXfiwL6D0ImGTFMKpWIV2VxK++a3vvlPl15y8a7iRP655uYWWFQlGwR+oIYSfydVLOQ54mzCGdNn9jY3NZ96+RVXrL78istXJBLJOT1d3e2d3e0GYwx68kQySZ0C78eZwqZpwvM8DA+PorerB1EkQTVZuOOOuzbededda5tyTf3VijP4wgvP7S2XCwPvfe/NkyeqyZqsyZqsyfr7bHh1XY+bTYKIhxAyQiKVgOd68FwPmWQSmq0jkhw9vd0YHhqD6/lwXQc9XV1zdY3O4WGAObNnYGJiDC1tzShOFLBx40acvfpsUMZgGCZ279yHUrmEXCYHU2eIIoF9+/evGzhytD+dTaNQLMUgIh1gqulU3iAdCdtAEAWI/ACEx3vPGGojpYSM/a6UkthPKGN7qTpM8ViCx2I5nxRCSftiCbRG1cGTR1H89QBN0+NMwXrLEq8zmepF1YFVjyXSil9A69m5jMV5vVzRi2l9R1uXSPMGjbkuE+VCycUIFPlZQlGdJZEN0jKXvOHpJZQqcmokEPAQtm3HMm71V0VhpHy6RMK2rcZGxPU95HJZREEESYFZ82Yva+tsay2Vy7jhxjeRcqmIcqmCpqYmJWdnKiqFshPbGKX6lvA8D5AExUIJuaY0JKQ8cGj/q5RpkASqkQoCMIOBEvV4LcsEEVDbLUKQn8jD9Wqolkqws9nU3AXzlk7vnXr6slOWnXHmqpVzDIP2uLWgkxkmO7D/gBCCyyjyZeB6ZOb06QiDAJs2bgYEIS2tzejp7cHVV1+DsdFhPPTQo1iwdAEGBgewa/duuNUqujo7sezUpTj3vHPR3NTcAAadWFejQZEl9c296mPBYoMuIRRgElSqPyuk2qrXQWf1QUipUkKxVETKsqGbCvDEbBuCk5OkgQQRB3jAMTo6gtGRMZkwUzh48CA5/fRTEXoeJkbHnXXr1h549LEn+2bOmDlOdVbYvn1nvlIuH+vr27/z2MCxfYQQjwIwkhbS6TSSdlLWHEdlbBo6ytUqmptbUalWYNtJUF0DYxSe66KltRW2aSKMIlhJCxs2bXiuUKq8uSmbThBCG37y+pgjYZrwLQvVWhXJRFqRsgH0TO1COpvBhvXrkc1mTvv4pz/1ge9+9/v/HAnhJpNJQACe64IZKqpIBiGIkDBNG4TSOKPWheAcpqkj4gS1aiX15re87dZVZ6x87xMPP9Ld1tKG7//gO2hta8FEoYie7k5EkKC6UjHU35sgBDwSsC0Do2Oj41/88pe+8srLL/529qxZsqu7C0NDQ8hPTMAwNKSzGezfv79v4OgAcs3N8L0A2aY00qkE9u7vA5lvoL29FZrP4sclsHv3bqTSacyeNRtdnZ2GzvRzTNt4iIDUCIBkKgXDMFCr1tDV3QVSAsqlEtyag2IhgmUn0NbWjrGxMZiGDSEjBKGPIAhAiZIN8yiAqTMkEjY8xwMhgG5pYITBq7koFvKJCy666F1vfeObzjjc348bbngjbrj2Rvzp7jsxb+kC9HZMwczpUxFxwPMDuEGIpAhwuG8fsjkbpdIENGYHv/vTn+8az4881tnWLqpVD7quoebV1D1TY2BMB2MUo2NjMAwdCSsB3/OhGRokRHyv0RtvIMaYGhpGEQTn6r1P1O+VUsZQNg4QAkZYwxsdhKGi9BMGSjVoRtwYeyEgCALOYdsGeJwokE6nUSgVEEYROjo7USzmUXNraGppwYGDBzb+8Ac/uMu/5ea5CxYsSBcKVTzx6JO46JKL8MLLz4NBorW1A9VyBStWrMQLi1/Cs889hxnT5kASHQIE1WoZQAcIFARqxamnzfvVr3//6X+49dajlWLpoGGaICBIJ1PwXO/v8gf84f6+YwCOabrx6F133dVcKBTbZ8+cPf89t9587tw5885qaW9ry7ak0HfwsG9bqSiTTPDdO3d7VCNBKtPkrlu/bmJo5PgQI+T4nt17RzLZzOj2LdsPHD7UdziSgZw8Qk3WZE3WZE3Wf5INr4rsMeI4GBAFIWJEU15TEGSbsvC9AMPHRlAql2AlTHgBMGfe3NmJdKp50SmLkUwk0SLaEUUciXQG55x/Hgyq4djRAYAAy1csx3vYzbjqmqshI4mBIwO1p595ek17W3uNEgKRVNAlx3FO5NvEvCjJJXTKEHABAgldMwGhDkpSCgjBlc9WUEDyGOREQRhpyJvr1lopY04KV7+oN8Ei9hcCde+SrK/xGgRlSUScTRv/RygPm8QJ4JSUBETEHZSsE6RjSXOcA9oQB8eN44lWoi53jeXLLM77FUpGKmKiax1YRUFUTipRmylFNxbgkYqUklI2ZMM84so36SgYTaVYQei7WLh46ektLa147vnnIAEkTBtHDx1FZ3sHUpkkKNEb8s0G16v+fAi1tc6kMrDtBLbt3L7t2LHjuw3TQLlQBEBg2SZ4qDY7OmNgYBjLj8HzfISBTzPZdMv06fMWnnXW2StXnXX2+T09U1bOnDa1ee/+3TBMA45Tk9NmzIJGDIAJOnXqFDBCUa1UUCpMgFCCZCqJuQvmw9Q1PPP00zg+MIDjQ8fR1NKEpqZmtLa3Y9VZq9Gcbfpv/LdCiPg1lMqzCBnL+uoLPQLC6v9Hyfxk7GUWjW08QcTVIdxxauo9YCURBiEs04ZpJmEnLEQRx8RYHrquIZFOIz+aR61axcR4HprGMHR8tLz/4P4hQzcnDh3sK+7csbM0nh87unPHro179u7ZPjY6OmAapispEPhqyGLbNqZM6UGxVEY6mYIQQLFcRHNTM8qVMizTgm5YYNTD+OgYODiacjkU8nlAEjQ1tSIKI4RUQ75YRDKZxvq16597/tlnXrz++uuukJLGkVgnrk9CCJqbcgiDEHXZPRcSFEAmm0RzSzOGR4e1s89ZdeMvf/HzlwePHb2/tb0DEY/gRz5IpAZI6WwGka+iiITkUHw4is7uTpSrFRQnRpKvu+rqG89YsfKtr23Y1HPTe2/GFZdehlQmCT8M0NyUVQMgoQYMnus04Ds8kmAaRc2p4ku33fbnwWMDf5zSO1WOjIyhUCghYdnQDR1tbR1wvQhHjhw5Nj6eH4dkrdmmdOMeNG3GFPhRGfnCEFw/g56eHjDC0NrWDsuyAAC9U3rx3e9/9w0f/+jHtj7+xOM/b25ug52wEQQhJAjGRoYRxsM7K2PDDzyQGDQHETu9KUUUhjBNE4auoogkJZg6fTpkEMFzJ2CaBiIuFLiMarjqqquv+/znP3/T2Ni49utf/wbvePc7cXxkCJdddDGSuQzueeABvGf6uwAAaTuBXDqNv9z/IPbtPYxPfOpjePrRp/Haxs27tmze9JTBtCiSHIZpIPB8gACapiESAqZlgRICXdNBBODUHHDJkbASCIRUw5v41mCa1knEX1nXC4GQ+jSJgHNlE6FMi4GBXEH3KYVGNUCof+cHSjli6FZM7Vb3OUoIoijE2NgYLMuGpmkoFUswDAPVWhW6zgCAb9y86aE33vjGS19bv/His1etwPr16/Ch938Q8+bPw7krV6O1qx27du7Alq3bcPN7bsEPv/M9fPdb38FV11+H9q4O5NIZuI6LWs2FJQWkBlx79VWX/GnV2Tff/8B9/5JIJGte4DWGon/PFYWBADAef+wmhPwlkUrnurs6c8zS6OCxQd+AEZmGJitVJ9B0nXMRhTyK/JiWO1mTNVmTNVmT9Z+34SWMgFGCKAqgMR22lYDvBTAsE0xT/tJaVU37DdOAZScQxETl008/fa5l2Xj6yaewbMkSNLe3wEwk4dVcZNNZUFCM5ceRSWfQf/QgqtUiojCA53jYf3B/vlSs9Huug0q1AiMGZek6A6EEYcQhhZJWuzUXhqk1tpxCRIiiGBgVb0HJSdm0JG5UQGSDdIuYLI2GnFltY7kQqvmFhMEYuBSqeebKY0YYAyRXkA9Klbc29upGMmrk+Io6mAVqa1yXf9YPeScOfKrBVTLmvyY6N5pgEpNDZNxkCgFxUqNNZHz4JBShCAEJMENTj5OrKAqNKT9gwkzEHlwFQDJNA+VSBQRAJtfctHzpKQtdP8REoQjX8zFrxky0trYgjCIEUQiNaRCRUGGmUvlV60AgNSShKBUq2LN3D77z7e+uLRXLw7PmzsTE6AQo1RBGHsIggO95qFTKEEKirbNr2nvfduO5Ten0qlkzZy+ZOrVnaq4p17Rv76GU79YIJQwtLW0ykUyS9rYO4no+2tuaoWkaHNeDnjDQ2tmKUqEAjSmP5+4du9DZ3QnP99DS3o5ps+dg2pReBQ4DGl7aur+TxNFVUgBUo+o1qfe4J71BSGO/LxufUcMNicD3MTQ0DEZ1WJaFjo42JT3VdeV9N2zohoEwDFEYzaNQLKKrpwuSSBw+2I/D/UfgONWa7wfHS4X8+vvuv/+5waFj2zzPHXUdz/MD36861SoBlVEUoaW5WckMAw+GocMyEwgjH47nQdd1lKsVmLqFTDKD0dFxRCFHlVcR8CCGT0k0NWXBwwi6riGKJPzAQxSEEJGKB5JCYKKQH/r5z3521zmrzz63rb09CQBR7Nul5MSzwxiDjBt/2rBEEMyePROvvPKSWHLqku4//ul3n3jzDW8aGBkdeS2dycE2LRBCwCWH77jQmYFkJgEecUQ8RCKZxLFjx2DopP3Gt7zp7dOnz7ph/4H9c8895xxyyUUXI5VJKogZMxrudkbVe8d1fBimAdMCmKYe5+7du9c/+fhTv3ZcNzRNA7quwbItSEnQ2tIOL/BQrVUgRDRw7NjA/pbW1lYIoFwqo6W5Gfv37sZf7rsf3/j6v6CrqxeCC0gQ9Pb0YHR0HMViEblcDrl0tv0TH/v4J049dfnwn++88yHDMFEtVyFFhCACMpkMak5N3XQ1A0HgY2J8AprGEEYBAs8HZbGqxDAhEcIwDYxP5IFIQNMZmKYhcH10drXhcF9fy8WXXPaGM85Y0fsv//JllIslNDflQJmCc0URx2UXXwLP86HrGo4eOYbWtha0d7QjX8jjycefRO+Unmj48ZG1ZkLfl85mEPihoifXh4hSIJXMwKnVEPEAjJ4UCweJ0A8b74ooiuJ7s4jBRzEgi6uhpEoCiAeKUV3dIhskfCEBwSNolKrhnqjDBzVEoYpc1HQNQig/OKO6ikJy3ThCRweXFFYiAUggm84gnx/b9/jDjz9y7bVXn/qeW97XMnfeXMyZOxu7dm3HW97yVixasgSf/9IXMNf1wP0Avb1T8etf/RrMNHHxJZdiWBuCZduYP38OHMcFBUEYCvKhD3/ozYcOHXp51949jycTNgI/gK5r/6l+8Es1jSjEH5M1WZM1WZM1Wf93N7wiUvJdSqn6J6HKp0jU9ioIfZSGKzBNQ8XrUKZkgxGali0+ZQGlFBWnIr3AJ4MDx9HW2QERSpCUhGFrqJRriDyBzRs345xzVqEl2wTHCjFv/vxKR0db+cCBg0il0uBhiCBUm4XAU5mMEoCuaZBUHbR1nUCGAUIexXRkBaA6KTdIgTYYVfJfLk5Ih4G4MeUnfLlCQhIBQpScMhJR7ANGQwpN6lFAiKWuRH09RmhD8kcZU1nBUsaNbZ08KkHqYKsY7nOys1NI2YBTSUJO7HqlPGnjKyEIYvmf8hiLON6IQVGlmaYDsceU0Dj7UnBoRANA1UHSMEApRcLWwEUFVDJkmrPtS5YunGKbOpafuhxbNm2GqWuYM3sOwogjDEMYmo4IEiLiKoIijiHSDR1MU1RvK5lEJptDOpUe6Gxtkb7jARQYGR5GxH0k0gnr9OWnzZ4xbeYSXaMLZs2ZfeppK1cua2puao/CQDd1ne7cuRvz5i1ET3cvPNfFnDlzCQhgmRZAANMyoMVb6+HjxxFGantarZSRzmSwcMpUZJuyWLpk8UmnOoBLofzZlEKK+gCExA2bBhFv8imJZcZU0YOlkHB9D5TG+ZKEoFKuolQqKCKpZiKRsFHOF5FraoZpGqg5NURhCMM04TouSsUSUukUTNPA8aFBzJg1E6VS1d+xc9fRta+s7eMQB/bs2bV9957dm472H9llWoavBghl2LYNy7bQkexCyEOEfoBsNgNCKDRDRz6fRzKZgFMTyJeKmNo7DROFcSRTNnRNgzNeg51IxG18A7uGUqmE0A/AKEPCTqNSqYBSlaXqOB50nYFSYO2r6x7bvmP7M8uXrXh9JCJkm9MIwhCarsNxHCTsJAxdbxDFSXz9SgAhFzj99BU08iOcf+75q+65/97vX/f66z46MTGxvinTgs7ebniui3KpDAgO3/cQeBHK1QIAkJmz5p1/5sqz3rloyaKLqUk7rrj8Cn3lacsBwRThO5EApAJmCSnBoN6L6UwWmkFRLdfAKcerG9bt+/D7P/r1fD6/rb2zQ71HrDBuloBkMoGBgXFIEaFUzOdffWXt1pmzZp5lGyZMWykBqhUHzz33Al5esxannnI6pCTgMgJjKme0Ui4hl8thzcuvRlWv2jl3wcKLKSWPgkguhUAiYaPmuIgEBwjghz6EVJFhnuupQaJhQdN1cM7BiAbf88FFBI0AjCoFQTaZUbR2SIRBiO7uqRdectHF5z107yPgIRdf+NxnKZMEE4UCHl/zOLq6OnHeBeeDBxxUEpg6w8DRI3jq6eeQTWex9pVXvQsvvWjdls2b7t61Z+dYc2tr/P4QMAwNJH6OLMsC5xHCqg8wiXRWbT3DMITrOtA0HaZtKhI+R9woy4acpnFdCAlJSXw9ChBJ1esRqyTqg8qIc2i6Bg0aokhZbUic/RqGoYJeSQlKJZiuQ0QRwFS8WuQJtLQ2w9A0MJ0ilcjgmWcef/SKKy699Kprrrl8/eb19MWXnsfo8RG4VQ8H9x/G3Hnz8aa3vBGFkQraO6dg1vzZuPe+e7F46SI05XI4ePAAkraJKdOm4MCBfrS3t2LB/EUzujp6X7dtx7aXiLRq6h6sTZ4mJmuyJmuyJmuy/k6LSSFjIqkGLjhq1Vp8gBGoVmrIZnNIZ9KwTBNMowjDEEQChmYuuubq625JZxJtHCH6+48R26BwqzXMnD23sUnUdQ2apePpZ57GfXc/gFPPOAWz5szA3XffveXPf/zz71LptGtZJkqVKlpaWlTjGXtnwzBQfSk4opCjzgWq+yjrfWv9UIUYWoWYmktQ92HWF60xeIrUNwz1HSuNf4844cOMaceMaY1tA6EnAaxkfWOomiNCAEo1BXgitLElrB/Y1EY59hjHER1//c+TV8Lx4zopWokSAsYYLMsGY0yBiDQKy7YVzCqMGptnwUXDpywIYJkJ8ChCoViAaRkIwwBO1cHMWdNXfuhDH7z1T7//A+3u6iIzZkwHJEc226Ro0roeb7BJg/Rcl4vXBxKCR6hWK+hoa8PTTz3z6jNPPfFyoVgQZsqefuaZZ5x91TXXXnfGihU3v/eWWz505ZWvu6mnp/fCpcuWzSuWK9nZs2drU3unkWNHBpFKZzFtxgy0NDUjl8vBTJpI2DZMQwczGPqP9mN4ZATj4xOqORAcHV2d6O7qRldXJxJJW10rsbxdijh39SR5spQSVKPxawJwHsWxTgQT+Qkk7URj6y5BMDE+ETd3ytOeL+Th+x6qVQfJdAqmZcKybNRqLkZGj6NWqyGVyoJKAqfmQTKJgwf3y9179pcefvDRvgOHDjz6mU996hvf/e53vjVRmPjlmjVrHt648dXNiURyyLQsTggD09XhXzdNCCFgGSZKxZJ6b9YcDI+MoFatQQIoF4vwgwCmacL3AgjO4bouCqWiihkhQBSFcFwftmXBskylFBCKVi648mFnshm4rgtKVYyUgAAlcF59dV1lydIl50+fPj1NibI+RAFHza3BthMNOwBi/zJI7GOXElEUYmK8KJ0wIKefeuqUK6+88py9e/aGe/bt7g/8wHUqNQSBjyDwUa6U4Qde4qyVq887+7xzP/mmt779o60tXeff8Kbrs1dcfgmbOW0afC+E7/uwknZMxo59+/FrBRDlsSZAEHHcffd9u7/+tW98cf+e/ffnMmkUS3kUC1XYlo3mliYYpoGx8TG4ngPLspHPF3Dq6ad1ve3t77hm+7atqLkqP7qjvQugBFu3bodpmFiydDEIA1w3QEtzE1zXgRDA8tNPobt37qHPPvv0yOjI2FP58QlXSMCybUAAtmXB8z2kkknomoZyQWX9Eqoo+bphgIeBGsxwgeaWZliGysKmjMA0TEghVYQQD5f97re/+4rw+dx77rkb2XSWLFu2CKVSCfv378Om1zZh9tw56J3aDUhA1zVkshkcPtyHhx9+BI898thowrBffOLRJ360Y8+Op9s6O9CYsxECO2kilUqCRxyVcgUa1aAbBoIghBAcnu/A0HVoTEXxCCEASuLtrqLNE0pAhLq3UUqVJLmeVUuootzX35P1KDgpGoMoQmLps1QAvrqigBKq8sXrFGGqVAk8DGPVC0OlrBRDVKNwPC9/6GAf+8q/fPnM9a+uTfcf7IdhmGhua0FXbxv+cu8DOHjwIPL5Iq694WoUCmN4+sknsWHNOsyeNRfnX3gB8sUCxscn0DN1Kqo1F80tLUjYJnn5pTXPFkvlCUA1vJ/5zKcnTxSTNVmTNVmTNVl/jxteAnU4lRLQdR2WaalNjsaQTiYRhCHSto2EbaJYKkASwPc9nHba6fM6OzqnrX1pHVadv5J0dRjQNSCbTse0WqBcK4IyDbV8GStWrsSqs1aj/9BR2FYKu3ft2haEXt5zXbg1B6ZhoFpzUC2V4jxcCsMwQSiFyqwnIEJrgKgIUxs5tXSNychUndq4UFJcAOCcx00jGrJiBRlSmykpFZ0yElEsPa53nQKgShaMmJSs0ovUxkWAx7RdAhmTSWUctyHj30MpjRsrccLnJclJG9/6djeWWtedkvFhXnlLRSO6iEuBEH7cXCjIGAli6nPs10W8wUwkEzA0E47jg5sGAIFsNgXf99Ha0oqqWcGppy47c+/O3YZpanxkZJiJYeDiCy9WERWRkmVHQiiabJy1qul1WaIiR3s8wvDQEDwnwI4du8+69Oorbnvv+94ztam1bUk5X+leNG9B9snHH9OGh0dpe0cnps+aCc3Q0TNjCg4fOgw2Q8PsBXPQ2twC0zIUzTXkIFKi6lRRq6mGMwo4TNNCri2DttbWxgUsYh+kkBKCKB8oI2pLWx8g1HNv6/7piKuDfLlYREtbGygxUS4VkU1nFB1Yp2CSIGEnMD4+ijAIMDI6DI3p6Orqxf6DB1AqlmHqBlK5NIJIIOQBvDCQA8eO17Zt3TK0bfv2fLFYdPft2XW4u7Pn4Pj42K4f/3jtM17k1hjT0Xf4EJimIZFIY2JiQm2IRH3bTOE4NXAuUSyV4+tLDVwMzQDVmMrCNeIGnwsUyxOgGgMlDNlMFnbChlOtwY+38ZyHoCFBFEVIptOwDRsT4+MgjEA3NfAwRBiEkJBIJzMIPA87dmx/fPuObXecvfqsj/MYLgUhkMl2n3juY8I5iedAAkAyYWPu3LmYOW0mOTp4FFu3b8es2TPnPfrEY9/71W9/88a/3Hvf89lE6tDWbdtLs+bO0sqlavcpS5adecOb3nT5vCULu3TNgKVR5HJZ5W+VHLZlIJmyIQhA4/cxIQSI6cnKHz0BTSPYtWfP4R9874efP3Bg//3JtI2aU4Pn+khn0pBUouY6oBIIA9XsDw+NoKO1A1s2bdz00ksvHJ09c/bUluYWHDx0AM8/9zTecsObMXB8CC++sgbTpk3DyjNXQtMFwjCCbSRw6OAhLFm6GBedf4He2dm5bPeuPafuHtv5TC6Xg+PUQMHgOg40jaJYLMI0DBiWCapRRDxCrVYfIOgI/ACZbAaWZWN0aBiWacOwdTi+G2fGVlM33njLP5595plnffvb38Ut73sPWppbMTg0it279+CyK67A2Weeg2xTFmHIoesM997/AJpb2rBjyyY89sijR085ZekLpmk+0dfX93IynUKxXIKpGaBQ9hbP8VAulqBpGiAlqtUqdFtTPxs8T1kpouikGDaASfVa1JXthJyId2OMgVKKiPN4OEgbNgFSj4MjBHoMu4siFYunZPfqeyCEgEd1or6GMAxgmRosy0CxWGr87OIhRxhx1LwawtBHS0sL+voPPXL7j39y2vXXvfE91VItmWvO4ujAIMoVB5QD/Yf6EQYRtD9RXHrZVTiw5yD+cu99+OOf/4A58+fDtiw89eKz+PBHPozB0iC6O1sxf8H8VsM0u1vamvYFQYBqpTJ5mpisyZqsyZqsyfp7bXiT6QxCHqoelapmwNANME1tBUI/BJECTq0Kx3UQRiFCHrKOts55s2bPSHb2tqCjtwtJPa0aMEZANYqaVwEHUK3WcGzwOMZGC7jqqiswdHwQXAi4vr8PgAJjxcrkSqUSg0yEym2E2gqQeLup5HJogJtk7Ber+3ElVbFBREU6qm0wOUHOVc0kQASJsx/Vk6C2lyzO2a33nQRccCUdjuMaBOcAPeERlvW4oXjDLOIoIQoJIQEax9RIKUAYAyMqNiVutWMJc339fKI5o4QgBgCDi5jITBk4V4c5QG1FKGWIQhXtofyUyp9KQWK4jYcgDCBhw/MVAEZIiSgSsK1E+6qVq5bkmpqQyWbplClTkUykoRk6wqhOkVYNLxPxNj0eFlACEKoOq1EYIZPIwNANfP0bX72oZ0rvRaah4YWXXsDcmfMhAoG21g65cNFilCoVLJw/E6ACyUQKKTONVMZukJKlkCiVyzg+OoyOtnYYmo50KgXbsrFw/gIEgscePx77iRmkrMvvJXSi0DlKmmuA6QRcSjCivhdJgEN9fchls8jlmpHOpHHo0EEErmoKX3rxRbS0tSKZSMKpeGAGAxcRhoeGUSjmkcvlsGPHDsyaMwulYhV7Dh3Iv/LyK3tee23jzv6+/sOmZVYyyVRlw4bXCvPmzzJmz55Ny+XyQdd1hziPCulcKrCjBFzPB2VAFPowdRNcCvAwgIg4dN0EMwwwEcE0dIShIt0yxsDBoTMdpmnBCxxQUAhBkMtmYVkJeJ4L0zLBOUfgB0qm7PpIJRNwag4830c2l0UYhCjk89ANHUSj4BwA02BoGkYnxqFrDLl0Bp2dPeLfvvlvv1t15plXnLHqzIWu4yBh2XFep4yp4DK2EsTSU9WigosIuqWjpb0Vx7YMY8PaTXLGjKnW+25578XnrFp9cVdbtyhXSlGuqYnqpk4PHzxEh4ZH0N6UhWkqGFQUckRRCM1gYIYeZ2/HlgEp1HaXKDl6pVZGwH0EofS+etvX/m3Hju33L19+CgaPDcCXAZihK7CV46FULGHO3LnqeecqT5Uw4PDhI/u2btv2zAXnn38zACxeshgjQyPQLRNvf9ubcPRIP/58zx1YeeZKGJoOp1YDpRq6u7owNjaGnt5ujJcmZnR2tH/44gsvcnfu3LmGC4lkKolatQrf8xVojgsEUQiECqxlaAYs04LnuUgkkyCUolKqQNctQFOvsUYIJibymLdg/hXf+9633vCn3/8J69e9imuvvxaz587A/fduQv+RfnR0tmN0bAIjw6Po6GzHjp3bccef/4gli5YGf7n3vjXt7W27fS/Y8NrWjc+GMiqJUMDSNERRCD+KYBmGojITTVkkGIWdtAAqISLFEiCxWqbOKWBUawCqKFMgPzVwUkwFLjhEfahHiAIIShlveWXcyAKM6fGmOYKUFELQWGliIPBcCA7ougEeRUDcdEfVQG2XiRpkEKIsLZrGIKUOx3ERBlHh17/77e3LV57RPXf+witffPm5hGklSKlURUd3J0AF5s6cjXK+gK1btmD/oQPonNKJLVu24TOf+RRWrjoTgR/hti99GavOOgNHBvpx/333613d3TP7+g69UCnXpBSTXKfJmqzJmqzJmqy/12JUU81GEASKdsqUJFcKxD5NDTwKUa1UYVomJOcwdKv5ff/wD+9dvXr1/GTSgmFZGB4ehu/7SNgJcETY33cAs6bPwtEjR/DNb34T99/3IK57w3VYvXoV+g4eLf/pT3/66fDQYL+VtOODLQejyjNGGBCGPJYWSxim2aDiMsoUZpnLWGYcx5HQuo9XNmjMUqqcVHmim1TNpFSNKj0JZqWa2pPyc+MNBI3jUuoQLOXjBVjs+0XdR8virSJwgvBch1LFTTqNZX8NnmccL1Rv2Ov/TvmI6/43EkN51CaaMDQykzWmNzbOuqmyPYXggBTQqIIaMUbVICMMYOgGEqkk/DAgoyMj86+9+vW3ZLKZ9kOHD5PVZ5+N9s4O1TzHsnDP92AwLfY4x/FKRD1S1QAL6JqBTC6DRMJCT2830qkUxkYnMDIyJs9dvZoYlompU6eSltZW9PZ2IZmyYZgGCCWwbAMhD1GsFNUggRBEYYREwkQ2k4NhWjB1XUllCYHn+eq5plR1r0Ash1Svk+N6WL9uPYrFIrq7uxrDhno2seM6KJfLiuIrOGzbxsj4OEQUQnCBzrYO6JqO8YkJcBFh1649AAVmz56F3p6pME0bYyNjhb/c99ALv/7tb373m1/98pfPP//iHw4fOnx/MV98xalVdx3qO7h//rz5h4YHj+/auXPn3tHRsaH+/v7a2MQEz2WysEwbYRQoD6qAatY1giDwYRomGDNQrpYhIcEIRTqdUVm3REHTNKar7FNoME0Luq6jWC2BMZVzbFk2giiA57oIQr+xiYdU13gYBvA8P75eJXRdh+PUIIWi/woeIQwCeK6Hnt5euK43WimV7BWnnXJuW2ubRimFgEDEFTyIxo1ufYOuLmGCiEeQksMwTbS3d6C3vYvcd/+9KBSLmDNzHhJJm2g6Y77n06ZchrS0NcN1XDz20GNoampCc0sTIAmYrvJ6SQymqvs56++pKOAolcsYn5hAKpXC7bf/4vbf//53387lcmEYhXBqDnp7ukAAVKsODN0AAUUyncS0qb2o1VyAELUJN7Xo+PGhciaTXT5nzuyONWvWoau7B+l0Gvv3HcIZZ67EU08+Bs/zsWTxYnChBkClUgGHDvehta0DPb3deOtb3zL3+jdcf9a99927/8ixo32JVBJuzQGPVHwPFwK5XBaAAJcSpmXC95UnVjcMWFYCQRggm8uo69px4HoefBHO/Ma3/vXzZ61ctbRcLiKRTGBsbAwLl8xDtVJDyjbRM3UaKKOQkYCdtPDos0+gs73Hu/vOO361bce2Z88+5/xaKpHatnPnjn2mZcC2baSSadiWgdD3UXN9tLe2Ke+u4DANA0IKCC4QhGFj+If6PSC+zwqhCPKMshO2AgkwyhoKlTqVvj4gadyH4/t43fvLKAWEAptRxpRFgwvFDJASRrzNVfd3CsM04PseuBBxFJuS30uhlDW2nYDjOuPPP/388SuuvGK2bpuzUqk05syehXx+Ap0dHTjU3w+n6qC1pQ1CSGzatAmaroFpFIcOHMHChYsxa+4s7Nu3D7/6+S+hUyouv+SyQ888/cxW33ddRhk+/4XPT54oJmuyJmuyJmuy/h43vFEUglINuq6BUQ0a1eH7rsrDhUCpVAUFhWnYIJBI2hZ0LTF9wfzFi3VNw7PPvYJEJou5s+fCtBiSCQs1t4KZU6dDZxp27tqFvv5+XPX6S8EjgQcfeAScY//eAwf3t7R3IJPOYHRkBEHggzICGfjwAw+MagChqhmJBJimgRDeICArnyFr0D7jgNs4roc2gFZSqm0kpIxJxyetU086QPMoJjGDqsNXPYuVUUVxlurwRGMfmYiBLICMD3hxA17P4lVrELWFpIpUGoai0RAg3pDUPcGUMeiMIeIROK/vaYnaFscgGEpZ3OepRs4PAhiGAUM3FGCLSCVHDiPougEhBFpaW+CHHoIgRLYpB9dxkbRNbc6K0xedd/6500fHx9Hb24MXXnoRy089HV2dnUomDiUXV367Ez7oxrY8XpmSWEYuZV3JTjC1dwoy6QwpVcrI5jIAkn8F4zoZh1yqlOFHAVKpNBihyGYzjXFDffwghYBAhFTCbkC7ZDzYoAC4kGCQiMIAEgJtbW0KXFYfWwjl7bZ0C3Nmz8HxoUHVWFsJzOydCTthYuPGTaiUR+Qpy04hHR09SGZszJ+3CPmJifEXX3hx1+bN23Zt3LTpteGhge3btu/aD4qqaRqku7uHEkCUimVZc8r+xMQEyuUKKpUSWtvbQZkOy06AahT5YhF6DIbzw0DFy4AgYZhgGkMkOTTJwQiDZZrQNIZqpQo7YcHULLiOAxAJw7QQeH7sceRgTEMoQoR+iCAMQAiUt1RKmIap5MpRiCAMQQhgGiYEJILQR8gDhFEAnRqABBLpJHgUwnN9DI8MQdc0PPDQQ3eff+F5Z99w45uvq1RraGrOKoCYEAiFgKHpDdVCPQbM1E3U3BoYA1IJCz4N0NTejJGxcbihi45MC5LShuv60HQdOtFRrVbQ1N6EclBDvlRGczbTsADU1QlKdquGS2Nj4xChgCBAS0uL/NLnb7vzpz/5yXebmnK1VCqJSqUMyzZRKJbhOg50g4FpDOlMGrVKBXsKJbS1tcEzXARhgCCIsHnTlnUPP/zIt4ePj725XCmTF198YWB4ZPio6zkLbnnPrVcPDY6nP/uZf651tnckLrjwAuI7PpqyzQjCEOVSAbpGUSpVUS7n57/tXW99z69+/duN/X1HCobGoJs6NM2E4BFqbg2GZiIMIkiptqGtHe1qEBGq3PBCPg/TMpBIWBgZGcXyladfftXlV69+8eU1cDwHH/nYRxF6AZ564jFEETBl+iy4joOWlmawTAYbNm/Cvj19ONZ/bGzL1m2bp/ROH7N0K7V5x8Y+0zJBCEPNqaHm1CA4V8RsW0cylVb+dh6CQUOhUEAkFcHZ0E0QSsCDmFBPmYL8gQICiMIQHPG9ktCYDi9O3BdB6jDvxjCqrtghjYGlaoAZKKIgBKPKC8zDEAKAJAJB5AOSxER0Ao3pkESq933IYzk1kEml1VaYCxQr+TV33PmHn194wRXtXvX40kULFsCp1JDKpDB1Rhp+EOFg/yHMnjMDs2fPxaFDfQjCCLqm4a4774CgKnN42ZJlOHzgkPXU4081E0Y6TMuYiMLJDe9kTdZkTdZkTdbfbcPLmPJn8khAkhCpXBqazhBFytOnUw2O6yMSHJQJOI6LlSsXT+vpndrbf+gQsukseqZPR09PB4rlEgqlEpihI5lMoFIpY9bsmXjfP74PixfOx/HjRzB8bNipes6rbq0ymLRa4fsBGBhM3Wh4vCwjqbycPABhBEHkw9AM1eTEEl8CoXy1kjTIynGP2YgIajTAkijpaz22KIbsyHqTHPdglLE4AihSW9wYiKLOYRJUI9ANHaEfQfDYW4u4+eJq+8w0BbkSMfFZxRmRhvS6IetTnSIYpSoKSQhEMcWZMhY3eTz+3lRjzgVXX5+rEyNjKg6JBxFE7P80DAPJWOJaq1ZRLlWgmQymacNxXFiGCUjQSy++dFlHW0+y4jhYNmU5qrUa9HibGj8bSCcSJ7blcYPeAH79FWOLQDIA4sRz39ScVcqBKFT5tiQmVMs6SEy9FrlUFpqmNYYH9WaaAAiDQD0SSiEEEIYearUqMuk0dFMBcxR0TW2G0+kUzj33XAwNj+BQXz9mzpgORli8xZdw/QC60KBrBg4e6MMdd9yDRQvng1IGO5mAYVhix+5dlf6jRw8cGxrYuum1zev7+/o2rVu/7qAUogoAumairb0NIBKVSkn2HdzP1YZKg2EaSCZsWKYBKdIIvRCGYUKjDK7jgWk6akENhDJojMG2TQguEAUClGqwTBuEAHbCipf4iuwtOFcwNMpiqbtA1SmDaZqSJYNChgIaJXCcGkzDgmla8AMv9tz7CMMImqGBUJVlSuKttiRQXnlCEIYhHKcWD5uA8dERLDtlOcbHJga+8tVv/GjBwiVLTztt+axKqYJMNgUIirHCOFLJFOykHUPZTpKPEA2mYWJiooDR8TG85cY3QwJw3Bq8IICuGUjYVkO9cfZ554ABsZVAxMAiAcaIer9R9VrWYUpOrYqeKVNw4MBh9/nnn7njlTUvfrutvanPskyUK1WEXMAQEsVSQSlXGIFbKqlhExeIhITjOgiCCL7nI5mwkUzY3iMPP/DnNS+9+OIFF1+U2rZ9c35kZKxAGZ21ZfOGw7Nmz5jx9NOPD3zxS1+6eOasmaf19EyBU3UwdcpUTIxNID8+gfHCBIim4frr3rh4/76D3ceOHivUvelceDA0A5HPERFX5WZ7Pizbhq4xeK4PHnFoTIOmqSFEJp1FFAbT//mTH319KmElf/yd7+Oiiy7B8aER9HR3IfCB01aciukzZiCMggZM7JWXX0FhbAwbN6xJ2wmrY9HCxdWh40P9w6Mjo9lsBp4XxBt/DwBBb88UdHV3oVAsgVCBZEpdw7qmgwooO0vkgzIGQzPjYRJX5HOmtvCC8xgoRuJ/CgiphnH1AR+JFSqExH+mbk+pkw6IBK3bTYhqqAkBGNVB40Ekiwe0rucAvoRumGBUXcPKa64ikhzXg4yz3bu7u7B9+46HfdfPzZsz76ObN21bcPllr8Mf7/oDKtUqrrnyGqx5dS02rt+AK668En/68x04euQIdEqQy+Vg6BYq1TJqThmz5s229h48tCLXlF5aq5IBYcpJE+9kTdZkTdZkTdbfa8MbBBEMXQdlDJZpwwsc8IjDtEyEYYR0MoNICFAmQTSKqBQhncu1T5nea+3fuRWUSbS3NoNIQKcadMvAeL4AHgmIKEL/wFEwJrFnzwH4vgdDasGzzzy/x9A0cB6hWnYbcUKQypslIRWFmCq5m6BqcyCFACVa7P1ijbiLOLy2rjoGjxtFEKJyemXsqY2lrSoDN4arKF0xCCWgDOCQAAdoLM0DTvw5wSUCP1RxR3GDRqhq4oRQvjXCeQybAsCgaMFqLQEGCrA6CxoN6Avi5k/l5ZJG9BEhFDKGUKmcYR77jMUJqbVUXkpNp+Dxptmp1sAjJQf0/QACDCIUqAZVJJMJVKvVxJRpUxYRJkEFQSKdQktbGzRK4pgQ0sgArnv2wID/SrcKyMZMoeFHZoRCUiDkirRdh4edpIOOn1P1a53pUCiaeAtEJPKlImolF5amIZlLIBFna5pUg6FloBk6BOLHJgEtztEVACQHhkeH0dvdDUKAUrmCSr4oi+Uy+voPy2TCpgwaZs2eg6VLfZx62jLs3rlndNP619bv2LH9hUcff/yVfGliN4/CKiEsltWrw3gqnYFt2dAYQxAEIFKHaSYgpYRt2TAsE061Ai4EuJBwnDJ0XUd7a5vyFIJCCB1e4MM0DFiWhZBHaGlqQaVSBtUYwiCAzhhqVVeB1CAhpRpuGIalfNyh8hzrugHLMlGYKMY+aBl7UkMwTQPTGbgIAQH1fo4UYZ1RpiJueCzP1yiCmPLMOUfC0kApkEqncbjvEBjTMDh45Lmvff1r3/jD7//4vePHh5IEXUgmEzA0HX7gwUwYjUanrnawTBXtk8tlkMmkGpdN6AeohTW0t7UrP3AMe6ax/J8RFqsKBISMQKGpBkqqvFfPV5C9trYOjE+MT9zynpu+MTw4/Ntlpywe7zvYhzDg8HxXQaUsC3YyCdd1Y/+8VCA7SWCZFlzXhe97YJTC831ILhB4blSQ5MixY4PonToVlaoLXWO7duzY+cupU6bmOjp6qmteXjfy1a99I/uLn/10diaXQqXsIJvLwkoY0HQdxUqZf+Nr33ri5z/72dF0ukn5WiMOHoVwaw4SyTQoJCqBD9u2QSQwOjQK07JBAAShj1Qqg47WdoxPTGDRoiUXnnXaeWff/pOfY9qsKbjoovNw7NhRHBk4Aj9UgxUA8J0AxAQO9h3B/r0HMDE2jtamjqgp3WIePz50fKIwsSUUoXRcF2EQQGMabDMBK2kDlKBWdWBoDAGPUC5XMTE23gDVKXtLpKLpQBCFPohUwDgm0YhWUv5d0hiW1YnzJ5QbJ1Qw6v6MOO4uvps0It1i+FWs0GCMQoJDCECTBFJwEKGsKZILhJGSVktNbZ+jkCMMI5imCYCAhwIJ0/b279/38MxZs2e1dbf3LFm6JDNr/WysXfsy+vbvxebXNmHRovk43NcHwUN0dLTBcxx4oQtoGubPnY1qpYQdoxPo7OleOnfezDP37t27efj40GTDO1mTNVmTNVmT9XdarK2tDbWaA8qYiqIII1CmiJlRFMEwNBimioGxLRuVcgXXXf+G161efc75fX0HwHQdLS3N0DUdvu/BMk0MHRuFbZooV8tYv24DDGqhVvERRRGWLF00tmHDuj8ePLDvYMQj8Ejl74aIYFrK2+m6NSUhlkTl3NIY9iTjqB7BG55XQmjceMWTf8oaPjNCaNysxh5YTR3UFCk09gSCAjTeVEihSKOEqWxPGYNWKG10eOrwRmJP4YkNJ2lEa9S9w/VtV53GrOBcDR+wwIl835hkqukKrCO4anxVkxTn9RKqmsk4AokwdRCUUqjNHVGyQFEnnwoF5GEaBeeqoTYtA0yjSKYSU//x1vf904xZM1s0TR1SXd+DbdsxifpEQ1r//uhJMU71/rVBQY4PtZRScCEaQBoVR6IOngBtRC+ReDhRlzbWAduAyr6dyE8AnKj4j6StvHxxE0SZeg5kFEeYaETJeAHomsqQFRB4/NEnxaHDfZJQRnbs2ElS6SSZO3seMTVT1Jza8YOHD269/4F7H/vTnX++/be/+92//ulPv/vJlq1bXok4H8xkc4Fh2gjCCJRSpBIJEDDkcll4rotqtQopBJhGoDEFO+NCIBQqizkII2TSSVimBd/z0NHVDitpQUiJZNJGEAZIJZMwLCX7DcMQjDFEQYAoigAQhJwjCANwESnPLqUIggCu5yCKIggiEQYRXMcFjyLohoZIciXJJxJ+4DcGQTTOL67nooZhBEZpI7opCkJ1HWkGNKohkiE0nSLwIxiajkwqjda2Nqxdu2YLoSy6+MKLzzFNU6MMMEwdZtKGF/oNub+SH5+4PiilqDlVVKoxjVjTkElnlKSV0vj6IYgCjmq1Bss2G9c5j1T2qhYDjYaGx+B5NXR0tmP7rp2H33Pze/95zdo1Pwt8v7Zr507YyQTcQDX2OtPgel7D95nOpBAEQZzvqmSyge8hk82ChxEkoDyrUd2vrrbjvueCEopysVIcz+eHJUS+ubmt2tHeXnr66Wc8wzBbWjtbE8ODQyiVCnjqmWcq9933lz88+ujD362UyyNarJzQdBX9Vo/Vqt+XTNOE53rQNR2ZXAa6ocE0DIRhhIn8BIrF8emf/vQ//5fmjtZ5d9x9v/z8Fz5LKAEGB46hWCzgxjfdgFQqgSgMwQjD0PFR3HHn3agUyzh+dNh5903vOpRM2M8/+eRTz+umViWAAlLFW9fW9g6k0ilQQuBUq/BDH9VKBeVyGYzFlgaQhpe3oY7hHExTmd+UkrixpKCNHHMBCQmNMRiGcfKdI6Y4n/T/Y/WIRL0JPvH31EnQygsMtZ2PrwvKTuIfAEjaSURRCM/3oFsGNF1THAhDAwWBburwg6AaRKKwZPGC6Uf6j8ybv3A+GCN4+NGH4AUuIh5i/4G9uOiC87D/wAG4vqeuQVNHJpVC/5F++BGH63nRrt27jvKQb2eMHZuMJZqsyZqsyZqsyfo7bXibmppRLBagaQxRxKFpGhJWEmGgJKIa01GtVQEAgRcQQmlyyaIlry8VCmcEoYdLL7wUYRhgx45t6Omdgn179oPzCDNmTsNLL76Mz376s8hk0njjm67Dlo1b/AP7D2zYtHnL3bqmj+m6DsEFNKbBtGwEYahgOFIqKWo9ESg+qCtgVSyBqx+CoGTFhCpZJKEEMpbJkbj5rH9eivou8gQg6uRDF+oeMygpMq2DVGLfbP0xSCEbHl4hT2yZSbxlU5vl+omfKohVne4MlSdZ3+7WSaWUsEZL3dgox38PAGiaojwLIRuHUELVNyC5iA+X9dxZglQyhUQyBUIZwihoxDyFUYCe7p65H/rgh29OpVMJRgkMQ1d5t4w1Dp71frZ+8OeCNyBdjUY+frbqwwMhYooPlHwUABzPBYGKGKkTs+tq87iHxsDgEVRqFWTTORAQNOea0dyUhabTBrxJinhwUCfDamqwcfjoYfzlnr+gvb0F27bvwP69++SevftIEIZk4fyFZMasmejpnoJyuXJ07bq1z/z0Zz/70Tf+9WvfvPueu36yefPm+/ft2b2lVqmNJJJpnrCTIBJwPAeCc9imiUwmDdO0ILjaFoVRAF3XEUYRLMtEGKisaMs0kTBtJVemDGEQglIGXdfU5jBed42PjcRkaQKqMQR+gEK+AN/3EfO94fkevMCL3xsUggt4nq/kopRCxNL/KFQxQkzXIITyfZqGrt4XUtFqCVTTyAVvbIGVGkH54RFv4UzTVEAsHiHiArZtIZVMgWmaemyEwDBMbN2yZV3EubzksotXujXXGBg4BithImElQCQ9IXmPmxoOJTn3eIBdu7bDYCYy2QzK5QpMw4LrOciXikglUxgcHgQhEslkspGtXc9epZQijEIUCkX4foAXX3pl6z+8732f2bpl6909Pd2SEQLDPLEBJ5QiaVvQNA1NTU2oOQ4Yo9CZoitzGcE0tMbGPuIh/CCE63hIppMwDQtDx4+jWFRqlUQqAU2n0A0dlXIVfuAVLdPue/SRhx47OnCkb+nipb2WYXds27pz7+c/97nvbNny2g/HRscHTDuBMAwRhWozqgZFFDwMofgJDLqmQUogk8mAEArXcwEhkclkUCqVyCWXXHTrbZ//4i23ffnL9BMf/igJHB81z8cZq1ajtbUFqVQSUaSgg4Zt4YEHH8HaDRvK02fN2ucF3tp8fvThZ1947tEg8kaUakZJjSlTueqpVEqxBoRQcnIh0dreiomxsZgZQMFiny1o/GseQWOGiryKGQNRFMVKj3joEStk6kO9iPPG0PIkdN+JHPX6PTzOD5NxRBeJgX8ne/8Z1eIcYzRgV3WrShiq96hhmKCEwnVdaExDoVJSoDfNwPDw4NDA0aPHR0fHrFnz5nR0dXUlq24VR48cRbFQQk9XN7KZFPr7j8BxXTCqobO9A5pm4MjRAZRLBTS35Nitt76v4Dj+uiNHjvR/4fOfk5NHismarMmarMmarL+/0irlMlKpDIIggMYoNF0H1RiYFst8KUXoR3A9DzNnzkxpmpw6Onqsw+MLkDM7QTV1IOnp7IWh6WjpaELSVvLFfCGPW997MwLOsWvXDrhOxT3cd+SQH3hjueYcqpUqkon49xbziMKwsToU+GsfroQEF7LRgNbBVJKcICWDqEYVUSzJJQL17koQtX6lcc7tiQVmvcmNm1p2ov8l8WZDNXpKmsyFjCXRanumx345LrlqlePYHgl6ImMybpZBVSSSoZsIhQ8OKNKtiBsTrppzRqnyItdjj2JJt0DsR5USMuIAIWBMi6OMFME0EiEs04amG6CEQS27JYIohC50aNRArepmIi6MKOAYGxsFNIrmbDMMkL+SKtf/rigKQeMG7YR8OX5NuFBybU3lbGoslqPG2xkWx1TJOn26PjyIn30hOBilSCUy6oKkdb+viLf3PG6k6gdnJdXetm0rSqWCtOwEEVTKA4cPkyDw0dvZS84480wEvieqFW/wjj/c+doDD9z/wmuvbXi+WJzYn85kAh5GkAKwrKSKVIm/K41REGhg0OJNK+DUPICq+JgwjJBMpkAYRVCO4LkBbNtSwKmAQ0BlhkIycK7IyplUBpVKFfmJCaSTKSTsDPzAh+e5Kj9aKlIyjzh84gFEwPeC2NesXgvGNLU5FwJC1J9HCl0zAaK2XL4bKJgaV8RzRe9W/nBQClPTwaWApukQ0oOUUERnX0UjUabB83zwMICVSKJW8yBMwE4kUPN9eEGApG2jUq7wb33nmz8Ofc+89b3v+8jU6VNTI2MjKBTKmNLTozayUBJVdV1SSADZRAannXJ6o2GnVPmJdUNHmiQAAG1trTAMQ32vXDaktGBAsVBCKV+CW3Xw9PPPPfnt7/zbN44NHH6hta0NjuMg9ENICBi6AY1p0HUdhGlwqmV4vo90JoNavJlPZtQ2U9M1lCtlBEGEdCYJ2zRgaDrcmgNNM5S3204AVMJxFNiKQvk5s7lMsHXb5kHKNOzZtfs3H3j/B7fe+KYbr3z5pVd2DwweecwwDL+7uxeARKGQB4mbbe5FkERJxxV1mKNWrQEA7KSNfL4Az/OQsBMYHRuFZrL5X//W169/5PHHmGGaOPX0JXjg3gcwdcZUjIwMQddUwym4hGnZONJ/JHzxxWd3FMZGN60ZHes3LDawbdvGx/fvPzhu6DoII8ilc4AAipUy2jva0NzUhEKxiGw2h2KxCBF4qBQrIITFg9AInKt7kG0nVGMMFUHlh37DqkBi2QaXvBE1RjUGKVTcXUPRUic1x9c34qFjPebNMAwIojz8tH4/4VDD0Pogjqk/I3i9KVb3Px5f+4QS1JxarPjREEQclmVDCAmnWoXGdAweH365VvMLP/nRjzYm06lrE7Z95qrVq7Ujhw+jUqli3bqNmDZ9GsrlKgr5AgYGjoBQhmQyAd3Q8YUvfBG6xoI7/3RnWSN0klo1WZM1WZM1WZP199rwAhSGzpBIJMF5BJ3pirhJKPwgQtmrgvMImXQKxVKBT5vZ033Te981b9rU6WhONmPr1s3INuWgEQPjxQlMFCeQyaRxdOAo7rv7Prz5LTeiVKqgf+9RvO3Nb7WefemF0ppX19Ucoxav6ggsU+Us2oYNKQT80IeQAozo8ZZVQIQ8jj8RACiIRkGlihQSUkAIpoiuUqoYH0oVxZbEW99486gktFIRoDmv97wnNg1SSY9JDMzRYjmo5PxEzi1Vq2e1RZaqaYolmPWtcKOli8OANabovEHkIfQCCKjMSqK0wIh5wyq6qA67IjRuHICIh+CI4sdDIAVR0sFYmiliHzAFQRiE8F0PhmGAMhVtU66UEYUCkBynnrasOZVKWIVCAfmxIsqeg8ziTOOpUN+/jPfTSp5YB+GQk/4XsYdWxlt3pmlxFBDinFwCUzfVxjzertN4AMFjj2/EI7Q0tZ0UM4L4byUYHRtBKpGC5wXwAw+pZAp9Bw/Bsizs3btXFiYK8m1vexs5Y8XKOCQJ2Lhp69C999/75E9/8uOH9uw7sEln2mClUuG6riGRzIBCg2EZiHiEMOKwTC3eAOkqs1fXYRsahodGoOs6mlqawAjD2MQ4tDjKhwchRCgAJqDrKYRBGA9AKHw/gBQSuVwOnuegWCpBiAimYcJzXUhCoJkMnhuiVCrHm1MN0DQEfgiqEdh2AmGoYECS1ocyaERvSbUMA4sHCyImxGqaIpsDKrtWRLwR+QKqXq8G/1oKNWACIAiHX/NAQGAmLAViExKu68H3AyQSNihjCHmE7p4elEulwte/+Y2v1xyv/I1/+8YX2po7Uj73MTQ8gt/96te4+vVXYdGiJfD9AKZhwHM9ECqRSCQb11g6rcURWBp0S4OQHJZpxzJr1ex6no9tW7dh1uyZGDk+gZ27dw5u3rLljp/efvvtlUrpUE+vaiiDIESt4iCRtAACJCwLYchRKdeUNUA3Ysm22lZn0gqo5lZdGJoJShiiSCD0fSRTCXi+gJBqKw6qrlFNYzC0BFzPwUR+DNVqJfY5q+tz564dW3Z9YfsWpmtobWuH53kolvKwTBuWbSMMQ3i+C11TDAKmMYArSwInAqlkBp7rQwjE8VQMrluzXn/Djdd71Wj+l7/6r/5dd/3ZBIArr70KYyOjcJ0qembPguf5sAwTUkr84Pvf2/DKy2vuTSSS6zKZHDnzzPPLE+MTRR75gKFD1804Do0gk8lAowx9h/tgJxLQqlUll48EJiZGwTTaULsY8f2LRxGkBHTDAKVUkb+h7qd1iJ/gKpaocX+Dek1VdrkaZNYj2gCVOd5Qb8T3z/q2WAge20RO2EikFPH9I6Y0CzWsAiEIgkB513mkGmXBQYmm0qEFgee5kJAwLAuWZQnfc7YfG6gOpjLJPV2dPZe+7qqrVk7t7lm8e8fu1L4De3HlVVfDoBY+/6XPwbQNkEjFM3FEePqpZ0ar5eqzI6PDh9nJFpDJmqzJmqzJmqzJ+vtqeGtODYRQ9PR0wXVc1Ko1BavKZmDqJhgBpIigMYLx8RHnwkvO7b3ggv+nvfeOuuw6z/ue3c45996vTkcHAbCIEqsaKSqkJVmFVnUsK0ocJ7blRPHKshy6LCVrKZKsxLGUxI7tuNCyZLmosIkFJEFRpCiKHSJAEB0YTANmMMBg2vd9t5yy9353/njfve8dJf8kWcnCH3draQma+eq955zZ736e5/d8z2uUsfjQ+z+EX/31X8d3vv0tMNHh7le9ElcOruKv/uVX4MKFZ7G5vYPJxg6MMXjbW78Du7vH45NP/MvTbb9YjEa7GHyHcT1BXTeAVuiGDtYajCYjTA9mUGAbXYycd5MALasBMTLsSGvoxFZckkGTiGT4NEJ7zSoriuKbFPH8K/bS5RxAohqzzRiUZDCWwSFRUV65LzIhEOf/SKzMSlRnEnUNiXtwjbJoqhE637EFWza8WmkoyaIlkkE48jAJIhAgdOb8cyhYxQpgTJHtkooPKRIFWKfR+R6UEpyzGBYeQ9tD1TykN3V1WAEVcQwP5CMmMozwvjSDY1AsiDFGdH4AkigwMcI5B2MNumFA23bY2dxig7miMgCWeiadkKARIzBvW4AIo7qC91EGCgdrDSIRLl58AU1dcbacLL74pS+mO+65HYtFp/YOZthSCj/x539SKQ3V9x6PPPrEC7/5m7/15Qce/ONPPvz1r33+2tVrz2xu7wSjDDa3NrC9uYWD/QNow1291jLVeWt7B03TYNF1nGX1A4xt0PUDmroClMbBwR60NtiYjDGbzbG/t4et7W2M6hrB9+i7DoMPfFjkHPphQAwB2CcQuA/ZaMNwpKGDMUbI4lxFo5QBRb7GkopAsoghIlGEtTJgU2BoDzj3qDQPD0McQBRhjcNktIkhDHzNJA0/sBqmjUXwA4JnW2gYWv5zbRBD5F7YSEzGNfy9o5B2nbM8ZCuw+ksRSAmj0Rg7W7uLd7/7n/6Ds+effeGn/+pP/zdv+Y5ve+PHPvpxo6XH++y5szh67Biij5jPpyBEHG9G4oYgMb2qUlOjlAblDlYZih9+9Ov46lcfaB95+JHTF56/+NkPfeQjHzl//vyXkoqL4yeO4vr165hMNlDXDSJdwxCMvHYEZ5uSmZ+MGqSU0PcdXFXB9wNmsym89zh2/Bj29g+gk4KtKozGYyzaFov5HMYauMpiuneA0XiMFBMSKSEoW64Xmk8RQ8Lu7i6stQiRgUldy4OV957dGynyz1bXoCGhqSuYmsnc2RY/hICUAnZ3DmE2n+NVr/+m7/+FX/zv/+K/+7Vf2/6ut31LcCngIx/8ML7/ne/Eo488ikOHd3C3emWBmv3Sz/8Pe5//wpcefMXdr/ja1u6hr+xs7uCBrz6oHv76I6kZTWAd0/OHbsB0foCmcrjl1ldhNpuzWpr48DDEwKR+P8DHAJUSPCUh0AtcL8mASzdCqpRScFWFEPgQiEIqEDOG/DHITik+mFutKuK+aKAfBihIDVsifo6A30siknuIifDWGHSxRxg8nKuWZ3EE1DXXtdnKISVCO29RVzW7kgCEgWvMtFVX+77/9IXnzj76j//Xf/DKw0eOft+Rw0fe6Yfw6i99/ov1pauXMdncQAjidNgYAarBB3/3/Z9ytvpEirjslV/vJtZrvdZrvdZrvV6uAy/X/BDm8wV6qcfY2W0QKeJgtg+VktggWVk6dujYG1949kU3b3u8/Xu+G9/w+jdgY2MMkxQULHYPbaHWDdqW8Na3vhVf/9ojmM8O0oljNysf44UP3/uRrxqrEShAKY35Yo5FO0dVV9xLSgEmV1Ykps6SqD6KVBl8k2RbOe6qQInV0bxJigT5GlxdZKRbN4n8qOTvy2ZMQRQHViFzZSzlTKpmQqhU6CJPyFob/iHk5yzlsBk4qpV0BCeE5LExmsBUBovFnAnUSQNJgcSuB8krAok3i4mBRa6qEL3Ar0isxDojUJk87SoDa2oQEfqhL8NS09TY2b4Ji3aBa9euYmd391gz3sDBwSUcP3EcN7ubeLOJlVYiAcT0w8ADOBRiTHCWYTSz6QI7OzswGnDaQDeNqDEeMOBeV3Uj2DmGAIrAqHacQVYak5phRF3oceXKVdx33+9hMZ9jMtnAPa98JQ5td3jlq1+lNjY2MZlMsLtzGItZ73/tV//tQ2cunv78pz/1mT++9MLFRy5feuFU13Whqkc4fuIWbG5uYeg6zOZT+N7DWAMfAjY3NgEkzMIUfuAKGK2BQBGBCNPpFNFHVJXha5SAqIHxqELTJFD08N5jPBohOofed9BWYRginHagGEHgvGJKQO/nUk0F1E1TrOc+BMQQMGrYOjvrFzCGzfWD92hqJqe3ixbKcCbXU0TlKqSkGEhmjOTGFSIFeD+UvGsCoR6N+PNl8I3Ri2tAl3vGWgOlLRYLvn65VoZz3Vob9MOApmnQjGq08w4XLj6P8WSMzc0tEBF99CMf+s2vfOlLX/yOb3/LX/jRP/uj//Hf/tm/89q9a3u4cuUKfD/gxRdexGRzA9YZPP7447j7nldKbRMwnbXY2GikxotQVQ778xk+/0efx4uXLs1q506ePXPm0+973wfunS6mD3ofuso5OKMx25+BEtC2HRaLFs5Vov5FORQADBSUNtjb34PRFru7h9C3LRZtK4AlYDFvoZVC73tsjiZ4/sJFbG5uAOMxKBKmewegIWK/24NROQcfQKljuj2X0GI+n0NZjb5tMR6PUNc1QiSGtgW/tKYHdja0i56VyECoXA3nNEbjDdTOomsXuH7t8i3/+jd/4680xr36bW9/K378x/4j+8/+0f+O+z51H07cfBPe/va3w9UW8/kco9EEjzz6GJ489dTFm2+99eT21vbJo4eP44UXX8DVy5eTkuGwqSqAEtq2hYbCMHgcPXII5hu/Aeefu4Ch7xH8gIODKR/IUVralCmW4AeAAtbLZHZltBxMMm8g+AAWcMXWLoeEBIUQojAIxE6SMQnyfM5OZxRYFcmzXIPyQabY3ru+kwMSwuB7vs4F8pb/rej7DhpcR2aMQd2MMJ93iIioGgtlNLpFNyz6cB5Kne8pPro33f/s4aOHvvehrz/49ptvu/0Nb3rjG93ZM6dx/vwFdG0PY8zpytUfAnCqbhwU3Ho3sV7rtV7rtV7r9XIdeKvGYugHHOwfoKobAEw61krj1ptuwfVr10BgOmft6jvvvO2ub7/84mU8fvJJ/Id//sdx02tewxvHRYuXnr+Ekasx21vg4PoUn/30H+DEzTdje3cbN992Ox566Gun2/bg1ObmLltejQGFhMV8jqrhPlHfDQg903E9MeilMgY+MogGeaiEltocIKUghOS0JCGJtS7Tg5XSgCEZastoxxZoqSWCKKyUiKtbFA+dWvPXyx+fc7UxRskas2LgDA9JEHI079x4iE4AZz+jl37ZVDDFucvXWgMkzUOYUrBWwwvUK4aImH/3Yk1NQFKw1gnpmIfrGAKcstgYT7DoF+j7HqNmjK7rAQCvfOU37NS1wW133HzDxZCrnFIiaMkL930P5xzqusbmxkQ2uwkbGxPolcahvh/QjCooa3ioyxpeVlxA6IYOTteonGPboo9QjkFkja2hIjCfzfFD73wnzp59FrWuULkad9x+O55++ln/uc998fTpU8888uSTT3/uA+9/3++RptMpcq72xE23oO8G+OChTcLzF57DxmQCrQ0CdXDawnde7KRsKR0GD6K+XA4+RBghzBIUxpMai3mH6D3msxma0QiwCpEI+9N9GGNhjEG/aFlB6hc83GiFvmuhFBPGreV7jPwA61glq5sa0Wh4H2E02/CNMWIF5YOPYegBRXC6Qt2M0PYdD0yGld4odGettGTwheoNElhVkGHXgOu29fL+IO6N7vu+HPowJVchpojO97CKlbRF10OnxLniaDGdzTAeT3DzzbcCLygcXN87e+/H7/1lj/CAp+GH+vnwxu9829vuObx9+NjQdappaigNvHTlKiabmzhx/DgO9g8wnS5w+twB/uhznwMloptPnIj3f+X+BUV18vnzF/7g4Ycf+tip0ycftNZ2J266Cfv7B+j6BarKYd7OUVc1yEdoa7C1tY22baFUQFM5DEMPo1k910YjRI97XvVKjEcNHrj/ARjnUCVg0S+goGGUQt92AFgJHoYB2lgYY1FVFTbqCm3bwkcPP/QIyqNyDsZY9P0CdVUjBkJdN1BJo+1bhpv5ASlxFhoaiL0vh2SR2LbrKguAO5SrqsKVi5dxxx13ve0b73nNd73v/R/CK+68Ax947wfw2td9I/7cT/55bO1sYlQ3aBctNiYTXL56Fb/93vce3HzTzQ8/cP8ff/5gb+/F3e3DuHz5Ck6ePo1AAXXjQIkPDnd2ttEuOmztbGHRdtyHPB7h0otTBPJwtYWzDsMwoO8XABTG4zH6vmcrseJnGSixG0YsyjqJE6TtxDbNkZOSEYHmIRaESAy/gsAEM0U834tL+Bk7digt4yerxHEiEiI8P0cqV8N3A2IK8Ipfe6U5ktG4GvN2BuWNHOKx6h59RALgGgfrHBbz2eXZdP/TdVU/OW42P3vx+YvfOTs4+NPHjx9/c9cuMF/MX5gvuvdWVfXVEMK8amqMm2a9m1iv9Vqv9Vqv9Xq5DrxGW4wbi91DOyAktLMW58+fx8bWBrS1mIsa4n3AseNHX3nTzTfffez4Cdx8+20Yjcd4+LHHcezoMQydx/nzF7C5sYnHn34M5849g+3dHXzP9343FotBvfrVr8C/ePc/fQJAu7G1gXa6QB8GbG5soGsXUMnAqISmGiHEge3AApvSzkCn3IurJGsL3kQlBljlTXv+vOzHVZrrhZJ03PL+TOU5lJXHGADZT1nnOD+WIP2rCVrbJY1ZAFqKWMngsl2AElNykWRw0bmDl8ogaYyB7wfOFq9s7viQQb5HCqKmErQx5b8TBMaC0uFTNnPWOPhhQKBOlA1gY7zB71vwABJCDJC/QtfNLwIIp08/p5tRo6d7e7j9ztsxHjf8sSmBiA8d6qaCkZxw/p7aKNTGcQWSUK3bdoG6dmwDx/9Fni1xntdaixSTWB8t5rMWV/f2cPnSZbp+7XL6kR/+M+aO2+7AHXfciTOnzw0PPfTw6fs+9skvfujeD3/qiScfv392ML2wsTmJu4d3QDFhPKkxX7S4fJkztjEGzBfEiniMAmrSAiBqMPQ9/JCYvEwR/cDv9Wg0xggabbsAJcJ4NMZkY4y+9ahdBWNYeYtEIIoI0WMYerZ2ah4qlVIwVg5HVqqyElGh3JJY5IP3kh1leJlS4J5cyXMztZltxj4GmDDwJr+89wQjtVu5XxbS1azAcLTQeyYlExXoFVc7OZDAhXgAJ877WgtYAy0WU2jAKC3VYRHjkZB6Cbh+7Rr2cI0Px4zB4Z2j4cknnvq9B/74gU83rjrxnt/5zXte+cpXf8MtN9/yGmPtHZtb2yde+03ftPX+93xg9KrXvGrz8ccfH1tt1Lnnzito7F947rmn2649v5jPTr34wqU/euHii/cPYZjXVYNhGDA92Bc1egQkwubWJnzvESPBOofpdF+o7fx6NHWDunKYd63AvhS+8qUv86xPCXVfoapr9N2AhIjG1XB1A2sNmqZBjISu69A0DUOPfIAPPUIgOMmqL+YLbGxswlkLH3J2NCLFhFHdQGsetDU0+o77dgcidH2Pm2+5DfPZFPsHBwzGUnwAEWNAQjrxrnf9jf9se3t3c2d7C33X4fxLL+AHf+SHMBo1JbIxHo1w6cVLeM/73otrL11+8qVLlz/63HMXnqyqCuefewHPnT8HUhHGCbipH+CHgN3dHWxsjFE5i689+DWu8omxDPvW8jOw73sY6zhzLx23Cvm5iOJGSURlsM0kfaboU6kRgzwnJPTPlUiQmiGh6/Ntk7i7WwbbbJMutURIYqFeWqBzJRuQMMReDnmY1xC9VLMBaGNgRkTfwdWOIYSJuK+5HqGyBn3wfACCFHzvnz2IBy9Zox/RWn/9tjtu++tK67daa/+4qux9Xddeq+oGg2fXx3qt13qt13qt13q9TAde8D4Di0Ur9lWDo8eOYTqb4eKlixiPaqQYcW3vir7lttfffuzEiZ3R9gTHjh4BAHz84/fim17zOvzwD/8QbrnlOJ547An82r/+Ndx860141avvwcmnT+Kzn/ksff2hB6/P5vOHALb/+TBgc2MiKhYQfECgiPGogR906ValxPTiECJvnopQIL28maKce29l6ExFWWSqMvKAm2EpMm8aGVSCWA1BuTpHiYLAZOZceVH+TivODkZCPwwMR9G8VaJAiIiwOkOEOBcbBl+gT9wJDFFzeWiKPkJrw9TfEKSrM/GgogxPmyYVpUNprjIK3sNo3qiHFNC3PbqhZzCWVmjqBovFvFQcvf+97//IpcsvnX7oaw9XJ04ce01YDD/5d/7W37rnW976bfwt2EPLOV3rYOR1J6Es9yEiRUJdO1aorMWx48dYzYoJxqil9FvaRFiJ5h5N/pjTz5zGpz/9GWoXrd7Y2MQr7n6FObR9dP6hD3307LnnTn/l/e/73U889dTTX9zb27u0tb2DO269DfHIYVx56SVMD/ZRNyMc7A+AVvDewxreaDdVA6M128atRlM1GAYP67ivOMQBw9Bj1IyQKMFHzkCnyIMEISKEgPmsRV1VbOGeTxFCzgkqGGsRew9jpaM08kAwGo14IPYBVe1Q1RWrqBbouw4KOSKQkCiUQxgtFVNKsSVfQUFbKwc2UQYzVtZi8NjZ2gFRxGwx5/siKOkGNgXGxmc+nFXXWsHaGikRAsVCyA0hAMTuAD5k0ZIr5qGm7zsYbVE3NTs9KKAZNRwJ0FLyJbVbe9f3QDGEo4cOXbh+be/Cv/3Nf/9ZZyscPnToUF1VR44cO7axt7e/efTo0bsOHz322sO7hzbPnju7f/jw4YsXL7z47MbG6IW9vf3zZ86cemFjspEaXWNjMoaPA0JIaOc9QvS46aabYLTG8xefx3gygbMWXT9HU7OLISUmIO8dHHBPqwxVVhvYqgIRxweGoZfqJs00ciJQkjqwkFC7BjEQUvI8kBoHqCiOEQMfPSu5VQ1NHp309SrNw1aIfDigDF+fi8UCzWgEYx32r11DUgqHdg9h0oyw6BgQtnf9qv5P/rO/+FN/42/8zPfd+5GP4XOf+UP8+F/8cfz4f/TX0DQ19q7vYWd3B2dOncbTzzyF9773A/SaV7/yufls/tuf/tQf3Hv46GH/0tUrWLRTKKugCdylvLmJ2XSO2XyBo0cdvO8Rid0pe/t7OHL0CMaTMfbO7sMqh67roNkWgBiDWLEVbMVuksF7vkaIn08ELS6CFaU2qeUhpJDucwSFldu4rBpaOSRb1s7xX2qdHTh8aJhrucpnaiY1a8WHorYy8D4gBsJkPEYITC4fbXJeOpFC6AfuJh+P4OoK1HNWOPQBQwgY1RXqpkYffNv1w7Px2pVLX/nyXve6173+7xw9euhN93/pj7/dqPlCWfN0t+gW663Eeq3Xeq3Xeq3Xy3eZKOqTMQ5bG1twlUOKCZuTDdR1hbbtkGJCVdWj17/+DT961x13vWOyMcZ8toAbTXDr8ePYbEboux7T6RyLWYfbb7kVp089C+dGePHFF7C1OQ5Hjx79/UceffQ9Z86cumwdA4q00ZhNZ2w3zkrSwIqkrZyoDqIsyEZSKcm7ymCqDUpVDg8KovZqJfU4SuC2eSjmTFkeknPNrhZVgoQiyrMzlX4e5xybdJWCSgpErJrGEIR5lUoNUVKA1Zwl08bwz0gyxCi2LyrFgB5tDW+ySyYuVzGx4mO05UogzRUmbIDmnzdbnbl+iVW8TOBlsBZnf4ehx3Q2xaFDh7G1uYWnTz595cGvPvDEfDZ/9MzJs5+vazf50T/7Y3/q2PFjmjJtGhpJFJVSMSIqL+dEpS84se05kSrduPk15fomBoNRTGjnLYZuwIsvvYCXXnoRN990M3YP76qd7cNXY0xf/v1PffK3/t7f/3v/8Nd/7Vf/wR/+wR/+zuWXrjyxtbUxh1KwBti/fpXrmhIPpNmcbqzBeDzCqGkQKLLNkgjD0GMynsDLhtcPA3d0WgtrHZq6LiC0dtECOmE0HiGEgK7t0PUdIiX0fcs2YZ0HwVRqd/ggxsh2nu2VTvLCRtTTru2gkirXSd7oF+eBHMLw2x6gdEIzGiMGVtl1HhoUXyfWOlhj0A8923VD4N7j7GygBBJHgLFMGVfEToUQOReutSpDhYaCNjxoB8/DjdMWysi9ohSIglRUEUZNjd73GE82MBlNOOs6naFdLEAxYLFYoKpGqA07DLq+awcfrs4X7Qsx0bNPP/3E15+/cPHLp5555ovX965//uRTT33huYvnnnjuuWef398/mO7s7sIZi67t4SoLV9c4mM2xtbkFHwYQAXt717kWzFnMFzN+f2OAztVkSg6pknT5aoUYI7Y2uVvYBx7YMl23rkfwgwfljKvmgSxnTYeBIxWHdw9DJ67aqasG/dDzSx75uVG5ip0DfYdIAdoY1K6CtQbDMBT7bj8MAADnHEcSNHDl8iXsHjr09t/49X/9i8eOHj1y9epl3POqu3HmzBncduJmHD5yBMryff/CxYv4xH2fwDe/6Vum505d+PV77/3YP3nLd3zHnALh2vUrqEeOM7rHjmNjtIn9/T203QK7O4cQibC1vYOua3H48GFAAdf3rmExX8AHQtOwyyY/E4FUeAcU+XpV2nD9GhGMsSUKwTlqIbwrLTETdtqo7BDRCiqLxPmZJ6djRvHzIwFwljPSpdJMDoKIxNkiNWkUSR7vAk8w/HxORNjd2YE2Bl3XCROCn/GVOHkU+67RtS2GGKGURuUY5BbB75U1CgoqtO3inDNm79ixo2/aPXTo+0fjcer6/upstv8SFOgXfuHn1zuK9Vqv9Vqv9Vqvl6PCu7E54Sxqiuh9y7Ue9Qa01pjPriP4gHoywahuxt/9Pd979+bmJi48dx7nL1zAm7/1W/Atb34T3v/b78f2oS2cuOkW3HbnHTh27BCefPppXLm+h5cuvUSbGxtf/uSnfu83v/bQwyfr0ZhVtEjo2h51XUNry9kqzWqMDwEREIWTeNgjISAlHqCY7JmgkhG4SYJKeRxUPPgmVgK0lg2v2DpZVZPuW4qlaihb5pw1bCMmzjMDCtGH8nFJs2Kch2NrDRQppriC87/WsQJIFJbqA0jAV5ptpjHCWgtrLDxxhjdRQiRa2WxK7FK+LmfWAGVMUVCaUYMQI4a+hzGWu3Atb/6894hxQF03GI1G6LsBTdXA1Q7WaRw+djgc7M8+cOXK1e8D8A4j8Kq8tL6hiKjULWltyp+4qip5OsQMp+HP9T5i0bZAIoyaMarGYXN3A1evXWk/8clPfvaTn/m9Tz/y9Ufu7/v45N7etWtt3+HIsSOY7c8wasZYtAuACDFx/2k3DIgp4djxm2CUxrX9a2xpjBEHLedmiQKiIlhnEFNCN7SwxmDUjDDd9wJ9Srh87Rr3BGuDSAEICf1UhhLFSrSygJVKHhFhEYVQnSnhJMqwMQZ+GEDEhxpd20lnLitTigAvcDKtNddcEaC1RVIkBylYHiLEBEJgK7NVoowbOGvQdp04AQYhPptlh3IiKYPWYrNn1TIMQdRewyCt/D9aIYQAYzSqqkLwHjFFJJ9Y0ZZoPIHQ1BUWiwVCDLh27TJG9ZiBURpoRg1ACfN5B2MPMB41sK2DrixG4xH2rl3BeLKBphlhvjiYaW1mu24HQXm+R4xGiAHtYgFjHOqmwbVrexhNxrBWY7o4QNM00HJdO1vB+4BEqhxwkdhn66pG13UIwXNcQGywZTj2ARvjDXjfI2mg9x1i5OHOWH4d/OD5tYmB7cY+4GB/WtwmMXqJNeT3lWBIwxiNEPh6ICJEyf2zvZdgKwdjamxubCApYDafwhgN6+z23/rbf+s//8bXvvauhx/8Oh5/+CG8cPUKtg8dxaNPPIF7XvUqhsEB2N+/jrvvuhvz6fyL/+bf/fq/mHftfH/vKs6ePcuW3WQl31+haweMJ5uom4ZdCrXFlWuXMdufIsWI3g8Yev5fbQyms32OP4iTJZEWFp9ClOx9PgQjee4yXkHLsyrXxyX5/w0oxQJMywc4yyeLksOxJOLwsuebVvp583WcwGp9kqHWCOE7JuJnxUDs5kjA9esHAjTkLmAIEDEGQqSIieMavl4PsNbAe4+mmQA+wZNnNwdpbGxOUDd19+xz5z5lrdn+wR/60Xd99g//8NuOHT369GIxv+iDP7/eTqzXeq3Xeq3Xer1MFd7J5gQKGkPfIYSIIXLPbVU5zOdzGMs5y0OHDh37cz/2Z//To4eP3AkVsXf9Ko7uHsFDDz8O7Rx+8IfeCRBw6cVLOHvuFOp6hGdOPYO969eefPyRx/7Vk08+ea91rqXICpfSCk01YpLt0JcOYGczXEVJpi0yZMgYhOCRUmK1VWlRU3kw1EoLy0qooMUrx7ROAQ/Dmqw6cG8pk595JVEn2PKsyhAMgKthxJ6cB91MYdbKIEbe3FVVzb25IZTsWSJWB1mhFgK1UlJ/JENlAUYlGZ5YIc71NSHGUhHDGWRRChUTeLNaku2ECQpVXSESb+65GqfDdDbF4SO72No+hM2NTSwWc5x65tzVx08+efXb3/bWW5Bw/Pr1fTseb0AZtVRs5HtmxadAvwQwo4tartniS0AYuLKkriuMJ2PM284/8OCDz3zy9z/5wd957+/88i/+3V/6x1cvX/0MJTo/my/a3Z3DmO1NEULA9GCK6D1GowbGWcRIaLsOSIm7fRN3+87mM742fACIBxXjrOQHFfzA1ngeXjSsqziHmwgUA2drI1soSbo9tdIwol5XVcV51xBRVW7pBgDbOrVh+FDugCYKgFJcW5OBOop/1pzhZRCSKzZoJcCqGCOMsSv5cZTDHM7vSmUPJWhjpKuUAHAtlzGWbahqeahDMbL6q6XuKvGwbYwumUxtDbsqrGWrfZJ+X7H+xxj4AMcTvOd7cNSMoY1mSq5EEow2UIlJxlo6i4eh52owIvhuKIq8tVyr1XZtgcoZpVDXNWJIAjriOEPT1DCG89XBe7T9QuIMGtY5GPCzoaprPgSCWj5TXFXI00rxz0uJijXWB66TGvpBVGBCSuCIg/TV8mGAZQDa4Hk4M8sBLFKEUQqucoWAnTkAxlg0tSiGIbJLgAh10+D4iROwhg+KLl9+Cf/B2//Uj//qu//l39Raj168fDEtDqZqPuvwN//mu3D3q16F6cEMKUU4Z/DSlSu48/Y7T/3K//wrv/zcxef+eOfQNs5fuIBFu4BxFoDGZLyJ2f4Ui3aBZjLCZHMTIQzwPgjgi63WTdWgakYMPrN8XTQjziD3fb/yDNOSTZffHXHJSigP0MxEI8nmahjHzggtNW48tNLyKaKxtEEvZ2D+GsSDsMrPdwVUzpbX3hiLSkBw+XCQUkHmccWWBlxdyYFngjUG0Px+xRjLwSL3uUf46OGqCnXToF8wvK1U4yW0PvpLd9x5x/Mnnz753O7OziwlivPZ7OLP/dzPpfWWYr3Wa73Wa73W62Wo8M4PFjDKwFUjOGfhmgqz6YwhMc5gc2MD5BPqujry2JOPHd7d2YJrNDa3NjHdX+B973svfuq/+Cl88vc/iztuvwWBErYPH8YTTz2DZ8+ciwcH1x/0MXzx0O6h6fX966XytutadIsFrK24g5bAmTKjoQyAEJFSth9rxLRiHaUoKpyYmRN31XL+VCNpgAJv+jXk5D+hUGiTAIVirgKS/hytFJS2SzBKWubPtDLy+alYnpNYpBlCxQcFFJejdkpSSSQU05Q4I5iDa1r+M5OgKQ+48nWsdUWlBQqjizNz8nFasxqoUoKSIQYpwVjH1SApMr1XKRASRpMGSapBnK2ha4MTtxzFyWee/vhP//R/9Vhoh28Lw/ATv/w///KPfN/3fa9dKQnhXG8iVlfK6yqWcQIrW5F/F6sVlOUs46lTZy9+8AMf/sozp575+Fcf+Monzpw588LO7hHceuvtCH7AbNZiOt3HuTNn0TQNalehqceo6graGDgYuA0L7wMoEsIQcW16HVorVLVDO58jKSO9sTxkdV0LZy3atkXlamgYPsBxBinEUm3FBxOmWDZ1HgQTV/u0XVsOGWIMxYJJlFBXNXz0ywwuj3P8PgnN1hjABwISwWiLxtUY/IC+F2s05Pohfl8jFCpn4QePmIhtndqg9518TYUoBypOKorIsyMghiAXlUJKCuNRg67rCplcW8AngoXOTVliNVWwhvPVbd/C2RpWa4SVQbvrelgZqL0fCmBrtWonBI/JZCLuBY/ZdApjFEbVGMPgkRTQdh2apkblKrSRMB6PMfgOChrBe8k1M83X9x7WGMym0yW8iADnqjKctt0cRlkYaxG8L4dRWpniRojEZOumrmUQE4q12MQBoBmN0C4WsM5x76z3qEZjdoCkxFlfbQQQFuGHyPefYNuypbf3fGiytb2Jru0RQkTf+ZJln4zH8J5Jz6dPncTW5haj34y9+yd/8j/+KWvN7lNPn8LDX/8avue7/jS+f5vhbM5oTMYjOYDTeObMuSfu+8h9v/zAQw99dHfnEEKKnD2dVPJaynPDaIybEfq2BVLCfNEihoC6qtF2c66CC5zd5teUgXpD57mvVnM9HAS6xpAyLR+nYJ2BSqocEGity0FJtjXHwC4FayxiCiDpHl+eNMo7levm8ulkeZKqcvBIIFFqFazjw6HBhwK+Sklo9cRuCGsMjHNM3FcahCRd6C0fUAXCQH05MDXGwlWW/y0KEVbl7+GRfA+lFNpFf/GTn/j9jy+ms63ZbFb1fd8PfbcedtdrvdZrvdZrvV6uA28IHqQTDu8cQeUqXH7pshA0IxIp9H2Ltm9x9NiRO3/0P/yRW/tZi0svXcQ7/8yP4MKz5/Ez/83PYFyPMZ0dYDJuUNkKT52+iCMnjuIHfuCdlz/xiU98+bHHnjjnnOXTdDAp9vbbb8Pe3gEW84XYgi0oRQwhsrolA6rRlqt+JLObBEyVlNiYFStk2eKcTbdas60ZCTBalYwvkeTGtNjx8pZKqMEhBoEHySaLULp1cs6SLbs8HGmlEDwrc0hgWquRAYqkl9JYaK0RI9cecbaYe1ohii5IBqmkpMaXeHhUGtbYQnpWKUFpI3ZrUT2IVW/++ZSoFxY+BFjNqt3Q9yClpTO2R/SEswcH2NqcoKkq1JWjRx/6+lln67N3veL204v59C4Ab+T9JysjIXCOM1ke3pS8fkRJNv5KwFHAMITw8MMPf/Xd/+LdH/vCl7746fl0/vhtt98yv3btOqqqxtWrl7HZTzBbLJBUQu0qzhhvbaBb9Kicg60Mht5jd2cbV69dxXw+B8WI8XiMycYEi3YGpITRaIJFt4D3A7p+huiZ0hxIMt1CeFVKIfoB1jgACrbS8D4IiIzzqcnwhjtQZFUoRpBArWKIS9+A1iV7rUW1WxLEE3ewGn5/lDacH6Qonc8r16H0ixrDm/EYA/ok8DIYxLisHqIUi62dD2w8jLIM9FGqQMaQgDCEUjmEJNU8IXJtlajQSim22QfOYRZlTBEf5mgebJx2bEOlCFdVfG0GL1EBVsibUQPvOYPfDy2sla5la/i9GQY0rkaS33PezrnPFglKJThjYFWFKNl4zhwzYd06Hqozic5ahxA56681d3o7lenqCbayoEBleFJKwQ8BMSw4DiDwI0QCJVYfm8oBozG8H1htthX6MMBqC2sc15+RZ7eJtgxok7adGNkenoIq9Wgh5AEsiVK9BGVxhzJXHnVdj/lihu/9/h/44W9587e847HHT8Jpg4ceelwdv/lmfPs3fxu0VggxQpkEqy2+cP8Xn33Xz/zMz734wksf2trdRt2McfXiJUQC3LgGYoIPLaZti8nGBHXDtvT5fIah77C1tQOKQYjUI1Bk4rTSJDEShRAGbDSbMFqjX/SsaGt2JKSYK9HkaSvZ9KzKIjHDIHe3548L4g7Iwy2Qe86zQpxNzuIekY/LPek5by5niACAQF7uX7aYl89V2d5Och2LhVophgwCqCuHPg5omhGM1pjLv0WJGDDXKwWrDbsBwK89HyIGGobuKgyuaujiJlmv9Vqv9Vqv9Vqvl+nAO9nYAkWP6cE+EgG7hw9BKeDq1Stsmw0EpRNe/ZpX3v3m179h5+MfvQ+T8RbOnXsOn/rUp/Fd3/3d+MZvejUODg7wb37j3+Kuu+7GEyefhrX13uVLl9576cqlz3ZdN+96xZtQk+Csw8H+jAdaq9H3A5y2IAIqUyFqQt91MJUMepILXVb5qAKIUmDrMYfMiO3KYaWiCJylW+KdUbKOLAeoMggjJMljalGOpVpD25IPTJFk2GaqpzIG2lCh6WroUhuitOZNNcViz8sbN6U5s8h2WhmAtOFBx2jZpHtWHa0BpcDWYbG8qkRFfSGp+GC4E6uvIXCXrhLrN9N9A3Rq0HcDjGE4zZUrVxACYffwLt7w+jegXbS4cvXKw0+cPPmxHwNeRyGaYRiEUmvgDFfh+IGHQGs17Erud+/g2rV/+A//8acf+tpDnzh39txnz549e27n0A4UEp579hzafoC1FpubYzhjceTIYWit0bUdYoxoFy2aUYPZbI44i0gxYj6fYjHvsLExRtAa7WKBwbPCuAg9qiqxpVk6dLWRwwlheIUQ0Ag92VZjprzmS4AirBwOKDmoIMVqFQXOtjMHilUua7K9MQtR8mfEwwKr3/I+EyFGYlstRX6dEmfSY8oDMmRglS7cfJ3JQU4kwhCWXblKsSUYEUJgVuCxnv88hih/zDRqo6SDWmBuVVXxAYVA0ELkj0+K4XVB7Lh5iLDWSi8xW+izjVRbtksPvkflGiHhBtjGwVrLA5pSQITAnBys48xttknXoqRppRHCAK1cAcFxu43mryNUdqMdDznBizLP1mOtVYkBpERM4Y0BdVWxmyMxFZwowpgKWmm4yqFrO7iKs6D7+1M4x+6OkCKs1YghK4WaB2EZpPJAp61G8BEhLeML3AmrOIdsbVEZk3SZh+i5qgzA5uYmZtN9TCaTm//7n//5P//Gb36jfv78eVRVhb/wF/4ijt90HBub28w0iBEREfv9Pn7tV3/1fWEYPnR4d5fdA5RQWYtKV6CBEELA4D2qykARIQ4Rve8RIx9szGYHMJoBW5xzpgIO1JoZCRGcvWf3TIRKpoCjmN5skFTk5xfkGk6J1XAt9xF52GRRVw3b2/2A7H1etrLJA1nxwZpWmrPsKTIAD1J7JF3rWltoBcQUuRZMKRiJBxipREuJxGnN3yd6ti1H6Tsn8AGlUnyQlCgx7E6iMST3bAwBBEIfPKqq5h5r+Xeo7VpEebZba2Bttd5NrNd6rdd6rdd6vVwH3vGkRt8CQzfAVRWs1pgezJESsLm1AWMcDmYzc/zYsdtPnzmV7nrlXeqWm2/HZz7zGfjYwjjC/sEBunaOw4eP4PNf/CI+8P73n9y7uvcb24e3PhwpPWMc5/XYupmgk0EMxMRR59D3PQIFJA1WZ4ZBCLgBxjCpmGt3qSi1kEE3ZzmX2dJUsrYyBhZFLIlyC1pSQRnKIn8utFrI18zDdZKNExEPGMZocGMQD1rc/LIEYmX1A4rzkcUCmEnOFKG1g9Gq1H2wVTaxpRLA4AemL0sHptJKBtkg9Fip4LCsuDFtW35GpZFkKBuGnm3CTQM/9DBWI3Qe0Uf44KE1YKzG9GCKM6fPYndnG4tZ69/z2+/9l9/4Da+953ve8T0/OdmYcJ2IQqkDqSpbVBYk4ORTz5x//+9+4L4P3vvB333uufNfTT7tdd0Cd955O5JSaGct9vf3czwPSBqj8QTQABHYHhyY9J2tssF7WGMxDB4hBszbOfeBZvKuqJ6DZyKuSgZVU2OxmALg6hjrLAPS+lZyz3ItlGuFYTYEFEUzhiCgI1ZCjWzL2Q7LQxBvqBmCw9287BHO2W0G8RCMdQJHC9DKScetqPryuYX2rBSctUgmMeVZhumcD865RYi7Qct9QdHDVI5zvT1nFrM7IYo6r6SDlyJDlFhYE+upZkVbExWirga/FpChMiXunyWKrHpThDUWtav50GoYZBBYMMRI7nkKsRw+UeoEJ6e42zqKTT/xIGitFuuwBcXI9HhblWcBE7IV+n4orpC6sqDEALgon6MVMB6N+euGKEMKoJSBsQ5936HrB3ZFREIIkvP2A7QyaMYNnHWY+Rkr0KSkTkfDSmUXW1yZ6r2xtYn5dApCgrOVKLgJSDxIej8UIJY1Dsnw4cEwcJ720O6RI8eOHLpt6Du8cOECnnjsMbzyta/B7bfeUpwlzvEw99WvPPDU/V968D3OOVBI6PsBZ8+dgtIaW1s7mB4cwFiN7e1NAArd0CHEwBlnV2PhPVv1W1bjm2aEGBYFOsfXlZLDOL7+q4qruIa+59eSJFZSnrFMJs8Z2YQkBzrsahgGza6B5TGT3ANmmQuWexqJh9k8DiNRARFqLV+HVFGWlQzESPnAyDA/INe9KVaBkTjDbqzl62nwmPoDvs+DB3SCtkoy9VwjZ62BjwOsrVBVNeazBWfgLWfGtdISn2Da9nqt13qt13qt13q9PJdRyqCua1jnGFo1DNjcmsiAyhuJumnGP/ETP/GXv3r//XeGmOw9r74Lx285glfcdSdeePESjh07ht2NHZw4dgTvfve/eu6pk0/+45tOHP+dqqrOPvvss8k4LeqKwcZkUyiwAYuhRQwRWxubUFqjb1vJS/XQ0GXPA1FaoZZdsGxX1mW4hVQRZYoz53vlbyTXpVbriYDl4ADNuUBosSHKkKAZ/JRSZEsl6w2sXuRKF1EVVwolpUaICblKFA0FVvxWVepEQjhVBqREJY6RM8QpQWlWrQCNmKjU17CKZJcgpKwaicLE713eYPPAp0U17hc9gg9sUZSBuh5xb23btrh8+QpcZUExHtx3331fmWxsHv/2t3zr67MFMVuD5/NZ+vpjj5z99B985nP/6H/7R//qF//u3/3Fj3zkg7/xwsWLZ+56xd1d5Sos2gVSSvCef6eD/SkUFJqmwqLt0HUefd9iMZ+hbwcQCF23wGLRIpWBQAasxGqLcRZOhqAYA6AZKGW0KbU9xljOGmo+0MiAqqyQJlGYtGT+IkVAS/6boihMvEHXeXiVwuokBG2+rqS3l0gIxzWUOArye6UgirDkG/k65k26c44/LibOiMu1pJTirlywZT5ShFamWNgLPGwFZEWSa8xDPaUoTggjiptQsynwdZ9/TvkeuaIo26PrqmI6tZeMsuHhJFfTaMXxgnzVk8CAirWVeODg4ZigDA/bfJ2SAM7U8rDGWp5+ie/HGESVi6HYxVPg66iuaqnG0qxqE7+/SQ4QjDGoKq5Uy7lSrTLGSLLOkqVnC7PUFznHg56P6Acvr0lkkra1iD6U/mzI++C9Z0BXdnIQg720FkeF0Qy7il5U5iTPGn6vmrrGZKverOvxWz78ux+9641veh0uX7uEvYM9vPENbyoDr9Ya16/tdb/0C7/0Tx76+kMfbEajFFPE3sEebOVQVdKtGwNGoxFfc5p/10XbAgKxG4YBMRKqukHT1KCU0A0dUHKvVl4PKs8cZ53k3SOMEpjeSg3b8jkrR0lJQFNawhmJSfgqg6pWq4jE8q2NhrWOq9USCngwia/ZaAvnbAG1GaOXnueUoXASh0F26MgAr1R5/lkhZ1OUn08DznL1WxK1OqYIpkLw/ZuShh8GvjatRiQPZxy0NfCSa44h4OfXtUTrtV7rtV7rtV4vT4VXG4MQI7pFh8o5QAOzxQKL+QLjZoRAAYePHNl43Te97q7f+trX3B233Z6efvJJdfLpU/ju7/ounPjm23Dm7Dl89IP/HG9727dic3v86GjcfH68OblY2abU/LTeo6nGCJLzi8kDFojEVSGJeAOeYmRystGl5zGrtUgJKqEAYpawkyTKg9A2QVKvKr27WrodWZYtyiQPoazelY05uD9W9lGgwEpEVTu2uBFDU4zSkOINaGcQhoE3seBsLecjeVhTia2hCRFaW1hruT5D+oVzRyjXbMim3wiFmnjwtUJ5TnFJzs2KSBLQltJa4D2BrbNGw1QOfvBo5zMoZTAej5kYK2r7ELguZHdnF3v7B9DWoOt7aKUwnc6e//v/y9/7b3eObM5+7M/8uZ8Yb4x3277z16ZXH33Xz7zrw1/+whc+Pp8vHj/Y3++b0QhHjh1F8BHPnjsLYxycrbC3d8DU17pCM67hrBMAmUZdGQx+wNAN0Fpj8KxYUyIedENCoB6TZgRra3TBM2QHBBJidxIqtzIaiviwxFUOCopzlkkqp6CWm2S5pozmIWtJbc7VVnKNKMWbfsZ/L22rArZKOVMuf08x8nsqf8h5WyZBQxmBliVoTUIJd0hECL6HpLE5U6wUnGEytZfBOInyxcMulp2+McBaBwqRa5QynTnbqiOD4JjeDKjIA7IxYv9EFGsnE8/ZHswDd4o8PGZljinDcj/J/Rh8KIRyJt5SIaUbwzbYGEK+RaGFdjz0HeqmBpFGMoB1DsPQwXvOnTP9mmRIJDhrAKntyodNiQDvO3F8yGGT4WF5PpuXP4sUC2gMYoENA1//dVVnk4LUNbEaaquKr7l2wZnryIPN0PcSXyBUDQ/eXbuQnwsy1InrROzqueqrkKv7DnVd8TVpDfauXr/y5BNPPHn3XXe/40Mf/oD75m/5VvzYn/1xHBzMgZSwuTUBAPzCL/7dP/zIxz70gc3trXh9b59jH8ogRa7tggIm4w20i1YqqwLCwEN6jLkejKvWnLFIgVXtZjTiw00CmnpcYFZ8cCGdwdLXrrRCCuICkOdwthBn1lQ+QCipVpX4WZ6f1yS6sFbL52wihGEQKJ5lZ0FkgFn+Pn4gOHG0BHEf5PdVld5l/heA1WBILzKJM4YVcYY8yIwfA6IGH2YJN0Ipg9F4hL7vMPQDoPj6cc5Jx7OCjwQlEZyUKMeP12u91mu91mu91uvlOPD2bQdtNCaTMZpxg+t716EGriWq6woH8xmOHD60q6FvevO3fqsZjyYpEfCWt7wFDz74IL77B74Xve/Qti0uPPeCjz48FyNdni1a3H7rMVTWYdF20EpjsZhBK82bEBi4xmHoeoTBS942IbJEyspATKVeKAsJ3GnLimfCilIkamv+/7VAd5LAfHJ+FtnarLWoxWqpkOWyDKVQNTViiGWTX1RBpZcbZ8sZQ52IIT15+hHlw2gLSBbNaIWoDSrHMJ8+eN4kgzfK3N3LMKXoAw91opJVVYV+8IAMp0hJal3yUAcoo+CcQd+yWmOshTaKc6SBCde5f9UaJk7DAEg9/OBxcHAA7wfYyiIMAQfTGQ4dPgyVcOFdf/1dP/e77/nQ7+8c2r3npZcuX7xy5aWvPfjAA08RRTLWYmt7GzcfP4HLl6+i77jeJXdaTsYbYpWMZYiczzpYY+GsxWw6Rd/3mGxMEAaPuua8X9u3XJESgCH0PJQlVs1CinDWwlWVWFkDgvelkoYVPCU9xZqBZ/K+5e5ZFMWdBzidZA4WF4CV1y9GvgasVpCzCBk6WT2yxnGONkYEgUMl4sZla9gMbS0rU1w7ZOTwJaFddKwIKyZCsxwpFHEhiRvLedO+75ewNbFB53wq5yxZSdOKM+AaQCTu8c0HJyjOA6likeGZtKh5SoEgGW35flqb0tUbBe1sBEDHY34qKlq2iyMqmIpVLypDM0r1U/ADAIW27zl7qy3atgNA0gPMXmdtVFGiQ/DcfywDRkyR6fKmgjEave8AqQqKPkr2WBW1VWkFa/l+YDUwiEJcYQgMlLLWcP7f8L0X5TCsqRsMgxcbdcWgrMj3b0iD9DJXktdnp4bWCkZXSJGw6OfcDx2Xbo/K1aAYpVqr23v8sccf/Gt/7b/sPnHf77k3vOFNsMYwpVwO7WaLaffilec/bp17ZrY/Q91UoGDhg2eL9cAd3EEzY2A0ahAGD68CalF2fd+jbmq+9toFW8o1H/BFigAltP2i9ExzrVcoEEGjdbEbG62LfZsSH/RAQIEZ4oXSx5slYJTn+TIOkXkMJBBBzu/mSAlf28uvZW0DaAU/545ko7kbODs2mNmnoWDkGtKF6pzBaypX16UEaAutDFv6lSlOB995UEqo6goU5T6TQx2jVXHmRAoI0d9InV6v9Vqv9Vqv9Vqvl9fAq8TKNXiPOCf41mNndxfjzQmGtke7WGA+mx+9dPFSbZXBhQsvqq888CC6bo4/80M/iL7vcevNN+E7vvMteOrJp7pxMzlIFA+uXruMSy+8AOscdOK8qR+km5ECDwEDb2BhFNM2s6LGnSEoO6OU4Con2TFWLgms8GQClcp1QyrlohDeYImNeEn65Kymcw4hsL1PaaZwKpZ5kBLg276opimBN85KQVsDteKmAxHCwNTipA1bScHxSGuZxBqjl07dBB89EFmFtpUtm0DrlplVU2kmDVvOfBIlGMtWPKO0dIWmol6rpARKFUVRd6xGhQFIAQADf6x1GDqPGFtUtYNVDuPxBkIYMJ/PoDQwqUZATFi0C1CMGFUN9ubXr3zk3g990BiNlNh6eOLETZjNDqAUQ6SuXrkGW1lM7BjeR3TDAOcsrNOYTmdYLFrUdY0jR45gun+AWbsQuyhbb4kYGHb92lUorTCZbKLvOu5vpYgUB9TVCEnbAsqhlKTflLK+JF2yWmiqqeQDtebsIaQ+SCWwDRUEq6xY5LmCJjGmGYAt9koqBy6iDpEqFwHFuHzfE0qePKvxfhj4cs7k76Rg9LLf2GiNkBhwlS3NSms4y1U9i/kCALh/WCdEGmRs5985Bj78yYM8b/ATdwkrwzneyAOtdRZQhhVhJFF+U9mwJ+J+VSWW4SSKlhGokY8emjJ1Wn7efL+hcOA42544PxuJr1PnKgxDv/xe0nnM5F+CdQauquDjQqqDpOZLs2JXN7WQ3iGDf5Subjn4Sko+LxVaML9nqtirWf8juKYGhYB+GITobjB0HWewNV9HfhgKhTolQiC+t4giKleh7zskGV7zQYeyrKZTiIjewzmGePGhAw/i3nsZkgz6tkVV1zhz6vS5Rdu2f/1df31za2MbfvBwhvP/APDhD37kyw8/+NCnjGZFHPIsVAI5qxs+KEJiWNfe3h4f5FgD7wNiiNjY2ARSwqJfiIshATDcUc1nLUgpCJVdIUlMAMTqdFIKStwFHHfxTJuX6yZnxzWWfeHZMSEPXqgVu/HyopEBeKVnOivFlFHPAtNatHM5bLTgr0zl0DLb/Zn8HRETd+qyM0jL78v3n60MBh/4kDEBRB7GmXwDlyw+xxNY5eYedz7sUUhI5IV4jrXCu17rtV7rtV7r9XIeeCtXwTqLuq5xfW8PddPAGI3FdI75vIU1BuNRvTMeNfrkmWvY2prg7JfO4iv3fwGvedU9+PL99+M/+Qv/Kc4/9zwG74eNzcn10PnFoc0dHPQzdNQyPCd4VBVTWm1VI/qArltgMtlAUtytmVRC6AceFECo6optnSEUQEqkgCiuNKXUCmxZVDKC9MUm7o8U2myO75LYorM11Ci2GWoFKKPFhprYFi3KAdSS9Bwple8dQ2SFr3wf3vmQwFuI+HvlPLIy3I/KJFMHilEoykxVpsBKSxQysDIWXmpvxqMRuqEHDaFkG430olIkkA/FLqoU26BVBNfWVPwz9X0PYxi8EwPB+xbWGjhXQWmhJLcdRvUI48kEfhhwve9gnMWR8VE+jDAK0XvM5zO2gSqNuq4xW8xAlLC7u4OoI8IQ4H2P+XSKuqoxmYwxeI9Ll18CkWdVSRFGGxNg0YK8R0qEelSj7wf4MDBIBqK6aHnviam9MQWEzhdyax74KBFoEKWRiUhiMVU5Ds6kXZXfR1Y8eRCSzG7eaEtuO6v7maKc1VituBoIgByMUCFwl6FL8r+2yjb2CAPDE5skG7NCpYrylXhTTUBKumTCY4oF+kVJBtwE7q3OSrXWbAVNbK7NPbskvzxJ1lsJ3EkbgyAUW83UM6TI13tRghMQ5JrUSkvNF0chkgB+OGdqYHMemFJxGpCodyl4LFFyEAp1hFIJpjKgkDh3S3kQV7BykEMU4bSD9wFaWTmcIPRxQKIo8CGGViXrpDNWw9UGMS4znsg2Y8XuD446a841U0JlXekydq5C9KwI8rNrYGUXOVvMXdkJwDAMYr12IB9gZMgNkZXkPMiFENA0NbQ2DM6qK8xnM7zujW/2SHpx8/Fb+VpMSSB4wBOPP/n8//hL/+M/P/nMqZNN04CSwny+gHWqZNZH0iPMLoa0kg8nHvo0H5rNZzMGvGkFUpypNtoU1wvb9Tm3nAIP+sYKyTgGUfz5mcVQM/k8vULAV1nHpQxgLpA0xZOrnGUua5tSnppXVz6ozB2+im37JTJCVABySnH2W1kj9GSS2EluEueqLWsN08UH7k4fuk5+llQcHiSANySFtvOw1qKq+JqKMaKqa4AIXcdOFej1tLte67Ve67Ve6/VyXtoPbInd2NiQSheFfuDsUlU5tN0CIdBGRDRHTxzF29/+DvzV//qncfudr8C9934MrZ9ha9Lg4Ycext7V/TPnn7vwxHQxCyEFVOMKFAlty0Mvb+4ZQOQ9bzR87KGsYhXCR1ilC5HUe6GsSg6QsgImP7ySnVKGEeXNrCCqZGPF/0uJpC+W/y5bElnU1bCOh8dMF2VLtNTGqCXgSEsvY87caqPLhs86B2ccDzQrNS5cGaRLTQ7E2pkSDxZasrnGMIRHGys1K0Y2oImreNqOAUZGw1ZVAQhZZ/lzDSt43gcMg+dXyPDAFSiKVTAW6q5SGu28w2LeQiuNpqlhrEHnOxjDkBstOeHeD+i6nqtifEC3aBGGwCRt66Qv2GE+azGdTuH7TsirFrayhTCdiFDXNZxzWMwX2L++hzB4BBkGKTGoa+gGxCD0XaKyEVVGganfWsBFlknTslGPktMGeJjLsCWopQqpMwitXCJ8KKJFM1pmeCE9uapcY0QECiSSloxvYsEvLgIBm2WAWGJrAl+rpEq2lQ9EeLDRKZNn+Wsts7qshmVF03seOjKkC1quz3zgojIMKpX6LQUUayznxKkMpVn9VkBRgZXhyABRrqsR0nlipdX7AB+CDL8M/skQrVy+6ipb8r5so+aL3xon9lViAByEPC2dqQwi00UBzHUvKSV0bc/3nADr+BApFTWxshUqx5ZdJL7e2NJsYJyGc5ZhQ1CIPpYBLVIUay5nMWMgBO+LRTb/7kQEbS1G44YBaqKOe98jyeFAIXZDcU2S/CxIXG9knUOIkTtfJee6s72LM+fODE88+YTPKnmgkJ8zwy//yv/0T59+5ukPbkwmZZBUhr9e5WpY4zDdmyIFCFzKIwTupJ1MJuwW0BXm0xn6vhPVWKGqazSjBs7ZAo3KM6fWHAWw2kklDxXYHz8X83WvkOKywi0KPCxXAknApNwLSg4TShFvZjOoZQevUkv3BNv92Y2hkipW6CSHihD7ODsz8j8MSQ4XExTlrD4T+I2WaiGBzymtUdU1V14lBaMsH6ARS97GCsBLni2UIqIPUs9likuHCeLrtV7rtV7rtV7r9bJUeGOKmB1MoVTCzu4WNsdbmC4OsJgv4KyBNQ513Ry/9OJl98STT+IVt9+JV9x1O/67n/tZPPrgI6jGDZ49fwGnTp08uz3Z/vDp06e/urG5ie2tHTz15FNwlYNWQF038BSQKKLrxLJoGP4Suk6yf7z/aUYNlLXoFh0y/Gdp/+Rhc1XtSkgMmiKx0WkjgCrpT5U9VsodojpXrnDeTSlwn6XYpJWRQVo248V2KRu5TH0lcHZOW95EMfSY1WGu8mDlljf+Qt6VGpiUmNaaf3ZjNPzAuTHlDMgnkGPVWYWIFHnY1ppJwpRkrFGsBhq7rFhJ0CU32fuhqClG1D6lIXlnBnJFHzCejOCJlcHgPS5fvgKjOT/MWWR+rX3Xy8/uEIRMO/S+1OVQZMAQd1ayjXU2XSASZynJE9oQ4GquwKLIQwRFgcEMPZx1UNogJCFji82XZKCixMAYCOWX0nKjLNoRv0aUbiD05gxvqY2KuQuX880Jcl2JqqlkKIYCDJSo+3oJTZOvo27YwIuaqVlp08RfX1EqFO0YqSibSmtYZWFMhc638jW539hog0geUUXEOGTWFveNqoQUqJBwc11SPqBJCmK/pZKPV2WKTzLQcL7bOSdKOMOj2H6PG+q98k0UYpBDA10OYyLRiiiXRCFNEgUIS9hcLrFRRnKfyy5tVntRhiKV2GnRdwtEIlhXicU5IoQe2gj0SA4suHbGiNIauSYnZfWe7eIUI+qqRiKFylTwwwDrFGCVHOYogedZhMiANOPY8psz0CoB3FaloQygs8dXQSqLwNdxGIDEyqi2CkpbPkzTQOi5v1ZRgqsqzBczbG5v6Lf/qbdbvleByjgA6H72b/93//TDH/7oP7v11lvpyuWrYs32aFyFlPgAQWmNXg2gFAWuB1DkZ9LgPVKMqOoRw+i0LbZjpyySSujCIK4FsGJKbPXn2IhCEscEU8KpOFkKXwE5Pq2WzgOlSj5XqUJHkC7fG9XdPPiq7ITJLwJEbc1gKvDBFsPb8nkP388a/CyJ0v+8LJ5DUd4T5HrESqZfcz88K8ZgZoMcdmqluQZtxS1itIOR7C5SwtB7AHQDrXq91mu91mu91mu9XmYD72QyYXWkcYgxYjqfw7kaiVpY50yIvjp85MjtR44e1e6Zkzhz6hSOHjuKt77hO3D/H3wZh48cxeOPPIXPf+GLnxjX449sbW++ePTIUexd20NT12jGDWZEiJQQBq4D0VDQxrFNUobQRAHJ8i6l63sow4MZ9yzGYkwLMYodVfJ6WizLKoGUDDJYWjELZTZbW6NHIgaWaCvqVUylhkgbAQdJrlAbA6s5P6uTEjJtRKSAytbQpkYfe86aDh5VVUNrJvCGEDjdKARXY8QaJ/Af71m1VlohCWHZOYfB92iqmmtSRRmMiVDXDQYfQDHByrCREhCil1oYtjSz+sHFGnnzZpRhFU1raKnd0IaptPWoQiSx98nnW2tgDVOUm5EVOmlC13aiYCrpSGYLoXMO3dDza5i0UF8556a0htEWVuyzQIKzlnOg0l8cKSIpMAhGsrVIKAMnb35j6ZLN3a45Y5g3ySotN9JlUy1DMW9a1WqBFIr6H0k6P1EyppSzh2BBMa3UoOTgodYyaEqWkjtsk3y9PBBphEKiEnK4YstxFCdASC1fK0khpoBEpoB7tDGS7+XOZB+G0kNKFOFqB1tV6NoFotj1K9fwdROXduVSZwQ+1FHGIHrPeVtxQoToy+vLtV2ZYMxqbQjELgnF+VoecFaGY1GYtbFQkUAhyJAr8Dgh3jI0iLgGR97bRLm+K/dec85Um2XvqTGsC0fi/H9IfGCSKGHwA1fGWAtlNCrN9lW+x7jDtRsGPrAIkQ+LPB9UsUvDADEhBi/dr0bU2gTnLDIJfvADd7aGBFgDawE/eBhnBYokVGxikFmMJLVBAaFnZbtyDs7VoMA1RrfddodNSVUPfO1ruPMVr0C3GC7+7M/+7L/67d/69/98e2trOjuYA8TKb4bvhRDRdT3GGxNsbE4wnU4RBBg1nkww9D1a38NqjdniQFwOSg4TCG3bcXRDDr/6oeMBXQ7oZMZDpISqqUAxwg+RD0t0NqtkuNRSoc3mmmWtkMQFpDedh95lxAAqZ8WXVmesVBLxpcgUcYhHh1QUWn2Ua1dJDnnFWi13ekwJGg5KnrvMO6BsrOcIABSgk7zfBiYDroyGAUMNtbFQicnW+TrPBzbOrnt412u91mu91mu9XrYDr7EamxubeOmlK1BKo++vo6kbbG1uwrD3bVQ5d9Ndd92Jt3zHt+NLn/8Crl66hHvf9yH87gc/gL//y7+C5y9dPv9Nr3vj048/8fBZ0ymoTuFgOkVTj7GYLUCR0IcOxljU1ahYyaLvOVuXWP0zRiNIR2YKJKRTgwgFSgFJcUY32zMpK64GSKRL3UxKS+iJeEyRRQOtuCKIEm+yo2TgspqgpLomCRBGm9UqGpnAFKGuR6BEMM7AJgsfeiStEGNCinzyT4lgrIHRSiivDHsJwReLn7UWdVNj8AMoCf01ZuIpKychEtNotYGCZ6uzNVBCkdVgEinFIJZDC0pLgBWBJIPnYWDQjBu0i1bALEAig957tuHmgSKw+tmMx1jMZogxoq4b7jitG/ihR0pgu7pSMDGBfOCh1VreNFsLP3hYa6CSLhVQVvo027ZHUzWI5JkwLPlA3u8qUfFTgQ0VEGqG48jwmPO5WFHzs+rHA5RsfnM3c1p2Mhf7bx6SeaxZsT9rscprqBShZCjGCu2ZAOikGNJEqvS9sntSrfTw8kEKMhBKapCUUJ7zz66liiUDvbhvWiz2AtfSlt0RXGPF0YBsKVbKLC3IKtuTpaNZBsoYYzkQgmbgUoxBbM16qW7LEK6t4YMqodtSCmJWVTcA4fLQ0LUdv0f5vjGqdM8SEQeP5dBCJ1Ws+krspkmeEUazk8Lkmi5k+FEqpOmIBEVLtZAUQ8eodMLKcEKqZEIjBe6yRoJNWgZIX6BkKqlSi6MURw2GYShfw2jD9VpQ0NoiIi4vzqTK4YwT8rqXaiYNtsI66Zwdhp4/LdL1h7769S8bXb359z/5hw/f94l73/fFz3/uo5Vz8yH08G2Qyiiu66nrBloHaM11Pm40hjUOcYilCipRgtOWDzeUYhs2lhbz7JIB8bXFz9b8DJAcdpJrJvCAraSPulj35R7Rmk8rmbNAWE6zfA9oLK95kkK3VG5WcJWVKLz5EKVQ9YEST4lpGUNggje7WYKP/O9D/vjsKJAe5hCG8meKCMoIHAtMA6dAHEWxpnQox8gHf1ppkBwAUeJDHi054hT4gIOwVnjXa73Wa73Wa71etgMvEeHyS1cwGjXcwdp10Jr7TCfNJu649c7Jm9/0psMUIs6cPoUXX7qEY8eP4pbbj+Mv/9W/hNe89vX42B/8wxdecfddB08+/vBiMZ+jamo0TYWhawFjmILsAyB5u94PvFGylitQAhMwo3SJWmu5W1K6LI3WAHGlTu64zPVEKfGAmYVApZaqATSkBxcFehKJeMMjljbeoMUl5MhA8pZYko9JrJApgiiIksob6K7lHlCjOXubs2xVNWJbtVRZKHB+j7O/hPHmJsKQKbEGRlv07QKVtawkGOmmjAnaVVCJh1BrrAzqJFAuXSqMbCFZi52bGLKVqzuUEoulysRcD1DCEALnYoU4rKTWJoQItL2ouRbRBwTwIML0U1YKdR4Kqoo7gClBWYWqtqW7mPPSoVi3IZteQoSxFjAGIFrWyCgFa/k9DoEBRdZaHoRD5KFG8WCSu5lRNrrLuipkQFXu6MxDc/44tcyBJ5GmqABk1bL+Jya2T8pwKCJU+bm0Zms4W+Q1tAypCcvcuYJGUlyFxP3O/PWtMoh62f9MQQBSCtLrK3UtkYqqTZKRNMbywUciGOeEFs3U80SsxiaQqHXshrCOq4ai0IeTDzyEKM0DkVoBZClh4QZipUwvld+skOUKpVUqb8IyL6+UqPWJR2RrxWEBJkorzW4CKl+UB36Gd/EhlELuyF0qxDGmQtXN1m6lxZYKvXSAJA2KfglAsgakVOk3ztdc7SxiCoBWiJ77w5UQp4NnZZMkOuE9H8DFQcB1+bBObO62stDgWiSSa8BoCyIeopPWSBR4oKKEJx574pn/5Vd+5ee2tnZvf/zJx57qh8X5phlBW87QMxuP2IESgLaTTl3DQ+R0Oi0VQEYy0AzV0kIBT3zN6SSgqSTX6BKKRongKoeYOKNNKbFDQfLQEOs5A8mWnc+QOznXUil5/wh8vWa3TYas5Xy5Sktiekp5EM796RwxWLnQZNjm60trA63A9XSU5BBTMuDl/pZBXv5tsNZBgQ8MUh66Y+Y88L1mNPcaU6Sl20By9BR0iQNwLlkVen4Ifr2bWK/1Wq/1Wq/1erkOvPN5i43xBJPJBnwI2NzaAFLCfLZAXY2SSlRtbW9sPfnkU7h69SX8pZ/6Kzh35jy8J9x05DZMNrehtTl49Otfm/W+x3g0RjfvhLLK8lruuI0xn8hrhrtInQtvojWCH6AFrBOzWhBDDoHxppZIfK56CRiSvKHKm7Bs0BQQkFbZ/qyXm2bFg4PRVr6GbKSURlKArdiu23fcIRwploqakjuEErAPYJyFNZyZ9CqCwJAThr5YIBG0sfBirxt6zqpaozGfzZFAGNWNZDwjrKnQ9m2W/DAMA6y2AtfS8DEi+AANzpwZy5sv33tRBjUrq6JwliFNacwFUqVheMOGIAcMvGF0dSUdl6bYx7OF1xiLYfDQRsHVjpUkJHg/wDgD57h2xSqLkFXtrJYrUzbASmlWr4MHEbEV3FoeskWtTUkhSkbSCAU2W2yzgEQp15IIj1XlQVdIzSmnvOWqkMsnK3+FKCuk7UzlzlU7ZcOOXE+UrZecUVzNDuZrlJVHURghdS9Y0l81uH4rk5B9CLCO66vYsVqOb5aVKzHCGK7ESSuE6ZQATx5GW0QKxY6cBLzGFGEq1tyUSHpF88ucYUR5QDQrUCldfvj82vIn5fsx9+tSGRrSShUQHxDxwRGku1gLyIlp26YQdPOgU0jHyHZqdnWwY4FW1GQSN4Au4DCGX2kenqW6SsmhipZe1tXfufeDgMgitHJwlQMN3LtMKWGFf8b5WMcHOjFX8YChYjxAAVrlkY0PIqxkirXWcKaSgx/OyFtnkFLEMPRwzoF0CqfOPvO0Uvrpuqoxbsbw0tMbQoQx/NoESqikqzofuogNhGt3VH7P2KLro8cgj9CcvWULOwnRnZ+Ngzx7QwSzBvKAKa8t08JzFjfHDVSJbCwzrEpq29ISnJYPTmg57GaFGGml1Cor9EkI+ch57nx7LmnIMnIXm7eW+ji+LlccB1GVgTXGwIccEQVWmCj/2yF08UhISsNYh5T4foLmPurVnC5n8Fn9ZSeCWe8m1mu91mu91mu9XqZLj8cTzOZzXLlyDbPpFNZZNFWD8WiC4D2uXL0cjx+/2b3zB9+J55+/iE9/6tPYm03xT/7ZvwapgPe977fxyY9/srv5xAlvrEUInMnNp/9KadRVDW2U9CAua4SywseKrULV1NDOIIgympU50JICW+BEYndVWjZPaQmPycCUFJfWuJjrYlSmjGZqrWQttSq9ukzhhQwJgLFGamggSkjCEDwiWBGp6xoUE9q+Q0gB1jjJGzKd2FiDkLjLMUE6dVOCj6xu1nUltGehR4PzdUwgZiq0MQYhegyh59cnAdYY/vymgTUOw+AFKsR0ZrYm8jBGAnph27BYUZFAMYCEhJ2VSvIE7wNM3sgphcoxLZcoIIGHba6L4SxyJEJlKxlME/99ZJUpBq7YQf7vDH3SnNnVojwPfV9Uwyi1TjlbmhIhxCBqOeTAQ4mDlPPbma6cxHOpipqUlSQhxq4SkZMSpanolYXQjLTMKOaROl9n7KrkzXDK2VzwYKeguPIGAnBSS6iWNlqUXAKlUHpsvR/k8ESJWim1LznXKkNXUjnbyDA3mbrYoisHElpr1LbigVRsmDzg8w9DKQlxlge0nNmEZGMD5UOUXCnENWFFOV85gBCfbjmJKMo6lgr26uuYbaZKSNNMESepbnIMfIoRMXB/qnMOxigYeQ+12K2zZZvfe1aKiRispMHXra0qJJUtvLEMrz4ERJl62HpuQCDMZjMMg1/Ss/Nhh2Y1vB8GPqgTJVVDS9c2VzUZw5R2QKPvB7R9B9b1jRzgEJxjEvx8NudDKefYUWEMrK0w3pjAOoveD8L+SuVgTgGwmntgozwnCBEhBrjKYTQZo25qVHXN1WdCGLfWYGOyAWeqMjMqGKmw8pxZTjwAUyIkyX2X9wuZ7E3lGuaDRQVFqlDMUSjjWLnmVFGQy5gq95xKN9x1WPnhil06ibWe77cEaHkeyHWa7/mYhDyfB9eUDzFzppydMF6qsax1TGOW+9k6s+xpV4DRrDIX273k7vl6YXU3xlXi/XozsV7rtV7rtV7r9XJdFkQYjxo09RgJhCsvXYarHCYbG9ja3kLvPQ0h4srl6/jWb3srbr/9DvS+xzu+662omxEqNcW4ctvXrh9oo6xYvKJkQ0XV0Qrj0QSUCItFK8OqcDmNhnUVQ1+0XvYtEkN6uNdUVK7EVjbeuDJBOBIPQQQStQbSSZo32Ss7EUqwtmYgSd7MKumxlZoWrTVM5cownAfOEAJyq2pKPPBVzQgqEfp+gDEOlWSBFRSstiDNdkmkhMbVDONSgDYMkVKKLZOmshhmrNKFISCmhNrV0Faja1veyENDOVeGopQi6rrGMHh0XStWvITKVWUjS4EVJQUFIyoFioU7FGqqXhmwMp0UkTD0Pat/SsEnv6KsMbAqeh7AALZRtos52wLldRiGXjbHCSkxvMhaC20Uhi4iIZYBj+FKktWFZtUrxjJ05I2p/ApIFIXAbJFSFGsyfyyDa/i9TfIzp5Xqk7RSYbIi1pb/zrbLVT1J6p2loordBCHbIWUvXzbbYg/WhgFgAMTWKtcakQxhCcmgdMAaw9U5iST3m/h1VtIvqjSWdVqkEMGdxEkOBhRMOQQZ/MD3gHTQZphQAh+UZPJ4ydPHIEOvvHTayJDIh1Ep52FNbh6iP1kuU9TsXHvDAh7fLzkHHbOiLF3Sq1nq4INk5wUgBbbSKr0cXDL76wYAksCMrHRlhzhAGy31MgwgiqJK6jz8xCg/x7I6SiuzPEyz4n0XGzgpgk5c/RUiyuAXV4bDKJlpaw1iDIieD7dUVn61grEaOvJr6LRFTDyA86FDwtD25dVMiq8lY/g9C0GOEsRWS1FquJQGkUEYInzgjH/lKiRK8IGvF+/Z+WGsgfcexnAFHXziSAHEzUBU1GjK3da0zNsqIWlro5Gi/M7lCljeO5CDBFVqneJKTEBD5TgBVkjdQCFhp5V7qlTP3VAbxh9gjWboVfTLzC+z+ZDtHEoZASCyVdmuRGmsYyCcH9i5keS5H6I8UzQfE5FUyeUDG+R/l4QOnunl67Ve67Ve67Ve6/XyW1oZ0Sq0QghcT2ONQTf06LpBWWPiEPp4fX8fh44cxtbmFvau7aE7mOL4LTfhwvPP40d++Ie2br/9Nj/4Hs4JXEktoVB932PeLtAPA1fj8NQgEB7OJiImOTFfql6JeDNR1RWM0qWWJ9fCcN9kKBAU2S+VXlYt6mQSOx/FiOA9fPBiTVVF7c1fm5XJKB2eA+fEwpIIap3DeDyBcxWP7NrB2gp15aAVKyEheAyDh3MO1hr0/YCu7+CchbUWVVVjMpmgqZh86lyF3c0dBM924tGkxqJbIFLExuYElWOKciSGZXFNEwOwcg2T0mJhVkrULpXPBZAQiyU0BvFpiqKt5X0gks7byATqnAUl6RctROQ8KEpXawhewD2GrcvQEs/NPaS8CVXGcPVMjBiGoRwM3MAVk/eKac1/YlAtAlASRTCJVzuVHtdsaUwEUFI8mNGSFLv0oaYbfpcy5ckhjIhMK7ZO+TlFTWbwGJWPzo5erVYGRoWisCWBneUBTSvDCpPSQnNOXNFECYPnDlWKDKZi1T+wFT9yt6pzlVCMxUArnc0kpN1h6EsXrNIKVuyYUV7PECLfV1XFfy52bB6kmSCsJaupZNOfLaDG2JKbhQK0KMpLsi4t+0qJs+V5SCnW5/xzS9du7gamGFcqpKhU32RXgDGu5EEFuy3/yW86iWoNMOgt+ogUuJIoq8wh8dfVypTsaMrXtljWY3YIaMP5+BhFxCb4yDndGJnWnnOrpaJHhkYmOztYa/ljYwDFiL4bAGg0zRhdz24Na6WeyziOBwjUjn8ujZQUFu0CQMIQBqa515UcPDAhWEGJ9ZkH2iW9mF/fYegRUhAQF7+3wQ9gMjfn7DliQpxT1vlQMLswDIwyYg3m50hMkR8j4g7QagmPK8wqQoG7KbVEvaWEGyFzKpX7I63Mz7nHt+Da5f9qnVuU1BImiJXsPTQKVB3E/07Ia0L5sEUeKvyckd8Vy/hLznwncRRY6/gQSwrVM0U9U8bXa73Wa73Wa73W6+W5bDvn3soQPOqGrXDaGAy+h49Bz2azrlsMs3tedRfOnDmFT3/qU3juwos4cdNtePe/eDfOnTvnf+BPv/P5M2dOPeeshR96aKsK5MUotnDmQVLLTqUZjeC955ynwIQYpBM5g6cUCMt8WYxMw0xRqkpWMls51Jkk10YgpJWqId5siSKkiPs+SUHpVDYqla2htS1KSAZRUYywjrOzxkc46zB4z9CnEFDVBvVkjKEfYHSNSD1/HhH6vsd4PEJVV1jM50gEzBdzzGZTFCkRQNd1MMag61s41Ljjlttx1VzD/vQAMREm4xE8PGhgJWg+70rHKoNXCJ4irLVwrkboW4bjSJZP50qdRDDWFiWXpyYwodRaBmIlpphCMoPGOBhRYBW4ogQy1PAhASvg2hgQWbanizqWhzIGUFnJbftiMTTayCBAJR/NlVCR3wfJaZZNL/cscTWRlmOOFFeYyiXEV2qo8iZcJb6eCCQW5jz0ZgVpacflTPfSHcB/pwpkhyWt5WBscmYSKBZeCDwspcRQI6Hr5oE7hCjKLMOmrHXoxdasleIDBYpIWpS2xLCsph6ViiHjWGUnQukgTmqZWfSeYA3nxKMM3loGGe/58Cn/QgpsMSfiSqVIedhRK3CqBApMAs8b/0RRYFis2t5gExf3QBI1T8nhBx9A6XJfKj6vyLyqMviQ1BYlFcswLc1S8vFJhnnOqOd8tdJGrhoNCNCtdA+nlXwp0srAm6AkI2yUQa4gQmS7vJKaHiBHmPnzM7Ct3Eulk1UcFXKIoIUmHKN0Q2uNlCJiICRwjZKzDtEzcIvk8wzH/7n2Rq6hGDy8HEY0dcNDfZIB1HC1WSTOIgtjqxCeY4wwSu5no+CqWrprNZJJiF6AckZDJ7O85rOdHzkOIoOt4cNNRBn01eowyxpxPizJ/PMM17ohk5vSir35Rg76sg1spe+Z2FLOZyax/ExJ4inFFSK3q5ZAsMp/l5VqZMJ0dvRoROLDoQytUnJ/WGehtEPfdit934mZBuVeWq/1Wq/1Wq/1Wq+X3cDbNAxK6vqOeyJjRIoexjjUtdNd13WPPfXotccefQTtbI6uW2Bv/wpedc89+NSnLuD1r3vDuc994Y/ed/L0qSe2NzcRAlOMh26ANgZaJXgfBZqiS1fq0HXc32pZTeJaHj5ZTxDLnGREXVUBmSrLgd7St6hloM6boQQlG3AmCJusbsXIypoQaNmWqqAV01TZ0mmKDa9yXMEzXyzgqophTIrrQKAU5osFNje2EaLHfD4HJR5Gbrn5Flzb32Nro2Ewzmw+xdD1/7dUgFtvuRUawPXpPnrPm2qmV3PfrnFs7Q4xADpBC4wmp02VYls1ZxDBnagpwYqqm0VxnQmuiaB5LuCqFiNdugKYUoBsxmXjmO3mSiEEggokSq8ulS6UmGBLYvtOYBAS98pGQIZooxlixpZYyfOlVZgMFYIyDxZ6pbKk0JdkE63lawjBVTKn2UZ7w0b6BgtzBvvkAxRdNvkqLb9X6enVEHsylq+FzNzZOp2xSSSqZpIuUq34WtZawYAp1Pn355oXg0iB1TGlYR0PuFGB3QlerJxJVHqTq4KWNCruY+bcbyAZJaRLVyf+ehQTjHNS05NEDVZL8jGWxHMt8LKYe2a15utB5ZcwreTiU3EXMBDLQFGS1yPDwRgMlXt2kdKS9qwBnXLPtMQNpF9Way1WYgGDxTxgljbWosrFXCEl9V/5QC0fFCmtYZRCAluQk0pwcr1yZRdnc5EPy4jz+EkJVCnxwLXaH5trtVhJDzcAvaLY2Zfd0PzfFPlgZj6bARqom5pV1MTVQipxZRK0FlCSFJZrrvjq/IIhaJqjF3VdieUWcFUlpPRUqpKU0nLYR9Ar93ciKnVvJDVKWI0B5FiB8BkCxaKMIkct8sGTRqHCl7c9S76rADQsnyNYAcYtk+B8gGW4jYs/xPBBmhFSc74Hl4org6QqgZexfV0OWCQOUVRkUuU+11ohhiCQNcm223w4ZtB3LfeYa6kci2L3Vsu+7vVar/Var/Var/V6GQ68bTuHsw4cu0wYjUbofQ8DhZ3t7XR1cxRevHhx/73veQ+c0jh8+DD2r1/FI4+3+OZv++aDD3/ww7955tlTH67rUZjNF7CGN/A5FwiBMWXfKqt6krOCRpCNPStGqVgPYwZOyTBKuYJEICU5B6kKWVcth6U81CEV6i9nFQU6FXhzx3UtBrZxSJJ1c3bZyWuchXEWMUXQIDa+RUJd19jZ3kEzajCdBjQbm4gxYGtjC8Zq9F2LfuhhNbj65//BuvD8hbKJ7qYLbGxtgRDgvZcKKYvpdCq/t2FVIxIiBalxUoUMnIgJztGHYic2QmglUTcpMlma876sUGtkAJUHwBCjXAXCKhSVihIGJ1HpKOXvscwGll5MDUQKUkOCFagRlUMNBkABK75GKJWBVGIbXc3YqhtVKBKKrip/hhtU4ITVbPeNvZ3l26obP2rZ2cv2x+KiV7ihgbN01yqmTGu1zEZCDnLYjSBOA2ix21NxOVCKnI2UvlSjWfk2yAFm7joNoZMBhjOKiApWOl6zvTWGiEBcyaMF4JR7rNu+BYjBWEywlqysAKvy/aNTGSX5dyR+hbVk0EFpdZQtOWaVllVL+dBASRcw5bMGSlxXlmvBxOIMtaxEgmYAER9ukdDX85vDXddKK7GZs8qoqLz7hSdAefgs7tiEkCJb0eWkw8dQri8th3R5MM3kdz5cSKXyKfd+L/0BQhqmEkQt0L0l/7ucFEBrViBjIhkkQ4YRFMdLtvs7ZxGi53hqJMzjwL2+iqFyKeZ7XMGa/B4G6dhmxVnpFWU9A/pkANda1Pk8RUIOKjXdQCnOL3+KtARWrbhWOD67hFat3Gmrky5KXKDcbMXus9IFHJEylV8qwiCRGbYkp+VwnBRfI7S8ZpPm50e2yEPAZ5BebI7O8PtBSKgtO3q6dmDQHgUYy0M0ESFphRRXXA7pRvV5vdZrvdZrvdZrvV5eSw/DAGUUYkxwrkbtagxdjxADXnzxBT+fz8Oh7d1n77n7nvTss8/hE/d9HCoBf+U//0u4+aabPv/8C8+/B8A+SKywiuFHdVXBWoOUFKq65oxZJN5sabb3FaInRVCMkvlMha6stEblnGRslWQLdYE9LUcNse4aKzlWyJAcy0CUwHY+70Ohv1rnAJXQ913JyBIi13mEgLZtpV6FN6NV7QSUFdG1HQ729qGVxWSygbvuuQu2Mjhz5hS6dg6SHO//25WEqHuwvwciVlai5P6MZuUMom64ysqekQcWlYdhLPtRtTasmGve5EYKUIbriay1UJZrmRIxA1YbA0CzOqdz7Q6rTybDjyRLm22vucLJGIPlKCT1JrnDVV5XEitqzoAW+FOhJC8HnxuspNBQmn+25ViqJGu5pKmWr7vqfVcrO3ZgSRPOmb5VElP50LSstcm54DINr9pjl32jy00+D0S5ciuJoqcKVVwqt+TnjrkHWgYloyxHA2ipRKlMoaZMXWZAkhbrePSBFT3DyhbnbzVC8PBhEOVaI0VanTZKb3SM3MOqtFCjFYq6nW2hOXdJOg8Vks3Pv5vWMkgv/cp5WEwrROoonbGr70mSvuelar60DaeIokKT3COKxFZOfNijtII2pti2s0KbCvEdhRwuTK1iay7OEUoIFOXal4E7UclOk6IbKOEE7iqO8hxUCrCZI0D5GoDUrfHIbx3n3EMMfMiQgOAjAMPPT8WvL4yS+DPnbZVRUFYoz0LeDqJe5yhHjAldO3C+3/HwG4kYfKZynzNBmews4H5Zkv7ibEMmiiUTnl9HvqhW7qoVe3I+WCmHErk3OgOfsnWgwNCWH1funYSSIS8HI0kJjEwVC7GSQ1TQUl1XK4o6oOG0k69HBYClDVfcpYTSpUuJJM7j0S167lGXj+eoAT9z+fCEv36OJSiztjSv13qt13qt13q9XJd1FVv4iBJm8yk0FCpbwXuPa9evxmY8wn33ffz3965ef8e1a5e/ezrfwzve/p349//m3535rff+1q/3Q3vS1SMeSmTTl5DYwqpYHfTDwBsoAIMPQEwIKsEaqadJXOMCSmKBZbAKj5+R87hitU3cBCObZ1pueGXI5VN+sbUqHowo5d7MJcE3RoKxGvVohKFrQSmhHtXcndkNUMagqh2SgFyUSvAhYnM05kyx9Ao3kwoJEWdOn8H1K5f/P3ujsu1vc3MbxhgMQxT1hPPQQz/AKLYnR0RYrWCMhiePBN4M8/DAeVAllT6IaZmfBaCIgS4ZHBZjhDMOPhD8MCAoXTasIQbORqplf62wjKQSiTfeRujE2e7Ke1uDhFgykDH3BOcCoJQ53mwdVdBATMVOnGT4kRdnqQ7mDW/Scs3wxl5DY7V3JMnHq/R/UYeS86ZqZYBdHbzkc5eBRXn9ct8zvwLQ5a+XmUcS5Yyru3gjH7NdV6ziWgYESAY5hAwdS6LA88FGzHpiAgDu1w2D58OLykpueUlDLkMfgCEFHpoyCGiVvq1iyWEmsdOq1dxtbs8lWjkQkKEnpkL+Lq9xLsLKFUTZvZFVdbHVlsx9VlzLcKWW9VDSPVxIwFBA0ohyCeRhnBLBCGwr0YrSqFZfs3TDYQUEXpd7Zvkpo8q1mdKSFG+0wRAHycirFUdrKod1Oim53FgJJrEZ53nPSkVYBNu6lQYQUOy/ORtNMa7kzgUGJ4qzhkGgAGc0ok5I0IU4jxSXVVgy0FW1g/e+HJ4wkElBW4b2xRCKCE4rVuN8gJQEEpfEHp3k8KUI2HL/GGXArvNUWrCVVlwPl5aTsM4ZYBBiSCVakA+6VAbZyWuiBDgGJMRMkpP7K6vtUUBb+ZonqQ0qHdkrFvTcw55ru7TijmyAyiHIxsYmhmGA771k2nnwzfZ+Y5ZVYuu1Xuu1Xuu1Xuv1Mhx4m7rBdDZDVVdoqhqLdgFjrdjRuPri/PPnH//qg/f/s/Fk/NJsf/aqb37zt+5+9L77/s1LVy5/crKxASiNvusZIOR55GUVtSp2PIpB9piKoSopAoqgk+EMqja8sZb8Vd6ERk9SB8O50JzP5OFCFVVAa83DNqXVWlBoDVSmYmW3iHhs/+0DYTy2cHUNDAPIE3ofUVXcYWqUBmmNwQ+icml0/QA/9BjVDY4cPYwLF57HlUuL/5Pd7/+r1bYdRqMRhs6jqi20smi7lnOzSQstOXCnrVWy2ebBzlUVA4uCKM+Zkh0CklYlR6mUgTHLjXOkbNvU5bVVRrOqJrbobEleKqiSYZQhTWmuQcnEU84ZL9V6LZtQKlncTPJdITnTUklKMu3m2ZNV4WXPs1rJ22aLap7MFPJAi7IZXwJ1pIO1DLjyuiCr0rlLVHbmq+VFksMFSFTi5WuqxZYM6TONQRTwFasvMrFcpRX6sAIlL0qXKJxFUcoQKh4EjDaIisQtwfCdPHzGEKTWiSFkIQzso02inGow6MgnHiLl986vRVqph+FKIzmQ0PlQQMvPlnPKupCWs+amEt2Qg1blMCAr7FQOMVLO3+LGOhoeQfnzSQZXfg85opBIlUEnUoSSAUvloTTTuKUKqpyxyFTFZGmSAwwwsCpfTepPKJnF0gyoxKR0Svyc0UkXC7XVBlHLfUTLAyaKAuIS54SXjLxWutj+rTGIgW7ItiZAhi0F73uAgAiIQqmhSTqcNcc4whCLUm+Mk+5sz12zAqSLOWce2Qqf6efMkVPFLpxjJUkI0UDut04lSECJf6BUXi9aPoeK/irqrDJMqQYhhL4cYCkOAReXR3ZJ8HPGCGFf8y9e3sMEZZYDOt+TrNCrwqnL9WXLCrFYDuMI2rpCRlfiWui7TqrrovAljKjOzCiw2mKIfr2bWK/1Wq/1Wq/1erkOvMMwwBoLqzRCDNz3GAN3FYJ7QTXMYr5ovwRtTjfjyd3v/cD7j5x//vk/ArAwxoBiQvA9tNawrkYMnhUNyqf9GjziJCgZuLRY7vL2USueTnmTKgqfKHBZrWULqGarGfEQoa0q3aY5u5soSW6MN70U6f8U0XSuQqUtfDcgacJkMkHbdYWQ6qxC3/echdQKm5MtVE2Dtm1BwWNU1zh37hy8ZGL//1iZ+Dt0Heqm5nwhsQpWNzW6rocPA7Y2d6A0sL+/B2XAncBixcw1TEmqXbRAvbTSCEm6WMXWyh3KtkB+mGjKGcMkakzJpCpAJc49FluwqPacxYvQ2kIZBZ0YHKZE2c8gnyX4SDbGlIeT/L4loT7LHlf9SVbMkr5MaakOr7B3CpW3ZC7VarIwLQt5M2snLTfLaeUiylndPDDFlVqstPJDJ40bfkilwVnZRDyQyucTEYwMWTElhiWJCp+QVUf+s0ABTjupIqICnXKW62O6EBCDHCwImRu59zdFdhhLxp4d66r0iqZIBRqmNXf6BtnMK6l8ikVaV2WE4ez0Uu3PALr8u5ZDh6zaZaX9TwDBlFrhXyvcACVLomQrpUArf6cSlc7UrKgqJaTttLSOU1oenqmUVgT61Q7ZZZ+yysO24nyzCPcMvgokarE8p3SCMgk6ivMkLTOvmXidlV29UnlDKZbvkwd9JfdOpp+H0JeO4EgELSRipRnsl5Dg82GEvHT5AFApDe1MUWz7vuPDkXwgAT7g0kaX52ShbishicsPnqTrXCMr50sMWb5A1Mr7j6SWijuxm8MoKyRrrj/yYQCRXaqucrCkjCn3v9FyeJEHYCI53FLLA4+VuAH765fKrpXKNMjro5RlCn2klQFbLTP0GWqm+EDKDwFGc8d1Els4NMqz0we/zvCu13qt13qt13q9jJcajyYgSoghoB5VSESoRyMopdG3Lba3dtHOW9SjerS1va2HfkHPPnfeJyDYypbhMkVWicwKHVYZVnr8MIBSlA5PtvZpgSY569C2HZwzICG3Oue44zJSyTrGtNIfS/x53PUZoJWRLFUqypKSGg5trAzeDFjJw1nTNPC9F0XDQlcOfuhgbC2bfkJlKyitsLO7wzkxBbjK4dTJk/+/Kbp/cjXNBE1Vs3ITIrRx6Lo5JpMJhr7Douuwvb0FEDCbzQqAKRNvM2VUSQ0HUeQsrGYVnvO/Qs0leT1XlfNsay31HmllyOOaEtwwWGfldmkTzZtvo6T7OPJ7q3SuBFJLoBbLgTyHlv7WG5i8ZWgspxnFcrz8C23YLhyJJFOqVkbkPOiWqRi5PgcQTVG+SVoZkBXSDTMyq1hpORyqbMtebsxZVccNNGNtlNh8dVGS871FkW39SEznRgJCYIq61oa7og1bMUlyoTGJSgfOfGYVvaoqQCn0XQ9jtNyzMpBKZVESAm+K8h5qI4TzJBlSGZKk64oSyeujQErBWS2HJQnWVtzFLWolH2yxHXW1XzkJrTmPmBDYlVoKiqUaqkDrZEhh4ngqTgOUgZWW/52dr5L1VSvD8lJ1TCX/vvoOL/uFc2c1xwMgB3ECiy+W/WKRL6CuTNEGQvSw1vBzsMD4ROFVplTsZEcBMpSPcu2OkaqutHx/Y4LVFgEekTh+EKQ3XBslNWScyc5nL0ZzdzKJvbfcf2lJj8r3d3YyaLMckFNKK6+cQNdEzdaZaL2KPke2NetlVZTYuzUUEqklXCxxhZMyhonJKZcC8fdkWNgKmDABgULpi84HZVoiMEYbmMogROLvHFipzRb9bBknAHVVQSmDfuhhLLubknx/rTQiAoxzHJ0Jqdih8wprlXe91mu91mu91utluf4PBYESAVsZNmgAAAAASUVORK5CYII=" + }, + { + "id": 4163, + "type": "Hint Node", + "pos": [ + 780, + 140 + ], + "size": { + "0": 20, + "1": 20 + }, + "flags": {}, + "order": 173, + "mode": 0, + "inputs": [], + "outputs": [], + "properties": { + "hint_content": "### Output Node\n* The selected output will be processed, and the result will appear in the **Img Preview**.\n* All the controls in the interface work across all outputs (where appropriate). For example, **Denoise** won't have any effect in *txt2img* but will work across any *img2img* operation (including ultimate upscaler, inpainting, detailer, etc.).\n* Only the nodes/models required for the selected output will be used.\n* LoRAs, ControlNets and Redux will work across all outputs\n* Learn more: https://youtu.be/cjWuPcRZ1j0\n", + "saved_size": [ + 20, + 20 + ] + }, + "color": "#232", + "bgcolor": "#353", + "shape": 2, + "hint_content": "### Output Node\n* The selected output will be processed, and the result will appear in the **Img Preview**.\n* All the controls in the interface work across all outputs (where appropriate). For example, **Denoise** won't have any effect in *txt2img* but will work across any *img2img* operation (including ultimate upscaler, inpainting, detailer, etc.).\n* Only the nodes/models required for the selected output will be used.\n* LoRAs, ControlNets and Redux will work across all outputs\n* Learn more: https://youtu.be/cjWuPcRZ1j0\n" + }, + { + "id": 4164, + "type": "MarkdownNote", + "pos": [ + 2780, + 170 + ], + "size": [ + 260, + 540 + ], + "flags": { + "collapsed": false + }, + "order": 174, + "mode": 0, + "inputs": [], + "outputs": [], + "title": "Model Download", + "properties": {}, + "widgets_values": [ + "### Model downloads:\n\nunet folder:\n\n[flux1-dev.safetensors](https://huggingface.co/black-forest-labs/FLUX.1-dev/resolve/main/flux1-dev.safetensors)\n\n[flux1-depth-dev.safetensors](https://huggingface.co/black-forest-labs/FLUX.1-Depth-dev/resolve/main/flux1-depth-dev.safetensors)\n\n[flux1-canny-dev.safetensors](https://huggingface.co/black-forest-labs/FLUX.1-Canny-dev/resolve/main/flux1-canny-dev.safetensors)\n\n[flux1-fill-dev.safetensors](https://huggingface.co/black-forest-labs/FLUX.1-Fill-dev/resolve/main/flux1-fill-dev.safetensors)\n\n---\n\nvae folder:\n\n[ae.safetensors](https://huggingface.co/black-forest-labs/FLUX.1-dev/resolve/main/ae.safetensors)\n\n---\n\nclip folder:\n\n[t5xxl_fp8_e4m3fn.safetensors](https://huggingface.co/comfyanonymous/flux_text_encoders/resolve/main/t5xxl_fp8_e4m3fn.safetensors)\n\n[clip_l.safetensors](https://huggingface.co/comfyanonymous/flux_text_encoders/resolve/main/clip_l.safetensors)\n\n---\n\nstyle_models folder:\n\n[flux1-redux-dev.safetensors](https://huggingface.co/black-forest-labs/FLUX.1-Redux-dev/resolve/main/flux1-redux-dev.safetensors)\n\n---\n\nclip_vision folder:\n\n[sigclip_vision_patch14_384.safetensors](https://huggingface.co/Comfy-Org/sigclip_vision_384/resolve/main/sigclip_vision_patch14_384.safetensors)\n\n---\n\ncontrolnet/FLUX folder\n\n[FLUX.1-dev-ControlNet-Union-Pro-2.0.safetensors](https://huggingface.co/Shakker-Labs/FLUX.1-dev-ControlNet-Union-Pro-2.0/resolve/main/diffusion_pytorch_model.safetensors) (rename file)\n\n---\n\n**NOTE**: If you don't use the Canny and Depth models, feel free to bypass the load nodes for them and skip downloading them." + ], + "color": "#432", + "bgcolor": "#653" + }, + { + "id": 4127, + "type": "SimpleCondition+", + "pos": [ + -1230, + 800 + ], + "size": [ + 190, + 66 + ], + "flags": {}, + "order": 337, + "mode": 0, + "inputs": [ + { + "name": "evaluate", + "type": "*", + "link": 6335 + }, + { + "name": "on_true", + "type": "*", + "link": 6343 + }, + { + "name": "on_false", + "shape": 7, + "type": "*", + "link": 6342 + } + ], + "outputs": [ + { + "name": "result", + "type": "*", + "links": [ + 6340 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui_essentials", + "ver": "9d9f4bedfc9f0321c19faf71855e228c93bd0dc9", + "Node name for S&R": "SimpleCondition+" + }, + "widgets_values": [] + }, + { + "id": 3758, + "type": "OutputGetString", + "pos": [ + -1890, + 650 + ], + "size": [ + 300, + 50 + ], + "flags": { + "collapsed": false + }, + "order": 175, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "STRING", + "type": "STRING", + "slot_index": 0, + "links": [ + 6296, + 6337 + ] + } + ], + "title": "GetString_Output - txt2img", + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "ComfyUI-Flux-Continuum", + "ver": "19b70c33f872fe4e57dea291bbdd0f5559258a14", + "Node name for S&R": "OutputGetString", + "aux_id": "robertvoy/Comfyui-Flux-Continuum" + }, + "widgets_values": [ + "Output - inpainting" + ] + }, + { + "id": 4137, + "type": "SimpleMathInt+", + "pos": [ + -1500, + 860 + ], + "size": [ + 270, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 176, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 6343 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui_essentials", + "ver": "9d9f4bedfc9f0321c19faf71855e228c93bd0dc9", + "Node name for S&R": "SimpleMathInt+" + }, + "widgets_values": [ + 30 + ] + }, + { + "id": 4113, + "type": "ConfigurableModelRouter", + "pos": [ + -1510, + 340 + ], + "size": [ + 240, + 280 + ], + "flags": {}, + "order": 267, + "mode": 0, + "inputs": [ + { + "name": "model_1", + "shape": 7, + "type": "MODEL", + "link": 6293 + }, + { + "name": "model_2", + "shape": 7, + "type": "MODEL", + "link": 6294 + }, + { + "name": "model_3", + "shape": 7, + "type": "MODEL", + "link": 6297 + }, + { + "name": "model_4", + "shape": 7, + "type": "MODEL", + "link": 6298 + }, + { + "name": "model_5", + "shape": 7, + "type": "MODEL", + "link": null + }, + { + "name": "condition", + "type": "STRING", + "widget": { + "name": "condition" + }, + "link": 6296 + } + ], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "links": [ + 6295 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "ComfyUI-Flux-Continuum", + "ver": "ae6c4fbf1dc2c59fa7b663bf246f5cff96288c19", + "Node name for S&R": "ConfigurableModelRouter", + "num_inputs": 2 + }, + "widgets_values": [ + "default", + "{\n \"default\": 1,\n \"inpainting\": 2,\n \"outpainting\": 2,\n \"canny\": 3,\n \"depth\": 4\n}" + ] + }, + { + "id": 4117, + "type": "InpaintCropImproved", + "pos": [ + 3990, + 3630 + ], + "size": [ + 360, + 630 + ], + "flags": { + "collapsed": false + }, + "order": 249, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 6311 + }, + { + "name": "mask", + "shape": 7, + "type": "MASK", + "link": 6300 + }, + { + "name": "optional_context_mask", + "shape": 7, + "type": "MASK", + "link": null + } + ], + "outputs": [ + { + "name": "stitcher", + "type": "STITCHER", + "links": [ + 6305 + ] + }, + { + "name": "cropped_image", + "type": "IMAGE", + "links": [ + 6301 + ] + }, + { + "name": "cropped_mask", + "type": "MASK", + "links": [ + 6302 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui-inpaint-cropandstitch", + "ver": "2.1.7", + "Node name for S&R": "InpaintCropImproved" + }, + "widgets_values": [ + "lanczos", + "lanczos", + false, + "ensure minimum resolution", + 1024, + 1024, + 16384, + 16384, + true, + 0, + false, + 0, + 0.1, + false, + 0.7700000000000001, + 1, + 1, + 1, + 1.4000000000000004, + true, + 1024, + 1024, + "32" + ] + }, + { + "id": 3247, + "type": "InpaintModelConditioning", + "pos": [ + 4850, + 3870 + ], + "size": [ + 300, + 140 + ], + "flags": {}, + "order": 334, + "mode": 0, + "inputs": [ + { + "name": "positive", + "type": "CONDITIONING", + "link": 4992 + }, + { + "name": "negative", + "type": "CONDITIONING", + "link": 4829 + }, + { + "name": "vae", + "type": "VAE", + "link": 4913 + }, + { + "name": "pixels", + "type": "IMAGE", + "link": 6301 + }, + { + "name": "mask", + "type": "MASK", + "link": 6302 + } + ], + "outputs": [ + { + "name": "positive", + "type": "CONDITIONING", + "slot_index": 0, + "links": [ + 4835 + ] + }, + { + "name": "negative", + "type": "CONDITIONING", + "slot_index": 1, + "links": [ + 4836 + ] + }, + { + "name": "latent", + "type": "LATENT", + "slot_index": 2, + "links": [ + 4919 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "InpaintModelConditioning" + }, + "widgets_values": [ + false + ] + }, + { + "id": 3249, + "type": "KSampler", + "pos": [ + 5650, + 3870 + ], + "size": [ + 260, + 262 + ], + "flags": {}, + "order": 391, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 4834 + }, + { + "name": "positive", + "type": "CONDITIONING", + "link": 4835 + }, + { + "name": "negative", + "type": "CONDITIONING", + "link": 4836 + }, + { + "name": "latent_image", + "type": "LATENT", + "link": 4920 + }, + { + "name": "seed", + "type": "INT", + "widget": { + "name": "seed" + }, + "link": 4917 + }, + { + "name": "steps", + "type": "INT", + "widget": { + "name": "steps" + }, + "link": 4839 + }, + { + "name": "sampler_name", + "type": "COMBO", + "widget": { + "name": "sampler_name" + }, + "link": 4853 + }, + { + "name": "scheduler", + "type": "COMBO", + "widget": { + "name": "scheduler" + }, + "link": 4852 + }, + { + "name": "denoise", + "type": "FLOAT", + "widget": { + "name": "denoise" + }, + "link": 4921 + } + ], + "outputs": [ + { + "name": "LATENT", + "type": "LATENT", + "slot_index": 0, + "links": [ + 4916 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "KSampler" + }, + "widgets_values": [ + 1012556094601766, + "randomize", + 20, + 1, + "euler", + "normal", + 1 + ] + }, + { + "id": 3973, + "type": "ControlNetSlider", + "pos": [ + 1760, + 790 + ], + "size": [ + 310, + 110 + ], + "flags": { + "collapsed": false, + "pinned": true + }, + "order": 177, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "VEC3", + "type": "VEC3", + "slot_index": 0, + "links": [ + 5987 + ] + } + ], + "title": "CN Depth", + "properties": { + "enableTabs": true, + "tabWidth": 65, + "tabXOffset": 80, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "ComfyUI-Flux-Continuum", + "ver": "0524a071ad9f1b6a4012f083a610a7a7d5f2991a", + "Node name for S&R": "ControlNetSlider", + "aux_id": "robertvoy/Comfyui-Flux-Continuum" + }, + "widgets_values": [ + 0, + 0, + 0.8000000000000002 + ], + "color": "#223", + "bgcolor": "#335" + }, + { + "id": 3974, + "type": "ControlNetSlider", + "pos": [ + 1760, + 790 + ], + "size": [ + 310, + 110 + ], + "flags": { + "collapsed": false, + "pinned": true + }, + "order": 178, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "VEC3", + "type": "VEC3", + "slot_index": 0, + "links": [ + 5988 + ] + } + ], + "title": "CN OpenPose", + "properties": { + "enableTabs": true, + "tabWidth": 65, + "tabXOffset": 150, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "ComfyUI-Flux-Continuum", + "ver": "0524a071ad9f1b6a4012f083a610a7a7d5f2991a", + "Node name for S&R": "ControlNetSlider", + "aux_id": "robertvoy/Comfyui-Flux-Continuum" + }, + "widgets_values": [ + 0, + 0, + 0.6500000000000001 + ], + "color": "#233", + "bgcolor": "#355" + }, + { + "id": 3975, + "type": "IPAdapterSlider", + "pos": [ + 1760, + 790 + ], + "size": [ + 310, + 110 + ], + "flags": { + "collapsed": false, + "pinned": true + }, + "order": 179, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "VEC3", + "type": "VEC3", + "links": [ + 5989 + ] + } + ], + "title": "Redux", + "properties": { + "enableTabs": true, + "tabWidth": 65, + "tabXOffset": 220, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "ComfyUI-Flux-Continuum", + "ver": "19b70c33f872fe4e57dea291bbdd0f5559258a14", + "Node name for S&R": "IPAdapterSlider", + "aux_id": "robertvoy/Comfyui-Flux-Continuum" + }, + "widgets_values": [ + 0, + 0, + 0 + ], + "color": "#432", + "bgcolor": "#653" + }, + { + "id": 3972, + "type": "ControlNetSlider", + "pos": [ + 1760, + 790 + ], + "size": [ + 310, + 110 + ], + "flags": { + "collapsed": false, + "pinned": true + }, + "order": 180, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "VEC3", + "type": "VEC3", + "slot_index": 0, + "links": [ + 5986 + ] + } + ], + "title": "CN Canny", + "properties": { + "enableTabs": true, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "ComfyUI-Flux-Continuum", + "ver": "0524a071ad9f1b6a4012f083a610a7a7d5f2991a", + "Node name for S&R": "ControlNetSlider", + "aux_id": "robertvoy/Comfyui-Flux-Continuum" + }, + "widgets_values": [ + 0, + 0, + 0.8000000000000002 + ] + }, + { + "id": 1342, + "type": "ImageResize+", + "pos": [ + 1760, + 980 + ], + "size": [ + 310, + 250 + ], + "flags": { + "collapsed": false, + "pinned": true + }, + "order": 248, + "mode": 4, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 2792 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 2793 + ] + }, + { + "name": "width", + "type": "INT", + "links": null + }, + { + "name": "height", + "type": "INT", + "links": null + } + ], + "title": "Resize", + "properties": { + "enableTabs": true, + "tabWidth": 50, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui_essentials", + "ver": "33ff89fd354d8ec3ab6affb605a79a931b445d99", + "Node name for S&R": "ImageResize+" + }, + "widgets_values": [ + 1344, + 1344, + "lanczos", + "keep proportion", + "downscale if bigger", + 8 + ] + }, + { + "id": 4074, + "type": "CannySlider", + "pos": [ + 1760, + 1450 + ], + "size": [ + 310, + 82 + ], + "flags": { + "collapsed": false, + "pinned": true + }, + "order": 181, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "VEC2", + "type": "VEC2", + "links": [ + 6184 + ] + } + ], + "title": "Canny Preprocessor", + "properties": { + "enableTabs": true, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "ComfyUI-Flux-Continuum", + "ver": "0524a071ad9f1b6a4012f083a610a7a7d5f2991a", + "Node name for S&R": "CannySlider", + "aux_id": "robertvoy/Comfyui-Flux-Continuum" + }, + "widgets_values": [ + 0.4000000000000001, + 0.8000000000000002 + ] + }, + { + "id": 3327, + "type": "SimpleMathInt+", + "pos": [ + 1760, + 1450 + ], + "size": [ + 310, + 80 + ], + "flags": { + "collapsed": false, + "pinned": true + }, + "order": 182, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "slot_index": 0, + "links": [ + 4976 + ] + } + ], + "title": "Mask Blur", + "properties": { + "enableTabs": true, + "tabWidth": 70, + "tabXOffset": 80, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui_essentials", + "ver": "33ff89fd354d8ec3ab6affb605a79a931b445d99", + "Node name for S&R": "SimpleMathInt+" + }, + "widgets_values": [ + 100 + ] + }, + { + "id": 1103, + "type": "Power Lora Loader (rgthree)", + "pos": [ + 480, + 320 + ], + "size": [ + 310, + 240 + ], + "flags": { + "collapsed": false + }, + "order": 233, + "mode": 0, + "inputs": [ + { + "dir": 3, + "name": "model", + "type": "MODEL", + "link": 4940 + }, + { + "dir": 3, + "name": "clip", + "type": "CLIP", + "link": 3432 + } + ], + "outputs": [ + { + "dir": 4, + "name": "MODEL", + "shape": 3, + "type": "MODEL", + "slot_index": 0, + "links": [ + 6248 + ] + }, + { + "dir": 4, + "name": "CLIP", + "shape": 3, + "type": "CLIP", + "slot_index": 1, + "links": [] + } + ], + "title": "Lora Loader", + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "rgthree-comfy", + "ver": "32142fe476878a354dda6e2d4b5ea98960de3ced", + "Show Strengths": "Single Strength" + }, + "widgets_values": [ + {}, + { + "type": "PowerLoraLoaderHeaderWidget" + }, + { + "on": false, + "lora": "FLUX\\CinematicStyleFlux_v1.safetensors", + "strength": 1, + "strengthTwo": null + }, + { + "on": false, + "lora": "FLUX\\Kodak Motion Picture Film style v1.safetensors", + "strength": 0.8, + "strengthTwo": null + }, + { + "on": false, + "lora": "FLUX\\In Super Panavision 70 Technicolor Film style v2b.safetensors", + "strength": 0.32, + "strengthTwo": null + }, + { + "on": false, + "lora": "FLUX\\FLUX-dev-lora-AntiBlur.safetensors", + "strength": 0.82, + "strengthTwo": null + }, + { + "on": false, + "lora": "FLUX\\AntiBlur.safetensors", + "strength": 0.3, + "strengthTwo": null + }, + {}, + "" + ] + }, + { + "id": 4175, + "type": "Hint Node", + "pos": [ + -1390, + 720 + ], + "size": { + "0": 20, + "1": 20 + }, + "flags": {}, + "order": 183, + "mode": 0, + "inputs": [], + "outputs": [], + "properties": { + "hint_content": "### Set Guidance\n* Based on the output you have selected, this will check if it's one of these: \"inpainting,\" \"outpainting,\" \"canny,\" or \"depth.\" If it is, it will set the guidance to 30; otherwise, it will use the guidance you have set in the **Guidance slider**.", + "saved_size": [ + 20, + 20 + ] + }, + "color": "#232", + "bgcolor": "#353", + "shape": 2, + "hint_content": "### Set Guidance\n* Based on the output you have selected, this will check if it's one of these: \"inpainting,\" \"outpainting,\" \"canny,\" or \"depth.\" If it is, it will set the guidance to 30; otherwise, it will use the guidance you have set in the **Guidance slider**." + }, + { + "id": 4131, + "type": "StringContains", + "pos": [ + -1470, + 800 + ], + "size": [ + 230, + 166 + ], + "flags": { + "collapsed": true + }, + "order": 268, + "mode": 0, + "inputs": [ + { + "name": "substring", + "type": "STRING", + "widget": { + "name": "substring" + }, + "link": 6337 + } + ], + "outputs": [ + { + "name": "contains", + "type": "BOOLEAN", + "links": [ + 6335 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.40", + "Node name for S&R": "StringContains" + }, + "widgets_values": [ + "inpainting outpainting canny depth", + "", + false + ] + }, + { + "id": 2468, + "type": "TextVersions", + "pos": [ + 840, + 1320 + ], + "size": [ + 870, + 88 + ], + "flags": { + "pinned": true + }, + "order": 184, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "text", + "type": "STRING", + "slot_index": 0, + "links": [ + 3493 + ] + } + ], + "title": "Tags", + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "ComfyUI-Flux-Continuum", + "ver": "19b70c33f872fe4e57dea291bbdd0f5559258a14", + "Node name for S&R": "TextVersions", + "versionAmount": 5, + "aux_id": "robertvoy/Comfyui-Flux-Continuum" + }, + "widgets_values": [ + "" + ], + "color": "#2a363b", + "bgcolor": "#3f5159", + "tabContents": [ + "", + "", + "", + "", + "" + ], + "activeTab": 0 + }, + { + "id": 2464, + "type": "TextVersions", + "pos": [ + 840, + 1130 + ], + "size": [ + 870, + 150 + ], + "flags": { + "collapsed": false, + "pinned": true + }, + "order": 185, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "text", + "type": "STRING", + "slot_index": 0, + "links": [ + 3492 + ] + } + ], + "title": "Prompt", + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "ComfyUI-Flux-Continuum", + "ver": "19b70c33f872fe4e57dea291bbdd0f5559258a14", + "Node name for S&R": "TextVersions", + "versionAmount": 8, + "aux_id": "robertvoy/Comfyui-Flux-Continuum" + }, + "widgets_values": [ + "a photo of a sea turtle" + ], + "color": "#232", + "bgcolor": "#353", + "tabContents": [ + "a photo of a sea turtle", + "", + "", + "", + "", + "", + "", + "" + ], + "activeTab": 0 + }, + { + "id": 3000, + "type": "PreviewImage", + "pos": [ + 840, + 150 + ], + "size": [ + 870, + 920 + ], + "flags": { + "collapsed": false, + "pinned": true + }, + "order": 232, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 4414 + } + ], + "outputs": [], + "title": "Img Preview", + "properties": { + "enableTabs": true, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": true, + "secondTabText": "Img Compare", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "PreviewImage" + }, + "widgets_values": [], + "color": "#222", + "bgcolor": "#000" + }, + { + "id": 3949, + "type": "LoadImage", + "pos": [ + 1760, + 170 + ], + "size": [ + 310, + 410 + ], + "flags": { + "collapsed": false, + "pinned": true + }, + "order": 186, + "mode": 0, + "inputs": [], + "outputs": [ + { + "label": "IMAGE", + "name": "IMAGE", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 5947 + ] + }, + { + "name": "MASK", + "type": "MASK", + "slot_index": 1, + "links": [] + } + ], + "title": "CN Input", + "properties": { + "enableTabs": true, + "tabWidth": 50, + "tabXOffset": 65, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "LoadImage" + }, + "widgets_values": [ + "example.png", + "image" + ], + "color": "#432", + "bgcolor": "#653" + }, + { + "id": 2774, + "type": "LoadImage", + "pos": [ + 1760, + 170 + ], + "size": [ + 310, + 410 + ], + "flags": { + "collapsed": false, + "pinned": true + }, + "order": 187, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 5371 + ] + }, + { + "name": "MASK", + "type": "MASK", + "links": null + } + ], + "title": "Redux 1", + "properties": { + "enableTabs": true, + "tabWidth": 50, + "tabXOffset": 120, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "LoadImage" + }, + "widgets_values": [ + "example.png", + "image" + ], + "color": "#432", + "bgcolor": "#653" + }, + { + "id": 3557, + "type": "LoadImage", + "pos": [ + 1760, + 170 + ], + "size": [ + 310, + 410 + ], + "flags": { + "collapsed": false, + "pinned": true + }, + "order": 188, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 5370 + ] + }, + { + "name": "MASK", + "type": "MASK", + "links": null + } + ], + "title": "Redux 2", + "properties": { + "enableTabs": true, + "tabWidth": 50, + "tabXOffset": 175, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "LoadImage" + }, + "widgets_values": [ + "example.png", + "image" + ], + "color": "#323", + "bgcolor": "#535" + }, + { + "id": 3337, + "type": "LoadImage", + "pos": [ + 1760, + 170 + ], + "size": [ + 310, + 410 + ], + "flags": { + "collapsed": false, + "pinned": true + }, + "order": 189, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 5374 + ] + }, + { + "name": "MASK", + "type": "MASK", + "links": null + } + ], + "title": "Redux 3", + "properties": { + "enableTabs": true, + "tabWidth": 50, + "tabXOffset": 230, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "LoadImage" + }, + "widgets_values": [ + "example.png", + "image" + ], + "color": "#223", + "bgcolor": "#335" + }, + { + "id": 2219, + "type": "LoadImage", + "pos": [ + 1760, + 170 + ], + "size": [ + 310, + 410 + ], + "flags": { + "collapsed": false, + "pinned": true + }, + "order": 190, + "mode": 0, + "inputs": [], + "outputs": [ + { + "label": "IMAGE", + "name": "IMAGE", + "type": "IMAGE", + "slot_index": 0, + "links": [ + 4446 + ] + }, + { + "name": "MASK", + "type": "MASK", + "slot_index": 1, + "links": [ + 5877 + ] + } + ], + "title": "Img Load", + "properties": { + "enableTabs": true, + "tabWidth": 50, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "LoadImage" + }, + "widgets_values": [ + "example.png", + "image" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1534, + "type": "UpscaleModelLoader", + "pos": [ + 1760, + 1310 + ], + "size": [ + 310, + 60 + ], + "flags": { + "pinned": true + }, + "order": 191, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "UPSCALE_MODEL", + "type": "UPSCALE_MODEL", + "slot_index": 0, + "links": [ + 2361 + ] + } + ], + "title": "Upscale Model", + "properties": { + "enableTabs": true, + "tabWidth": 75, + "tabXOffset": 110, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfy-core", + "ver": "0.3.24", + "Node name for S&R": "UpscaleModelLoader" + }, + "widgets_values": [ + "4xNomos8kDAT.pth" + ] + }, + { + "id": 4076, + "type": "ResolutionMultiplySlider", + "pos": [ + 1760, + 1310 + ], + "size": [ + 310, + 60 + ], + "flags": { + "pinned": true + }, + "order": 192, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "links": [ + 6178 + ] + } + ], + "title": "Resolution Multiply", + "properties": { + "enableTabs": true, + "tabWidth": 95, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "ComfyUI-Flux-Continuum", + "ver": "0524a071ad9f1b6a4012f083a610a7a7d5f2991a", + "Node name for S&R": "ResolutionMultiplySlider", + "aux_id": "robertvoy/Comfyui-Flux-Continuum" + }, + "widgets_values": [ + 1.5 + ] + }, + { + "id": 4121, + "type": "InpaintCropImproved", + "pos": [ + 3990, + 4530 + ], + "size": [ + 348.60418701171875, + 626 + ], + "flags": {}, + "order": 235, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 6319 + }, + { + "name": "mask", + "shape": 7, + "type": "MASK", + "link": 6317 + }, + { + "name": "optional_context_mask", + "shape": 7, + "type": "MASK", + "link": null + } + ], + "outputs": [ + { + "name": "stitcher", + "type": "STITCHER", + "links": [ + 6327 + ] + }, + { + "name": "cropped_image", + "type": "IMAGE", + "links": [ + 6314 + ] + }, + { + "name": "cropped_mask", + "type": "MASK", + "links": [ + 6315 + ] + } + ], + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "comfyui-inpaint-cropandstitch", + "ver": "2.1.7", + "Node name for S&R": "InpaintCropImproved" + }, + "widgets_values": [ + "bilinear", + "bicubic", + false, + "ensure minimum resolution", + 1024, + 1024, + 16384, + 16384, + true, + 0, + false, + 0, + 0.1, + false, + 1.0000000000000002, + 1.0000000000000002, + 1.0000000000000002, + 1.4000000000000004, + 1.4000000000000004, + true, + 1024, + 1024, + "32" + ] + }, + { + "id": 922, + "type": "Seed (rgthree)", + "pos": [ + 480, + 1160 + ], + "size": [ + 310, + 130 + ], + "flags": { + "collapsed": false + }, + "order": 193, + "mode": 0, + "inputs": [], + "outputs": [ + { + "dir": 4, + "name": "SEED", + "shape": 3, + "type": "INT", + "slot_index": 0, + "links": [ + 6239 + ] + } + ], + "title": "Seed", + "properties": { + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65, + "cnr_id": "rgthree-comfy", + "ver": "32142fe476878a354dda6e2d4b5ea98960de3ced" + }, + "widgets_values": [ + -1, + null, + null, + null + ] + }, + { + "id": 3731, + "type": "OutputTextDisplay", + "pos": [ + 1100, + 120 + ], + "size": [ + 340, + 30 + ], + "flags": {}, + "order": 194, + "mode": 0, + "inputs": [], + "outputs": [], + "title": "Unnamed", + "properties": { + "fontSize": 16, + "fontFamily": "'Inter', Arial", + "fontColor": "#9c9c9c", + "textAlign": "center", + "bgColor": "#00000000", + "padding": 0 + }, + "bgcolor": "#00000000", + "shape": 1 + } + ], + "links": [ + [ + 1118, + 589, + 0, + 590, + 1, + "GUIDER" + ], + [ + 1120, + 593, + 0, + 590, + 3, + "SIGMAS" + ], + [ + 1123, + 586, + 0, + 593, + 0, + "MODEL" + ], + [ + 1187, + 641, + 0, + 644, + 0, + "*" + ], + [ + 1360, + 596, + 0, + 591, + 0, + "INT" + ], + [ + 1371, + 591, + 0, + 590, + 0, + "NOISE" + ], + [ + 1424, + 586, + 0, + 589, + 0, + "MODEL" + ], + [ + 1474, + 590, + 1, + 609, + 0, + "LATENT" + ], + [ + 1489, + 586, + 0, + 837, + 0, + "*" + ], + [ + 1490, + 837, + 0, + 834, + 0, + "*" + ], + [ + 1538, + 609, + 0, + 715, + 0, + "IMAGE" + ], + [ + 1599, + 933, + 0, + 932, + 0, + "BASIC_PIPE" + ], + [ + 1608, + 932, + 1, + 697, + 0, + "MODEL" + ], + [ + 1680, + 965, + 0, + 963, + 1, + "VAE" + ], + [ + 1745, + 1026, + 0, + 1023, + 0, + "IMAGE" + ], + [ + 1769, + 1052, + 0, + 1051, + 3, + "SIGMAS" + ], + [ + 1770, + 1054, + 0, + 1053, + 0, + "NOISE" + ], + [ + 1772, + 1055, + 0, + 1053, + 4, + "LATENT" + ], + [ + 1773, + 1051, + 0, + 1055, + 0, + "LATENT" + ], + [ + 1775, + 1057, + 0, + 1056, + 0, + "INT" + ], + [ + 1776, + 1056, + 0, + 1051, + 0, + "NOISE" + ], + [ + 1783, + 1060, + 0, + 1061, + 0, + "*" + ], + [ + 1786, + 1064, + 0, + 1060, + 1, + "VAE" + ], + [ + 1787, + 1053, + 1, + 1060, + 0, + "LATENT" + ], + [ + 1798, + 963, + 0, + 1073, + 0, + "LATENT" + ], + [ + 1800, + 1073, + 0, + 1072, + 2, + "LATENT" + ], + [ + 1802, + 1074, + 0, + 1075, + 0, + "*" + ], + [ + 1803, + 1072, + 0, + 1074, + 0, + "LATENT" + ], + [ + 1804, + 965, + 0, + 1074, + 1, + "VAE" + ], + [ + 1867, + 1128, + 0, + 1129, + 0, + "IMAGE" + ], + [ + 1868, + 1129, + 0, + 1130, + 0, + "IMAGE" + ], + [ + 1871, + 1129, + 0, + 1131, + 0, + "IMAGE" + ], + [ + 1879, + 1136, + 0, + 1134, + 1, + "VAE" + ], + [ + 1920, + 1162, + 0, + 1073, + 1, + "INT" + ], + [ + 1923, + 1134, + 0, + 1128, + 0, + "IMAGE" + ], + [ + 2000, + 1274, + 0, + 1217, + 0, + "FLOAT" + ], + [ + 2002, + 1278, + 0, + 1280, + 0, + "*" + ], + [ + 2003, + 1282, + 0, + 1285, + 0, + "*" + ], + [ + 2004, + 1285, + 0, + 1072, + 7, + "STRING" + ], + [ + 2005, + 1286, + 0, + 1072, + 6, + "STRING" + ], + [ + 2006, + 1287, + 0, + 1288, + 0, + "*" + ], + [ + 2007, + 1288, + 0, + 1072, + 8, + "STRING" + ], + [ + 2018, + 1300, + 0, + 1293, + 1, + "INT" + ], + [ + 2034, + 1312, + 0, + 429, + 10, + "FLOAT" + ], + [ + 2035, + 1313, + 0, + 429, + 7, + "INT" + ], + [ + 2037, + 1317, + 0, + 593, + 1, + "COMBO" + ], + [ + 2038, + 1318, + 0, + 593, + 2, + "INT" + ], + [ + 2055, + 1328, + 0, + 1262, + 0, + "COMBO" + ], + [ + 2071, + 1323, + 0, + 963, + 0, + "IMAGE" + ], + [ + 2073, + 1346, + 0, + 1345, + 0, + "IMAGE" + ], + [ + 2087, + 834, + 0, + 1358, + 0, + "MODEL" + ], + [ + 2088, + 921, + 0, + 1358, + 1, + "CONDITIONING" + ], + [ + 2089, + 1358, + 0, + 1051, + 1, + "GUIDER" + ], + [ + 2090, + 1358, + 0, + 1053, + 1, + "GUIDER" + ], + [ + 2092, + 1359, + 0, + 1052, + 0, + "SIGMAS" + ], + [ + 2105, + 1099, + 0, + 1051, + 4, + "LATENT" + ], + [ + 2163, + 1339, + 0, + 1387, + 0, + "UPSCALE_MODEL" + ], + [ + 2165, + 1388, + 0, + 1387, + 1, + "IMAGE" + ], + [ + 2166, + 1388, + 0, + 703, + 0, + "IMAGE" + ], + [ + 2169, + 697, + 0, + 1389, + 1, + "MODEL" + ], + [ + 2171, + 932, + 5, + 1389, + 3, + "CONDITIONING" + ], + [ + 2172, + 932, + 3, + 1389, + 4, + "VAE" + ], + [ + 2173, + 708, + 0, + 1389, + 5, + "INT" + ], + [ + 2174, + 1218, + 0, + 1389, + 9, + "FLOAT" + ], + [ + 2175, + 1308, + 0, + 1389, + 6, + "INT" + ], + [ + 2176, + 1311, + 0, + 1389, + 8, + "COMBO" + ], + [ + 2177, + 1389, + 0, + 729, + 0, + "IMAGE" + ], + [ + 2202, + 1325, + 0, + 1404, + 0, + "IMAGE" + ], + [ + 2206, + 1408, + 0, + 873, + 0, + "IMAGE" + ], + [ + 2209, + 1404, + 0, + 1411, + 0, + "IMAGE" + ], + [ + 2210, + 1411, + 0, + 1405, + 0, + "*" + ], + [ + 2211, + 1411, + 0, + 429, + 0, + "IMAGE" + ], + [ + 2212, + 1410, + 0, + 1404, + 1, + "INT" + ], + [ + 2231, + 1406, + 0, + 1405, + 1, + "INT" + ], + [ + 2243, + 1405, + 0, + 429, + 6, + "INT" + ], + [ + 2305, + 1488, + 0, + 1095, + 0, + "INT" + ], + [ + 2313, + 1262, + 0, + 429, + 9, + "COMBO" + ], + [ + 2333, + 1515, + 0, + 1500, + 0, + "COMBO" + ], + [ + 2334, + 1500, + 0, + 590, + 2, + "SAMPLER" + ], + [ + 2335, + 1500, + 0, + 1518, + 0, + "*" + ], + [ + 2337, + 1520, + 0, + 1051, + 2, + "SAMPLER" + ], + [ + 2338, + 1520, + 0, + 1053, + 2, + "SAMPLER" + ], + [ + 2341, + 1523, + 0, + 429, + 8, + "COMBO" + ], + [ + 2342, + 1524, + 0, + 1389, + 7, + "COMBO" + ], + [ + 2344, + 1526, + 0, + 1072, + 5, + "STRING" + ], + [ + 2361, + 1534, + 0, + 1330, + 0, + "*" + ], + [ + 2380, + 726, + 0, + 624, + 0, + "IMAGE" + ], + [ + 2404, + 1618, + 0, + 586, + 1, + "FLOAT" + ], + [ + 2406, + 1620, + 0, + 697, + 1, + "FLOAT" + ], + [ + 2409, + 1623, + 0, + 1624, + 0, + "*" + ], + [ + 2410, + 1624, + 0, + 1072, + 9, + "STRING" + ], + [ + 2418, + 1629, + 0, + 1617, + 0, + "FLOAT" + ], + [ + 2792, + 1344, + 0, + 1342, + 0, + "IMAGE" + ], + [ + 2793, + 1342, + 0, + 1343, + 0, + "IMAGE" + ], + [ + 3152, + 645, + 0, + 429, + 2, + "BASIC_PIPE" + ], + [ + 3212, + 2211, + 0, + 641, + 4, + "CONDITIONING" + ], + [ + 3214, + 2217, + 0, + 1090, + 1, + "INT" + ], + [ + 3362, + 2328, + 0, + 1072, + 1, + "CONDITIONING" + ], + [ + 3363, + 1079, + 0, + 1072, + 0, + "MODEL" + ], + [ + 3425, + 2364, + 0, + 2334, + 1, + "IMAGE" + ], + [ + 3426, + 717, + 0, + 2334, + 0, + "IMAGE" + ], + [ + 3432, + 1115, + 0, + 1103, + 1, + "CLIP" + ], + [ + 3447, + 2427, + 0, + 2428, + 0, + "*" + ], + [ + 3448, + 2429, + 0, + 1090, + 0, + "COMBO" + ], + [ + 3449, + 1090, + 1, + 586, + 2, + "INT" + ], + [ + 3450, + 1090, + 2, + 586, + 3, + "INT" + ], + [ + 3460, + 2435, + 0, + 2437, + 0, + "*" + ], + [ + 3461, + 2438, + 0, + 2436, + 0, + "SAMPLER_PARAMS" + ], + [ + 3463, + 2436, + 0, + 1508, + 0, + "COMBO" + ], + [ + 3464, + 2436, + 2, + 1271, + 0, + "COMBO" + ], + [ + 3465, + 2436, + 1, + 1510, + 0, + "STRING" + ], + [ + 3466, + 2436, + 3, + 1272, + 0, + "STRING" + ], + [ + 3481, + 1343, + 0, + 2453, + 0, + "IMAGE" + ], + [ + 3482, + 2453, + 0, + 2454, + 0, + "IMAGE" + ], + [ + 3492, + 2464, + 0, + 723, + 0, + "STRING" + ], + [ + 3493, + 2468, + 0, + 788, + 0, + "STRING" + ], + [ + 3494, + 2469, + 0, + 1105, + 0, + "MODEL" + ], + [ + 3499, + 2472, + 0, + 609, + 1, + "VAE" + ], + [ + 3543, + 1090, + 1, + 2507, + 0, + "*" + ], + [ + 3544, + 1090, + 2, + 2508, + 0, + "*" + ], + [ + 3717, + 1052, + 1, + 2600, + 0, + "*" + ], + [ + 3718, + 2600, + 0, + 1053, + 3, + "SIGMAS" + ], + [ + 4414, + 717, + 0, + 3000, + 0, + "IMAGE" + ], + [ + 4424, + 583, + 0, + 1114, + 0, + "CLIP" + ], + [ + 4425, + 594, + 0, + 832, + 0, + "VAE" + ], + [ + 4446, + 2219, + 0, + 1320, + 0, + "IMAGE" + ], + [ + 4514, + 1090, + 0, + 3032, + 0, + "*" + ], + [ + 4606, + 2454, + 0, + 3055, + 0, + "IMAGE" + ], + [ + 4607, + 3055, + 0, + 1346, + 0, + "IMAGE" + ], + [ + 4608, + 3055, + 1, + 3103, + 0, + "*" + ], + [ + 4666, + 3133, + 0, + 3132, + 1, + "INT" + ], + [ + 4668, + 3132, + 0, + 1389, + 0, + "IMAGE" + ], + [ + 4689, + 1086, + 0, + 3169, + 0, + "*" + ], + [ + 4690, + 3169, + 0, + 1072, + 4, + "STRING" + ], + [ + 4691, + 1219, + 0, + 3170, + 0, + "*" + ], + [ + 4692, + 3170, + 0, + 1072, + 10, + "STRING" + ], + [ + 4714, + 1340, + 0, + 3178, + 1, + "*" + ], + [ + 4715, + 1340, + 0, + 3182, + 1, + "*" + ], + [ + 4716, + 703, + 0, + 3178, + 0, + "*" + ], + [ + 4717, + 703, + 1, + 3182, + 0, + "*" + ], + [ + 4780, + 1602, + 0, + 3212, + 0, + "STRING" + ], + [ + 4781, + 3212, + 0, + 624, + 1, + "STRING" + ], + [ + 4782, + 3224, + 0, + 3213, + 0, + "CLIP" + ], + [ + 4784, + 3213, + 0, + 3214, + 1, + "CONDITIONING" + ], + [ + 4788, + 3217, + 0, + 3215, + 0, + "MODEL" + ], + [ + 4789, + 3215, + 0, + 3216, + 0, + "MODEL" + ], + [ + 4790, + 3214, + 0, + 3216, + 1, + "CONDITIONING" + ], + [ + 4793, + 3227, + 0, + 3216, + 4, + "INT" + ], + [ + 4794, + 3228, + 0, + 3216, + 5, + "INT" + ], + [ + 4795, + 3216, + 0, + 3219, + 0, + "LATENT" + ], + [ + 4801, + 3231, + 0, + 3216, + 7, + "COMBO" + ], + [ + 4803, + 3233, + 0, + 3216, + 6, + "COMBO" + ], + [ + 4805, + 3234, + 0, + 3238, + 0, + "*" + ], + [ + 4827, + 3256, + 0, + 3246, + 0, + "CLIP" + ], + [ + 4829, + 3246, + 0, + 3247, + 1, + "CONDITIONING" + ], + [ + 4834, + 3248, + 0, + 3249, + 0, + "MODEL" + ], + [ + 4835, + 3247, + 0, + 3249, + 1, + "CONDITIONING" + ], + [ + 4836, + 3247, + 1, + 3249, + 2, + "CONDITIONING" + ], + [ + 4839, + 3260, + 0, + 3249, + 5, + "INT" + ], + [ + 4852, + 3268, + 0, + 3249, + 7, + "COMBO" + ], + [ + 4853, + 3269, + 0, + 3249, + 6, + "COMBO" + ], + [ + 4904, + 3283, + 0, + 3279, + 1, + "VAE" + ], + [ + 4911, + 3284, + 0, + 3283, + 0, + "*" + ], + [ + 4912, + 1291, + 0, + 3284, + 0, + "*" + ], + [ + 4913, + 3284, + 0, + 3247, + 2, + "VAE" + ], + [ + 4916, + 3249, + 0, + 3279, + 0, + "LATENT" + ], + [ + 4917, + 1298, + 0, + 3249, + 4, + "INT" + ], + [ + 4919, + 3247, + 2, + 1293, + 0, + "LATENT" + ], + [ + 4920, + 1293, + 0, + 3249, + 3, + "LATENT" + ], + [ + 4921, + 3285, + 0, + 3249, + 8, + "FLOAT" + ], + [ + 4940, + 3302, + 0, + 1103, + 0, + "MODEL" + ], + [ + 4941, + 3164, + 0, + 1026, + 0, + "IMAGE" + ], + [ + 4945, + 3303, + 0, + 3248, + 0, + "MODEL" + ], + [ + 4976, + 3327, + 0, + 3328, + 0, + "*" + ], + [ + 4980, + 3333, + 0, + 3332, + 1, + "INT" + ], + [ + 4981, + 3214, + 2, + 3332, + 0, + "LATENT" + ], + [ + 4982, + 3214, + 1, + 3216, + 2, + "CONDITIONING" + ], + [ + 4983, + 3332, + 0, + 3216, + 3, + "LATENT" + ], + [ + 4992, + 3342, + 0, + 3247, + 0, + "CONDITIONING" + ], + [ + 4995, + 3360, + 0, + 3343, + 1, + "CONDITIONING" + ], + [ + 4996, + 3344, + 0, + 3343, + 2, + "VAE" + ], + [ + 4998, + 3343, + 2, + 3345, + 0, + "LATENT" + ], + [ + 4999, + 3349, + 0, + 3345, + 1, + "INT" + ], + [ + 5000, + 3352, + 0, + 3346, + 0, + "LATENT" + ], + [ + 5001, + 3344, + 0, + 3346, + 1, + "VAE" + ], + [ + 5002, + 3346, + 0, + 3347, + 0, + "*" + ], + [ + 5003, + 3355, + 0, + 3352, + 0, + "MODEL" + ], + [ + 5004, + 3343, + 0, + 3352, + 1, + "CONDITIONING" + ], + [ + 5005, + 3343, + 1, + 3352, + 2, + "CONDITIONING" + ], + [ + 5006, + 3345, + 0, + 3352, + 3, + "LATENT" + ], + [ + 5007, + 3348, + 0, + 3352, + 4, + "INT" + ], + [ + 5008, + 3350, + 0, + 3352, + 5, + "INT" + ], + [ + 5012, + 3359, + 0, + 3360, + 0, + "CLIP" + ], + [ + 5013, + 3361, + 0, + 3363, + 0, + "*" + ], + [ + 5014, + 3362, + 0, + 3364, + 0, + "*" + ], + [ + 5015, + 3365, + 0, + 3343, + 0, + "CONDITIONING" + ], + [ + 5017, + 3367, + 0, + 641, + 3, + "CONDITIONING" + ], + [ + 5020, + 3369, + 0, + 3352, + 7, + "COMBO" + ], + [ + 5021, + 3370, + 0, + 3352, + 6, + "COMBO" + ], + [ + 5033, + 3374, + 0, + 3376, + 0, + "*" + ], + [ + 5034, + 3375, + 0, + 3377, + 0, + "*" + ], + [ + 5039, + 3380, + 0, + 3214, + 0, + "CONDITIONING" + ], + [ + 5045, + 3383, + 0, + 586, + 0, + "MODEL" + ], + [ + 5046, + 1117, + 0, + 3383, + 0, + "*" + ], + [ + 5051, + 3378, + 0, + 3386, + 0, + "*" + ], + [ + 5054, + 3386, + 0, + 3387, + 0, + "*" + ], + [ + 5055, + 3379, + 0, + 3388, + 0, + "*" + ], + [ + 5058, + 3388, + 0, + 3385, + 0, + "*" + ], + [ + 5071, + 3387, + 0, + 3397, + 0, + "*" + ], + [ + 5072, + 3385, + 0, + 3396, + 0, + "*" + ], + [ + 5082, + 3403, + 0, + 3402, + 0, + "VEC3" + ], + [ + 5166, + 3463, + 0, + 3450, + 0, + "CONDITIONING" + ], + [ + 5167, + 3462, + 0, + 3450, + 1, + "CONDITIONING" + ], + [ + 5168, + 3451, + 0, + 3450, + 2, + "VAE" + ], + [ + 5170, + 3450, + 2, + 3452, + 0, + "LATENT" + ], + [ + 5171, + 3456, + 0, + 3452, + 1, + "INT" + ], + [ + 5172, + 3459, + 0, + 3453, + 0, + "LATENT" + ], + [ + 5173, + 3451, + 0, + 3453, + 1, + "VAE" + ], + [ + 5174, + 3453, + 0, + 3454, + 0, + "*" + ], + [ + 5175, + 3460, + 0, + 3459, + 0, + "MODEL" + ], + [ + 5176, + 3450, + 0, + 3459, + 1, + "CONDITIONING" + ], + [ + 5177, + 3450, + 1, + 3459, + 2, + "CONDITIONING" + ], + [ + 5178, + 3452, + 0, + 3459, + 3, + "LATENT" + ], + [ + 5179, + 3455, + 0, + 3459, + 4, + "INT" + ], + [ + 5180, + 3457, + 0, + 3459, + 5, + "INT" + ], + [ + 5181, + 3461, + 0, + 3462, + 0, + "CLIP" + ], + [ + 5210, + 3490, + 0, + 3459, + 6, + "COMBO" + ], + [ + 5211, + 3488, + 0, + 3459, + 7, + "COMBO" + ], + [ + 5212, + 3458, + 0, + 3493, + 0, + "IMAGE" + ], + [ + 5237, + 3515, + 0, + 589, + 1, + "CONDITIONING" + ], + [ + 5238, + 3515, + 0, + 921, + 0, + "*" + ], + [ + 5326, + 1117, + 0, + 641, + 0, + "MODEL" + ], + [ + 5327, + 1090, + 0, + 3548, + 0, + "*" + ], + [ + 5328, + 3548, + 0, + 3549, + 0, + "*" + ], + [ + 5329, + 3549, + 0, + 590, + 4, + "LATENT" + ], + [ + 5330, + 593, + 0, + 1359, + 0, + "*" + ], + [ + 5346, + 3569, + 0, + 3566, + 1, + "*" + ], + [ + 5350, + 3572, + 0, + 3571, + 1, + "*" + ], + [ + 5359, + 3578, + 0, + 3577, + 1, + "*" + ], + [ + 5362, + 3402, + 2, + 3407, + 0, + "*" + ], + [ + 5363, + 3407, + 0, + 3577, + 0, + "*" + ], + [ + 5366, + 3402, + 1, + 3582, + 0, + "*" + ], + [ + 5368, + 3582, + 0, + 3571, + 0, + "*" + ], + [ + 5369, + 932, + 4, + 1389, + 2, + "CONDITIONING" + ], + [ + 5370, + 3557, + 0, + 3338, + 0, + "IMAGE" + ], + [ + 5371, + 2774, + 0, + 3559, + 0, + "IMAGE" + ], + [ + 5374, + 3337, + 0, + 3584, + 0, + "*" + ], + [ + 5384, + 3367, + 0, + 3515, + 0, + "*" + ], + [ + 5452, + 3658, + 0, + 3450, + 3, + "IMAGE" + ], + [ + 5479, + 3679, + 0, + 3680, + 1, + "INT" + ], + [ + 5480, + 3679, + 1, + 3680, + 2, + "INT" + ], + [ + 5482, + 3458, + 0, + 3679, + 0, + "IMAGE" + ], + [ + 5483, + 3493, + 0, + 3680, + 0, + "IMAGE" + ], + [ + 5592, + 3555, + 0, + 3723, + 0, + "MASK" + ], + [ + 5593, + 3553, + 0, + 3723, + 1, + "INT" + ], + [ + 5630, + 429, + 0, + 3773, + 1, + "IMAGE" + ], + [ + 5633, + 3773, + 0, + 1408, + 0, + "IMAGE" + ], + [ + 5634, + 3723, + 0, + 3778, + 0, + "*" + ], + [ + 5635, + 3778, + 0, + 3779, + 0, + "*" + ], + [ + 5636, + 3779, + 0, + 3773, + 2, + "MASK" + ], + [ + 5637, + 3780, + 0, + 3781, + 0, + "*" + ], + [ + 5638, + 1325, + 0, + 3780, + 0, + "*" + ], + [ + 5639, + 3781, + 0, + 3773, + 0, + "IMAGE" + ], + [ + 5642, + 3566, + 0, + 3783, + 0, + "*" + ], + [ + 5644, + 3390, + 0, + 3783, + 2, + "*" + ], + [ + 5651, + 3577, + 0, + 3785, + 0, + "*" + ], + [ + 5656, + 3571, + 0, + 3784, + 0, + "*" + ], + [ + 5661, + 3402, + 0, + 3787, + 0, + "*" + ], + [ + 5702, + 3386, + 0, + 3810, + 0, + "CLIP_VISION" + ], + [ + 5703, + 3336, + 0, + 3810, + 1, + "IMAGE" + ], + [ + 5713, + 3787, + 0, + 3566, + 0, + "*" + ], + [ + 5729, + 3395, + 0, + 3814, + 1, + "IMAGE" + ], + [ + 5730, + 3339, + 0, + 3812, + 1, + "IMAGE" + ], + [ + 5731, + 3387, + 0, + 3812, + 0, + "CLIP_VISION" + ], + [ + 5734, + 3397, + 0, + 3814, + 0, + "CLIP_VISION" + ], + [ + 5738, + 3783, + 0, + 3816, + 0, + "*" + ], + [ + 5741, + 3784, + 0, + 3817, + 0, + "*" + ], + [ + 5743, + 3817, + 0, + 3785, + 2, + "*" + ], + [ + 5752, + 3368, + 0, + 3828, + 0, + "CLIP" + ], + [ + 5753, + 793, + 0, + 3828, + 1, + "STRING" + ], + [ + 5754, + 724, + 0, + 3828, + 2, + "STRING" + ], + [ + 5755, + 1319, + 0, + 3828, + 3, + "FLOAT" + ], + [ + 5756, + 3828, + 0, + 3390, + 0, + "*" + ], + [ + 5804, + 3831, + 0, + 3210, + 0, + "*" + ], + [ + 5877, + 2219, + 1, + 1321, + 0, + "MASK" + ], + [ + 5882, + 3810, + 0, + 3920, + 2, + "CLIP_VISION_OUTPUT" + ], + [ + 5883, + 3388, + 0, + 3920, + 1, + "STYLE_MODEL" + ], + [ + 5884, + 3390, + 0, + 3920, + 0, + "CONDITIONING" + ], + [ + 5885, + 3787, + 0, + 3920, + 3, + "FLOAT" + ], + [ + 5887, + 3812, + 0, + 3922, + 2, + "CLIP_VISION_OUTPUT" + ], + [ + 5889, + 3582, + 0, + 3922, + 3, + "FLOAT" + ], + [ + 5890, + 3385, + 0, + 3922, + 1, + "STYLE_MODEL" + ], + [ + 5891, + 3816, + 0, + 3922, + 0, + "CONDITIONING" + ], + [ + 5892, + 3922, + 0, + 3784, + 1, + "*" + ], + [ + 5896, + 3829, + 0, + 3831, + 0, + "IMAGE" + ], + [ + 5900, + 3816, + 0, + 3784, + 2, + "*" + ], + [ + 5901, + 3920, + 0, + 3783, + 1, + "*" + ], + [ + 5902, + 3814, + 0, + 3924, + 2, + "CLIP_VISION_OUTPUT" + ], + [ + 5903, + 3817, + 0, + 3924, + 0, + "CONDITIONING" + ], + [ + 5904, + 3396, + 0, + 3924, + 1, + "STYLE_MODEL" + ], + [ + 5905, + 3407, + 0, + 3924, + 3, + "FLOAT" + ], + [ + 5906, + 3924, + 0, + 3785, + 1, + "*" + ], + [ + 5947, + 3949, + 0, + 3950, + 0, + "*" + ], + [ + 5982, + 3933, + 0, + 3976, + 0, + "*" + ], + [ + 5986, + 3972, + 0, + 3943, + 0, + "VEC3" + ], + [ + 5987, + 3973, + 0, + 3941, + 0, + "VEC3" + ], + [ + 5988, + 3974, + 0, + 3945, + 0, + "VEC3" + ], + [ + 5989, + 3975, + 0, + 3401, + 0, + "VEC3" + ], + [ + 5997, + 4021, + 0, + 3987, + 0, + "*" + ], + [ + 6002, + 4022, + 0, + 4000, + 4, + "VAE" + ], + [ + 6003, + 4031, + 0, + 4000, + 5, + "FLOAT" + ], + [ + 6009, + 4000, + 0, + 4005, + 0, + "CONDITIONING" + ], + [ + 6010, + 4000, + 1, + 4005, + 1, + "CONDITIONING" + ], + [ + 6013, + 4023, + 0, + 4005, + 4, + "VAE" + ], + [ + 6014, + 4034, + 0, + 4005, + 5, + "FLOAT" + ], + [ + 6017, + 4005, + 0, + 4006, + 0, + "CONDITIONING" + ], + [ + 6018, + 4005, + 1, + 4006, + 1, + "CONDITIONING" + ], + [ + 6021, + 4024, + 0, + 4006, + 4, + "VAE" + ], + [ + 6022, + 4037, + 0, + 4006, + 5, + "FLOAT" + ], + [ + 6050, + 4019, + 0, + 4018, + 0, + "SEGS" + ], + [ + 6053, + 4024, + 0, + 4018, + 4, + "VAE" + ], + [ + 6054, + 4037, + 0, + 4018, + 5, + "FLOAT" + ], + [ + 6057, + 4020, + 0, + 4019, + 0, + "SEGS" + ], + [ + 6060, + 4023, + 0, + 4019, + 4, + "VAE" + ], + [ + 6061, + 4034, + 0, + 4019, + 5, + "FLOAT" + ], + [ + 6064, + 4016, + 0, + 4020, + 0, + "SEGS" + ], + [ + 6067, + 4022, + 0, + 4020, + 4, + "VAE" + ], + [ + 6068, + 4031, + 0, + 4020, + 5, + "FLOAT" + ], + [ + 6073, + 4022, + 0, + 4023, + 0, + "*" + ], + [ + 6074, + 4023, + 0, + 4024, + 0, + "*" + ], + [ + 6076, + 3998, + 0, + 4026, + 0, + "*" + ], + [ + 6077, + 4026, + 0, + 4027, + 0, + "*" + ], + [ + 6078, + 4027, + 0, + 4028, + 0, + "*" + ], + [ + 6082, + 4032, + 0, + 4031, + 1, + "BOOLEAN" + ], + [ + 6086, + 4035, + 0, + 4034, + 1, + "BOOLEAN" + ], + [ + 6090, + 4038, + 0, + 4037, + 1, + "BOOLEAN" + ], + [ + 6100, + 4006, + 0, + 4014, + 0, + "CONDITIONING" + ], + [ + 6101, + 4006, + 1, + 4014, + 1, + "CONDITIONING" + ], + [ + 6102, + 4018, + 0, + 4021, + 0, + "SEGS" + ], + [ + 6103, + 4028, + 0, + 4006, + 2, + "CONTROL_NET" + ], + [ + 6104, + 4028, + 0, + 4018, + 1, + "CONTROL_NET" + ], + [ + 6105, + 4027, + 0, + 4005, + 2, + "CONTROL_NET" + ], + [ + 6106, + 4027, + 0, + 4019, + 1, + "CONTROL_NET" + ], + [ + 6107, + 4026, + 0, + 4000, + 2, + "CONTROL_NET" + ], + [ + 6108, + 4026, + 0, + 4020, + 1, + "CONTROL_NET" + ], + [ + 6110, + 4045, + 0, + 4000, + 1, + "CONDITIONING" + ], + [ + 6112, + 3785, + 0, + 3556, + 0, + "CONDITIONING" + ], + [ + 6114, + 4047, + 0, + 4045, + 0, + "CONDITIONING" + ], + [ + 6115, + 4047, + 0, + 4000, + 0, + "CONDITIONING" + ], + [ + 6116, + 4014, + 0, + 3340, + 0, + "CONDITIONING" + ], + [ + 6117, + 3556, + 0, + 3986, + 0, + "CONDITIONING" + ], + [ + 6118, + 3990, + 0, + 4048, + 0, + "VEC3" + ], + [ + 6119, + 4049, + 0, + 429, + 1, + "SEGS" + ], + [ + 6120, + 3723, + 0, + 4050, + 0, + "*" + ], + [ + 6121, + 3997, + 0, + 4016, + 0, + "MASK" + ], + [ + 6122, + 4051, + 0, + 4032, + 1, + "*" + ], + [ + 6128, + 4057, + 0, + 4056, + 0, + "IMAGE" + ], + [ + 6129, + 4056, + 0, + 4018, + 3, + "IMAGE" + ], + [ + 6130, + 4056, + 0, + 4006, + 3, + "IMAGE" + ], + [ + 6131, + 4048, + 1, + 4000, + 6, + "FLOAT" + ], + [ + 6132, + 4048, + 2, + 4000, + 7, + "FLOAT" + ], + [ + 6133, + 4048, + 1, + 4020, + 6, + "FLOAT" + ], + [ + 6134, + 4048, + 2, + 4020, + 7, + "FLOAT" + ], + [ + 6135, + 4048, + 0, + 4032, + 0, + "*" + ], + [ + 6136, + 4048, + 0, + 4031, + 0, + "*" + ], + [ + 6137, + 3993, + 0, + 4058, + 0, + "VEC3" + ], + [ + 6138, + 4058, + 1, + 4019, + 6, + "FLOAT" + ], + [ + 6139, + 4058, + 2, + 4019, + 7, + "FLOAT" + ], + [ + 6140, + 4058, + 1, + 4005, + 6, + "FLOAT" + ], + [ + 6141, + 4058, + 2, + 4005, + 7, + "FLOAT" + ], + [ + 6142, + 4058, + 0, + 4034, + 0, + "*" + ], + [ + 6143, + 4058, + 0, + 4035, + 0, + "*" + ], + [ + 6144, + 4059, + 1, + 4018, + 6, + "FLOAT" + ], + [ + 6145, + 4059, + 2, + 4018, + 7, + "FLOAT" + ], + [ + 6146, + 4059, + 1, + 4006, + 6, + "FLOAT" + ], + [ + 6147, + 4059, + 2, + 4006, + 7, + "FLOAT" + ], + [ + 6148, + 4059, + 0, + 4038, + 0, + "*" + ], + [ + 6149, + 4059, + 0, + 4037, + 0, + "*" + ], + [ + 6150, + 3994, + 0, + 4059, + 0, + "VEC3" + ], + [ + 6151, + 4044, + 0, + 4022, + 0, + "*" + ], + [ + 6152, + 4060, + 0, + 4035, + 1, + "*" + ], + [ + 6153, + 4061, + 0, + 4038, + 1, + "*" + ], + [ + 6161, + 4067, + 0, + 4068, + 0, + "IMAGE" + ], + [ + 6178, + 4076, + 0, + 1331, + 0, + "INT" + ], + [ + 6179, + 3182, + 0, + 4079, + 2, + "INT" + ], + [ + 6180, + 3178, + 0, + 4079, + 1, + "INT" + ], + [ + 6181, + 1387, + 0, + 4079, + 0, + "IMAGE" + ], + [ + 6182, + 4079, + 0, + 1392, + 0, + "IMAGE" + ], + [ + 6183, + 4079, + 0, + 3132, + 0, + "IMAGE" + ], + [ + 6184, + 4074, + 0, + 4080, + 0, + "*" + ], + [ + 6185, + 4081, + 0, + 4082, + 0, + "VEC2" + ], + [ + 6188, + 4082, + 0, + 4068, + 1, + "FLOAT" + ], + [ + 6189, + 4082, + 1, + 4068, + 2, + "FLOAT" + ], + [ + 6190, + 4082, + 0, + 3493, + 1, + "FLOAT" + ], + [ + 6191, + 4082, + 1, + 3493, + 2, + "FLOAT" + ], + [ + 6193, + 4068, + 0, + 4087, + 0, + "*" + ], + [ + 6194, + 4088, + 0, + 4020, + 3, + "IMAGE" + ], + [ + 6195, + 4088, + 0, + 4000, + 3, + "IMAGE" + ], + [ + 6196, + 3680, + 0, + 4086, + 0, + "IMAGE" + ], + [ + 6197, + 4056, + 0, + 4090, + 0, + "*" + ], + [ + 6206, + 4099, + 0, + 4098, + 0, + "*" + ], + [ + 6208, + 4091, + 0, + 4099, + 1, + "INT" + ], + [ + 6209, + 4091, + 1, + 4099, + 2, + "INT" + ], + [ + 6214, + 4094, + 0, + 4103, + 0, + "IMAGE" + ], + [ + 6215, + 4103, + 0, + 4095, + 0, + "IMAGE" + ], + [ + 6217, + 4093, + 0, + 4104, + 0, + "IMAGE" + ], + [ + 6218, + 4104, + 0, + 4091, + 0, + "IMAGE" + ], + [ + 6219, + 4104, + 0, + 4099, + 0, + "IMAGE" + ], + [ + 6220, + 4105, + 0, + 3343, + 3, + "IMAGE" + ], + [ + 6221, + 4106, + 0, + 4019, + 3, + "IMAGE" + ], + [ + 6222, + 4106, + 0, + 4005, + 3, + "IMAGE" + ], + [ + 6223, + 3833, + 0, + 3829, + 0, + "IMAGE" + ], + [ + 6239, + 922, + 0, + 3830, + 0, + "INT" + ], + [ + 6242, + 1130, + 0, + 1055, + 1, + "MASK" + ], + [ + 6243, + 1051, + 0, + 1134, + 0, + "LATENT" + ], + [ + 6246, + 4109, + 0, + 4110, + 0, + "MODEL" + ], + [ + 6248, + 1103, + 0, + 1116, + 0, + "MODEL" + ], + [ + 6250, + 4110, + 0, + 3301, + 0, + "MODEL" + ], + [ + 6293, + 1106, + 0, + 4113, + 0, + "MODEL" + ], + [ + 6294, + 3291, + 0, + 4113, + 1, + "MODEL" + ], + [ + 6295, + 4113, + 0, + 4109, + 0, + "MODEL" + ], + [ + 6296, + 3758, + 0, + 4113, + 5, + "STRING" + ], + [ + 6297, + 3507, + 0, + 4113, + 2, + "MODEL" + ], + [ + 6298, + 3506, + 0, + 4113, + 3, + "MODEL" + ], + [ + 6300, + 3121, + 0, + 4117, + 1, + "MASK" + ], + [ + 6301, + 4117, + 1, + 3247, + 3, + "IMAGE" + ], + [ + 6302, + 4117, + 2, + 3247, + 4, + "MASK" + ], + [ + 6305, + 4117, + 0, + 4119, + 0, + "*" + ], + [ + 6306, + 4119, + 0, + 4120, + 0, + "*" + ], + [ + 6307, + 4120, + 0, + 4118, + 0, + "STITCHER" + ], + [ + 6308, + 3279, + 0, + 4118, + 1, + "IMAGE" + ], + [ + 6309, + 4118, + 0, + 712, + 0, + "IMAGE" + ], + [ + 6311, + 3257, + 0, + 4117, + 0, + "IMAGE" + ], + [ + 6314, + 4121, + 1, + 3214, + 3, + "IMAGE" + ], + [ + 6315, + 4121, + 2, + 3214, + 4, + "MASK" + ], + [ + 6317, + 3226, + 0, + 4121, + 1, + "MASK" + ], + [ + 6319, + 3225, + 0, + 4121, + 0, + "IMAGE" + ], + [ + 6321, + 4122, + 0, + 3219, + 1, + "VAE" + ], + [ + 6323, + 4123, + 0, + 3220, + 0, + "IMAGE" + ], + [ + 6324, + 4124, + 0, + 3245, + 0, + "*" + ], + [ + 6325, + 3245, + 0, + 4123, + 0, + "STITCHER" + ], + [ + 6326, + 3219, + 0, + 4123, + 1, + "IMAGE" + ], + [ + 6327, + 4121, + 0, + 4124, + 0, + "*" + ], + [ + 6328, + 4126, + 0, + 4122, + 0, + "*" + ], + [ + 6329, + 4126, + 0, + 3214, + 2, + "VAE" + ], + [ + 6330, + 3218, + 0, + 4126, + 0, + "*" + ], + [ + 6335, + 4131, + 0, + 4127, + 0, + "*" + ], + [ + 6337, + 3758, + 0, + 4131, + 0, + "STRING" + ], + [ + 6340, + 4127, + 0, + 1281, + 0, + "FLOAT" + ], + [ + 6341, + 1279, + 0, + 4135, + 0, + "*" + ], + [ + 6342, + 4136, + 0, + 4127, + 2, + "*" + ], + [ + 6343, + 4137, + 0, + 4127, + 1, + "*" + ], + [ + 6344, + 4138, + 0, + 2211, + 0, + "CLIP" + ], + [ + 6346, + 4138, + 0, + 641, + 1, + "CLIP" + ], + [ + 6347, + 4139, + 0, + 641, + 2, + "VAE" + ], + [ + 6350, + 4141, + 0, + 4144, + 0, + "VEC3" + ], + [ + 6352, + 4145, + 0, + 4146, + 0, + "VEC3" + ], + [ + 6354, + 4144, + 0, + 4148, + 0, + "*" + ], + [ + 6355, + 4068, + 0, + 4148, + 1, + "*" + ], + [ + 6356, + 3680, + 0, + 4148, + 2, + "*" + ], + [ + 6359, + 4148, + 0, + 3654, + 0, + "IMAGE" + ], + [ + 6360, + 4146, + 0, + 4150, + 0, + "*" + ], + [ + 6361, + 4103, + 0, + 4150, + 1, + "*" + ], + [ + 6362, + 4099, + 0, + 4150, + 2, + "*" + ], + [ + 6363, + 4150, + 0, + 4102, + 0, + "IMAGE" + ] + ], + "groups": [ + { + "id": 37, + "title": "Depth Mask", + "bounding": [ + 7730, + 2830, + 840, + 330 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + }, + { + "id": 43, + "title": "", + "bounding": [ + 830.17724609375, + 90.28895568847656, + 890.865966796875, + 989.3416748046875 + ], + "font_size": 12, + "flags": { + "pinned": true + } + }, + { + "id": 33, + "title": "Basic Pipe Setup + Empty Latent", + "bounding": [ + 3700, + 2140, + 1440, + 680 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + }, + { + "id": 32, + "title": "Text to Image", + "bounding": [ + 5150, + 2140, + 1890, + 680 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + }, + { + "id": 30, + "title": "Noise Injection", + "bounding": [ + 7050, + 2140, + 2950, + 680 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + }, + { + "id": 42, + "title": "", + "bounding": [ + 1749.915771484375, + 120.41236114501953, + 330, + 470 + ], + "font_size": 12, + "flags": { + "pinned": true + } + }, + { + "id": 31, + "title": "FLUX Config", + "bounding": [ + 3060, + 100, + 620, + 1100 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + }, + { + "id": 41, + "title": "Output Selector", + "bounding": [ + 470, + 140, + 330, + 130 + ], + "font_size": 12, + "flags": {} + }, + { + "id": 39, + "title": "", + "bounding": [ + 470, + 270, + 330, + 300 + ], + "font_size": 12, + "flags": { + "pinned": true + } + }, + { + "id": 36, + "title": "", + "bounding": [ + 470, + 570, + 330, + 440 + ], + "font_size": 12, + "flags": { + "pinned": true + } + }, + { + "id": 35, + "title": "", + "bounding": [ + 1749.76123046875, + 591.859375, + 330, + 130 + ], + "font_size": 12, + "flags": { + "pinned": true + } + }, + { + "id": 34, + "title": "", + "bounding": [ + 1750, + 720, + 330, + 190 + ], + "font_size": 12, + "flags": {} + }, + { + "id": 20, + "title": "img2img", + "bounding": [ + 3700, + 2830, + 1390, + 640 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + }, + { + "id": 29, + "title": "", + "bounding": [ + 1750, + 910, + 329.2669677734375, + 329.1338806152344 + ], + "font_size": 12, + "flags": { + "pinned": true + } + }, + { + "id": 27, + "title": "", + "bounding": [ + 470, + 1010, + 330, + 390 + ], + "font_size": 12, + "flags": {} + }, + { + "id": 28, + "title": "", + "bounding": [ + 831.2684326171875, + 1080.7266845703125, + 890, + 340 + ], + "font_size": 12, + "flags": { + "pinned": true + } + }, + { + "id": 25, + "title": "", + "bounding": [ + 1750, + 1240, + 330, + 140 + ], + "font_size": 12, + "flags": { + "pinned": true + } + }, + { + "id": 17, + "title": "Inpainting", + "bounding": [ + 3700, + 3480, + 3370, + 890 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + }, + { + "id": 14, + "title": "Ultimate Upscaler", + "bounding": [ + 3700, + 5190, + 2080, + 670 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + }, + { + "id": 11, + "title": "Detailer", + "bounding": [ + 3700, + 5870, + 2620, + 860 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + }, + { + "id": 10, + "title": "Save Output", + "bounding": [ + -3510, + 140, + 866.1715698242188, + 305.7850341796875 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + }, + { + "id": 9, + "title": "Sampler Params Split", + "bounding": [ + -2630, + 140, + 690, + 310 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + }, + { + "id": 45, + "title": "Outpainting", + "bounding": [ + 3700, + 4380, + 3370, + 800 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + }, + { + "id": 48, + "title": "Depth", + "bounding": [ + 3700, + 6740, + 1750, + 730 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + }, + { + "id": 49, + "title": "Canny", + "bounding": [ + 3700, + 7480, + 1750, + 650 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + }, + { + "id": 50, + "title": "Model Router", + "bounding": [ + -1920, + 140, + 1370, + 900 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + }, + { + "id": 51, + "title": "IP Adapter", + "bounding": [ + 4230, + 140, + 4170, + 770 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + }, + { + "id": 55, + "title": "Play Sound Notification", + "bounding": [ + -3860, + 180, + 330, + 193.60000610351562 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + }, + { + "id": 65, + "title": "ControlNet", + "bounding": [ + 3700, + 930, + 4700, + 590 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + }, + { + "id": 66, + "title": "Conditioning", + "bounding": [ + 3700, + 100, + 5170, + 820 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + }, + { + "id": 68, + "title": "", + "bounding": [ + 1750, + 1380, + 330, + 160 + ], + "font_size": 12, + "flags": { + "pinned": true + } + }, + { + "id": 69, + "title": "Canny Preprocessor", + "bounding": [ + 3700, + 1530, + 1560, + 600 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + }, + { + "id": 70, + "title": "Depth Preprocessor", + "bounding": [ + 5270, + 1530, + 1750, + 600 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + }, + { + "id": 71, + "title": "Final Image", + "bounding": [ + -4440, + 140, + 920, + 300 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + }, + { + "id": 74, + "title": "", + "bounding": [ + 470, + 1400, + 330, + 180 + ], + "font_size": 12, + "flags": {} + }, + { + "id": 75, + "title": "TeaCache", + "bounding": [ + -1240, + 300, + 162.36050415039062, + 80.75067901611328 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + } + ], + "config": {}, + "extra": { + "ds": { + "scale": 0.9090909090909098, + "offset": [ + -191.1400082616483, + -32.72070904842098 + ] + }, + "frontendVersion": "1.21.7", + "groupNodes": {}, + "VHS_latentpreview": false, + "VHS_latentpreviewrate": 0, + "VHS_MetadataImage": true, + "VHS_KeepIntermediate": true + }, + "version": 0.4 +} diff --git a/comfyui-flux-continuum/workflow/Flux+ Light 1.0.0_release.json b/comfyui-flux-continuum/workflow/Flux+ Light 1.0.0_release.json new file mode 100644 index 0000000000000000000000000000000000000000..dd195175f0e28fe4dfcae2c7226e909cd0943716 --- /dev/null +++ b/comfyui-flux-continuum/workflow/Flux+ Light 1.0.0_release.json @@ -0,0 +1,11985 @@ +{ + "last_node_id": 3853, + "last_link_id": 5833, + "nodes": [ + { + "id": 1026, + "type": "ImagePass", + "pos": [ + 530, + 230 + ], + "size": [ + 210, + 30 + ], + "flags": { + "collapsed": true + }, + "order": 140, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 4941, + "shape": 7 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 1745 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "ImagePass", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 1113, + "type": "ImagePass", + "pos": [ + 3840, + -160 + ], + "size": [ + 210, + 30 + ], + "flags": { + "collapsed": true + }, + "order": 107, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 4511, + "shape": 7 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 1859 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "ImagePass", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 644, + "type": "SetNode", + "pos": [ + 4186.2509765625, + 329.36273193359375 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 213, + "mode": 0, + "inputs": [ + { + "name": "BASIC_PIPE", + "type": "BASIC_PIPE", + "link": 1187 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_pipe", + "properties": { + "previousName": "pipe" + }, + "widgets_values": [ + "pipe" + ], + "color": "#322", + "bgcolor": "hsla(0, 25%, 26.7%, 1)" + }, + { + "id": 712, + "type": "SetNode", + "pos": [ + 6340, + 1780 + ], + "size": [ + 210, + 60 + ], + "flags": { + "collapsed": false + }, + "order": 221, + "mode": 0, + "inputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "link": 4854 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_Output - inpainting", + "properties": { + "previousName": "Output - inpainting" + }, + "widgets_values": [ + "Output - inpainting" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 715, + "type": "SetNode", + "pos": [ + 6650, + 440 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 216, + "mode": 0, + "inputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "link": 1538 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_Output - txt2img", + "properties": { + "previousName": "Output - txt2img" + }, + "widgets_values": [ + "Output - txt2img" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 716, + "type": "SetNode", + "pos": [ + 4030, + -160 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 155, + "mode": 0, + "inputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "link": 1859 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 4779 + ], + "slot_index": 0 + } + ], + "title": "Set_final", + "properties": { + "previousName": "final" + }, + "widgets_values": [ + "final" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 723, + "type": "SetNode", + "pos": [ + 1431.1396484375, + 1160.7176513671875 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 142, + "mode": 0, + "inputs": [ + { + "name": "STRING", + "type": "STRING", + "link": 3492 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_prompt", + "properties": { + "previousName": "prompt" + }, + "widgets_values": [ + "prompt" + ] + }, + { + "id": 729, + "type": "SetNode", + "pos": [ + 5410, + 3270 + ], + "size": [ + 252, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 214, + "mode": 0, + "inputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "link": 2177 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_Output - ultimate upscaler", + "properties": { + "previousName": "Output - ultimate upscaler" + }, + "widgets_values": [ + "Output - ultimate upscaler" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 788, + "type": "SetNode", + "pos": [ + 1590.7579345703125, + 1348.9764404296875 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 143, + "mode": 0, + "inputs": [ + { + "name": "STRING", + "type": "STRING", + "link": 3493 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": [], + "slot_index": 0 + } + ], + "title": "Set_tags", + "properties": { + "previousName": "tags" + }, + "widgets_values": [ + "tags" + ] + }, + { + "id": 832, + "type": "SetNode", + "pos": [ + 3371.815673828125, + 318.3890380859375 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 134, + "mode": 0, + "inputs": [ + { + "name": "VAE", + "type": "VAE", + "link": 4425 + } + ], + "outputs": [ + { + "name": "VAE", + "type": "VAE", + "links": [ + 5324 + ], + "slot_index": 0 + } + ], + "title": "Set_vae", + "properties": { + "previousName": "vae" + }, + "widgets_values": [ + "vae" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 1023, + "type": "SetNode", + "pos": [ + 670, + 210 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 178, + "mode": 0, + "inputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "link": 1745 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_send", + "properties": { + "previousName": "send" + }, + "widgets_values": [ + "send" + ] + }, + { + "id": 1061, + "type": "SetNode", + "pos": [ + 8560, + 250 + ], + "size": [ + 302.3999938964844, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 225, + "mode": 0, + "inputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "link": 1783 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_Output - txt2img noise injection", + "properties": { + "previousName": "Output - txt2img noise injection" + }, + "widgets_values": [ + "Output - txt2img noise injection" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 1075, + "type": "SetNode", + "pos": [ + 4777.0771484375, + 876.7098999023438 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 206, + "mode": 0, + "inputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "link": 1802 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_Output - img2img", + "properties": { + "previousName": "Output - img2img" + }, + "widgets_values": [ + "Output - img2img" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 1105, + "type": "SetNode", + "pos": [ + 3371.815673828125, + 203.81993103027344 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 141, + "mode": 0, + "inputs": [ + { + "name": "MODEL", + "type": "MODEL", + "link": 3494 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": [], + "slot_index": 0 + } + ], + "title": "Set_model", + "properties": { + "previousName": "model" + }, + "widgets_values": [ + "model" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 1114, + "type": "SetNode", + "pos": [ + 3371.815673828125, + 428.3890380859375 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 133, + "mode": 0, + "inputs": [ + { + "name": "CLIP", + "type": "CLIP", + "link": 4424 + } + ], + "outputs": [ + { + "name": "CLIP", + "type": "CLIP", + "links": [ + 5319 + ], + "slot_index": 0 + } + ], + "title": "Set_clip", + "properties": { + "previousName": "clip" + }, + "widgets_values": [ + "clip" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 1116, + "type": "SetNode", + "pos": [ + 560, + 470 + ], + "size": [ + 285.375, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 172, + "mode": 0, + "inputs": [ + { + "name": "MODEL", + "type": "MODEL", + "link": 1863 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_modelWithLoRAs", + "properties": { + "previousName": "modelWithLoRAs" + }, + "widgets_values": [ + "modelWithLoRAs" + ] + }, + { + "id": 1217, + "type": "SetNode", + "pos": [ + 1938.784423828125, + 667.22509765625 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 149, + "mode": 0, + "inputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "link": 2000 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_denoise", + "properties": { + "previousName": "denoise" + }, + "widgets_values": [ + "denoise" + ] + }, + { + "id": 1271, + "type": "SetNode", + "pos": [ + 6000, + -220 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 181, + "mode": 0, + "inputs": [ + { + "name": "COMBO", + "type": "COMBO", + "link": 3464 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_scheduler", + "properties": { + "previousName": "scheduler" + }, + "widgets_values": [ + "scheduler" + ] + }, + { + "id": 1272, + "type": "SetNode", + "pos": [ + 6000, + -100 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 182, + "mode": 0, + "inputs": [ + { + "name": "STRING", + "type": "STRING", + "link": 3466 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_scheduler_name", + "properties": { + "previousName": "scheduler_name" + }, + "widgets_values": [ + "scheduler_name" + ] + }, + { + "id": 1280, + "type": "SetNode", + "pos": [ + 670, + 750 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 135, + "mode": 0, + "inputs": [ + { + "name": "INT", + "type": "INT", + "link": 2002 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_steps", + "properties": { + "previousName": "steps" + }, + "widgets_values": [ + "steps" + ] + }, + { + "id": 1281, + "type": "SetNode", + "pos": [ + 650, + 860 + ], + "size": [ + 210, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 136, + "mode": 0, + "inputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "link": 2001 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_guidance", + "properties": { + "previousName": "guidance" + }, + "widgets_values": [ + "guidance" + ] + }, + { + "id": 1320, + "type": "SetNode", + "pos": [ + 1890, + 340 + ], + "size": [ + 210, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 150, + "mode": 0, + "inputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "link": 4446 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": [], + "slot_index": 0 + } + ], + "title": "Set_loadImage", + "properties": { + "previousName": "loadImage" + }, + "widgets_values": [ + "loadImage" + ] + }, + { + "id": 1331, + "type": "SetNode", + "pos": [ + 1920, + 1210 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 146, + "mode": 0, + "inputs": [ + { + "name": "INT", + "type": "INT", + "link": 3215 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_res multiply", + "properties": { + "previousName": "res multiply" + }, + "widgets_values": [ + "res multiply" + ] + }, + { + "id": 1392, + "type": "SetNode", + "pos": [ + 4470, + 3430 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 198, + "mode": 0, + "inputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "link": 3433 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_Output - upscaler", + "properties": { + "previousName": "Output - upscaler" + }, + "widgets_values": [ + "Output - upscaler" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 1508, + "type": "SetNode", + "pos": [ + 6000, + -180 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 179, + "mode": 0, + "inputs": [ + { + "name": "COMBO", + "type": "COMBO", + "link": 3463 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_sampler", + "properties": { + "previousName": "sampler" + }, + "widgets_values": [ + "sampler" + ] + }, + { + "id": 1510, + "type": "SetNode", + "pos": [ + 6000, + -140 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 180, + "mode": 0, + "inputs": [ + { + "name": "STRING", + "type": "STRING", + "link": 3465 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_sampler_name", + "properties": { + "previousName": "sampler_name" + }, + "widgets_values": [ + "sampler_name" + ] + }, + { + "id": 1518, + "type": "SetNode", + "pos": [ + 6250, + 650 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 159, + "mode": 0, + "inputs": [ + { + "name": "SAMPLER", + "type": "SAMPLER", + "link": 2335 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_sampler_convert", + "properties": { + "previousName": "sampler_convert" + }, + "widgets_values": [ + "sampler_convert" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 1617, + "type": "SetNode", + "pos": [ + 650, + 940 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 137, + "mode": 0, + "inputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "link": 2418 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_max shift", + "properties": { + "previousName": "max shift" + }, + "widgets_values": [ + "max shift" + ] + }, + { + "id": 2428, + "type": "SetNode", + "pos": [ + 650, + 1350 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 138, + "mode": 0, + "inputs": [ + { + "name": "COMBO", + "type": "COMBO", + "link": 3447 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_resolution", + "properties": { + "previousName": "resolution" + }, + "widgets_values": [ + "resolution" + ] + }, + { + "id": 2437, + "type": "SetNode", + "pos": [ + 610, + 620 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 139, + "mode": 0, + "inputs": [ + { + "name": "SAMPLER_PARAMS", + "type": "SAMPLER_PARAMS", + "link": 3460 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_sampler params", + "properties": { + "previousName": "sampler params" + }, + "widgets_values": [ + "sampler params" + ] + }, + { + "id": 2507, + "type": "SetNode", + "pos": [ + 4839.5029296875, + 425.84979248046875 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 163, + "mode": 0, + "inputs": [ + { + "name": "INT", + "type": "INT", + "link": 3543 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_width", + "properties": { + "previousName": "width" + }, + "widgets_values": [ + "width" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 2508, + "type": "SetNode", + "pos": [ + 4839.5029296875, + 475.849853515625 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 165, + "mode": 0, + "inputs": [ + { + "name": "INT", + "type": "INT", + "link": 3544 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_height", + "properties": { + "previousName": "height" + }, + "widgets_values": [ + "height" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 3032, + "type": "SetNode", + "pos": [ + 4839.5029296875, + 375.8497619628906 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 161, + "mode": 0, + "inputs": [ + { + "name": "LATENT", + "type": "LATENT", + "link": 4514 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_latent", + "properties": { + "previousName": "latent" + }, + "widgets_values": [ + "latent" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 1095, + "type": "SetNode", + "pos": [ + 670, + 1070 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 144, + "mode": 0, + "inputs": [ + { + "name": "INT", + "type": "INT", + "link": 2305 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_batch", + "properties": { + "previousName": "batch" + }, + "widgets_values": [ + "batch" + ] + }, + { + "id": 925, + "type": "SetNode", + "pos": [ + 660, + 1170 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 145, + "mode": 0, + "inputs": [ + { + "name": "INT", + "type": "INT", + "link": 1589 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_seed", + "properties": { + "previousName": "seed" + }, + "widgets_values": [ + "seed" + ] + }, + { + "id": 3340, + "type": "SetNode", + "pos": [ + 4350, + 3950 + ], + "size": [ + 260, + 60 + ], + "flags": {}, + "order": 168, + "mode": 0, + "inputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "link": 5833 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_conditioning", + "properties": { + "previousName": "conditioning" + }, + "widgets_values": [ + "conditioning" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 3830, + "type": "SetNode", + "pos": [ + 5930, + 2560 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 222, + "mode": 0, + "inputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "link": 5802 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_Output - detailer", + "properties": { + "previousName": "" + }, + "widgets_values": [ + "Output - detailer" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 1330, + "type": "SetNode", + "pos": [ + 1890, + 1310 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 147, + "mode": 0, + "inputs": [ + { + "name": "UPSCALE_MODEL", + "type": "UPSCALE_MODEL", + "link": 2361 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_upscale_model", + "properties": { + "previousName": "" + }, + "widgets_values": [ + "upscale_model" + ] + }, + { + "id": 3328, + "type": "SetNode", + "pos": [ + 1900, + 780 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 148, + "mode": 0, + "inputs": [ + { + "name": "INT", + "type": "INT", + "link": 4976 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_mask_feather", + "properties": { + "previousName": "mask_feather" + }, + "widgets_values": [ + "mask_feather" + ] + }, + { + "id": 596, + "type": "GetNode", + "pos": [ + 5870, + 340 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 0, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 1360 + ], + "slot_index": 0 + } + ], + "title": "Get_seed", + "properties": {}, + "widgets_values": [ + "seed" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 708, + "type": "GetNode", + "pos": [ + 4910, + 3380 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 1, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 2173 + ], + "slot_index": 0 + } + ], + "title": "Get_seed", + "properties": {}, + "widgets_values": [ + "seed" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 717, + "type": "GetNode", + "pos": [ + 1000.17724609375, + 150.2889404296875 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 2, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 3426, + 4414 + ], + "slot_index": 0 + } + ], + "title": "Get_final", + "properties": {}, + "widgets_values": [ + "final" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 724, + "type": "GetNode", + "pos": [ + 3630, + 4030 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 3, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "STRING", + "type": "STRING", + "links": [ + 1442 + ], + "slot_index": 0 + } + ], + "title": "Get_prompt", + "properties": {}, + "widgets_values": [ + "prompt" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 726, + "type": "GetNode", + "pos": [ + 5060, + -210 + ], + "size": [ + 313.42822265625, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 4, + "mode": 4, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 2380 + ], + "slot_index": 0 + } + ], + "title": "Get_final", + "properties": {}, + "widgets_values": [ + "final" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 793, + "type": "GetNode", + "pos": [ + 3640, + 3990 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 5, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "STRING", + "type": "STRING", + "links": [ + 1443 + ], + "slot_index": 0 + } + ], + "title": "Get_tags", + "properties": {}, + "widgets_values": [ + "tags" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 933, + "type": "GetNode", + "pos": [ + 4530, + 3350 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 6, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "BASIC_PIPE", + "type": "BASIC_PIPE", + "links": [ + 1599 + ] + } + ], + "title": "Get_pipe", + "properties": {}, + "widgets_values": [ + "pipe" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 965, + "type": "GetNode", + "pos": [ + 3712.240234375, + 880.7233276367188 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 7, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "VAE", + "type": "VAE", + "links": [ + 1680, + 1804 + ], + "slot_index": 0 + } + ], + "title": "Get_vae", + "properties": {}, + "widgets_values": [ + "vae" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1022, + "type": "GetNode", + "pos": [ + 3670, + -160 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 8, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 4511 + ], + "slot_index": 0 + } + ], + "title": "Get_send", + "properties": {}, + "widgets_values": [ + "send" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1057, + "type": "GetNode", + "pos": [ + 7001.9658203125, + 267.23828125 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 9, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 1775 + ], + "slot_index": 0 + } + ], + "title": "Get_seed", + "properties": {}, + "widgets_values": [ + "seed" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1064, + "type": "GetNode", + "pos": [ + 8234.751953125, + 204.01480102539062 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 10, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "VAE", + "type": "VAE", + "links": [ + 1786 + ] + } + ], + "title": "Get_vae", + "properties": {}, + "widgets_values": [ + "vae" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1079, + "type": "GetNode", + "pos": [ + 4077.0810546875, + 926.7098999023438 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 11, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "links": [ + 3363 + ], + "slot_index": 0 + } + ], + "title": "Get_modelWithLoRAs", + "properties": {}, + "widgets_values": [ + "modelWithLoRAs" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1086, + "type": "GetNode", + "pos": [ + 3967.0810546875, + 1136.7099609375 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 12, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 4689 + ], + "slot_index": 0 + } + ], + "title": "Get_seed", + "properties": {}, + "widgets_values": [ + "seed" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1099, + "type": "GetNode", + "pos": [ + 7071.9658203125, + 397.2384338378906 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 13, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "LATENT", + "type": "LATENT", + "links": [ + 2105 + ], + "slot_index": 0 + } + ], + "title": "Get_latent", + "properties": {}, + "widgets_values": [ + "latent" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1115, + "type": "GetNode", + "pos": [ + 550, + 400 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 14, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "CLIP", + "type": "CLIP", + "links": [ + 3432 + ], + "slot_index": 0 + } + ], + "title": "Get_clip", + "properties": {}, + "widgets_values": [ + "clip" + ] + }, + { + "id": 1117, + "type": "GetNode", + "pos": [ + 3776.249755859375, + 239.36273193359375 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 15, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "links": [ + 5046, + 5326 + ], + "slot_index": 0 + } + ], + "title": "Get_modelWithLoRAs", + "properties": {}, + "widgets_values": [ + "modelWithLoRAs" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1162, + "type": "GetNode", + "pos": [ + 3853.34716796875, + 1022.2464599609375 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 16, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 1920 + ], + "slot_index": 0 + } + ], + "title": "Get_batch", + "properties": {}, + "widgets_values": [ + "batch" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1218, + "type": "GetNode", + "pos": [ + 4900, + 3510 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 17, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "links": [ + 2174 + ], + "slot_index": 0 + } + ], + "title": "Get_denoise", + "properties": {}, + "widgets_values": [ + "denoise" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1219, + "type": "GetNode", + "pos": [ + 3957.0810546875, + 1086.7099609375 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 18, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "links": [ + 4691 + ], + "slot_index": 0 + } + ], + "title": "Get_denoise", + "properties": {}, + "widgets_values": [ + "denoise" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1282, + "type": "GetNode", + "pos": [ + 3977.0810546875, + 1266.7099609375 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 19, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 2003 + ], + "slot_index": 0 + } + ], + "title": "Get_steps", + "properties": {}, + "widgets_values": [ + "steps" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1286, + "type": "GetNode", + "pos": [ + 4037.0810546875, + 1206.7099609375 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 20, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "STRING", + "type": "STRING", + "links": [ + 2005 + ] + } + ], + "title": "Get_scheduler_name", + "properties": {}, + "widgets_values": [ + "scheduler_name" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1287, + "type": "GetNode", + "pos": [ + 3957.0810546875, + 1306.7099609375 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 21, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "links": [ + 2006 + ], + "slot_index": 0 + } + ], + "title": "Get_guidance", + "properties": {}, + "widgets_values": [ + "guidance" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1298, + "type": "GetNode", + "pos": [ + 4830, + 2040 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 22, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 4917 + ], + "slot_index": 0 + } + ], + "title": "Get_seed", + "properties": {}, + "widgets_values": [ + "seed" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1300, + "type": "GetNode", + "pos": [ + 4550, + 2110 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 23, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 2018 + ], + "slot_index": 0 + } + ], + "title": "Get_batch", + "properties": {}, + "widgets_values": [ + "batch" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1308, + "type": "GetNode", + "pos": [ + 4910, + 3420 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 24, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 2175 + ], + "slot_index": 0 + } + ], + "title": "Get_steps", + "properties": {}, + "widgets_values": [ + "steps" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1311, + "type": "GetNode", + "pos": [ + 4900, + 3470 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 25, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "COMBO", + "type": "COMBO", + "links": [ + 2176 + ] + } + ], + "title": "Get_scheduler", + "properties": {}, + "widgets_values": [ + "scheduler" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1317, + "type": "GetNode", + "pos": [ + 5670, + 520 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 26, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "COMBO", + "type": "COMBO", + "links": [ + 2037 + ] + } + ], + "title": "Get_scheduler", + "properties": {}, + "widgets_values": [ + "scheduler" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1318, + "type": "GetNode", + "pos": [ + 5690, + 560 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 27, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 2038 + ] + } + ], + "title": "Get_steps", + "properties": {}, + "widgets_values": [ + "steps" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1319, + "type": "GetNode", + "pos": [ + 3620, + 4080 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 28, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "links": [ + 4993 + ], + "slot_index": 0 + } + ], + "title": "Get_guidance", + "properties": {}, + "widgets_values": [ + "guidance" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1323, + "type": "GetNode", + "pos": [ + 3633.3486328125, + 1092.24658203125 + ], + "size": [ + 280, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 29, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 2071 + ], + "slot_index": 0 + } + ], + "title": "Get_Output - imgload_prep", + "properties": {}, + "widgets_values": [ + "Output - imgload_prep" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1339, + "type": "GetNode", + "pos": [ + 3630, + 3270 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 30, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "UPSCALE_MODEL", + "type": "UPSCALE_MODEL", + "links": [ + 2163 + ], + "slot_index": 0 + } + ], + "title": "Get_upscale_model", + "properties": {}, + "widgets_values": [ + "upscale_model" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1340, + "type": "GetNode", + "pos": [ + 3650, + 3500 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 31, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 4714, + 4715 + ], + "slot_index": 0 + } + ], + "title": "Get_res multiply", + "properties": {}, + "widgets_values": [ + "res multiply" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1388, + "type": "GetNode", + "pos": [ + 3630, + 3390 + ], + "size": [ + 268.79998779296875, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 32, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 2165, + 2166 + ], + "slot_index": 0 + } + ], + "title": "Get_Output - imgload_prep", + "properties": {}, + "widgets_values": [ + "Output - imgload_prep" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1515, + "type": "GetNode", + "pos": [ + 5860, + 650 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 33, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "COMBO", + "type": "COMBO", + "links": [ + 2333 + ] + } + ], + "title": "Get_sampler", + "properties": {}, + "widgets_values": [ + "sampler" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1520, + "type": "GetNode", + "pos": [ + 7021.9658203125, + 357.2383117675781 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 34, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "SAMPLER", + "type": "SAMPLER", + "links": [ + 2337, + 2338 + ], + "slot_index": 0 + } + ], + "title": "Get_sampler_convert", + "properties": {}, + "widgets_values": [ + "sampler_convert" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1524, + "type": "GetNode", + "pos": [ + 4900, + 3560 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 35, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "COMBO", + "type": "COMBO", + "links": [ + 2342 + ] + } + ], + "title": "Get_sampler", + "properties": {}, + "widgets_values": [ + "sampler" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1526, + "type": "GetNode", + "pos": [ + 4047.0810546875, + 1346.7099609375 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 36, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "STRING", + "type": "STRING", + "links": [ + 2344 + ], + "slot_index": 0 + } + ], + "title": "Get_sampler_name", + "properties": {}, + "widgets_values": [ + "sampler_name" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1602, + "type": "GetNode", + "pos": [ + 4640, + -140 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": false + }, + "order": 37, + "mode": 4, + "inputs": [], + "outputs": [ + { + "name": "STRING", + "type": "STRING", + "links": [ + 4780 + ], + "slot_index": 0 + } + ], + "title": "Get_prompt", + "properties": {}, + "widgets_values": [ + "prompt" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1618, + "type": "GetNode", + "pos": [ + 5120, + 510 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 38, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "links": [ + 2404 + ], + "slot_index": 0 + } + ], + "title": "Get_max shift", + "properties": {}, + "widgets_values": [ + "max shift" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1620, + "type": "GetNode", + "pos": [ + 4690, + 3210 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 39, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "links": [ + 2406 + ], + "slot_index": 0 + } + ], + "title": "Get_max shift", + "properties": {}, + "widgets_values": [ + "max shift" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1623, + "type": "GetNode", + "pos": [ + 3947.0810546875, + 1386.7099609375 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 40, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "links": [ + 2409 + ], + "slot_index": 0 + } + ], + "title": "Get_max shift", + "properties": {}, + "widgets_values": [ + "max shift" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 2217, + "type": "GetNode", + "pos": [ + 4356.2509765625, + 399.36273193359375 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 41, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 3214 + ], + "slot_index": 0 + } + ], + "title": "Get_batch", + "properties": {}, + "widgets_values": [ + "batch" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 2328, + "type": "GetNode", + "pos": [ + 4077.0810546875, + 966.7098999023438 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 42, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [ + 3362 + ], + "slot_index": 0 + } + ], + "title": "Get_conditioning", + "properties": {}, + "widgets_values": [ + "conditioning" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 2364, + "type": "GetNode", + "pos": [ + 1150, + 150 + ], + "size": [ + 268.79998779296875, + 58 + ], + "flags": { + "collapsed": true, + "pinned": true + }, + "order": 43, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 3425 + ], + "slot_index": 0 + } + ], + "title": "Get_loadImage", + "properties": {}, + "widgets_values": [ + "loadImage" + ] + }, + { + "id": 2429, + "type": "GetNode", + "pos": [ + 4326.2509765625, + 449.36273193359375 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 44, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "COMBO", + "type": "COMBO", + "links": [ + 3448 + ], + "slot_index": 0 + } + ], + "title": "Get_resolution", + "properties": {}, + "widgets_values": [ + "resolution" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 2472, + "type": "GetNode", + "pos": [ + 6300, + 460 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 45, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "VAE", + "type": "VAE", + "links": [ + 3499 + ], + "slot_index": 0 + } + ], + "title": "Get_vae", + "properties": {}, + "widgets_values": [ + "vae" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3121, + "type": "GetNode", + "pos": [ + 3640, + 1700 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 46, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "MASK", + "type": "MASK", + "links": [ + 4966 + ], + "slot_index": 0 + } + ], + "title": "Get_mask", + "properties": {}, + "widgets_values": [ + "mask" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3133, + "type": "GetNode", + "pos": [ + 4400, + 3210 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 47, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 4666 + ], + "slot_index": 0 + } + ], + "title": "Get_batch", + "properties": {}, + "widgets_values": [ + "batch" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3256, + "type": "GetNode", + "pos": [ + 3790, + 1980 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 48, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "CLIP", + "type": "CLIP", + "links": [ + 4827 + ], + "slot_index": 0 + } + ], + "title": "Get_clip", + "properties": {}, + "widgets_values": [ + "clip" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3257, + "type": "GetNode", + "pos": [ + 3640, + 1650 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 49, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 4849 + ], + "slot_index": 0 + } + ], + "title": "Get_Output - imgload_prep", + "properties": {}, + "widgets_values": [ + "Output - imgload_prep" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3260, + "type": "GetNode", + "pos": [ + 4830, + 2080 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 50, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 4839 + ], + "slot_index": 0 + } + ], + "title": "Get_steps", + "properties": {}, + "widgets_values": [ + "steps" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3268, + "type": "GetNode", + "pos": [ + 4810, + 2120 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 51, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "COMBO", + "type": "COMBO", + "links": [ + 4852 + ] + } + ], + "title": "Get_scheduler", + "properties": {}, + "widgets_values": [ + "scheduler" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3269, + "type": "GetNode", + "pos": [ + 4820, + 2160 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 52, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "COMBO", + "type": "COMBO", + "links": [ + 4853 + ] + } + ], + "title": "Get_sampler", + "properties": {}, + "widgets_values": [ + "sampler" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3285, + "type": "GetNode", + "pos": [ + 4820, + 2200 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 53, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "links": [ + 4921 + ], + "slot_index": 0 + } + ], + "title": "Get_denoise", + "properties": {}, + "widgets_values": [ + "denoise" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3303, + "type": "GetNode", + "pos": [ + 4730, + 1770 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 54, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "links": [ + 4945 + ], + "slot_index": 0 + } + ], + "title": "Get_modelWithLoRAs", + "properties": {}, + "widgets_values": [ + "modelWithLoRAs" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3330, + "type": "GetNode", + "pos": [ + 5540, + 1930 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 55, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 5589 + ], + "slot_index": 0 + } + ], + "title": "Get_mask_feather", + "properties": {}, + "widgets_values": [ + "mask_feather" + ] + }, + { + "id": 3342, + "type": "GetNode", + "pos": [ + 4090, + 1840 + ], + "size": [ + 250, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 56, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [ + 4992 + ] + } + ], + "title": "Get_conditioning", + "properties": {}, + "widgets_values": [ + "conditioning" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3368, + "type": "GetNode", + "pos": [ + 3640, + 3950 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 57, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "CLIP", + "type": "CLIP", + "links": [ + 5019 + ], + "slot_index": 0 + } + ], + "title": "Get_clip", + "properties": {}, + "widgets_values": [ + "clip" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3367, + "type": "GetNode", + "pos": [ + 3780, + 290 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 58, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [ + 5017, + 5384 + ], + "slot_index": 0 + } + ], + "title": "Get_conditioning", + "properties": {}, + "widgets_values": [ + "conditioning" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1291, + "type": "GetNode", + "pos": [ + 3640, + 1610 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 59, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "VAE", + "type": "VAE", + "links": [ + 4912 + ], + "slot_index": 0 + } + ], + "title": "Get_vae", + "properties": {}, + "widgets_values": [ + "vae" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3302, + "type": "GetNode", + "pos": [ + 510, + 370 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": false + }, + "order": 60, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "links": [ + 4940 + ], + "slot_index": 0 + } + ], + "title": "Get_model", + "properties": {}, + "widgets_values": [ + "model" + ] + }, + { + "id": 3831, + "type": "GetNode", + "pos": [ + 4710, + 2610 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 61, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "BASIC_PIPE", + "type": "BASIC_PIPE", + "links": [ + 5805 + ], + "slot_index": 0 + } + ], + "title": "Get_pipe", + "properties": {}, + "widgets_values": [ + "pipe" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3832, + "type": "GetNode", + "pos": [ + 4670, + 2830 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 62, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "links": [ + 5809 + ], + "slot_index": 0 + } + ], + "title": "Get_denoise", + "properties": {}, + "widgets_values": [ + "denoise" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3833, + "type": "GetNode", + "pos": [ + 4680, + 2720 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 63, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 5807 + ], + "slot_index": 0 + } + ], + "title": "Get_steps", + "properties": {}, + "widgets_values": [ + "steps" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3834, + "type": "GetNode", + "pos": [ + 3630, + 2510 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 64, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 5810, + 5824 + ], + "slot_index": 0 + } + ], + "title": "Get_Output - imgload_prep", + "properties": {}, + "widgets_values": [ + "Output - imgload_prep" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3835, + "type": "GetNode", + "pos": [ + 4530, + 2780 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 65, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "COMBO", + "type": "COMBO", + "links": [] + } + ], + "title": "Get_scheduler", + "properties": {}, + "widgets_values": [ + "scheduler" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3836, + "type": "GetNode", + "pos": [ + 4470, + 2700 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 66, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 5813 + ], + "slot_index": 0 + } + ], + "title": "Get_seed", + "properties": {}, + "widgets_values": [ + "seed" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3837, + "type": "GetNode", + "pos": [ + 3630, + 2580 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 67, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 5811 + ], + "slot_index": 0 + } + ], + "title": "Get_batch", + "properties": {}, + "widgets_values": [ + "batch" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3838, + "type": "GetNode", + "pos": [ + 4670, + 2870 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 68, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "COMBO", + "type": "COMBO", + "links": [] + } + ], + "title": "Get_sampler", + "properties": {}, + "widgets_values": [ + "sampler" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3839, + "type": "GetNode", + "pos": [ + 3630, + 2720 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 69, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 5818 + ], + "slot_index": 0 + } + ], + "title": "Get_mask_feather", + "properties": {}, + "widgets_values": [ + "mask_feather" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3840, + "type": "GetNode", + "pos": [ + 3630, + 2670 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 70, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "MASK", + "type": "MASK", + "links": [ + 5817 + ], + "slot_index": 0 + } + ], + "title": "Get_mask", + "properties": {}, + "widgets_values": [ + "mask" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3000, + "type": "PreviewImage", + "pos": [ + 840, + 150 + ], + "size": [ + 870, + 920 + ], + "flags": { + "collapsed": false, + "pinned": true + }, + "order": 105, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 4414 + } + ], + "outputs": [], + "title": "Img Preview", + "properties": { + "Node name for S&R": "PreviewImage", + "enableTabs": true, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": true, + "secondTabText": "Img Compare", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [], + "color": "#222", + "bgcolor": "#000" + }, + { + "id": 418, + "type": "ImageResizeKJ", + "pos": [ + 4270, + 3280 + ], + "size": [ + 320, + 240 + ], + "flags": { + "collapsed": true + }, + "order": 186, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 2180 + }, + { + "name": "get_image_size", + "type": "IMAGE", + "link": null, + "shape": 7 + }, + { + "name": "width_input", + "type": "INT", + "link": 4718, + "widget": { + "name": "width_input" + } + }, + { + "name": "height_input", + "type": "INT", + "link": 4719, + "widget": { + "name": "height_input" + } + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 3433, + 4667 + ], + "slot_index": 0, + "shape": 3 + }, + { + "name": "width", + "type": "INT", + "links": [], + "slot_index": 1, + "shape": 3 + }, + { + "name": "height", + "type": "INT", + "links": [], + "slot_index": 2, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "ImageResizeKJ", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 2048, + 2048, + "lanczos", + true, + 2, + 0, + 0, + "disabled" + ] + }, + { + "id": 583, + "type": "DualCLIPLoader", + "pos": [ + 2997.352294921875, + 397.0935974121094 + ], + "size": [ + 320, + 110 + ], + "flags": {}, + "order": 71, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "CLIP", + "type": "CLIP", + "links": [ + 4424 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "DualCLIPLoader", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "t5xxl_fp16.safetensors", + "clip_l.safetensors", + "flux" + ] + }, + { + "id": 586, + "type": "ModelSamplingFlux", + "pos": [ + 5300, + 370 + ], + "size": [ + 250, + 120 + ], + "flags": { + "collapsed": false + }, + "order": 164, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 5045 + }, + { + "name": "width", + "type": "INT", + "link": 3449, + "widget": { + "name": "width" + } + }, + { + "name": "height", + "type": "INT", + "link": 3450, + "widget": { + "name": "height" + } + }, + { + "name": "max_shift", + "type": "FLOAT", + "link": 2404, + "widget": { + "name": "max_shift" + } + } + ], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "links": [ + 1123, + 1424, + 1489 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "ModelSamplingFlux", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 1.1500000000000001, + 0.5, + 16, + 704 + ] + }, + { + "id": 589, + "type": "BasicGuider", + "pos": [ + 5940, + 410 + ], + "size": [ + 161.1999969482422, + 50 + ], + "flags": { + "collapsed": true + }, + "order": 189, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 1424 + }, + { + "name": "conditioning", + "type": "CONDITIONING", + "link": 5237 + } + ], + "outputs": [ + { + "name": "GUIDER", + "type": "GUIDER", + "links": [ + 1118 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "BasicGuider", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 590, + "type": "SamplerCustomAdvanced", + "pos": [ + 6280, + 410 + ], + "size": [ + 240, + 110 + ], + "flags": { + "collapsed": true + }, + "order": 201, + "mode": 0, + "inputs": [ + { + "name": "noise", + "type": "NOISE", + "link": 1371 + }, + { + "name": "guider", + "type": "GUIDER", + "link": 1118 + }, + { + "name": "sampler", + "type": "SAMPLER", + "link": 2334 + }, + { + "name": "sigmas", + "type": "SIGMAS", + "link": 1120 + }, + { + "name": "latent_image", + "type": "LATENT", + "link": 5329 + } + ], + "outputs": [ + { + "name": "output", + "type": "LATENT", + "links": [], + "slot_index": 0, + "shape": 3 + }, + { + "name": "denoised_output", + "type": "LATENT", + "links": [ + 1474 + ], + "slot_index": 1, + "shape": 3 + } + ], + "title": "Sampler", + "properties": { + "Node name for S&R": "SamplerCustomAdvanced", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 591, + "type": "RandomNoise", + "pos": [ + 6030, + 340 + ], + "size": [ + 210, + 34 + ], + "flags": { + "collapsed": true + }, + "order": 104, + "mode": 0, + "inputs": [ + { + "name": "noise_seed", + "type": "INT", + "link": 1360, + "widget": { + "name": "noise_seed" + } + } + ], + "outputs": [ + { + "name": "NOISE", + "type": "NOISE", + "links": [ + 1371 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "RandomNoise", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 1, + "fixed" + ] + }, + { + "id": 593, + "type": "BasicScheduler", + "pos": [ + 5860, + 460 + ], + "size": [ + 220, + 100 + ], + "flags": { + "collapsed": false + }, + "order": 188, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 1123 + }, + { + "name": "scheduler", + "type": "COMBO", + "link": 2037, + "widget": { + "name": "scheduler" + } + }, + { + "name": "steps", + "type": "INT", + "link": 2038, + "widget": { + "name": "steps" + } + } + ], + "outputs": [ + { + "name": "SIGMAS", + "type": "SIGMAS", + "links": [ + 1120, + 5330 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "BasicScheduler", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "beta", + 20, + 1 + ] + }, + { + "id": 594, + "type": "VAELoader", + "pos": [ + 2997.352294921875, + 293.0782775878906 + ], + "size": [ + 320, + 60 + ], + "flags": { + "collapsed": false + }, + "order": 72, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "VAE", + "type": "VAE", + "links": [ + 4425 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "VAELoader", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "ae.sft" + ] + }, + { + "id": 609, + "type": "VAEDecode", + "pos": [ + 6480, + 440 + ], + "size": [ + 170, + 50 + ], + "flags": { + "collapsed": true + }, + "order": 209, + "mode": 0, + "inputs": [ + { + "name": "samples", + "type": "LATENT", + "link": 1474 + }, + { + "name": "vae", + "type": "VAE", + "link": 3499 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 1538 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "VAEDecode", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 624, + "type": "Save Image Grid (mtb)", + "pos": [ + 5210, + -220 + ], + "size": [ + 240, + 190 + ], + "flags": { + "collapsed": false + }, + "order": 160, + "mode": 4, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 2380 + }, + { + "name": "filename_prefix", + "type": "STRING", + "link": 4781, + "widget": { + "name": "filename_prefix" + } + } + ], + "outputs": [], + "properties": { + "Node name for S&R": "Save Image Grid (mtb)", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "stickFigures", + false + ] + }, + { + "id": 641, + "type": "ToBasicPipe", + "pos": [ + 4016.249755859375, + 329.36273193359375 + ], + "size": [ + 240, + 110 + ], + "flags": { + "collapsed": true + }, + "order": 205, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 5326 + }, + { + "name": "clip", + "type": "CLIP", + "link": 5325 + }, + { + "name": "vae", + "type": "VAE", + "link": 5324 + }, + { + "name": "positive", + "type": "CONDITIONING", + "link": 5017 + }, + { + "name": "negative", + "type": "CONDITIONING", + "link": 3212 + } + ], + "outputs": [ + { + "name": "basic_pipe", + "type": "BASIC_PIPE", + "links": [ + 1187 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "ToBasicPipe", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 697, + "type": "ModelSamplingFlux", + "pos": [ + 4870, + 3290 + ], + "size": [ + 210, + 130 + ], + "flags": { + "collapsed": true + }, + "order": 154, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 1608 + }, + { + "name": "max_shift", + "type": "FLOAT", + "link": 2406, + "widget": { + "name": "max_shift" + } + } + ], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "links": [ + 2169 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "ModelSamplingFlux", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 1.1500000000000001, + 0.5, + 1024, + 1024 + ] + }, + { + "id": 703, + "type": "GetImageSize+", + "pos": [ + 3880, + 3500 + ], + "size": [ + 200, + 70 + ], + "flags": { + "collapsed": true + }, + "order": 116, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 2166 + } + ], + "outputs": [ + { + "name": "width", + "type": "INT", + "links": [ + 4716 + ], + "slot_index": 0, + "shape": 3 + }, + { + "name": "height", + "type": "INT", + "links": [ + 4717 + ], + "slot_index": 1, + "shape": 3 + }, + { + "name": "count", + "type": "INT", + "links": null, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "GetImageSize+", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 834, + "type": "Reroute", + "pos": [ + 6850, + 240 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 202, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 1490 + } + ], + "outputs": [ + { + "name": "", + "type": "MODEL", + "links": [ + 2087 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 837, + "type": "Reroute", + "pos": [ + 5737.9697265625, + 223.6033172607422 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 190, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 1489 + } + ], + "outputs": [ + { + "name": "", + "type": "MODEL", + "links": [ + 1490 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 921, + "type": "Reroute", + "pos": [ + 6850, + 280 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 169, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5238 + } + ], + "outputs": [ + { + "name": "", + "type": "CONDITIONING", + "links": [ + 2088 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 932, + "type": "FromBasicPipe_v2", + "pos": [ + 4700, + 3350 + ], + "size": [ + 270, + 130 + ], + "flags": { + "collapsed": true + }, + "order": 106, + "mode": 0, + "inputs": [ + { + "name": "basic_pipe", + "type": "BASIC_PIPE", + "link": 1599 + } + ], + "outputs": [ + { + "name": "basic_pipe", + "type": "BASIC_PIPE", + "links": [], + "slot_index": 0, + "shape": 3 + }, + { + "name": "model", + "type": "MODEL", + "links": [ + 1608 + ], + "slot_index": 1, + "shape": 3 + }, + { + "name": "clip", + "type": "CLIP", + "links": null, + "shape": 3 + }, + { + "name": "vae", + "type": "VAE", + "links": [ + 2172 + ], + "slot_index": 3, + "shape": 3 + }, + { + "name": "positive", + "type": "CONDITIONING", + "links": [ + 5369 + ], + "slot_index": 4, + "shape": 3 + }, + { + "name": "negative", + "type": "CONDITIONING", + "links": [ + 2171 + ], + "slot_index": 5, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "FromBasicPipe_v2", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 963, + "type": "VAEEncode", + "pos": [ + 3843.34716796875, + 972.2465209960938 + ], + "size": [ + 210, + 50 + ], + "flags": { + "collapsed": true + }, + "order": 114, + "mode": 0, + "inputs": [ + { + "name": "pixels", + "type": "IMAGE", + "link": 2071 + }, + { + "name": "vae", + "type": "VAE", + "link": 1680 + } + ], + "outputs": [ + { + "name": "LATENT", + "type": "LATENT", + "links": [ + 1798 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "VAEEncode", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 1051, + "type": "SamplerCustomAdvanced", + "pos": [ + 7311.9658203125, + 267.23828125 + ], + "size": [ + 240, + 110 + ], + "flags": { + "collapsed": false + }, + "order": 217, + "mode": 0, + "inputs": [ + { + "name": "noise", + "type": "NOISE", + "link": 1776, + "slot_index": 0 + }, + { + "name": "guider", + "type": "GUIDER", + "link": 2089, + "slot_index": 1 + }, + { + "name": "sampler", + "type": "SAMPLER", + "link": 2337, + "slot_index": 2 + }, + { + "name": "sigmas", + "type": "SIGMAS", + "link": 1769, + "slot_index": 3 + }, + { + "name": "latent_image", + "type": "LATENT", + "link": 2105, + "slot_index": 4 + } + ], + "outputs": [ + { + "name": "output", + "type": "LATENT", + "links": [ + 1773 + ], + "slot_index": 0, + "shape": 3 + }, + { + "name": "denoised_output", + "type": "LATENT", + "links": [], + "slot_index": 1, + "shape": 3 + } + ], + "title": "Sampler", + "properties": { + "Node name for S&R": "SamplerCustomAdvanced", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 1052, + "type": "SplitSigmasDenoise", + "pos": [ + 7064.74609375, + 454.0147705078125 + ], + "size": [ + 210, + 80 + ], + "flags": { + "collapsed": false + }, + "order": 208, + "mode": 0, + "inputs": [ + { + "name": "sigmas", + "type": "SIGMAS", + "link": 2092 + } + ], + "outputs": [ + { + "name": "high_sigmas", + "type": "SIGMAS", + "links": [ + 1769 + ], + "slot_index": 0, + "shape": 3 + }, + { + "name": "low_sigmas", + "type": "SIGMAS", + "links": [ + 3717 + ], + "slot_index": 1, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "SplitSigmasDenoise", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 0.45 + ] + }, + { + "id": 1053, + "type": "SamplerCustomAdvanced", + "pos": [ + 8094.74609375, + 294.0147705078125 + ], + "size": [ + 240, + 110 + ], + "flags": { + "collapsed": false + }, + "order": 223, + "mode": 0, + "inputs": [ + { + "name": "noise", + "type": "NOISE", + "link": 1770, + "slot_index": 0 + }, + { + "name": "guider", + "type": "GUIDER", + "link": 2090, + "slot_index": 1 + }, + { + "name": "sampler", + "type": "SAMPLER", + "link": 2338, + "slot_index": 2 + }, + { + "name": "sigmas", + "type": "SIGMAS", + "link": 3718, + "slot_index": 3 + }, + { + "name": "latent_image", + "type": "LATENT", + "link": 1772, + "slot_index": 4 + } + ], + "outputs": [ + { + "name": "output", + "type": "LATENT", + "links": [], + "slot_index": 0, + "shape": 3 + }, + { + "name": "denoised_output", + "type": "LATENT", + "links": [ + 1787 + ], + "slot_index": 1, + "shape": 3 + } + ], + "title": "Sampler", + "properties": { + "Node name for S&R": "SamplerCustomAdvanced", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1054, + "type": "DisableNoise", + "pos": [ + 7904.74609375, + 204.01480102539062 + ], + "size": [ + 210, + 30 + ], + "flags": { + "collapsed": true + }, + "order": 73, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "NOISE", + "type": "NOISE", + "links": [ + 1770 + ], + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "DisableNoise", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 1055, + "type": "InjectLatentNoise+", + "pos": [ + 7674.74609375, + 264.0147705078125 + ], + "size": [ + 260, + 150 + ], + "flags": {}, + "order": 220, + "mode": 0, + "inputs": [ + { + "name": "latent", + "type": "LATENT", + "link": 1773 + }, + { + "name": "mask", + "type": "MASK", + "link": null, + "shape": 7 + } + ], + "outputs": [ + { + "name": "LATENT", + "type": "LATENT", + "links": [ + 1772 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "InjectLatentNoise+", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 978344700607754, + "randomize", + 2.5, + "false" + ] + }, + { + "id": 1056, + "type": "RandomNoise", + "pos": [ + 7131.9658203125, + 267.23828125 + ], + "size": [ + 210, + 34 + ], + "flags": { + "collapsed": true + }, + "order": 108, + "mode": 0, + "inputs": [ + { + "name": "noise_seed", + "type": "INT", + "link": 1775, + "widget": { + "name": "noise_seed" + } + } + ], + "outputs": [ + { + "name": "NOISE", + "type": "NOISE", + "links": [ + 1776 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "RandomNoise", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 1, + "fixed" + ] + }, + { + "id": 1060, + "type": "VAEDecode", + "pos": [ + 8384.751953125, + 254.0147705078125 + ], + "size": [ + 170, + 50 + ], + "flags": { + "collapsed": true + }, + "order": 224, + "mode": 0, + "inputs": [ + { + "name": "samples", + "type": "LATENT", + "link": 1787 + }, + { + "name": "vae", + "type": "VAE", + "link": 1786 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 1783 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "VAEDecode", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 1072, + "type": "FluxSamplerParams+", + "pos": [ + 4297.0771484375, + 936.7098999023438 + ], + "size": [ + 230, + 260 + ], + "flags": {}, + "order": 185, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 3363 + }, + { + "name": "conditioning", + "type": "CONDITIONING", + "link": 3362 + }, + { + "name": "latent_image", + "type": "LATENT", + "link": 1800 + }, + { + "name": "loras", + "type": "LORA_PARAMS", + "link": null, + "shape": 7 + }, + { + "name": "denoise", + "type": "STRING", + "link": 4692, + "widget": { + "name": "denoise" + } + }, + { + "name": "seed", + "type": "STRING", + "link": 4690, + "widget": { + "name": "seed" + } + }, + { + "name": "scheduler", + "type": "STRING", + "link": 2005, + "widget": { + "name": "scheduler" + } + }, + { + "name": "steps", + "type": "STRING", + "link": 2004, + "widget": { + "name": "steps" + } + }, + { + "name": "guidance", + "type": "STRING", + "link": 2007, + "widget": { + "name": "guidance" + } + }, + { + "name": "sampler", + "type": "STRING", + "link": 2344, + "widget": { + "name": "sampler" + } + }, + { + "name": "max_shift", + "type": "STRING", + "link": 2410, + "widget": { + "name": "max_shift" + } + } + ], + "outputs": [ + { + "name": "latent", + "type": "LATENT", + "links": [ + 1803 + ], + "slot_index": 0, + "shape": 3 + }, + { + "name": "params", + "type": "SAMPLER_PARAMS", + "links": null, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "FluxSamplerParams+", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "?", + "euler", + "beta", + "20", + "2.5", + "1.15", + "0.5", + "1.0" + ] + }, + { + "id": 1073, + "type": "RepeatLatentBatch", + "pos": [ + 4013.34716796875, + 1012.2463989257812 + ], + "size": [ + 230, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 156, + "mode": 0, + "inputs": [ + { + "name": "samples", + "type": "LATENT", + "link": 1798 + }, + { + "name": "amount", + "type": "INT", + "link": 1920, + "widget": { + "name": "amount" + } + } + ], + "outputs": [ + { + "name": "LATENT", + "type": "LATENT", + "links": [ + 1800 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "RepeatLatentBatch", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 1 + ] + }, + { + "id": 1074, + "type": "VAEDecode", + "pos": [ + 4617.0771484375, + 876.7098999023438 + ], + "size": [ + 170, + 50 + ], + "flags": { + "collapsed": true + }, + "order": 197, + "mode": 0, + "inputs": [ + { + "name": "samples", + "type": "LATENT", + "link": 1803 + }, + { + "name": "vae", + "type": "VAE", + "link": 1804 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 1802 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "VAEDecode", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 1090, + "type": "SDXLEmptyLatentSizePicker+", + "pos": [ + 4526.2509765625, + 379.36273193359375 + ], + "size": [ + 230, + 122 + ], + "flags": { + "collapsed": false + }, + "order": 121, + "mode": 0, + "inputs": [ + { + "name": "batch_size", + "type": "INT", + "link": 3214, + "widget": { + "name": "batch_size" + } + }, + { + "name": "resolution", + "type": "COMBO", + "link": 3448, + "widget": { + "name": "resolution" + } + } + ], + "outputs": [ + { + "name": "LATENT", + "type": "LATENT", + "links": [ + 4514, + 5327 + ], + "slot_index": 0, + "shape": 3 + }, + { + "name": "width", + "type": "INT", + "links": [ + 3449, + 3543 + ], + "slot_index": 1, + "shape": 3 + }, + { + "name": "height", + "type": "INT", + "links": [ + 3450, + 3544 + ], + "slot_index": 2, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "SDXLEmptyLatentSizePicker+", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "1024x1024 (1.0)", + 2, + 0, + 0 + ] + }, + { + "id": 1278, + "type": "StepSlider", + "pos": [ + 480, + 740 + ], + "size": [ + 310, + 60 + ], + "flags": { + "collapsed": false, + "pinned": true + }, + "order": 74, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 2002 + ], + "slot_index": 0, + "shape": 3 + } + ], + "title": "Steps", + "properties": { + "Node name for S&R": "StepSlider", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 20 + ] + }, + { + "id": 1279, + "type": "GuidanceSlider", + "pos": [ + 480, + 840 + ], + "size": [ + 310, + 60 + ], + "flags": { + "pinned": true + }, + "order": 75, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "links": [ + 2001 + ], + "slot_index": 0, + "shape": 3 + } + ], + "title": "Guidance", + "properties": { + "Node name for S&R": "GuidanceSlider", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 2.5167946835645574 + ], + "tabContents": [ + { + "value": 2.5167946835645574 + }, + { + "value": 2.9933584474977253 + }, + { + "value": 3.5936363636363646 + } + ], + "activeTab": 0 + }, + { + "id": 1285, + "type": "SomethingToString", + "pos": [ + 4117.0771484375, + 1266.7099609375 + ], + "size": [ + 210, + 82 + ], + "flags": { + "collapsed": true + }, + "order": 112, + "mode": 0, + "inputs": [ + { + "name": "input", + "type": "*", + "link": 2003 + } + ], + "outputs": [ + { + "name": "STRING", + "type": "STRING", + "links": [ + 2004 + ], + "slot_index": 0, + "shape": 3 + } + ], + "title": "To String", + "properties": { + "Node name for S&R": "SomethingToString", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "", + "" + ] + }, + { + "id": 1288, + "type": "SomethingToString", + "pos": [ + 4127.0771484375, + 1306.7099609375 + ], + "size": [ + 210, + 82 + ], + "flags": { + "collapsed": true + }, + "order": 113, + "mode": 0, + "inputs": [ + { + "name": "input", + "type": "*", + "link": 2006 + } + ], + "outputs": [ + { + "name": "STRING", + "type": "STRING", + "links": [ + 2007 + ], + "slot_index": 0, + "shape": 3 + } + ], + "title": "To String", + "properties": { + "Node name for S&R": "SomethingToString", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "", + "" + ] + }, + { + "id": 1293, + "type": "RepeatLatentBatch", + "pos": [ + 4760, + 1920 + ], + "size": [ + 210, + 54 + ], + "flags": { + "collapsed": true + }, + "order": 192, + "mode": 0, + "inputs": [ + { + "name": "samples", + "type": "LATENT", + "link": 4919 + }, + { + "name": "amount", + "type": "INT", + "link": 2018, + "widget": { + "name": "amount" + } + } + ], + "outputs": [ + { + "name": "LATENT", + "type": "LATENT", + "links": [ + 4920 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "RepeatLatentBatch", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 1 + ] + }, + { + "id": 1358, + "type": "BasicGuider", + "pos": [ + 7014.74609375, + 314.0147705078125 + ], + "size": [ + 240, + 50 + ], + "flags": { + "collapsed": true + }, + "order": 210, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 2087 + }, + { + "name": "conditioning", + "type": "CONDITIONING", + "link": 2088 + } + ], + "outputs": [ + { + "name": "GUIDER", + "type": "GUIDER", + "links": [ + 2089, + 2090 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "BasicGuider", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 1359, + "type": "Reroute", + "pos": [ + 6860, + 460 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 200, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5330 + } + ], + "outputs": [ + { + "name": "", + "type": "SIGMAS", + "links": [ + 2092 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 1387, + "type": "ImageUpscaleWithModel", + "pos": [ + 3920, + 3280 + ], + "size": [ + 200, + 70 + ], + "flags": { + "collapsed": true + }, + "order": 115, + "mode": 0, + "inputs": [ + { + "name": "upscale_model", + "type": "UPSCALE_MODEL", + "link": 2163 + }, + { + "name": "image", + "type": "IMAGE", + "link": 2165 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 2180 + ], + "slot_index": 0, + "shape": 3 + } + ], + "title": "Upscale", + "properties": { + "Node name for S&R": "ImageUpscaleWithModel", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 1389, + "type": "UltimateSDUpscaleNoUpscale", + "pos": [ + 5080, + 3240 + ], + "size": [ + 310, + 530 + ], + "flags": {}, + "order": 207, + "mode": 0, + "inputs": [ + { + "name": "upscaled_image", + "type": "IMAGE", + "link": 4668 + }, + { + "name": "model", + "type": "MODEL", + "link": 2169 + }, + { + "name": "positive", + "type": "CONDITIONING", + "link": 5369 + }, + { + "name": "negative", + "type": "CONDITIONING", + "link": 2171 + }, + { + "name": "vae", + "type": "VAE", + "link": 2172 + }, + { + "name": "seed", + "type": "INT", + "link": 2173, + "widget": { + "name": "seed" + } + }, + { + "name": "steps", + "type": "INT", + "link": 2175, + "widget": { + "name": "steps" + } + }, + { + "name": "scheduler", + "type": "COMBO", + "link": 2176, + "widget": { + "name": "scheduler" + } + }, + { + "name": "denoise", + "type": "FLOAT", + "link": 2174, + "widget": { + "name": "denoise" + } + }, + { + "name": "sampler_name", + "type": "COMBO", + "link": 2342, + "widget": { + "name": "sampler_name" + } + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 2177 + ], + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "UltimateSDUpscaleNoUpscale", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 5227832786397, + "randomize", + 20, + 1, + "euler", + "normal", + 0.2, + "Linear", + 1024, + 1024, + 20, + 20, + "None", + 1, + 20, + 20, + 20, + true, + false + ] + }, + { + "id": 1500, + "type": "KSamplerSelect", + "pos": [ + 6040, + 650 + ], + "size": [ + 210, + 34 + ], + "flags": { + "collapsed": true + }, + "order": 117, + "mode": 0, + "inputs": [ + { + "name": "sampler_name", + "type": "COMBO", + "link": 2333, + "widget": { + "name": "sampler_name" + } + } + ], + "outputs": [ + { + "name": "SAMPLER", + "type": "SAMPLER", + "links": [ + 2334, + 2335 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "KSamplerSelect", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "euler" + ] + }, + { + "id": 1624, + "type": "SomethingToString", + "pos": [ + 4127.0771484375, + 1386.7099609375 + ], + "size": [ + 210, + 82 + ], + "flags": { + "collapsed": true + }, + "order": 119, + "mode": 0, + "inputs": [ + { + "name": "input", + "type": "*", + "link": 2409 + } + ], + "outputs": [ + { + "name": "STRING", + "type": "STRING", + "links": [ + 2410 + ], + "slot_index": 0, + "shape": 3 + } + ], + "title": "To String", + "properties": { + "Node name for S&R": "SomethingToString", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "", + "" + ] + }, + { + "id": 1629, + "type": "MaxShiftSlider", + "pos": [ + 480, + 940 + ], + "size": [ + 310, + 60 + ], + "flags": { + "collapsed": false, + "pinned": true + }, + "order": 76, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "links": [ + 2418 + ], + "slot_index": 0, + "shape": 3 + } + ], + "title": "Max Shift", + "properties": { + "Node name for S&R": "MaxShiftSlider", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 1.1500000000000001 + ] + }, + { + "id": 1630, + "type": "Label (rgthree)", + "pos": [ + 770, + 100 + ], + "size": [ + 25, + 36 + ], + "flags": { + "allow_interaction": true + }, + "order": 77, + "mode": 0, + "inputs": [], + "outputs": [], + "title": "v 1.4", + "properties": { + "fontSize": 36, + "fontFamily": "\n", + "fontColor": "#ffffff", + "textAlign": "left", + "backgroundColor": "transparent", + "padding": 0, + "borderRadius": 0 + }, + "color": "#fff0", + "bgcolor": "#fff0" + }, + { + "id": 2205, + "type": "Label (rgthree)", + "pos": [ + 1950, + 100 + ], + "size": [ + 96.79166412353516, + 16 + ], + "flags": { + "allow_interaction": true + }, + "order": 78, + "mode": 0, + "inputs": [], + "outputs": [], + "title": "by WorldObserver", + "properties": { + "fontSize": 16, + "fontFamily": "\n", + "fontColor": "#ffffff", + "textAlign": "left", + "backgroundColor": "transparent", + "padding": 0, + "borderRadius": 0 + }, + "color": "#fff0", + "bgcolor": "#fff0" + }, + { + "id": 2211, + "type": "CLIPTextEncode", + "pos": [ + 3846.249755859375, + 429.36273193359375 + ], + "size": [ + 210, + 80 + ], + "flags": { + "collapsed": true + }, + "order": 195, + "mode": 0, + "inputs": [ + { + "name": "clip", + "type": "CLIP", + "link": 3509 + } + ], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [ + 3212 + ], + "slot_index": 0 + } + ], + "title": "Negative", + "properties": { + "Node name for S&R": "CLIPTextEncode", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "" + ] + }, + { + "id": 2334, + "type": "Image Comparer (rgthree)", + "pos": [ + 840, + 150 + ], + "size": [ + 870, + 920 + ], + "flags": { + "collapsed": false, + "pinned": true + }, + "order": 120, + "mode": 0, + "inputs": [ + { + "name": "image_a", + "type": "IMAGE", + "link": 3426, + "dir": 3 + }, + { + "name": "image_b", + "type": "IMAGE", + "link": 3425, + "dir": 3 + } + ], + "outputs": [], + "title": "Img Compare", + "properties": { + "comparer_mode": "Slide" + }, + "widgets_values": [ + [ + { + "name": "A", + "selected": true, + "url": "/api/view?filename=rgthree.compare._temp_pbbah_00001_.png&type=temp&subfolder=&rand=0.7446024807073257" + }, + { + "name": "B", + "selected": true, + "url": "/api/view?filename=rgthree.compare._temp_pbbah_00002_.png&type=temp&subfolder=&rand=0.8518365145701537" + } + ] + ], + "color": "#222", + "bgcolor": "#000" + }, + { + "id": 2397, + "type": "ImageDisplay", + "pos": [ + 2050, + 90 + ], + "size": [ + 26.399999618530273, + 30 + ], + "flags": { + "collapsed": false + }, + "order": 79, + "mode": 0, + "inputs": [], + "outputs": [], + "title": "Unnamed", + "properties": { + "originalWidth": 44, + "originalHeight": 50, + "maintainAspectRatio": true, + "imageBase64": "iVBORw0KGgoAAAANSUhEUgAAACwAAAAyCAYAAAAnWDnqAAAACXBIWXMAAAsTAAALEwEAmpwYAAAGGmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgOS4xLWMwMDIgNzkuYjdjNjRjYywgMjAyNC8wNy8xNi0wNzo1OTo0MCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDI2LjEgKDIwMjQxMDE5Lm0uMjgxNSBhMjQ5ZDA0KSAgKFdpbmRvd3MpIiB4bXA6Q3JlYXRlRGF0ZT0iMjAyNC0wNC0xOVQxMToyMDo1NSsxMDowMCIgeG1wOk1vZGlmeURhdGU9IjIwMjQtMTAtMjNUMTk6MzM6MDArMTE6MDAiIHhtcDpNZXRhZGF0YURhdGU9IjIwMjQtMTAtMjNUMTk6MzM6MDArMTE6MDAiIGRjOmZvcm1hdD0iaW1hZ2UvcG5nIiBwaG90b3Nob3A6Q29sb3JNb2RlPSIzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjQyYjIxNGY1LTFkN2UtNzY0NC1hMzYyLWM2ZjE0YzA1NzE3YiIgeG1wTU06RG9jdW1lbnRJRD0iYWRvYmU6ZG9jaWQ6cGhvdG9zaG9wOjhiYTk0MTFkLTI2YjYtZDM0Ni1hZjFkLTVmZjdkZmNmMzhhMyIgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjUwMTM1MDM0LWQ2NWYtMjk0YS04YjMyLWY4ZDZiNjI0OGMzMiI+IDx4bXBNTTpIaXN0b3J5PiA8cmRmOlNlcT4gPHJkZjpsaSBzdEV2dDphY3Rpb249ImNyZWF0ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6NTAxMzUwMzQtZDY1Zi0yOTRhLThiMzItZjhkNmI2MjQ4YzMyIiBzdEV2dDp3aGVuPSIyMDI0LTA0LTE5VDExOjIwOjU1KzEwOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgMjYuMSAoMjAyNDEwMTkubS4yODE1IGEyNDlkMDQpICAoV2luZG93cykiLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjQyYjIxNGY1LTFkN2UtNzY0NC1hMzYyLWM2ZjE0YzA1NzE3YiIgc3RFdnQ6d2hlbj0iMjAyNC0xMC0yM1QxOTozMzowMCsxMTowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIDI2LjEgKDIwMjQxMDE5Lm0uMjgxNSBhMjQ5ZDA0KSAgKFdpbmRvd3MpIiBzdEV2dDpjaGFuZ2VkPSIvIi8+IDwvcmRmOlNlcT4gPC94bXBNTTpIaXN0b3J5PiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pg8rrwEAABT4SURBVGjendlpjCXXddjx/721v1dv37v7dfdMz/Tswxnui0RSC9eIogxFlhyQUSDFSSBZMBBESmDICWzFieNYCQgYChzHhuXYUOQYpijJokTRJDXkiOTs+/Ss3T3dPb2+fatXaz6MYYTmNmIBv4+FOlV16p5zT4nxSoUPeihSMru0xD/99NPf+OUnnvq6FJ36aCWBpqsgBI3WkJXVgeU4ofqNZ/79/TOX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", + "lastWidth": 26.399999618530273, + "lastHeight": 30 + }, + "color": "#00000000", + "bgcolor": "#00000000", + "shape": 1, + "lastWidth": 26.399999618530273, + "lastHeight": 30, + "imageBase64": "iVBORw0KGgoAAAANSUhEUgAAACwAAAAyCAYAAAAnWDnqAAAACXBIWXMAAAsTAAALEwEAmpwYAAAGGmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgOS4xLWMwMDIgNzkuYjdjNjRjYywgMjAyNC8wNy8xNi0wNzo1OTo0MCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDI2LjEgKDIwMjQxMDE5Lm0uMjgxNSBhMjQ5ZDA0KSAgKFdpbmRvd3MpIiB4bXA6Q3JlYXRlRGF0ZT0iMjAyNC0wNC0xOVQxMToyMDo1NSsxMDowMCIgeG1wOk1vZGlmeURhdGU9IjIwMjQtMTAtMjNUMTk6MzM6MDArMTE6MDAiIHhtcDpNZXRhZGF0YURhdGU9IjIwMjQtMTAtMjNUMTk6MzM6MDArMTE6MDAiIGRjOmZvcm1hdD0iaW1hZ2UvcG5nIiBwaG90b3Nob3A6Q29sb3JNb2RlPSIzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjQyYjIxNGY1LTFkN2UtNzY0NC1hMzYyLWM2ZjE0YzA1NzE3YiIgeG1wTU06RG9jdW1lbnRJRD0iYWRvYmU6ZG9jaWQ6cGhvdG9zaG9wOjhiYTk0MTFkLTI2YjYtZDM0Ni1hZjFkLTVmZjdkZmNmMzhhMyIgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjUwMTM1MDM0LWQ2NWYtMjk0YS04YjMyLWY4ZDZiNjI0OGMzMiI+IDx4bXBNTTpIaXN0b3J5PiA8cmRmOlNlcT4gPHJkZjpsaSBzdEV2dDphY3Rpb249ImNyZWF0ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6NTAxMzUwMzQtZDY1Zi0yOTRhLThiMzItZjhkNmI2MjQ4YzMyIiBzdEV2dDp3aGVuPSIyMDI0LTA0LTE5VDExOjIwOjU1KzEwOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgMjYuMSAoMjAyNDEwMTkubS4yODE1IGEyNDlkMDQpICAoV2luZG93cykiLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjQyYjIxNGY1LTFkN2UtNzY0NC1hMzYyLWM2ZjE0YzA1NzE3YiIgc3RFdnQ6d2hlbj0iMjAyNC0xMC0yM1QxOTozMzowMCsxMTowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIDI2LjEgKDIwMjQxMDE5Lm0uMjgxNSBhMjQ5ZDA0KSAgKFdpbmRvd3MpIiBzdEV2dDpjaGFuZ2VkPSIvIi8+IDwvcmRmOlNlcT4gPC94bXBNTTpIaXN0b3J5PiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pg8rrwEAABT4SURBVGjendlpjCXXddjx/721v1dv37v7dfdMz/Tswxnui0RSC9eIogxFlhyQUSDFSSBZMBBESmDICWzFieNYCQgYChzHhuXYUOQYpijJokTRJDXkiOTs+/Ss3T3dPb2+fatXaz6MYYTmNmIBv4+FOlV16p5zT4nxSoUPeihSMru0xD/99NPf+OUnnvq6FJ36aCWBpqsgBI3WkJXVgeU4ofqNZ/79/TOX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" + }, + { + "id": 2427, + "type": "ResolutionPicker", + "pos": [ + 480, + 1330 + ], + "size": [ + 310, + 60 + ], + "flags": { + "pinned": true + }, + "order": 80, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "resolution", + "type": "COMBO", + "links": [ + 3447 + ], + "slot_index": 0 + } + ], + "title": "Latent Resolution", + "properties": { + "Node name for S&R": "ResolutionPicker", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "1024x1024 (1.0)" + ] + }, + { + "id": 2435, + "type": "SamplerParameterPacker", + "pos": [ + 480, + 620 + ], + "size": [ + 310, + 82 + ], + "flags": { + "pinned": true + }, + "order": 81, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "sampler_params", + "type": "SAMPLER_PARAMS", + "links": [ + 3460 + ], + "slot_index": 0 + } + ], + "title": "Sampler Parameters", + "properties": { + "Node name for S&R": "SamplerParameterPacker", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "deis", + "beta" + ], + "tabContents": [ + { + "sampler": "deis", + "scheduler": "beta" + }, + { + "sampler": "ddim", + "scheduler": "simple" + }, + { + "sampler": "dpmpp_sde", + "scheduler": "karras" + } + ], + "activeTab": 0 + }, + { + "id": 2436, + "type": "SamplerParameterUnpacker", + "pos": [ + 5720, + -160 + ], + "size": [ + 370, + 90 + ], + "flags": { + "collapsed": true + }, + "order": 152, + "mode": 0, + "inputs": [ + { + "name": "sampler_params", + "type": "SAMPLER_PARAMS", + "link": 3461 + } + ], + "outputs": [ + { + "name": "sampler", + "type": "COMBO", + "links": [ + 3463 + ], + "slot_index": 0 + }, + { + "name": "sampler_name", + "type": "STRING", + "links": [ + 3465 + ], + "slot_index": 1 + }, + { + "name": "scheduler", + "type": "COMBO", + "links": [ + 3464 + ], + "slot_index": 2 + }, + { + "name": "scheduler_name", + "type": "STRING", + "links": [ + 3466 + ], + "slot_index": 3 + } + ], + "properties": { + "Node name for S&R": "SamplerParameterUnpacker", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 2476, + "type": "Reroute", + "pos": [ + 3696.249755859375, + 399.36273193359375 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 177, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5319 + } + ], + "outputs": [ + { + "name": "", + "type": "CLIP", + "links": [ + 3509, + 5325 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 2600, + "type": "Reroute", + "pos": [ + 7944.74609375, + 484.0147705078125 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 215, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 3717 + } + ], + "outputs": [ + { + "name": "", + "type": "SIGMAS", + "links": [ + 3718 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 3132, + "type": "RepeatImageBatch", + "pos": [ + 4550, + 3280 + ], + "size": [ + 210, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 199, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 4667 + }, + { + "name": "amount", + "type": "INT", + "link": 4666, + "widget": { + "name": "amount" + } + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 4668 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "RepeatImageBatch", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 2 + ] + }, + { + "id": 3135, + "type": "Note", + "pos": [ + 3710, + -90 + ], + "size": [ + 360, + 60 + ], + "flags": {}, + "order": 82, + "mode": 0, + "inputs": [], + "outputs": [], + "properties": {}, + "widgets_values": [ + "here you can modify the final image that is sent to the preview node. these nodes just pass it though" + ], + "color": "#432", + "bgcolor": "#653" + }, + { + "id": 3158, + "type": "Bookmark (rgthree)", + "pos": [ + 370, + 40 + ], + "size": [ + 210, + 62 + ], + "flags": { + "collapsed": true + }, + "order": 83, + "mode": 0, + "inputs": [], + "outputs": [], + "title": "🔖", + "properties": {}, + "widgets_values": [ + "1", + 1 + ] + }, + { + "id": 3159, + "type": "Bookmark (rgthree)", + "pos": [ + 2290, + -240 + ], + "size": [ + 210, + 62 + ], + "flags": { + "collapsed": true + }, + "order": 84, + "mode": 0, + "inputs": [], + "outputs": [], + "title": "🔖", + "properties": {}, + "widgets_values": [ + "2", + 1 + ] + }, + { + "id": 3164, + "type": "OutputGet", + "pos": [ + 480, + 190 + ], + "size": [ + 310, + 70 + ], + "flags": { + "collapsed": false, + "pinned": true + }, + "order": 85, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 4941 + ], + "slot_index": 0 + } + ], + "title": "Output - txt2img", + "properties": { + "showOutputText": true + }, + "widgets_values": [ + "Output - txt2img" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 3169, + "type": "SomethingToString", + "pos": [ + 4107.07861328125, + 1136.7099609375 + ], + "size": [ + 210, + 82 + ], + "flags": { + "collapsed": true + }, + "order": 109, + "mode": 0, + "inputs": [ + { + "name": "input", + "type": "*", + "link": 4689 + } + ], + "outputs": [ + { + "name": "STRING", + "type": "STRING", + "links": [ + 4690 + ], + "slot_index": 0, + "shape": 3 + } + ], + "title": "To String", + "properties": { + "Node name for S&R": "SomethingToString", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "", + "" + ] + }, + { + "id": 3170, + "type": "SomethingToString", + "pos": [ + 4117.0771484375, + 1086.7099609375 + ], + "size": [ + 210, + 82 + ], + "flags": { + "collapsed": true + }, + "order": 111, + "mode": 0, + "inputs": [ + { + "name": "input", + "type": "*", + "link": 4691 + } + ], + "outputs": [ + { + "name": "STRING", + "type": "STRING", + "links": [ + 4692 + ], + "slot_index": 0, + "shape": 3 + } + ], + "title": "To String", + "properties": { + "Node name for S&R": "SomethingToString", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "", + "" + ] + }, + { + "id": 3178, + "type": "SimpleMath+", + "pos": [ + 4080, + 3390 + ], + "size": [ + 320, + 100 + ], + "flags": { + "collapsed": true + }, + "order": 157, + "mode": 0, + "inputs": [ + { + "name": "a", + "type": "*", + "link": 4716, + "shape": 7 + }, + { + "name": "b", + "type": "*", + "link": 4714, + "shape": 7 + }, + { + "name": "c", + "type": "*", + "link": null, + "shape": 7 + } + ], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 4718 + ], + "slot_index": 0 + }, + { + "name": "FLOAT", + "type": "FLOAT", + "links": null + } + ], + "properties": { + "Node name for S&R": "SimpleMath+", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "a*b" + ] + }, + { + "id": 3182, + "type": "SimpleMath+", + "pos": [ + 4080, + 3600 + ], + "size": [ + 320, + 100 + ], + "flags": { + "collapsed": true + }, + "order": 158, + "mode": 0, + "inputs": [ + { + "name": "a", + "type": "*", + "link": 4717, + "shape": 7 + }, + { + "name": "b", + "type": "*", + "link": 4715, + "shape": 7 + }, + { + "name": "c", + "type": "*", + "link": null, + "shape": 7 + } + ], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 4719 + ], + "slot_index": 0 + }, + { + "name": "FLOAT", + "type": "FLOAT", + "links": null + } + ], + "properties": { + "Node name for S&R": "SimpleMath+", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "a*b" + ] + }, + { + "id": 3210, + "type": "PlaySound|pysssss", + "pos": [ + 4230, + -190 + ], + "size": [ + 310, + 110 + ], + "flags": {}, + "order": 184, + "mode": 0, + "inputs": [ + { + "name": "any", + "type": "*", + "link": 4779 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null, + "slot_index": 0, + "shape": 6 + } + ], + "properties": { + "Node name for S&R": "PlaySound|pysssss", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "always", + 0.5, + "notify.mp3" + ] + }, + { + "id": 3211, + "type": "Note", + "pos": [ + 4230, + -20 + ], + "size": [ + 320, + 60 + ], + "flags": {}, + "order": 86, + "mode": 0, + "inputs": [], + "outputs": [], + "properties": {}, + "widgets_values": [ + "enable/disable the sound notification" + ], + "color": "#432", + "bgcolor": "#653" + }, + { + "id": 3212, + "type": "SimpleTextTruncate", + "pos": [ + 4890, + -140 + ], + "size": [ + 230, + 70 + ], + "flags": {}, + "order": 118, + "mode": 4, + "inputs": [ + { + "name": "text", + "type": "STRING", + "link": 4780, + "widget": { + "name": "text" + } + } + ], + "outputs": [ + { + "name": "TEXT", + "type": "STRING", + "links": [ + 4781 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "SimpleTextTruncate", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "", + 12 + ] + }, + { + "id": 3246, + "type": "CLIPTextEncode", + "pos": [ + 3940, + 1980 + ], + "size": [ + 430, + 180 + ], + "flags": { + "collapsed": true + }, + "order": 123, + "mode": 0, + "inputs": [ + { + "name": "clip", + "type": "CLIP", + "link": 4827 + } + ], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [ + 4829 + ], + "slot_index": 0 + } + ], + "title": "CLIP Text Encode (Negative Prompt)", + "properties": { + "Node name for S&R": "CLIPTextEncode", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 3248, + "type": "DifferentialDiffusion", + "pos": [ + 4950, + 1770 + ], + "size": [ + 184.8000030517578, + 30 + ], + "flags": { + "collapsed": true + }, + "order": 125, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 4945 + } + ], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "links": [ + 4834 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "DifferentialDiffusion", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 3249, + "type": "KSampler", + "pos": [ + 5180, + 1780 + ], + "size": [ + 260, + 220 + ], + "flags": {}, + "order": 203, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 4834 + }, + { + "name": "positive", + "type": "CONDITIONING", + "link": 4835 + }, + { + "name": "negative", + "type": "CONDITIONING", + "link": 4836 + }, + { + "name": "latent_image", + "type": "LATENT", + "link": 4920 + }, + { + "name": "seed", + "type": "INT", + "link": 4917, + "widget": { + "name": "seed" + } + }, + { + "name": "steps", + "type": "INT", + "link": 4839, + "widget": { + "name": "steps" + } + }, + { + "name": "scheduler", + "type": "COMBO", + "link": 4852, + "widget": { + "name": "scheduler" + } + }, + { + "name": "sampler_name", + "type": "COMBO", + "link": 4853, + "widget": { + "name": "sampler_name" + } + }, + { + "name": "denoise", + "type": "FLOAT", + "link": 4921, + "widget": { + "name": "denoise" + } + } + ], + "outputs": [ + { + "name": "LATENT", + "type": "LATENT", + "links": [ + 4916 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "KSampler", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 588697660652218, + "randomize", + 20, + 1, + "euler", + "normal", + 1 + ] + }, + { + "id": 3263, + "type": "ImageCompositeMasked", + "pos": [ + 6030, + 1780 + ], + "size": [ + 270, + 150 + ], + "flags": {}, + "order": 218, + "mode": 0, + "inputs": [ + { + "name": "destination", + "type": "IMAGE", + "link": 4845 + }, + { + "name": "source", + "type": "IMAGE", + "link": 4896 + }, + { + "name": "mask", + "type": "MASK", + "link": 5591, + "shape": 7 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 4854 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "ImageCompositeMasked", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 0, + 0, + false + ] + }, + { + "id": 3266, + "type": "Reroute", + "pos": [ + 5670, + 1680 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 166, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 4850 + } + ], + "outputs": [ + { + "name": "", + "type": "MASK", + "links": [ + 5590 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 3267, + "type": "Reroute", + "pos": [ + 5920, + 1640 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 167, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 4851 + } + ], + "outputs": [ + { + "name": "", + "type": "IMAGE", + "links": [ + 4845 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 3279, + "type": "VAEDecode", + "pos": [ + 5560, + 1820 + ], + "size": [ + 170, + 50 + ], + "flags": { + "collapsed": true + }, + "order": 211, + "mode": 0, + "inputs": [ + { + "name": "samples", + "type": "LATENT", + "link": 4916 + }, + { + "name": "vae", + "type": "VAE", + "link": 4904 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 4896 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "VAEDecode", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 3284, + "type": "Reroute", + "pos": [ + 4180, + 1580 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 128, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 4912 + } + ], + "outputs": [ + { + "name": "", + "type": "VAE", + "links": [ + 4911, + 4913 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 3383, + "type": "Reroute", + "pos": [ + 5170, + 210 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 110, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5046 + } + ], + "outputs": [ + { + "name": "", + "type": "MODEL", + "links": [ + 5045 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 3515, + "type": "Reroute", + "pos": [ + 5737.9697265625, + 263.603271484375 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 127, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5384 + } + ], + "outputs": [ + { + "name": "", + "type": "CONDITIONING", + "links": [ + 5237, + 5238 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 3548, + "type": "Reroute", + "pos": [ + 4896.2509765625, + 159.36273193359375 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 162, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5327 + } + ], + "outputs": [ + { + "name": "", + "type": "LATENT", + "links": [ + 5328 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 3549, + "type": "Reroute", + "pos": [ + 6050, + 160 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 187, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5328 + } + ], + "outputs": [ + { + "name": "", + "type": "LATENT", + "links": [ + 5329 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 3722, + "type": "MaskBlur+", + "pos": [ + 5750, + 1880 + ], + "size": [ + 260, + 80 + ], + "flags": { + "collapsed": false + }, + "order": 191, + "mode": 0, + "inputs": [ + { + "name": "mask", + "type": "MASK", + "link": 5590 + }, + { + "name": "amount", + "type": "INT", + "link": 5589, + "widget": { + "name": "amount" + } + } + ], + "outputs": [ + { + "name": "MASK", + "type": "MASK", + "links": [ + 5591 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "MaskBlur+", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 6, + "gpu" + ] + }, + { + "id": 1573, + "type": "Fast Groups Bypasser (rgthree)", + "pos": [ + 480, + 1430 + ], + "size": [ + 310, + 82 + ], + "flags": { + "collapsed": false, + "pinned": true + }, + "order": 87, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "OPT_CONNECTION", + "type": "*", + "links": null + } + ], + "title": "Options", + "properties": { + "matchColors": "", + "matchTitle": "Save|Play", + "showNav": true, + "sort": "position", + "customSortAlphabet": "", + "toggleRestriction": "default" + } + }, + { + "id": 3128, + "type": "Note", + "pos": [ + 3000, + 10 + ], + "size": [ + 310, + 70 + ], + "flags": {}, + "order": 88, + "mode": 0, + "inputs": [], + "outputs": [], + "properties": {}, + "widgets_values": [ + "setup your models here.\nfeel free to replace with GGUF models" + ], + "color": "#432", + "bgcolor": "#653" + }, + { + "id": 2469, + "type": "UNETLoader", + "pos": [ + 3000, + 170 + ], + "size": [ + 320, + 82 + ], + "flags": {}, + "order": 89, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "links": [ + 3494 + ], + "slot_index": 0, + "shape": 3 + } + ], + "title": "Load Flux Model", + "properties": { + "Node name for S&R": "UNETLoader", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "flux1-dev.sft", + "fp8_e4m3fn" + ] + }, + { + "id": 2464, + "type": "TextVersions", + "pos": [ + 840, + 1130 + ], + "size": [ + 870, + 150 + ], + "flags": { + "collapsed": false, + "pinned": true + }, + "order": 90, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "text", + "type": "STRING", + "links": [ + 3492 + ], + "slot_index": 0 + } + ], + "title": "Prompt", + "properties": { + "Node name for S&R": "TextVersions", + "versionAmount": 8, + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "a sea turtle" + ], + "color": "#232", + "bgcolor": "#353", + "tabContents": [ + "a sea turtle", + "", + "", + "", + "", + "", + "", + "" + ], + "activeTab": 0 + }, + { + "id": 2468, + "type": "TextVersions", + "pos": [ + 840, + 1320 + ], + "size": [ + 870, + 80 + ], + "flags": { + "pinned": true + }, + "order": 91, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "text", + "type": "STRING", + "links": [ + 3493 + ], + "slot_index": 0 + } + ], + "title": "Tags", + "properties": { + "Node name for S&R": "TextVersions", + "versionAmount": 5, + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "cinematic, nature photography, wide angle" + ], + "color": "#2a363b", + "bgcolor": "#3f5159", + "tabContents": [ + "cinematic, nature photography, wide angle", + "", + "", + "", + "" + ], + "activeTab": 0 + }, + { + "id": 3283, + "type": "Reroute", + "pos": [ + 5430, + 1590 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 170, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 4911 + } + ], + "outputs": [ + { + "name": "", + "type": "VAE", + "links": [ + 4904 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 3264, + "type": "Reroute", + "pos": [ + 4170, + 1670 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 122, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 4966 + } + ], + "outputs": [ + { + "name": "", + "type": "MASK", + "links": [ + 4850, + 4882 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 3265, + "type": "Reroute", + "pos": [ + 4170, + 1620 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 124, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 4849 + } + ], + "outputs": [ + { + "name": "", + "type": "IMAGE", + "links": [ + 4851, + 4914 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 2413, + "type": "ImageDisplay", + "pos": [ + 470, + 90 + ], + "size": [ + 330, + 65.24058532714844 + ], + "flags": {}, + "order": 92, + "mode": 0, + "inputs": [], + "outputs": [], + "title": "Unnamed", + "properties": { + "originalWidth": 956, + "originalHeight": 189, + "maintainAspectRatio": true, + "imageBase64": "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Y0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALEwAACxMBAJqcGAAABoJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDkuMS1jMDAyIDc5LmI3YzY0Y2MsIDIwMjQvMDcvMTYtMDc6NTk6NDAgICAgICAgICI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiB4bWxuczpwaG90b3Nob3A9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGhvdG9zaG9wLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCAyNi4xICgyMDI0MTAxOS5tLjI4MTUgYTI0OWQwNCkgIChXaW5kb3dzKSIgeG1wOkNyZWF0ZURhdGU9IjIwMjQtMTAtMjNUMTg6NTQ6NDQrMTE6MDAiIHhtcDpNb2RpZnlEYXRlPSIyMDI0LTEwLTIzVDE5OjIzOjMzKzExOjAwIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDI0LTEwLTIzVDE5OjIzOjMzKzExOjAwIiBkYzpmb3JtYXQ9ImltYWdlL3BuZyIgcGhvdG9zaG9wOkNvbG9yTW9kZT0iMyIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDoyYzZmNjdjNy02NTI1LTdjNDctYmU3MC01NmFmYWQ0Y2YzMmQiIHhtcE1NOkRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmNmNTZlYi03NTZhLWY3NGMtYmYwYS1lM2JlZmY1YWMxMWYiIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo5MmE5MDI5Ni1jOTE2LWUwNDgtYTM0My1jNjgwYmVjYWNkNTEiPiA8eG1wTU06SGlzdG9yeT4gPHJkZjpTZXE+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJjcmVhdGVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjkyYTkwMjk2LWM5MTYtZTA0OC1hMzQzLWM2ODBiZWNhY2Q1MSIgc3RFdnQ6d2hlbj0iMjAyNC0xMC0yM1QxODo1NDo0NCsxMTowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIDI2LjEgKDIwMjQxMDE5Lm0uMjgxNSBhMjQ5ZDA0KSAgKFdpbmRvd3MpIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJjb252ZXJ0ZWQiIHN0RXZ0OnBhcmFtZXRlcnM9ImZyb20gYXBwbGljYXRpb24vdm5kLmFkb2JlLnBob3Rvc2hvcCB0byBpbWFnZS9wbmciLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjJjNmY2N2M3LTY1MjUtN2M0Ny1iZTcwLTU2YWZhZDRjZjMyZCIgc3RFdnQ6d2hlbj0iMjAyNC0xMC0yM1QxOToyMzozMysxMTowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIDI2LjEgKDIwMjQxMDE5Lm0uMjgxNSBhMjQ5ZDA0KSAgKFdpbmRvd3MpIiBzdEV2dDpjaGFuZ2VkPSIvIi8+IDwvcmRmOlNlcT4gPC94bXBNTTpIaXN0b3J5PiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PpGGSOYAA3j5SURBVHja7P13uK5nWSYOn9ddnvLWtfZau+8kO72TBJJACiUUg4iAUgVEBAfEBiM4Kli+0XEcHXUc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", + "lastWidth": 330, + "lastHeight": 65.24058532714844 + }, + "color": "#00000000", + "bgcolor": "#00000000", + "shape": 1, + "lastWidth": 330, + "lastHeight": 65.24058532714844, + "imageBase64": "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Y0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALEwAACxMBAJqcGAAABoJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDkuMS1jMDAyIDc5LmI3YzY0Y2MsIDIwMjQvMDcvMTYtMDc6NTk6NDAgICAgICAgICI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiB4bWxuczpwaG90b3Nob3A9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGhvdG9zaG9wLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCAyNi4xICgyMDI0MTAxOS5tLjI4MTUgYTI0OWQwNCkgIChXaW5kb3dzKSIgeG1wOkNyZWF0ZURhdGU9IjIwMjQtMTAtMjNUMTg6NTQ6NDQrMTE6MDAiIHhtcDpNb2RpZnlEYXRlPSIyMDI0LTEwLTIzVDE5OjIzOjMzKzExOjAwIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDI0LTEwLTIzVDE5OjIzOjMzKzExOjAwIiBkYzpmb3JtYXQ9ImltYWdlL3BuZyIgcGhvdG9zaG9wOkNvbG9yTW9kZT0iMyIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDoyYzZmNjdjNy02NTI1LTdjNDctYmU3MC01NmFmYWQ0Y2YzMmQiIHhtcE1NOkRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDowNmNmNTZlYi03NTZhLWY3NGMtYmYwYS1lM2JlZmY1YWMxMWYiIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo5MmE5MDI5Ni1jOTE2LWUwNDgtYTM0My1jNjgwYmVjYWNkNTEiPiA8eG1wTU06SGlzdG9yeT4gPHJkZjpTZXE+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJjcmVhdGVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjkyYTkwMjk2LWM5MTYtZTA0OC1hMzQzLWM2ODBiZWNhY2Q1MSIgc3RFdnQ6d2hlbj0iMjAyNC0xMC0yM1QxODo1NDo0NCsxMTowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIDI2LjEgKDIwMjQxMDE5Lm0uMjgxNSBhMjQ5ZDA0KSAgKFdpbmRvd3MpIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJjb252ZXJ0ZWQiIHN0RXZ0OnBhcmFtZXRlcnM9ImZyb20gYXBwbGljYXRpb24vdm5kLmFkb2JlLnBob3Rvc2hvcCB0byBpbWFnZS9wbmciLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjJjNmY2N2M3LTY1MjUtN2M0Ny1iZTcwLTU2YWZhZDRjZjMyZCIgc3RFdnQ6d2hlbj0iMjAyNC0xMC0yM1QxOToyMzozMysxMTowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIDI2LjEgKDIwMjQxMDE5Lm0uMjgxNSBhMjQ5ZDA0KSAgKFdpbmRvd3MpIiBzdEV2dDpjaGFuZ2VkPSIvIi8+IDwvcmRmOlNlcT4gPC94bXBNTTpIaXN0b3J5PiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PpGGSOYAA3j5SURBVHja7P13uK5nWSYOn9ddnvLWtfZau+8kO72TBJJACiUUg4iAUgVEBAfEBiM4Kli+0XEcHXUc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" + }, + { + "id": 1488, + "type": "BatchSlider", + "pos": [ + 480, + 1060 + ], + "size": [ + 310, + 60 + ], + "flags": { + "pinned": true + }, + "order": 93, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 2305 + ], + "slot_index": 0, + "shape": 3 + } + ], + "title": "Batch", + "properties": { + "Node name for S&R": "BatchSlider", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 1 + ] + }, + { + "id": 922, + "type": "Seed (rgthree)", + "pos": [ + 480, + 1160 + ], + "size": [ + 310, + 130 + ], + "flags": { + "collapsed": false, + "pinned": true + }, + "order": 94, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "SEED", + "type": "INT", + "links": [ + 1589 + ], + "slot_index": 0, + "shape": 3, + "dir": 4 + } + ], + "title": "Seed", + "properties": {}, + "widgets_values": [ + -1, + null, + null, + null + ] + }, + { + "id": 1103, + "type": "Power Lora Loader (rgthree)", + "pos": [ + 480, + 320 + ], + "size": [ + 310, + 240 + ], + "flags": { + "collapsed": false + }, + "order": 129, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 4940, + "dir": 3 + }, + { + "name": "clip", + "type": "CLIP", + "link": 3432, + "dir": 3 + } + ], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "links": [ + 1863 + ], + "slot_index": 0, + "shape": 3, + "dir": 4 + }, + { + "name": "CLIP", + "type": "CLIP", + "links": [], + "slot_index": 1, + "shape": 3, + "dir": 4 + } + ], + "title": "Lora Loader", + "properties": { + "Show Strengths": "Single Strength" + }, + "widgets_values": [ + null, + { + "type": "PowerLoraLoaderHeaderWidget" + }, + { + "on": false, + "lora": "FLUX\\Kodak_MC3_Style_F1D-000019.safetensors", + "strength": 0.8, + "strengthTwo": null + }, + { + "on": false, + "lora": "FLUX\\CrayonDrawing_v1.safetensors", + "strength": 1, + "strengthTwo": null + }, + { + "on": false, + "lora": "FLUX\\FLUX-dev-lora-add_details.safetensors", + "strength": 1, + "strengthTwo": null + }, + { + "on": false, + "lora": "FLUX\\CinematicStyleFlux_v1.safetensors", + "strength": 1, + "strengthTwo": null + }, + { + "on": false, + "lora": "FLUX\\olympusd450_lora.safetensors", + "strength": 1, + "strengthTwo": null + }, + null, + "" + ] + }, + { + "id": 3841, + "type": "DetailerForEachPipe", + "pos": [ + 4890, + 2530 + ], + "size": [ + 320, + 540 + ], + "flags": {}, + "order": 204, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 5803 + }, + { + "name": "segs", + "type": "SEGS", + "link": 5804, + "slot_index": 1 + }, + { + "name": "basic_pipe", + "type": "BASIC_PIPE", + "link": 5805, + "slot_index": 2 + }, + { + "name": "detailer_hook", + "type": "DETAILER_HOOK", + "link": null, + "slot_index": 3, + "shape": 7 + }, + { + "name": "refiner_basic_pipe_opt", + "type": "BASIC_PIPE", + "link": null, + "shape": 7 + }, + { + "name": "scheduler_func_opt", + "type": "SCHEDULER_FUNC", + "link": null, + "shape": 7 + }, + { + "name": "seed", + "type": "INT", + "link": 5806, + "widget": { + "name": "seed" + } + }, + { + "name": "steps", + "type": "INT", + "link": 5807, + "widget": { + "name": "steps" + } + }, + { + "name": "scheduler", + "type": "COMBO", + "link": 5808, + "widget": { + "name": "scheduler" + } + }, + { + "name": "denoise", + "type": "FLOAT", + "link": 5809, + "widget": { + "name": "denoise" + } + }, + { + "name": "sampler_name", + "type": "COMBO", + "link": null, + "widget": { + "name": "sampler_name" + } + } + ], + "outputs": [ + { + "name": "image", + "type": "IMAGE", + "links": [ + 5820 + ], + "slot_index": 0, + "shape": 3 + }, + { + "name": "segs", + "type": "SEGS", + "links": [], + "slot_index": 1, + "shape": 3 + }, + { + "name": "basic_pipe", + "type": "BASIC_PIPE", + "links": null, + "shape": 3 + }, + { + "name": "cnet_images", + "type": "IMAGE", + "links": [], + "slot_index": 3, + "shape": 6 + } + ], + "properties": { + "Node name for S&R": "DetailerForEachPipe", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 1024, + true, + 1024, + 703091795492300, + "randomize", + 20, + 1, + "euler", + "beta", + 0.74, + 5, + true, + true, + "", + 0.2, + 1, + false, + 20 + ] + }, + { + "id": 3842, + "type": "ImpactSchedulerAdapter", + "pos": [ + 4690, + 2780 + ], + "size": [ + 260, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 95, + "mode": 0, + "inputs": [ + { + "name": "scheduler", + "type": "COMBO", + "link": null, + "widget": { + "name": "scheduler" + } + } + ], + "outputs": [ + { + "name": "scheduler", + "type": "COMBO", + "links": [ + 5808 + ], + "slot_index": 0, + "shape": 3 + } + ], + "title": "Adapter", + "properties": { + "Node name for S&R": "ImpactSchedulerAdapter", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "simple", + "None" + ] + }, + { + "id": 3843, + "type": "RepeatImageBatch", + "pos": [ + 3910, + 2550 + ], + "size": [ + 210, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 131, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 5810 + }, + { + "name": "amount", + "type": "INT", + "link": 5811, + "widget": { + "name": "amount" + } + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 5815 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "RepeatImageBatch", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 2 + ] + }, + { + "id": 3844, + "type": "ListCounter //Inspire", + "pos": [ + 4630, + 2660 + ], + "size": [ + 210, + 54 + ], + "flags": { + "collapsed": true + }, + "order": 193, + "mode": 0, + "inputs": [ + { + "name": "signal", + "type": "*", + "link": 5812 + }, + { + "name": "base_value", + "type": "INT", + "link": 5813, + "widget": { + "name": "base_value" + } + } + ], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 5806 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "ListCounter //Inspire", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 0 + ] + }, + { + "id": 3845, + "type": "ImageListToBatch+", + "pos": [ + 5710, + 2560 + ], + "size": [ + 184.8000030517578, + 30 + ], + "flags": { + "collapsed": true + }, + "order": 219, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 5814 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 5802 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "ImageListToBatch+", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 3846, + "type": "RebatchImages", + "pos": [ + 4410, + 2550 + ], + "size": [ + 270, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 174, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 5815 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 5803, + 5812 + ], + "slot_index": 0, + "shape": 6 + } + ], + "properties": { + "Node name for S&R": "RebatchImages", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 1 + ] + }, + { + "id": 3847, + "type": "MaskToSEGS", + "pos": [ + 4240, + 2580 + ], + "size": [ + 260, + 154 + ], + "flags": { + "collapsed": true + }, + "order": 175, + "mode": 0, + "inputs": [ + { + "name": "mask", + "type": "MASK", + "link": 5816 + } + ], + "outputs": [ + { + "name": "SEGS", + "type": "SEGS", + "links": [ + 5804 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "MaskToSEGS", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + false, + 1, + false, + 10, + false + ] + }, + { + "id": 3848, + "type": "MaskBlur+", + "pos": [ + 3940, + 2680 + ], + "size": [ + 320, + 80 + ], + "flags": { + "collapsed": true + }, + "order": 132, + "mode": 0, + "inputs": [ + { + "name": "mask", + "type": "MASK", + "link": 5817 + }, + { + "name": "amount", + "type": "INT", + "link": 5818, + "widget": { + "name": "amount" + } + } + ], + "outputs": [ + { + "name": "MASK", + "type": "MASK", + "links": [ + 5816, + 5822 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "MaskBlur+", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 6, + "gpu" + ] + }, + { + "id": 3849, + "type": "ImageCompositeMasked", + "pos": [ + 5380, + 2520 + ], + "size": [ + 270, + 150 + ], + "flags": {}, + "order": 212, + "mode": 0, + "inputs": [ + { + "name": "destination", + "type": "IMAGE", + "link": 5819 + }, + { + "name": "source", + "type": "IMAGE", + "link": 5820 + }, + { + "name": "mask", + "type": "MASK", + "link": 5821, + "shape": 7 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 5814 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "ImageCompositeMasked", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 0, + 0, + false + ] + }, + { + "id": 3850, + "type": "Reroute", + "pos": [ + 4300, + 2450 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 176, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5822 + } + ], + "outputs": [ + { + "name": "", + "type": "MASK", + "links": [ + 5823 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 3851, + "type": "Reroute", + "pos": [ + 5230, + 2450 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 194, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5823 + } + ], + "outputs": [ + { + "name": "", + "type": "MASK", + "links": [ + 5821 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 3852, + "type": "Reroute", + "pos": [ + 4300, + 2410 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 130, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5824 + } + ], + "outputs": [ + { + "name": "", + "type": "IMAGE", + "links": [ + 5825 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 3853, + "type": "Reroute", + "pos": [ + 5230, + 2410 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 173, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 5825 + } + ], + "outputs": [ + { + "name": "", + "type": "IMAGE", + "links": [ + 5819 + ] + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 2218, + "type": "BatchSlider", + "pos": [ + 1760, + 1200 + ], + "size": [ + 310, + 60 + ], + "flags": { + "pinned": true + }, + "order": 96, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 3215 + ], + "slot_index": 0, + "shape": 3 + } + ], + "title": "Resolution Multipy", + "properties": { + "Node name for S&R": "BatchSlider", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 2 + ] + }, + { + "id": 1534, + "type": "UpscaleModelLoader", + "pos": [ + 1760, + 1300 + ], + "size": [ + 310, + 60 + ], + "flags": { + "pinned": true + }, + "order": 97, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "UPSCALE_MODEL", + "type": "UPSCALE_MODEL", + "links": [ + 2361 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "UpscaleModelLoader", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "4xNomos8kDAT.pth" + ] + }, + { + "id": 3327, + "type": "SimpleMathInt+", + "pos": [ + 1760, + 750 + ], + "size": [ + 310, + 60 + ], + "flags": { + "pinned": true + }, + "order": 98, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "INT", + "type": "INT", + "links": [ + 4976 + ], + "slot_index": 0 + } + ], + "title": "Mask Feather", + "properties": { + "Node name for S&R": "SimpleMathInt+", + "enableTabs": false, + "tabWidth": 70, + "tabXOffset": 80, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 100 + ] + }, + { + "id": 1274, + "type": "DenoiseSlider", + "pos": [ + 1760, + 650 + ], + "size": [ + 310, + 60 + ], + "flags": { + "collapsed": false, + "pinned": true + }, + "order": 99, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "FLOAT", + "type": "FLOAT", + "links": [ + 2000 + ], + "slot_index": 0, + "shape": 3 + } + ], + "title": "Denoise", + "properties": { + "Node name for S&R": "DenoiseSlider", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Feather Mask\n", + "secondTabOffset": 80, + "secondTabWidth": 70 + }, + "widgets_values": [ + 0.35100000000000003 + ] + }, + { + "id": 1321, + "type": "SetNode", + "pos": [ + 1940, + 180 + ], + "size": [ + 210, + 60 + ], + "flags": { + "collapsed": true + }, + "order": 151, + "mode": 0, + "inputs": [ + { + "name": "MASK", + "type": "MASK", + "link": 5832 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_mask", + "properties": { + "previousName": "mask" + }, + "widgets_values": [ + "mask" + ] + }, + { + "id": 2219, + "type": "LoadImage", + "pos": [ + 1760, + 170 + ], + "size": [ + 310, + 410 + ], + "flags": { + "collapsed": false + }, + "order": 100, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 4446 + ], + "slot_index": 0, + "label": "IMAGE" + }, + { + "name": "MASK", + "type": "MASK", + "links": [ + 5832 + ], + "slot_index": 1 + } + ], + "title": "Img Load and Mask", + "properties": { + "Node name for S&R": "LoadImage", + "enableTabs": false, + "tabWidth": 50, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "example.png", + "image" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 2438, + "type": "GetNode", + "pos": [ + 5520, + -160 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 101, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "SAMPLER_PARAMS", + "type": "SAMPLER_PARAMS", + "links": [ + 3461 + ], + "slot_index": 0 + } + ], + "title": "Get_sampler params", + "properties": {}, + "widgets_values": [ + "sampler params" + ] + }, + { + "id": 777, + "type": "CLIPTextEncodeFlux", + "pos": [ + 3810, + 3950 + ], + "size": [ + 210, + 110 + ], + "flags": { + "collapsed": false + }, + "order": 126, + "mode": 0, + "inputs": [ + { + "name": "clip", + "type": "CLIP", + "link": 5019 + }, + { + "name": "clip_l", + "type": "STRING", + "link": 1443, + "widget": { + "name": "clip_l" + } + }, + { + "name": "t5xxl", + "type": "STRING", + "link": 1442, + "widget": { + "name": "t5xxl" + } + }, + { + "name": "guidance", + "type": "FLOAT", + "link": 4993, + "widget": { + "name": "guidance" + } + } + ], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [ + 5833 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "CLIPTextEncodeFlux", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + "close up, marketing material, professional lighting, advertising", + "A photograph featuring a 34-year-old rbw1990 with blonde hair and beard wearing a red polo shirt and green apron, working at Bunnings as a cashier", + 30 + ] + }, + { + "id": 1344, + "type": "GetNode", + "pos": [ + 1880, + 950 + ], + "size": [ + 210, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 102, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 2792 + ], + "slot_index": 0 + } + ], + "title": "Get_loadImage", + "properties": {}, + "widgets_values": [ + "loadImage" + ] + }, + { + "id": 1345, + "type": "SetNode", + "pos": [ + 1820, + 1000 + ], + "size": [ + 268.79998779296875, + 58 + ], + "flags": { + "collapsed": true + }, + "order": 196, + "mode": 0, + "inputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "link": 2073 + } + ], + "outputs": [ + { + "name": "*", + "type": "*", + "links": null + } + ], + "title": "Set_Output - imgload_prep", + "properties": { + "previousName": "Output - imgload_prep" + }, + "widgets_values": [ + "Output - imgload_prep" + ] + }, + { + "id": 1346, + "type": "ImagePass", + "pos": [ + 1890, + 890 + ], + "size": [ + 140, + 30 + ], + "flags": { + "collapsed": true + }, + "order": 183, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 5831, + "shape": 7 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 2073 + ], + "slot_index": 0, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "ImagePass", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [] + }, + { + "id": 1342, + "type": "ImageResize+", + "pos": [ + 1760, + 880 + ], + "size": [ + 310, + 250 + ], + "flags": { + "collapsed": false, + "pinned": true + }, + "order": 153, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 2792 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 5831 + ], + "slot_index": 0, + "shape": 3 + }, + { + "name": "width", + "type": "INT", + "links": null, + "shape": 3 + }, + { + "name": "height", + "type": "INT", + "links": null, + "shape": 3 + } + ], + "title": "Resize", + "properties": { + "Node name for S&R": "ImageResize+", + "enableTabs": false, + "tabWidth": 50, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + 1024, + 1024, + "lanczos", + "fill / crop", + "always", + 8 + ] + }, + { + "id": 3247, + "type": "InpaintModelConditioning", + "pos": [ + 4380, + 1790 + ], + "size": [ + 300, + 140 + ], + "flags": {}, + "order": 171, + "mode": 0, + "inputs": [ + { + "name": "positive", + "type": "CONDITIONING", + "link": 4992 + }, + { + "name": "negative", + "type": "CONDITIONING", + "link": 4829 + }, + { + "name": "vae", + "type": "VAE", + "link": 4913 + }, + { + "name": "pixels", + "type": "IMAGE", + "link": 4914 + }, + { + "name": "mask", + "type": "MASK", + "link": 4882 + } + ], + "outputs": [ + { + "name": "positive", + "type": "CONDITIONING", + "links": [ + 4835 + ], + "slot_index": 0 + }, + { + "name": "negative", + "type": "CONDITIONING", + "links": [ + 4836 + ], + "slot_index": 1 + }, + { + "name": "latent", + "type": "LATENT", + "links": [ + 4919 + ], + "slot_index": 2 + } + ], + "properties": { + "Node name for S&R": "InpaintModelConditioning", + "enableTabs": false, + "tabWidth": 65, + "tabXOffset": 10, + "hasSecondTab": false, + "secondTabText": "Send Back", + "secondTabOffset": 80, + "secondTabWidth": 65 + }, + "widgets_values": [ + true + ] + }, + { + "id": 3731, + "type": "OutputTextDisplay", + "pos": [ + 1100, + 120 + ], + "size": [ + 340, + 30 + ], + "flags": {}, + "order": 103, + "mode": 0, + "inputs": [], + "outputs": [], + "title": "Unnamed", + "properties": { + "fontSize": 16, + "fontFamily": "'Inter', Arial", + "fontColor": "#9c9c9c", + "textAlign": "center", + "bgColor": "#00000000", + "padding": 0 + }, + "bgcolor": "#00000000", + "shape": 1 + } + ], + "links": [ + [ + 1118, + 589, + 0, + 590, + 1, + "GUIDER" + ], + [ + 1120, + 593, + 0, + 590, + 3, + "SIGMAS" + ], + [ + 1123, + 586, + 0, + 593, + 0, + "MODEL" + ], + [ + 1187, + 641, + 0, + 644, + 0, + "*" + ], + [ + 1360, + 596, + 0, + 591, + 0, + "INT" + ], + [ + 1371, + 591, + 0, + 590, + 0, + "NOISE" + ], + [ + 1424, + 586, + 0, + 589, + 0, + "MODEL" + ], + [ + 1442, + 724, + 0, + 777, + 2, + "STRING" + ], + [ + 1443, + 793, + 0, + 777, + 1, + "STRING" + ], + [ + 1474, + 590, + 1, + 609, + 0, + "LATENT" + ], + [ + 1489, + 586, + 0, + 837, + 0, + "*" + ], + [ + 1490, + 837, + 0, + 834, + 0, + "*" + ], + [ + 1538, + 609, + 0, + 715, + 0, + "IMAGE" + ], + [ + 1589, + 922, + 0, + 925, + 0, + "*" + ], + [ + 1599, + 933, + 0, + 932, + 0, + "BASIC_PIPE" + ], + [ + 1608, + 932, + 1, + 697, + 0, + "MODEL" + ], + [ + 1680, + 965, + 0, + 963, + 1, + "VAE" + ], + [ + 1745, + 1026, + 0, + 1023, + 0, + "IMAGE" + ], + [ + 1769, + 1052, + 0, + 1051, + 3, + "SIGMAS" + ], + [ + 1770, + 1054, + 0, + 1053, + 0, + "NOISE" + ], + [ + 1772, + 1055, + 0, + 1053, + 4, + "LATENT" + ], + [ + 1773, + 1051, + 0, + 1055, + 0, + "LATENT" + ], + [ + 1775, + 1057, + 0, + 1056, + 0, + "INT" + ], + [ + 1776, + 1056, + 0, + 1051, + 0, + "NOISE" + ], + [ + 1783, + 1060, + 0, + 1061, + 0, + "*" + ], + [ + 1786, + 1064, + 0, + 1060, + 1, + "VAE" + ], + [ + 1787, + 1053, + 1, + 1060, + 0, + "LATENT" + ], + [ + 1798, + 963, + 0, + 1073, + 0, + "LATENT" + ], + [ + 1800, + 1073, + 0, + 1072, + 2, + "LATENT" + ], + [ + 1802, + 1074, + 0, + 1075, + 0, + "*" + ], + [ + 1803, + 1072, + 0, + 1074, + 0, + "LATENT" + ], + [ + 1804, + 965, + 0, + 1074, + 1, + "VAE" + ], + [ + 1859, + 1113, + 0, + 716, + 0, + "IMAGE" + ], + [ + 1863, + 1103, + 0, + 1116, + 0, + "*" + ], + [ + 1920, + 1162, + 0, + 1073, + 1, + "INT" + ], + [ + 2000, + 1274, + 0, + 1217, + 0, + "FLOAT" + ], + [ + 2001, + 1279, + 0, + 1281, + 0, + "*" + ], + [ + 2002, + 1278, + 0, + 1280, + 0, + "*" + ], + [ + 2003, + 1282, + 0, + 1285, + 0, + "*" + ], + [ + 2004, + 1285, + 0, + 1072, + 7, + "STRING" + ], + [ + 2005, + 1286, + 0, + 1072, + 6, + "STRING" + ], + [ + 2006, + 1287, + 0, + 1288, + 0, + "*" + ], + [ + 2007, + 1288, + 0, + 1072, + 8, + "STRING" + ], + [ + 2018, + 1300, + 0, + 1293, + 1, + "INT" + ], + [ + 2037, + 1317, + 0, + 593, + 1, + "COMBO" + ], + [ + 2038, + 1318, + 0, + 593, + 2, + "INT" + ], + [ + 2071, + 1323, + 0, + 963, + 0, + "IMAGE" + ], + [ + 2073, + 1346, + 0, + 1345, + 0, + "IMAGE" + ], + [ + 2087, + 834, + 0, + 1358, + 0, + "MODEL" + ], + [ + 2088, + 921, + 0, + 1358, + 1, + "CONDITIONING" + ], + [ + 2089, + 1358, + 0, + 1051, + 1, + "GUIDER" + ], + [ + 2090, + 1358, + 0, + 1053, + 1, + "GUIDER" + ], + [ + 2092, + 1359, + 0, + 1052, + 0, + "SIGMAS" + ], + [ + 2105, + 1099, + 0, + 1051, + 4, + "LATENT" + ], + [ + 2163, + 1339, + 0, + 1387, + 0, + "UPSCALE_MODEL" + ], + [ + 2165, + 1388, + 0, + 1387, + 1, + "IMAGE" + ], + [ + 2166, + 1388, + 0, + 703, + 0, + "IMAGE" + ], + [ + 2169, + 697, + 0, + 1389, + 1, + "MODEL" + ], + [ + 2171, + 932, + 5, + 1389, + 3, + "CONDITIONING" + ], + [ + 2172, + 932, + 3, + 1389, + 4, + "VAE" + ], + [ + 2173, + 708, + 0, + 1389, + 5, + "INT" + ], + [ + 2174, + 1218, + 0, + 1389, + 8, + "FLOAT" + ], + [ + 2175, + 1308, + 0, + 1389, + 6, + "INT" + ], + [ + 2176, + 1311, + 0, + 1389, + 7, + "COMBO" + ], + [ + 2177, + 1389, + 0, + 729, + 0, + "IMAGE" + ], + [ + 2180, + 1387, + 0, + 418, + 0, + "IMAGE" + ], + [ + 2305, + 1488, + 0, + 1095, + 0, + "INT" + ], + [ + 2333, + 1515, + 0, + 1500, + 0, + "COMBO" + ], + [ + 2334, + 1500, + 0, + 590, + 2, + "SAMPLER" + ], + [ + 2335, + 1500, + 0, + 1518, + 0, + "*" + ], + [ + 2337, + 1520, + 0, + 1051, + 2, + "SAMPLER" + ], + [ + 2338, + 1520, + 0, + 1053, + 2, + "SAMPLER" + ], + [ + 2342, + 1524, + 0, + 1389, + 9, + "COMBO" + ], + [ + 2344, + 1526, + 0, + 1072, + 9, + "STRING" + ], + [ + 2361, + 1534, + 0, + 1330, + 0, + "*" + ], + [ + 2380, + 726, + 0, + 624, + 0, + "IMAGE" + ], + [ + 2404, + 1618, + 0, + 586, + 3, + "FLOAT" + ], + [ + 2406, + 1620, + 0, + 697, + 1, + "FLOAT" + ], + [ + 2409, + 1623, + 0, + 1624, + 0, + "*" + ], + [ + 2410, + 1624, + 0, + 1072, + 10, + "STRING" + ], + [ + 2418, + 1629, + 0, + 1617, + 0, + "FLOAT" + ], + [ + 2792, + 1344, + 0, + 1342, + 0, + "IMAGE" + ], + [ + 3212, + 2211, + 0, + 641, + 4, + "CONDITIONING" + ], + [ + 3214, + 2217, + 0, + 1090, + 0, + "INT" + ], + [ + 3215, + 2218, + 0, + 1331, + 0, + "INT" + ], + [ + 3362, + 2328, + 0, + 1072, + 1, + "CONDITIONING" + ], + [ + 3363, + 1079, + 0, + 1072, + 0, + "MODEL" + ], + [ + 3425, + 2364, + 0, + 2334, + 1, + "IMAGE" + ], + [ + 3426, + 717, + 0, + 2334, + 0, + "IMAGE" + ], + [ + 3432, + 1115, + 0, + 1103, + 1, + "CLIP" + ], + [ + 3433, + 418, + 0, + 1392, + 0, + "IMAGE" + ], + [ + 3447, + 2427, + 0, + 2428, + 0, + "*" + ], + [ + 3448, + 2429, + 0, + 1090, + 1, + "COMBO" + ], + [ + 3449, + 1090, + 1, + 586, + 1, + "INT" + ], + [ + 3450, + 1090, + 2, + 586, + 2, + "INT" + ], + [ + 3460, + 2435, + 0, + 2437, + 0, + "*" + ], + [ + 3461, + 2438, + 0, + 2436, + 0, + "SAMPLER_PARAMS" + ], + [ + 3463, + 2436, + 0, + 1508, + 0, + "COMBO" + ], + [ + 3464, + 2436, + 2, + 1271, + 0, + "COMBO" + ], + [ + 3465, + 2436, + 1, + 1510, + 0, + "STRING" + ], + [ + 3466, + 2436, + 3, + 1272, + 0, + "STRING" + ], + [ + 3492, + 2464, + 0, + 723, + 0, + "STRING" + ], + [ + 3493, + 2468, + 0, + 788, + 0, + "STRING" + ], + [ + 3494, + 2469, + 0, + 1105, + 0, + "MODEL" + ], + [ + 3499, + 2472, + 0, + 609, + 1, + "VAE" + ], + [ + 3509, + 2476, + 0, + 2211, + 0, + "CLIP" + ], + [ + 3543, + 1090, + 1, + 2507, + 0, + "*" + ], + [ + 3544, + 1090, + 2, + 2508, + 0, + "*" + ], + [ + 3717, + 1052, + 1, + 2600, + 0, + "*" + ], + [ + 3718, + 2600, + 0, + 1053, + 3, + "SIGMAS" + ], + [ + 4414, + 717, + 0, + 3000, + 0, + "IMAGE" + ], + [ + 4424, + 583, + 0, + 1114, + 0, + "CLIP" + ], + [ + 4425, + 594, + 0, + 832, + 0, + "VAE" + ], + [ + 4446, + 2219, + 0, + 1320, + 0, + "IMAGE" + ], + [ + 4511, + 1022, + 0, + 1113, + 0, + "IMAGE" + ], + [ + 4514, + 1090, + 0, + 3032, + 0, + "*" + ], + [ + 4666, + 3133, + 0, + 3132, + 1, + "INT" + ], + [ + 4667, + 418, + 0, + 3132, + 0, + "IMAGE" + ], + [ + 4668, + 3132, + 0, + 1389, + 0, + "IMAGE" + ], + [ + 4689, + 1086, + 0, + 3169, + 0, + "*" + ], + [ + 4690, + 3169, + 0, + 1072, + 5, + "STRING" + ], + [ + 4691, + 1219, + 0, + 3170, + 0, + "*" + ], + [ + 4692, + 3170, + 0, + 1072, + 4, + "STRING" + ], + [ + 4714, + 1340, + 0, + 3178, + 1, + "*" + ], + [ + 4715, + 1340, + 0, + 3182, + 1, + "*" + ], + [ + 4716, + 703, + 0, + 3178, + 0, + "*" + ], + [ + 4717, + 703, + 1, + 3182, + 0, + "*" + ], + [ + 4718, + 3178, + 0, + 418, + 2, + "INT" + ], + [ + 4719, + 3182, + 0, + 418, + 3, + "INT" + ], + [ + 4779, + 716, + 0, + 3210, + 0, + "*" + ], + [ + 4780, + 1602, + 0, + 3212, + 0, + "STRING" + ], + [ + 4781, + 3212, + 0, + 624, + 1, + "STRING" + ], + [ + 4827, + 3256, + 0, + 3246, + 0, + "CLIP" + ], + [ + 4829, + 3246, + 0, + 3247, + 1, + "CONDITIONING" + ], + [ + 4834, + 3248, + 0, + 3249, + 0, + "MODEL" + ], + [ + 4835, + 3247, + 0, + 3249, + 1, + "CONDITIONING" + ], + [ + 4836, + 3247, + 1, + 3249, + 2, + "CONDITIONING" + ], + [ + 4839, + 3260, + 0, + 3249, + 5, + "INT" + ], + [ + 4845, + 3267, + 0, + 3263, + 0, + "IMAGE" + ], + [ + 4849, + 3257, + 0, + 3265, + 0, + "*" + ], + [ + 4850, + 3264, + 0, + 3266, + 0, + "*" + ], + [ + 4851, + 3265, + 0, + 3267, + 0, + "*" + ], + [ + 4852, + 3268, + 0, + 3249, + 6, + "COMBO" + ], + [ + 4853, + 3269, + 0, + 3249, + 7, + "COMBO" + ], + [ + 4854, + 3263, + 0, + 712, + 0, + "*" + ], + [ + 4882, + 3264, + 0, + 3247, + 4, + "MASK" + ], + [ + 4896, + 3279, + 0, + 3263, + 1, + "IMAGE" + ], + [ + 4904, + 3283, + 0, + 3279, + 1, + "VAE" + ], + [ + 4911, + 3284, + 0, + 3283, + 0, + "*" + ], + [ + 4912, + 1291, + 0, + 3284, + 0, + "*" + ], + [ + 4913, + 3284, + 0, + 3247, + 2, + "VAE" + ], + [ + 4914, + 3265, + 0, + 3247, + 3, + "IMAGE" + ], + [ + 4916, + 3249, + 0, + 3279, + 0, + "LATENT" + ], + [ + 4917, + 1298, + 0, + 3249, + 4, + "INT" + ], + [ + 4919, + 3247, + 2, + 1293, + 0, + "LATENT" + ], + [ + 4920, + 1293, + 0, + 3249, + 3, + "LATENT" + ], + [ + 4921, + 3285, + 0, + 3249, + 8, + "FLOAT" + ], + [ + 4940, + 3302, + 0, + 1103, + 0, + "MODEL" + ], + [ + 4941, + 3164, + 0, + 1026, + 0, + "IMAGE" + ], + [ + 4945, + 3303, + 0, + 3248, + 0, + "MODEL" + ], + [ + 4966, + 3121, + 0, + 3264, + 0, + "*" + ], + [ + 4976, + 3327, + 0, + 3328, + 0, + "*" + ], + [ + 4992, + 3342, + 0, + 3247, + 0, + "CONDITIONING" + ], + [ + 4993, + 1319, + 0, + 777, + 3, + "FLOAT" + ], + [ + 5017, + 3367, + 0, + 641, + 3, + "CONDITIONING" + ], + [ + 5019, + 3368, + 0, + 777, + 0, + "CLIP" + ], + [ + 5045, + 3383, + 0, + 586, + 0, + "MODEL" + ], + [ + 5046, + 1117, + 0, + 3383, + 0, + "*" + ], + [ + 5237, + 3515, + 0, + 589, + 1, + "CONDITIONING" + ], + [ + 5238, + 3515, + 0, + 921, + 0, + "*" + ], + [ + 5319, + 1114, + 0, + 2476, + 0, + "*" + ], + [ + 5324, + 832, + 0, + 641, + 2, + "VAE" + ], + [ + 5325, + 2476, + 0, + 641, + 1, + "CLIP" + ], + [ + 5326, + 1117, + 0, + 641, + 0, + "MODEL" + ], + [ + 5327, + 1090, + 0, + 3548, + 0, + "*" + ], + [ + 5328, + 3548, + 0, + 3549, + 0, + "*" + ], + [ + 5329, + 3549, + 0, + 590, + 4, + "LATENT" + ], + [ + 5330, + 593, + 0, + 1359, + 0, + "*" + ], + [ + 5369, + 932, + 4, + 1389, + 2, + "CONDITIONING" + ], + [ + 5384, + 3367, + 0, + 3515, + 0, + "*" + ], + [ + 5589, + 3330, + 0, + 3722, + 1, + "INT" + ], + [ + 5590, + 3266, + 0, + 3722, + 0, + "MASK" + ], + [ + 5591, + 3722, + 0, + 3263, + 2, + "MASK" + ], + [ + 5802, + 3845, + 0, + 3830, + 0, + "*" + ], + [ + 5803, + 3846, + 0, + 3841, + 0, + "IMAGE" + ], + [ + 5804, + 3847, + 0, + 3841, + 1, + "SEGS" + ], + [ + 5805, + 3831, + 0, + 3841, + 2, + "BASIC_PIPE" + ], + [ + 5806, + 3844, + 0, + 3841, + 6, + "INT" + ], + [ + 5807, + 3833, + 0, + 3841, + 7, + "INT" + ], + [ + 5808, + 3842, + 0, + 3841, + 8, + "COMBO" + ], + [ + 5809, + 3832, + 0, + 3841, + 9, + "FLOAT" + ], + [ + 5810, + 3834, + 0, + 3843, + 0, + "IMAGE" + ], + [ + 5811, + 3837, + 0, + 3843, + 1, + "INT" + ], + [ + 5812, + 3846, + 0, + 3844, + 0, + "*" + ], + [ + 5813, + 3836, + 0, + 3844, + 1, + "INT" + ], + [ + 5814, + 3849, + 0, + 3845, + 0, + "IMAGE" + ], + [ + 5815, + 3843, + 0, + 3846, + 0, + "IMAGE" + ], + [ + 5816, + 3848, + 0, + 3847, + 0, + "MASK" + ], + [ + 5817, + 3840, + 0, + 3848, + 0, + "MASK" + ], + [ + 5818, + 3839, + 0, + 3848, + 1, + "INT" + ], + [ + 5819, + 3853, + 0, + 3849, + 0, + "IMAGE" + ], + [ + 5820, + 3841, + 0, + 3849, + 1, + "IMAGE" + ], + [ + 5821, + 3851, + 0, + 3849, + 2, + "MASK" + ], + [ + 5822, + 3848, + 0, + 3850, + 0, + "*" + ], + [ + 5823, + 3850, + 0, + 3851, + 0, + "*" + ], + [ + 5824, + 3834, + 0, + 3852, + 0, + "*" + ], + [ + 5825, + 3852, + 0, + 3853, + 0, + "*" + ], + [ + 5831, + 1342, + 0, + 1346, + 0, + "IMAGE" + ], + [ + 5832, + 2219, + 1, + 1321, + 0, + "MASK" + ], + [ + 5833, + 777, + 0, + 3340, + 0, + "CONDITIONING" + ] + ], + "groups": [ + { + "id": 43, + "title": "", + "bounding": [ + 830.17724609375, + 90.28895568847656, + 890.865966796875, + 989.3416748046875 + ], + "font_size": 12, + "flags": { + "pinned": true + } + }, + { + "id": 33, + "title": "Basic Pipe Setup + Empty Latent", + "bounding": [ + 3600, + 100, + 1421.6837158203125, + 650.072265625 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + }, + { + "id": 32, + "title": "Text to Image", + "bounding": [ + 5050, + 100, + 1882.51953125, + 654.6351318359375 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + }, + { + "id": 30, + "title": "Noise Injection", + "bounding": [ + 6990, + 100, + 1852.53662109375, + 647.7285766601562 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + }, + { + "id": 42, + "title": "", + "bounding": [ + 1749.915771484375, + 120.41236114501953, + 330, + 470 + ], + "font_size": 12, + "flags": { + "pinned": true + } + }, + { + "id": 31, + "title": "FLUX Config", + "bounding": [ + 2990, + 100, + 570, + 430 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + }, + { + "id": 41, + "title": "Output Selector", + "bounding": [ + 470, + 140, + 330, + 130 + ], + "font_size": 12, + "flags": {} + }, + { + "id": 39, + "title": "", + "bounding": [ + 470, + 270, + 330, + 300 + ], + "font_size": 12, + "flags": { + "pinned": true + } + }, + { + "id": 36, + "title": "", + "bounding": [ + 470, + 570, + 330, + 440 + ], + "font_size": 12, + "flags": { + "pinned": true + } + }, + { + "id": 35, + "title": "", + "bounding": [ + 1750, + 590, + 330, + 230 + ], + "font_size": 12, + "flags": {} + }, + { + "id": 20, + "title": "img2img", + "bounding": [ + 3600, + 780, + 1390.4423828125, + 643.8358154296875 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + }, + { + "id": 29, + "title": "", + "bounding": [ + 1750, + 820, + 330, + 320 + ], + "font_size": 12, + "flags": {} + }, + { + "id": 27, + "title": "", + "bounding": [ + 470, + 1010, + 330.96514892578125, + 511.4422302246094 + ], + "font_size": 12, + "flags": { + "pinned": true + } + }, + { + "id": 28, + "title": "", + "bounding": [ + 831.2684326171875, + 1080.7266845703125, + 889.65869140625, + 328.6146240234375 + ], + "font_size": 12, + "flags": { + "pinned": true + } + }, + { + "id": 25, + "title": "", + "bounding": [ + 1750, + 1140, + 329.5889587402344, + 228.2154541015625 + ], + "font_size": 12, + "flags": {} + }, + { + "id": 17, + "title": "Inpainting", + "bounding": [ + 3600, + 1440, + 3131.747314453125, + 880.1497192382812 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + }, + { + "id": 14, + "title": "Ultimate Upscaler", + "bounding": [ + 3600, + 3130, + 2080.63916015625, + 664.80419921875 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + }, + { + "id": 10, + "title": "Save Output", + "bounding": [ + 4620, + -300, + 866.1715698242188, + 305.7850341796875 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + }, + { + "id": 9, + "title": "Sampler Params Split", + "bounding": [ + 5510, + -300, + 684.7925415039062, + 222.1497802734375 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + }, + { + "id": 8, + "title": "Final image", + "bounding": [ + 3600, + -300, + 1000.2138061523438, + 367.3245849609375 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + }, + { + "id": 46, + "title": "Conditioning", + "bounding": [ + 3600, + 3810, + 1140, + 430 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + }, + { + "id": 55, + "title": "Play Sound Notification", + "bounding": [ + 4220, + -260, + 330, + 193.60000610351562 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + }, + { + "id": 56, + "title": "Detailer", + "bounding": [ + 3600, + 2340, + 2578.261962890625, + 773.4797973632812 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + } + ], + "config": {}, + "extra": { + "ds": { + "scale": 0.6830134553650706, + "offset": [ + 413.1241143854345, + 349.55477832983235 + ] + }, + "linkExtensions": [ + { + "id": 5600, + "parentId": 1 + } + ], + "reroutes": [ + { + "id": 1, + "pos": [ + -1372.1390380859375, + 274.1617431640625 + ], + "linkIds": [ + 5600 + ] + } + ], + "groupNodes": {} + }, + "version": 0.4 +} \ No newline at end of file diff --git a/comfyui-frame-interpolation/.github/workflows/publish.yml b/comfyui-frame-interpolation/.github/workflows/publish.yml new file mode 100644 index 0000000000000000000000000000000000000000..eb5b7d5f5484abc954a89dde2b97d327de44b43b --- /dev/null +++ b/comfyui-frame-interpolation/.github/workflows/publish.yml @@ -0,0 +1,25 @@ +name: Publish to Comfy registry +on: + workflow_dispatch: + push: + branches: + - main + paths: + - "pyproject.toml" + +permissions: + issues: write + +jobs: + publish-node: + name: Publish Custom Node to registry + runs-on: ubuntu-latest + if: ${{ github.repository_owner == 'Fannovel16' }} + steps: + - name: Check out code + uses: actions/checkout@v4 + - name: Publish Custom Node + uses: Comfy-Org/publish-node-action@v1 + with: + ## Add your own personal access token to your Github Repository secrets and reference it here. + personal_access_token: ${{ secrets.REGISTRY_ACCESS_TOKEN }} diff --git a/comfyui-frame-interpolation/.gitignore b/comfyui-frame-interpolation/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..c16001cc49079aaeba0e41bb39dcbf6c4ac3733d --- /dev/null +++ b/comfyui-frame-interpolation/.gitignore @@ -0,0 +1,3 @@ +ckpts +__pycache__ +test_result \ No newline at end of file diff --git a/comfyui-frame-interpolation/.tracking b/comfyui-frame-interpolation/.tracking new file mode 100644 index 0000000000000000000000000000000000000000..fc3dbda39850e62c5485c43eb4538b05e8674b69 --- /dev/null +++ b/comfyui-frame-interpolation/.tracking @@ -0,0 +1,82 @@ +.github/workflows/publish.yml +.gitignore +All_in_one_v1_3.png +LICENSE +README.md +__init__.py +config.yaml +demo_frames/anime0.png +demo_frames/anime1.png +demo_frames/bocchi0.jpg +demo_frames/bocchi1.jpg +demo_frames/real0.png +demo_frames/real1.png +demo_frames/rick/00003.png +demo_frames/rick/00004.png +demo_frames/rick/00005.png +demo_frames/violet0.png +demo_frames/violet1.png +example.png +install-taichi.bat +install.bat +install.py +interpolation_schedule.png +other_nodes.py +pyproject.toml +requirements-no-cupy.txt +requirements-with-cupy.txt +test.py +test_vfi_schedule.gif +vfi_models/amt/__init__.py +vfi_models/amt/amt_arch.py +vfi_models/cain/__init__.py +vfi_models/cain/cain_arch.py +vfi_models/cain/cain_encdec_arch.py +vfi_models/cain/cain_noca_arch.py +vfi_models/cain/common.py +vfi_models/eisai/__init__.py +vfi_models/eisai/eisai_arch.py +vfi_models/film/__init__.py +vfi_models/film/film_arch.py +vfi_models/flavr/__init__.py +vfi_models/flavr/flavr_arch.py +vfi_models/flavr/resnet_3D.py +vfi_models/gmfss_fortuna/GMFSS_Fortuna.py +vfi_models/gmfss_fortuna/GMFSS_Fortuna_arch.py +vfi_models/gmfss_fortuna/GMFSS_Fortuna_union.py +vfi_models/gmfss_fortuna/GMFSS_Fortuna_union_arch.py +vfi_models/gmfss_fortuna/__init__.py +vfi_models/ifrnet/IFRNet_L_arch.py +vfi_models/ifrnet/IFRNet_S_arch.py +vfi_models/ifrnet/__init__.py +vfi_models/ifunet/IFUNet_arch.py +vfi_models/ifunet/__init__.py +vfi_models/m2m/M2M_arch.py +vfi_models/m2m/__init__.py +vfi_models/ops/__init__.py +vfi_models/ops/cupy_ops/__init__.py +vfi_models/ops/cupy_ops/adacof.py +vfi_models/ops/cupy_ops/batch_edt.py +vfi_models/ops/cupy_ops/correlation.py +vfi_models/ops/cupy_ops/costvol.py +vfi_models/ops/cupy_ops/sepconv.py +vfi_models/ops/cupy_ops/softsplat.py +vfi_models/ops/cupy_ops/utils.py +vfi_models/ops/taichi_ops/__init__.py +vfi_models/ops/taichi_ops/adacof.py +vfi_models/ops/taichi_ops/batch_edt.py +vfi_models/ops/taichi_ops/correlation.py +vfi_models/ops/taichi_ops/costvol.py +vfi_models/ops/taichi_ops/raw_softsplat.py +vfi_models/ops/taichi_ops/sepconv.py +vfi_models/ops/taichi_ops/utils.py +vfi_models/ops/taichi_ops/worker_process.py +vfi_models/rife/__init__.py +vfi_models/rife/rife_arch.py +vfi_models/sepconv/__init__.py +vfi_models/sepconv/sepconv_enhanced.py +vfi_models/stmfnet/__init__.py +vfi_models/stmfnet/stmfnet_arch.py +vfi_models/xvfi/__init__.py +vfi_models/xvfi/xvfi_arch.py +vfi_utils.py \ No newline at end of file diff --git a/comfyui-frame-interpolation/LICENSE b/comfyui-frame-interpolation/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..2a8000ad9540222a0f8f50ac7fb8b04fa8dd0cd3 --- /dev/null +++ b/comfyui-frame-interpolation/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2023 Fannovel16 + +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. \ No newline at end of file diff --git a/comfyui-frame-interpolation/README.md b/comfyui-frame-interpolation/README.md new file mode 100644 index 0000000000000000000000000000000000000000..f5d0f3c06b520f1f7a9724e67cc780d8709e2cbb --- /dev/null +++ b/comfyui-frame-interpolation/README.md @@ -0,0 +1,194 @@ +# ComfyUI Frame Interpolation (ComfyUI VFI) (WIP) + +A custom node set for Video Frame Interpolation in ComfyUI. +**UPDATE** Memory management is improved. Now this extension takes less RAM and VRAM than before. + +**UPDATE 2** VFI nodes now accept scheduling multipiler values + +![](./interpolation_schedule.png) +![](./test_vfi_schedule.gif) + +## Nodes +* KSampler Gradually Adding More Denoise (efficient) +* GMFSS Fortuna VFI +* IFRNet VFI +* IFUnet VFI +* M2M VFI +* RIFE VFI (4.0 - 4.9) (Note that option `fast_mode` won't do anything from v4.5+ as `contextnet` is removed) +* FILM VFI +* Sepconv VFI +* AMT VFI +* Make Interpolation State List +* STMFNet VFI (requires at least 4 frames, can only do 2x interpolation for now) +* FLAVR VFI (same conditions as STMFNet) + +## Install +### ComfyUI Manager +Incompatibile issue with it is now fixed + +Following this guide to install this extension + +https://github.com/ltdrdata/ComfyUI-Manager#how-to-use +### Command-line +#### Windows +Run install.bat + +For Window users, if you are having trouble with cupy, please run `install.bat` instead of `install-cupy.py` or `python install.py`. +#### Linux +Open your shell app and start venv if it is used for ComfyUI. Run: +``` +python install.py +``` +## Support for non-CUDA device (experimental) +If you don't have a NVidia card, you can try `taichi` ops backend powered by [Taichi Lang](https://www.taichi-lang.org/) + +On Windows, you can install it by running `install.bat` or `pip install taichi` on Linux + +Then change value of `ops_backend` from `cupy` to `taichi` in `config.yaml` + +If `NotImplementedError` appears, a VFI node in the workflow isn't supported by taichi + +## Usage +All VFI nodes can be accessed in **category** `ComfyUI-Frame-Interpolation/VFI` if the installation is successful and require a `IMAGE` containing frames (at least 2, or at least 4 for STMF-Net/FLAVR). + +Regarding STMFNet and FLAVR, if you only have two or three frames, you should use: Load Images -> Other VFI node (FILM is recommended in this case) with `multiplier=4` -> STMFNet VFI/FLAVR VFI + +`clear_cache_after_n_frames` is used to avoid out-of-memory. Decreasing it makes the chance lower but also increases processing time. + +It is recommended to use LoadImages (LoadImagesFromDirectory) from [ComfyUI-Advanced-ControlNet](https://github.com/Kosinkadink/ComfyUI-Advanced-ControlNet/) and [ComfyUI-VideoHelperSuite](https://github.com/Kosinkadink/ComfyUI-VideoHelperSuite) along side with this extension. + +## Example +### Simple workflow +Workflow metadata isn't embeded +Download these two images [anime0.png](./demo_frames/anime0.png) and [anime1.png](./demo_frames/anime0.png) and put them into a folder like `E:\test` in this image. +![](./example.png) + +### Complex workflow +It's used in AnimationDiff (can load workflow metadata) +![](All_in_one_v1_3.png) + +## Credit +Big thanks for styler00dollar for making [VSGAN-tensorrt-docker](https://github.com/styler00dollar/VSGAN-tensorrt-docker). About 99% the code of this repo comes from it. + +Citation for each VFI node: +### GMFSS Fortuna +The All-In-One GMFSS: Dedicated for Anime Video Frame Interpolation + +https://github.com/98mxr/GMFSS_Fortuna + +### IFRNet +```bibtex +@InProceedings{Kong_2022_CVPR, + author = {Kong, Lingtong and Jiang, Boyuan and Luo, Donghao and Chu, Wenqing and Huang, Xiaoming and Tai, Ying and Wang, Chengjie and Yang, Jie}, + title = {IFRNet: Intermediate Feature Refine Network for Efficient Frame Interpolation}, + booktitle = {Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR)}, + year = {2022} +} +``` + +### IFUnet +RIFE with IFUNet, FusionNet and RefineNet + +https://github.com/98mxr/IFUNet +### M2M +```bibtex +@InProceedings{hu2022m2m, + title={Many-to-many Splatting for Efficient Video Frame Interpolation}, + author={Hu, Ping and Niklaus, Simon and Sclaroff, Stan and Saenko, Kate}, + journal={CVPR}, + year={2022} + } +``` + +### RIFE +```bibtex +@inproceedings{huang2022rife, + title={Real-Time Intermediate Flow Estimation for Video Frame Interpolation}, + author={Huang, Zhewei and Zhang, Tianyuan and Heng, Wen and Shi, Boxin and Zhou, Shuchang}, + booktitle={Proceedings of the European Conference on Computer Vision (ECCV)}, + year={2022} +} +``` + +### FILM +[Frame interpolation in PyTorch](https://github.com/dajes/frame-interpolation-pytorch) + +```bibtex +@inproceedings{reda2022film, + title = {FILM: Frame Interpolation for Large Motion}, + author = {Fitsum Reda and Janne Kontkanen and Eric Tabellion and Deqing Sun and Caroline Pantofaru and Brian Curless}, + booktitle = {European Conference on Computer Vision (ECCV)}, + year = {2022} +} +``` + +```bibtex +@misc{film-tf, + title = {Tensorflow 2 Implementation of "FILM: Frame Interpolation for Large Motion"}, + author = {Fitsum Reda and Janne Kontkanen and Eric Tabellion and Deqing Sun and Caroline Pantofaru and Brian Curless}, + year = {2022}, + publisher = {GitHub}, + journal = {GitHub repository}, + howpublished = {\url{https://github.com/google-research/frame-interpolation}} +} +``` + +### Sepconv +```bibtex +[1] @inproceedings{Niklaus_WACV_2021, + author = {Simon Niklaus and Long Mai and Oliver Wang}, + title = {Revisiting Adaptive Convolutions for Video Frame Interpolation}, + booktitle = {IEEE Winter Conference on Applications of Computer Vision}, + year = {2021} + } +``` + +```bibtex +[2] @inproceedings{Niklaus_ICCV_2017, + author = {Simon Niklaus and Long Mai and Feng Liu}, + title = {Video Frame Interpolation via Adaptive Separable Convolution}, + booktitle = {IEEE International Conference on Computer Vision}, + year = {2017} + } +``` + +```bibtex +[3] @inproceedings{Niklaus_CVPR_2017, + author = {Simon Niklaus and Long Mai and Feng Liu}, + title = {Video Frame Interpolation via Adaptive Convolution}, + booktitle = {IEEE Conference on Computer Vision and Pattern Recognition}, + year = {2017} + } +``` + +### AMT + ```bibtex + @inproceedings{licvpr23amt, + title={AMT: All-Pairs Multi-Field Transforms for Efficient Frame Interpolation}, + author={Li, Zhen and Zhu, Zuo-Liang and Han, Ling-Hao and Hou, Qibin and Guo, Chun-Le and Cheng, Ming-Ming}, + booktitle={IEEE Conference on Computer Vision and Pattern Recognition (CVPR)}, + year={2023} + } + ``` + +### ST-MFNet +```bibtex +@InProceedings{Danier_2022_CVPR, + author = {Danier, Duolikun and Zhang, Fan and Bull, David}, + title = {ST-MFNet: A Spatio-Temporal Multi-Flow Network for Frame Interpolation}, + booktitle = {Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR)}, + month = {June}, + year = {2022}, + pages = {3521-3531} +} +``` + +### FLAVR +```bibtex +@article{kalluri2021flavr, + title={FLAVR: Flow-Agnostic Video Representations for Fast Frame Interpolation}, + author={Kalluri, Tarun and Pathak, Deepak and Chandraker, Manmohan and Tran, Du}, + booktitle={arxiv}, + year={2021} +} +``` diff --git a/comfyui-frame-interpolation/__init__.py b/comfyui-frame-interpolation/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..b362e2c1dbec391c923bda205c46da3a235d63ee --- /dev/null +++ b/comfyui-frame-interpolation/__init__.py @@ -0,0 +1,42 @@ +import os +import sys +sys.path.insert(0, os.path.abspath(os.path.dirname(__file__))) + +from .other_nodes import Gradually_More_Denoise_KSampler + +#Some models are commented out because the code is not completed +#from vfi_models.eisai import EISAI_VFI +from vfi_models.gmfss_fortuna import GMFSS_Fortuna_VFI +from vfi_models.ifrnet import IFRNet_VFI +from vfi_models.ifunet import IFUnet_VFI +from vfi_models.m2m import M2M_VFI +from vfi_models.rife import RIFE_VFI +from vfi_models.sepconv import SepconvVFI +from vfi_models.amt import AMT_VFI +from vfi_models.film import FILM_VFI +from vfi_models.stmfnet import STMFNet_VFI +from vfi_models.flavr import FLAVR_VFI +from vfi_models.cain import CAIN_VFI +from vfi_utils import MakeInterpolationStateList, FloatToInt + +NODE_CLASS_MAPPINGS = { + "KSampler Gradually Adding More Denoise (efficient)": Gradually_More_Denoise_KSampler, +# "EISAI VFI": EISAI_VFI, + "GMFSS Fortuna VFI": GMFSS_Fortuna_VFI, + "IFRNet VFI": IFRNet_VFI, + "IFUnet VFI": IFUnet_VFI, + "M2M VFI": M2M_VFI, + "RIFE VFI": RIFE_VFI, + "Sepconv VFI": SepconvVFI, + "AMT VFI": AMT_VFI, + "FILM VFI": FILM_VFI, + "Make Interpolation State List": MakeInterpolationStateList, + "STMFNet VFI": STMFNet_VFI, + "FLAVR VFI": FLAVR_VFI, + "CAIN VFI": CAIN_VFI, + "VFI FloatToInt": FloatToInt +} + +NODE_DISPLAY_NAME_MAPPINGS = { + "RIFE VFI": "RIFE VFI (recommend rife47 and rife49)" +} \ No newline at end of file diff --git a/comfyui-frame-interpolation/__pycache__/__init__.cpython-310.pyc b/comfyui-frame-interpolation/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b3c9e7db6149f9a0849c07a6796b97e07bc83500 Binary files /dev/null and b/comfyui-frame-interpolation/__pycache__/__init__.cpython-310.pyc differ diff --git a/comfyui-frame-interpolation/__pycache__/other_nodes.cpython-310.pyc b/comfyui-frame-interpolation/__pycache__/other_nodes.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9c16ddf74a6ecd9dd03aa42cd9afdc82b7dbd822 Binary files /dev/null and b/comfyui-frame-interpolation/__pycache__/other_nodes.cpython-310.pyc differ diff --git a/comfyui-frame-interpolation/__pycache__/vfi_utils.cpython-310.pyc b/comfyui-frame-interpolation/__pycache__/vfi_utils.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..08df89e923e07eb42f385fb26e5dbe57dffcba58 Binary files /dev/null and b/comfyui-frame-interpolation/__pycache__/vfi_utils.cpython-310.pyc differ diff --git a/comfyui-frame-interpolation/config.yaml b/comfyui-frame-interpolation/config.yaml new file mode 100644 index 0000000000000000000000000000000000000000..b99d4a76ab08cc1157e349745770dd1f37c9ffca --- /dev/null +++ b/comfyui-frame-interpolation/config.yaml @@ -0,0 +1,3 @@ +#Plz don't delete this file, just edit it when neccessary. +ckpts_path: "./ckpts" +ops_backend: "cupy" #Either "taichi" or "cupy" \ No newline at end of file diff --git a/comfyui-frame-interpolation/install-taichi.bat b/comfyui-frame-interpolation/install-taichi.bat new file mode 100644 index 0000000000000000000000000000000000000000..d601f71c20e8ea2d768ee710a277666f2bd68643 --- /dev/null +++ b/comfyui-frame-interpolation/install-taichi.bat @@ -0,0 +1,11 @@ +@echo off +echo Installing Taichi lang backend... + +if exist "%python_exec%" ( + %python_exec% -s -m pip install taichi +) else ( + echo Installing with system Python + pip install taichi +) + +pause \ No newline at end of file diff --git a/comfyui-frame-interpolation/install.bat b/comfyui-frame-interpolation/install.bat new file mode 100644 index 0000000000000000000000000000000000000000..84e0f7eb536a2c9bfc3313a377086b9cf4aa508f --- /dev/null +++ b/comfyui-frame-interpolation/install.bat @@ -0,0 +1,16 @@ +@echo off + +set "requirements_txt=%~dp0\requirements-no-cupy.txt" +set "python_exec=..\..\..\python_embeded\python.exe" + +echo Installing ComfyUI Frame Interpolation.. + +if exist "%python_exec%" ( + echo Installing with ComfyUI Portable + %python_exec% -s install.py +) else ( + echo Installing with system Python + python install.py +) + +pause \ No newline at end of file diff --git a/comfyui-frame-interpolation/install.py b/comfyui-frame-interpolation/install.py new file mode 100644 index 0000000000000000000000000000000000000000..ecbe35da8bd39829134a6ee7759251e0a203d25b --- /dev/null +++ b/comfyui-frame-interpolation/install.py @@ -0,0 +1,59 @@ +import os +from pathlib import Path +import sys +import platform + +def get_cuda_ver_from_dir(cuda_home): + nvrtc = filter(lambda lib_file: "nvrtc-builtins" in lib_file, os.listdir(cuda_home)) + nvrtc = list(nvrtc) + if len(nvrtc) == 0: + return + nvrtc = nvrtc[0] + if ('102' in nvrtc) or ('10.2' in nvrtc): + return '102' + if '110' in nvrtc or ('11.0' in nvrtc): + return '110' + if '111' in nvrtc or ('11.1' in nvrtc): + return '111' + if '11' in nvrtc: + return '11x' + if '12' in nvrtc: + return '12x' + +s_param = '-s' if "python_embeded" in sys.executable else '' + +def get_cuda_home_path(): + if "CUDA_HOME" in os.environ: + return os.environ["CUDA_HOME"] + import torch + torch_lib_path = Path(torch.__file__).parent / "lib" + torch_lib_path = str(torch_lib_path.resolve()) + if os.path.exists(torch_lib_path): + nvrtc = filter(lambda lib_file: "nvrtc-builtins" in lib_file, os.listdir(torch_lib_path)) + nvrtc = list(nvrtc) + return torch_lib_path if len(nvrtc) > 0 else None + +def install_cupy(): + cuda_home = get_cuda_home_path() + try: + if cuda_home is not None: + os.environ["CUDA_HOME"] = cuda_home + os.environ["CUDA_PATH"] = cuda_home + import cupy + print("CuPy is already installed.") + except: + print("Uninstall cupy if existed...") + os.system(f'"{sys.executable}" {s_param} -m pip uninstall -y cupy-wheel cupy-cuda102 cupy-cuda110 cupy-cuda111 cupy-cuda11x cupy-cuda12x') + print("Installing cupy...") + cuda_ver = get_cuda_ver_from_dir(cuda_home) + cupy_package = f"cupy-cuda{cuda_ver}" if cuda_ver is not None else "cupy-wheel" + os.system(f'"{sys.executable}" {s_param} -m pip install {cupy_package}') + +with open(Path(__file__).parent / "requirements-no-cupy.txt", 'r') as f: + for package in f.readlines(): + package = package.strip() + print(f"Installing {package}...") + os.system(f'"{sys.executable}" {s_param} -m pip install {package}') + +print("Checking cupy...") +install_cupy() \ No newline at end of file diff --git a/comfyui-frame-interpolation/other_nodes.py b/comfyui-frame-interpolation/other_nodes.py new file mode 100644 index 0000000000000000000000000000000000000000..75b76fe109424a389eb4802dc4aa8c59c53329ec --- /dev/null +++ b/comfyui-frame-interpolation/other_nodes.py @@ -0,0 +1,88 @@ +import latent_preview +import comfy +import einops +import torch + +def common_ksampler(model, seed, steps, cfg, sampler_name, scheduler, positive, negative, latent, denoise=1.0, disable_noise=False, start_step=None, last_step=None, force_full_denoise=False): + device = comfy.model_management.get_torch_device() + latent_image = latent["samples"] + + if disable_noise: + noise = torch.zeros(latent_image.size(), dtype=latent_image.dtype, layout=latent_image.layout, device="cpu") + else: + batch_inds = latent["batch_index"] if "batch_index" in latent else None + noise = comfy.sample.prepare_noise(latent_image, seed, batch_inds) + + noise_mask = None + if "noise_mask" in latent: + noise_mask = latent["noise_mask"] + + preview_format = "JPEG" + if preview_format not in ["JPEG", "PNG"]: + preview_format = "JPEG" + + previewer = latent_preview.get_previewer(device, model.model.latent_format) + + pbar = comfy.utils.ProgressBar(steps) + def callback(step, x0, x, total_steps): + preview_bytes = None + if previewer: + preview_bytes = previewer.decode_latent_to_preview_image(preview_format, x0) + pbar.update_absolute(step + 1, total_steps, preview_bytes) + + samples = comfy.sample.sample(model, noise, steps, cfg, sampler_name, scheduler, positive, negative, latent_image, + denoise=denoise, disable_noise=disable_noise, start_step=start_step, last_step=last_step, + force_full_denoise=force_full_denoise, noise_mask=noise_mask, callback=callback, seed=seed) + out = latent.copy() + out["samples"] = samples + return (out, ) + +class Gradually_More_Denoise_KSampler: + @classmethod + def INPUT_TYPES(s): + return {"required": + {"model": ("MODEL",), + "positive": ("CONDITIONING", ), + "negative": ("CONDITIONING", ), + "latent_image": ("LATENT", ), + + "seed": ("INT", {"default": 0, "min": 0, "max": 0xffffffffffffffff}), + "steps": ("INT", {"default": 20, "min": 1, "max": 10000}), + "cfg": ("FLOAT", {"default": 8.0, "min": 0.0, "max": 100.0}), + "sampler_name": (comfy.samplers.KSampler.SAMPLERS, ), + "scheduler": (comfy.samplers.KSampler.SCHEDULERS, ), + + "start_denoise": ("FLOAT", {"default": 0.0, "min": 0.0, "max": 1.0, "step": 0.01}), + "denoise_increment": ("FLOAT", {"default": 0.1, "min": 0.0, "max": 1.0, "step": 0.1}), + "denoise_increment_steps": ("INT", {"default": 20, "min": 1, "max": 10000}) + }, + "optional": { "optional_vae": ("VAE",) } + } + + RETURN_TYPES = ("MODEL", "CONDITIONING", "CONDITIONING", "LATENT", "VAE", ) + RETURN_NAMES = ("MODEL", "CONDITIONING+", "CONDITIONING-", "LATENT", "VAE", ) + OUTPUT_NODE = True + FUNCTION = "sample" + CATEGORY = "ComfyUI-Frame-Interpolation/others" + + def sample(self, model, positive, negative, latent_image, optional_vae, + seed, steps, cfg, sampler_name, scheduler,start_denoise, denoise_increment, denoise_increment_steps): + if start_denoise + denoise_increment * denoise_increment_steps > 1.0: + raise Exception(f"Max denoise strength can't over 1.0 (start_denoise={start_denoise}, denoise_increment={denoise_increment}, denoise_increment_steps={denoise_increment_steps}") + + copied_latent = latent_image.copy() + out_samples = [] + + for latent_sample in copied_latent["samples"]: + latent = {"samples": einops.rearrange(latent_sample, "c h w -> 1 c h w")} + #Latent's shape is NCHW + gradually_denoising_samples = [ + common_ksampler( + model, seed, steps, cfg, sampler_name, scheduler, positive, negative, latent, denoise=start_denoise + denoise_increment * i + )[0]["samples"] + for i in range(denoise_increment_steps) + ] + out_samples.extend(gradually_denoising_samples) + + copied_latent["samples"] = torch.cat(out_samples, dim=0) + return (model, positive, negative, copied_latent, optional_vae) \ No newline at end of file diff --git a/comfyui-frame-interpolation/pyproject.toml b/comfyui-frame-interpolation/pyproject.toml new file mode 100644 index 0000000000000000000000000000000000000000..9878e796c78d0231e7ecb21c7c361a6038bd067f --- /dev/null +++ b/comfyui-frame-interpolation/pyproject.toml @@ -0,0 +1,13 @@ +[project] +name = "comfyui-frame-interpolation" +description = "A custom node suite for Video Frame Interpolation in ComfyUI" +version = "1.0.7" +license = { file = "LICENSE" } + +[project.urls] +Repository = "https://github.com/Fannovel16/ComfyUI-Frame-Interpolation" + +[tool.comfy] +PublisherId = "fannovel16" +DisplayName = "ComfyUI-Frame-Interpolation" +Icon = "" diff --git a/comfyui-frame-interpolation/requirements-no-cupy.txt b/comfyui-frame-interpolation/requirements-no-cupy.txt new file mode 100644 index 0000000000000000000000000000000000000000..c490ca515d47b6623861b051fd822d24bc2ecd7e --- /dev/null +++ b/comfyui-frame-interpolation/requirements-no-cupy.txt @@ -0,0 +1,9 @@ +torch +numpy +einops +opencv-contrib-python +kornia +scipy +Pillow +torchvision +tqdm \ No newline at end of file diff --git a/comfyui-frame-interpolation/requirements-with-cupy.txt b/comfyui-frame-interpolation/requirements-with-cupy.txt new file mode 100644 index 0000000000000000000000000000000000000000..bdfeb47253006b2897a2dd3ff1e7c91ccb41e1b2 --- /dev/null +++ b/comfyui-frame-interpolation/requirements-with-cupy.txt @@ -0,0 +1,10 @@ +torch +numpy +einops +opencv-contrib-python +kornia +scipy +Pillow +torchvision +tqdm +cupy-wheel \ No newline at end of file diff --git a/comfyui-frame-interpolation/test.py b/comfyui-frame-interpolation/test.py new file mode 100644 index 0000000000000000000000000000000000000000..3c06ae20dc974344ed091dce2e410666a9fdd56f --- /dev/null +++ b/comfyui-frame-interpolation/test.py @@ -0,0 +1,38 @@ +import os +import sys +sys.path.insert(0, os.path.abspath(os.path.dirname(__file__))) + +import shutil +import torch +import torch.nn.functional as F +import PIL +import torchvision.transforms.functional as transform +from vfi_utils import load_file_from_github_release +from vfi_models import gmfss_fortuna, ifrnet, ifunet, m2m, rife, sepconv, amt, xvfi, cain, flavr +import numpy as np + +frame_0 = torch.from_numpy(np.array(PIL.Image.open("demo_frames/anime0.png").convert("RGB")).astype(np.float32) / 255.0).unsqueeze(0) +frame_1 = torch.from_numpy(np.array(PIL.Image.open("demo_frames/anime1.png").convert("RGB")).astype(np.float32) / 255.0).unsqueeze(0) + + +if os.path.exists("test_result"): + shutil.rmtree("test_result") + +vfi_node_class = gmfss_fortuna.GMFSS_Fortuna_VFI() +for i, ckpt_name in enumerate(vfi_node_class.INPUT_TYPES()["required"]["ckpt_name"][0][:2]): + result = vfi_node_class.vfi(ckpt_name, torch.cat([ + frame_0, + frame_1, + frame_0, + frame_1 + ], dim=0).cuda(), multipler=4, batch_size=2)[0] + print(result.shape) + print(f"Generated {result.size(0)} frames") + frames = [PIL.Image.fromarray(np.clip((frame * 255).numpy(), 0, 255).astype(np.uint8)) for frame in result] + print(result[0].shape) + os.makedirs(f"test_result/video{i}", exist_ok=True) + for j, frame in enumerate(frames): + frame.save(f"test_result/video{i}/{j}.jpg") + frames[0].save(f"test_result/video{i}.gif", save_all=True, append_images=frames[1:], optimize=True, duration=1/3, loop=0) + os.startfile(f"test_result{os.path.sep}video{i}.gif") +#torchvision.io.video.write_video("test.mp4", einops.rearrange(result, "n c h w -> n h w c").cpu(), fps=1) \ No newline at end of file diff --git a/comfyui-frame-interpolation/vfi_models/amt/__init__.py b/comfyui-frame-interpolation/vfi_models/amt/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..20740c2a4d9d669a625db6f729ef11b18c449e9a --- /dev/null +++ b/comfyui-frame-interpolation/vfi_models/amt/__init__.py @@ -0,0 +1,87 @@ +import pathlib +import torch +from torch.utils.data import DataLoader +import pathlib +from vfi_utils import load_file_from_direct_url, preprocess_frames, postprocess_frames, generic_frame_loop, InterpolationStateList +import typing +from comfy.model_management import get_torch_device +from .amt_arch import AMT_S, AMT_L, AMT_G, InputPadder + +#https://github.com/MCG-NKU/AMT/tree/main/cfgs +CKPT_CONFIGS = { + "amt-s.pth": { + "network": AMT_S, + "params": { "corr_radius": 3, "corr_lvls": 4, "num_flows": 3 } + }, + "amt-l.pth": { + "network": AMT_L, + "params": { "corr_radius": 3, "corr_lvls": 4, "num_flows": 5 } + }, + "amt-g.pth": { + "network": AMT_G, + "params": { "corr_radius": 3, "corr_lvls": 4, "num_flows": 5 } + }, + "gopro_amt-s.pth": { + "network": AMT_S, + "params": { "corr_radius": 3, "corr_lvls": 4, "num_flows": 3 } + } +} + + +MODEL_TYPE = pathlib.Path(__file__).parent.name + +class AMT_VFI: + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "ckpt_name": (list(CKPT_CONFIGS.keys()), ), + "frames": ("IMAGE", ), + "clear_cache_after_n_frames": ("INT", {"default": 1, "min": 1, "max": 100}), + "multiplier": ("INT", {"default": 2, "min": 2, "max": 1000}) + }, + "optional": { + "optional_interpolation_states": ("INTERPOLATION_STATES", ) + } + } + + RETURN_TYPES = ("IMAGE", ) + FUNCTION = "vfi" + CATEGORY = "ComfyUI-Frame-Interpolation/VFI" + + def vfi( + self, + ckpt_name: typing.AnyStr, + frames: torch.Tensor, + clear_cache_after_n_frames: typing.SupportsInt = 1, + multiplier: typing.SupportsInt = 2, + optional_interpolation_states: InterpolationStateList = None, + **kwargs + ): + model_path = load_file_from_direct_url(MODEL_TYPE, f"https://huggingface.co/lalala125/AMT/resolve/main/{ckpt_name}") + ckpt_config = CKPT_CONFIGS[ckpt_name] + + interpolation_model = ckpt_config["network"](**ckpt_config["params"]) + interpolation_model.load_state_dict(torch.load(model_path)["state_dict"]) + interpolation_model.eval().to(get_torch_device()) + + frames = preprocess_frames(frames) + padder = InputPadder(frames.shape, 16) + frames = padder.pad(frames) + + def return_middle_frame(frame_0, frame_1, timestep, model): + return model( + frame_0, + frame_1, + embt=torch.FloatTensor([timestep] * frame_0.shape[0]).view(frame_0.shape[0], 1, 1, 1).to(get_torch_device()), + scale_factor=1.0, + eval=True + )["imgt_pred"] + + args = [interpolation_model] + out = generic_frame_loop(type(self).__name__, frames, clear_cache_after_n_frames, multiplier, return_middle_frame, *args, + interpolation_states=optional_interpolation_states, dtype=torch.float32) + out = padder.unpad(out) + out = postprocess_frames(out) + return (out,) + diff --git a/comfyui-frame-interpolation/vfi_models/amt/__pycache__/__init__.cpython-310.pyc b/comfyui-frame-interpolation/vfi_models/amt/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6d4830bc272dd23dac17e4d6236bd6fd7e006555 Binary files /dev/null and b/comfyui-frame-interpolation/vfi_models/amt/__pycache__/__init__.cpython-310.pyc differ diff --git a/comfyui-frame-interpolation/vfi_models/amt/__pycache__/amt_arch.cpython-310.pyc b/comfyui-frame-interpolation/vfi_models/amt/__pycache__/amt_arch.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..dfefba8c941b4d96bf71cca3a059da5cf741d75f Binary files /dev/null and b/comfyui-frame-interpolation/vfi_models/amt/__pycache__/amt_arch.cpython-310.pyc differ diff --git a/comfyui-frame-interpolation/vfi_models/amt/amt_arch.py b/comfyui-frame-interpolation/vfi_models/amt/amt_arch.py new file mode 100644 index 0000000000000000000000000000000000000000..448c4d56193a833d3a1c89ea3e8475258f11958a --- /dev/null +++ b/comfyui-frame-interpolation/vfi_models/amt/amt_arch.py @@ -0,0 +1,1590 @@ +""" +https://github.com/MCG-NKU/AMT/blob/main/utils/dist_utils.py +https://github.com/MCG-NKU/AMT/blob/main/utils/flow_utils.py +https://github.com/MCG-NKU/AMT/blob/main/utils/utils.py +https://github.com/MCG-NKU/AMT/blob/main/networks/blocks/feat_enc.py +https://github.com/MCG-NKU/AMT/blob/main/networks/blocks/ifrnet.py +https://github.com/MCG-NKU/AMT/blob/main/networks/blocks/multi_flow.py +https://github.com/MCG-NKU/AMT/blob/main/networks/blocks/raft.py +https://github.com/MCG-NKU/AMT/blob/main/networks/AMT-S.py +https://github.com/MCG-NKU/AMT/blob/main/networks/AMT-L.py +https://github.com/MCG-NKU/AMT/blob/main/networks/AMT-G.py +""" +#Removed imageio by removing readImage, writeImage +#The model will receive image tensors from other ComfyUI's nodes so they are unneccessary + +import torch +import torch.nn as nn +import numpy as np +from PIL import ImageFile +import torch.nn.functional as F +ImageFile.LOAD_TRUNCATED_IMAGES = True +import re +import sys +import random + +def warp(img, flow): + B, _, H, W = flow.shape + xx = torch.linspace(-1.0, 1.0, W).view(1, 1, 1, W).expand(B, -1, H, -1) + yy = torch.linspace(-1.0, 1.0, H).view(1, 1, H, 1).expand(B, -1, -1, W) + grid = torch.cat([xx, yy], 1).to(img) + flow_ = torch.cat([flow[:, 0:1, :, :] / ((W - 1.0) / 2.0), flow[:, 1:2, :, :] / ((H - 1.0) / 2.0)], 1) + grid_ = (grid + flow_).permute(0, 2, 3, 1) + output = F.grid_sample(input=img, grid=grid_, mode='bilinear', padding_mode='border', align_corners=True) + return output + + +def make_colorwheel(): + """ + Generates a color wheel for optical flow visualization as presented in: + Baker et al. "A Database and Evaluation Methodology for Optical Flow" (ICCV, 2007) + URL: http://vision.middlebury.edu/flow/flowEval-iccv07.pdf + Code follows the original C++ source code of Daniel Scharstein. + Code follows the the Matlab source code of Deqing Sun. + Returns: + np.ndarray: Color wheel + """ + + RY = 15 + YG = 6 + GC = 4 + CB = 11 + BM = 13 + MR = 6 + + ncols = RY + YG + GC + CB + BM + MR + colorwheel = np.zeros((ncols, 3)) + col = 0 + + # RY + colorwheel[0:RY, 0] = 255 + colorwheel[0:RY, 1] = np.floor(255*np.arange(0,RY)/RY) + col = col+RY + # YG + colorwheel[col:col+YG, 0] = 255 - np.floor(255*np.arange(0,YG)/YG) + colorwheel[col:col+YG, 1] = 255 + col = col+YG + # GC + colorwheel[col:col+GC, 1] = 255 + colorwheel[col:col+GC, 2] = np.floor(255*np.arange(0,GC)/GC) + col = col+GC + # CB + colorwheel[col:col+CB, 1] = 255 - np.floor(255*np.arange(CB)/CB) + colorwheel[col:col+CB, 2] = 255 + col = col+CB + # BM + colorwheel[col:col+BM, 2] = 255 + colorwheel[col:col+BM, 0] = np.floor(255*np.arange(0,BM)/BM) + col = col+BM + # MR + colorwheel[col:col+MR, 2] = 255 - np.floor(255*np.arange(MR)/MR) + colorwheel[col:col+MR, 0] = 255 + return colorwheel + +def flow_uv_to_colors(u, v, convert_to_bgr=False): + """ + Applies the flow color wheel to (possibly clipped) flow components u and v. + According to the C++ source code of Daniel Scharstein + According to the Matlab source code of Deqing Sun + Args: + u (np.ndarray): Input horizontal flow of shape [H,W] + v (np.ndarray): Input vertical flow of shape [H,W] + convert_to_bgr (bool, optional): Convert output image to BGR. Defaults to False. + Returns: + np.ndarray: Flow visualization image of shape [H,W,3] + """ + flow_image = np.zeros((u.shape[0], u.shape[1], 3), np.uint8) + colorwheel = make_colorwheel() # shape [55x3] + ncols = colorwheel.shape[0] + rad = np.sqrt(np.square(u) + np.square(v)) + a = np.arctan2(-v, -u)/np.pi + fk = (a+1) / 2*(ncols-1) + k0 = np.floor(fk).astype(np.int32) + k1 = k0 + 1 + k1[k1 == ncols] = 0 + f = fk - k0 + for i in range(colorwheel.shape[1]): + tmp = colorwheel[:,i] + col0 = tmp[k0] / 255.0 + col1 = tmp[k1] / 255.0 + col = (1-f)*col0 + f*col1 + idx = (rad <= 1) + col[idx] = 1 - rad[idx] * (1-col[idx]) + col[~idx] = col[~idx] * 0.75 # out of range + # Note the 2-i => BGR instead of RGB + ch_idx = 2-i if convert_to_bgr else i + flow_image[:,:,ch_idx] = np.floor(255 * col) + return flow_image + +def flow_to_image(flow_uv, clip_flow=None, convert_to_bgr=False): + """ + Expects a two dimensional flow image of shape. + Args: + flow_uv (np.ndarray): Flow UV image of shape [H,W,2] + clip_flow (float, optional): Clip maximum of flow values. Defaults to None. + convert_to_bgr (bool, optional): Convert output image to BGR. Defaults to False. + Returns: + np.ndarray: Flow visualization image of shape [H,W,3] + """ + assert flow_uv.ndim == 3, 'input flow must have three dimensions' + assert flow_uv.shape[2] == 2, 'input flow must have shape [H,W,2]' + if clip_flow is not None: + flow_uv = np.clip(flow_uv, 0, clip_flow) + u = flow_uv[:,:,0] + v = flow_uv[:,:,1] + rad = np.sqrt(np.square(u) + np.square(v)) + rad_max = np.max(rad) + epsilon = 1e-5 + u = u / (rad_max + epsilon) + v = v / (rad_max + epsilon) + return flow_uv_to_colors(u, v, convert_to_bgr) + + + + + + + + + + + +class AverageMeter(): + def __init__(self): + self.reset() + + def reset(self): + self.val = 0. + self.avg = 0. + self.sum = 0. + self.count = 0 + + def update(self, val, n=1): + self.val = val + self.sum += val * n + self.count += n + self.avg = self.sum / self.count + + +class AverageMeterGroups: + def __init__(self) -> None: + self.meter_dict = dict() + + def update(self, dict, n=1): + for name, val in dict.items(): + if self.meter_dict.get(name) is None: + self.meter_dict[name] = AverageMeter() + self.meter_dict[name].update(val, n) + + def reset(self, name=None): + if name is None: + for v in self.meter_dict.values(): + v.reset() + else: + meter = self.meter_dict.get(name) + if meter is not None: + meter.reset() + + def avg(self, name): + meter = self.meter_dict.get(name) + if meter is not None: + return meter.avg + + +class InputPadder: + """ Pads images such that dimensions are divisible by divisor """ + def __init__(self, dims, divisor=16): + self.ht, self.wd = dims[-2:] + pad_ht = (((self.ht // divisor) + 1) * divisor - self.ht) % divisor + pad_wd = (((self.wd // divisor) + 1) * divisor - self.wd) % divisor + self._pad = [pad_wd//2, pad_wd - pad_wd//2, pad_ht//2, pad_ht - pad_ht//2] + + def pad(self, input_tensor): + return F.pad(input_tensor, self._pad, mode='replicate') + + def unpad(self, input_tensor): + return self._unpad(input_tensor) + + def _unpad(self, x): + ht, wd = x.shape[-2:] + c = [self._pad[2], ht-self._pad[3], self._pad[0], wd-self._pad[1]] + return x[..., c[0]:c[1], c[2]:c[3]] + + +def img2tensor(img): + if img.shape[-1] > 3: + img = img[:,:,:3] + return torch.tensor(img).permute(2, 0, 1).unsqueeze(0) / 255.0 + + +def tensor2img(img_t): + return (img_t * 255.).detach( + ).squeeze(0).permute(1, 2, 0).cpu().numpy( + ).clip(0, 255).astype(np.uint8) + +def seed_all(seed): + random.seed(seed) + np.random.seed(seed) + torch.manual_seed(seed) + torch.cuda.manual_seed_all(seed) + + +def readPFM(file): + file = open(file, 'rb') + + color = None + width = None + height = None + scale = None + endian = None + + header = file.readline().rstrip() + if header.decode("ascii") == 'PF': + color = True + elif header.decode("ascii") == 'Pf': + color = False + else: + raise Exception('Not a PFM file.') + + dim_match = re.match(r'^(\d+)\s(\d+)\s$', file.readline().decode("ascii")) + if dim_match: + width, height = list(map(int, dim_match.groups())) + else: + raise Exception('Malformed PFM header.') + + scale = float(file.readline().decode("ascii").rstrip()) + if scale < 0: + endian = '<' + scale = -scale + else: + endian = '>' + + data = np.fromfile(file, endian + 'f') + shape = (height, width, 3) if color else (height, width) + + data = np.reshape(data, shape) + data = np.flipud(data) + return data, scale + + +def writePFM(file, image, scale=1): + file = open(file, 'wb') + + color = None + + if image.dtype.name != 'float32': + raise Exception('Image dtype must be float32.') + + image = np.flipud(image) + + if len(image.shape) == 3 and image.shape[2] == 3: + color = True + elif len(image.shape) == 2 or len(image.shape) == 3 and image.shape[2] == 1: + color = False + else: + raise Exception('Image must have H x W x 3, H x W x 1 or H x W dimensions.') + + file.write('PF\n' if color else 'Pf\n'.encode()) + file.write('%d %d\n'.encode() % (image.shape[1], image.shape[0])) + + endian = image.dtype.byteorder + + if endian == '<' or endian == '=' and sys.byteorder == 'little': + scale = -scale + + file.write('%f\n'.encode() % scale) + + image.tofile(file) + + +def readFlow(name): + if name.endswith('.pfm') or name.endswith('.PFM'): + return readPFM(name)[0][:,:,0:2] + + f = open(name, 'rb') + + header = f.read(4) + if header.decode("utf-8") != 'PIEH': + raise Exception('Flow file header does not contain PIEH') + + width = np.fromfile(f, np.int32, 1).squeeze() + height = np.fromfile(f, np.int32, 1).squeeze() + + flow = np.fromfile(f, np.float32, width * height * 2).reshape((height, width, 2)) + + return flow.astype(np.float32) + +def writeFlow(name, flow): + f = open(name, 'wb') + f.write('PIEH'.encode('utf-8')) + np.array([flow.shape[1], flow.shape[0]], dtype=np.int32).tofile(f) + flow = flow.astype(np.float32) + flow.tofile(f) + + +def readFloat(name): + f = open(name, 'rb') + + if(f.readline().decode("utf-8")) != 'float\n': + raise Exception('float file %s did not contain keyword' % name) + + dim = int(f.readline()) + + dims = [] + count = 1 + for i in range(0, dim): + d = int(f.readline()) + dims.append(d) + count *= d + + dims = list(reversed(dims)) + + data = np.fromfile(f, np.float32, count).reshape(dims) + if dim > 2: + data = np.transpose(data, (2, 1, 0)) + data = np.transpose(data, (1, 0, 2)) + + return data + + +def writeFloat(name, data): + f = open(name, 'wb') + + dim=len(data.shape) + if dim>3: + raise Exception('bad float file dimension: %d' % dim) + + f.write(('float\n').encode('ascii')) + f.write(('%d\n' % dim).encode('ascii')) + + if dim == 1: + f.write(('%d\n' % data.shape[0]).encode('ascii')) + else: + f.write(('%d\n' % data.shape[1]).encode('ascii')) + f.write(('%d\n' % data.shape[0]).encode('ascii')) + for i in range(2, dim): + f.write(('%d\n' % data.shape[i]).encode('ascii')) + + data = data.astype(np.float32) + if dim==2: + data.tofile(f) + + else: + np.transpose(data, (2, 0, 1)).tofile(f) + + +def check_dim_and_resize(tensor_list): + shape_list = [] + for t in tensor_list: + shape_list.append(t.shape[2:]) + + if len(set(shape_list)) > 1: + desired_shape = shape_list[0] + print(f'Inconsistent size of input video frames. All frames will be resized to {desired_shape}') + + resize_tensor_list = [] + for t in tensor_list: + resize_tensor_list.append(torch.nn.functional.interpolate(t, size=tuple(desired_shape), mode='bilinear')) + + tensor_list = resize_tensor_list + + return tensor_list + + + + + + + + + + + +class BottleneckBlock(nn.Module): + def __init__(self, in_planes, planes, norm_fn='group', stride=1): + super(BottleneckBlock, self).__init__() + + self.conv1 = nn.Conv2d(in_planes, planes//4, kernel_size=1, padding=0) + self.conv2 = nn.Conv2d(planes//4, planes//4, kernel_size=3, padding=1, stride=stride) + self.conv3 = nn.Conv2d(planes//4, planes, kernel_size=1, padding=0) + self.relu = nn.ReLU(inplace=True) + + num_groups = planes // 8 + + if norm_fn == 'group': + self.norm1 = nn.GroupNorm(num_groups=num_groups, num_channels=planes//4) + self.norm2 = nn.GroupNorm(num_groups=num_groups, num_channels=planes//4) + self.norm3 = nn.GroupNorm(num_groups=num_groups, num_channels=planes) + if not stride == 1: + self.norm4 = nn.GroupNorm(num_groups=num_groups, num_channels=planes) + + elif norm_fn == 'batch': + self.norm1 = nn.BatchNorm2d(planes//4) + self.norm2 = nn.BatchNorm2d(planes//4) + self.norm3 = nn.BatchNorm2d(planes) + if not stride == 1: + self.norm4 = nn.BatchNorm2d(planes) + + elif norm_fn == 'instance': + self.norm1 = nn.InstanceNorm2d(planes//4) + self.norm2 = nn.InstanceNorm2d(planes//4) + self.norm3 = nn.InstanceNorm2d(planes) + if not stride == 1: + self.norm4 = nn.InstanceNorm2d(planes) + + elif norm_fn == 'none': + self.norm1 = nn.Sequential() + self.norm2 = nn.Sequential() + self.norm3 = nn.Sequential() + if not stride == 1: + self.norm4 = nn.Sequential() + + if stride == 1: + self.downsample = None + + else: + self.downsample = nn.Sequential( + nn.Conv2d(in_planes, planes, kernel_size=1, stride=stride), self.norm4) + + + def forward(self, x): + y = x + y = self.relu(self.norm1(self.conv1(y))) + y = self.relu(self.norm2(self.conv2(y))) + y = self.relu(self.norm3(self.conv3(y))) + + if self.downsample is not None: + x = self.downsample(x) + + return self.relu(x+y) + + +class ResidualBlock(nn.Module): + def __init__(self, in_planes, planes, norm_fn='group', stride=1): + super(ResidualBlock, self).__init__() + + self.conv1 = nn.Conv2d(in_planes, planes, kernel_size=3, padding=1, stride=stride) + self.conv2 = nn.Conv2d(planes, planes, kernel_size=3, padding=1) + self.relu = nn.ReLU(inplace=True) + + num_groups = planes // 8 + + if norm_fn == 'group': + self.norm1 = nn.GroupNorm(num_groups=num_groups, num_channels=planes) + self.norm2 = nn.GroupNorm(num_groups=num_groups, num_channels=planes) + if not stride == 1: + self.norm3 = nn.GroupNorm(num_groups=num_groups, num_channels=planes) + + elif norm_fn == 'batch': + self.norm1 = nn.BatchNorm2d(planes) + self.norm2 = nn.BatchNorm2d(planes) + if not stride == 1: + self.norm3 = nn.BatchNorm2d(planes) + + elif norm_fn == 'instance': + self.norm1 = nn.InstanceNorm2d(planes) + self.norm2 = nn.InstanceNorm2d(planes) + if not stride == 1: + self.norm3 = nn.InstanceNorm2d(planes) + + elif norm_fn == 'none': + self.norm1 = nn.Sequential() + self.norm2 = nn.Sequential() + if not stride == 1: + self.norm3 = nn.Sequential() + + if stride == 1: + self.downsample = None + + else: + self.downsample = nn.Sequential( + nn.Conv2d(in_planes, planes, kernel_size=1, stride=stride), self.norm3) + + + def forward(self, x): + y = x + y = self.relu(self.norm1(self.conv1(y))) + y = self.relu(self.norm2(self.conv2(y))) + + if self.downsample is not None: + x = self.downsample(x) + + return self.relu(x+y) + + +class SmallEncoder(nn.Module): + def __init__(self, output_dim=128, norm_fn='batch', dropout=0.0): + super(SmallEncoder, self).__init__() + self.norm_fn = norm_fn + + if self.norm_fn == 'group': + self.norm1 = nn.GroupNorm(num_groups=8, num_channels=32) + + elif self.norm_fn == 'batch': + self.norm1 = nn.BatchNorm2d(32) + + elif self.norm_fn == 'instance': + self.norm1 = nn.InstanceNorm2d(32) + + elif self.norm_fn == 'none': + self.norm1 = nn.Sequential() + + self.conv1 = nn.Conv2d(3, 32, kernel_size=7, stride=2, padding=3) + self.relu1 = nn.ReLU(inplace=True) + + self.in_planes = 32 + self.layer1 = self._make_layer(32, stride=1) + self.layer2 = self._make_layer(64, stride=2) + self.layer3 = self._make_layer(96, stride=2) + + self.dropout = None + if dropout > 0: + self.dropout = nn.Dropout2d(p=dropout) + + self.conv2 = nn.Conv2d(96, output_dim, kernel_size=1) + + for m in self.modules(): + if isinstance(m, nn.Conv2d): + nn.init.kaiming_normal_(m.weight, mode='fan_out', nonlinearity='relu') + elif isinstance(m, (nn.BatchNorm2d, nn.InstanceNorm2d, nn.GroupNorm)): + if m.weight is not None: + nn.init.constant_(m.weight, 1) + if m.bias is not None: + nn.init.constant_(m.bias, 0) + + def _make_layer(self, dim, stride=1): + layer1 = BottleneckBlock(self.in_planes, dim, self.norm_fn, stride=stride) + layer2 = BottleneckBlock(dim, dim, self.norm_fn, stride=1) + layers = (layer1, layer2) + + self.in_planes = dim + return nn.Sequential(*layers) + + + def forward(self, x): + + # if input is list, combine batch dimension + is_list = isinstance(x, tuple) or isinstance(x, list) + if is_list: + batch_dim = x[0].shape[0] + x = torch.cat(x, dim=0) + + x = self.conv1(x) + x = self.norm1(x) + x = self.relu1(x) + + x = self.layer1(x) + x = self.layer2(x) + x = self.layer3(x) + x = self.conv2(x) + + if self.training and self.dropout is not None: + x = self.dropout(x) + + if is_list: + x = torch.split(x, [batch_dim, batch_dim], dim=0) + + return x + +class BasicEncoder(nn.Module): + def __init__(self, output_dim=128, norm_fn='batch', dropout=0.0): + super(BasicEncoder, self).__init__() + self.norm_fn = norm_fn + + if self.norm_fn == 'group': + self.norm1 = nn.GroupNorm(num_groups=8, num_channels=64) + + elif self.norm_fn == 'batch': + self.norm1 = nn.BatchNorm2d(64) + + elif self.norm_fn == 'instance': + self.norm1 = nn.InstanceNorm2d(64) + + elif self.norm_fn == 'none': + self.norm1 = nn.Sequential() + + self.conv1 = nn.Conv2d(3, 64, kernel_size=7, stride=2, padding=3) + self.relu1 = nn.ReLU(inplace=True) + + self.in_planes = 64 + self.layer1 = self._make_layer(64, stride=1) + self.layer2 = self._make_layer(72, stride=2) + self.layer3 = self._make_layer(128, stride=2) + + # output convolution + self.conv2 = nn.Conv2d(128, output_dim, kernel_size=1) + + self.dropout = None + if dropout > 0: + self.dropout = nn.Dropout2d(p=dropout) + + for m in self.modules(): + if isinstance(m, nn.Conv2d): + nn.init.kaiming_normal_(m.weight, mode='fan_out', nonlinearity='relu') + elif isinstance(m, (nn.BatchNorm2d, nn.InstanceNorm2d, nn.GroupNorm)): + if m.weight is not None: + nn.init.constant_(m.weight, 1) + if m.bias is not None: + nn.init.constant_(m.bias, 0) + + def _make_layer(self, dim, stride=1): + layer1 = ResidualBlock(self.in_planes, dim, self.norm_fn, stride=stride) + layer2 = ResidualBlock(dim, dim, self.norm_fn, stride=1) + layers = (layer1, layer2) + + self.in_planes = dim + return nn.Sequential(*layers) + + + def forward(self, x): + + # if input is list, combine batch dimension + is_list = isinstance(x, tuple) or isinstance(x, list) + if is_list: + batch_dim = x[0].shape[0] + x = torch.cat(x, dim=0) + + x = self.conv1(x) + x = self.norm1(x) + x = self.relu1(x) + + x = self.layer1(x) + x = self.layer2(x) + x = self.layer3(x) + + x = self.conv2(x) + + if self.training and self.dropout is not None: + x = self.dropout(x) + + if is_list: + x = torch.split(x, [batch_dim, batch_dim], dim=0) + + return x + +class LargeEncoder(nn.Module): + def __init__(self, output_dim=128, norm_fn='batch', dropout=0.0): + super(LargeEncoder, self).__init__() + self.norm_fn = norm_fn + + if self.norm_fn == 'group': + self.norm1 = nn.GroupNorm(num_groups=8, num_channels=64) + + elif self.norm_fn == 'batch': + self.norm1 = nn.BatchNorm2d(64) + + elif self.norm_fn == 'instance': + self.norm1 = nn.InstanceNorm2d(64) + + elif self.norm_fn == 'none': + self.norm1 = nn.Sequential() + + self.conv1 = nn.Conv2d(3, 64, kernel_size=7, stride=2, padding=3) + self.relu1 = nn.ReLU(inplace=True) + + self.in_planes = 64 + self.layer1 = self._make_layer(64, stride=1) + self.layer2 = self._make_layer(112, stride=2) + self.layer3 = self._make_layer(160, stride=2) + self.layer3_2 = self._make_layer(160, stride=1) + + # output convolution + self.conv2 = nn.Conv2d(self.in_planes, output_dim, kernel_size=1) + + self.dropout = None + if dropout > 0: + self.dropout = nn.Dropout2d(p=dropout) + + for m in self.modules(): + if isinstance(m, nn.Conv2d): + nn.init.kaiming_normal_(m.weight, mode='fan_out', nonlinearity='relu') + elif isinstance(m, (nn.BatchNorm2d, nn.InstanceNorm2d, nn.GroupNorm)): + if m.weight is not None: + nn.init.constant_(m.weight, 1) + if m.bias is not None: + nn.init.constant_(m.bias, 0) + + def _make_layer(self, dim, stride=1): + layer1 = ResidualBlock(self.in_planes, dim, self.norm_fn, stride=stride) + layer2 = ResidualBlock(dim, dim, self.norm_fn, stride=1) + layers = (layer1, layer2) + + self.in_planes = dim + return nn.Sequential(*layers) + + + def forward(self, x): + + # if input is list, combine batch dimension + is_list = isinstance(x, tuple) or isinstance(x, list) + if is_list: + batch_dim = x[0].shape[0] + x = torch.cat(x, dim=0) + + x = self.conv1(x) + x = self.norm1(x) + x = self.relu1(x) + + x = self.layer1(x) + x = self.layer2(x) + x = self.layer3(x) + x = self.layer3_2(x) + + x = self.conv2(x) + + if self.training and self.dropout is not None: + x = self.dropout(x) + + if is_list: + x = torch.split(x, [batch_dim, batch_dim], dim=0) + + return x + + + + + + + + + + + +def resize(x, scale_factor): + return F.interpolate(x, scale_factor=scale_factor, mode="bilinear", align_corners=False) + +def convrelu(in_channels, out_channels, kernel_size=3, stride=1, padding=1, dilation=1, groups=1, bias=True): + return nn.Sequential( + nn.Conv2d(in_channels, out_channels, kernel_size, stride, padding, dilation, groups, bias=bias), + nn.PReLU(out_channels) + ) + +class ResBlock(nn.Module): + def __init__(self, in_channels, side_channels, bias=True): + super(ResBlock, self).__init__() + self.side_channels = side_channels + self.conv1 = nn.Sequential( + nn.Conv2d(in_channels, in_channels, kernel_size=3, stride=1, padding=1, bias=bias), + nn.PReLU(in_channels) + ) + self.conv2 = nn.Sequential( + nn.Conv2d(side_channels, side_channels, kernel_size=3, stride=1, padding=1, bias=bias), + nn.PReLU(side_channels) + ) + self.conv3 = nn.Sequential( + nn.Conv2d(in_channels, in_channels, kernel_size=3, stride=1, padding=1, bias=bias), + nn.PReLU(in_channels) + ) + self.conv4 = nn.Sequential( + nn.Conv2d(side_channels, side_channels, kernel_size=3, stride=1, padding=1, bias=bias), + nn.PReLU(side_channels) + ) + self.conv5 = nn.Conv2d(in_channels, in_channels, kernel_size=3, stride=1, padding=1, bias=bias) + self.prelu = nn.PReLU(in_channels) + + def forward(self, x): + out = self.conv1(x) + + res_feat = out[:, :-self.side_channels, ...] + side_feat = out[:, -self.side_channels:, :, :] + side_feat = self.conv2(side_feat) + out = self.conv3(torch.cat([res_feat, side_feat], 1)) + + res_feat = out[:, :-self.side_channels, ...] + side_feat = out[:, -self.side_channels:, :, :] + side_feat = self.conv4(side_feat) + out = self.conv5(torch.cat([res_feat, side_feat], 1)) + + out = self.prelu(x + out) + return out + +class Encoder(nn.Module): + def __init__(self, channels, large=False): + super(Encoder, self).__init__() + self.channels = channels + prev_ch = 3 + for idx, ch in enumerate(channels, 1): + k = 7 if large and idx == 1 else 3 + p = 3 if k ==7 else 1 + self.register_module(f'pyramid{idx}', + nn.Sequential( + convrelu(prev_ch, ch, k, 2, p), + convrelu(ch, ch, 3, 1, 1) + )) + prev_ch = ch + + def forward(self, in_x): + fs = [] + for idx in range(len(self.channels)): + out_x = getattr(self, f'pyramid{idx+1}')(in_x) + fs.append(out_x) + in_x = out_x + return fs + +class InitDecoder(nn.Module): + def __init__(self, in_ch, out_ch, skip_ch) -> None: + super().__init__() + self.convblock = nn.Sequential( + convrelu(in_ch*2+1, in_ch*2), + ResBlock(in_ch*2, skip_ch), + nn.ConvTranspose2d(in_ch*2, out_ch+4, 4, 2, 1, bias=True) + ) + def forward(self, f0, f1, embt): + h, w = f0.shape[2:] + embt = embt.repeat(1, 1, h, w) + out = self.convblock(torch.cat([f0, f1, embt], 1)) + flow0, flow1 = torch.chunk(out[:, :4, ...], 2, 1) + ft_ = out[:, 4:, ...] + return flow0, flow1, ft_ + +class IntermediateDecoder(nn.Module): + def __init__(self, in_ch, out_ch, skip_ch) -> None: + super().__init__() + self.convblock = nn.Sequential( + convrelu(in_ch*3+4, in_ch*3), + ResBlock(in_ch*3, skip_ch), + nn.ConvTranspose2d(in_ch*3, out_ch+4, 4, 2, 1, bias=True) + ) + def forward(self, ft_, f0, f1, flow0_in, flow1_in): + f0_warp = warp(f0, flow0_in) + f1_warp = warp(f1, flow1_in) + f_in = torch.cat([ft_, f0_warp, f1_warp, flow0_in, flow1_in], 1) + out = self.convblock(f_in) + flow0, flow1 = torch.chunk(out[:, :4, ...], 2, 1) + ft_ = out[:, 4:, ...] + flow0 = flow0 + 2.0 * resize(flow0_in, scale_factor=2.0) + flow1 = flow1 + 2.0 * resize(flow1_in, scale_factor=2.0) + return flow0, flow1, ft_ + + + + + + + + + + + +def multi_flow_combine(comb_block, img0, img1, flow0, flow1, + mask=None, img_res=None, mean=None): + ''' + A parallel implementation of multiple flow field warping + comb_block: An nn.Seqential object. + img shape: [b, c, h, w] + flow shape: [b, 2*num_flows, h, w] + mask (opt): + If 'mask' is None, the function conduct a simple average. + img_res (opt): + If 'img_res' is None, the function adds zero instead. + mean (opt): + If 'mean' is None, the function adds zero instead. + ''' + b, c, h, w = flow0.shape + num_flows = c // 2 + flow0 = flow0.reshape(b, num_flows, 2, h, w).reshape(-1, 2, h, w) + flow1 = flow1.reshape(b, num_flows, 2, h, w).reshape(-1, 2, h, w) + + mask = mask.reshape(b, num_flows, 1, h, w + ).reshape(-1, 1, h, w) if mask is not None else None + img_res = img_res.reshape(b, num_flows, 3, h, w + ).reshape(-1, 3, h, w) if img_res is not None else 0 + img0 = torch.stack([img0] * num_flows, 1).reshape(-1, 3, h, w) + img1 = torch.stack([img1] * num_flows, 1).reshape(-1, 3, h, w) + mean = torch.stack([mean] * num_flows, 1).reshape(-1, 1, 1, 1 + ) if mean is not None else 0 + + img0_warp = warp(img0, flow0) + img1_warp = warp(img1, flow1) + img_warps = mask * img0_warp + (1 - mask) * img1_warp + mean + img_res + img_warps = img_warps.reshape(b, num_flows, 3, h, w) + imgt_pred = img_warps.mean(1) + comb_block(img_warps.view(b, -1, h, w)) + return imgt_pred + + +class MultiFlowDecoder(nn.Module): + def __init__(self, in_ch, skip_ch, num_flows=3): + super(MultiFlowDecoder, self).__init__() + self.num_flows = num_flows + self.convblock = nn.Sequential( + convrelu(in_ch*3+4, in_ch*3), + ResBlock(in_ch*3, skip_ch), + nn.ConvTranspose2d(in_ch*3, 8*num_flows, 4, 2, 1, bias=True) + ) + + def forward(self, ft_, f0, f1, flow0, flow1): + n = self.num_flows + f0_warp = warp(f0, flow0) + f1_warp = warp(f1, flow1) + out = self.convblock(torch.cat([ft_, f0_warp, f1_warp, flow0, flow1], 1)) + delta_flow0, delta_flow1, mask, img_res = torch.split(out, [2*n, 2*n, n, 3*n], 1) + mask = torch.sigmoid(mask) + + flow0 = delta_flow0 + 2.0 * resize(flow0, scale_factor=2.0 + ).repeat(1, self.num_flows, 1, 1) + flow1 = delta_flow1 + 2.0 * resize(flow1, scale_factor=2.0 + ).repeat(1, self.num_flows, 1, 1) + + return flow0, flow1, mask, img_res + + + + + + + + + + + +def resize(x, scale_factor): + return F.interpolate(x, scale_factor=scale_factor, mode="bilinear", align_corners=False) + + +def bilinear_sampler(img, coords, mask=False): + """ Wrapper for grid_sample, uses pixel coordinates """ + H, W = img.shape[-2:] + xgrid, ygrid = coords.split([1,1], dim=-1) + xgrid = 2*xgrid/(W-1) - 1 + ygrid = 2*ygrid/(H-1) - 1 + + grid = torch.cat([xgrid, ygrid], dim=-1) + img = F.grid_sample(img, grid, align_corners=True) + + if mask: + mask = (xgrid > -1) & (ygrid > -1) & (xgrid < 1) & (ygrid < 1) + return img, mask.float() + + return img + + +def coords_grid(batch, ht, wd, device): + coords = torch.meshgrid(torch.arange(ht, device=device), + torch.arange(wd, device=device), + indexing='ij') + coords = torch.stack(coords[::-1], dim=0).float() + return coords[None].repeat(batch, 1, 1, 1) + + +class SmallUpdateBlock(nn.Module): + def __init__(self, cdim, hidden_dim, flow_dim, corr_dim, fc_dim, + corr_levels=4, radius=3, scale_factor=None): + super(SmallUpdateBlock, self).__init__() + cor_planes = corr_levels * (2 * radius + 1) **2 + self.scale_factor = scale_factor + + self.convc1 = nn.Conv2d(2 * cor_planes, corr_dim, 1, padding=0) + self.convf1 = nn.Conv2d(4, flow_dim*2, 7, padding=3) + self.convf2 = nn.Conv2d(flow_dim*2, flow_dim, 3, padding=1) + self.conv = nn.Conv2d(corr_dim+flow_dim, fc_dim, 3, padding=1) + + self.gru = nn.Sequential( + nn.Conv2d(fc_dim+4+cdim, hidden_dim, 3, padding=1), + nn.LeakyReLU(negative_slope=0.1, inplace=True), + nn.Conv2d(hidden_dim, hidden_dim, 3, padding=1), + ) + + self.feat_head = nn.Sequential( + nn.Conv2d(hidden_dim, hidden_dim, 3, padding=1), + nn.LeakyReLU(negative_slope=0.1, inplace=True), + nn.Conv2d(hidden_dim, cdim, 3, padding=1), + ) + + self.flow_head = nn.Sequential( + nn.Conv2d(hidden_dim, hidden_dim, 3, padding=1), + nn.LeakyReLU(negative_slope=0.1, inplace=True), + nn.Conv2d(hidden_dim, 4, 3, padding=1), + ) + + self.lrelu = nn.LeakyReLU(negative_slope=0.1, inplace=True) + + def forward(self, net, flow, corr): + net = resize(net, 1 / self.scale_factor + ) if self.scale_factor is not None else net + cor = self.lrelu(self.convc1(corr)) + flo = self.lrelu(self.convf1(flow)) + flo = self.lrelu(self.convf2(flo)) + cor_flo = torch.cat([cor, flo], dim=1) + inp = self.lrelu(self.conv(cor_flo)) + inp = torch.cat([inp, flow, net], dim=1) + + out = self.gru(inp) + delta_net = self.feat_head(out) + delta_flow = self.flow_head(out) + + if self.scale_factor is not None: + delta_net = resize(delta_net, scale_factor=self.scale_factor) + delta_flow = self.scale_factor * resize(delta_flow, scale_factor=self.scale_factor) + + return delta_net, delta_flow + + +class BasicUpdateBlock(nn.Module): + def __init__(self, cdim, hidden_dim, flow_dim, corr_dim, corr_dim2, + fc_dim, corr_levels=4, radius=3, scale_factor=None, out_num=1): + super(BasicUpdateBlock, self).__init__() + cor_planes = corr_levels * (2 * radius + 1) **2 + + self.scale_factor = scale_factor + self.convc1 = nn.Conv2d(2 * cor_planes, corr_dim, 1, padding=0) + self.convc2 = nn.Conv2d(corr_dim, corr_dim2, 3, padding=1) + self.convf1 = nn.Conv2d(4, flow_dim*2, 7, padding=3) + self.convf2 = nn.Conv2d(flow_dim*2, flow_dim, 3, padding=1) + self.conv = nn.Conv2d(flow_dim+corr_dim2, fc_dim, 3, padding=1) + + self.gru = nn.Sequential( + nn.Conv2d(fc_dim+4+cdim, hidden_dim, 3, padding=1), + nn.LeakyReLU(negative_slope=0.1, inplace=True), + nn.Conv2d(hidden_dim, hidden_dim, 3, padding=1), + ) + + self.feat_head = nn.Sequential( + nn.Conv2d(hidden_dim, hidden_dim, 3, padding=1), + nn.LeakyReLU(negative_slope=0.1, inplace=True), + nn.Conv2d(hidden_dim, cdim, 3, padding=1), + ) + + self.flow_head = nn.Sequential( + nn.Conv2d(hidden_dim, hidden_dim, 3, padding=1), + nn.LeakyReLU(negative_slope=0.1, inplace=True), + nn.Conv2d(hidden_dim, 4*out_num, 3, padding=1), + ) + + self.lrelu = nn.LeakyReLU(negative_slope=0.1, inplace=True) + + def forward(self, net, flow, corr): + net = resize(net, 1 / self.scale_factor + ) if self.scale_factor is not None else net + cor = self.lrelu(self.convc1(corr)) + cor = self.lrelu(self.convc2(cor)) + flo = self.lrelu(self.convf1(flow)) + flo = self.lrelu(self.convf2(flo)) + cor_flo = torch.cat([cor, flo], dim=1) + inp = self.lrelu(self.conv(cor_flo)) + inp = torch.cat([inp, flow, net], dim=1) + + out = self.gru(inp) + delta_net = self.feat_head(out) + delta_flow = self.flow_head(out) + + if self.scale_factor is not None: + delta_net = resize(delta_net, scale_factor=self.scale_factor) + delta_flow = self.scale_factor * resize(delta_flow, scale_factor=self.scale_factor) + return delta_net, delta_flow + + +class BidirCorrBlock: + def __init__(self, fmap1, fmap2, num_levels=4, radius=4): + self.num_levels = num_levels + self.radius = radius + self.corr_pyramid = [] + self.corr_pyramid_T = [] + + corr = BidirCorrBlock.corr(fmap1, fmap2) + batch, h1, w1, dim, h2, w2 = corr.shape + corr_T = corr.clone().permute(0, 4, 5, 3, 1, 2) + + corr = corr.reshape(batch*h1*w1, dim, h2, w2) + corr_T = corr_T.reshape(batch*h2*w2, dim, h1, w1) + + self.corr_pyramid.append(corr) + self.corr_pyramid_T.append(corr_T) + + for _ in range(self.num_levels-1): + corr = F.avg_pool2d(corr, 2, stride=2) + corr_T = F.avg_pool2d(corr_T, 2, stride=2) + self.corr_pyramid.append(corr) + self.corr_pyramid_T.append(corr_T) + + def __call__(self, coords0, coords1): + r = self.radius + coords0 = coords0.permute(0, 2, 3, 1) + coords1 = coords1.permute(0, 2, 3, 1) + assert coords0.shape == coords1.shape, f"coords0 shape: [{coords0.shape}] is not equal to [{coords1.shape}]" + batch, h1, w1, _ = coords0.shape + + out_pyramid = [] + out_pyramid_T = [] + for i in range(self.num_levels): + corr = self.corr_pyramid[i] + corr_T = self.corr_pyramid_T[i] + + dx = torch.linspace(-r, r, 2*r+1, device=coords0.device) + dy = torch.linspace(-r, r, 2*r+1, device=coords0.device) + delta = torch.stack(torch.meshgrid(dy, dx, indexing='ij'), axis=-1) + delta_lvl = delta.view(1, 2*r+1, 2*r+1, 2) + + centroid_lvl_0 = coords0.reshape(batch*h1*w1, 1, 1, 2) / 2**i + centroid_lvl_1 = coords1.reshape(batch*h1*w1, 1, 1, 2) / 2**i + coords_lvl_0 = centroid_lvl_0 + delta_lvl + coords_lvl_1 = centroid_lvl_1 + delta_lvl + + corr = bilinear_sampler(corr, coords_lvl_0) + corr_T = bilinear_sampler(corr_T, coords_lvl_1) + corr = corr.view(batch, h1, w1, -1) + corr_T = corr_T.view(batch, h1, w1, -1) + out_pyramid.append(corr) + out_pyramid_T.append(corr_T) + + out = torch.cat(out_pyramid, dim=-1) + out_T = torch.cat(out_pyramid_T, dim=-1) + return out.permute(0, 3, 1, 2).contiguous().float(), out_T.permute(0, 3, 1, 2).contiguous().float() + + @staticmethod + def corr(fmap1, fmap2): + batch, dim, ht, wd = fmap1.shape + fmap1 = fmap1.view(batch, dim, ht*wd) + fmap2 = fmap2.view(batch, dim, ht*wd) + + corr = torch.matmul(fmap1.transpose(1,2), fmap2) + corr = corr.view(batch, ht, wd, 1, ht, wd) + return corr / torch.sqrt(torch.tensor(dim).float()) + + + + + + + + + + + +class AMT_S(nn.Module): + def __init__(self, + corr_radius=3, + corr_lvls=4, + num_flows=3, + channels=[20, 32, 44, 56], + skip_channels=20): + super(AMT_S, self).__init__() + self.radius = corr_radius + self.corr_levels = corr_lvls + self.num_flows = num_flows + self.channels = channels + self.skip_channels = skip_channels + + self.feat_encoder = SmallEncoder(output_dim=84, norm_fn='instance', dropout=0.) + self.encoder = Encoder(channels) + + self.decoder4 = InitDecoder(channels[3], channels[2], skip_channels) + self.decoder3 = IntermediateDecoder(channels[2], channels[1], skip_channels) + self.decoder2 = IntermediateDecoder(channels[1], channels[0], skip_channels) + self.decoder1 = MultiFlowDecoder(channels[0], skip_channels, num_flows) + + self.update4 = self._get_updateblock(44) + self.update3 = self._get_updateblock(32, 2) + self.update2 = self._get_updateblock(20, 4) + + self.comb_block = nn.Sequential( + nn.Conv2d(3*num_flows, 6*num_flows, 3, 1, 1), + nn.PReLU(6*num_flows), + nn.Conv2d(6*num_flows, 3, 3, 1, 1), + ) + + def _get_updateblock(self, cdim, scale_factor=None): + return SmallUpdateBlock(cdim=cdim, hidden_dim=76, flow_dim=20, corr_dim=64, + fc_dim=68, scale_factor=scale_factor, + corr_levels=self.corr_levels, radius=self.radius) + + def _corr_scale_lookup(self, corr_fn, coord, flow0, flow1, embt, downsample=1): + # convert t -> 0 to 0 -> 1 | convert t -> 1 to 1 -> 0 + # based on linear assumption + t1_scale = 1. / embt + t0_scale = 1. / (1. - embt) + if downsample != 1: + inv = 1 / downsample + flow0 = inv * resize(flow0, scale_factor=inv) + flow1 = inv * resize(flow1, scale_factor=inv) + + corr0, corr1 = corr_fn(coord + flow1 * t1_scale, coord + flow0 * t0_scale) + corr = torch.cat([corr0, corr1], dim=1) + flow = torch.cat([flow0, flow1], dim=1) + return corr, flow + + def forward(self, img0, img1, embt, scale_factor=1.0, eval=False, **kwargs): + mean_ = torch.cat([img0, img1], 2).mean(1, keepdim=True).mean(2, keepdim=True).mean(3, keepdim=True) + img0 = img0 - mean_ + img1 = img1 - mean_ + img0_ = resize(img0, scale_factor) if scale_factor != 1.0 else img0 + img1_ = resize(img1, scale_factor) if scale_factor != 1.0 else img1 + b, _, h, w = img0_.shape + coord = coords_grid(b, h // 8, w // 8, img0.device) + + fmap0, fmap1 = self.feat_encoder([img0_, img1_]) # [1, 128, H//8, W//8] + corr_fn = BidirCorrBlock(fmap0, fmap1, radius=self.radius, num_levels=self.corr_levels) + + # f0_1: [1, c0, H//2, W//2] | f0_2: [1, c1, H//4, W//4] + # f0_3: [1, c2, H//8, W//8] | f0_4: [1, c3, H//16, W//16] + f0_1, f0_2, f0_3, f0_4 = self.encoder(img0_) + f1_1, f1_2, f1_3, f1_4 = self.encoder(img1_) + + ######################################### the 4th decoder ######################################### + up_flow0_4, up_flow1_4, ft_3_ = self.decoder4(f0_4, f1_4, embt) + corr_4, flow_4 = self._corr_scale_lookup(corr_fn, coord, + up_flow0_4, up_flow1_4, + embt, downsample=1) + + # residue update with lookup corr + delta_ft_3_, delta_flow_4 = self.update4(ft_3_, flow_4, corr_4) + delta_flow0_4, delta_flow1_4 = torch.chunk(delta_flow_4, 2, 1) + up_flow0_4 = up_flow0_4 + delta_flow0_4 + up_flow1_4 = up_flow1_4 + delta_flow1_4 + ft_3_ = ft_3_ + delta_ft_3_ + + ######################################### the 3rd decoder ######################################### + up_flow0_3, up_flow1_3, ft_2_ = self.decoder3(ft_3_, f0_3, f1_3, up_flow0_4, up_flow1_4) + corr_3, flow_3 = self._corr_scale_lookup(corr_fn, + coord, up_flow0_3, up_flow1_3, + embt, downsample=2) + + # residue update with lookup corr + delta_ft_2_, delta_flow_3 = self.update3(ft_2_, flow_3, corr_3) + delta_flow0_3, delta_flow1_3 = torch.chunk(delta_flow_3, 2, 1) + up_flow0_3 = up_flow0_3 + delta_flow0_3 + up_flow1_3 = up_flow1_3 + delta_flow1_3 + ft_2_ = ft_2_ + delta_ft_2_ + + ######################################### the 2nd decoder ######################################### + up_flow0_2, up_flow1_2, ft_1_ = self.decoder2(ft_2_, f0_2, f1_2, up_flow0_3, up_flow1_3) + corr_2, flow_2 = self._corr_scale_lookup(corr_fn, + coord, up_flow0_2, up_flow1_2, + embt, downsample=4) + + # residue update with lookup corr + delta_ft_1_, delta_flow_2 = self.update2(ft_1_, flow_2, corr_2) + delta_flow0_2, delta_flow1_2 = torch.chunk(delta_flow_2, 2, 1) + up_flow0_2 = up_flow0_2 + delta_flow0_2 + up_flow1_2 = up_flow1_2 + delta_flow1_2 + ft_1_ = ft_1_ + delta_ft_1_ + + ######################################### the 1st decoder ######################################### + up_flow0_1, up_flow1_1, mask, img_res = self.decoder1(ft_1_, f0_1, f1_1, up_flow0_2, up_flow1_2) + + if scale_factor != 1.0: + up_flow0_1 = resize(up_flow0_1, scale_factor=(1.0/scale_factor)) * (1.0/scale_factor) + up_flow1_1 = resize(up_flow1_1, scale_factor=(1.0/scale_factor)) * (1.0/scale_factor) + mask = resize(mask, scale_factor=(1.0/scale_factor)) + img_res = resize(img_res, scale_factor=(1.0/scale_factor)) + + # Merge multiple predictions + imgt_pred = multi_flow_combine(self.comb_block, img0, img1, up_flow0_1, up_flow1_1, + mask, img_res, mean_) + imgt_pred = torch.clamp(imgt_pred, 0, 1) + + if eval: + return { 'imgt_pred': imgt_pred, } + else: + up_flow0_1 = up_flow0_1.reshape(b, self.num_flows, 2, h, w) + up_flow1_1 = up_flow1_1.reshape(b, self.num_flows, 2, h, w) + return { + 'imgt_pred': imgt_pred, + 'flow0_pred': [up_flow0_1, up_flow0_2, up_flow0_3, up_flow0_4], + 'flow1_pred': [up_flow1_1, up_flow1_2, up_flow1_3, up_flow1_4], + 'ft_pred': [ft_1_, ft_2_, ft_3_], + } + + + + + + + + + + + +class AMT_L(nn.Module): + def __init__(self, + corr_radius=3, + corr_lvls=4, + num_flows=5, + channels=[48, 64, 72, 128], + skip_channels=48 + ): + super(AMT_L, self).__init__() + self.radius = corr_radius + self.corr_levels = corr_lvls + self.num_flows = num_flows + + self.feat_encoder = BasicEncoder(output_dim=128, norm_fn='instance', dropout=0.) + self.encoder = Encoder([48, 64, 72, 128], large=True) + + self.decoder4 = InitDecoder(channels[3], channels[2], skip_channels) + self.decoder3 = IntermediateDecoder(channels[2], channels[1], skip_channels) + self.decoder2 = IntermediateDecoder(channels[1], channels[0], skip_channels) + self.decoder1 = MultiFlowDecoder(channels[0], skip_channels, num_flows) + + self.update4 = self._get_updateblock(72, None) + self.update3 = self._get_updateblock(64, 2.0) + self.update2 = self._get_updateblock(48, 4.0) + + self.comb_block = nn.Sequential( + nn.Conv2d(3*self.num_flows, 6*self.num_flows, 7, 1, 3), + nn.PReLU(6*self.num_flows), + nn.Conv2d(6*self.num_flows, 3, 7, 1, 3), + ) + + def _get_updateblock(self, cdim, scale_factor=None): + return BasicUpdateBlock(cdim=cdim, hidden_dim=128, flow_dim=48, + corr_dim=256, corr_dim2=160, fc_dim=124, + scale_factor=scale_factor, corr_levels=self.corr_levels, + radius=self.radius) + + def _corr_scale_lookup(self, corr_fn, coord, flow0, flow1, embt, downsample=1): + # convert t -> 0 to 0 -> 1 | convert t -> 1 to 1 -> 0 + # based on linear assumption + t1_scale = 1. / embt + t0_scale = 1. / (1. - embt) + if downsample != 1: + inv = 1 / downsample + flow0 = inv * resize(flow0, scale_factor=inv) + flow1 = inv * resize(flow1, scale_factor=inv) + + corr0, corr1 = corr_fn(coord + flow1 * t1_scale, coord + flow0 * t0_scale) + corr = torch.cat([corr0, corr1], dim=1) + flow = torch.cat([flow0, flow1], dim=1) + return corr, flow + + def forward(self, img0, img1, embt, scale_factor=1.0, eval=False, **kwargs): + mean_ = torch.cat([img0, img1], 2).mean(1, keepdim=True).mean(2, keepdim=True).mean(3, keepdim=True) + img0 = img0 - mean_ + img1 = img1 - mean_ + img0_ = resize(img0, scale_factor) if scale_factor != 1.0 else img0 + img1_ = resize(img1, scale_factor) if scale_factor != 1.0 else img1 + b, _, h, w = img0_.shape + coord = coords_grid(b, h // 8, w // 8, img0.device) + + fmap0, fmap1 = self.feat_encoder([img0_, img1_]) # [1, 128, H//8, W//8] + corr_fn = BidirCorrBlock(fmap0, fmap1, radius=self.radius, num_levels=self.corr_levels) + + # f0_1: [1, c0, H//2, W//2] | f0_2: [1, c1, H//4, W//4] + # f0_3: [1, c2, H//8, W//8] | f0_4: [1, c3, H//16, W//16] + f0_1, f0_2, f0_3, f0_4 = self.encoder(img0_) + f1_1, f1_2, f1_3, f1_4 = self.encoder(img1_) + + ######################################### the 4th decoder ######################################### + up_flow0_4, up_flow1_4, ft_3_ = self.decoder4(f0_4, f1_4, embt) + corr_4, flow_4 = self._corr_scale_lookup(corr_fn, coord, + up_flow0_4, up_flow1_4, + embt, downsample=1) + + # residue update with lookup corr + delta_ft_3_, delta_flow_4 = self.update4(ft_3_, flow_4, corr_4) + delta_flow0_4, delta_flow1_4 = torch.chunk(delta_flow_4, 2, 1) + up_flow0_4 = up_flow0_4 + delta_flow0_4 + up_flow1_4 = up_flow1_4 + delta_flow1_4 + ft_3_ = ft_3_ + delta_ft_3_ + + ######################################### the 3rd decoder ######################################### + up_flow0_3, up_flow1_3, ft_2_ = self.decoder3(ft_3_, f0_3, f1_3, up_flow0_4, up_flow1_4) + corr_3, flow_3 = self._corr_scale_lookup(corr_fn, + coord, up_flow0_3, up_flow1_3, + embt, downsample=2) + + # residue update with lookup corr + delta_ft_2_, delta_flow_3 = self.update3(ft_2_, flow_3, corr_3) + delta_flow0_3, delta_flow1_3 = torch.chunk(delta_flow_3, 2, 1) + up_flow0_3 = up_flow0_3 + delta_flow0_3 + up_flow1_3 = up_flow1_3 + delta_flow1_3 + ft_2_ = ft_2_ + delta_ft_2_ + + ######################################### the 2nd decoder ######################################### + up_flow0_2, up_flow1_2, ft_1_ = self.decoder2(ft_2_, f0_2, f1_2, up_flow0_3, up_flow1_3) + corr_2, flow_2 = self._corr_scale_lookup(corr_fn, + coord, up_flow0_2, up_flow1_2, + embt, downsample=4) + + # residue update with lookup corr + delta_ft_1_, delta_flow_2 = self.update2(ft_1_, flow_2, corr_2) + delta_flow0_2, delta_flow1_2 = torch.chunk(delta_flow_2, 2, 1) + up_flow0_2 = up_flow0_2 + delta_flow0_2 + up_flow1_2 = up_flow1_2 + delta_flow1_2 + ft_1_ = ft_1_ + delta_ft_1_ + + ######################################### the 1st decoder ######################################### + up_flow0_1, up_flow1_1, mask, img_res = self.decoder1(ft_1_, f0_1, f1_1, up_flow0_2, up_flow1_2) + + if scale_factor != 1.0: + up_flow0_1 = resize(up_flow0_1, scale_factor=(1.0/scale_factor)) * (1.0/scale_factor) + up_flow1_1 = resize(up_flow1_1, scale_factor=(1.0/scale_factor)) * (1.0/scale_factor) + mask = resize(mask, scale_factor=(1.0/scale_factor)) + img_res = resize(img_res, scale_factor=(1.0/scale_factor)) + + # Merge multiple predictions + imgt_pred = multi_flow_combine(self.comb_block, img0, img1, up_flow0_1, up_flow1_1, + mask, img_res, mean_) + imgt_pred = torch.clamp(imgt_pred, 0, 1) + + if eval: + return { 'imgt_pred': imgt_pred, } + else: + up_flow0_1 = up_flow0_1.reshape(b, self.num_flows, 2, h, w) + up_flow1_1 = up_flow1_1.reshape(b, self.num_flows, 2, h, w) + return { + 'imgt_pred': imgt_pred, + 'flow0_pred': [up_flow0_1, up_flow0_2, up_flow0_3, up_flow0_4], + 'flow1_pred': [up_flow1_1, up_flow1_2, up_flow1_3, up_flow1_4], + 'ft_pred': [ft_1_, ft_2_, ft_3_], + } + + + + + + + + + + + +class AMT_G(nn.Module): + def __init__(self, + corr_radius=3, + corr_lvls=4, + num_flows=5, + channels=[84, 96, 112, 128], + skip_channels=84): + super(AMT_G, self).__init__() + self.radius = corr_radius + self.corr_levels = corr_lvls + self.num_flows = num_flows + + self.feat_encoder = LargeEncoder(output_dim=128, norm_fn='instance', dropout=0.) + self.encoder = Encoder(channels, large=True) + self.decoder4 = InitDecoder(channels[3], channels[2], skip_channels) + self.decoder3 = IntermediateDecoder(channels[2], channels[1], skip_channels) + self.decoder2 = IntermediateDecoder(channels[1], channels[0], skip_channels) + self.decoder1 = MultiFlowDecoder(channels[0], skip_channels, num_flows) + + self.update4 = self._get_updateblock(112, None) + self.update3_low = self._get_updateblock(96, 2.0) + self.update2_low = self._get_updateblock(84, 4.0) + + self.update3_high = self._get_updateblock(96, None) + self.update2_high = self._get_updateblock(84, None) + + self.comb_block = nn.Sequential( + nn.Conv2d(3*self.num_flows, 6*self.num_flows, 7, 1, 3), + nn.PReLU(6*self.num_flows), + nn.Conv2d(6*self.num_flows, 3, 7, 1, 3), + ) + + def _get_updateblock(self, cdim, scale_factor=None): + return BasicUpdateBlock(cdim=cdim, hidden_dim=192, flow_dim=64, + corr_dim=256, corr_dim2=192, fc_dim=188, + scale_factor=scale_factor, corr_levels=self.corr_levels, + radius=self.radius) + + def _corr_scale_lookup(self, corr_fn, coord, flow0, flow1, embt, downsample=1): + # convert t -> 0 to 0 -> 1 | convert t -> 1 to 1 -> 0 + # based on linear assumption + t1_scale = 1. / embt + t0_scale = 1. / (1. - embt) + if downsample != 1: + inv = 1 / downsample + flow0 = inv * resize(flow0, scale_factor=inv) + flow1 = inv * resize(flow1, scale_factor=inv) + + corr0, corr1 = corr_fn(coord + flow1 * t1_scale, coord + flow0 * t0_scale) + corr = torch.cat([corr0, corr1], dim=1) + flow = torch.cat([flow0, flow1], dim=1) + return corr, flow + + def forward(self, img0, img1, embt, scale_factor=1.0, eval=False, **kwargs): + mean_ = torch.cat([img0, img1], 2).mean(1, keepdim=True).mean(2, keepdim=True).mean(3, keepdim=True) + img0 = img0 - mean_ + img1 = img1 - mean_ + img0_ = resize(img0, scale_factor) if scale_factor != 1.0 else img0 + img1_ = resize(img1, scale_factor) if scale_factor != 1.0 else img1 + b, _, h, w = img0_.shape + coord = coords_grid(b, h // 8, w // 8, img0.device) + + fmap0, fmap1 = self.feat_encoder([img0_, img1_]) # [1, 128, H//8, W//8] + corr_fn = BidirCorrBlock(fmap0, fmap1, radius=self.radius, num_levels=self.corr_levels) + + # f0_1: [1, c0, H//2, W//2] | f0_2: [1, c1, H//4, W//4] + # f0_3: [1, c2, H//8, W//8] | f0_4: [1, c3, H//16, W//16] + f0_1, f0_2, f0_3, f0_4 = self.encoder(img0_) + f1_1, f1_2, f1_3, f1_4 = self.encoder(img1_) + + ######################################### the 4th decoder ######################################### + up_flow0_4, up_flow1_4, ft_3_ = self.decoder4(f0_4, f1_4, embt) + corr_4, flow_4 = self._corr_scale_lookup(corr_fn, coord, + up_flow0_4, up_flow1_4, + embt, downsample=1) + + # residue update with lookup corr + delta_ft_3_, delta_flow_4 = self.update4(ft_3_, flow_4, corr_4) + delta_flow0_4, delta_flow1_4 = torch.chunk(delta_flow_4, 2, 1) + up_flow0_4 = up_flow0_4 + delta_flow0_4 + up_flow1_4 = up_flow1_4 + delta_flow1_4 + ft_3_ = ft_3_ + delta_ft_3_ + + ######################################### the 3rd decoder ######################################### + up_flow0_3, up_flow1_3, ft_2_ = self.decoder3(ft_3_, f0_3, f1_3, up_flow0_4, up_flow1_4) + corr_3, flow_3 = self._corr_scale_lookup(corr_fn, + coord, up_flow0_3, up_flow1_3, + embt, downsample=2) + + # residue update with lookup corr + delta_ft_2_, delta_flow_3 = self.update3_low(ft_2_, flow_3, corr_3) + delta_flow0_3, delta_flow1_3 = torch.chunk(delta_flow_3, 2, 1) + up_flow0_3 = up_flow0_3 + delta_flow0_3 + up_flow1_3 = up_flow1_3 + delta_flow1_3 + ft_2_ = ft_2_ + delta_ft_2_ + + # residue update with lookup corr (hr) + corr_3 = resize(corr_3, scale_factor=2.0) + up_flow_3 = torch.cat([up_flow0_3, up_flow1_3], dim=1) + delta_ft_2_, delta_up_flow_3 = self.update3_high(ft_2_, up_flow_3, corr_3) + ft_2_ += delta_ft_2_ + up_flow0_3 += delta_up_flow_3[:, 0:2] + up_flow1_3 += delta_up_flow_3[:, 2:4] + + ######################################### the 2nd decoder ######################################### + up_flow0_2, up_flow1_2, ft_1_ = self.decoder2(ft_2_, f0_2, f1_2, up_flow0_3, up_flow1_3) + corr_2, flow_2 = self._corr_scale_lookup(corr_fn, + coord, up_flow0_2, up_flow1_2, + embt, downsample=4) + + # residue update with lookup corr + delta_ft_1_, delta_flow_2 = self.update2_low(ft_1_, flow_2, corr_2) + delta_flow0_2, delta_flow1_2 = torch.chunk(delta_flow_2, 2, 1) + up_flow0_2 = up_flow0_2 + delta_flow0_2 + up_flow1_2 = up_flow1_2 + delta_flow1_2 + ft_1_ = ft_1_ + delta_ft_1_ + + # residue update with lookup corr (hr) + corr_2 = resize(corr_2, scale_factor=4.0) + up_flow_2 = torch.cat([up_flow0_2, up_flow1_2], dim=1) + delta_ft_1_, delta_up_flow_2 = self.update2_high(ft_1_, up_flow_2, corr_2) + ft_1_ += delta_ft_1_ + up_flow0_2 += delta_up_flow_2[:, 0:2] + up_flow1_2 += delta_up_flow_2[:, 2:4] + + ######################################### the 1st decoder ######################################### + up_flow0_1, up_flow1_1, mask, img_res = self.decoder1(ft_1_, f0_1, f1_1, up_flow0_2, up_flow1_2) + + if scale_factor != 1.0: + up_flow0_1 = resize(up_flow0_1, scale_factor=(1.0/scale_factor)) * (1.0/scale_factor) + up_flow1_1 = resize(up_flow1_1, scale_factor=(1.0/scale_factor)) * (1.0/scale_factor) + mask = resize(mask, scale_factor=(1.0/scale_factor)) + img_res = resize(img_res, scale_factor=(1.0/scale_factor)) + + # Merge multiple predictions + imgt_pred = multi_flow_combine(self.comb_block, img0, img1, up_flow0_1, up_flow1_1, + mask, img_res, mean_) + imgt_pred = torch.clamp(imgt_pred, 0, 1) + + if eval: + return { 'imgt_pred': imgt_pred, } + else: + up_flow0_1 = up_flow0_1.reshape(b, self.num_flows, 2, h, w) + up_flow1_1 = up_flow1_1.reshape(b, self.num_flows, 2, h, w) + return { + 'imgt_pred': imgt_pred, + 'flow0_pred': [up_flow0_1, up_flow0_2, up_flow0_3, up_flow0_4], + 'flow1_pred': [up_flow1_1, up_flow1_2, up_flow1_3, up_flow1_4], + 'ft_pred': [ft_1_, ft_2_, ft_3_], + } \ No newline at end of file diff --git a/comfyui-frame-interpolation/vfi_models/cain/__init__.py b/comfyui-frame-interpolation/vfi_models/cain/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..8d1166d1fad2639bb9ce49a2e2ff3471ef6a6415 --- /dev/null +++ b/comfyui-frame-interpolation/vfi_models/cain/__init__.py @@ -0,0 +1,64 @@ +import torch +from torch.utils.data import DataLoader +import pathlib +from vfi_utils import load_file_from_github_release, preprocess_frames, postprocess_frames, generic_frame_loop, InterpolationStateList +import typing +from comfy.model_management import get_torch_device + +MODEL_TYPE = pathlib.Path(__file__).parent.name +CKPT_NAMES = ["pretrained_cain.pth"] + + +class CAIN_VFI: + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "ckpt_name": (CKPT_NAMES, ), + "frames": ("IMAGE", ), + "clear_cache_after_n_frames": ("INT", {"default": 10, "min": 1, "max": 1000}), + "multiplier": ("INT", {"default": 2, "min": 2, "max": 1000}) + }, + "optional": { + "optional_interpolation_states": ("INTERPOLATION_STATES", ) + } + } + + RETURN_TYPES = ("IMAGE", ) + FUNCTION = "vfi" + CATEGORY = "ComfyUI-Frame-Interpolation/VFI" + + def vfi( + self, + ckpt_name: typing.AnyStr, + frames: torch.Tensor, + clear_cache_after_n_frames: typing.SupportsInt = 1, + multiplier: typing.SupportsInt = 2, + optional_interpolation_states: InterpolationStateList = None, + **kwargs + ): + from .cain_arch import CAIN + model_path = load_file_from_github_release(MODEL_TYPE, ckpt_name) + sd = torch.load(model_path)["state_dict"] + sd = {key.replace('module.', ''): value for key, value in sd.items()} + + + global interpolation_model + interpolation_model = CAIN(depth=3) + interpolation_model.load_state_dict(sd) + interpolation_model.eval().to(get_torch_device()) + del sd + + frames = preprocess_frames(frames) + + + def return_middle_frame(frame_0, frame_1, timestep, model): + #CAIN does some direct modifications to input frame tensors so we need to clone them + return model(frame_0.detach().clone(), frame_1.detach().clone())[0] + + args = [interpolation_model] + out = postprocess_frames( + generic_frame_loop(type(self).__name__, frames, clear_cache_after_n_frames, multiplier, return_middle_frame, *args, + interpolation_states=optional_interpolation_states, use_timestep=False, dtype=torch.float32) + ) + return (out,) \ No newline at end of file diff --git a/comfyui-frame-interpolation/vfi_models/cain/__pycache__/__init__.cpython-310.pyc b/comfyui-frame-interpolation/vfi_models/cain/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d2c462f5503ecd01dccf794eb84d5a479dbce6b9 Binary files /dev/null and b/comfyui-frame-interpolation/vfi_models/cain/__pycache__/__init__.cpython-310.pyc differ diff --git a/comfyui-frame-interpolation/vfi_models/cain/cain_arch.py b/comfyui-frame-interpolation/vfi_models/cain/cain_arch.py new file mode 100644 index 0000000000000000000000000000000000000000..abd8db30b7f4260ea847da249d4d4114f8091d95 --- /dev/null +++ b/comfyui-frame-interpolation/vfi_models/cain/cain_arch.py @@ -0,0 +1,74 @@ +import math +import numpy as np + +import torch +import torch.nn as nn + +from .common import * + + +class Encoder(nn.Module): + def __init__(self, in_channels=3, depth=3): + super(Encoder, self).__init__() + + # Shuffle pixels to expand in channel dimension + # shuffler_list = [PixelShuffle(0.5) for i in range(depth)] + # self.shuffler = nn.Sequential(*shuffler_list) + self.shuffler = PixelShuffle(1 / 2**depth) + + relu = nn.LeakyReLU(0.2, True) + + # FF_RCAN or FF_Resblocks + self.interpolate = Interpolation(5, 12, in_channels * (4**depth), act=relu) + + def forward(self, x1, x2): + """ + Encoder: Shuffle-spread --> Feature Fusion --> Return fused features + """ + feats1 = self.shuffler(x1) + feats2 = self.shuffler(x2) + + feats = self.interpolate(feats1, feats2) + + return feats + + +class Decoder(nn.Module): + def __init__(self, depth=3): + super(Decoder, self).__init__() + + # shuffler_list = [PixelShuffle(2) for i in range(depth)] + # self.shuffler = nn.Sequential(*shuffler_list) + self.shuffler = PixelShuffle(2**depth) + + def forward(self, feats): + out = self.shuffler(feats) + return out + + +class CAIN(nn.Module): + def __init__(self, depth=3): + super(CAIN, self).__init__() + + self.encoder = Encoder(in_channels=3, depth=depth) + self.decoder = Decoder(depth=depth) + + def forward(self, x1, x2): + x1, m1 = sub_mean(x1) + x2, m2 = sub_mean(x2) + + if not self.training: + paddingInput, paddingOutput = InOutPaddings(x1) + x1 = paddingInput(x1) + x2 = paddingInput(x2) + + feats = self.encoder(x1, x2) + out = self.decoder(feats) + + if not self.training: + out = paddingOutput(out) + + mi = (m1 + m2) / 2 + out += mi + + return out, feats \ No newline at end of file diff --git a/comfyui-frame-interpolation/vfi_models/cain/cain_encdec_arch.py b/comfyui-frame-interpolation/vfi_models/cain/cain_encdec_arch.py new file mode 100644 index 0000000000000000000000000000000000000000..ea10ed87e38bee995f435bb4305e221e4c13a4a6 --- /dev/null +++ b/comfyui-frame-interpolation/vfi_models/cain/cain_encdec_arch.py @@ -0,0 +1,95 @@ +import math +import numpy as np + +import torch +import torch.nn as nn + +from .common import * +from comfy.model_management import get_torch_device + +class Encoder(nn.Module): + def __init__(self, in_channels=3, depth=3, nf_start=32, norm=False): + super(Encoder, self).__init__() + self.device = get_torch_device() + + nf = nf_start + relu = nn.LeakyReLU(negative_slope=0.2, inplace=True) + + self.body = nn.Sequential( + ConvNorm(in_channels, nf * 1, 7, stride=1, norm=norm), + relu, + ConvNorm(nf * 1, nf * 2, 5, stride=2, norm=norm), + relu, + ConvNorm(nf * 2, nf * 4, 5, stride=2, norm=norm), + relu, + ConvNorm(nf * 4, nf * 6, 5, stride=2, norm=norm) + ) + + self.interpolate = Interpolation(5, 12, nf * 6, reduction=16, act=relu) + + def forward(self, x1, x2): + """ + Encoder: Feature Extraction --> Feature Fusion --> Return + """ + feats1 = self.body(x1) + feats2 = self.body(x2) + + feats = self.interpolate(feats1, feats2) + + return feats + + +class Decoder(nn.Module): + def __init__(self, in_channels=192, out_channels=3, depth=3, norm=False, up_mode='shuffle'): + super(Decoder, self).__init__() + self.device = get_torch_device() + + relu = nn.LeakyReLU(negative_slope=0.2, inplace=True) + + nf = [in_channels, (in_channels*2)//3, in_channels//3, in_channels//6] + #nf = [192, 128, 64, 32] + #nf = [186, 124, 62, 31] + self.body = nn.Sequential( + UpConvNorm(nf[0], nf[1], mode=up_mode, norm=norm), + ResBlock(nf[1], nf[1], norm=norm, act=relu), + UpConvNorm(nf[1], nf[2], mode=up_mode, norm=norm), + ResBlock(nf[2], nf[2], norm=norm, act=relu), + UpConvNorm(nf[2], nf[3], mode=up_mode, norm=norm), + ResBlock(nf[3], nf[3], norm=norm, act=relu), + conv7x7(nf[3], out_channels) + ) + + def forward(self, feats): + out = self.body(feats) + #out = self.conv_final(out) + + return out + + +class CAIN_EncDec(nn.Module): + def __init__(self, depth=3, n_resblocks=3, start_filts=32, up_mode='shuffle'): + super(CAIN_EncDec, self).__init__() + self.depth = depth + + self.encoder = Encoder(in_channels=3, depth=depth, norm=False) + self.decoder = Decoder(in_channels=start_filts*6, depth=depth, norm=False, up_mode=up_mode) + + def forward(self, x1, x2): + x1, m1 = sub_mean(x1) + x2, m2 = sub_mean(x2) + + if not self.training: + paddingInput, paddingOutput = InOutPaddings(x1) + x1 = paddingInput(x1) + x2 = paddingInput(x2) + + feats = self.encoder(x1, x2) + out = self.decoder(feats) + + if not self.training: + out = paddingOutput(out) + + mi = (m1 + m2)/2 + out += mi + + return out, feats \ No newline at end of file diff --git a/comfyui-frame-interpolation/vfi_models/cain/cain_noca_arch.py b/comfyui-frame-interpolation/vfi_models/cain/cain_noca_arch.py new file mode 100644 index 0000000000000000000000000000000000000000..08fbb117e9acef30d49627d5c906622b13197623 --- /dev/null +++ b/comfyui-frame-interpolation/vfi_models/cain/cain_noca_arch.py @@ -0,0 +1,73 @@ +import math +import numpy as np + +import torch +import torch.nn as nn + +from .common import * +from comfy.model_management import get_torch_device + +class Encoder(nn.Module): + def __init__(self, in_channels=3, depth=3): + super(Encoder, self).__init__() + self.device = get_torch_device() + + self.shuffler = PixelShuffle(1/2**depth) + # self.shuffler = nn.Sequential( + # PixelShuffle(1/2), + # PixelShuffle(1/2), + # PixelShuffle(1/2)) + self.interpolate = Interpolation_res(5, 12, in_channels * (4**depth)) + + def forward(self, x1, x2): + feats1 = self.shuffler(x1) + feats2 = self.shuffler(x2) + + feats = self.interpolate(feats1, feats2) + + return feats + + +class Decoder(nn.Module): + def __init__(self, depth=3): + super(Decoder, self).__init__() + self.device = get_torch_device() + + self.shuffler = PixelShuffle(2**depth) + # self.shuffler = nn.Sequential( + # PixelShuffle(2), + # PixelShuffle(2), + # PixelShuffle(2)) + + def forward(self, feats): + out = self.shuffler(feats) + return out + + +class CAIN_NoCA(nn.Module): + def __init__(self, depth=3): + super(CAIN_NoCA, self).__init__() + self.depth = depth + + self.encoder = Encoder(in_channels=3, depth=depth) + self.decoder = Decoder(depth=depth) + + def forward(self, x1, x2): + x1, m1 = sub_mean(x1) + x2, m2 = sub_mean(x2) + + if not self.training: + paddingInput, paddingOutput = InOutPaddings(x1) + x1 = paddingInput(x1) + x2 = paddingInput(x2) + + feats = self.encoder(x1, x2) + out = self.decoder(feats) + + if not self.training: + out = paddingOutput(out) + + mi = (m1 + m2) / 2 + out += mi + + return out, feats \ No newline at end of file diff --git a/comfyui-frame-interpolation/vfi_models/cain/common.py b/comfyui-frame-interpolation/vfi_models/cain/common.py new file mode 100644 index 0000000000000000000000000000000000000000..aa1600a231d32eec39785883cb26b93fd9c64e62 --- /dev/null +++ b/comfyui-frame-interpolation/vfi_models/cain/common.py @@ -0,0 +1,361 @@ +import math + +import torch +import torch.nn as nn +import torch.nn.functional as F + +def sub_mean(x): + mean = x.mean(2, keepdim=True).mean(3, keepdim=True) + x -= mean + return x, mean + +def InOutPaddings(x): + w, h = x.size(3), x.size(2) + padding_width, padding_height = 0, 0 + if w != ((w >> 7) << 7): + padding_width = (((w >> 7) + 1) << 7) - w + if h != ((h >> 7) << 7): + padding_height = (((h >> 7) + 1) << 7) - h + paddingInput = nn.ReflectionPad2d(padding=[padding_width // 2, padding_width - padding_width // 2, + padding_height // 2, padding_height - padding_height // 2]) + paddingOutput = nn.ReflectionPad2d(padding=[0 - padding_width // 2, padding_width // 2 - padding_width, + 0 - padding_height // 2, padding_height // 2 - padding_height]) + return paddingInput, paddingOutput + + +class ConvNorm(nn.Module): + def __init__(self, in_feat, out_feat, kernel_size, stride=1, norm=False): + super(ConvNorm, self).__init__() + + reflection_padding = kernel_size // 2 + self.reflection_pad = nn.ReflectionPad2d(reflection_padding) + self.conv = nn.Conv2d(in_feat, out_feat, stride=stride, kernel_size=kernel_size, bias=True) + + self.norm = norm + if norm == 'IN': + self.norm = nn.InstanceNorm2d(out_feat, track_running_stats=True) + elif norm == 'BN': + self.norm = nn.BatchNorm2d(out_feat) + + def forward(self, x): + out = self.reflection_pad(x) + out = self.conv(out) + if self.norm: + out = self.norm(out) + return out + + +class UpConvNorm(nn.Module): + def __init__(self, in_channels, out_channels, mode='transpose', norm=False): + super(UpConvNorm, self).__init__() + + if mode == 'transpose': + self.upconv = nn.ConvTranspose2d(in_channels, out_channels, kernel_size=4, stride=2, padding=1) + elif mode == 'shuffle': + self.upconv = nn.Sequential( + ConvNorm(in_channels, 4*out_channels, kernel_size=3, stride=1, norm=norm), + PixelShuffle(2)) + else: + # out_channels is always going to be the same as in_channels + self.upconv = nn.Sequential( + nn.Upsample(mode='bilinear', scale_factor=2, align_corners=False), + ConvNorm(in_channels, out_channels, kernel_size=1, stride=1, norm=norm)) + + def forward(self, x): + out = self.upconv(x) + return out + + + +class meanShift(nn.Module): + def __init__(self, rgbRange, rgbMean, sign, nChannel=3): + super(meanShift, self).__init__() + if nChannel == 1: + l = rgbMean[0] * rgbRange * float(sign) + + self.shifter = nn.Conv2d(1, 1, kernel_size=1, stride=1, padding=0) + self.shifter.weight.data = torch.eye(1).view(1, 1, 1, 1) + self.shifter.bias.data = torch.Tensor([l]) + elif nChannel == 3: + r = rgbMean[0] * rgbRange * float(sign) + g = rgbMean[1] * rgbRange * float(sign) + b = rgbMean[2] * rgbRange * float(sign) + + self.shifter = nn.Conv2d(3, 3, kernel_size=1, stride=1, padding=0) + self.shifter.weight.data = torch.eye(3).view(3, 3, 1, 1) + self.shifter.bias.data = torch.Tensor([r, g, b]) + else: + r = rgbMean[0] * rgbRange * float(sign) + g = rgbMean[1] * rgbRange * float(sign) + b = rgbMean[2] * rgbRange * float(sign) + self.shifter = nn.Conv2d(6, 6, kernel_size=1, stride=1, padding=0) + self.shifter.weight.data = torch.eye(6).view(6, 6, 1, 1) + self.shifter.bias.data = torch.Tensor([r, g, b, r, g, b]) + + # Freeze the meanShift layer + for params in self.shifter.parameters(): + params.requires_grad = False + + def forward(self, x): + x = self.shifter(x) + + return x + + +""" CONV - (BN) - RELU - CONV - (BN) """ +class ResBlock(nn.Module): + def __init__(self, in_feat, out_feat, kernel_size=3, reduction=False, bias=True, # 'reduction' is just for placeholder + norm=False, act=nn.ReLU(True), downscale=False): + super(ResBlock, self).__init__() + + self.body = nn.Sequential( + ConvNorm(in_feat, out_feat, kernel_size=kernel_size, stride=2 if downscale else 1), + act, + ConvNorm(out_feat, out_feat, kernel_size=kernel_size, stride=1) + ) + + self.downscale = None + if downscale: + self.downscale = nn.Conv2d(in_feat, out_feat, kernel_size=1, stride=2) + + def forward(self, x): + res = x + out = self.body(x) + if self.downscale is not None: + res = self.downscale(res) + out += res + + return out + + +## Channel Attention (CA) Layer +class CALayer(nn.Module): + def __init__(self, channel, reduction=16): + super(CALayer, self).__init__() + # global average pooling: feature --> point + self.avg_pool = nn.AdaptiveAvgPool2d(1) + # feature channel downscale and upscale --> channel weight + self.conv_du = nn.Sequential( + nn.Conv2d(channel, channel // reduction, 1, padding=0, bias=True), + nn.ReLU(inplace=True), + nn.Conv2d(channel // reduction, channel, 1, padding=0, bias=True), + nn.Sigmoid() + ) + + def forward(self, x): + y = self.avg_pool(x) + y = self.conv_du(y) + return x * y, y + + +## Residual Channel Attention Block (RCAB) +class RCAB(nn.Module): + def __init__(self, in_feat, out_feat, kernel_size, reduction, bias=True, + norm=False, act=nn.ReLU(True), downscale=False, return_ca=False): + super(RCAB, self).__init__() + + self.body = nn.Sequential( + ConvNorm(in_feat, out_feat, kernel_size, stride=2 if downscale else 1, norm=norm), + act, + ConvNorm(out_feat, out_feat, kernel_size, stride=1, norm=norm), + CALayer(out_feat, reduction) + ) + self.downscale = downscale + if downscale: + self.downConv = nn.Conv2d(in_feat, out_feat, kernel_size=3, stride=2, padding=1) + self.return_ca = return_ca + + def forward(self, x): + res = x + out, ca = self.body(x) + if self.downscale: + res = self.downConv(res) + out += res + + if self.return_ca: + return out, ca + else: + return out + + +## Residual Group (RG) +class ResidualGroup(nn.Module): + def __init__(self, Block, n_resblocks, n_feat, kernel_size, reduction, act, norm=False): + super(ResidualGroup, self).__init__() + + modules_body = [Block(n_feat, n_feat, kernel_size, reduction, bias=True, norm=norm, act=act) + for _ in range(n_resblocks)] + modules_body.append(ConvNorm(n_feat, n_feat, kernel_size, stride=1, norm=norm)) + self.body = nn.Sequential(*modules_body) + + def forward(self, x): + res = self.body(x) + res += x + return res + + +def pixel_shuffle(input, scale_factor): + batch_size, channels, in_height, in_width = input.size() + + out_channels = int(int(channels / scale_factor) / scale_factor) + out_height = int(in_height * scale_factor) + out_width = int(in_width * scale_factor) + + if scale_factor >= 1: + input_view = input.contiguous().view(batch_size, out_channels, scale_factor, scale_factor, in_height, in_width) + shuffle_out = input_view.permute(0, 1, 4, 2, 5, 3).contiguous() + else: + block_size = int(1 / scale_factor) + input_view = input.contiguous().view(batch_size, channels, out_height, block_size, out_width, block_size) + shuffle_out = input_view.permute(0, 1, 3, 5, 2, 4).contiguous() + + return shuffle_out.view(batch_size, out_channels, out_height, out_width) + + +class PixelShuffle(nn.Module): + def __init__(self, scale_factor): + super(PixelShuffle, self).__init__() + self.scale_factor = scale_factor + + def forward(self, x): + return pixel_shuffle(x, self.scale_factor) + def extra_repr(self): + return 'scale_factor={}'.format(self.scale_factor) + + +def conv(in_channels, out_channels, kernel_size, + stride=1, bias=True, groups=1): + return nn.Conv2d( + in_channels, + out_channels, + kernel_size=kernel_size, + padding=kernel_size//2, + stride=1, + bias=bias, + groups=groups) + + +def conv1x1(in_channels, out_channels, stride=1, bias=True, groups=1): + return nn.Conv2d( + in_channels, + out_channels, + kernel_size=1, + stride=stride, + bias=bias, + groups=groups) + +def conv3x3(in_channels, out_channels, stride=1, + padding=1, bias=True, groups=1): + return nn.Conv2d( + in_channels, + out_channels, + kernel_size=3, + stride=stride, + padding=padding, + bias=bias, + groups=groups) + +def conv5x5(in_channels, out_channels, stride=1, + padding=2, bias=True, groups=1): + return nn.Conv2d( + in_channels, + out_channels, + kernel_size=5, + stride=stride, + padding=padding, + bias=bias, + groups=groups) + +def conv7x7(in_channels, out_channels, stride=1, + padding=3, bias=True, groups=1): + return nn.Conv2d( + in_channels, + out_channels, + kernel_size=7, + stride=stride, + padding=padding, + bias=bias, + groups=groups) + +def upconv2x2(in_channels, out_channels, mode='shuffle'): + if mode == 'transpose': + return nn.ConvTranspose2d( + in_channels, + out_channels, + kernel_size=4, + stride=2, + padding=1) + elif mode == 'shuffle': + return nn.Sequential( + conv3x3(in_channels, 4*out_channels), + PixelShuffle(2)) + else: + # out_channels is always going to be the same as in_channels + return nn.Sequential( + nn.Upsample(mode='bilinear', scale_factor=2, align_corners=False), + conv1x1(in_channels, out_channels)) + + + +class Interpolation(nn.Module): + def __init__(self, n_resgroups, n_resblocks, n_feats, + reduction=16, act=nn.LeakyReLU(0.2, True), norm=False): + super(Interpolation, self).__init__() + + # define modules: head, body, tail + self.headConv = conv3x3(n_feats * 2, n_feats) + + modules_body = [ + ResidualGroup( + RCAB, + n_resblocks=n_resblocks, + n_feat=n_feats, + kernel_size=3, + reduction=reduction, + act=act, + norm=norm) + for _ in range(n_resgroups)] + self.body = nn.Sequential(*modules_body) + + self.tailConv = conv3x3(n_feats, n_feats) + + def forward(self, x0, x1): + # Build input tensor + x = torch.cat([x0, x1], dim=1) + x = self.headConv(x) + + res = self.body(x) + res += x + + out = self.tailConv(res) + return out + + +class Interpolation_res(nn.Module): + def __init__(self, n_resgroups, n_resblocks, n_feats, + act=nn.LeakyReLU(0.2, True), norm=False): + super(Interpolation_res, self).__init__() + + # define modules: head, body, tail (reduces concatenated inputs to n_feat) + self.headConv = conv3x3(n_feats * 2, n_feats) + + modules_body = [ResidualGroup(ResBlock, n_resblocks=n_resblocks, n_feat=n_feats, kernel_size=3, + reduction=0, act=act, norm=norm) + for _ in range(n_resgroups)] + self.body = nn.Sequential(*modules_body) + + self.tailConv = conv3x3(n_feats, n_feats) + + def forward(self, x0, x1): + # Build input tensor + x = torch.cat([x0, x1], dim=1) + x = self.headConv(x) + + res = x + for m in self.body: + res = m(res) + res += x + + x = self.tailConv(res) + + return x \ No newline at end of file diff --git a/comfyui-frame-interpolation/vfi_models/eisai/__init__.py b/comfyui-frame-interpolation/vfi_models/eisai/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..3602505192621731e00acde67489c6a51360adb8 --- /dev/null +++ b/comfyui-frame-interpolation/vfi_models/eisai/__init__.py @@ -0,0 +1,84 @@ +import pathlib +from vfi_utils import load_file_from_github_release, preprocess_frames, postprocess_frames, generic_frame_loop, InterpolationStateList +import typing +import torch +import torch.nn as nn +from comfy.model_management import soft_empty_cache, get_torch_device + +MODEL_TYPE = pathlib.Path(__file__).parent.name +MODEL_FILE_NAMES = { + "ssl": "eisai_ssl.pt", + "dtm": "eisai_dtm.pt", + "raft": "eisai_anime_interp_full.ckpt" +} + +class EISAI(nn.Module): + def __init__(self, model_file_names) -> None: + from .eisai_arch import SoftsplatLite, DTM, RAFT + super(EISAI, self).__init__() + self.raft = RAFT(load_file_from_github_release(MODEL_TYPE, model_file_names["raft"])) + self.raft.to(get_torch_device()).eval() + + self.ssl = SoftsplatLite() + self.ssl.load_state_dict(torch.load(load_file_from_github_release(MODEL_TYPE, model_file_names["ssl"]))) + self.ssl.to(get_torch_device()).eval() + + self.dtm = DTM() + self.dtm.load_state_dict(torch.load(load_file_from_github_release(MODEL_TYPE, model_file_names["dtm"]))) + self.dtm.to(get_torch_device()).eval() + + def forward(self, img0, img1, t): + with torch.no_grad(): + flow0, _ = self.raft(img0, img1) + flow1, _ = self.raft(img1, img0) + x = { + "images": torch.stack([img0, img1], dim=1), + "flows": torch.stack([flow0, flow1], dim=1), + } + out_ssl, _ = self.ssl(x, t=t, return_more=True) + out_dtm, _ = self.dtm(x, out_ssl, _, return_more=False) + return out_dtm[:, :3] + +class EISAI_VFI: + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "ckpt_name": (["eisai"], ), + "frames": ("IMAGE", ), + "clear_cache_after_n_frames": ("INT", {"default": 10, "min": 1, "max": 1000}), + "multiplier": ("INT", {"default": 2, "min": 2, "max": 1000}), + }, + "optional": { + "optional_interpolation_states": ("INTERPOLATION_STATES", ) + } + } + + RETURN_TYPES = ("IMAGE", ) + FUNCTION = "vfi" + CATEGORY = "ComfyUI-Frame-Interpolation/VFI" + + def vfi( + self, + ckpt_name: typing.AnyStr, + frames: torch.Tensor, + clear_cache_after_n_frames = 10, + multiplier: typing.SupportsInt = 2, + optional_interpolation_states: InterpolationStateList = None, + **kwargs + ): + interpolation_model = EISAI(MODEL_FILE_NAMES) + interpolation_model.eval().to(get_torch_device()) + frames = preprocess_frames(frames) + + def return_middle_frame(frame_0, frame_1, timestep, model): + return model(frame_0, frame_1, t=timestep) + + scale = 1 + + args = [interpolation_model, scale] + out = postprocess_frames( + generic_frame_loop(type(self).__name__, frames, clear_cache_after_n_frames, multiplier, return_middle_frame, *args, + interpolation_states=optional_interpolation_states, dtype=torch.float32) + ) + return (out,) diff --git a/comfyui-frame-interpolation/vfi_models/eisai/eisai_arch.py b/comfyui-frame-interpolation/vfi_models/eisai/eisai_arch.py new file mode 100644 index 0000000000000000000000000000000000000000..4a3abae7187b26fedd86219058a7e8e024e59e30 --- /dev/null +++ b/comfyui-frame-interpolation/vfi_models/eisai/eisai_arch.py @@ -0,0 +1,2586 @@ +""" +https://github.com/ShuhongChen/eisai-anime-interpolator/blob/master/_scripts/interpolate.py +https://github.com/ShuhongChen/eisai-anime-interpolator/blob/master/_train/frame_interpolation/models/ssldtm.py +https://github.com/ShuhongChen/eisai-anime-interpolator/blob/master/_util/util_v0.py +https://github.com/ShuhongChen/eisai-anime-interpolator/blob/master/_util/twodee_v0.py +https://github.com/ShuhongChen/eisai-anime-interpolator/blob/master/_util/pytorch_v0.py +https://github.com/ShuhongChen/eisai-anime-interpolator/blob/master/_util/distance_transform_v0.py +https://github.com/ShuhongChen/eisai-anime-interpolator/blob/master/_util/sketchers_v1.py +https://github.com/ShuhongChen/eisai-anime-interpolator/blob/master/_train/frame_interpolation/helpers/interpolator_v0.py +https://github.com/ShuhongChen/eisai-anime-interpolator/blob/master/_train/frame_interpolation/helpers/gridnet_v1.py +https://github.com/ShuhongChen/eisai-anime-interpolator/blob/master/_util/flow_v0.py +https://github.com/ShuhongChen/eisai-anime-interpolator/blob/master/_util/softsplat_v0.py +https://github.com/ShuhongChen/eisai-anime-interpolator/blob/master/_train/frame_interpolation/helpers/raft_v1/rfr_new.py +https://github.com/ShuhongChen/eisai-anime-interpolator/blob/master/_train/frame_interpolation/helpers/raft_v1/extractor.py +https://github.com/ShuhongChen/eisai-anime-interpolator/blob/master/_train/frame_interpolation/helpers/raft_v1/update.py +https://github.com/ShuhongChen/eisai-anime-interpolator/blob/master/_train/frame_interpolation/helpers/raft_v1/corr.py +https://github.com/ShuhongChen/eisai-anime-interpolator/blob/master/_train/frame_interpolation/helpers/raft_v1/utils.py +""" + +import copy +import cv2 +import torch.nn.functional as F +import torchvision.transforms.functional as F +import gc +from PIL import Image, ImageFile, ImageFont, ImageDraw +import inspect +from scipy import interpolate +import kornia +import math +from argparse import Namespace +import torch.nn as nn +import numpy as np +import os +from functools import partial +import pathlib +import PIL +import re +import requests +from scipy.spatial.transform import Rotation +import scipy +import shutil +import torchvision.transforms as T +import time +import torch +import torchvision as tv +import zlib +import numpy as np +import torch +import torch.nn as nn +import torch.nn.functional as F +from tqdm.auto import tqdm as std_tqdm +from tqdm.auto import trange as std_trange +from vfi_models.ops import FunctionSoftsplat, batch_edt +from comfy.model_management import get_torch_device + +device = get_torch_device() +autocast = torch.autocast +tqdm = partial(std_tqdm, dynamic_ncols=True) +trange = partial(std_trange, dynamic_ncols=True) +ImageFile.LOAD_TRUNCATED_IMAGES = True + + +def pixel_ij(x, rounding=True): + if isinstance(x, np.ndarray): + x = x.tolist() + return tuple( + pixel_rounder(i, rounding) + for i in (x if isinstance(x, tuple) or isinstance(x, list) else (x, x)) + ) + + +def rescale_dry(x, factor): + h, w = x[-2:] if isinstance(x, tuple) or isinstance(x, list) else I(x).size + return (h * factor, w * factor) + + +def pixel_rounder(n, mode): + if mode == True or mode == "round": + return round(n) + elif mode == "ceil": + return math.ceil(n) + elif mode == "floor": + return math.floor(n) + else: + return n + + +def diam(x): + if isinstance(x, tuple) or isinstance(x, list): + h, w = x[-2:] + elif isinstance(x, I): + h, w = x.size + else: + h, w = x.shape[-2:] + return np.sqrt(h**2 + w**2) + + +def pixel_logit(x, pixel_margin=1): + x = (x * (255 - 2 * pixel_margin) + pixel_margin) / 255 + return torch.log(x / (1 - x)) + + +class InputPadder: + """Pads images such that dimensions are divisible by 8""" + + def __init__(self, dims): + self.ht, self.wd = dims[-2:] + pad_ht = (((self.ht // 8) + 1) * 8 - self.ht) % 8 + pad_wd = (((self.wd // 8) + 1) * 8 - self.wd) % 8 + self._pad = [pad_wd // 2, pad_wd - pad_wd // 2, 0, pad_ht] + + def pad(self, *inputs): + return [F.pad(x, self._pad, mode="replicate") for x in inputs] + + def unpad(self, x): + ht, wd = x.shape[-2:] + c = [self._pad[2], ht - self._pad[3], self._pad[0], wd - self._pad[1]] + return x[..., c[0] : c[1], c[2] : c[3]] + + +def forward_interpolate(flow): + flow = flow.detach().cpu().numpy() + dx, dy = flow[0], flow[1] + + ht, wd = dx.shape + x0, y0 = np.meshgrid(np.arange(wd), np.arange(ht)) + + x1 = x0 + dx + y1 = y0 + dy + + x1 = x1.reshape(-1) + y1 = y1.reshape(-1) + dx = dx.reshape(-1) + dy = dy.reshape(-1) + + valid = (x1 > 0) & (x1 < wd) & (y1 > 0) & (y1 < ht) + x1 = x1[valid] + y1 = y1[valid] + dx = dx[valid] + dy = dy[valid] + + flow_x = interpolate.griddata((x1, y1), dx, (x0, y0), method="cubic", fill_value=0) + + flow_y = interpolate.griddata((x1, y1), dy, (x0, y0), method="cubic", fill_value=0) + + flow = np.stack([flow_x, flow_y], axis=0) + return torch.from_numpy(flow).float() + + +def bilinear_sampler(img, coords, mode="bilinear", mask=False): + """Wrapper for grid_sample, uses pixel coordinates""" + H, W = img.shape[-2:] + xgrid, ygrid = coords.split([1, 1], dim=-1) + xgrid = 2 * xgrid / (W - 1) - 1 + ygrid = 2 * ygrid / (H - 1) - 1 + + grid = torch.cat([xgrid, ygrid], dim=-1) + # print(img.size()) + img = F.grid_sample(img, grid, align_corners=True) + + if mask: + mask = (xgrid > -1) & (ygrid > -1) & (xgrid < 1) & (ygrid < 1) + return img, mask.float() + + return img + + +def coords_grid(batch, ht, wd): + coords = torch.meshgrid(torch.arange(ht), torch.arange(wd)) + coords = torch.stack(coords[::-1], dim=0).float() + return coords[None].repeat(batch, 1, 1, 1) + + +def upflow8(flow, mode="bilinear"): + new_size = (8 * flow.shape[2], 8 * flow.shape[3]) + return 8 * F.interpolate(flow, size=new_size, mode=mode, align_corners=True) + + +class CorrBlock: + def __init__(self, fmap1, fmap2, num_levels=4, radius=4): + self.num_levels = num_levels + self.radius = radius + self.corr_pyramid = [] + + # all pairs correlation + corr = CorrBlock.corr(fmap1, fmap2) + + batch, h1, w1, dim, h2, w2 = corr.shape + corr = corr.reshape(batch * h1 * w1, dim, h2, w2) + + self.corr_pyramid.append(corr) + for i in range(self.num_levels - 1): + corr = F.avg_pool2d(corr, 2, stride=2) + self.corr_pyramid.append(corr) + + def __call__(self, coords): + r = self.radius + coords = coords.permute(0, 2, 3, 1) + batch, h1, w1, _ = coords.shape + + out_pyramid = [] + for i in range(self.num_levels): + corr = self.corr_pyramid[i] + dx = torch.linspace(-r, r, 2 * r + 1) + dy = torch.linspace(-r, r, 2 * r + 1) + delta = torch.stack(torch.meshgrid(dy, dx), dim=-1).to(coords.device) + + centroid_lvl = coords.reshape(batch * h1 * w1, 1, 1, 2) / 2**i + delta_lvl = delta.view(1, 2 * r + 1, 2 * r + 1, 2) + coords_lvl = centroid_lvl + delta_lvl + + corr = bilinear_sampler(corr, coords_lvl) + corr = corr.view(batch, h1, w1, -1) + out_pyramid.append(corr) + + out = torch.cat(out_pyramid, dim=-1) + return out.permute(0, 3, 1, 2).contiguous().float() + + @staticmethod + def corr(fmap1, fmap2): + batch, dim, ht, wd = fmap1.shape + fmap1 = fmap1.view(batch, dim, ht * wd) + fmap2 = fmap2.view(batch, dim, ht * wd) + + corr = torch.matmul(fmap1.transpose(1, 2), fmap2) + corr = corr.view(batch, ht, wd, 1, ht, wd) + return corr / torch.sqrt(torch.tensor(dim).float()) + + +class FlowHead(nn.Module): + def __init__(self, input_dim=128, hidden_dim=256): + super(FlowHead, self).__init__() + self.conv1 = nn.Conv2d(input_dim, hidden_dim, 3, padding=1) + self.conv2 = nn.Conv2d(hidden_dim, 2, 3, padding=1) + self.relu = nn.ReLU(inplace=True) + + def forward(self, x): + return self.conv2(self.relu(self.conv1(x))) + + +class ConvGRU(nn.Module): + def __init__(self, hidden_dim=128, input_dim=192 + 128): + super(ConvGRU, self).__init__() + self.convz = nn.Conv2d(hidden_dim + input_dim, hidden_dim, 3, padding=1) + self.convr = nn.Conv2d(hidden_dim + input_dim, hidden_dim, 3, padding=1) + self.convq = nn.Conv2d(hidden_dim + input_dim, hidden_dim, 3, padding=1) + + def forward(self, h, x): + hx = torch.cat([h, x], dim=1) + + z = torch.sigmoid(self.convz(hx)) + r = torch.sigmoid(self.convr(hx)) + q = torch.tanh(self.convq(torch.cat([r * h, x], dim=1))) + + h = (1 - z) * h + z * q + return h + + +class SepConvGRU(nn.Module): + def __init__(self, hidden_dim=128, input_dim=192 + 128): + super(SepConvGRU, self).__init__() + self.convz1 = nn.Conv2d( + hidden_dim + input_dim, hidden_dim, (1, 5), padding=(0, 2) + ) + self.convr1 = nn.Conv2d( + hidden_dim + input_dim, hidden_dim, (1, 5), padding=(0, 2) + ) + self.convq1 = nn.Conv2d( + hidden_dim + input_dim, hidden_dim, (1, 5), padding=(0, 2) + ) + + self.convz2 = nn.Conv2d( + hidden_dim + input_dim, hidden_dim, (5, 1), padding=(2, 0) + ) + self.convr2 = nn.Conv2d( + hidden_dim + input_dim, hidden_dim, (5, 1), padding=(2, 0) + ) + self.convq2 = nn.Conv2d( + hidden_dim + input_dim, hidden_dim, (5, 1), padding=(2, 0) + ) + + def forward(self, h, x): + # horizontal + hx = torch.cat([h, x], dim=1) + z = torch.sigmoid(self.convz1(hx)) + r = torch.sigmoid(self.convr1(hx)) + q = torch.tanh(self.convq1(torch.cat([r * h, x], dim=1))) + h = (1 - z) * h + z * q + + # vertical + hx = torch.cat([h, x], dim=1) + z = torch.sigmoid(self.convz2(hx)) + r = torch.sigmoid(self.convr2(hx)) + q = torch.tanh(self.convq2(torch.cat([r * h, x], dim=1))) + h = (1 - z) * h + z * q + + return h + + +class SmallMotionEncoder(nn.Module): + def __init__(self, args): + super(SmallMotionEncoder, self).__init__() + cor_planes = args.corr_levels * (2 * args.corr_radius + 1) ** 2 + self.convc1 = nn.Conv2d(cor_planes, 96, 1, padding=0) + self.convf1 = nn.Conv2d(2, 64, 7, padding=3) + self.convf2 = nn.Conv2d(64, 32, 3, padding=1) + self.conv = nn.Conv2d(128, 80, 3, padding=1) + + def forward(self, flow, corr): + cor = F.relu(self.convc1(corr)) + flo = F.relu(self.convf1(flow)) + flo = F.relu(self.convf2(flo)) + cor_flo = torch.cat([cor, flo], dim=1) + out = F.relu(self.conv(cor_flo)) + return torch.cat([out, flow], dim=1) + + +class BasicMotionEncoder(nn.Module): + def __init__(self, args): + super(BasicMotionEncoder, self).__init__() + cor_planes = args.corr_levels * (2 * args.corr_radius + 1) ** 2 + self.convc1 = nn.Conv2d(cor_planes, 256, 1, padding=0) + self.convc2 = nn.Conv2d(256, 192, 3, padding=1) + self.convf1 = nn.Conv2d(2, 128, 7, padding=3) + self.convf2 = nn.Conv2d(128, 64, 3, padding=1) + self.conv = nn.Conv2d(64 + 192, 128 - 2, 3, padding=1) + + def forward(self, flow, corr): + cor = F.relu(self.convc1(corr)) + cor = F.relu(self.convc2(cor)) + flo = F.relu(self.convf1(flow)) + flo = F.relu(self.convf2(flo)) + + cor_flo = torch.cat([cor, flo], dim=1) + out = F.relu(self.conv(cor_flo)) + return torch.cat([out, flow], dim=1) + + +class SmallUpdateBlock(nn.Module): + def __init__(self, args, hidden_dim=96): + super(SmallUpdateBlock, self).__init__() + self.encoder = SmallMotionEncoder(args) + self.gru = ConvGRU(hidden_dim=hidden_dim, input_dim=82 + 64) + self.flow_head = FlowHead(hidden_dim, hidden_dim=128) + + def forward(self, net, inp, corr, flow): + motion_features = self.encoder(flow, corr) + inp = torch.cat([inp, motion_features], dim=1) + net = self.gru(net, inp) + delta_flow = self.flow_head(net) + + return net, None, delta_flow + + +class BasicUpdateBlock(nn.Module): + def __init__(self, args, hidden_dim=128, input_dim=128): + super(BasicUpdateBlock, self).__init__() + self.args = args + self.encoder = BasicMotionEncoder(args) + self.gru = SepConvGRU(hidden_dim=hidden_dim, input_dim=128 + hidden_dim) + self.flow_head = FlowHead(hidden_dim, hidden_dim=256) + + self.mask = nn.Sequential( + nn.Conv2d(128, 256, 3, padding=1), + nn.ReLU(inplace=True), + nn.Conv2d(256, 64 * 9, 1, padding=0), + ) + + def forward(self, net, inp, corr, flow, upsample=True): + motion_features = self.encoder(flow, corr) + inp = torch.cat([inp, motion_features], dim=1) + + net = self.gru(net, inp) + delta_flow = self.flow_head(net) + + # scale mask to balence gradients + mask = 0.25 * self.mask(net) + return net, mask, delta_flow + + +class ResidualBlock(nn.Module): + def __init__(self, in_planes, planes, norm_fn="group", stride=1): + super(ResidualBlock, self).__init__() + + self.conv1 = nn.Conv2d( + in_planes, planes, kernel_size=3, padding=1, stride=stride + ) + self.conv2 = nn.Conv2d(planes, planes, kernel_size=3, padding=1) + self.relu = nn.ReLU(inplace=True) + + num_groups = planes // 8 + + if norm_fn == "group": + self.norm1 = nn.GroupNorm(num_groups=num_groups, num_channels=planes) + self.norm2 = nn.GroupNorm(num_groups=num_groups, num_channels=planes) + if not stride == 1: + self.norm3 = nn.GroupNorm(num_groups=num_groups, num_channels=planes) + + elif norm_fn == "batch": + self.norm1 = nn.BatchNorm2d(planes) + self.norm2 = nn.BatchNorm2d(planes) + if not stride == 1: + self.norm3 = nn.BatchNorm2d(planes) + + elif norm_fn == "instance": + self.norm1 = nn.InstanceNorm2d(planes) + self.norm2 = nn.InstanceNorm2d(planes) + if not stride == 1: + self.norm3 = nn.InstanceNorm2d(planes) + + elif norm_fn == "none": + self.norm1 = nn.Sequential() + self.norm2 = nn.Sequential() + if not stride == 1: + self.norm3 = nn.Sequential() + + if stride == 1: + self.downsample = None + + else: + self.downsample = nn.Sequential( + nn.Conv2d(in_planes, planes, kernel_size=1, stride=stride), self.norm3 + ) + + def forward(self, x): + y = x + y = self.relu(self.norm1(self.conv1(y))) + y = self.relu(self.norm2(self.conv2(y))) + + if self.downsample is not None: + x = self.downsample(x) + + return self.relu(x + y) + + +class BottleneckBlock(nn.Module): + def __init__(self, in_planes, planes, norm_fn="group", stride=1): + super(BottleneckBlock, self).__init__() + + self.conv1 = nn.Conv2d(in_planes, planes // 4, kernel_size=1, padding=0) + self.conv2 = nn.Conv2d( + planes // 4, planes // 4, kernel_size=3, padding=1, stride=stride + ) + self.conv3 = nn.Conv2d(planes // 4, planes, kernel_size=1, padding=0) + self.relu = nn.ReLU(inplace=True) + + num_groups = planes // 8 + + if norm_fn == "group": + self.norm1 = nn.GroupNorm(num_groups=num_groups, num_channels=planes // 4) + self.norm2 = nn.GroupNorm(num_groups=num_groups, num_channels=planes // 4) + self.norm3 = nn.GroupNorm(num_groups=num_groups, num_channels=planes) + if not stride == 1: + self.norm4 = nn.GroupNorm(num_groups=num_groups, num_channels=planes) + + elif norm_fn == "batch": + self.norm1 = nn.BatchNorm2d(planes // 4) + self.norm2 = nn.BatchNorm2d(planes // 4) + self.norm3 = nn.BatchNorm2d(planes) + if not stride == 1: + self.norm4 = nn.BatchNorm2d(planes) + + elif norm_fn == "instance": + self.norm1 = nn.InstanceNorm2d(planes // 4) + self.norm2 = nn.InstanceNorm2d(planes // 4) + self.norm3 = nn.InstanceNorm2d(planes) + if not stride == 1: + self.norm4 = nn.InstanceNorm2d(planes) + + elif norm_fn == "none": + self.norm1 = nn.Sequential() + self.norm2 = nn.Sequential() + self.norm3 = nn.Sequential() + if not stride == 1: + self.norm4 = nn.Sequential() + + if stride == 1: + self.downsample = None + + else: + self.downsample = nn.Sequential( + nn.Conv2d(in_planes, planes, kernel_size=1, stride=stride), self.norm4 + ) + + def forward(self, x): + y = x + y = self.relu(self.norm1(self.conv1(y))) + y = self.relu(self.norm2(self.conv2(y))) + y = self.relu(self.norm3(self.conv3(y))) + + if self.downsample is not None: + x = self.downsample(x) + + return self.relu(x + y) + + +class BasicEncoder(nn.Module): + def __init__(self, output_dim=128, norm_fn="batch", dropout=0.0): + super(BasicEncoder, self).__init__() + self.norm_fn = norm_fn + + if self.norm_fn == "group": + self.norm1 = nn.GroupNorm(num_groups=8, num_channels=64) + + elif self.norm_fn == "batch": + self.norm1 = nn.BatchNorm2d(64) + + elif self.norm_fn == "instance": + self.norm1 = nn.InstanceNorm2d(64) + + elif self.norm_fn == "none": + self.norm1 = nn.Sequential() + + self.conv1 = nn.Conv2d(3, 64, kernel_size=7, stride=2, padding=3) + self.relu1 = nn.ReLU(inplace=True) + + self.in_planes = 64 + self.layer1 = self._make_layer(64, stride=1) + self.layer2 = self._make_layer(96, stride=2) + self.layer3 = self._make_layer(128, stride=2) + + # output convolution + self.conv2 = nn.Conv2d(128, output_dim, kernel_size=1) + + self.dropout = None + if dropout > 0: + self.dropout = nn.Dropout2d(p=dropout) + + for m in self.modules(): + if isinstance(m, nn.Conv2d): + nn.init.kaiming_normal_(m.weight, mode="fan_out", nonlinearity="relu") + elif isinstance(m, (nn.BatchNorm2d, nn.InstanceNorm2d, nn.GroupNorm)): + if m.weight is not None: + nn.init.constant_(m.weight, 1) + if m.bias is not None: + nn.init.constant_(m.bias, 0) + + def _make_layer(self, dim, stride=1): + layer1 = ResidualBlock(self.in_planes, dim, self.norm_fn, stride=stride) + layer2 = ResidualBlock(dim, dim, self.norm_fn, stride=1) + layers = (layer1, layer2) + + self.in_planes = dim + return nn.Sequential(*layers) + + def forward(self, x): + # if input is list, combine batch dimension + is_list = isinstance(x, tuple) or isinstance(x, list) + if is_list: + batch_dim = x[0].shape[0] + x = torch.cat(x, dim=0) + + x = self.conv1(x) + x = self.norm1(x) + x = self.relu1(x) + + x = self.layer1(x) + x = self.layer2(x) + x = self.layer3(x) + + x = self.conv2(x) + + if self.training and self.dropout is not None: + x = self.dropout(x) + + if is_list: + x = torch.split(x, [batch_dim, batch_dim], dim=0) + + return x + + +class BasicEncoder1(nn.Module): + def __init__(self, output_dim=128, norm_fn="batch", dropout=0.0): + super(BasicEncoder1, self).__init__() + self.norm_fn = norm_fn + + if self.norm_fn == "group": + self.norm1 = nn.GroupNorm(num_groups=8, num_channels=64) + + elif self.norm_fn == "batch": + self.norm1 = nn.BatchNorm2d(64) + + elif self.norm_fn == "instance": + self.norm1 = nn.InstanceNorm2d(64) + + elif self.norm_fn == "none": + self.norm1 = nn.Sequential() + + self.conv1 = nn.Conv2d(2, 64, kernel_size=7, stride=2, padding=3) + self.relu1 = nn.ReLU(inplace=True) + + self.in_planes = 64 + self.layer1 = self._make_layer(64, stride=1) + self.layer2 = self._make_layer(96, stride=2) + self.layer3 = self._make_layer(128, stride=2) + + # output convolution + self.conv2 = nn.Conv2d(128, output_dim, kernel_size=1) + + self.dropout = None + if dropout > 0: + self.dropout = nn.Dropout2d(p=dropout) + + for m in self.modules(): + if isinstance(m, nn.Conv2d): + nn.init.kaiming_normal_(m.weight, mode="fan_out", nonlinearity="relu") + elif isinstance(m, (nn.BatchNorm2d, nn.InstanceNorm2d, nn.GroupNorm)): + if m.weight is not None: + nn.init.constant_(m.weight, 1) + if m.bias is not None: + nn.init.constant_(m.bias, 0) + + def _make_layer(self, dim, stride=1): + layer1 = ResidualBlock(self.in_planes, dim, self.norm_fn, stride=stride) + layer2 = ResidualBlock(dim, dim, self.norm_fn, stride=1) + layers = (layer1, layer2) + + self.in_planes = dim + return nn.Sequential(*layers) + + def forward(self, x): + # if input is list, combine batch dimension + is_list = isinstance(x, tuple) or isinstance(x, list) + if is_list: + batch_dim = x[0].shape[0] + x = torch.cat(x, dim=0) + + x = self.conv1(x) + x = self.norm1(x) + x = self.relu1(x) + + x = self.layer1(x) + x = self.layer2(x) + x = self.layer3(x) + + x = self.conv2(x) + + if self.training and self.dropout is not None: + x = self.dropout(x) + + if is_list: + x = torch.split(x, [batch_dim, batch_dim], dim=0) + + return x + + +class SmallEncoder(nn.Module): + def __init__(self, output_dim=128, norm_fn="batch", dropout=0.0): + super(SmallEncoder, self).__init__() + self.norm_fn = norm_fn + + if self.norm_fn == "group": + self.norm1 = nn.GroupNorm(num_groups=8, num_channels=32) + + elif self.norm_fn == "batch": + self.norm1 = nn.BatchNorm2d(32) + + elif self.norm_fn == "instance": + self.norm1 = nn.InstanceNorm2d(32) + + elif self.norm_fn == "none": + self.norm1 = nn.Sequential() + + self.conv1 = nn.Conv2d(3, 32, kernel_size=7, stride=2, padding=3) + self.relu1 = nn.ReLU(inplace=True) + + self.in_planes = 32 + self.layer1 = self._make_layer(32, stride=1) + self.layer2 = self._make_layer(64, stride=2) + self.layer3 = self._make_layer(96, stride=2) + + self.dropout = None + if dropout > 0: + self.dropout = nn.Dropout2d(p=dropout) + + self.conv2 = nn.Conv2d(96, output_dim, kernel_size=1) + + for m in self.modules(): + if isinstance(m, nn.Conv2d): + nn.init.kaiming_normal_(m.weight, mode="fan_out", nonlinearity="relu") + elif isinstance(m, (nn.BatchNorm2d, nn.InstanceNorm2d, nn.GroupNorm)): + if m.weight is not None: + nn.init.constant_(m.weight, 1) + if m.bias is not None: + nn.init.constant_(m.bias, 0) + + def _make_layer(self, dim, stride=1): + layer1 = BottleneckBlock(self.in_planes, dim, self.norm_fn, stride=stride) + layer2 = BottleneckBlock(dim, dim, self.norm_fn, stride=1) + layers = (layer1, layer2) + + self.in_planes = dim + return nn.Sequential(*layers) + + def forward(self, x): + # if input is list, combine batch dimension + is_list = isinstance(x, tuple) or isinstance(x, list) + if is_list: + batch_dim = x[0].shape[0] + x = torch.cat(x, dim=0) + + x = self.conv1(x) + x = self.norm1(x) + x = self.relu1(x) + + x = self.layer1(x) + x = self.layer2(x) + x = self.layer3(x) + x = self.conv2(x) + + if self.training and self.dropout is not None: + x = self.dropout(x) + + if is_list: + x = torch.split(x, [batch_dim, batch_dim], dim=0) + + return x + + +################################################## +# RFR is implemented based on RAFT optical flow # +################################################## + + +def backwarp(img, flow): + _, _, H, W = img.size() + + u = flow[:, 0, :, :] + v = flow[:, 1, :, :] + + gridX, gridY = np.meshgrid(np.arange(W), np.arange(H)) + + gridX = torch.tensor( + gridX, + requires_grad=False, + ).cuda() + gridY = torch.tensor( + gridY, + requires_grad=False, + ).cuda() + x = gridX.unsqueeze(0).expand_as(u).float() + u + y = gridY.unsqueeze(0).expand_as(v).float() + v + # range -1 to 1 + x = 2 * (x / (W - 1) - 0.5) + y = 2 * (y / (H - 1) - 0.5) + # stacking X and Y + grid = torch.stack((x, y), dim=3) + # Sample pixels using bilinear interpolation. + imgOut = torch.nn.functional.grid_sample(img, grid, align_corners=True) + + return imgOut + + +class ErrorAttention(nn.Module): + """A three-layer network for predicting mask""" + + def __init__(self, input, output): + super(ErrorAttention, self).__init__() + self.conv1 = nn.Conv2d(input, 32, 5, padding=2) + self.conv2 = nn.Conv2d(32, 32, 3, padding=1) + self.conv3 = nn.Conv2d(38, output, 3, padding=1) + self.prelu1 = nn.PReLU() + self.prelu2 = nn.PReLU() + + def forward(self, x1): + x = self.prelu1(self.conv1(x1)) + x = self.prelu2(torch.cat([self.conv2(x), x1], dim=1)) + x = self.conv3(x) + return x + + +class RFR(nn.Module): + def __init__(self, args): + super(RFR, self).__init__() + self.attention2 = ErrorAttention(6, 1) + self.hidden_dim = hdim = 128 + self.context_dim = cdim = 128 + args.corr_levels = 4 + args.corr_radius = 4 + args.dropout = 0 + self.args = args + + # feature network, context network, and update block + self.fnet = BasicEncoder(output_dim=256, norm_fn="none", dropout=args.dropout) + # self.cnet = BasicEncoder(output_dim=hdim+cdim, norm_fn='none', dropout=args.dropout) + self.update_block = BasicUpdateBlock(self.args, hidden_dim=hdim) + + def freeze_bn(self): + for m in self.modules(): + if isinstance(m, nn.BatchNorm2d): + m.eval() + + def initialize_flow(self, img): + """Flow is represented as difference between two coordinate grids flow = coords1 - coords0""" + N, C, H, W = img.shape + coords0 = coords_grid(N, H // 8, W // 8).to(img.device) + coords1 = coords_grid(N, H // 8, W // 8).to(img.device) + + # optical flow computed as difference: flow = coords1 - coords0 + return coords0, coords1 + + def upsample_flow(self, flow, mask): + """Upsample flow field [H/8, W/8, 2] -> [H, W, 2] using convex combination""" + N, _, H, W = flow.shape + mask = mask.view(N, 1, 9, 8, 8, H, W) + mask = torch.softmax(mask, dim=2) + + up_flow = F.unfold(8 * flow, [3, 3], padding=1) + up_flow = up_flow.view(N, 2, 9, 1, 1, H, W) + + up_flow = torch.sum(mask * up_flow, dim=2) + up_flow = up_flow.permute(0, 1, 4, 2, 5, 3) + return up_flow.reshape(N, 2, 8 * H, 8 * W) + + def forward( + self, image1, image2, iters=12, flow_init=None, upsample=True, test_mode=False + ): + H, W = image1.size()[2:4] + H8 = H // 8 * 8 + W8 = W // 8 * 8 + + if flow_init is not None: + flow_init_resize = F.interpolate( + flow_init, size=(H8 // 8, W8 // 8), mode="nearest" + ) + + flow_init_resize[:, :1] = ( + flow_init_resize[:, :1].clone() * (W8 // 8 * 1.0) / flow_init.size()[3] + ) + flow_init_resize[:, 1:] = ( + flow_init_resize[:, 1:].clone() * (H8 // 8 * 1.0) / flow_init.size()[2] + ) + + if not hasattr(self.args, "not_use_rfr_mask") or ( + hasattr(self.args, "not_use_rfr_mask") + and (not self.args.not_use_rfr_mask) + ): + im18 = F.interpolate(image1, size=(H8 // 8, W8 // 8), mode="bilinear") + im28 = F.interpolate(image2, size=(H8 // 8, W8 // 8), mode="bilinear") + + warp21 = backwarp(im28, flow_init_resize) + error21 = torch.sum(torch.abs(warp21 - im18), dim=1, keepdim=True) + # print('errormin', error21.min(), error21.max()) + f12init = ( + torch.exp( + -self.attention2( + torch.cat([im18, error21, flow_init_resize], dim=1) + ) + ** 2 + ) + * flow_init_resize + ) + else: + flow_init_resize = None + flow_init = torch.zeros( + image1.size()[0], 2, image1.size()[2] // 8, image1.size()[3] // 8 + ).cuda() + error21 = torch.zeros( + image1.size()[0], 1, image1.size()[2] // 8, image1.size()[3] // 8 + ).cuda() + + f12_init = flow_init + # print('None inital flow!') + + image1 = F.interpolate(image1, size=(H8, W8), mode="bilinear") + image2 = F.interpolate(image2, size=(H8, W8), mode="bilinear") + + f12s, f12, f12_init = self.forward_pred( + image1, image2, iters, flow_init_resize, upsample, test_mode + ) + + if hasattr(self.args, "requires_sq_flow") and self.args.requires_sq_flow: + for ii in range(len(f12s)): + f12s[ii] = F.interpolate(f12s[ii], size=(H, W), mode="bilinear") + f12s[ii][:, :1] = f12s[ii][:, :1].clone() / (1.0 * W8) * W + f12s[ii][:, 1:] = f12s[ii][:, 1:].clone() / (1.0 * H8) * H + if self.training: + return f12s + else: + return [f12s[-1]], f12_init + else: + f12[:, :1] = f12[:, :1].clone() / (1.0 * W8) * W + f12[:, 1:] = f12[:, 1:].clone() / (1.0 * H8) * H + + f12 = F.interpolate(f12, size=(H, W), mode="bilinear") + # print('wo!!') + return ( + f12, + f12_init, + error21, + ) + + def forward_pred( + self, image1, image2, iters=12, flow_init=None, upsample=True, test_mode=False + ): + """Estimate optical flow between pair of frames""" + + image1 = image1.contiguous() + image2 = image2.contiguous() + + hdim = self.hidden_dim + cdim = self.context_dim + + # run the feature network + with autocast(device.type, enabled=self.args.mixed_precision): + fmap1, fmap2 = self.fnet([image1, image2]) + fmap1 = fmap1.float() + fmap2 = fmap2.float() + corr_fn = CorrBlock(fmap1, fmap2, radius=self.args.corr_radius) + + # run the context network + with autocast(device.type, enabled=self.args.mixed_precision): + cnet = self.fnet(image1) + net, inp = torch.split(cnet, [hdim, cdim], dim=1) + net = torch.tanh(net) + inp = torch.relu(inp) + + coords0, coords1 = self.initialize_flow(image1) + + if flow_init is not None: + coords1 = coords1 + flow_init + + flow_predictions = [] + for itr in range(iters): + coords1 = coords1.detach() + if itr == 0: + if flow_init is not None: + coords1 = coords1 + flow_init + corr = corr_fn(coords1) # index correlation volume + + flow = coords1 - coords0 + with autocast(device.type, enabled=self.args.mixed_precision): + net, up_mask, delta_flow = self.update_block(net, inp, corr, flow) + + # F(t+1) = F(t) + \Delta(t) + coords1 = coords1 + delta_flow + + # upsample predictions + if up_mask is None: + flow_up = upflow8(coords1 - coords0) + else: + flow_up = self.upsample_flow(coords1 - coords0, up_mask) + + flow_predictions.append(flow_up) + + return flow_predictions, flow_up, flow_init + +####################### WARPING ####################### + + +# expects batched tensors, considered low-level operation +# img: bs, ch, h, w +# flow: bs, xy (pix displace), h, w +def flow_backwarp( + img, flow, resample="bilinear", padding_mode="border", align_corners=False +): + if len(img.shape) != 4: + img = img[None,] + if len(flow.shape) != 4: + flow = flow[None,] + q = ( + 2 + * flow + / torch.tensor( + [ + flow.shape[-2], + flow.shape[-1], + ], + device=flow.device, + dtype=torch.float, + )[None, :, None, None] + ) + q = q + torch.stack( + torch.meshgrid( + torch.linspace(-1, 1, flow.shape[-2]), + torch.linspace(-1, 1, flow.shape[-1]), + ) + )[ + None, + ].to( + flow.device + ) + if img.dtype != q.dtype: + img = img.type(q.dtype) + + return nn.functional.grid_sample( + img, + q.flip(dims=(1,)).permute(0, 2, 3, 1), + mode=resample, # nearest, bicubic, bilinear + padding_mode=padding_mode, # border, zeros, reflection + align_corners=align_corners, + ) + + +backwarp = flow_warp = flow_backwarp + + +# mode: sum, avg, lin, softmax +# lin/softmax w/out metric defaults to avg +# must use gpu, move back to cpu if retain_device +# typical metric: -20 * | img0 - backwarp(img1,flow) | +# From Fannovel16: Changed mode params for common ops. +def flow_forewarp( + img, flow, mode="average", metric=None, mask=False, retain_device=True +): + # setup + #if mode == "sum": + # mode = "summation" + #elif mode == "avg": + # mode = "average" + if mode in ["lin", "linear"]: + #mode = "linear" if metric is not None else "average" + mode = "linear" if metric is not None else "avg" + elif mode in ["sm", "softmax"]: + #mode = "softmax" if metric is not None else "average" + mode = "soft" if metric is not None else "avg" + if len(img.shape) != 4: + img = img[None,] + if len(flow.shape) != 4: + flow = flow[None,] + if metric is not None and len(metric.shape) != 4: + metric = metric[None,] + flow = flow.flip(dims=(1,)) + if img.dtype != torch.float32: + img = img.type(torch.float32) + if flow.dtype != torch.float32: + flow = flow.type(torch.float32) + if metric is not None and metric.dtype != torch.float32: + metric = metric.type(torch.float32) + + # move to gpu if necessary + assert img.device == flow.device + if metric is not None: + assert img.device == metric.device + was_cpu = img.device.type == "cpu" + if was_cpu: + img = img.to("cuda") + flow = flow.to("cuda") + if metric is not None: + metric = metric.to("cuda") + + # add mask + if mask: + bs, ch, h, w = img.shape + img = torch.cat( + [img, torch.ones(bs, 1, h, w, dtype=img.dtype, device=img.device)], dim=1 + ) + + # forward, move back to cpu if desired + ans = FunctionSoftsplat(img, flow, metric, mode) + if was_cpu and retain_device: + ans = ans.cpu() + return ans + + +forewarp = flow_forewarp + + +# resizing utility +def flow_resize(flow, size, mode="nearest", align_corners=False): + # flow: bs,xy,h,w + size = pixel_ij(size, rounding=True) + if flow.dtype != torch.float: + flow = flow.float() + if len(flow.shape) == 3: + flow = flow[None,] + if flow.shape[-2:] == size: + return flow + return ( + nn.functional.interpolate( + flow, + size=size, + mode=mode, + align_corners=align_corners if mode != "nearest" else None, + ) + * torch.tensor( + [b / a for a, b in zip(flow.shape[-2:], size)], + device=flow.device, + )[None, :, None, None] + ) + + +####################### TRADITIONAL ####################### + +# dense +_lucaskanade = lambda a, b: np.moveaxis( + cv2.optflow.calcOpticalFlowSparseToDense( + a, + b, # grid_step=5, sigma=0.5, + ), + 2, + 0, +)[ + None, +] +_farneback = lambda a, b: np.moveaxis( + cv2.calcOpticalFlowFarneback( + a, + b, + None, + 0.6, + 3, + 25, + 7, + 5, + 1.2, + cv2.OPTFLOW_FARNEBACK_GAUSSIAN, + ), + 2, + 0, +)[ + None, +] +_dtvl1_ = cv2.optflow.createOptFlow_DualTVL1() +_dtvl1 = lambda a, b: np.moveaxis( + _dtvl1_.calc( + a, + b, + None, + ), + 2, + 0, +)[ + None, +] +_simple = lambda a, b: np.moveaxis( + cv2.optflow.calcOpticalFlowSF( + a, + b, + 3, + 5, + 5, + ), + 2, + 0, +)[ + None, +] +_pca_ = cv2.optflow.createOptFlow_PCAFlow() +_pca = lambda a, b: np.moveaxis( + _pca_.calc( + a, + b, + None, + ), + 2, + 0, +)[ + None, +] +_drlof = lambda a, b: np.moveaxis( + cv2.optflow.calcOpticalFlowDenseRLOF( + a, + b, + None, + ), + 2, + 0, +)[ + None, +] +_deepflow_ = cv2.optflow.createOptFlow_DeepFlow() +_deepflow = lambda a, b: np.moveaxis( + _deepflow_.calc( + a, + b, + None, + ), + 2, + 0, +)[ + None, +] + + +def cv2flow(a, b, method="lucaskanade", back=False): + if method == "lucaskanade": + f = _lucaskanade + a = a.convert("L").cv2() + b = b.convert("L").cv2() + elif method == "farneback": + f = _farneback + a = a.convert("L").cv2() + b = b.convert("L").cv2() + elif method == "dtvl1": + f = _dtvl1 + a = a.convert("L").cv2() + b = b.convert("L").cv2() + elif method == "simple": + f = _simple + a = a.convert("RGB").cv2() + b = b.convert("RGB").cv2() + elif method == "pca": + f = _pca + a = a.convert("L").cv2() + b = b.convert("L").cv2() + elif method == "drlof": + f = _drlof + a = a.convert("RGB").cv2() + b = b.convert("RGB").cv2() + elif method == "deepflow": + f = _deepflow + a = a.convert("L").cv2() + b = b.convert("L").cv2() + else: + assert 0 + ans = f(b, a) + if back: + ans = np.concatenate( + [ + ans, + f(a, b), + ] + ) + return torch.tensor(ans).flip(dims=(1,)) + + +####################### FLOWNET2 ####################### + + +def flownet2(img_a, img_b, mode="shm", back=False): + # package + url = f"http://localhost:8109/get-flow" + if mode == "shm": + t = time.time() + fn_a = img_a.save(mkfile(f"/dev/shm/_flownet2/{t}/img_a.png")) + fn_b = img_b.save(mkfile(f"/dev/shm/_flownet2/{t}/img_b.png")) + elif mode == "net": + assert False, "not impl" + q = u2d.img2uri(img.pil("RGB")) + q.decode() + resp = requests.get( + url, + params={ + "img_a": fn_a, + "img_b": fn_b, + "mode": mode, + "back": back, + # 'vis': vis, + }, + ) + + # return + ans = {"response": resp} + if resp.status_code == 200: + j = resp.json() + ans["time"] = j["time"] + ans["output"] = { + "flow": torch.tensor(load(j["fn_flow"])), + } + # if vis: + # ans['output']['vis'] = I(j['fn_vis']) + if mode == "shm": + shutil.rmtree(f"/dev/shm/_flownet2/{t}") + return ans + + +####################### VISUALIZATION ####################### + + +class Gridnet(nn.Module): + def __init__(self, channels_0, channels_1, channels_2, total_dropout_p, depth): + super().__init__() + self.channels_0 = ch0 = channels_0 + self.channels_1 = ch1 = channels_1 + self.channels_2 = ch2 = channels_2 + self.total_dropout_p = p = total_dropout_p + self.depth = depth + self.encoders = nn.ModuleList( + [GridnetEncoder(ch0, ch1, ch2) for i in range(self.depth)] + ) + self.decoders = nn.ModuleList( + [GridnetDecoder(ch0, ch1, ch2) for i in range(self.depth)] + ) + self.total_dropout = GridnetTotalDropout(p) + return + + def forward(self, x): + for e, enc in enumerate(self.encoders): + t = [self.total_dropout(i) for i in t] if e != 0 else x + t = enc(t) + for d, dec in enumerate(self.decoders): + t = [self.total_dropout(i) for i in t] + t = dec(t) + return t + + +class GridnetEncoder(nn.Module): + def __init__(self, channels_0, channels_1, channels_2): + super().__init__() + self.channels_0 = ch0 = channels_0 + self.channels_1 = ch1 = channels_1 + self.channels_2 = ch2 = channels_2 + self.resnet_0 = GridnetResnet(ch0) + self.resnet_1 = GridnetResnet(ch1) + self.resnet_2 = GridnetResnet(ch2) + self.downsample_01 = GridnetDownsample(ch0, ch1) + self.downsample_12 = GridnetDownsample(ch1, ch2) + return + + def forward(self, x): + out = [ + None, + ] * 3 + out[0] = self.resnet_0(x[0]) + out[1] = self.resnet_1(x[1]) + self.downsample_01(out[0]) + out[2] = self.resnet_2(x[2]) + self.downsample_12(out[1]) + return out + + +class GridnetDecoder(nn.Module): + def __init__(self, channels_0, channels_1, channels_2): + super().__init__() + self.channels_0 = ch0 = channels_0 + self.channels_1 = ch1 = channels_1 + self.channels_2 = ch2 = channels_2 + self.resnet_0 = GridnetResnet(ch0) + self.resnet_1 = GridnetResnet(ch1) + self.resnet_2 = GridnetResnet(ch2) + self.upsample_10 = GridnetUpsample(ch1, ch0) + self.upsample_21 = GridnetUpsample(ch2, ch1) + return + + def forward(self, x): + out = [ + None, + ] * 3 + out[2] = self.resnet_2(x[2]) + out[1] = self.resnet_1(x[1]) + self.upsample_21(out[2]) + out[0] = self.resnet_0(x[0]) + self.upsample_10(out[1]) + return out + + +class GridnetConverter(nn.Module): + def __init__(self, channels_in, channels_out): + super().__init__() + self.channels_in = cin = channels_in + self.channels_out = cout = channels_out + self.nets = nn.ModuleList( + [ + nn.Sequential( + nn.PReLU(a), + nn.Conv2d(a, b, kernel_size=1, padding=0), + nn.BatchNorm2d(b), + ) + for a, b in zip(cin, cout) + ] + ) + return + + def forward(self, x): + return [m(q) for m, q in zip(self.nets, x)] + + +class GridnetResnet(nn.Module): + def __init__(self, channels): + super().__init__() + self.channels = ch = channels + self.net = nn.Sequential( + nn.PReLU(ch), + nn.Conv2d(ch, ch, kernel_size=3, padding=1), + nn.BatchNorm2d(ch), + nn.PReLU(ch), + nn.Conv2d(ch, ch, kernel_size=3, padding=1), + nn.BatchNorm2d(ch), + ) + return + + def forward(self, x): + return x + self.net(x) + + +class GridnetDownsample(nn.Module): + def __init__(self, channels_in, channels_out): + super().__init__() + self.channels_in = chin = channels_in + self.channels_out = chout = channels_out + self.net = nn.Sequential( + nn.PReLU(chin), + nn.Conv2d(chin, chin, kernel_size=3, padding=1, stride=2), + nn.BatchNorm2d(chin), + nn.PReLU(chin), + nn.Conv2d(chin, chout, kernel_size=3, padding=1), + nn.BatchNorm2d(chout), + ) + return + + def forward(self, x): + return self.net(x) + + +class GridnetUpsample(nn.Module): + def __init__(self, channels_in, channels_out): + super().__init__() + self.channels_in = chin = channels_in + self.channels_out = chout = channels_out + self.net = nn.Sequential( + nn.Upsample(scale_factor=2, mode="nearest"), + nn.PReLU(chin), + nn.Conv2d(chin, chout, kernel_size=3, padding=1), + nn.BatchNorm2d(chout), + nn.PReLU(chout), + nn.Conv2d(chout, chout, kernel_size=3, padding=1), + nn.BatchNorm2d(chout), + ) + return + + def forward(self, x): + return self.net(x) + + +class GridnetTotalDropout(nn.Module): + def __init__(self, p): + super().__init__() + assert 0 <= p < 1 + self.p = p + self.weight = 1 / (1 - p) + return + + def get_drop(self, x): + d = torch.rand(len(x))[:, None, None, None] < self.p + d = (1 - d.float()).to(x.device) * self.weight + return d + + def forward(self, x, force_drop=None): + if force_drop is True: + ans = x * self.get_drop(x) + elif force_drop is False: + ans = x + else: + if self.training: + ans = x * self.get_drop(x) + else: + ans = x + return ans + + +class Interpolator(nn.Module): + def __init__(self, size, mode="bilinear"): + super().__init__() + self.size = size + self.mode = mode + return + + def forward(self, x, is_flow=False): + if x.shape[-2] == self.size: + return x + if len(x.shape) == 4: + # bs,ch,h,w + bs, ch, h, w = x.shape + ans = nn.functional.interpolate( + x, + size=self.size, + mode=self.mode, + align_corners=(False, None)[self.mode == "nearest"], + ) + if is_flow: + ans = ( + ans + * torch.tensor( + [b / a for a, b in zip((h, w), self.size)], + device=ans.device, + )[None, :, None, None] + ) + return ans + elif len(x.shape) == 5: + # bs,k,ch,h,w (merge bs and k) + bs, k, ch, h, w = x.shape + return self.forward( + x.view(bs * k, ch, h, w), + is_flow=is_flow, + ).view(bs, k, ch, *self.size) + else: + assert 0 + + +###################### CANNY ###################### + + +def canny(img, a=100, b=200): + img = I(img).convert("L") + return I(cv2.Canny(img.cv2(), a, b)) + + +# https://www.pyimagesearch.com/2015/04/06/zero-parameter-automatic-canny-edge-detection-with-python-and-opencv/ +def canny_pis(img, sigma=0.33): + # compute the median of the single channel pixel intensities + img = I(img).convert("L").uint8(ch_last=False) + v = np.median(img) + # apply automatic Canny edge detection using the computed median + lower = int(max(0, (1.0 - sigma) * v)) + upper = int(min(255, (1.0 + sigma) * v)) + edged = cv2.Canny(img[0], lower, upper) + # return the edged image + return I(edged) + + +# https://en.wikipedia.org/wiki/Otsu%27s_method +def canny_otsu(img): + img = I(img).convert("L").uint8(ch_last=False) + high, _ = cv2.threshold(img[0], 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU) + low = 0.5 * high + return I(cv2.Canny(img[0], low, high)) + + +def xdog(img, t=1.0, epsilon=0.04, phi=100, sigma=3, k=1.6): + img = I(img).convert("L").uint8(ch_last=False) + grey = np.asarray(img, dtype=np.float32) + g0 = scipy.ndimage.gaussian_filter(grey, sigma) + g1 = scipy.ndimage.gaussian_filter(grey, sigma * k) + + # ans = ((1+p) * g0 - p * g1) / 255 + ans = (g0 - t * g1) / 255 + ans = 1 + np.tanh(phi * (ans - epsilon)) * (ans < epsilon) + return ans + + +def dog(img, t=1.0, sigma=1.0, k=1.6, epsilon=0.01, kernel_factor=4, clip=True): + img = I(img).convert("L").tensor()[None] + kern0 = max(2 * int(sigma * kernel_factor) + 1, 3) + kern1 = max(2 * int(sigma * k * kernel_factor) + 1, 3) + g0 = kornia.filters.gaussian_blur2d( + img, + (kern0, kern0), + (sigma, sigma), + border_type="replicate", + ) + g1 = kornia.filters.gaussian_blur2d( + img, + (kern1, kern1), + (sigma * k, sigma * k), + border_type="replicate", + ) + ans = 0.5 + t * (g1 - g0) - epsilon + ans = ans.clip(0, 1) if clip else ans + return ans[0].numpy() + + +# input: (bs,rgb(a),h,w) or (bs,1,h,w) +# returns: (bs,1,h,w) +def batch_dog(img, t=1.0, sigma=1.0, k=1.6, epsilon=0.01, kernel_factor=4, clip=True): + # to grayscale if needed + bs, ch, h, w = img.shape + if ch in [3, 4]: + img = kornia.color.rgb_to_grayscale(img[:, :3]) + else: + assert ch == 1 + + # calculate dog + kern0 = max(2 * int(sigma * kernel_factor) + 1, 3) + kern1 = max(2 * int(sigma * k * kernel_factor) + 1, 3) + g0 = kornia.filters.gaussian_blur2d( + img, + (kern0, kern0), + (sigma, sigma), + border_type="replicate", + ) + g1 = kornia.filters.gaussian_blur2d( + img, + (kern1, kern1), + (sigma * k, sigma * k), + border_type="replicate", + ) + ans = 0.5 + t * (g1 - g0) - epsilon + ans = ans.clip(0, 1) if clip else ans + return ans + + +############### DERIVED DISTANCES ############### + +# input: (bs,h,w) or (bs,1,h,w) +# returns: (bs,) +# normalized s.t. metric is same across proportional image scales + + +# average of two asymmetric distances +# normalized by diameter and area +def batch_chamfer_distance(gt, pred, block=1024, return_more=False): + t = batch_chamfer_distance_t(gt, pred, block=block) + p = batch_chamfer_distance_p(gt, pred, block=block) + cd = (t + p) / 2 + return cd + + +def batch_chamfer_distance_t(gt, pred, block=1024, return_more=False): + assert gt.device == pred.device and gt.shape == pred.shape + bs, h, w = gt.shape[0], gt.shape[-2], gt.shape[-1] + dpred = batch_edt(pred, block=block) + cd = (gt * dpred).float().mean((-2, -1)) / np.sqrt(h**2 + w**2) + if len(cd.shape) == 2: + assert cd.shape[1] == 1 + cd = cd.squeeze(1) + return cd + + +def batch_chamfer_distance_p(gt, pred, block=1024, return_more=False): + assert gt.device == pred.device and gt.shape == pred.shape + bs, h, w = gt.shape[0], gt.shape[-2], gt.shape[-1] + dgt = batch_edt(gt, block=block) + cd = (pred * dgt).float().mean((-2, -1)) / np.sqrt(h**2 + w**2) + if len(cd.shape) == 2: + assert cd.shape[1] == 1 + cd = cd.squeeze(1) + return cd + + +# normalized by diameter +# always between [0,1] +def batch_hausdorff_distance(gt, pred, block=1024, return_more=False): + assert gt.device == pred.device and gt.shape == pred.shape + bs, h, w = gt.shape[0], gt.shape[-2], gt.shape[-1] + dgt = batch_edt(gt, block=block) + dpred = batch_edt(pred, block=block) + hd = torch.stack( + [ + (dgt * pred).amax(dim=(-2, -1)), + (dpred * gt).amax(dim=(-2, -1)), + ] + ).amax(dim=0).float() / np.sqrt(h**2 + w**2) + if len(hd.shape) == 2: + assert hd.shape[1] == 1 + hd = hd.squeeze(1) + return hd + + +#################### UTILITIES #################### + + +def reset_parameters(model): + for layer in model.children(): + if hasattr(layer, "reset_parameters"): + layer.reset_parameters() + return model + + +def channel_squeeze(x, dim=1): + a = x.shape[:dim] + b = x.shape[dim + 2 :] + return x.reshape(*a, -1, *b) + + +def channel_unsqueeze(x, shape, dim=1): + a = x.shape[:dim] + b = x.shape[dim + 1 :] + return x.reshape(*a, *shape, *b) + + +def default_collate(items, device=None): + return to(dict(torch.utils.data.dataloader.default_collate(items)), device) + + +def to(x, device): + if device is None: + return x + if issubclass(x.__class__, dict): + return dict( + { + k: v.to(device) if isinstance(v, torch.Tensor) else v + for k, v in x.items() + } + ) + if isinstance(x, torch.Tensor): + return x.to(device) + if isinstance(x, np.ndarray): + return torch.tensor(x).to(device) + assert 0, "data not understood" + + +################ PARSING ################ + +from argparse import Namespace + +# args: all args +# bargs: base args +# pargs: data processing args +# largs: data loading args +# margs: model args +# targs: training args + + +# typically used to read dataset filters +def read_filter(fn, cast=None, sort=True, sort_key=None): + if cast is None: + cast = lambda x: x + ans = [cast(line) for line in read(fn).split("\n") if line != ""] + if sort: + return sorted(ans, key=sort_key) + else: + return ans + + +################ FILE MANAGEMENT ################ + + +def mkfile(fn, parents=True, exist_ok=True): + dn = "/".join(fn.split("/")[:-1]) + mkdir(dn, parents=parents, exist_ok=exist_ok) + return fn + + +def mkdir(dn, parents=True, exist_ok=True): + pathlib.Path(dn).mkdir(parents=parents, exist_ok=exist_ok) + return dn if (not dn[-1] == "/" or dn == "/") else dn[:-1] + + +def fstrip(fn, return_more=False): + dspl = fn.split("/") + dn = "/".join(dspl[:-1]) if len(dspl) > 1 else "." + fn = dspl[-1] + fspl = fn.split(".") + if len(fspl) == 1: + bn = fspl[0] + ext = "" + else: + bn = ".".join(fspl[:-1]) + ext = fspl[-1] + if return_more: + return Namespace( + dn=dn, + fn=fn, + path=f"{dn}/{fn}", + bn_path=f"{dn}/{bn}", + bn=bn, + ext=ext, + ) + else: + return bn + + +def read(fn, mode="r"): + with open(fn, mode) as handle: + return handle.read() + + +def write(text, fn, mode="w"): + mkfile(fn, parents=True, exist_ok=True) + with open(fn, mode) as handle: + return handle.write(text) + + +import pickle + + +def dump(obj, fn, mode="wb"): + mkfile(fn, parents=True, exist_ok=True) + with open(fn, mode) as handle: + return pickle.dump(obj, handle) + + +def load(fn, mode="rb"): + with open(fn, mode) as handle: + return pickle.load(handle) + + +import json + + +def jwrite(x, fn, mode="w", indent="\t", sort_keys=False): + mkfile(fn, parents=True, exist_ok=True) + with open(fn, mode) as handle: + return json.dump(x, handle, indent=indent, sort_keys=sort_keys) + + +def jread(fn, mode="r"): + with open(fn, mode) as handle: + return json.load(handle) + + +try: + import yaml + + def ywrite(x, fn, mode="w", default_flow_style=False): + mkfile(fn, parents=True, exist_ok=True) + with open(fn, mode) as handle: + return yaml.dump(x, handle, default_flow_style=default_flow_style) + + def yread(fn, mode="r"): + with open(fn, mode) as handle: + return yaml.safe_load(handle) + +except: + pass + +try: + import pyunpack +except: + pass + +try: + import mysql + import mysql.connector +except: + pass + + +################ MISC ################ + +hakase = "./env/__hakase__.jpg" +if not os.path.isfile(hakase): + hakase = "./__env__/__hakase__.jpg" + + +def mem(units="m"): + return ( + psProcess(os.getpid()).memory_info().rss + / { + "b": 1, + "k": 1e3, + "m": 1e6, + "g": 1e9, + "t": 1e12, + }[units[0].lower()] + ) + + +def chunk(array, length, colwise=True): + if colwise: + return [array[i : i + length] for i in range(0, len(array), length)] + else: + return chunk(array, int(math.ceil(len(array) / length)), colwise=True) + + +def classtree(x): + return inspect.getclasstree(inspect.getmro(x)) + + +################ AESTHETIC ################ + + +class Table: + def __init__( + self, + table, + delimiter=" ", + orientation="br", + double_colon=True, + ): + self.delimiter = delimiter + self.orientation = orientation + self.t = Table.parse(table, delimiter, orientation, double_colon) + return + + # rendering + def __str__(self): + return self.render() + + def __repr__(self): + return self.render() + + def render(self): + # set up empty entry + empty = ("", Table._spec(self.orientation, transpose=False)) + + # calculate table size + t = copy.deepcopy(self.t) + totalrows = len(t) + totalcols = [len(r) for r in t] + assert min(totalcols) == max(totalcols) + totalcols = totalcols[0] + + # string-ify + for i in range(totalrows): + for j in range(totalcols): + x, s = t[i][j] + sp = s[11] + if sp: + x = eval(f'f"{{{x}{sp}}}"') + Table._put((str(x), s), t, (i, j), empty) + + # expand delimiters + _repl = ( + lambda s: s[:2] + (1, 0, 0, 0, 0) + s[7:10] + (1,) + s[11:] + if s[2] + else s[:2] + (0, 0, 0, 0, 0) + s[7:10] + (1,) + s[11:] + ) + for i, row in enumerate(t): + for j, (x, s_own) in enumerate(row): + # expand delim_up(^) + if s_own[3]: + u, v = i, j + while 0 <= u: + _, s = t[u][v] + if (i, j) != (u, v) and (s[2] and not s[10]): + break + Table._put((x, _repl(s)), t, (u, v), empty) + u -= 1 + + # expand delim_down(v) + if s_own[4]: + u, v = i, j + while u < totalrows: + _, s = t[u][v] + if (i, j) != (u, v) and (s[2] and not s[10]): + break + Table._put((x, _repl(s)), t, (u, v), empty) + u += 1 + + # expand delim_right(>) + if s_own[5]: + u, v = i, j + while v < totalcols: + _, s = t[u][v] + if (i, j) != (u, v) and (s[2] and not s[10]): + break + Table._put((x, _repl(s)), t, (u, v), empty) + v += 1 + + # expand delim_left(<) + if s_own[6]: + u, v = i, j + while 0 <= v: + _, s = t[u][v] + if (i, j) != (u, v) and (s[2] and not s[10]): + break + Table._put((x, _repl(s)), t, (u, v), empty) + v -= 1 + + # justification calculation + widths = [ + 0, + ] * totalcols # j + heights = [ + 0, + ] * totalrows # i + for i, row in enumerate(t): + for j, (x, s) in enumerate(row): + # height caclulation + heights[i] = max(heights[i], x.count("\n")) + + # width calculation; non-delim fillers no contribution + if s[2] or not s[10]: + w = max(len(q) for q in x.split("\n")) + widths[j] = max(widths[j], w) + # no newline ==> height=1 + heights = [h + 1 for h in heights] + + # render table + rend = [] + roff = 0 + for i, row in enumerate(t): + for j, (x, s) in enumerate(row): + w, h = widths[j], heights[i] + + # expand fillers and delimiters + if s[2] or s[10]: + xs = x.split("\n") + xw0 = min(len(l) for l in xs) + xw1 = max(len(l) for l in xs) + xh = len(xs) + if (xw0 == xw1 == w) and (xh == h): + pass + elif xw0 == xw1 == w: + x = "\n".join( + [ + xs[0], + ] + * h + ) + elif xh == h: + x = "\n".join([(l[0] if l else "") * w for l in xs]) + else: + x = x[0] if x else " " + x = "\n".join( + [ + x * w, + ] + * h + ) + + # justify horizontally + x = [l.rjust(w) if s[0] else l.ljust(w) for l in x.split("\n")] + + # justify vertically + plus = [ + " " * w, + ] * (h - len(x)) + x = plus + x if not s[1] else x + plus + + # input to table + for r, xline in enumerate(x): + Table._put(xline, rend, (roff + r, j), None) + roff += h + + # return rendered string + return "\n".join(["".join(r) for r in rend]) + + # parsing + def _spec(s, transpose=False): + if ":" in s: + i = s.index(":") + sp = s[i:] + s = s[:i] + else: + sp = "" + s = s.lower() + return ( + int("r" in s), # 0:: 0:left(l) 1:right(r) + int("t" in s), # 1:: 0:bottom(b) 1:top(t) + int(any([i in s for i in [".", "<", ">", "^", "v"]])), # 2:: delim_here(.) + int("^" in s if not transpose else "<" in s), # 3:: delim_up(^) + int("v" in s if not transpose else ">" in s), # 4:: delim_down(v) + int(">" in s if not transpose else "v" in s), # 5:: delim_right(>) + int("<" in s if not transpose else "^" in s), # 6:: delim_left(<) + int("+" in s), # 7:: subtable(+) + int("-" in s if not transpose else "|" in s), # 8:: subtable_horiz(-) + int("|" in s if not transpose else "-" in s), # 9:: subtable_vert(|) + int("_" in s), # 10:: fill(_); if delim, overwrite; else fit + sp, # 11:: special(:) f-string for numbers + ) + + def _put(obj, t, ij, empty): + i, j = ij + while i >= len(t): + t.append([]) + while j >= len(t[i]): + t[i].append(empty) + t[i][j] = obj + return + + def parse( + table, + delimiter=" ", + orientation="br", + double_colon=True, + ): + # disabling transpose + transpose = False + + # set up empty entry + empty = ("", Table._spec(orientation, transpose)) + + # transpose + t = [] + for i, row in enumerate(table): + for j, item in enumerate(row): + ij = (i, j) if not transpose else (j, i) + if type(item) == tuple and len(item) == 2 and type(item[1]) == str: + item = (item[0], Table._spec(item[1], transpose)) + elif double_colon and type(item) == str and "::" in item: + x, s = item.split("::") + item = (x, Table._spec(s, transpose)) + else: + item = (item, Table._spec(orientation, transpose)) + Table._put(item, t, ij, empty) + + # normalization + maxcol = 0 + maxrow = len(t) + for i, row in enumerate(t): + # take element number into account + maxcol = max(maxcol, len([i for i in row if not i[1][2]])) + + # take subtables into account + for j, (x, s) in enumerate(row): + if s[7]: + r = len(x) + maxrow = max(maxrow, i + r) + c = max(len(q) for q in x) + maxcol = max(maxcol, j + c) + elif s[8]: + c = len(x) + maxcol = max(maxcol, j + c) + elif s[9]: + r = len(x) + maxrow = max(maxrow, i + r) + totalcols = 2 * maxcol + 1 + totalrows = maxrow + t += [[]] * (totalrows - len(t)) + newt = [] + delim = (delimiter, Table._spec("._" + orientation, transpose)) + for i, row in enumerate(t): + wasd = False + tcount = 0 + for j in range(totalcols): + item = t[i][tcount] if tcount < len(t[i]) else empty + isd = item[1][2] + if wasd and isd: + Table._put(empty, newt, (i, j), empty) + wasd = False + elif wasd and not isd: + Table._put(item, newt, (i, j), empty) + tcount += 1 + wasd = False + elif not wasd and isd: + Table._put(item, newt, (i, j), empty) + tcount += 1 + wasd = True + elif not wasd and not isd: + Table._put(delim, newt, (i, j), empty) + wasd = True + t = newt + + # normalization: add dummy last column for delimiter + for row in t: + row.append(empty) + + # expand subtables + delim_cols = [i for i in range(totalcols) if i % 2 == 0] + while True: + # find a table + ij = None + for i, row in enumerate(t): + for j, item in enumerate(row): + st, s = item + if s[7]: + ij = i, j, 7, st, s + break + elif s[8]: + ij = i, j, 8, st, s + break + elif s[9]: + ij = i, j, 9, st, s + break + if ij is not None: + break + if ij is None: + break + + # replace its specs + i, j, k, st, s = ij + s = list(s) + s[7] = s[8] = s[9] = 0 + s = tuple(s) + + # expand it + if k == 7: # 2d table + for x, row in enumerate(st): + for y, obj in enumerate(row): + a = i + x if not transpose else i + y + b = j + 2 * y if not transpose else j + 2 * x + Table._put((obj, s), t, (a, b), None) + if k == 8: # subtable_horiz + for y, obj in enumerate(st): + Table._put((obj, s), t, (i, j + 2 * y), None) + if k == 9: # subtable_vert + for x, obj in enumerate(st): + Table._put((obj, s), t, (i + x, j), None) + + # return, finally + return t + + +class Resnet(nn.Module): + def __init__(self, channels): + super().__init__() + self.channels = ch = channels + self.net = nn.Sequential( + nn.PReLU(ch), + nn.Conv2d(ch, ch, kernel_size=3, padding=1), + nn.BatchNorm2d(ch), + nn.PReLU(ch), + nn.Conv2d(ch, ch, kernel_size=3, padding=1), + nn.BatchNorm2d(ch), + ) + return + + def forward(self, x): + return x + self.net(x) + + +class Synthesizer(nn.Module): + def __init__( + self, size, channels_image, channels_flow, channels_mask, channels_feature + ): + super().__init__() + self.size = size + self.diam = diam(self.size) + self.channels_image = cimg = channels_image + self.channels_flow = cflow = channels_flow + self.channels_mask = cmask = channels_mask + self.channels_feature = cfeat = channels_feature + self.channels = ch = cimg + cflow // 2 + cmask + cfeat + self.interpolator = Interpolator(self.size, mode="bilinear") + self.net = nn.Sequential( + nn.Conv2d(ch + 3, 64, kernel_size=1, padding=0), + Resnet(64), + nn.Sequential( + nn.PReLU(64), + nn.Conv2d(64, 32, kernel_size=3, padding=1), + nn.BatchNorm2d(32), + ), + Resnet(32), + nn.Sequential( + nn.PReLU(32), + nn.Conv2d(32, 16, kernel_size=3, padding=1), + nn.BatchNorm2d(16), + ), + Resnet(16), + nn.Sequential( + nn.PReLU(16), + nn.Conv2d(16, 3, kernel_size=3, padding=1), + ), + ) + return + + def forward(self, images, flows, masks, features, return_more=False): + itp = self.interpolator + images = [ + (images[0] + images[1]) / 2, + ] + images + logimgs = [itp(pixel_logit(i[:, :3])) for i in images] + cat = torch.cat( + [ + *logimgs, + *[itp(f).norm(dim=1, keepdim=True) / self.diam for f in flows], + *[itp(m) for m in masks], + *[itp(f) for f in features], + ], + dim=1, + ) + residual = self.net(cat) + return torch.sigmoid(logimgs[0] + 0.5 * residual), ( + locals() if return_more else None + ) + + +class FlowZMetric(nn.Module): + def __init__(self): + super().__init__() + return + + def forward(self, img0, img1, flow0, flow1, return_more=False): + # B(i0,f0) = i1 + # B(i1,f1) = i0 + # F(x,f0,z0) + # F(x,f1,z1) + img0 = kornia.color.rgb_to_lab(img0[:, :3]) + img1 = kornia.color.rgb_to_lab(img1[:, :3]) + return [ + -0.1 * (img1 - flow_backwarp(img0, flow0)).norm(dim=1, keepdim=True), # z0 + -0.1 * (img0 - flow_backwarp(img1, flow1)).norm(dim=1, keepdim=True), # z1 + ], (locals() if return_more else None) + + +class NEDT(nn.Module): + def __init__(self): + super().__init__() + return + + def forward( + self, + img, + t=2.0, + sigma_factor=1 / 540, + k=1.6, + epsilon=0.01, + kernel_factor=4, + exp_factor=540 / 15, + return_more=False, + ): + with torch.no_grad(): + dog = batch_dog( + img, + t=t, + sigma=img.shape[-2] * sigma_factor, + k=k, + epsilon=epsilon, + kernel_factor=kernel_factor, + clip=False, + ) + edt = batch_edt((dog > 0.5).float()) + ans = 1 - (-edt * exp_factor / max(edt.shape[-2:])).exp() + return ans, (locals() if return_more else None) + + +class HalfWarper(nn.Module): + def __init__(self): + super().__init__() + self.channels_image = 4 * 3 + self.channels_flow = 2 * 2 + self.channels_mask = 2 * 1 + self.channels = self.channels_image + self.channels_flow + self.channels_mask + + def morph_open(self, x, k): + if k == 0: + return x + else: + with torch.no_grad(): + return kornia.morphology.opening(x, torch.ones(k, k, device=x.device)) + + def forward(self, img0, img1, flow0, flow1, z0, z1, k, t=0.5, return_more=False): + # forewarps + flow0_ = (1 - t) * flow0 + flow1_ = t * flow1 + f01 = forewarp(img0, flow1_, mode="sm", metric=z1, mask=True) + f10 = forewarp(img1, flow0_, mode="sm", metric=z0, mask=True) + f01i, f01m = f01[:, :-1], self.morph_open(f01[:, -1:], k=k) + f10i, f10m = f10[:, :-1], self.morph_open(f10[:, -1:], k=k) + + # base guess + base0 = f01m * f01i + (1 - f01m) * f10i + base1 = f10m * f10i + (1 - f10m) * f01i + ans = [ + [ # images + base0, + base1, + f01i, + f10i, + ], + [ # flows + flow0_, + flow1_, + ], + [ # masks + f01m, + f10m, + ], + ] + return ans, (locals() if return_more else None) + + +class ResnetFeatureExtractor(nn.Module): + def __init__(self, inferserve_query, size_in=None): + super().__init__() + self.inferserve_query = iq = inferserve_query + self.size_in = si = size_in + if iq[0] == "torchvision": + # use pytorch pretrained resnet50 + self.base_hparams = None + resnet = tv.models.resnet50(pretrained=True) + + self.resize = T.Resize(256) + self.resnet_preprocess = T.Normalize( + mean=[0.485, 0.456, 0.406], + std=[0.229, 0.224, 0.225], + ) + self.conv1 = resnet.conv1 + self.bn1 = resnet.bn1 + self.relu = resnet.relu # 64ch, 128p (assuming 256p input) + self.maxpool = resnet.maxpool + self.layer1 = resnet.layer1 # 256ch, 64p + self.layer2 = resnet.layer2 # 512ch, 32p + else: + base = userving.infer_model_load(*iq).eval() + self.base_hparams = base.hparams + + self.resize = T.Resize(base.hparams.largs.size) + self.resnet_preprocess = base.resnet_preprocess + self.conv1 = base.resnet.conv1 + self.bn1 = base.resnet.bn1 + self.relu = base.resnet.relu # 64ch, 128p (assuming 256p input) + self.maxpool = base.resnet.maxpool + self.layer1 = base.resnet.layer1 # 256ch, 64p + self.layer2 = base.resnet.layer2 # 512ch, 32p + if self.size_in is None: + self.sizes_out = None + else: + s = self.resize.size + self.sizes_out = [ + pixel_ij( + rescale_dry(si, (s // 2) / si[0]), rounding="ceil" + ), # conv1, 128p + pixel_ij( + rescale_dry(si, (s // 4) / si[0]), rounding="ceil" + ), # layer1, 64p + pixel_ij( + rescale_dry(si, (s // 8) / si[0]), rounding="ceil" + ), # layer2, 32p + ] + self.channels = [ + 64, + 256, + 512, + ] + return + + def forward(self, x, force_sizes_out=False, return_more=False): + ans = [] + x = x[:, :3] + x = self.resize(x) + x = self.resnet_preprocess(x) + x = self.conv1(x) + x = self.bn1(x) + x = self.relu(x) + ans.append(x) # conv1 + x = self.maxpool(x) + x = self.layer1(x) + ans.append(x) # layer1 + x = self.layer2(x) + ans.append(x) # layer2 + if force_sizes_out or (self.sizes_out is None): + self.sizes_out = [tuple(q.shape[-2:]) for q in ans] + return ans, (locals() if return_more else None) + + +class NetNedt(nn.Module): + def __init__(self): + super().__init__() + chin = 3 + 1 + 4 + 4 + 1 + 1 + ch = 16 + chout = 1 + self.net = nn.Sequential( + nn.PReLU(chin), + nn.Conv2d(chin, ch, kernel_size=3, padding=1), + nn.BatchNorm2d(ch), + nn.PReLU(ch), + nn.Conv2d(ch, ch, kernel_size=3, padding=1), + nn.BatchNorm2d(ch), + nn.PReLU(ch), + nn.Conv2d(ch, chout, kernel_size=3, padding=1), + ) + return + + def forward(self, out_base, out_base_nedt, hw_imgs, hw_masks, return_more=False): + cat = torch.cat( + [ + out_base, # 3 + out_base_nedt, # 1 + hw_imgs[0], # 4 + hw_imgs[1], # 4 + hw_masks[0], # 1 + hw_masks[1], # 1 + ], + dim=1, + ) + log = pixel_logit(cat.clip(0, 1)) + ans = torch.sigmoid(self.net(log)) + return ans, (locals() if return_more else None) + + +class NetTail(nn.Module): + def __init__(self): + super().__init__() + chin = 3 + 1 + 1 + ch = 16 + chout = 3 + self.net = nn.Sequential( + nn.PReLU(chin), + nn.Conv2d(chin, ch, kernel_size=3, padding=1), + nn.BatchNorm2d(ch), + nn.PReLU(ch), + nn.Conv2d(ch, ch, kernel_size=3, padding=1), + nn.BatchNorm2d(ch), + nn.PReLU(ch), + nn.Conv2d(ch, ch, kernel_size=3, padding=1), + nn.BatchNorm2d(ch), + nn.PReLU(ch), + nn.Conv2d(ch, chout, kernel_size=3, padding=1), + ) + return + + def forward(self, out_base, out_base_nedt, pred_nedt, return_more=False): + cat = torch.cat( + [ + out_base, # 3 + out_base_nedt, # 1 + pred_nedt, # 1 + ], + dim=1, + ) + log = pixel_logit(cat.clip(0, 1)) + ans = torch.sigmoid(log[:, :3] + self.net(log)) + return ans, (locals() if return_more else None) + + +class SoftsplatLite(nn.Module): + def __init__(self): + super().__init__() + self.feature_extractor = ResnetFeatureExtractor( + ("torchvision", "resnet50"), + (540, 960), + ) + self.z_metric = FlowZMetric() + self.flow_downsamplers = [ + Interpolator(s, mode="bilinear") for s in self.feature_extractor.sizes_out + ] + self.gridnet_converter = GridnetConverter( + self.feature_extractor.channels, + [32, 64, 128], + ) + self.gridnet = Gridnet( + *[32, 64, 128], + total_dropout_p=0.0, + depth=1, # equivalent to u-net + ) + self.nedt = NEDT() + self.half_warper = HalfWarper() + self.synthesizer = Synthesizer( + (540, 960), + self.half_warper.channels_image, + self.half_warper.channels_flow, + self.half_warper.channels_mask, + self.gridnet.channels_0, + ) + return + + def forward(self, x, t=0.5, k=5, return_more=False): + rm = return_more + flow0, flow1 = x["flows"].swapaxes(0, 1) + img0, img1 = x["images"][:, 0], x["images"][:, -1] + (z0, z1), locs_z = self.z_metric(img0, img1, flow0, flow1, return_more=rm) + img0 = torch.cat([img0, self.nedt(img0)[0]], dim=1) + img1 = torch.cat([img1, self.nedt(img1)[0]], dim=1) + + # images and flows + (hw_imgs, hw_flows, hw_masks), locs_hw = self.half_warper( + img0, + img1, + flow0, + flow1, + z0, + z1, + k, + t=t, + return_more=rm, + ) + + # features + feats0, locs_fe0 = self.feature_extractor(img0, return_more=rm) + feats1, locs_fe1 = self.feature_extractor(img1, return_more=rm) + warps = [] + for ft0, ft1, ds in zip(feats0, feats1, self.flow_downsamplers): + (w, _, _), _ = self.half_warper( + ft0, + ft1, + ds(flow0, 1), + ds(flow1, 1), + ds(z0), + ds(z1), + k, + t=t, + ) + warps.append((w[0] + w[1]) / 2) + feats = self.gridnet(self.gridnet_converter(warps)) + + # synthesis + pred, locs_synth = self.synthesizer( + hw_imgs, + hw_flows, + hw_masks, + [ + feats[0], + ], + return_more=rm, + ) + return pred, (locals() if rm else None) + + +class DTM(nn.Module): + def __init__(self): + super().__init__() + self.net_nedt = NetNedt() + self.net_tail = NetTail() + self.nedt = NEDT() + return + + def forward(self, x, out_base, locs_base, return_more=False): + rm = return_more + with torch.no_grad(): + out_base_nedt, locs_base_nedt = self.nedt(out_base, return_more=rm) + hw_imgs, hw_masks = locs_base["hw_imgs"], locs_base["hw_masks"] + pred_nedt, locs_nedt = self.net_nedt( + out_base, out_base_nedt, hw_imgs, hw_masks, return_more=rm + ) + pred, locs_tail = self.net_tail( + out_base, out_base_nedt, pred_nedt.clone().detach(), return_more=rm + ) + return torch.cat([pred, pred_nedt], dim=1), (locals() if rm else None) + + +class RAFT(nn.Module): + def __init__(self, path="/workspace/tensorrt/models/anime_interp_full.ckpt"): + super().__init__() + self.raft = RFR( + Namespace( + small=False, + mixed_precision=False, + ) + ) + if path is not None: + sd = torch.load(path)["model_state_dict"] + self.raft.load_state_dict( + { + k[len("module.flownet.") :]: v + for k, v in sd.items() + if k.startswith("module.flownet.") + }, + strict=False, + ) + return + + def forward(self, img0, img1, flow0=None, iters=12, return_more=False): + if flow0 is not None: + flow0 = flow0.flip(dims=(1,)) + out = self.raft(img1, img0, iters=iters, flow_init=flow0) + return out[0].flip(dims=(1,)), (locals() if return_more else None) diff --git a/comfyui-frame-interpolation/vfi_models/film/__init__.py b/comfyui-frame-interpolation/vfi_models/film/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..1f89f1bdc63d149a36c72614b3f1c7ed7ffa7962 --- /dev/null +++ b/comfyui-frame-interpolation/vfi_models/film/__init__.py @@ -0,0 +1,113 @@ +import torch +from comfy.model_management import get_torch_device, soft_empty_cache +import bisect +import numpy as np +import typing +from vfi_utils import InterpolationStateList, load_file_from_github_release, preprocess_frames, postprocess_frames +import pathlib +import gc + +MODEL_TYPE = pathlib.Path(__file__).parent.name +DEVICE = get_torch_device() +def inference(model, img_batch_1, img_batch_2, inter_frames): + results = [ + img_batch_1, + img_batch_2 + ] + + idxes = [0, inter_frames + 1] + remains = list(range(1, inter_frames + 1)) + + splits = torch.linspace(0, 1, inter_frames + 2) + + for _ in range(len(remains)): + starts = splits[idxes[:-1]] + ends = splits[idxes[1:]] + distances = ((splits[None, remains] - starts[:, None]) / (ends[:, None] - starts[:, None]) - .5).abs() + matrix = torch.argmin(distances).item() + start_i, step = np.unravel_index(matrix, distances.shape) + end_i = start_i + 1 + + x0 = results[start_i].to(DEVICE) + x1 = results[end_i].to(DEVICE) + dt = x0.new_full((1, 1), (splits[remains[step]] - splits[idxes[start_i]])) / (splits[idxes[end_i]] - splits[idxes[start_i]]) + + with torch.no_grad(): + prediction = model(x0, x1, dt) + insert_position = bisect.bisect_left(idxes, remains[step]) + idxes.insert(insert_position, remains[step]) + results.insert(insert_position, prediction.clamp(0, 1).float()) + del remains[step] + + return [tensor.flip(0) for tensor in results] + +class FILM_VFI: + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "ckpt_name": (["film_net_fp32.pt"], ), + "frames": ("IMAGE", ), + "clear_cache_after_n_frames": ("INT", {"default": 10, "min": 1, "max": 1000}), + "multiplier": ("INT", {"default": 2, "min": 2, "max": 1000}), + }, + "optional": { + "optional_interpolation_states": ("INTERPOLATION_STATES", ) + } + } + + RETURN_TYPES = ("IMAGE", ) + FUNCTION = "vfi" + CATEGORY = "ComfyUI-Frame-Interpolation/VFI" + + def vfi( + self, + ckpt_name: typing.AnyStr, + frames: torch.Tensor, + clear_cache_after_n_frames = 10, + multiplier: typing.SupportsInt = 2, + optional_interpolation_states: InterpolationStateList = None, + **kwargs + ): + interpolation_states = optional_interpolation_states + model_path = load_file_from_github_release(MODEL_TYPE, ckpt_name) + model = torch.jit.load(model_path, map_location='cpu') + model.eval() + model = model.to(DEVICE) + dtype = torch.float32 + + frames = preprocess_frames(frames) + number_of_frames_processed_since_last_cleared_cuda_cache = 0 + output_frames = [] + + if type(multiplier) == int: + multipliers = [multiplier] * len(frames) + else: + multipliers = list(map(int, multiplier)) + multipliers += [2] * (len(frames) - len(multipliers) - 1) + for frame_itr in range(len(frames) - 1): # Skip the final frame since there are no frames after it + if interpolation_states is not None and interpolation_states.is_frame_skipped(frame_itr): + continue + #Ensure that input frames are in fp32 - the same dtype as model + frame_0 = frames[frame_itr:frame_itr+1].to(DEVICE).float() + frame_1 = frames[frame_itr+1:frame_itr+2].to(DEVICE).float() + relust = inference(model, frame_0, frame_1, multipliers[frame_itr] - 1) + output_frames.extend([frame.detach().cpu().to(dtype=dtype) for frame in relust[:-1]]) + + number_of_frames_processed_since_last_cleared_cuda_cache += 1 + # Try to avoid a memory overflow by clearing cuda cache regularly + if number_of_frames_processed_since_last_cleared_cuda_cache >= clear_cache_after_n_frames: + print("Comfy-VFI: Clearing cache...", end = ' ') + soft_empty_cache() + number_of_frames_processed_since_last_cleared_cuda_cache = 0 + print("Done cache clearing") + gc.collect() + + output_frames.append(frames[-1:].to(dtype=dtype)) # Append final frame + output_frames = [frame.cpu() for frame in output_frames] #Ensure all frames are in cpu + out = torch.cat(output_frames, dim=0) + # clear cache for courtesy + print("Comfy-VFI: Final clearing cache...", end = ' ') + soft_empty_cache() + print("Done cache clearing") + return (postprocess_frames(out), ) diff --git a/comfyui-frame-interpolation/vfi_models/film/__pycache__/__init__.cpython-310.pyc b/comfyui-frame-interpolation/vfi_models/film/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c6312b237673264f892b34a49ca5446b793d0a72 Binary files /dev/null and b/comfyui-frame-interpolation/vfi_models/film/__pycache__/__init__.cpython-310.pyc differ diff --git a/comfyui-frame-interpolation/vfi_models/film/film_arch.py b/comfyui-frame-interpolation/vfi_models/film/film_arch.py new file mode 100644 index 0000000000000000000000000000000000000000..a527e842f8e97d2c0f2c6997d8fa4d3134e59167 --- /dev/null +++ b/comfyui-frame-interpolation/vfi_models/film/film_arch.py @@ -0,0 +1,798 @@ +""" +https://github.com/dajes/frame-interpolation-pytorch/blob/main/feature_extractor.py +https://github.com/dajes/frame-interpolation-pytorch/blob/main/fusion.py +https://github.com/dajes/frame-interpolation-pytorch/blob/main/interpolator.py +https://github.com/dajes/frame-interpolation-pytorch/blob/main/pyramid_flow_estimator.py +https://github.com/dajes/frame-interpolation-pytorch/blob/main/util.py +""" + +"""PyTorch layer for extracting image features for the film_net interpolator. + +The feature extractor implemented here converts an image pyramid into a pyramid +of deep features. The feature pyramid serves a similar purpose as U-Net +architecture's encoder, but we use a special cascaded architecture described in +Multi-view Image Fusion [1]. + +For comprehensiveness, below is a short description of the idea. While the +description is a bit involved, the cascaded feature pyramid can be used just +like any image feature pyramid. + +Why cascaded architeture? +========================= +To understand the concept it is worth reviewing a traditional feature pyramid +first: *A traditional feature pyramid* as in U-net or in many optical flow +networks is built by alternating between convolutions and pooling, starting +from the input image. + +It is well known that early features of such architecture correspond to low +level concepts such as edges in the image whereas later layers extract +semantically higher level concepts such as object classes etc. In other words, +the meaning of the filters in each resolution level is different. For problems +such as semantic segmentation and many others this is a desirable property. + +However, the asymmetric features preclude sharing weights across resolution +levels in the feature extractor itself and in any subsequent neural networks +that follow. This can be a downside, since optical flow prediction, for +instance is symmetric across resolution levels. The cascaded feature +architecture addresses this shortcoming. + +How is it built? +================ +The *cascaded* feature pyramid contains feature vectors that have constant +length and meaning on each resolution level, except few of the finest ones. The +advantage of this is that the subsequent optical flow layer can learn +synergically from many resolutions. This means that coarse level prediction can +benefit from finer resolution training examples, which can be useful with +moderately sized datasets to avoid overfitting. + +The cascaded feature pyramid is built by extracting shallower subtree pyramids, +each one of them similar to the traditional architecture. Each subtree +pyramid S_i is extracted starting from each resolution level: + +image resolution 0 -> S_0 +image resolution 1 -> S_1 +image resolution 2 -> S_2 +... + +If we denote the features at level j of subtree i as S_i_j, the cascaded pyramid +is constructed by concatenating features as follows (assuming subtree depth=3): + +lvl +feat_0 = concat( S_0_0 ) +feat_1 = concat( S_1_0 S_0_1 ) +feat_2 = concat( S_2_0 S_1_1 S_0_2 ) +feat_3 = concat( S_3_0 S_2_1 S_1_2 ) +feat_4 = concat( S_4_0 S_3_1 S_2_2 ) +feat_5 = concat( S_5_0 S_4_1 S_3_2 ) + .... + +In above, all levels except feat_0 and feat_1 have the same number of features +with similar semantic meaning. This enables training a single optical flow +predictor module shared by levels 2,3,4,5... . For more details and evaluation +see [1]. + +[1] Multi-view Image Fusion, Trinidad et al. 2019 +""" +from typing import List + +import torch +from torch import nn +from torch.nn import functional as F + + +class SubTreeExtractor(nn.Module): + """Extracts a hierarchical set of features from an image. + + This is a conventional, hierarchical image feature extractor, that extracts + [k, k*2, k*4... ] filters for the image pyramid where k=options.sub_levels. + Each level is followed by average pooling. + """ + + def __init__(self, in_channels=3, channels=64, n_layers=4): + super().__init__() + convs = [] + for i in range(n_layers): + convs.append(nn.Sequential( + conv(in_channels, (channels << i), 3), + conv((channels << i), (channels << i), 3) + )) + in_channels = channels << i + self.convs = nn.ModuleList(convs) + + def forward(self, image: torch.Tensor, n: int) -> List[torch.Tensor]: + """Extracts a pyramid of features from the image. + + Args: + image: TORCH.Tensor with shape BATCH_SIZE x HEIGHT x WIDTH x CHANNELS. + n: number of pyramid levels to extract. This can be less or equal to + options.sub_levels given in the __init__. + Returns: + The pyramid of features, starting from the finest level. Each element + contains the output after the last convolution on the corresponding + pyramid level. + """ + head = image + pyramid = [] + for i, layer in enumerate(self.convs): + head = layer(head) + pyramid.append(head) + if i < n - 1: + head = F.avg_pool2d(head, kernel_size=2, stride=2) + return pyramid + + +class FeatureExtractor(nn.Module): + """Extracts features from an image pyramid using a cascaded architecture. + """ + + def __init__(self, in_channels=3, channels=64, sub_levels=4): + super().__init__() + self.extract_sublevels = SubTreeExtractor(in_channels, channels, sub_levels) + self.sub_levels = sub_levels + + def forward(self, image_pyramid: List[torch.Tensor]) -> List[torch.Tensor]: + """Extracts a cascaded feature pyramid. + + Args: + image_pyramid: Image pyramid as a list, starting from the finest level. + Returns: + A pyramid of cascaded features. + """ + sub_pyramids: List[List[torch.Tensor]] = [] + for i in range(len(image_pyramid)): + # At each level of the image pyramid, creates a sub_pyramid of features + # with 'sub_levels' pyramid levels, re-using the same SubTreeExtractor. + # We use the same instance since we want to share the weights. + # + # However, we cap the depth of the sub_pyramid so we don't create features + # that are beyond the coarsest level of the cascaded feature pyramid we + # want to generate. + capped_sub_levels = min(len(image_pyramid) - i, self.sub_levels) + sub_pyramids.append(self.extract_sublevels(image_pyramid[i], capped_sub_levels)) + # Below we generate the cascades of features on each level of the feature + # pyramid. Assuming sub_levels=3, The layout of the features will be + # as shown in the example on file documentation above. + feature_pyramid: List[torch.Tensor] = [] + for i in range(len(image_pyramid)): + features = sub_pyramids[i][0] + for j in range(1, self.sub_levels): + if j <= i: + features = torch.cat([features, sub_pyramids[i - j][j]], dim=1) + feature_pyramid.append(features) + return feature_pyramid + + + + + + + + + + + +"""The final fusion stage for the film_net frame interpolator. + +The inputs to this module are the warped input images, image features and +flow fields, all aligned to the target frame (often midway point between the +two original inputs). The output is the final image. FILM has no explicit +occlusion handling -- instead using the abovementioned information this module +automatically decides how to best blend the inputs together to produce content +in areas where the pixels can only be borrowed from one of the inputs. + +Similarly, this module also decides on how much to blend in each input in case +of fractional timestep that is not at the halfway point. For example, if the two +inputs images are at t=0 and t=1, and we were to synthesize a frame at t=0.1, +it often makes most sense to favor the first input. However, this is not +always the case -- in particular in occluded pixels. + +The architecture of the Fusion module follows U-net [1] architecture's decoder +side, e.g. each pyramid level consists of concatenation with upsampled coarser +level output, and two 3x3 convolutions. + +The upsampling is implemented as 'resize convolution', e.g. nearest neighbor +upsampling followed by 2x2 convolution as explained in [2]. The classic U-net +uses max-pooling which has a tendency to create checkerboard artifacts. + +[1] Ronneberger et al. U-Net: Convolutional Networks for Biomedical Image + Segmentation, 2015, https://arxiv.org/pdf/1505.04597.pdf +[2] https://distill.pub/2016/deconv-checkerboard/ +""" +from typing import List + +import torch +from torch import nn +from torch.nn import functional as F + + +_NUMBER_OF_COLOR_CHANNELS = 3 + + +def get_channels_at_level(level, filters): + n_images = 2 + channels = _NUMBER_OF_COLOR_CHANNELS + flows = 2 + + return (sum(filters << i for i in range(level)) + channels + flows) * n_images + + +class Fusion(nn.Module): + """The decoder.""" + + def __init__(self, n_layers=4, specialized_layers=3, filters=64): + """ + Args: + m: specialized levels + """ + super().__init__() + + # The final convolution that outputs RGB: + self.output_conv = nn.Conv2d(filters, 3, kernel_size=1) + + # Each item 'convs[i]' will contain the list of convolutions to be applied + # for pyramid level 'i'. + self.convs = nn.ModuleList() + + # Create the convolutions. Roughly following the feature extractor, we + # double the number of filters when the resolution halves, but only up to + # the specialized_levels, after which we use the same number of filters on + # all levels. + # + # We create the convs in fine-to-coarse order, so that the array index + # for the convs will correspond to our normal indexing (0=finest level). + # in_channels: tuple = (128, 202, 256, 522, 512, 1162, 1930, 2442) + + in_channels = get_channels_at_level(n_layers, filters) + increase = 0 + for i in range(n_layers)[::-1]: + num_filters = (filters << i) if i < specialized_layers else (filters << specialized_layers) + convs = nn.ModuleList([ + conv(in_channels, num_filters, size=2, activation=None), + conv(in_channels + (increase or num_filters), num_filters, size=3), + conv(num_filters, num_filters, size=3)] + ) + self.convs.append(convs) + in_channels = num_filters + increase = get_channels_at_level(i, filters) - num_filters // 2 + + def forward(self, pyramid: List[torch.Tensor]) -> torch.Tensor: + """Runs the fusion module. + + Args: + pyramid: The input feature pyramid as list of tensors. Each tensor being + in (B x H x W x C) format, with finest level tensor first. + + Returns: + A batch of RGB images. + Raises: + ValueError, if len(pyramid) != config.fusion_pyramid_levels as provided in + the constructor. + """ + + # As a slight difference to a conventional decoder (e.g. U-net), we don't + # apply any extra convolutions to the coarsest level, but just pass it + # to finer levels for concatenation. This choice has not been thoroughly + # evaluated, but is motivated by the educated guess that the fusion part + # probably does not need large spatial context, because at this point the + # features are spatially aligned by the preceding warp. + net = pyramid[-1] + + # Loop starting from the 2nd coarsest level: + # for i in reversed(range(0, len(pyramid) - 1)): + for k, layers in enumerate(self.convs): + i = len(self.convs) - 1 - k + # Resize the tensor from coarser level to match for concatenation. + level_size = pyramid[i].shape[2:4] + net = F.interpolate(net, size=level_size, mode='nearest') + net = layers[0](net) + net = torch.cat([pyramid[i], net], dim=1) + net = layers[1](net) + net = layers[2](net) + net = self.output_conv(net) + return net + + + + + + + + + + + +"""The film_net frame interpolator main model code. + +Basics +====== +The film_net is an end-to-end learned neural frame interpolator implemented as +a PyTorch model. It has the following inputs and outputs: + +Inputs: + x0: image A. + x1: image B. + time: desired sub-frame time. + +Outputs: + image: the predicted in-between image at the chosen time in range [0, 1]. + +Additional outputs include forward and backward warped image pyramids, flow +pyramids, etc., that can be visualized for debugging and analysis. + +Note that many training sets only contain triplets with ground truth at +time=0.5. If a model has been trained with such training set, it will only work +well for synthesizing frames at time=0.5. Such models can only generate more +in-between frames using recursion. + +Architecture +============ +The inference consists of three main stages: 1) feature extraction 2) warping +3) fusion. On high-level, the architecture has similarities to Context-aware +Synthesis for Video Frame Interpolation [1], but the exact architecture is +closer to Multi-view Image Fusion [2] with some modifications for the frame +interpolation use-case. + +Feature extraction stage employs the cascaded multi-scale architecture described +in [2]. The advantage of this architecture is that coarse level flow prediction +can be learned from finer resolution image samples. This is especially useful +to avoid overfitting with moderately sized datasets. + +The warping stage uses a residual flow prediction idea that is similar to +PWC-Net [3], Multi-view Image Fusion [2] and many others. + +The fusion stage is similar to U-Net's decoder where the skip connections are +connected to warped image and feature pyramids. This is described in [2]. + +Implementation Conventions +==================== +Pyramids +-------- +Throughtout the model, all image and feature pyramids are stored as python lists +with finest level first followed by downscaled versions obtained by successively +halving the resolution. The depths of all pyramids are determined by +options.pyramid_levels. The only exception to this is internal to the feature +extractor, where smaller feature pyramids are temporarily constructed with depth +options.sub_levels. + +Color ranges & gamma +-------------------- +The model code makes no assumptions on whether the images are in gamma or +linearized space or what is the range of RGB color values. So a model can be +trained with different choices. This does not mean that all the choices lead to +similar results. In practice the model has been proven to work well with RGB +scale = [0,1] with gamma-space images (i.e. not linearized). + +[1] Context-aware Synthesis for Video Frame Interpolation, Niklaus and Liu, 2018 +[2] Multi-view Image Fusion, Trinidad et al, 2019 +[3] PWC-Net: CNNs for Optical Flow Using Pyramid, Warping, and Cost Volume +""" +from typing import Dict, List + +import torch +from torch import nn + + + +class Interpolator(nn.Module): + def __init__( + self, + pyramid_levels=7, + fusion_pyramid_levels=5, + specialized_levels=3, + sub_levels=4, + filters=64, + flow_convs=(3, 3, 3, 3), + flow_filters=(32, 64, 128, 256), + ): + super().__init__() + self.pyramid_levels = pyramid_levels + self.fusion_pyramid_levels = fusion_pyramid_levels + + self.extract = FeatureExtractor(3, filters, sub_levels) + self.predict_flow = PyramidFlowEstimator(filters, flow_convs, flow_filters) + self.fuse = Fusion(sub_levels, specialized_levels, filters) + + def shuffle_images(self, x0, x1): + return [ + build_image_pyramid(x0, self.pyramid_levels), + build_image_pyramid(x1, self.pyramid_levels) + ] + + def debug_forward(self, x0, x1, batch_dt) -> Dict[str, List[torch.Tensor]]: + image_pyramids = self.shuffle_images(x0, x1) + + # Siamese feature pyramids: + feature_pyramids = [self.extract(image_pyramids[0]), self.extract(image_pyramids[1])] + + # Predict forward flow. + forward_residual_flow_pyramid = self.predict_flow(feature_pyramids[0], feature_pyramids[1]) + + # Predict backward flow. + backward_residual_flow_pyramid = self.predict_flow(feature_pyramids[1], feature_pyramids[0]) + + # Concatenate features and images: + + # Note that we keep up to 'fusion_pyramid_levels' levels as only those + # are used by the fusion module. + + forward_flow_pyramid = flow_pyramid_synthesis(forward_residual_flow_pyramid)[:self.fusion_pyramid_levels] + + backward_flow_pyramid = flow_pyramid_synthesis(backward_residual_flow_pyramid)[:self.fusion_pyramid_levels] + + # We multiply the flows with t and 1-t to warp to the desired fractional time. + # + # Note: In film_net we fix time to be 0.5, and recursively invoke the interpo- + # lator for multi-frame interpolation. Below, we create a constant tensor of + # shape [B]. We use the `time` tensor to infer the batch size. + mid_time = torch.full_like(batch_dt, .5) + backward_flow = multiply_pyramid(backward_flow_pyramid, mid_time[:, 0]) + forward_flow = multiply_pyramid(forward_flow_pyramid, 1 - mid_time[:, 0]) + + pyramids_to_warp = [ + concatenate_pyramids(image_pyramids[0][:self.fusion_pyramid_levels], + feature_pyramids[0][:self.fusion_pyramid_levels]), + concatenate_pyramids(image_pyramids[1][:self.fusion_pyramid_levels], + feature_pyramids[1][:self.fusion_pyramid_levels]) + ] + + # Warp features and images using the flow. Note that we use backward warping + # and backward flow is used to read from image 0 and forward flow from + # image 1. + forward_warped_pyramid = pyramid_warp(pyramids_to_warp[0], backward_flow) + backward_warped_pyramid = pyramid_warp(pyramids_to_warp[1], forward_flow) + + aligned_pyramid = concatenate_pyramids(forward_warped_pyramid, + backward_warped_pyramid) + aligned_pyramid = concatenate_pyramids(aligned_pyramid, backward_flow) + aligned_pyramid = concatenate_pyramids(aligned_pyramid, forward_flow) + + return { + 'image': [self.fuse(aligned_pyramid)], + 'forward_residual_flow_pyramid': forward_residual_flow_pyramid, + 'backward_residual_flow_pyramid': backward_residual_flow_pyramid, + 'forward_flow_pyramid': forward_flow_pyramid, + 'backward_flow_pyramid': backward_flow_pyramid, + } + + + def forward(self, x0, x1, batch_dt) -> torch.Tensor: + return self.debug_forward(x0, x1, batch_dt)['image'][0] + + + + + + + + + + +"""PyTorch layer for estimating optical flow by a residual flow pyramid. + +This approach of estimating optical flow between two images can be traced back +to [1], but is also used by later neural optical flow computation methods such +as SpyNet [2] and PWC-Net [3]. + +The basic idea is that the optical flow is first estimated in a coarse +resolution, then the flow is upsampled to warp the higher resolution image and +then a residual correction is computed and added to the estimated flow. This +process is repeated in a pyramid on coarse to fine order to successively +increase the resolution of both optical flow and the warped image. + +In here, the optical flow predictor is used as an internal component for the +film_net frame interpolator, to warp the two input images into the inbetween, +target frame. + +[1] F. Glazer, Hierarchical motion detection. PhD thesis, 1987. +[2] A. Ranjan and M. J. Black, Optical Flow Estimation using a Spatial Pyramid + Network. 2016 +[3] D. Sun X. Yang, M-Y. Liu and J. Kautz, PWC-Net: CNNs for Optical Flow Using + Pyramid, Warping, and Cost Volume, 2017 +""" +from typing import List + +import torch +from torch import nn +from torch.nn import functional as F + + + +class FlowEstimator(nn.Module): + """Small-receptive field predictor for computing the flow between two images. + + This is used to compute the residual flow fields in PyramidFlowEstimator. + + Note that while the number of 3x3 convolutions & filters to apply is + configurable, two extra 1x1 convolutions are appended to extract the flow in + the end. + + Attributes: + name: The name of the layer + num_convs: Number of 3x3 convolutions to apply + num_filters: Number of filters in each 3x3 convolution + """ + + def __init__(self, in_channels: int, num_convs: int, num_filters: int): + super(FlowEstimator, self).__init__() + + self._convs = nn.ModuleList() + for i in range(num_convs): + self._convs.append(conv(in_channels=in_channels, out_channels=num_filters, size=3)) + in_channels = num_filters + self._convs.append(conv(in_channels, num_filters // 2, size=1)) + in_channels = num_filters // 2 + # For the final convolution, we want no activation at all to predict the + # optical flow vector values. We have done extensive testing on explicitly + # bounding these values using sigmoid, but it turned out that having no + # activation gives better results. + self._convs.append(conv(in_channels, 2, size=1, activation=None)) + + def forward(self, features_a: torch.Tensor, features_b: torch.Tensor) -> torch.Tensor: + """Estimates optical flow between two images. + + Args: + features_a: per pixel feature vectors for image A (B x H x W x C) + features_b: per pixel feature vectors for image B (B x H x W x C) + + Returns: + A tensor with optical flow from A to B + """ + net = torch.cat([features_a, features_b], dim=1) + for conv in self._convs: + net = conv(net) + return net + + +class PyramidFlowEstimator(nn.Module): + """Predicts optical flow by coarse-to-fine refinement. + """ + + def __init__(self, filters: int = 64, + flow_convs: tuple = (3, 3, 3, 3), + flow_filters: tuple = (32, 64, 128, 256)): + super(PyramidFlowEstimator, self).__init__() + + in_channels = filters << 1 + predictors = [] + for i in range(len(flow_convs)): + predictors.append( + FlowEstimator( + in_channels=in_channels, + num_convs=flow_convs[i], + num_filters=flow_filters[i])) + in_channels += filters << (i + 2) + self._predictor = predictors[-1] + self._predictors = nn.ModuleList(predictors[:-1][::-1]) + + def forward(self, feature_pyramid_a: List[torch.Tensor], + feature_pyramid_b: List[torch.Tensor]) -> List[torch.Tensor]: + """Estimates residual flow pyramids between two image pyramids. + + Each image pyramid is represented as a list of tensors in fine-to-coarse + order. Each individual image is represented as a tensor where each pixel is + a vector of image features. + + flow_pyramid_synthesis can be used to convert the residual flow + pyramid returned by this method into a flow pyramid, where each level + encodes the flow instead of a residual correction. + + Args: + feature_pyramid_a: image pyramid as a list in fine-to-coarse order + feature_pyramid_b: image pyramid as a list in fine-to-coarse order + + Returns: + List of flow tensors, in fine-to-coarse order, each level encoding the + difference against the bilinearly upsampled version from the coarser + level. The coarsest flow tensor, e.g. the last element in the array is the + 'DC-term', e.g. not a residual (alternatively you can think of it being a + residual against zero). + """ + levels = len(feature_pyramid_a) + v = self._predictor(feature_pyramid_a[-1], feature_pyramid_b[-1]) + residuals = [v] + for i in range(levels - 2, len(self._predictors) - 1, -1): + # Upsamples the flow to match the current pyramid level. Also, scales the + # magnitude by two to reflect the new size. + level_size = feature_pyramid_a[i].shape[2:4] + v = F.interpolate(2 * v, size=level_size, mode='bilinear') + # Warp feature_pyramid_b[i] image based on the current flow estimate. + warped = warp(feature_pyramid_b[i], v) + # Estimate the residual flow between pyramid_a[i] and warped image: + v_residual = self._predictor(feature_pyramid_a[i], warped) + residuals.insert(0, v_residual) + v = v_residual + v + + for k, predictor in enumerate(self._predictors): + i = len(self._predictors) - 1 - k + # Upsamples the flow to match the current pyramid level. Also, scales the + # magnitude by two to reflect the new size. + level_size = feature_pyramid_a[i].shape[2:4] + v = F.interpolate(2 * v, size=level_size, mode='bilinear') + # Warp feature_pyramid_b[i] image based on the current flow estimate. + warped = warp(feature_pyramid_b[i], v) + # Estimate the residual flow between pyramid_a[i] and warped image: + v_residual = predictor(feature_pyramid_a[i], warped) + residuals.insert(0, v_residual) + v = v_residual + v + return residuals + + + + + + + + + + +"""Various utilities used in the film_net frame interpolator model.""" +from typing import List, Optional + +import cv2 +import numpy as np +import torch +from torch import nn +from torch.nn import functional as F + + +def pad_batch(batch, align): + height, width = batch.shape[1:3] + height_to_pad = (align - height % align) if height % align != 0 else 0 + width_to_pad = (align - width % align) if width % align != 0 else 0 + + crop_region = [height_to_pad >> 1, width_to_pad >> 1, height + (height_to_pad >> 1), width + (width_to_pad >> 1)] + batch = np.pad(batch, ((0, 0), (height_to_pad >> 1, height_to_pad - (height_to_pad >> 1)), + (width_to_pad >> 1, width_to_pad - (width_to_pad >> 1)), (0, 0)), mode='constant') + return batch, crop_region + + +def load_image(path, align=64): + image = cv2.cvtColor(cv2.imread(path), cv2.COLOR_BGR2RGB).astype(np.float32) / np.float32(255) + image_batch, crop_region = pad_batch(np.expand_dims(image, axis=0), align) + return image_batch, crop_region + + +def build_image_pyramid(image: torch.Tensor, pyramid_levels: int = 3) -> List[torch.Tensor]: + """Builds an image pyramid from a given image. + + The original image is included in the pyramid and the rest are generated by + successively halving the resolution. + + Args: + image: the input image. + options: film_net options object + + Returns: + A list of images starting from the finest with options.pyramid_levels items + """ + + pyramid = [] + for i in range(pyramid_levels): + pyramid.append(image) + if i < pyramid_levels - 1: + image = F.avg_pool2d(image, 2, 2) + return pyramid + + +def warp(image: torch.Tensor, flow: torch.Tensor) -> torch.Tensor: + """Backward warps the image using the given flow. + + Specifically, the output pixel in batch b, at position x, y will be computed + as follows: + (flowed_y, flowed_x) = (y+flow[b, y, x, 1], x+flow[b, y, x, 0]) + output[b, y, x] = bilinear_lookup(image, b, flowed_y, flowed_x) + + Note that the flow vectors are expected as [x, y], e.g. x in position 0 and + y in position 1. + + Args: + image: An image with shape BxHxWxC. + flow: A flow with shape BxHxWx2, with the two channels denoting the relative + offset in order: (dx, dy). + Returns: + A warped image. + """ + flow = -flow.flip(1) + + dtype = flow.dtype + device = flow.device + + # warped = tfa_image.dense_image_warp(image, flow) + # Same as above but with pytorch + ls1 = 1 - 1 / flow.shape[3] + ls2 = 1 - 1 / flow.shape[2] + + normalized_flow2 = flow.permute(0, 2, 3, 1) / torch.tensor( + [flow.shape[2] * .5, flow.shape[3] * .5], dtype=dtype, device=device)[None, None, None] + normalized_flow2 = torch.stack([ + torch.linspace(-ls1, ls1, flow.shape[3], dtype=dtype, device=device)[None, None, :] - normalized_flow2[..., 1], + torch.linspace(-ls2, ls2, flow.shape[2], dtype=dtype, device=device)[None, :, None] - normalized_flow2[..., 0], + ], dim=3) + + padding_mode = "border" + if device.type == "mps": + # https://github.com/pytorch/pytorch/issues/125098 + padding_mode = "zeros" + normalized_flow2 = normalized_flow2.clamp(-1, 1) + warped = F.grid_sample( + input=image, + grid=normalized_flow2, + mode='bilinear', + padding_mode=padding_mode, + align_corners=False, + ) + return warped.reshape(image.shape) + + +def multiply_pyramid(pyramid: List[torch.Tensor], + scalar: torch.Tensor) -> List[torch.Tensor]: + """Multiplies all image batches in the pyramid by a batch of scalars. + + Args: + pyramid: Pyramid of image batches. + scalar: Batch of scalars. + + Returns: + An image pyramid with all images multiplied by the scalar. + """ + # To multiply each image with its corresponding scalar, we first transpose + # the batch of images from BxHxWxC-format to CxHxWxB. This can then be + # multiplied with a batch of scalars, then we transpose back to the standard + # BxHxWxC form. + return [image * scalar for image in pyramid] + + +def flow_pyramid_synthesis( + residual_pyramid: List[torch.Tensor]) -> List[torch.Tensor]: + """Converts a residual flow pyramid into a flow pyramid.""" + flow = residual_pyramid[-1] + flow_pyramid: List[torch.Tensor] = [flow] + for residual_flow in residual_pyramid[:-1][::-1]: + level_size = residual_flow.shape[2:4] + flow = F.interpolate(2 * flow, size=level_size, mode='bilinear') + flow = residual_flow + flow + flow_pyramid.insert(0, flow) + return flow_pyramid + + +def pyramid_warp(feature_pyramid: List[torch.Tensor], + flow_pyramid: List[torch.Tensor]) -> List[torch.Tensor]: + """Warps the feature pyramid using the flow pyramid. + + Args: + feature_pyramid: feature pyramid starting from the finest level. + flow_pyramid: flow fields, starting from the finest level. + + Returns: + Reverse warped feature pyramid. + """ + warped_feature_pyramid = [] + for features, flow in zip(feature_pyramid, flow_pyramid): + warped_feature_pyramid.append(warp(features, flow)) + return warped_feature_pyramid + + +def concatenate_pyramids(pyramid1: List[torch.Tensor], + pyramid2: List[torch.Tensor]) -> List[torch.Tensor]: + """Concatenates each pyramid level together in the channel dimension.""" + result = [] + for features1, features2 in zip(pyramid1, pyramid2): + result.append(torch.cat([features1, features2], dim=1)) + return result + + +def conv(in_channels, out_channels, size, activation: Optional[str] = 'relu'): + # Since PyTorch doesn't have an in-built activation in Conv2d, we use a + # Sequential layer to combine Conv2d and Leaky ReLU in one module. + _conv = nn.Conv2d( + in_channels=in_channels, + out_channels=out_channels, + kernel_size=size, + padding='same') + if activation is None: + return _conv + assert activation == 'relu' + return nn.Sequential( + _conv, + nn.LeakyReLU(.2) + ) \ No newline at end of file diff --git a/comfyui-frame-interpolation/vfi_models/flavr/__init__.py b/comfyui-frame-interpolation/vfi_models/flavr/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..64a4b6bed3ba40712317708b175214bd773633fd --- /dev/null +++ b/comfyui-frame-interpolation/vfi_models/flavr/__init__.py @@ -0,0 +1,115 @@ +import torch +from comfy.model_management import get_torch_device, soft_empty_cache +import numpy as np +import typing +from vfi_utils import InterpolationStateList, load_file_from_github_release, preprocess_frames, postprocess_frames, assert_batch_size +import pathlib +import warnings +from .flavr_arch import UNet_3D_3D, InputPadder +import gc + +device = get_torch_device() +NBR_FRAME = 4 + +def build_flavr(model_path): + sd = torch.load(model_path)['state_dict'] + sd = {k.partition("module.")[-1]:v for k,v in sd.items()} + + #Ref: Class UNet_3D_3D + model = UNet_3D_3D("unet_18", n_inputs=NBR_FRAME, n_outputs=sd["outconv.1.weight"].shape[0] // 3, joinType="concat" , upmode="transpose") + model.load_state_dict(sd) + model.to(device).eval() + del sd + return model + +MODEL_TYPE = pathlib.Path(__file__).parent.name +CKPT_NAMES = ["FLAVR_2x.pth", "FLAVR_4x.pth", "FLAVR_8x.pth"] + +class FLAVR_VFI: + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "ckpt_name": (CKPT_NAMES, ), + "frames": ("IMAGE", ), + "clear_cache_after_n_frames": ("INT", {"default": 10, "min": 1, "max": 1000}), + "multiplier": ("INT", {"default": 2, "min": 2, "max": 2}), #TODO: Implement recursively invoking interpolator for multi-frame interpolation + "duplicate_first_last_frames": ("BOOLEAN", {"default": False}) + }, + "optional": { + "optional_interpolation_states": ("INTERPOLATION_STATES", ) + } + } + + RETURN_TYPES = ("IMAGE", ) + FUNCTION = "vfi" + CATEGORY = "ComfyUI-Frame-Interpolation/VFI" + + #Reference: https://github.com/danier97/ST-MFNet/blob/main/interpolate_yuv.py#L93 + def vfi( + self, + ckpt_name: typing.AnyStr, + frames: torch.Tensor, + clear_cache_after_n_frames = 10, + multiplier: typing.SupportsInt = 2, + duplicate_first_last_frames: bool = False, + optional_interpolation_states: InterpolationStateList = None, + **kwargs + ): + if multiplier != 2: + warnings.warn("Currently, FLAVR only supports 2x interpolation. The process will continue but please set multiplier=2 afterward") + + assert_batch_size(frames, batch_size=4, vfi_name="ST-MFNet") + interpolation_states = optional_interpolation_states + model_path = load_file_from_github_release(MODEL_TYPE, ckpt_name) + model = build_flavr(model_path) + frames = preprocess_frames(frames) + padder = InputPadder(frames.shape, 16) + frames = padder.pad(frames) + + number_of_frames_processed_since_last_cleared_cuda_cache = 0 + output_frames = [] + for frame_itr in range(len(frames) - 3): + #Does skipping frame i+1 make sanse in this case? + if interpolation_states is not None and interpolation_states.is_frame_skipped(frame_itr) and interpolation_states.is_frame_skipped(frame_itr + 1): + continue + + #Ensure that input frames are in fp32 - the same dtype as model + frame0, frame1, frame2, frame3 = ( + frames[frame_itr:frame_itr+1].float(), + frames[frame_itr+1:frame_itr+2].float(), + frames[frame_itr+2:frame_itr+3].float(), + frames[frame_itr+3:frame_itr+4].float() + ) + new_frame = model([frame0.to(device), frame1.to(device), frame2.to(device), frame3.to(device)])[0].detach().cpu() + number_of_frames_processed_since_last_cleared_cuda_cache += 2 + + if frame_itr == 0: + output_frames.append(frame0) + if duplicate_first_last_frames: + output_frames.append(frame0) # repeat the first frame + output_frames.append(frame1) + output_frames.append(new_frame) + output_frames.append(frame2) + if frame_itr == len(frames) - 4: + output_frames.append(frame3) + if duplicate_first_last_frames: + output_frames.append(frame3) # repeat the last frame + + # Try to avoid a memory overflow by clearing cuda cache regularly + if number_of_frames_processed_since_last_cleared_cuda_cache >= clear_cache_after_n_frames: + print("Comfy-VFI: Clearing cache...", end = ' ') + soft_empty_cache() + number_of_frames_processed_since_last_cleared_cuda_cache = 0 + print("Done cache clearing") + gc.collect() + + dtype = torch.float32 + output_frames = [frame.cpu().to(dtype=dtype) for frame in output_frames] #Ensure all frames are in cpu + out = torch.cat(output_frames, dim=0) + out = padder.unpad(out) + # clear cache for courtesy + print("Comfy-VFI: Final clearing cache...", end=' ') + soft_empty_cache() + print("Done cache clearing") + return (postprocess_frames(out), ) diff --git a/comfyui-frame-interpolation/vfi_models/flavr/__pycache__/__init__.cpython-310.pyc b/comfyui-frame-interpolation/vfi_models/flavr/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d24ad4eccf337746ba5ffd3b5a29a558fd869050 Binary files /dev/null and b/comfyui-frame-interpolation/vfi_models/flavr/__pycache__/__init__.cpython-310.pyc differ diff --git a/comfyui-frame-interpolation/vfi_models/flavr/__pycache__/flavr_arch.cpython-310.pyc b/comfyui-frame-interpolation/vfi_models/flavr/__pycache__/flavr_arch.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0b3cc6865bb0377bfcab330838d3e2ebe3276e1b Binary files /dev/null and b/comfyui-frame-interpolation/vfi_models/flavr/__pycache__/flavr_arch.cpython-310.pyc differ diff --git a/comfyui-frame-interpolation/vfi_models/flavr/flavr_arch.py b/comfyui-frame-interpolation/vfi_models/flavr/flavr_arch.py new file mode 100644 index 0000000000000000000000000000000000000000..3f26be0968f1192a95005900a081ac84b229323e --- /dev/null +++ b/comfyui-frame-interpolation/vfi_models/flavr/flavr_arch.py @@ -0,0 +1,217 @@ +""" +https://github.com/tarun005/FLAVR/blob/main/model/FLAVR_arch.py +https://github.com/tarun005/FLAVR/blob/main/model/resnet_3D.py (only SEGating) +""" +import math +import numpy as np +import importlib + +import torch +import torch.nn as nn +import torch.nn.functional as F + +class SEGating(nn.Module): + + def __init__(self , inplanes , reduction=16): + + super().__init__() + + self.pool = nn.AdaptiveAvgPool3d(1) + self.attn_layer = nn.Sequential( + nn.Conv3d(inplanes , inplanes , kernel_size=1 , stride=1 , bias=True), + nn.Sigmoid() + ) + + def forward(self , x): + + out = self.pool(x) + y = self.attn_layer(out) + return x * y + +def joinTensors(X1 , X2 , type="concat"): + + if type == "concat": + return torch.cat([X1 , X2] , dim=1) + elif type == "add": + return X1 + X2 + else: + return X1 + + +class Conv_2d(nn.Module): + + def __init__(self, in_ch, out_ch, kernel_size, stride=1, padding=0, bias=False, batchnorm=False): + + super().__init__() + self.conv = [nn.Conv2d(in_ch, out_ch, kernel_size=kernel_size, stride=stride, padding=padding, bias=bias)] + + if batchnorm: + self.conv += [nn.BatchNorm2d(out_ch)] + + self.conv = nn.Sequential(*self.conv) + + def forward(self, x): + + return self.conv(x) + +class upConv3D(nn.Module): + + def __init__(self, in_ch, out_ch, kernel_size, stride, padding, upmode="transpose" , batchnorm=False): + + super().__init__() + + self.upmode = upmode + + if self.upmode=="transpose": + self.upconv = nn.ModuleList( + [nn.ConvTranspose3d(in_ch, out_ch, kernel_size=kernel_size, stride=stride, padding=padding), + SEGating(out_ch) + ] + ) + + else: + self.upconv = nn.ModuleList( + [nn.Upsample(mode='trilinear', scale_factor=(1,2,2), align_corners=False), + nn.Conv3d(in_ch, out_ch , kernel_size=1 , stride=1), + SEGating(out_ch) + ] + ) + + if batchnorm: + self.upconv += [nn.BatchNorm3d(out_ch)] + + self.upconv = nn.Sequential(*self.upconv) + + def forward(self, x): + + return self.upconv(x) + +class Conv_3d(nn.Module): + + def __init__(self, in_ch, out_ch, kernel_size, stride=1, padding=0, bias=True, batchnorm=False): + + super().__init__() + self.conv = [nn.Conv3d(in_ch, out_ch, kernel_size=kernel_size, stride=stride, padding=padding, bias=bias), + SEGating(out_ch) + ] + + if batchnorm: + self.conv += [nn.BatchNorm3d(out_ch)] + + self.conv = nn.Sequential(*self.conv) + + def forward(self, x): + + return self.conv(x) + +class upConv2D(nn.Module): + + def __init__(self, in_ch, out_ch, kernel_size, stride, padding, upmode="transpose" , batchnorm=False): + + super().__init__() + + self.upmode = upmode + + if self.upmode=="transpose": + self.upconv = [nn.ConvTranspose2d(in_ch, out_ch, kernel_size=kernel_size, stride=stride, padding=padding)] + + else: + self.upconv = [ + nn.Upsample(mode='bilinear', scale_factor=2, align_corners=False), + nn.Conv2d(in_ch, out_ch , kernel_size=1 , stride=1) + ] + + if batchnorm: + self.upconv += [nn.BatchNorm2d(out_ch)] + + self.upconv = nn.Sequential(*self.upconv) + + def forward(self, x): + + return self.upconv(x) + + +class UNet_3D_3D(nn.Module): + def __init__(self, block , n_inputs, n_outputs, batchnorm=False , joinType="concat" , upmode="transpose"): + super().__init__() + + nf = [512 , 256 , 128 , 64] + out_channels = 3*n_outputs + self.joinType = joinType + self.n_outputs = n_outputs + + growth = 2 if joinType == "concat" else 1 + self.lrelu = nn.LeakyReLU(0.2, True) + + unet_3D = importlib.import_module(".resnet_3D", "vfi_models.flavr") + if n_outputs > 1: + unet_3D.useBias = True + self.encoder = getattr(unet_3D , block)(pretrained=False , bn=batchnorm) + + self.decoder = nn.Sequential( + Conv_3d(nf[0], nf[1] , kernel_size=3, padding=1, bias=True, batchnorm=batchnorm), + upConv3D(nf[1]*growth, nf[2], kernel_size=(3,4,4), stride=(1,2,2), padding=(1,1,1) , upmode=upmode, batchnorm=batchnorm), + upConv3D(nf[2]*growth, nf[3], kernel_size=(3,4,4), stride=(1,2,2), padding=(1,1,1) , upmode=upmode, batchnorm=batchnorm), + Conv_3d(nf[3]*growth, nf[3] , kernel_size=3, padding=1, bias=True, batchnorm=batchnorm), + upConv3D(nf[3]*growth , nf[3], kernel_size=(3,4,4), stride=(1,2,2), padding=(1,1,1) , upmode=upmode, batchnorm=batchnorm) + ) + + self.feature_fuse = Conv_2d(nf[3]*n_inputs , nf[3] , kernel_size=1 , stride=1, batchnorm=batchnorm) + + self.outconv = nn.Sequential( + nn.ReflectionPad2d(3), + nn.Conv2d(nf[3], out_channels , kernel_size=7 , stride=1, padding=0) + ) + + def forward(self, images): + + images = torch.stack(images , dim=2) + + ## Batch mean normalization works slightly better than global mean normalization, thanks to https://github.com/myungsub/CAIN + mean_ = images.mean(2, keepdim=True).mean(3, keepdim=True).mean(4,keepdim=True) + images = images-mean_ + + x_0 , x_1 , x_2 , x_3 , x_4 = self.encoder(images) + + dx_3 = self.lrelu(self.decoder[0](x_4)) + dx_3 = joinTensors(dx_3 , x_3 , type=self.joinType) + + dx_2 = self.lrelu(self.decoder[1](dx_3)) + dx_2 = joinTensors(dx_2 , x_2 , type=self.joinType) + + dx_1 = self.lrelu(self.decoder[2](dx_2)) + dx_1 = joinTensors(dx_1 , x_1 , type=self.joinType) + + dx_0 = self.lrelu(self.decoder[3](dx_1)) + dx_0 = joinTensors(dx_0 , x_0 , type=self.joinType) + + dx_out = self.lrelu(self.decoder[4](dx_0)) + dx_out = torch.cat(torch.unbind(dx_out , 2) , 1) + + out = self.lrelu(self.feature_fuse(dx_out)) + out = self.outconv(out) + + out = torch.split(out, dim=1, split_size_or_sections=3) + mean_ = mean_.squeeze(2) + out = [o+mean_ for o in out] + + return out + +class InputPadder: + """ Pads images such that dimensions are divisible by divisor """ + def __init__(self, dims, divisor=16): + self.ht, self.wd = dims[-2:] + pad_ht = (((self.ht // divisor) + 1) * divisor - self.ht) % divisor + pad_wd = (((self.wd // divisor) + 1) * divisor - self.wd) % divisor + self._pad = [pad_wd//2, pad_wd - pad_wd//2, pad_ht//2, pad_ht - pad_ht//2] + + def pad(self, input_tensor): + return F.pad(input_tensor, self._pad, mode='replicate') + + def unpad(self, input_tensor): + return self._unpad(input_tensor) + + def _unpad(self, x): + ht, wd = x.shape[-2:] + c = [self._pad[2], ht-self._pad[3], self._pad[0], wd-self._pad[1]] + return x[..., c[0]:c[1], c[2]:c[3]] \ No newline at end of file diff --git a/comfyui-frame-interpolation/vfi_models/flavr/resnet_3D.py b/comfyui-frame-interpolation/vfi_models/flavr/resnet_3D.py new file mode 100644 index 0000000000000000000000000000000000000000..ba8b9a85a9edcf24ed8ff685c667dbcdbff55e69 --- /dev/null +++ b/comfyui-frame-interpolation/vfi_models/flavr/resnet_3D.py @@ -0,0 +1,288 @@ +# Modified from https://github.com/pytorch/vision/tree/master/torchvision/models/video + +import torch +import torch.nn as nn + +__all__ = ['unet_18', 'unet_34'] + +useBias = False + +class identity(nn.Module): + + def __init__(self , *args , **kwargs): + + super().__init__() + + def forward(self , x): + return x + +class Conv3DSimple(nn.Conv3d): + def __init__(self, + in_planes, + out_planes, + midplanes=None, + stride=1, + padding=1): + + super(Conv3DSimple, self).__init__( + in_channels=in_planes, + out_channels=out_planes, + kernel_size=(3, 3, 3), + stride=stride, + padding=padding, + bias=useBias) + + @staticmethod + def get_downsample_stride(stride , temporal_stride): + if temporal_stride: + return (temporal_stride, stride, stride) + else: + return (stride , stride , stride) + +class BasicStem(nn.Sequential): + """The default conv-batchnorm-relu stem + """ + def __init__(self): + super().__init__( + nn.Conv3d(3, 64, kernel_size=(3, 7, 7), stride=(1, 2, 2), + padding=(1, 3, 3), bias=useBias), + batchnorm(64), + nn.ReLU(inplace=False)) + + +class Conv2Plus1D(nn.Sequential): + + def __init__(self, + in_planes, + out_planes, + midplanes, + stride=1, + padding=1): + if not isinstance(stride , int): + temporal_stride , stride , stride = stride + else: + temporal_stride = stride + + super(Conv2Plus1D, self).__init__( + nn.Conv3d(in_planes, midplanes, kernel_size=(1, 3, 3), + stride=(1, stride, stride), padding=(0, padding, padding), + bias=False), + # batchnorm(midplanes), + nn.ReLU(inplace=True), + nn.Conv3d(midplanes, out_planes, kernel_size=(3, 1, 1), + stride=(temporal_stride, 1, 1), padding=(padding, 0, 0), + bias=False)) + + @staticmethod + def get_downsample_stride(stride , temporal_stride): + if temporal_stride: + return (temporal_stride, stride, stride) + else: + return (stride , stride , stride) + +class R2Plus1dStem(nn.Sequential): + """R(2+1)D stem is different than the default one as it uses separated 3D convolution + """ + def __init__(self): + super().__init__( + nn.Conv3d(3, 45, kernel_size=(1, 7, 7), + stride=(1, 2, 2), padding=(0, 3, 3), + bias=False), + batchnorm(45), + nn.ReLU(inplace=True), + nn.Conv3d(45, 64, kernel_size=(3, 1, 1), + stride=(1, 1, 1), padding=(1, 0, 0), + bias=False), + batchnorm(64), + nn.ReLU(inplace=True)) + + +class SEGating(nn.Module): + + def __init__(self , inplanes , reduction=16): + + super().__init__() + + self.pool = nn.AdaptiveAvgPool3d(1) + self.attn_layer = nn.Sequential( + nn.Conv3d(inplanes , inplanes , kernel_size=1 , stride=1 , bias=True), + nn.Sigmoid() + ) + + def forward(self , x): + + out = self.pool(x) + y = self.attn_layer(out) + return x * y + +class BasicBlock(nn.Module): + + expansion = 1 + + def __init__(self, inplanes, planes, conv_builder, stride=1, downsample=None): + midplanes = (inplanes * planes * 3 * 3 * 3) // (inplanes * 3 * 3 + 3 * planes) + + super(BasicBlock, self).__init__() + self.conv1 = nn.Sequential( + conv_builder(inplanes, planes, midplanes, stride), + batchnorm(planes), + nn.ReLU(inplace=True) + ) + self.conv2 = nn.Sequential( + conv_builder(planes, planes, midplanes), + batchnorm(planes) + ) + self.fg = SEGating(planes) ## Feature Gating + self.relu = nn.ReLU(inplace=True) + self.downsample = downsample + self.stride = stride + + def forward(self, x): + residual = x + out = self.conv1(x) + out = self.conv2(out) + out = self.fg(out) + if self.downsample is not None: + residual = self.downsample(x) + + out += residual + out = self.relu(out) + + return out + +class VideoResNet(nn.Module): + + def __init__(self, block, conv_makers, layers, + stem, zero_init_residual=False): + """Generic resnet video generator. + + Args: + block (nn.Module): resnet building block + conv_makers (list(functions)): generator function for each layer + layers (List[int]): number of blocks per layer + stem (nn.Module, optional): Resnet stem, if None, defaults to conv-bn-relu. Defaults to None. + """ + super(VideoResNet, self).__init__() + self.inplanes = 64 + + self.stem = stem() + + self.layer1 = self._make_layer(block, conv_makers[0], 64, layers[0], stride=1 ) + self.layer2 = self._make_layer(block, conv_makers[1], 128, layers[1], stride=2 , temporal_stride=1) + self.layer3 = self._make_layer(block, conv_makers[2], 256, layers[2], stride=2 , temporal_stride=1) + self.layer4 = self._make_layer(block, conv_makers[3], 512, layers[3], stride=1, temporal_stride=1) + + # init weights + self._initialize_weights() + + if zero_init_residual: + for m in self.modules(): + if isinstance(m, Bottleneck): + nn.init.constant_(m.bn3.weight, 0) + + def forward(self, x): + x_0 = self.stem(x) + x_1 = self.layer1(x_0) + x_2 = self.layer2(x_1) + x_3 = self.layer3(x_2) + x_4 = self.layer4(x_3) + return x_0 , x_1 , x_2 , x_3 , x_4 + + def _make_layer(self, block, conv_builder, planes, blocks, stride=1, temporal_stride=None): + downsample = None + + if stride != 1 or self.inplanes != planes * block.expansion: + ds_stride = conv_builder.get_downsample_stride(stride , temporal_stride) + downsample = nn.Sequential( + nn.Conv3d(self.inplanes, planes * block.expansion, + kernel_size=1, stride=ds_stride, bias=False), + batchnorm(planes * block.expansion) + ) + stride = ds_stride + + layers = [] + layers.append(block(self.inplanes, planes, conv_builder, stride, downsample )) + + self.inplanes = planes * block.expansion + for i in range(1, blocks): + layers.append(block(self.inplanes, planes, conv_builder )) + + return nn.Sequential(*layers) + + def _initialize_weights(self): + for m in self.modules(): + if isinstance(m, nn.Conv3d): + nn.init.kaiming_normal_(m.weight, mode='fan_out', + nonlinearity='relu') + if m.bias is not None: + nn.init.constant_(m.bias, 0) + elif isinstance(m, nn.BatchNorm3d): + nn.init.constant_(m.weight, 1) + nn.init.constant_(m.bias, 0) + elif isinstance(m, nn.Linear): + nn.init.normal_(m.weight, 0, 0.01) + nn.init.constant_(m.bias, 0) + + +def _video_resnet(arch, pretrained=False, progress=True, **kwargs): + model = VideoResNet(**kwargs) + ## TODO: Other 3D resnet models, like S3D, r(2+1)D. + + if pretrained: + state_dict = load_state_dict_from_url(model_urls[arch], + progress=progress) + model.load_state_dict(state_dict) + return model + + +def unet_18(pretrained=False, bn=False, progress=True, **kwargs): + """ + Construct 18 layer Unet3D model as in + https://arxiv.org/abs/1711.11248 + + Args: + pretrained (bool): If True, returns a model pre-trained on Kinetics-400 + progress (bool): If True, displays a progress bar of the download to stderr + + Returns: + nn.Module: R3D-18 encoder + """ + global batchnorm + if bn: + batchnorm = nn.BatchNorm3d + else: + batchnorm = identity + + return _video_resnet('r3d_18', + pretrained, progress, + block=BasicBlock, + conv_makers=[Conv3DSimple] * 4, + layers=[2, 2, 2, 2], + stem=BasicStem, **kwargs) + +def unet_34(pretrained=False, bn=False, progress=True, **kwargs): + """ + Construct 34 layer Unet3D model as in + https://arxiv.org/abs/1711.11248 + + Args: + pretrained (bool): If True, returns a model pre-trained on Kinetics-400 + progress (bool): If True, displays a progress bar of the download to stderr + + Returns: + nn.Module: R3D-18 encoder + """ + global batchnorm + # bn = False + if bn: + batchnorm = nn.BatchNorm3d + else: + batchnorm = identity + + + return _video_resnet('r3d_34', + pretrained, progress, + block=BasicBlock, + conv_makers=[Conv3DSimple] * 4, + layers=[3, 4, 6, 3], + stem=BasicStem, **kwargs) \ No newline at end of file diff --git a/comfyui-frame-interpolation/vfi_models/gmfss_fortuna/GMFSS_Fortuna.py b/comfyui-frame-interpolation/vfi_models/gmfss_fortuna/GMFSS_Fortuna.py new file mode 100644 index 0000000000000000000000000000000000000000..949e5130c59b3cf090666dff229bfa9a2be3a072 --- /dev/null +++ b/comfyui-frame-interpolation/vfi_models/gmfss_fortuna/GMFSS_Fortuna.py @@ -0,0 +1,24 @@ +import itertools +import numpy as np +import vapoursynth as vs +from .GMFSS_Fortuna_arch import Model_inference +import torch +import traceback + + +class GMFSS_Fortuna: + def __init__(self): + self.cache = False + self.amount_input_img = 2 + + torch.set_grad_enabled(False) + torch.backends.cudnn.enabled = True + torch.backends.cudnn.benchmark = True + + self.model = Model_inference() + self.model.eval() + + def execute(self, I0, I1, timestep): + with torch.inference_mode(): + middle = self.model(I0, I1, timestep).cpu() + return middle diff --git a/comfyui-frame-interpolation/vfi_models/gmfss_fortuna/GMFSS_Fortuna_arch.py b/comfyui-frame-interpolation/vfi_models/gmfss_fortuna/GMFSS_Fortuna_arch.py new file mode 100644 index 0000000000000000000000000000000000000000..062489675ef58d541c0311a8a88f3510a737075f --- /dev/null +++ b/comfyui-frame-interpolation/vfi_models/gmfss_fortuna/GMFSS_Fortuna_arch.py @@ -0,0 +1,1850 @@ +""" +https://github.com/98mxr/GMFSS_Fortuna/blob/b5d0bd544e3f1eee6a059e49c69bcd3124c8343c/model/GMFSS_infer_b.py +https://github.com/98mxr/GMFSS_Fortuna/blob/b5d0bd544e3f1eee6a059e49c69bcd3124c8343c/model/softsplat.py +https://github.com/98mxr/GMFSS_Fortuna/blob/b5d0bd544e3f1eee6a059e49c69bcd3124c8343c/model/FusionNet_b.py +https://github.com/98mxr/GMFSS_Fortuna/blob/b5d0bd544e3f1eee6a059e49c69bcd3124c8343c/model/FeatureNet.py +https://github.com/98mxr/GMFSS_Fortuna/blob/b5d0bd544e3f1eee6a059e49c69bcd3124c8343c/model/MetricNet.py +https://github.com/98mxr/GMFSS_Fortuna/blob/b5d0bd544e3f1eee6a059e49c69bcd3124c8343c/model/IFNet_HDv3.py +https://github.com/98mxr/GMFSS_Fortuna/blob/b5d0bd544e3f1eee6a059e49c69bcd3124c8343c/model/gmflow/gmflow.py +https://github.com/98mxr/GMFSS_Fortuna/blob/b5d0bd544e3f1eee6a059e49c69bcd3124c8343c/model/gmflow/utils.py +https://github.com/98mxr/GMFSS_Fortuna/blob/b5d0bd544e3f1eee6a059e49c69bcd3124c8343c/model/gmflow/position.py +https://github.com/98mxr/GMFSS_Fortuna/blob/b5d0bd544e3f1eee6a059e49c69bcd3124c8343c/model/gmflow/geometry.py +https://github.com/98mxr/GMFSS_Fortuna/blob/b5d0bd544e3f1eee6a059e49c69bcd3124c8343c/model/gmflow/matching.py +https://github.com/98mxr/GMFSS_Fortuna/blob/b5d0bd544e3f1eee6a059e49c69bcd3124c8343c/model/gmflow/transformer.py +https://github.com/98mxr/GMFSS_Fortuna/blob/b5d0bd544e3f1eee6a059e49c69bcd3124c8343c/model/gmflow/backbone.py +https://github.com/98mxr/GMFSS_Fortuna/blob/b5d0bd544e3f1eee6a059e49c69bcd3124c8343c/model/gmflow/trident_conv.py +https://github.com/98mxr/GMFSS_Fortuna/blob/b5d0bd544e3f1eee6a059e49c69bcd3124c8343c/model/warplayer.py +""" + +from torch import nn +from torch.nn import functional as F +from torch.nn.modules.utils import _pair +import numpy as np +import torch +import torch.nn as nn +import torch.nn.functional as F +import torch +import math +from vfi_models.rife.rife_arch import IFNet +from vfi_models.ops import softsplat +from comfy.model_management import get_torch_device + +device = get_torch_device() +backwarp_tenGrid = {} + + +def warp(tenInput, tenFlow): + k = (str(tenFlow.device), str(tenFlow.size())) + if k not in backwarp_tenGrid: + tenHorizontal = ( + torch.linspace(-1.0, 1.0, tenFlow.shape[3], device=device) + .view(1, 1, 1, tenFlow.shape[3]) + .expand(tenFlow.shape[0], -1, tenFlow.shape[2], -1) + ) + tenVertical = ( + torch.linspace(-1.0, 1.0, tenFlow.shape[2], device=device) + .view(1, 1, tenFlow.shape[2], 1) + .expand(tenFlow.shape[0], -1, -1, tenFlow.shape[3]) + ) + backwarp_tenGrid[k] = torch.cat([tenHorizontal, tenVertical], 1).to(device) + + tenFlow = torch.cat( + [ + tenFlow[:, 0:1, :, :] / ((tenInput.shape[3] - 1.0) / 2.0), + tenFlow[:, 1:2, :, :] / ((tenInput.shape[2] - 1.0) / 2.0), + ], + 1, + ) + + g = (backwarp_tenGrid[k] + tenFlow).permute(0, 2, 3, 1) + return torch.nn.functional.grid_sample( + input=tenInput, + grid=g, + mode="bilinear", + padding_mode="border", + align_corners=True, + ) + + +class MultiScaleTridentConv(nn.Module): + def __init__( + self, + in_channels, + out_channels, + kernel_size, + stride=1, + strides=1, + paddings=0, + dilations=1, + dilation=1, + groups=1, + num_branch=1, + test_branch_idx=-1, + bias=False, + norm=None, + activation=None, + ): + super(MultiScaleTridentConv, self).__init__() + self.in_channels = in_channels + self.out_channels = out_channels + self.kernel_size = _pair(kernel_size) + self.num_branch = num_branch + self.stride = _pair(stride) + self.groups = groups + self.with_bias = bias + self.dilation = dilation + if isinstance(paddings, int): + paddings = [paddings] * self.num_branch + if isinstance(dilations, int): + dilations = [dilations] * self.num_branch + if isinstance(strides, int): + strides = [strides] * self.num_branch + self.paddings = [_pair(padding) for padding in paddings] + self.dilations = [_pair(dilation) for dilation in dilations] + self.strides = [_pair(stride) for stride in strides] + self.test_branch_idx = test_branch_idx + self.norm = norm + self.activation = activation + + assert len({self.num_branch, len(self.paddings), len(self.strides)}) == 1 + + self.weight = nn.Parameter( + torch.Tensor(out_channels, in_channels // groups, *self.kernel_size) + ) + if bias: + self.bias = nn.Parameter(torch.Tensor(out_channels)) + else: + self.bias = None + + nn.init.kaiming_uniform_(self.weight, nonlinearity="relu") + if self.bias is not None: + nn.init.constant_(self.bias, 0) + + def forward(self, inputs): + num_branch = ( + self.num_branch if self.training or self.test_branch_idx == -1 else 1 + ) + assert len(inputs) == num_branch + + if self.training or self.test_branch_idx == -1: + outputs = [ + F.conv2d( + input, + self.weight, + self.bias, + stride, + padding, + self.dilation, + self.groups, + ) + for input, stride, padding in zip(inputs, self.strides, self.paddings) + ] + else: + outputs = [ + F.conv2d( + inputs[0], + self.weight, + self.bias, + self.strides[self.test_branch_idx] + if self.test_branch_idx == -1 + else self.strides[-1], + self.paddings[self.test_branch_idx] + if self.test_branch_idx == -1 + else self.paddings[-1], + self.dilation, + self.groups, + ) + ] + + if self.norm is not None: + outputs = [self.norm(x) for x in outputs] + if self.activation is not None: + outputs = [self.activation(x) for x in outputs] + return outputs + + +class ResidualBlock_class(nn.Module): + def __init__( + self, + in_planes, + planes, + norm_layer=nn.InstanceNorm2d, + stride=1, + dilation=1, + ): + super(ResidualBlock_class, self).__init__() + + self.conv1 = nn.Conv2d( + in_planes, + planes, + kernel_size=3, + dilation=dilation, + padding=dilation, + stride=stride, + bias=False, + ) + self.conv2 = nn.Conv2d( + planes, + planes, + kernel_size=3, + dilation=dilation, + padding=dilation, + bias=False, + ) + self.relu = nn.ReLU(inplace=True) + + self.norm1 = norm_layer(planes) + self.norm2 = norm_layer(planes) + if not stride == 1 or in_planes != planes: + self.norm3 = norm_layer(planes) + + if stride == 1 and in_planes == planes: + self.downsample = None + else: + self.downsample = nn.Sequential( + nn.Conv2d(in_planes, planes, kernel_size=1, stride=stride), self.norm3 + ) + + def forward(self, x): + y = x + y = self.relu(self.norm1(self.conv1(y))) + y = self.relu(self.norm2(self.conv2(y))) + + if self.downsample is not None: + x = self.downsample(x) + + return self.relu(x + y) + + +class CNNEncoder(nn.Module): + def __init__( + self, + output_dim=128, + norm_layer=nn.InstanceNorm2d, + num_output_scales=1, + **kwargs, + ): + super(CNNEncoder, self).__init__() + self.num_branch = num_output_scales + + feature_dims = [64, 96, 128] + + self.conv1 = nn.Conv2d( + 3, feature_dims[0], kernel_size=7, stride=2, padding=3, bias=False + ) # 1/2 + self.norm1 = norm_layer(feature_dims[0]) + self.relu1 = nn.ReLU(inplace=True) + + self.in_planes = feature_dims[0] + self.layer1 = self._make_layer( + feature_dims[0], stride=1, norm_layer=norm_layer + ) # 1/2 + self.layer2 = self._make_layer( + feature_dims[1], stride=2, norm_layer=norm_layer + ) # 1/4 + + # highest resolution 1/4 or 1/8 + stride = 2 if num_output_scales == 1 else 1 + self.layer3 = self._make_layer( + feature_dims[2], + stride=stride, + norm_layer=norm_layer, + ) # 1/4 or 1/8 + + self.conv2 = nn.Conv2d(feature_dims[2], output_dim, 1, 1, 0) + + if self.num_branch > 1: + if self.num_branch == 4: + strides = (1, 2, 4, 8) + elif self.num_branch == 3: + strides = (1, 2, 4) + elif self.num_branch == 2: + strides = (1, 2) + else: + raise ValueError + + self.trident_conv = MultiScaleTridentConv( + output_dim, + output_dim, + kernel_size=3, + strides=strides, + paddings=1, + num_branch=self.num_branch, + ) + + for m in self.modules(): + if isinstance(m, nn.Conv2d): + nn.init.kaiming_normal_(m.weight, mode="fan_out", nonlinearity="relu") + elif isinstance(m, (nn.BatchNorm2d, nn.InstanceNorm2d, nn.GroupNorm)): + if m.weight is not None: + nn.init.constant_(m.weight, 1) + if m.bias is not None: + nn.init.constant_(m.bias, 0) + + def _make_layer(self, dim, stride=1, dilation=1, norm_layer=nn.InstanceNorm2d): + layer1 = ResidualBlock_class( + self.in_planes, dim, norm_layer=norm_layer, stride=stride, dilation=dilation + ) + layer2 = ResidualBlock_class( + dim, dim, norm_layer=norm_layer, stride=1, dilation=dilation + ) + + layers = (layer1, layer2) + + self.in_planes = dim + return nn.Sequential(*layers) + + def forward(self, x): + x = self.conv1(x) + x = self.norm1(x) + x = self.relu1(x) + + x = self.layer1(x) # 1/2 + x = self.layer2(x) # 1/4 + x = self.layer3(x) # 1/8 or 1/4 + + x = self.conv2(x) + + if self.num_branch > 1: + out = self.trident_conv([x] * self.num_branch) # high to low res + else: + out = [x] + + return out + + +def single_head_full_attention(q, k, v): + # q, k, v: [B, L, C] + assert q.dim() == k.dim() == v.dim() == 3 + + scores = torch.matmul(q, k.permute(0, 2, 1)) / (q.size(2) ** 0.5) # [B, L, L] + attn = torch.softmax(scores, dim=2) # [B, L, L] + out = torch.matmul(attn, v) # [B, L, C] + + return out + + +def generate_shift_window_attn_mask( + input_resolution, + window_size_h, + window_size_w, + shift_size_h, + shift_size_w, + device=get_torch_device(), +): + # Ref: https://github.com/microsoft/Swin-Transformer/blob/main/models/swin_transformer.py + # calculate attention mask for SW-MSA + h, w = input_resolution + img_mask = torch.zeros((1, h, w, 1)).to(device) # 1 H W 1 + h_slices = ( + slice(0, -window_size_h), + slice(-window_size_h, -shift_size_h), + slice(-shift_size_h, None), + ) + w_slices = ( + slice(0, -window_size_w), + slice(-window_size_w, -shift_size_w), + slice(-shift_size_w, None), + ) + cnt = 0 + for h in h_slices: + for w in w_slices: + img_mask[:, h, w, :] = cnt + cnt += 1 + + mask_windows = split_feature( + img_mask, num_splits=input_resolution[-1] // window_size_w, channel_last=True + ) + + mask_windows = mask_windows.view(-1, window_size_h * window_size_w) + attn_mask = mask_windows.unsqueeze(1) - mask_windows.unsqueeze(2) + attn_mask = attn_mask.masked_fill(attn_mask != 0, float(-100.0)).masked_fill( + attn_mask == 0, float(0.0) + ) + + return attn_mask + + +def single_head_split_window_attention( + q, + k, + v, + num_splits=1, + with_shift=False, + h=None, + w=None, + attn_mask=None, +): + # Ref: https://github.com/microsoft/Swin-Transformer/blob/main/models/swin_transformer.py + # q, k, v: [B, L, C] + assert q.dim() == k.dim() == v.dim() == 3 + + assert h is not None and w is not None + assert q.size(1) == h * w + + b, _, c = q.size() + + b_new = b * num_splits * num_splits + + window_size_h = h // num_splits + window_size_w = w // num_splits + + q = q.view(b, h, w, c) # [B, H, W, C] + k = k.view(b, h, w, c) + v = v.view(b, h, w, c) + + scale_factor = c**0.5 + + if with_shift: + assert attn_mask is not None # compute once + shift_size_h = window_size_h // 2 + shift_size_w = window_size_w // 2 + + q = torch.roll(q, shifts=(-shift_size_h, -shift_size_w), dims=(1, 2)) + k = torch.roll(k, shifts=(-shift_size_h, -shift_size_w), dims=(1, 2)) + v = torch.roll(v, shifts=(-shift_size_h, -shift_size_w), dims=(1, 2)) + + q = split_feature( + q, num_splits=num_splits, channel_last=True + ) # [B*K*K, H/K, W/K, C] + k = split_feature(k, num_splits=num_splits, channel_last=True) + v = split_feature(v, num_splits=num_splits, channel_last=True) + + scores = ( + torch.matmul(q.view(b_new, -1, c), k.view(b_new, -1, c).permute(0, 2, 1)) + / scale_factor + ) # [B*K*K, H/K*W/K, H/K*W/K] + + if with_shift: + scores += attn_mask.repeat(b, 1, 1) + + attn = torch.softmax(scores, dim=-1) + + out = torch.matmul(attn, v.view(b_new, -1, c)) # [B*K*K, H/K*W/K, C] + + out = merge_splits( + out.view(b_new, h // num_splits, w // num_splits, c), + num_splits=num_splits, + channel_last=True, + ) # [B, H, W, C] + + # shift back + if with_shift: + out = torch.roll(out, shifts=(shift_size_h, shift_size_w), dims=(1, 2)) + + out = out.view(b, -1, c) + + return out + + +class TransformerLayer(nn.Module): + def __init__( + self, + d_model=256, + nhead=1, + attention_type="swin", + no_ffn=False, + ffn_dim_expansion=4, + with_shift=False, + **kwargs, + ): + super(TransformerLayer, self).__init__() + + self.dim = d_model + self.nhead = nhead + self.attention_type = attention_type + self.no_ffn = no_ffn + + self.with_shift = with_shift + + # multi-head attention + self.q_proj = nn.Linear(d_model, d_model, bias=False) + self.k_proj = nn.Linear(d_model, d_model, bias=False) + self.v_proj = nn.Linear(d_model, d_model, bias=False) + + self.merge = nn.Linear(d_model, d_model, bias=False) + + self.norm1 = nn.LayerNorm(d_model) + + # no ffn after self-attn, with ffn after cross-attn + if not self.no_ffn: + in_channels = d_model * 2 + self.mlp = nn.Sequential( + nn.Linear(in_channels, in_channels * ffn_dim_expansion, bias=False), + nn.GELU(), + nn.Linear(in_channels * ffn_dim_expansion, d_model, bias=False), + ) + + self.norm2 = nn.LayerNorm(d_model) + + def forward( + self, + source, + target, + height=None, + width=None, + shifted_window_attn_mask=None, + attn_num_splits=None, + **kwargs, + ): + # source, target: [B, L, C] + query, key, value = source, target, target + + # single-head attention + query = self.q_proj(query) # [B, L, C] + key = self.k_proj(key) # [B, L, C] + value = self.v_proj(value) # [B, L, C] + + if self.attention_type == "swin" and attn_num_splits > 1: + if self.nhead > 1: + # we observe that multihead attention slows down the speed and increases the memory consumption + # without bringing obvious performance gains and thus the implementation is removed + raise NotImplementedError + else: + message = single_head_split_window_attention( + query, + key, + value, + num_splits=attn_num_splits, + with_shift=self.with_shift, + h=height, + w=width, + attn_mask=shifted_window_attn_mask, + ) + else: + message = single_head_full_attention(query, key, value) # [B, L, C] + + message = self.merge(message) # [B, L, C] + message = self.norm1(message) + + if not self.no_ffn: + message = self.mlp(torch.cat([source, message], dim=-1)) + message = self.norm2(message) + + return source + message + + +class TransformerBlock(nn.Module): + """self attention + cross attention + FFN""" + + def __init__( + self, + d_model=256, + nhead=1, + attention_type="swin", + ffn_dim_expansion=4, + with_shift=False, + **kwargs, + ): + super(TransformerBlock, self).__init__() + + self.self_attn = TransformerLayer( + d_model=d_model, + nhead=nhead, + attention_type=attention_type, + no_ffn=True, + ffn_dim_expansion=ffn_dim_expansion, + with_shift=with_shift, + ) + + self.cross_attn_ffn = TransformerLayer( + d_model=d_model, + nhead=nhead, + attention_type=attention_type, + ffn_dim_expansion=ffn_dim_expansion, + with_shift=with_shift, + ) + + def forward( + self, + source, + target, + height=None, + width=None, + shifted_window_attn_mask=None, + attn_num_splits=None, + **kwargs, + ): + # source, target: [B, L, C] + + # self attention + source = self.self_attn( + source, + source, + height=height, + width=width, + shifted_window_attn_mask=shifted_window_attn_mask, + attn_num_splits=attn_num_splits, + ) + + # cross attention and ffn + source = self.cross_attn_ffn( + source, + target, + height=height, + width=width, + shifted_window_attn_mask=shifted_window_attn_mask, + attn_num_splits=attn_num_splits, + ) + + return source + + +class FeatureTransformer(nn.Module): + def __init__( + self, + num_layers=6, + d_model=128, + nhead=1, + attention_type="swin", + ffn_dim_expansion=4, + **kwargs, + ): + super(FeatureTransformer, self).__init__() + + self.attention_type = attention_type + + self.d_model = d_model + self.nhead = nhead + + self.layers = nn.ModuleList( + [ + TransformerBlock( + d_model=d_model, + nhead=nhead, + attention_type=attention_type, + ffn_dim_expansion=ffn_dim_expansion, + with_shift=True + if attention_type == "swin" and i % 2 == 1 + else False, + ) + for i in range(num_layers) + ] + ) + + for p in self.parameters(): + if p.dim() > 1: + nn.init.xavier_uniform_(p) + + def forward( + self, + feature0, + feature1, + attn_num_splits=None, + **kwargs, + ): + b, c, h, w = feature0.shape + assert self.d_model == c + + feature0 = feature0.flatten(-2).permute(0, 2, 1) # [B, H*W, C] + feature1 = feature1.flatten(-2).permute(0, 2, 1) # [B, H*W, C] + + if self.attention_type == "swin" and attn_num_splits > 1: + # global and refine use different number of splits + window_size_h = h // attn_num_splits + window_size_w = w // attn_num_splits + + # compute attn mask once + shifted_window_attn_mask = generate_shift_window_attn_mask( + input_resolution=(h, w), + window_size_h=window_size_h, + window_size_w=window_size_w, + shift_size_h=window_size_h // 2, + shift_size_w=window_size_w // 2, + device=feature0.device, + ) # [K*K, H/K*W/K, H/K*W/K] + else: + shifted_window_attn_mask = None + + # concat feature0 and feature1 in batch dimension to compute in parallel + concat0 = torch.cat((feature0, feature1), dim=0) # [2B, H*W, C] + concat1 = torch.cat((feature1, feature0), dim=0) # [2B, H*W, C] + + for layer in self.layers: + concat0 = layer( + concat0, + concat1, + height=h, + width=w, + shifted_window_attn_mask=shifted_window_attn_mask, + attn_num_splits=attn_num_splits, + ) + + # update feature1 + concat1 = torch.cat(concat0.chunk(chunks=2, dim=0)[::-1], dim=0) + + feature0, feature1 = concat0.chunk(chunks=2, dim=0) # [B, H*W, C] + + # reshape back + feature0 = ( + feature0.view(b, h, w, c).permute(0, 3, 1, 2).contiguous() + ) # [B, C, H, W] + feature1 = ( + feature1.view(b, h, w, c).permute(0, 3, 1, 2).contiguous() + ) # [B, C, H, W] + + return feature0, feature1 + + +class FeatureFlowAttention(nn.Module): + """ + flow propagation with self-attention on feature + query: feature0, key: feature0, value: flow + """ + + def __init__( + self, + in_channels, + **kwargs, + ): + super(FeatureFlowAttention, self).__init__() + + self.q_proj = nn.Linear(in_channels, in_channels) + self.k_proj = nn.Linear(in_channels, in_channels) + + for p in self.parameters(): + if p.dim() > 1: + nn.init.xavier_uniform_(p) + + def forward( + self, + feature0, + flow, + local_window_attn=False, + local_window_radius=1, + **kwargs, + ): + # q, k: feature [B, C, H, W], v: flow [B, 2, H, W] + if local_window_attn: + return self.forward_local_window_attn( + feature0, flow, local_window_radius=local_window_radius + ) + + b, c, h, w = feature0.size() + + query = feature0.view(b, c, h * w).permute(0, 2, 1) # [B, H*W, C] + + # a note: the ``correct'' implementation should be: + # ``query = self.q_proj(query), key = self.k_proj(query)'' + # this problem is observed while cleaning up the code + # however, this doesn't affect the performance since the projection is a linear operation, + # thus the two projection matrices for key can be merged + # so I just leave it as is in order to not re-train all models :) + query = self.q_proj(query) # [B, H*W, C] + key = self.k_proj(query) # [B, H*W, C] + + value = flow.view(b, flow.size(1), h * w).permute(0, 2, 1) # [B, H*W, 2] + + scores = torch.matmul(query, key.permute(0, 2, 1)) / (c**0.5) # [B, H*W, H*W] + prob = torch.softmax(scores, dim=-1) + + out = torch.matmul(prob, value) # [B, H*W, 2] + out = out.view(b, h, w, value.size(-1)).permute(0, 3, 1, 2) # [B, 2, H, W] + + return out + + def forward_local_window_attn( + self, + feature0, + flow, + local_window_radius=1, + ): + assert flow.size(1) == 2 + assert local_window_radius > 0 + + b, c, h, w = feature0.size() + + feature0_reshape = self.q_proj( + feature0.view(b, c, -1).permute(0, 2, 1) + ).reshape( + b * h * w, 1, c + ) # [B*H*W, 1, C] + + kernel_size = 2 * local_window_radius + 1 + + feature0_proj = ( + self.k_proj(feature0.view(b, c, -1).permute(0, 2, 1)) + .permute(0, 2, 1) + .reshape(b, c, h, w) + ) + + feature0_window = F.unfold( + feature0_proj, kernel_size=kernel_size, padding=local_window_radius + ) # [B, C*(2R+1)^2), H*W] + + feature0_window = ( + feature0_window.view(b, c, kernel_size**2, h, w) + .permute(0, 3, 4, 1, 2) + .reshape(b * h * w, c, kernel_size**2) + ) # [B*H*W, C, (2R+1)^2] + + flow_window = F.unfold( + flow, kernel_size=kernel_size, padding=local_window_radius + ) # [B, 2*(2R+1)^2), H*W] + + flow_window = ( + flow_window.view(b, 2, kernel_size**2, h, w) + .permute(0, 3, 4, 2, 1) + .reshape(b * h * w, kernel_size**2, 2) + ) # [B*H*W, (2R+1)^2, 2] + + scores = torch.matmul(feature0_reshape, feature0_window) / ( + c**0.5 + ) # [B*H*W, 1, (2R+1)^2] + + prob = torch.softmax(scores, dim=-1) + + out = ( + torch.matmul(prob, flow_window) + .view(b, h, w, 2) + .permute(0, 3, 1, 2) + .contiguous() + ) # [B, 2, H, W] + + return out + + +def global_correlation_softmax( + feature0, + feature1, + pred_bidir_flow=False, +): + # global correlation + b, c, h, w = feature0.shape + feature0 = feature0.view(b, c, -1).permute(0, 2, 1) # [B, H*W, C] + feature1 = feature1.view(b, c, -1) # [B, C, H*W] + + correlation = torch.matmul(feature0, feature1).view(b, h, w, h, w) / ( + c**0.5 + ) # [B, H, W, H, W] + + # flow from softmax + init_grid = coords_grid(b, h, w).to(correlation.device) # [B, 2, H, W] + grid = init_grid.view(b, 2, -1).permute(0, 2, 1) # [B, H*W, 2] + + correlation = correlation.view(b, h * w, h * w) # [B, H*W, H*W] + + if pred_bidir_flow: + correlation = torch.cat( + (correlation, correlation.permute(0, 2, 1)), dim=0 + ) # [2*B, H*W, H*W] + init_grid = init_grid.repeat(2, 1, 1, 1) # [2*B, 2, H, W] + grid = grid.repeat(2, 1, 1) # [2*B, H*W, 2] + b = b * 2 + + prob = F.softmax(correlation, dim=-1) # [B, H*W, H*W] + + correspondence = ( + torch.matmul(prob, grid).view(b, h, w, 2).permute(0, 3, 1, 2) + ) # [B, 2, H, W] + + # when predicting bidirectional flow, flow is the concatenation of forward flow and backward flow + flow = correspondence - init_grid + + return flow, prob + + +def local_correlation_softmax( + feature0, + feature1, + local_radius, + padding_mode="zeros", +): + b, c, h, w = feature0.size() + coords_init = coords_grid(b, h, w).to(feature0.device) # [B, 2, H, W] + coords = coords_init.view(b, 2, -1).permute(0, 2, 1) # [B, H*W, 2] + + local_h = 2 * local_radius + 1 + local_w = 2 * local_radius + 1 + + window_grid = generate_window_grid( + -local_radius, + local_radius, + -local_radius, + local_radius, + local_h, + local_w, + device=feature0.device, + ) # [2R+1, 2R+1, 2] + window_grid = window_grid.reshape(-1, 2).repeat(b, 1, 1, 1) # [B, 1, (2R+1)^2, 2] + sample_coords = coords.unsqueeze(-2) + window_grid # [B, H*W, (2R+1)^2, 2] + + sample_coords_softmax = sample_coords + + # exclude coords that are out of image space + valid_x = (sample_coords[:, :, :, 0] >= 0) & ( + sample_coords[:, :, :, 0] < w + ) # [B, H*W, (2R+1)^2] + valid_y = (sample_coords[:, :, :, 1] >= 0) & ( + sample_coords[:, :, :, 1] < h + ) # [B, H*W, (2R+1)^2] + + valid = ( + valid_x & valid_y + ) # [B, H*W, (2R+1)^2], used to mask out invalid values when softmax + + # normalize coordinates to [-1, 1] + sample_coords_norm = normalize_coords(sample_coords, h, w) # [-1, 1] + window_feature = F.grid_sample( + feature1, sample_coords_norm, padding_mode=padding_mode, align_corners=True + ).permute( + 0, 2, 1, 3 + ) # [B, H*W, C, (2R+1)^2] + feature0_view = feature0.permute(0, 2, 3, 1).view(b, h * w, 1, c) # [B, H*W, 1, C] + + corr = torch.matmul(feature0_view, window_feature).view(b, h * w, -1) / ( + c**0.5 + ) # [B, H*W, (2R+1)^2] + + # mask invalid locations + corr[~valid] = -1e9 + + prob = F.softmax(corr, -1) # [B, H*W, (2R+1)^2] + + correspondence = ( + torch.matmul(prob.unsqueeze(-2), sample_coords_softmax) + .squeeze(-2) + .view(b, h, w, 2) + .permute(0, 3, 1, 2) + ) # [B, 2, H, W] + + flow = correspondence - coords_init + match_prob = prob + + return flow, match_prob + + +def coords_grid(b, h, w, homogeneous=False, device=None): + y, x = torch.meshgrid(torch.arange(h), torch.arange(w)) # [H, W] + + stacks = [x, y] + + if homogeneous: + ones = torch.ones_like(x) # [H, W] + stacks.append(ones) + + grid = torch.stack(stacks, dim=0).float() # [2, H, W] or [3, H, W] + + grid = grid[None].repeat(b, 1, 1, 1) # [B, 2, H, W] or [B, 3, H, W] + + if device is not None: + grid = grid.to(device) + + return grid + + +def generate_window_grid(h_min, h_max, w_min, w_max, len_h, len_w, device=None): + assert device is not None + + x, y = torch.meshgrid( + [ + torch.linspace(w_min, w_max, len_w, device=device), + torch.linspace(h_min, h_max, len_h, device=device), + ], + ) + grid = torch.stack((x, y), -1).transpose(0, 1).float() # [H, W, 2] + + return grid + + +def normalize_coords(coords, h, w): + # coords: [B, H, W, 2] + c = torch.Tensor([(w - 1) / 2.0, (h - 1) / 2.0]).float().to(coords.device) + return (coords - c) / c # [-1, 1] + + +def bilinear_sample( + img, sample_coords, mode="bilinear", padding_mode="zeros", return_mask=False +): + # img: [B, C, H, W] + # sample_coords: [B, 2, H, W] in image scale + if sample_coords.size(1) != 2: # [B, H, W, 2] + sample_coords = sample_coords.permute(0, 3, 1, 2) + + b, _, h, w = sample_coords.shape + + # Normalize to [-1, 1] + x_grid = 2 * sample_coords[:, 0] / (w - 1) - 1 + y_grid = 2 * sample_coords[:, 1] / (h - 1) - 1 + + grid = torch.stack([x_grid, y_grid], dim=-1) # [B, H, W, 2] + + img = F.grid_sample( + img, grid, mode=mode, padding_mode=padding_mode, align_corners=True + ) + + if return_mask: + mask = ( + (x_grid >= -1) & (y_grid >= -1) & (x_grid <= 1) & (y_grid <= 1) + ) # [B, H, W] + + return img, mask + + return img + + +def flow_warp(feature, flow, mask=False, padding_mode="zeros"): + b, c, h, w = feature.size() + assert flow.size(1) == 2 + + grid = coords_grid(b, h, w).to(flow.device) + flow # [B, 2, H, W] + + return bilinear_sample(feature, grid, padding_mode=padding_mode, return_mask=mask) + + +def forward_backward_consistency_check(fwd_flow, bwd_flow, alpha=0.01, beta=0.5): + # fwd_flow, bwd_flow: [B, 2, H, W] + # alpha and beta values are following UnFlow (https://arxiv.org/abs/1711.07837) + assert fwd_flow.dim() == 4 and bwd_flow.dim() == 4 + assert fwd_flow.size(1) == 2 and bwd_flow.size(1) == 2 + flow_mag = torch.norm(fwd_flow, dim=1) + torch.norm(bwd_flow, dim=1) # [B, H, W] + + warped_bwd_flow = flow_warp(bwd_flow, fwd_flow) # [B, 2, H, W] + warped_fwd_flow = flow_warp(fwd_flow, bwd_flow) # [B, 2, H, W] + + diff_fwd = torch.norm(fwd_flow + warped_bwd_flow, dim=1) # [B, H, W] + diff_bwd = torch.norm(bwd_flow + warped_fwd_flow, dim=1) + + threshold = alpha * flow_mag + beta + + fwd_occ = (diff_fwd > threshold).float() # [B, H, W] + bwd_occ = (diff_bwd > threshold).float() + + return fwd_occ, bwd_occ + + +class PositionEmbeddingSine(nn.Module): + """ + This is a more standard version of the position embedding, very similar to the one + used by the Attention is all you need paper, generalized to work on images. + """ + + def __init__(self, num_pos_feats=64, temperature=10000, normalize=True, scale=None): + super().__init__() + self.num_pos_feats = num_pos_feats + self.temperature = temperature + self.normalize = normalize + if scale is not None and normalize is False: + raise ValueError("normalize should be True if scale is passed") + if scale is None: + scale = 2 * math.pi + self.scale = scale + + def forward(self, x): + # x = tensor_list.tensors # [B, C, H, W] + # mask = tensor_list.mask # [B, H, W], input with padding, valid as 0 + b, c, h, w = x.size() + mask = torch.ones((b, h, w), device=x.device) # [B, H, W] + y_embed = mask.cumsum(1, dtype=torch.float32) + x_embed = mask.cumsum(2, dtype=torch.float32) + if self.normalize: + eps = 1e-6 + y_embed = y_embed / (y_embed[:, -1:, :] + eps) * self.scale + x_embed = x_embed / (x_embed[:, :, -1:] + eps) * self.scale + + dim_t = torch.arange(self.num_pos_feats, dtype=torch.float32, device=x.device) + dim_t = self.temperature ** (2 * (dim_t // 2) / self.num_pos_feats) + + pos_x = x_embed[:, :, :, None] / dim_t + pos_y = y_embed[:, :, :, None] / dim_t + pos_x = torch.stack( + (pos_x[:, :, :, 0::2].sin(), pos_x[:, :, :, 1::2].cos()), dim=4 + ).flatten(3) + pos_y = torch.stack( + (pos_y[:, :, :, 0::2].sin(), pos_y[:, :, :, 1::2].cos()), dim=4 + ).flatten(3) + pos = torch.cat((pos_y, pos_x), dim=3).permute(0, 3, 1, 2) + return pos + + +def split_feature( + feature, + num_splits=2, + channel_last=False, +): + if channel_last: # [B, H, W, C] + b, h, w, c = feature.size() + assert h % num_splits == 0 and w % num_splits == 0 + + b_new = b * num_splits * num_splits + h_new = h // num_splits + w_new = w // num_splits + + feature = ( + feature.view(b, num_splits, h // num_splits, num_splits, w // num_splits, c) + .permute(0, 1, 3, 2, 4, 5) + .reshape(b_new, h_new, w_new, c) + ) # [B*K*K, H/K, W/K, C] + else: # [B, C, H, W] + b, c, h, w = feature.size() + assert h % num_splits == 0 and w % num_splits == 0 + + b_new = b * num_splits * num_splits + h_new = h // num_splits + w_new = w // num_splits + + feature = ( + feature.view(b, c, num_splits, h // num_splits, num_splits, w // num_splits) + .permute(0, 2, 4, 1, 3, 5) + .reshape(b_new, c, h_new, w_new) + ) # [B*K*K, C, H/K, W/K] + + return feature + + +def merge_splits( + splits, + num_splits=2, + channel_last=False, +): + if channel_last: # [B*K*K, H/K, W/K, C] + b, h, w, c = splits.size() + new_b = b // num_splits // num_splits + + splits = splits.view(new_b, num_splits, num_splits, h, w, c) + merge = ( + splits.permute(0, 1, 3, 2, 4, 5) + .contiguous() + .view(new_b, num_splits * h, num_splits * w, c) + ) # [B, H, W, C] + else: # [B*K*K, C, H/K, W/K] + b, c, h, w = splits.size() + new_b = b // num_splits // num_splits + + splits = splits.view(new_b, num_splits, num_splits, c, h, w) + merge = ( + splits.permute(0, 3, 1, 4, 2, 5) + .contiguous() + .view(new_b, c, num_splits * h, num_splits * w) + ) # [B, C, H, W] + + return merge + + +def normalize_img(img0, img1): + # loaded images are in [0, 255] + # normalize by ImageNet mean and std + mean = torch.tensor([0.485, 0.456, 0.406]).view(1, 3, 1, 1).to(img1.device) + std = torch.tensor([0.229, 0.224, 0.225]).view(1, 3, 1, 1).to(img1.device) + img0 = (img0 - mean) / std + img1 = (img1 - mean) / std + + return img0, img1 + + +def feature_add_position(feature0, feature1, attn_splits, feature_channels): + pos_enc = PositionEmbeddingSine(num_pos_feats=feature_channels // 2) + + if attn_splits > 1: # add position in splited window + feature0_splits = split_feature(feature0, num_splits=attn_splits) + feature1_splits = split_feature(feature1, num_splits=attn_splits) + + position = pos_enc(feature0_splits) + + feature0_splits = feature0_splits + position + feature1_splits = feature1_splits + position + + feature0 = merge_splits(feature0_splits, num_splits=attn_splits) + feature1 = merge_splits(feature1_splits, num_splits=attn_splits) + else: + position = pos_enc(feature0) + + feature0 = feature0 + position + feature1 = feature1 + position + + return feature0, feature1 + + +class GMFlow(nn.Module): + def __init__( + self, + num_scales=2, + upsample_factor=4, + feature_channels=128, + attention_type="swin", + num_transformer_layers=6, + ffn_dim_expansion=4, + num_head=1, + **kwargs, + ): + super(GMFlow, self).__init__() + + self.num_scales = num_scales + self.feature_channels = feature_channels + self.upsample_factor = upsample_factor + self.attention_type = attention_type + self.num_transformer_layers = num_transformer_layers + + # CNN backbone + self.backbone = CNNEncoder( + output_dim=feature_channels, num_output_scales=num_scales + ) + + # Transformer + self.transformer = FeatureTransformer( + num_layers=num_transformer_layers, + d_model=feature_channels, + nhead=num_head, + attention_type=attention_type, + ffn_dim_expansion=ffn_dim_expansion, + ) + + # flow propagation with self-attn + self.feature_flow_attn = FeatureFlowAttention(in_channels=feature_channels) + + # convex upsampling: concat feature0 and flow as input + self.upsampler = nn.Sequential( + nn.Conv2d(2 + feature_channels, 256, 3, 1, 1), + nn.ReLU(inplace=True), + nn.Conv2d(256, upsample_factor**2 * 9, 1, 1, 0), + ) + + def extract_feature(self, img0, img1): + concat = torch.cat((img0, img1), dim=0) # [2B, C, H, W] + features = self.backbone( + concat + ) # list of [2B, C, H, W], resolution from high to low + + # reverse: resolution from low to high + features = features[::-1] + + feature0, feature1 = [], [] + + for i in range(len(features)): + feature = features[i] + chunks = torch.chunk(feature, 2, 0) # tuple + feature0.append(chunks[0]) + feature1.append(chunks[1]) + + return feature0, feature1 + + def upsample_flow( + self, + flow, + feature, + bilinear=False, + upsample_factor=8, + ): + if bilinear: + up_flow = ( + F.interpolate( + flow, + scale_factor=upsample_factor, + mode="bilinear", + align_corners=True, + ) + * upsample_factor + ) + + else: + # convex upsampling + concat = torch.cat((flow, feature), dim=1) + + mask = self.upsampler(concat) + b, flow_channel, h, w = flow.shape + mask = mask.view( + b, 1, 9, self.upsample_factor, self.upsample_factor, h, w + ) # [B, 1, 9, K, K, H, W] + mask = torch.softmax(mask, dim=2) + + up_flow = F.unfold(self.upsample_factor * flow, [3, 3], padding=1) + up_flow = up_flow.view( + b, flow_channel, 9, 1, 1, h, w + ) # [B, 2, 9, 1, 1, H, W] + + up_flow = torch.sum(mask * up_flow, dim=2) # [B, 2, K, K, H, W] + up_flow = up_flow.permute(0, 1, 4, 2, 5, 3) # [B, 2, K, H, K, W] + up_flow = up_flow.reshape( + b, flow_channel, self.upsample_factor * h, self.upsample_factor * w + ) # [B, 2, K*H, K*W] + + return up_flow + + def forward( + self, + img0, + img1, + attn_splits_list=[2, 8], + corr_radius_list=[-1, 4], + prop_radius_list=[-1, 1], + pred_bidir_flow=False, + **kwargs, + ): + img0, img1 = normalize_img(img0, img1) # [B, 3, H, W] + + # resolution low to high + feature0_list, feature1_list = self.extract_feature( + img0, img1 + ) # list of features + + flow = None + + assert ( + len(attn_splits_list) + == len(corr_radius_list) + == len(prop_radius_list) + == self.num_scales + ) + + for scale_idx in range(self.num_scales): + feature0, feature1 = feature0_list[scale_idx], feature1_list[scale_idx] + + if pred_bidir_flow and scale_idx > 0: + # predicting bidirectional flow with refinement + feature0, feature1 = torch.cat((feature0, feature1), dim=0), torch.cat( + (feature1, feature0), dim=0 + ) + + upsample_factor = self.upsample_factor * ( + 2 ** (self.num_scales - 1 - scale_idx) + ) + + if scale_idx > 0: + flow = ( + F.interpolate( + flow, scale_factor=2, mode="bilinear", align_corners=True + ) + * 2 + ) + + if flow is not None: + flow = flow.detach() + feature1 = flow_warp(feature1, flow) # [B, C, H, W] + + attn_splits = attn_splits_list[scale_idx] + corr_radius = corr_radius_list[scale_idx] + prop_radius = prop_radius_list[scale_idx] + + # add position to features + feature0, feature1 = feature_add_position( + feature0, feature1, attn_splits, self.feature_channels + ) + + # Transformer + feature0, feature1 = self.transformer( + feature0, feature1, attn_num_splits=attn_splits + ) + + # correlation and softmax + if corr_radius == -1: # global matching + flow_pred = global_correlation_softmax( + feature0, feature1, pred_bidir_flow + )[0] + else: # local matching + flow_pred = local_correlation_softmax(feature0, feature1, corr_radius)[ + 0 + ] + + # flow or residual flow + flow = flow + flow_pred if flow is not None else flow_pred + + # upsample to the original resolution for supervison + if ( + self.training + ): # only need to upsample intermediate flow predictions at training time + flow_bilinear = self.upsample_flow( + flow, None, bilinear=True, upsample_factor=upsample_factor + ) + + # flow propagation with self-attn + if pred_bidir_flow and scale_idx == 0: + feature0 = torch.cat( + (feature0, feature1), dim=0 + ) # [2*B, C, H, W] for propagation + flow = self.feature_flow_attn( + feature0, + flow.detach(), + local_window_attn=prop_radius > 0, + local_window_radius=prop_radius, + ) + + # bilinear upsampling at training time except the last one + if self.training and scale_idx < self.num_scales - 1: + flow_up = self.upsample_flow( + flow, feature0, bilinear=True, upsample_factor=upsample_factor + ) + + if scale_idx == self.num_scales - 1: + flow_up = self.upsample_flow(flow, feature0) + + return flow_up + + +backwarp_tenGrid = {} + + +def backwarp(tenIn, tenflow): + if str(tenflow.shape) not in backwarp_tenGrid: + tenHor = ( + torch.linspace( + start=-1.0, + end=1.0, + steps=tenflow.shape[3], + dtype=tenflow.dtype, + device=tenflow.device, + ) + .view(1, 1, 1, -1) + .repeat(1, 1, tenflow.shape[2], 1) + ) + tenVer = ( + torch.linspace( + start=-1.0, + end=1.0, + steps=tenflow.shape[2], + dtype=tenflow.dtype, + device=tenflow.device, + ) + .view(1, 1, -1, 1) + .repeat(1, 1, 1, tenflow.shape[3]) + ) + + backwarp_tenGrid[str(tenflow.shape)] = torch.cat([tenHor, tenVer], 1).to(get_torch_device()) + # end + + tenflow = torch.cat( + [ + tenflow[:, 0:1, :, :] / ((tenIn.shape[3] - 1.0) / 2.0), + tenflow[:, 1:2, :, :] / ((tenIn.shape[2] - 1.0) / 2.0), + ], + 1, + ) + + return torch.nn.functional.grid_sample( + input=tenIn, + grid=(backwarp_tenGrid[str(tenflow.shape)] + tenflow).permute(0, 2, 3, 1), + mode="bilinear", + padding_mode="zeros", + align_corners=True, + ) + + +class MetricNet(nn.Module): + def __init__(self): + super(MetricNet, self).__init__() + self.metric_in = nn.Conv2d(14, 64, 3, 1, 1) + self.metric_net1 = nn.Sequential(nn.PReLU(), nn.Conv2d(64, 64, 3, 1, 1)) + self.metric_net2 = nn.Sequential(nn.PReLU(), nn.Conv2d(64, 64, 3, 1, 1)) + self.metric_net3 = nn.Sequential(nn.PReLU(), nn.Conv2d(64, 64, 3, 1, 1)) + self.metric_out = nn.Sequential(nn.PReLU(), nn.Conv2d(64, 2, 3, 1, 1)) + + def forward(self, img0, img1, flow01, flow10): + metric0 = F.l1_loss(img0, backwarp(img1, flow01), reduction="none").mean( + [1], True + ) + metric1 = F.l1_loss(img1, backwarp(img0, flow10), reduction="none").mean( + [1], True + ) + + fwd_occ, bwd_occ = forward_backward_consistency_check(flow01, flow10) + + flow01 = torch.cat( + [ + flow01[:, 0:1, :, :] / ((flow01.shape[3] - 1.0) / 2.0), + flow01[:, 1:2, :, :] / ((flow01.shape[2] - 1.0) / 2.0), + ], + 1, + ) + flow10 = torch.cat( + [ + flow10[:, 0:1, :, :] / ((flow10.shape[3] - 1.0) / 2.0), + flow10[:, 1:2, :, :] / ((flow10.shape[2] - 1.0) / 2.0), + ], + 1, + ) + + img = torch.cat((img0, img1), 1) + metric = torch.cat((-metric0, -metric1), 1) + flow = torch.cat((flow01, flow10), 1) + occ = torch.cat((fwd_occ.unsqueeze(1), bwd_occ.unsqueeze(1)), 1) + + feat = self.metric_in(torch.cat((img, metric, flow, occ), 1)) + feat = self.metric_net1(feat) + feat + feat = self.metric_net2(feat) + feat + feat = self.metric_net3(feat) + feat + metric = self.metric_out(feat) + + metric = torch.tanh(metric) * 10 + + return metric[:, :1], metric[:, 1:2] + + +class FeatureNet(nn.Module): + """The quadratic model""" + + def __init__(self): + super(FeatureNet, self).__init__() + self.block1 = nn.Sequential( + nn.PReLU(), + nn.Conv2d(3, 64, 3, 2, 1), + nn.PReLU(), + nn.Conv2d(64, 64, 3, 1, 1), + ) + self.block2 = nn.Sequential( + nn.PReLU(), + nn.Conv2d(64, 128, 3, 2, 1), + nn.PReLU(), + nn.Conv2d(128, 128, 3, 1, 1), + ) + self.block3 = nn.Sequential( + nn.PReLU(), + nn.Conv2d(128, 192, 3, 2, 1), + nn.PReLU(), + nn.Conv2d(192, 192, 3, 1, 1), + ) + + def forward(self, x): + x1 = self.block1(x) + x2 = self.block2(x1) + x3 = self.block3(x2) + + return x1, x2, x3 + + +# Residual Block +def ResidualBlock(in_channels, out_channels, stride=1): + return torch.nn.Sequential( + nn.PReLU(), + nn.Conv2d( + in_channels, + out_channels, + kernel_size=3, + stride=stride, + padding=1, + bias=True, + ), + nn.PReLU(), + nn.Conv2d( + out_channels, + out_channels, + kernel_size=3, + stride=stride, + padding=1, + bias=True, + ), + ) + + +# downsample block +def DownsampleBlock(in_channels, out_channels, stride=2): + return torch.nn.Sequential( + nn.PReLU(), + nn.Conv2d( + in_channels, + out_channels, + kernel_size=3, + stride=stride, + padding=1, + bias=True, + ), + nn.PReLU(), + nn.Conv2d( + out_channels, out_channels, kernel_size=3, stride=1, padding=1, bias=True + ), + ) + + +# upsample block +def UpsampleBlock(in_channels, out_channels, stride=2): + return torch.nn.Sequential( + nn.PReLU(), + nn.ConvTranspose2d( + in_channels, + out_channels, + kernel_size=4, + stride=stride, + padding=1, + bias=True, + ), + nn.PReLU(), + nn.Conv2d( + out_channels, out_channels, kernel_size=3, stride=1, padding=1, bias=True + ), + ) + + +class PixelShuffleBlcok(nn.Module): + def __init__(self, in_feat, num_feat, num_out_ch): + super(PixelShuffleBlcok, self).__init__() + self.conv_before_upsample = nn.Sequential( + nn.Conv2d(in_feat, num_feat, 3, 1, 1), nn.PReLU() + ) + self.upsample = nn.Sequential( + nn.Conv2d(num_feat, 4 * num_feat, 3, 1, 1), nn.PixelShuffle(2) + ) + self.conv_last = nn.Conv2d(num_feat, num_out_ch, 3, 1, 1) + + def forward(self, x): + x = self.conv_before_upsample(x) + x = self.conv_last(self.upsample(x)) + return x + + +# grid network +class GridNet(nn.Module): + def __init__( + self, + in_channels=12, + in_channels1=128, + in_channels2=256, + in_channels3=384, + out_channels=3, + ): + super(GridNet, self).__init__() + + self.residual_model_head = ResidualBlock(in_channels, 64) + self.residual_model_head1 = ResidualBlock(in_channels1, 64) + self.residual_model_head2 = ResidualBlock(in_channels2, 128) + self.residual_model_head3 = ResidualBlock(in_channels3, 192) + + self.residual_model_01 = ResidualBlock(64, 64) + # self.residual_model_02=ResidualBlock(64, 64) + # self.residual_model_03=ResidualBlock(64, 64) + self.residual_model_04 = ResidualBlock(64, 64) + self.residual_model_05 = ResidualBlock(64, 64) + self.residual_model_tail = PixelShuffleBlcok(64, 64, out_channels) + + self.residual_model_11 = ResidualBlock(128, 128) + # self.residual_model_12=ResidualBlock(128, 128) + # self.residual_model_13=ResidualBlock(128, 128) + self.residual_model_14 = ResidualBlock(128, 128) + self.residual_model_15 = ResidualBlock(128, 128) + + self.residual_model_21 = ResidualBlock(192, 192) + # self.residual_model_22=ResidualBlock(192, 192) + # self.residual_model_23=ResidualBlock(192, 192) + self.residual_model_24 = ResidualBlock(192, 192) + self.residual_model_25 = ResidualBlock(192, 192) + + # + + self.downsample_model_10 = DownsampleBlock(64, 128) + self.downsample_model_20 = DownsampleBlock(128, 192) + + self.downsample_model_11 = DownsampleBlock(64, 128) + self.downsample_model_21 = DownsampleBlock(128, 192) + + # self.downsample_model_12=DownsampleBlock(64, 128) + # self.downsample_model_22=DownsampleBlock(128, 192) + + # + + # self.upsample_model_03=UpsampleBlock(128, 64) + # self.upsample_model_13=UpsampleBlock(192, 128) + + self.upsample_model_04 = UpsampleBlock(128, 64) + self.upsample_model_14 = UpsampleBlock(192, 128) + + self.upsample_model_05 = UpsampleBlock(128, 64) + self.upsample_model_15 = UpsampleBlock(192, 128) + + def forward(self, x, x1, x2, x3): + X00 = self.residual_model_head(x) + self.residual_model_head1( + x1 + ) # --- 182 ~ 185 + # X10 = self.residual_model_head1(x1) + + X01 = self.residual_model_01(X00) + X00 # --- 208 ~ 211 ,AddBackward1213 + + X10 = self.downsample_model_10(X00) + self.residual_model_head2( + x2 + ) # --- 186 ~ 189 + X20 = self.downsample_model_20(X10) + self.residual_model_head3( + x3 + ) # --- 190 ~ 193 + + residual_11 = ( + self.residual_model_11(X10) + X10 + ) # 201 ~ 204 , sum AddBackward1206 + downsample_11 = self.downsample_model_11(X01) # 214 ~ 217 + X11 = residual_11 + downsample_11 # --- AddBackward1218 + + residual_21 = ( + self.residual_model_21(X20) + X20 + ) # 194 ~ 197 , sum AddBackward1199 + downsample_21 = self.downsample_model_21(X11) # 219 ~ 222 + X21 = residual_21 + downsample_21 # AddBackward1223 + + X24 = self.residual_model_24(X21) + X21 # --- 224 ~ 227 , AddBackward1229 + X25 = self.residual_model_25(X24) + X24 # --- 230 ~ 233 , AddBackward1235 + + upsample_14 = self.upsample_model_14(X24) # 242 ~ 246 + residual_14 = self.residual_model_14(X11) + X11 # 248 ~ 251, AddBackward1253 + X14 = upsample_14 + residual_14 # --- AddBackward1254 + + upsample_04 = self.upsample_model_04(X14) # 268 ~ 272 + residual_04 = self.residual_model_04(X01) + X01 # 274 ~ 277, AddBackward1279 + X04 = upsample_04 + residual_04 # --- AddBackward1280 + + upsample_15 = self.upsample_model_15(X25) # 236 ~ 240 + residual_15 = self.residual_model_15(X14) + X14 # 255 ~ 258, AddBackward1260 + X15 = upsample_15 + residual_15 # AddBackward1261 + + upsample_05 = self.upsample_model_05(X15) # 262 ~ 266 + residual_05 = self.residual_model_05(X04) + X04 # 281 ~ 284,AddBackward1286 + X05 = upsample_05 + residual_05 # AddBackward1287 + + X_tail = self.residual_model_tail(X05) # 288 ~ 291 + + return X_tail +# end + +class Model: + def __init__(self): + self.flownet = GMFlow() + self.metricnet = MetricNet() + self.feat_ext = FeatureNet() + self.fusionnet = GridNet() + self.version = 3.9 + + def eval(self): + self.flownet.eval() + self.metricnet.eval() + self.feat_ext.eval() + self.fusionnet.eval() + + def device(self): + self.flownet.to(device) + self.metricnet.to(device) + self.feat_ext.to(device) + self.fusionnet.to(device) + + def load_model(self, path_dict): + #models/GMFSS_fortuna_flownet.pkl + self.flownet.load_state_dict(torch.load(path_dict["flownet"])) + #models/GMFSS_fortuna_metric.pkl + self.metricnet.load_state_dict(torch.load(path_dict["metricnet"])) + #models/GMFSS_fortuna_feat.pkl + self.feat_ext.load_state_dict(torch.load(path_dict["feat_ext"])) + #models/GMFSS_fortuna_fusionnet.pkl + self.fusionnet.load_state_dict(torch.load(path_dict["fusionnet"])) + + def reuse(self, img0, img1, scale): + feat11, feat12, feat13 = self.feat_ext(img0) + feat21, feat22, feat23 = self.feat_ext(img1) + + img0 = F.interpolate( + img0, scale_factor=0.5, mode="bilinear", align_corners=False + ) + img1 = F.interpolate( + img1, scale_factor=0.5, mode="bilinear", align_corners=False + ) + + if scale != 1.0: + imgf0 = F.interpolate( + img0, scale_factor=scale, mode="bilinear", align_corners=False + ) + imgf1 = F.interpolate( + img1, scale_factor=scale, mode="bilinear", align_corners=False + ) + else: + imgf0 = img0 + imgf1 = img1 + flow01 = self.flownet(imgf0, imgf1, return_flow=True) + flow10 = self.flownet(imgf1, imgf0, return_flow=True) + if scale != 1.0: + flow01 = ( + F.interpolate( + flow01, + scale_factor=1.0 / scale, + mode="bilinear", + align_corners=False, + ) + / scale + ) + flow10 = ( + F.interpolate( + flow10, + scale_factor=1.0 / scale, + mode="bilinear", + align_corners=False, + ) + / scale + ) + + metric0, metric1 = self.metricnet(img0, img1, flow01, flow10) + + return ( + flow01, + flow10, + metric0, + metric1, + feat11, + feat12, + feat13, + feat21, + feat22, + feat23, + ) + + def inference( + self, + img0, + img1, + flow01, + flow10, + metric0, + metric1, + feat11, + feat12, + feat13, + feat21, + feat22, + feat23, + timestep, + ): + F1t = timestep * flow01 + F2t = (1 - timestep) * flow10 + + Z1t = timestep * metric0 + Z2t = (1 - timestep) * metric1 + + img0 = F.interpolate( + img0, scale_factor=0.5, mode="bilinear", align_corners=False + ) + I1t = softsplat(img0, F1t, Z1t, strMode="soft") + img1 = F.interpolate( + img1, scale_factor=0.5, mode="bilinear", align_corners=False + ) + I2t = softsplat(img1, F2t, Z2t, strMode="soft") + + feat1t1 = softsplat(feat11, F1t, Z1t, strMode="soft") + feat2t1 = softsplat(feat21, F2t, Z2t, strMode="soft") + + F1td = ( + F.interpolate(F1t, scale_factor=0.5, mode="bilinear", align_corners=False) + * 0.5 + ) + Z1d = F.interpolate(Z1t, scale_factor=0.5, mode="bilinear", align_corners=False) + feat1t2 = softsplat(feat12, F1td, Z1d, strMode="soft") + F2td = ( + F.interpolate(F2t, scale_factor=0.5, mode="bilinear", align_corners=False) + * 0.5 + ) + Z2d = F.interpolate(Z2t, scale_factor=0.5, mode="bilinear", align_corners=False) + feat2t2 = softsplat(feat22, F2td, Z2d, strMode="soft") + + F1tdd = ( + F.interpolate(F1t, scale_factor=0.25, mode="bilinear", align_corners=False) + * 0.25 + ) + Z1dd = F.interpolate( + Z1t, scale_factor=0.25, mode="bilinear", align_corners=False + ) + feat1t3 = softsplat(feat13, F1tdd, Z1dd, strMode="soft") + F2tdd = ( + F.interpolate(F2t, scale_factor=0.25, mode="bilinear", align_corners=False) + * 0.25 + ) + Z2dd = F.interpolate( + Z2t, scale_factor=0.25, mode="bilinear", align_corners=False + ) + feat2t3 = softsplat(feat23, F2tdd, Z2dd, strMode="soft") + + out = self.fusionnet( + torch.cat([img0, I1t, I2t, img1], dim=1), + torch.cat([feat1t1, feat2t1], dim=1), + torch.cat([feat1t2, feat2t2], dim=1), + torch.cat([feat1t3, feat2t3], dim=1), + ) + + return torch.clamp(out, 0, 1) diff --git a/comfyui-frame-interpolation/vfi_models/gmfss_fortuna/GMFSS_Fortuna_union.py b/comfyui-frame-interpolation/vfi_models/gmfss_fortuna/GMFSS_Fortuna_union.py new file mode 100644 index 0000000000000000000000000000000000000000..41e92ddfa62fae5877eb12b43677d28ee9d3e29e --- /dev/null +++ b/comfyui-frame-interpolation/vfi_models/gmfss_fortuna/GMFSS_Fortuna_union.py @@ -0,0 +1,23 @@ +import itertools +import numpy as np +import vapoursynth as vs +from .GMFSS_Fortuna_union_arch import Model_inference +import torch + + +class GMFSS_Fortuna_union: + def __init__(self): + self.cache = False + self.amount_input_img = 2 + + torch.set_grad_enabled(False) + torch.backends.cudnn.enabled = True + torch.backends.cudnn.benchmark = True + + self.model = Model_inference() + self.model.eval() + + def execute(self, I0, I1, timestep): + with torch.inference_mode(): + middle = self.model(I0, I1, timestep).cpu() + return middle diff --git a/comfyui-frame-interpolation/vfi_models/gmfss_fortuna/GMFSS_Fortuna_union_arch.py b/comfyui-frame-interpolation/vfi_models/gmfss_fortuna/GMFSS_Fortuna_union_arch.py new file mode 100644 index 0000000000000000000000000000000000000000..665e56534b647fe884d236693833f12060daa148 --- /dev/null +++ b/comfyui-frame-interpolation/vfi_models/gmfss_fortuna/GMFSS_Fortuna_union_arch.py @@ -0,0 +1,1857 @@ +""" +https://github.com/98mxr/GMFSS_Fortuna/blob/b5d0bd544e3f1eee6a059e49c69bcd3124c8343c/model/GMFSS_infer_u.py +https://github.com/98mxr/GMFSS_Fortuna/blob/b5d0bd544e3f1eee6a059e49c69bcd3124c8343c/model/softsplat.py +https://github.com/98mxr/GMFSS_Fortuna/blob/b5d0bd544e3f1eee6a059e49c69bcd3124c8343c/model/FusionNet_u.py +https://github.com/98mxr/GMFSS_Fortuna/blob/b5d0bd544e3f1eee6a059e49c69bcd3124c8343c/model/FeatureNet.py +https://github.com/98mxr/GMFSS_Fortuna/blob/b5d0bd544e3f1eee6a059e49c69bcd3124c8343c/model/MetricNet.py +https://github.com/98mxr/GMFSS_Fortuna/blob/b5d0bd544e3f1eee6a059e49c69bcd3124c8343c/model/IFNet_HDv3.py +https://github.com/98mxr/GMFSS_Fortuna/blob/b5d0bd544e3f1eee6a059e49c69bcd3124c8343c/model/gmflow/gmflow.py +https://github.com/98mxr/GMFSS_Fortuna/blob/b5d0bd544e3f1eee6a059e49c69bcd3124c8343c/model/gmflow/utils.py +https://github.com/98mxr/GMFSS_Fortuna/blob/b5d0bd544e3f1eee6a059e49c69bcd3124c8343c/model/gmflow/position.py +https://github.com/98mxr/GMFSS_Fortuna/blob/b5d0bd544e3f1eee6a059e49c69bcd3124c8343c/model/gmflow/geometry.py +https://github.com/98mxr/GMFSS_Fortuna/blob/b5d0bd544e3f1eee6a059e49c69bcd3124c8343c/model/gmflow/matching.py +https://github.com/98mxr/GMFSS_Fortuna/blob/b5d0bd544e3f1eee6a059e49c69bcd3124c8343c/model/gmflow/transformer.py +https://github.com/98mxr/GMFSS_Fortuna/blob/b5d0bd544e3f1eee6a059e49c69bcd3124c8343c/model/gmflow/backbone.py +https://github.com/98mxr/GMFSS_Fortuna/blob/b5d0bd544e3f1eee6a059e49c69bcd3124c8343c/model/gmflow/trident_conv.py +https://github.com/98mxr/GMFSS_Fortuna/blob/b5d0bd544e3f1eee6a059e49c69bcd3124c8343c/model/warplayer.py +""" + +from torch import nn +from torch.nn import functional as F +from torch.nn.modules.utils import _pair +import torch +import torch.nn as nn +import torch.nn.functional as F +import torch +import math +from vfi_models.rife.rife_arch import IFNet +from vfi_models.ops import softsplat +from comfy.model_management import get_torch_device + +device = get_torch_device() +backwarp_tenGrid = {} + + +def warp(tenInput, tenFlow): + k = (str(tenFlow.device), str(tenFlow.size())) + if k not in backwarp_tenGrid: + tenHorizontal = ( + torch.linspace(-1.0, 1.0, tenFlow.shape[3], device=device) + .view(1, 1, 1, tenFlow.shape[3]) + .expand(tenFlow.shape[0], -1, tenFlow.shape[2], -1) + ) + tenVertical = ( + torch.linspace(-1.0, 1.0, tenFlow.shape[2], device=device) + .view(1, 1, tenFlow.shape[2], 1) + .expand(tenFlow.shape[0], -1, -1, tenFlow.shape[3]) + ) + backwarp_tenGrid[k] = torch.cat([tenHorizontal, tenVertical], 1).to(device) + + tenFlow = torch.cat( + [ + tenFlow[:, 0:1, :, :] / ((tenInput.shape[3] - 1.0) / 2.0), + tenFlow[:, 1:2, :, :] / ((tenInput.shape[2] - 1.0) / 2.0), + ], + 1, + ) + + g = (backwarp_tenGrid[k] + tenFlow).permute(0, 2, 3, 1) + return torch.nn.functional.grid_sample( + input=tenInput, + grid=g, + mode="bilinear", + padding_mode="border", + align_corners=True, + ) + + +class MultiScaleTridentConv(nn.Module): + def __init__( + self, + in_channels, + out_channels, + kernel_size, + stride=1, + strides=1, + paddings=0, + dilations=1, + dilation=1, + groups=1, + num_branch=1, + test_branch_idx=-1, + bias=False, + norm=None, + activation=None, + ): + super(MultiScaleTridentConv, self).__init__() + self.in_channels = in_channels + self.out_channels = out_channels + self.kernel_size = _pair(kernel_size) + self.num_branch = num_branch + self.stride = _pair(stride) + self.groups = groups + self.with_bias = bias + self.dilation = dilation + if isinstance(paddings, int): + paddings = [paddings] * self.num_branch + if isinstance(dilations, int): + dilations = [dilations] * self.num_branch + if isinstance(strides, int): + strides = [strides] * self.num_branch + self.paddings = [_pair(padding) for padding in paddings] + self.dilations = [_pair(dilation) for dilation in dilations] + self.strides = [_pair(stride) for stride in strides] + self.test_branch_idx = test_branch_idx + self.norm = norm + self.activation = activation + + assert len({self.num_branch, len(self.paddings), len(self.strides)}) == 1 + + self.weight = nn.Parameter( + torch.Tensor(out_channels, in_channels // groups, *self.kernel_size) + ) + if bias: + self.bias = nn.Parameter(torch.Tensor(out_channels)) + else: + self.bias = None + + nn.init.kaiming_uniform_(self.weight, nonlinearity="relu") + if self.bias is not None: + nn.init.constant_(self.bias, 0) + + def forward(self, inputs): + num_branch = ( + self.num_branch if self.training or self.test_branch_idx == -1 else 1 + ) + assert len(inputs) == num_branch + + if self.training or self.test_branch_idx == -1: + outputs = [ + F.conv2d( + input, + self.weight, + self.bias, + stride, + padding, + self.dilation, + self.groups, + ) + for input, stride, padding in zip(inputs, self.strides, self.paddings) + ] + else: + outputs = [ + F.conv2d( + inputs[0], + self.weight, + self.bias, + self.strides[self.test_branch_idx] + if self.test_branch_idx == -1 + else self.strides[-1], + self.paddings[self.test_branch_idx] + if self.test_branch_idx == -1 + else self.paddings[-1], + self.dilation, + self.groups, + ) + ] + + if self.norm is not None: + outputs = [self.norm(x) for x in outputs] + if self.activation is not None: + outputs = [self.activation(x) for x in outputs] + return outputs + + +class ResidualBlock_class(nn.Module): + def __init__( + self, + in_planes, + planes, + norm_layer=nn.InstanceNorm2d, + stride=1, + dilation=1, + ): + super(ResidualBlock_class, self).__init__() + + self.conv1 = nn.Conv2d( + in_planes, + planes, + kernel_size=3, + dilation=dilation, + padding=dilation, + stride=stride, + bias=False, + ) + self.conv2 = nn.Conv2d( + planes, + planes, + kernel_size=3, + dilation=dilation, + padding=dilation, + bias=False, + ) + self.relu = nn.ReLU(inplace=True) + + self.norm1 = norm_layer(planes) + self.norm2 = norm_layer(planes) + if not stride == 1 or in_planes != planes: + self.norm3 = norm_layer(planes) + + if stride == 1 and in_planes == planes: + self.downsample = None + else: + self.downsample = nn.Sequential( + nn.Conv2d(in_planes, planes, kernel_size=1, stride=stride), self.norm3 + ) + + def forward(self, x): + y = x + y = self.relu(self.norm1(self.conv1(y))) + y = self.relu(self.norm2(self.conv2(y))) + + if self.downsample is not None: + x = self.downsample(x) + + return self.relu(x + y) + + +class CNNEncoder(nn.Module): + def __init__( + self, + output_dim=128, + norm_layer=nn.InstanceNorm2d, + num_output_scales=1, + **kwargs, + ): + super(CNNEncoder, self).__init__() + self.num_branch = num_output_scales + + feature_dims = [64, 96, 128] + + self.conv1 = nn.Conv2d( + 3, feature_dims[0], kernel_size=7, stride=2, padding=3, bias=False + ) # 1/2 + self.norm1 = norm_layer(feature_dims[0]) + self.relu1 = nn.ReLU(inplace=True) + + self.in_planes = feature_dims[0] + self.layer1 = self._make_layer( + feature_dims[0], stride=1, norm_layer=norm_layer + ) # 1/2 + self.layer2 = self._make_layer( + feature_dims[1], stride=2, norm_layer=norm_layer + ) # 1/4 + + # highest resolution 1/4 or 1/8 + stride = 2 if num_output_scales == 1 else 1 + self.layer3 = self._make_layer( + feature_dims[2], + stride=stride, + norm_layer=norm_layer, + ) # 1/4 or 1/8 + + self.conv2 = nn.Conv2d(feature_dims[2], output_dim, 1, 1, 0) + + if self.num_branch > 1: + if self.num_branch == 4: + strides = (1, 2, 4, 8) + elif self.num_branch == 3: + strides = (1, 2, 4) + elif self.num_branch == 2: + strides = (1, 2) + else: + raise ValueError + + self.trident_conv = MultiScaleTridentConv( + output_dim, + output_dim, + kernel_size=3, + strides=strides, + paddings=1, + num_branch=self.num_branch, + ) + + for m in self.modules(): + if isinstance(m, nn.Conv2d): + nn.init.kaiming_normal_(m.weight, mode="fan_out", nonlinearity="relu") + elif isinstance(m, (nn.BatchNorm2d, nn.InstanceNorm2d, nn.GroupNorm)): + if m.weight is not None: + nn.init.constant_(m.weight, 1) + if m.bias is not None: + nn.init.constant_(m.bias, 0) + + def _make_layer(self, dim, stride=1, dilation=1, norm_layer=nn.InstanceNorm2d): + layer1 = ResidualBlock_class( + self.in_planes, dim, norm_layer=norm_layer, stride=stride, dilation=dilation + ) + layer2 = ResidualBlock_class( + dim, dim, norm_layer=norm_layer, stride=1, dilation=dilation + ) + + layers = (layer1, layer2) + + self.in_planes = dim + return nn.Sequential(*layers) + + def forward(self, x): + x = self.conv1(x) + x = self.norm1(x) + x = self.relu1(x) + + x = self.layer1(x) # 1/2 + x = self.layer2(x) # 1/4 + x = self.layer3(x) # 1/8 or 1/4 + + x = self.conv2(x) + + if self.num_branch > 1: + out = self.trident_conv([x] * self.num_branch) # high to low res + else: + out = [x] + + return out + + +def single_head_full_attention(q, k, v): + # q, k, v: [B, L, C] + assert q.dim() == k.dim() == v.dim() == 3 + + scores = torch.matmul(q, k.permute(0, 2, 1)) / (q.size(2) ** 0.5) # [B, L, L] + attn = torch.softmax(scores, dim=2) # [B, L, L] + out = torch.matmul(attn, v) # [B, L, C] + + return out + + +def generate_shift_window_attn_mask( + input_resolution, + window_size_h, + window_size_w, + shift_size_h, + shift_size_w, + device=get_torch_device(), +): + # Ref: https://github.com/microsoft/Swin-Transformer/blob/main/models/swin_transformer.py + # calculate attention mask for SW-MSA + h, w = input_resolution + img_mask = torch.zeros((1, h, w, 1)).to(device) # 1 H W 1 + h_slices = ( + slice(0, -window_size_h), + slice(-window_size_h, -shift_size_h), + slice(-shift_size_h, None), + ) + w_slices = ( + slice(0, -window_size_w), + slice(-window_size_w, -shift_size_w), + slice(-shift_size_w, None), + ) + cnt = 0 + for h in h_slices: + for w in w_slices: + img_mask[:, h, w, :] = cnt + cnt += 1 + + mask_windows = split_feature( + img_mask, num_splits=input_resolution[-1] // window_size_w, channel_last=True + ) + + mask_windows = mask_windows.view(-1, window_size_h * window_size_w) + attn_mask = mask_windows.unsqueeze(1) - mask_windows.unsqueeze(2) + attn_mask = attn_mask.masked_fill(attn_mask != 0, float(-100.0)).masked_fill( + attn_mask == 0, float(0.0) + ) + + return attn_mask + + +def single_head_split_window_attention( + q, + k, + v, + num_splits=1, + with_shift=False, + h=None, + w=None, + attn_mask=None, +): + # Ref: https://github.com/microsoft/Swin-Transformer/blob/main/models/swin_transformer.py + # q, k, v: [B, L, C] + assert q.dim() == k.dim() == v.dim() == 3 + + assert h is not None and w is not None + assert q.size(1) == h * w + + b, _, c = q.size() + + b_new = b * num_splits * num_splits + + window_size_h = h // num_splits + window_size_w = w // num_splits + + q = q.view(b, h, w, c) # [B, H, W, C] + k = k.view(b, h, w, c) + v = v.view(b, h, w, c) + + scale_factor = c**0.5 + + if with_shift: + assert attn_mask is not None # compute once + shift_size_h = window_size_h // 2 + shift_size_w = window_size_w // 2 + + q = torch.roll(q, shifts=(-shift_size_h, -shift_size_w), dims=(1, 2)) + k = torch.roll(k, shifts=(-shift_size_h, -shift_size_w), dims=(1, 2)) + v = torch.roll(v, shifts=(-shift_size_h, -shift_size_w), dims=(1, 2)) + + q = split_feature( + q, num_splits=num_splits, channel_last=True + ) # [B*K*K, H/K, W/K, C] + k = split_feature(k, num_splits=num_splits, channel_last=True) + v = split_feature(v, num_splits=num_splits, channel_last=True) + + scores = ( + torch.matmul(q.view(b_new, -1, c), k.view(b_new, -1, c).permute(0, 2, 1)) + / scale_factor + ) # [B*K*K, H/K*W/K, H/K*W/K] + + if with_shift: + scores += attn_mask.repeat(b, 1, 1) + + attn = torch.softmax(scores, dim=-1) + + out = torch.matmul(attn, v.view(b_new, -1, c)) # [B*K*K, H/K*W/K, C] + + out = merge_splits( + out.view(b_new, h // num_splits, w // num_splits, c), + num_splits=num_splits, + channel_last=True, + ) # [B, H, W, C] + + # shift back + if with_shift: + out = torch.roll(out, shifts=(shift_size_h, shift_size_w), dims=(1, 2)) + + out = out.view(b, -1, c) + + return out + + +class TransformerLayer(nn.Module): + def __init__( + self, + d_model=256, + nhead=1, + attention_type="swin", + no_ffn=False, + ffn_dim_expansion=4, + with_shift=False, + **kwargs, + ): + super(TransformerLayer, self).__init__() + + self.dim = d_model + self.nhead = nhead + self.attention_type = attention_type + self.no_ffn = no_ffn + + self.with_shift = with_shift + + # multi-head attention + self.q_proj = nn.Linear(d_model, d_model, bias=False) + self.k_proj = nn.Linear(d_model, d_model, bias=False) + self.v_proj = nn.Linear(d_model, d_model, bias=False) + + self.merge = nn.Linear(d_model, d_model, bias=False) + + self.norm1 = nn.LayerNorm(d_model) + + # no ffn after self-attn, with ffn after cross-attn + if not self.no_ffn: + in_channels = d_model * 2 + self.mlp = nn.Sequential( + nn.Linear(in_channels, in_channels * ffn_dim_expansion, bias=False), + nn.GELU(), + nn.Linear(in_channels * ffn_dim_expansion, d_model, bias=False), + ) + + self.norm2 = nn.LayerNorm(d_model) + + def forward( + self, + source, + target, + height=None, + width=None, + shifted_window_attn_mask=None, + attn_num_splits=None, + **kwargs, + ): + # source, target: [B, L, C] + query, key, value = source, target, target + + # single-head attention + query = self.q_proj(query) # [B, L, C] + key = self.k_proj(key) # [B, L, C] + value = self.v_proj(value) # [B, L, C] + + if self.attention_type == "swin" and attn_num_splits > 1: + if self.nhead > 1: + # we observe that multihead attention slows down the speed and increases the memory consumption + # without bringing obvious performance gains and thus the implementation is removed + raise NotImplementedError + else: + message = single_head_split_window_attention( + query, + key, + value, + num_splits=attn_num_splits, + with_shift=self.with_shift, + h=height, + w=width, + attn_mask=shifted_window_attn_mask, + ) + else: + message = single_head_full_attention(query, key, value) # [B, L, C] + + message = self.merge(message) # [B, L, C] + message = self.norm1(message) + + if not self.no_ffn: + message = self.mlp(torch.cat([source, message], dim=-1)) + message = self.norm2(message) + + return source + message + + +class TransformerBlock(nn.Module): + """self attention + cross attention + FFN""" + + def __init__( + self, + d_model=256, + nhead=1, + attention_type="swin", + ffn_dim_expansion=4, + with_shift=False, + **kwargs, + ): + super(TransformerBlock, self).__init__() + + self.self_attn = TransformerLayer( + d_model=d_model, + nhead=nhead, + attention_type=attention_type, + no_ffn=True, + ffn_dim_expansion=ffn_dim_expansion, + with_shift=with_shift, + ) + + self.cross_attn_ffn = TransformerLayer( + d_model=d_model, + nhead=nhead, + attention_type=attention_type, + ffn_dim_expansion=ffn_dim_expansion, + with_shift=with_shift, + ) + + def forward( + self, + source, + target, + height=None, + width=None, + shifted_window_attn_mask=None, + attn_num_splits=None, + **kwargs, + ): + # source, target: [B, L, C] + + # self attention + source = self.self_attn( + source, + source, + height=height, + width=width, + shifted_window_attn_mask=shifted_window_attn_mask, + attn_num_splits=attn_num_splits, + ) + + # cross attention and ffn + source = self.cross_attn_ffn( + source, + target, + height=height, + width=width, + shifted_window_attn_mask=shifted_window_attn_mask, + attn_num_splits=attn_num_splits, + ) + + return source + + +class FeatureTransformer(nn.Module): + def __init__( + self, + num_layers=6, + d_model=128, + nhead=1, + attention_type="swin", + ffn_dim_expansion=4, + **kwargs, + ): + super(FeatureTransformer, self).__init__() + + self.attention_type = attention_type + + self.d_model = d_model + self.nhead = nhead + + self.layers = nn.ModuleList( + [ + TransformerBlock( + d_model=d_model, + nhead=nhead, + attention_type=attention_type, + ffn_dim_expansion=ffn_dim_expansion, + with_shift=True + if attention_type == "swin" and i % 2 == 1 + else False, + ) + for i in range(num_layers) + ] + ) + + for p in self.parameters(): + if p.dim() > 1: + nn.init.xavier_uniform_(p) + + def forward( + self, + feature0, + feature1, + attn_num_splits=None, + **kwargs, + ): + b, c, h, w = feature0.shape + assert self.d_model == c + + feature0 = feature0.flatten(-2).permute(0, 2, 1) # [B, H*W, C] + feature1 = feature1.flatten(-2).permute(0, 2, 1) # [B, H*W, C] + + if self.attention_type == "swin" and attn_num_splits > 1: + # global and refine use different number of splits + window_size_h = h // attn_num_splits + window_size_w = w // attn_num_splits + + # compute attn mask once + shifted_window_attn_mask = generate_shift_window_attn_mask( + input_resolution=(h, w), + window_size_h=window_size_h, + window_size_w=window_size_w, + shift_size_h=window_size_h // 2, + shift_size_w=window_size_w // 2, + device=feature0.device, + ) # [K*K, H/K*W/K, H/K*W/K] + else: + shifted_window_attn_mask = None + + # concat feature0 and feature1 in batch dimension to compute in parallel + concat0 = torch.cat((feature0, feature1), dim=0) # [2B, H*W, C] + concat1 = torch.cat((feature1, feature0), dim=0) # [2B, H*W, C] + + for layer in self.layers: + concat0 = layer( + concat0, + concat1, + height=h, + width=w, + shifted_window_attn_mask=shifted_window_attn_mask, + attn_num_splits=attn_num_splits, + ) + + # update feature1 + concat1 = torch.cat(concat0.chunk(chunks=2, dim=0)[::-1], dim=0) + + feature0, feature1 = concat0.chunk(chunks=2, dim=0) # [B, H*W, C] + + # reshape back + feature0 = ( + feature0.view(b, h, w, c).permute(0, 3, 1, 2).contiguous() + ) # [B, C, H, W] + feature1 = ( + feature1.view(b, h, w, c).permute(0, 3, 1, 2).contiguous() + ) # [B, C, H, W] + + return feature0, feature1 + + +class FeatureFlowAttention(nn.Module): + """ + flow propagation with self-attention on feature + query: feature0, key: feature0, value: flow + """ + + def __init__( + self, + in_channels, + **kwargs, + ): + super(FeatureFlowAttention, self).__init__() + + self.q_proj = nn.Linear(in_channels, in_channels) + self.k_proj = nn.Linear(in_channels, in_channels) + + for p in self.parameters(): + if p.dim() > 1: + nn.init.xavier_uniform_(p) + + def forward( + self, + feature0, + flow, + local_window_attn=False, + local_window_radius=1, + **kwargs, + ): + # q, k: feature [B, C, H, W], v: flow [B, 2, H, W] + if local_window_attn: + return self.forward_local_window_attn( + feature0, flow, local_window_radius=local_window_radius + ) + + b, c, h, w = feature0.size() + + query = feature0.view(b, c, h * w).permute(0, 2, 1) # [B, H*W, C] + + # a note: the ``correct'' implementation should be: + # ``query = self.q_proj(query), key = self.k_proj(query)'' + # this problem is observed while cleaning up the code + # however, this doesn't affect the performance since the projection is a linear operation, + # thus the two projection matrices for key can be merged + # so I just leave it as is in order to not re-train all models :) + query = self.q_proj(query) # [B, H*W, C] + key = self.k_proj(query) # [B, H*W, C] + + value = flow.view(b, flow.size(1), h * w).permute(0, 2, 1) # [B, H*W, 2] + + scores = torch.matmul(query, key.permute(0, 2, 1)) / (c**0.5) # [B, H*W, H*W] + prob = torch.softmax(scores, dim=-1) + + out = torch.matmul(prob, value) # [B, H*W, 2] + out = out.view(b, h, w, value.size(-1)).permute(0, 3, 1, 2) # [B, 2, H, W] + + return out + + def forward_local_window_attn( + self, + feature0, + flow, + local_window_radius=1, + ): + assert flow.size(1) == 2 + assert local_window_radius > 0 + + b, c, h, w = feature0.size() + + feature0_reshape = self.q_proj( + feature0.view(b, c, -1).permute(0, 2, 1) + ).reshape( + b * h * w, 1, c + ) # [B*H*W, 1, C] + + kernel_size = 2 * local_window_radius + 1 + + feature0_proj = ( + self.k_proj(feature0.view(b, c, -1).permute(0, 2, 1)) + .permute(0, 2, 1) + .reshape(b, c, h, w) + ) + + feature0_window = F.unfold( + feature0_proj, kernel_size=kernel_size, padding=local_window_radius + ) # [B, C*(2R+1)^2), H*W] + + feature0_window = ( + feature0_window.view(b, c, kernel_size**2, h, w) + .permute(0, 3, 4, 1, 2) + .reshape(b * h * w, c, kernel_size**2) + ) # [B*H*W, C, (2R+1)^2] + + flow_window = F.unfold( + flow, kernel_size=kernel_size, padding=local_window_radius + ) # [B, 2*(2R+1)^2), H*W] + + flow_window = ( + flow_window.view(b, 2, kernel_size**2, h, w) + .permute(0, 3, 4, 2, 1) + .reshape(b * h * w, kernel_size**2, 2) + ) # [B*H*W, (2R+1)^2, 2] + + scores = torch.matmul(feature0_reshape, feature0_window) / ( + c**0.5 + ) # [B*H*W, 1, (2R+1)^2] + + prob = torch.softmax(scores, dim=-1) + + out = ( + torch.matmul(prob, flow_window) + .view(b, h, w, 2) + .permute(0, 3, 1, 2) + .contiguous() + ) # [B, 2, H, W] + + return out + + +def global_correlation_softmax( + feature0, + feature1, + pred_bidir_flow=False, +): + # global correlation + b, c, h, w = feature0.shape + feature0 = feature0.view(b, c, -1).permute(0, 2, 1) # [B, H*W, C] + feature1 = feature1.view(b, c, -1) # [B, C, H*W] + + correlation = torch.matmul(feature0, feature1).view(b, h, w, h, w) / ( + c**0.5 + ) # [B, H, W, H, W] + + # flow from softmax + init_grid = coords_grid(b, h, w).to(correlation.device) # [B, 2, H, W] + grid = init_grid.view(b, 2, -1).permute(0, 2, 1) # [B, H*W, 2] + + correlation = correlation.view(b, h * w, h * w) # [B, H*W, H*W] + + if pred_bidir_flow: + correlation = torch.cat( + (correlation, correlation.permute(0, 2, 1)), dim=0 + ) # [2*B, H*W, H*W] + init_grid = init_grid.repeat(2, 1, 1, 1) # [2*B, 2, H, W] + grid = grid.repeat(2, 1, 1) # [2*B, H*W, 2] + b = b * 2 + + prob = F.softmax(correlation, dim=-1) # [B, H*W, H*W] + + correspondence = ( + torch.matmul(prob, grid).view(b, h, w, 2).permute(0, 3, 1, 2) + ) # [B, 2, H, W] + + # when predicting bidirectional flow, flow is the concatenation of forward flow and backward flow + flow = correspondence - init_grid + + return flow, prob + + +def local_correlation_softmax( + feature0, + feature1, + local_radius, + padding_mode="zeros", +): + b, c, h, w = feature0.size() + coords_init = coords_grid(b, h, w).to(feature0.device) # [B, 2, H, W] + coords = coords_init.view(b, 2, -1).permute(0, 2, 1) # [B, H*W, 2] + + local_h = 2 * local_radius + 1 + local_w = 2 * local_radius + 1 + + window_grid = generate_window_grid( + -local_radius, + local_radius, + -local_radius, + local_radius, + local_h, + local_w, + device=feature0.device, + ) # [2R+1, 2R+1, 2] + window_grid = window_grid.reshape(-1, 2).repeat(b, 1, 1, 1) # [B, 1, (2R+1)^2, 2] + sample_coords = coords.unsqueeze(-2) + window_grid # [B, H*W, (2R+1)^2, 2] + + sample_coords_softmax = sample_coords + + # exclude coords that are out of image space + valid_x = (sample_coords[:, :, :, 0] >= 0) & ( + sample_coords[:, :, :, 0] < w + ) # [B, H*W, (2R+1)^2] + valid_y = (sample_coords[:, :, :, 1] >= 0) & ( + sample_coords[:, :, :, 1] < h + ) # [B, H*W, (2R+1)^2] + + valid = ( + valid_x & valid_y + ) # [B, H*W, (2R+1)^2], used to mask out invalid values when softmax + + # normalize coordinates to [-1, 1] + sample_coords_norm = normalize_coords(sample_coords, h, w) # [-1, 1] + window_feature = F.grid_sample( + feature1, sample_coords_norm, padding_mode=padding_mode, align_corners=True + ).permute( + 0, 2, 1, 3 + ) # [B, H*W, C, (2R+1)^2] + feature0_view = feature0.permute(0, 2, 3, 1).view(b, h * w, 1, c) # [B, H*W, 1, C] + + corr = torch.matmul(feature0_view, window_feature).view(b, h * w, -1) / ( + c**0.5 + ) # [B, H*W, (2R+1)^2] + + # mask invalid locations + corr[~valid] = -1e9 + + prob = F.softmax(corr, -1) # [B, H*W, (2R+1)^2] + + correspondence = ( + torch.matmul(prob.unsqueeze(-2), sample_coords_softmax) + .squeeze(-2) + .view(b, h, w, 2) + .permute(0, 3, 1, 2) + ) # [B, 2, H, W] + + flow = correspondence - coords_init + match_prob = prob + + return flow, match_prob + + +def coords_grid(b, h, w, homogeneous=False, device=None): + y, x = torch.meshgrid(torch.arange(h), torch.arange(w)) # [H, W] + + stacks = [x, y] + + if homogeneous: + ones = torch.ones_like(x) # [H, W] + stacks.append(ones) + + grid = torch.stack(stacks, dim=0).float() # [2, H, W] or [3, H, W] + + grid = grid[None].repeat(b, 1, 1, 1) # [B, 2, H, W] or [B, 3, H, W] + + if device is not None: + grid = grid.to(device) + + return grid + + +def generate_window_grid(h_min, h_max, w_min, w_max, len_h, len_w, device=None): + assert device is not None + + x, y = torch.meshgrid( + [ + torch.linspace(w_min, w_max, len_w, device=device), + torch.linspace(h_min, h_max, len_h, device=device), + ], + ) + grid = torch.stack((x, y), -1).transpose(0, 1).float() # [H, W, 2] + + return grid + + +def normalize_coords(coords, h, w): + # coords: [B, H, W, 2] + c = torch.Tensor([(w - 1) / 2.0, (h - 1) / 2.0]).float().to(coords.device) + return (coords - c) / c # [-1, 1] + + +def bilinear_sample( + img, sample_coords, mode="bilinear", padding_mode="zeros", return_mask=False +): + # img: [B, C, H, W] + # sample_coords: [B, 2, H, W] in image scale + if sample_coords.size(1) != 2: # [B, H, W, 2] + sample_coords = sample_coords.permute(0, 3, 1, 2) + + b, _, h, w = sample_coords.shape + + # Normalize to [-1, 1] + x_grid = 2 * sample_coords[:, 0] / (w - 1) - 1 + y_grid = 2 * sample_coords[:, 1] / (h - 1) - 1 + + grid = torch.stack([x_grid, y_grid], dim=-1) # [B, H, W, 2] + + img = F.grid_sample( + img, grid, mode=mode, padding_mode=padding_mode, align_corners=True + ) + + if return_mask: + mask = ( + (x_grid >= -1) & (y_grid >= -1) & (x_grid <= 1) & (y_grid <= 1) + ) # [B, H, W] + + return img, mask + + return img + + +def flow_warp(feature, flow, mask=False, padding_mode="zeros"): + b, c, h, w = feature.size() + assert flow.size(1) == 2 + + grid = coords_grid(b, h, w).to(flow.device) + flow # [B, 2, H, W] + + return bilinear_sample(feature, grid, padding_mode=padding_mode, return_mask=mask) + + +def forward_backward_consistency_check(fwd_flow, bwd_flow, alpha=0.01, beta=0.5): + # fwd_flow, bwd_flow: [B, 2, H, W] + # alpha and beta values are following UnFlow (https://arxiv.org/abs/1711.07837) + assert fwd_flow.dim() == 4 and bwd_flow.dim() == 4 + assert fwd_flow.size(1) == 2 and bwd_flow.size(1) == 2 + flow_mag = torch.norm(fwd_flow, dim=1) + torch.norm(bwd_flow, dim=1) # [B, H, W] + + warped_bwd_flow = flow_warp(bwd_flow, fwd_flow) # [B, 2, H, W] + warped_fwd_flow = flow_warp(fwd_flow, bwd_flow) # [B, 2, H, W] + + diff_fwd = torch.norm(fwd_flow + warped_bwd_flow, dim=1) # [B, H, W] + diff_bwd = torch.norm(bwd_flow + warped_fwd_flow, dim=1) + + threshold = alpha * flow_mag + beta + + fwd_occ = (diff_fwd > threshold).float() # [B, H, W] + bwd_occ = (diff_bwd > threshold).float() + + return fwd_occ, bwd_occ + + +class PositionEmbeddingSine(nn.Module): + """ + This is a more standard version of the position embedding, very similar to the one + used by the Attention is all you need paper, generalized to work on images. + """ + + def __init__(self, num_pos_feats=64, temperature=10000, normalize=True, scale=None): + super().__init__() + self.num_pos_feats = num_pos_feats + self.temperature = temperature + self.normalize = normalize + if scale is not None and normalize is False: + raise ValueError("normalize should be True if scale is passed") + if scale is None: + scale = 2 * math.pi + self.scale = scale + + def forward(self, x): + # x = tensor_list.tensors # [B, C, H, W] + # mask = tensor_list.mask # [B, H, W], input with padding, valid as 0 + b, c, h, w = x.size() + mask = torch.ones((b, h, w), device=x.device) # [B, H, W] + y_embed = mask.cumsum(1, dtype=torch.float32) + x_embed = mask.cumsum(2, dtype=torch.float32) + if self.normalize: + eps = 1e-6 + y_embed = y_embed / (y_embed[:, -1:, :] + eps) * self.scale + x_embed = x_embed / (x_embed[:, :, -1:] + eps) * self.scale + + dim_t = torch.arange(self.num_pos_feats, dtype=torch.float32, device=x.device) + dim_t = self.temperature ** (2 * (dim_t // 2) / self.num_pos_feats) + + pos_x = x_embed[:, :, :, None] / dim_t + pos_y = y_embed[:, :, :, None] / dim_t + pos_x = torch.stack( + (pos_x[:, :, :, 0::2].sin(), pos_x[:, :, :, 1::2].cos()), dim=4 + ).flatten(3) + pos_y = torch.stack( + (pos_y[:, :, :, 0::2].sin(), pos_y[:, :, :, 1::2].cos()), dim=4 + ).flatten(3) + pos = torch.cat((pos_y, pos_x), dim=3).permute(0, 3, 1, 2) + return pos + + +def split_feature( + feature, + num_splits=2, + channel_last=False, +): + if channel_last: # [B, H, W, C] + b, h, w, c = feature.size() + assert h % num_splits == 0 and w % num_splits == 0 + + b_new = b * num_splits * num_splits + h_new = h // num_splits + w_new = w // num_splits + + feature = ( + feature.view(b, num_splits, h // num_splits, num_splits, w // num_splits, c) + .permute(0, 1, 3, 2, 4, 5) + .reshape(b_new, h_new, w_new, c) + ) # [B*K*K, H/K, W/K, C] + else: # [B, C, H, W] + b, c, h, w = feature.size() + assert h % num_splits == 0 and w % num_splits == 0 + + b_new = b * num_splits * num_splits + h_new = h // num_splits + w_new = w // num_splits + + feature = ( + feature.view(b, c, num_splits, h // num_splits, num_splits, w // num_splits) + .permute(0, 2, 4, 1, 3, 5) + .reshape(b_new, c, h_new, w_new) + ) # [B*K*K, C, H/K, W/K] + + return feature + + +def merge_splits( + splits, + num_splits=2, + channel_last=False, +): + if channel_last: # [B*K*K, H/K, W/K, C] + b, h, w, c = splits.size() + new_b = b // num_splits // num_splits + + splits = splits.view(new_b, num_splits, num_splits, h, w, c) + merge = ( + splits.permute(0, 1, 3, 2, 4, 5) + .contiguous() + .view(new_b, num_splits * h, num_splits * w, c) + ) # [B, H, W, C] + else: # [B*K*K, C, H/K, W/K] + b, c, h, w = splits.size() + new_b = b // num_splits // num_splits + + splits = splits.view(new_b, num_splits, num_splits, c, h, w) + merge = ( + splits.permute(0, 3, 1, 4, 2, 5) + .contiguous() + .view(new_b, c, num_splits * h, num_splits * w) + ) # [B, C, H, W] + + return merge + + +def normalize_img(img0, img1): + # loaded images are in [0, 255] + # normalize by ImageNet mean and std + mean = torch.tensor([0.485, 0.456, 0.406]).view(1, 3, 1, 1).to(img1.device) + std = torch.tensor([0.229, 0.224, 0.225]).view(1, 3, 1, 1).to(img1.device) + img0 = (img0 - mean) / std + img1 = (img1 - mean) / std + + return img0, img1 + + +def feature_add_position(feature0, feature1, attn_splits, feature_channels): + pos_enc = PositionEmbeddingSine(num_pos_feats=feature_channels // 2) + + if attn_splits > 1: # add position in splited window + feature0_splits = split_feature(feature0, num_splits=attn_splits) + feature1_splits = split_feature(feature1, num_splits=attn_splits) + + position = pos_enc(feature0_splits) + + feature0_splits = feature0_splits + position + feature1_splits = feature1_splits + position + + feature0 = merge_splits(feature0_splits, num_splits=attn_splits) + feature1 = merge_splits(feature1_splits, num_splits=attn_splits) + else: + position = pos_enc(feature0) + + feature0 = feature0 + position + feature1 = feature1 + position + + return feature0, feature1 + + +class GMFlow(nn.Module): + def __init__( + self, + num_scales=2, + upsample_factor=4, + feature_channels=128, + attention_type="swin", + num_transformer_layers=6, + ffn_dim_expansion=4, + num_head=1, + **kwargs, + ): + super(GMFlow, self).__init__() + + self.num_scales = num_scales + self.feature_channels = feature_channels + self.upsample_factor = upsample_factor + self.attention_type = attention_type + self.num_transformer_layers = num_transformer_layers + + # CNN backbone + self.backbone = CNNEncoder( + output_dim=feature_channels, num_output_scales=num_scales + ) + + # Transformer + self.transformer = FeatureTransformer( + num_layers=num_transformer_layers, + d_model=feature_channels, + nhead=num_head, + attention_type=attention_type, + ffn_dim_expansion=ffn_dim_expansion, + ) + + # flow propagation with self-attn + self.feature_flow_attn = FeatureFlowAttention(in_channels=feature_channels) + + # convex upsampling: concat feature0 and flow as input + self.upsampler = nn.Sequential( + nn.Conv2d(2 + feature_channels, 256, 3, 1, 1), + nn.ReLU(inplace=True), + nn.Conv2d(256, upsample_factor**2 * 9, 1, 1, 0), + ) + + def extract_feature(self, img0, img1): + concat = torch.cat((img0, img1), dim=0) # [2B, C, H, W] + features = self.backbone( + concat + ) # list of [2B, C, H, W], resolution from high to low + + # reverse: resolution from low to high + features = features[::-1] + + feature0, feature1 = [], [] + + for i in range(len(features)): + feature = features[i] + chunks = torch.chunk(feature, 2, 0) # tuple + feature0.append(chunks[0]) + feature1.append(chunks[1]) + + return feature0, feature1 + + def upsample_flow( + self, + flow, + feature, + bilinear=False, + upsample_factor=8, + ): + if bilinear: + up_flow = ( + F.interpolate( + flow, + scale_factor=upsample_factor, + mode="bilinear", + align_corners=True, + ) + * upsample_factor + ) + + else: + # convex upsampling + concat = torch.cat((flow, feature), dim=1) + + mask = self.upsampler(concat) + b, flow_channel, h, w = flow.shape + mask = mask.view( + b, 1, 9, self.upsample_factor, self.upsample_factor, h, w + ) # [B, 1, 9, K, K, H, W] + mask = torch.softmax(mask, dim=2) + + up_flow = F.unfold(self.upsample_factor * flow, [3, 3], padding=1) + up_flow = up_flow.view( + b, flow_channel, 9, 1, 1, h, w + ) # [B, 2, 9, 1, 1, H, W] + + up_flow = torch.sum(mask * up_flow, dim=2) # [B, 2, K, K, H, W] + up_flow = up_flow.permute(0, 1, 4, 2, 5, 3) # [B, 2, K, H, K, W] + up_flow = up_flow.reshape( + b, flow_channel, self.upsample_factor * h, self.upsample_factor * w + ) # [B, 2, K*H, K*W] + + return up_flow + + def forward( + self, + img0, + img1, + attn_splits_list=[2, 8], + corr_radius_list=[-1, 4], + prop_radius_list=[-1, 1], + pred_bidir_flow=False, + **kwargs, + ): + img0, img1 = normalize_img(img0, img1) # [B, 3, H, W] + + # resolution low to high + feature0_list, feature1_list = self.extract_feature( + img0, img1 + ) # list of features + + flow = None + + assert ( + len(attn_splits_list) + == len(corr_radius_list) + == len(prop_radius_list) + == self.num_scales + ) + + for scale_idx in range(self.num_scales): + feature0, feature1 = feature0_list[scale_idx], feature1_list[scale_idx] + + if pred_bidir_flow and scale_idx > 0: + # predicting bidirectional flow with refinement + feature0, feature1 = torch.cat((feature0, feature1), dim=0), torch.cat( + (feature1, feature0), dim=0 + ) + + upsample_factor = self.upsample_factor * ( + 2 ** (self.num_scales - 1 - scale_idx) + ) + + if scale_idx > 0: + flow = ( + F.interpolate( + flow, scale_factor=2, mode="bilinear", align_corners=True + ) + * 2 + ) + + if flow is not None: + flow = flow.detach() + feature1 = flow_warp(feature1, flow) # [B, C, H, W] + + attn_splits = attn_splits_list[scale_idx] + corr_radius = corr_radius_list[scale_idx] + prop_radius = prop_radius_list[scale_idx] + + # add position to features + feature0, feature1 = feature_add_position( + feature0, feature1, attn_splits, self.feature_channels + ) + + # Transformer + feature0, feature1 = self.transformer( + feature0, feature1, attn_num_splits=attn_splits + ) + + # correlation and softmax + if corr_radius == -1: # global matching + flow_pred = global_correlation_softmax( + feature0, feature1, pred_bidir_flow + )[0] + else: # local matching + flow_pred = local_correlation_softmax(feature0, feature1, corr_radius)[ + 0 + ] + + # flow or residual flow + flow = flow + flow_pred if flow is not None else flow_pred + + # upsample to the original resolution for supervison + if ( + self.training + ): # only need to upsample intermediate flow predictions at training time + flow_bilinear = self.upsample_flow( + flow, None, bilinear=True, upsample_factor=upsample_factor + ) + + # flow propagation with self-attn + if pred_bidir_flow and scale_idx == 0: + feature0 = torch.cat( + (feature0, feature1), dim=0 + ) # [2*B, C, H, W] for propagation + flow = self.feature_flow_attn( + feature0, + flow.detach(), + local_window_attn=prop_radius > 0, + local_window_radius=prop_radius, + ) + + # bilinear upsampling at training time except the last one + if self.training and scale_idx < self.num_scales - 1: + flow_up = self.upsample_flow( + flow, feature0, bilinear=True, upsample_factor=upsample_factor + ) + + if scale_idx == self.num_scales - 1: + flow_up = self.upsample_flow(flow, feature0) + + return flow_up + + +backwarp_tenGrid = {} + + +def backwarp(tenIn, tenflow): + if str(tenflow.shape) not in backwarp_tenGrid: + tenHor = ( + torch.linspace( + start=-1.0, + end=1.0, + steps=tenflow.shape[3], + dtype=tenflow.dtype, + device=tenflow.device, + ) + .view(1, 1, 1, -1) + .repeat(1, 1, tenflow.shape[2], 1) + ) + tenVer = ( + torch.linspace( + start=-1.0, + end=1.0, + steps=tenflow.shape[2], + dtype=tenflow.dtype, + device=tenflow.device, + ) + .view(1, 1, -1, 1) + .repeat(1, 1, 1, tenflow.shape[3]) + ) + + backwarp_tenGrid[str(tenflow.shape)] = torch.cat([tenHor, tenVer], 1).to(get_torch_device()) + # end + + tenflow = torch.cat( + [ + tenflow[:, 0:1, :, :] / ((tenIn.shape[3] - 1.0) / 2.0), + tenflow[:, 1:2, :, :] / ((tenIn.shape[2] - 1.0) / 2.0), + ], + 1, + ) + + return torch.nn.functional.grid_sample( + input=tenIn, + grid=(backwarp_tenGrid[str(tenflow.shape)] + tenflow).permute(0, 2, 3, 1), + mode="bilinear", + padding_mode="zeros", + align_corners=True, + ) + + +class MetricNet(nn.Module): + def __init__(self): + super(MetricNet, self).__init__() + self.metric_in = nn.Conv2d(14, 64, 3, 1, 1) + self.metric_net1 = nn.Sequential(nn.PReLU(), nn.Conv2d(64, 64, 3, 1, 1)) + self.metric_net2 = nn.Sequential(nn.PReLU(), nn.Conv2d(64, 64, 3, 1, 1)) + self.metric_net3 = nn.Sequential(nn.PReLU(), nn.Conv2d(64, 64, 3, 1, 1)) + self.metric_out = nn.Sequential(nn.PReLU(), nn.Conv2d(64, 2, 3, 1, 1)) + + def forward(self, img0, img1, flow01, flow10): + metric0 = F.l1_loss(img0, backwarp(img1, flow01), reduction="none").mean( + [1], True + ) + metric1 = F.l1_loss(img1, backwarp(img0, flow10), reduction="none").mean( + [1], True + ) + + fwd_occ, bwd_occ = forward_backward_consistency_check(flow01, flow10) + + flow01 = torch.cat( + [ + flow01[:, 0:1, :, :] / ((flow01.shape[3] - 1.0) / 2.0), + flow01[:, 1:2, :, :] / ((flow01.shape[2] - 1.0) / 2.0), + ], + 1, + ) + flow10 = torch.cat( + [ + flow10[:, 0:1, :, :] / ((flow10.shape[3] - 1.0) / 2.0), + flow10[:, 1:2, :, :] / ((flow10.shape[2] - 1.0) / 2.0), + ], + 1, + ) + + img = torch.cat((img0, img1), 1) + metric = torch.cat((-metric0, -metric1), 1) + flow = torch.cat((flow01, flow10), 1) + occ = torch.cat((fwd_occ.unsqueeze(1), bwd_occ.unsqueeze(1)), 1) + + feat = self.metric_in(torch.cat((img, metric, flow, occ), 1)) + feat = self.metric_net1(feat) + feat + feat = self.metric_net2(feat) + feat + feat = self.metric_net3(feat) + feat + metric = self.metric_out(feat) + + metric = torch.tanh(metric) * 10 + + return metric[:, :1], metric[:, 1:2] + + +class FeatureNet(nn.Module): + """The quadratic model""" + + def __init__(self): + super(FeatureNet, self).__init__() + self.block1 = nn.Sequential( + nn.PReLU(), + nn.Conv2d(3, 64, 3, 2, 1), + nn.PReLU(), + nn.Conv2d(64, 64, 3, 1, 1), + ) + self.block2 = nn.Sequential( + nn.PReLU(), + nn.Conv2d(64, 128, 3, 2, 1), + nn.PReLU(), + nn.Conv2d(128, 128, 3, 1, 1), + ) + self.block3 = nn.Sequential( + nn.PReLU(), + nn.Conv2d(128, 192, 3, 2, 1), + nn.PReLU(), + nn.Conv2d(192, 192, 3, 1, 1), + ) + + def forward(self, x): + x1 = self.block1(x) + x2 = self.block2(x1) + x3 = self.block3(x2) + + return x1, x2, x3 + + +# Residual Block +def ResidualBlock(in_channels, out_channels, stride=1): + return torch.nn.Sequential( + nn.PReLU(), + nn.Conv2d( + in_channels, + out_channels, + kernel_size=3, + stride=stride, + padding=1, + bias=True, + ), + nn.PReLU(), + nn.Conv2d( + out_channels, + out_channels, + kernel_size=3, + stride=stride, + padding=1, + bias=True, + ), + ) + + +# downsample block +def DownsampleBlock(in_channels, out_channels, stride=2): + return torch.nn.Sequential( + nn.PReLU(), + nn.Conv2d( + in_channels, + out_channels, + kernel_size=3, + stride=stride, + padding=1, + bias=True, + ), + nn.PReLU(), + nn.Conv2d( + out_channels, out_channels, kernel_size=3, stride=1, padding=1, bias=True + ), + ) + + +# upsample block +def UpsampleBlock(in_channels, out_channels, stride=2): + return torch.nn.Sequential( + nn.PReLU(), + nn.ConvTranspose2d( + in_channels, + out_channels, + kernel_size=4, + stride=stride, + padding=1, + bias=True, + ), + nn.PReLU(), + nn.Conv2d( + out_channels, out_channels, kernel_size=3, stride=1, padding=1, bias=True + ), + ) + + +class PixelShuffleBlcok(nn.Module): + def __init__(self, in_feat, num_feat, num_out_ch): + super(PixelShuffleBlcok, self).__init__() + self.conv_before_upsample = nn.Sequential( + nn.Conv2d(in_feat, num_feat, 3, 1, 1), nn.PReLU() + ) + self.upsample = nn.Sequential( + nn.Conv2d(num_feat, 4 * num_feat, 3, 1, 1), nn.PixelShuffle(2) + ) + self.conv_last = nn.Conv2d(num_feat, num_out_ch, 3, 1, 1) + + def forward(self, x): + x = self.conv_before_upsample(x) + x = self.conv_last(self.upsample(x)) + return x + + +# grid network +class GridNet(nn.Module): + def __init__( + self, + in_channels=9, + in_channels1=128, + in_channels2=256, + in_channels3=384, + out_channels=3, + ): + super(GridNet, self).__init__() + + self.residual_model_head0 = ResidualBlock(in_channels, 64) + self.residual_model_head1 = ResidualBlock(in_channels1, 64) + self.residual_model_head2 = ResidualBlock(in_channels2, 128) + self.residual_model_head3 = ResidualBlock(in_channels3, 192) + + self.residual_model_01 = ResidualBlock(64, 64) + # self.residual_model_02=ResidualBlock(64, 64) + # self.residual_model_03=ResidualBlock(64, 64) + self.residual_model_04 = ResidualBlock(64, 64) + self.residual_model_05 = ResidualBlock(64, 64) + self.residual_model_tail = PixelShuffleBlcok(64, 64, out_channels) + + self.residual_model_11 = ResidualBlock(128, 128) + # self.residual_model_12=ResidualBlock(128, 128) + # self.residual_model_13=ResidualBlock(128, 128) + self.residual_model_14 = ResidualBlock(128, 128) + self.residual_model_15 = ResidualBlock(128, 128) + + self.residual_model_21 = ResidualBlock(192, 192) + # self.residual_model_22=ResidualBlock(192, 192) + # self.residual_model_23=ResidualBlock(192, 192) + self.residual_model_24 = ResidualBlock(192, 192) + self.residual_model_25 = ResidualBlock(192, 192) + + # + + self.downsample_model_10 = DownsampleBlock(64, 128) + self.downsample_model_20 = DownsampleBlock(128, 192) + + self.downsample_model_11 = DownsampleBlock(64, 128) + self.downsample_model_21 = DownsampleBlock(128, 192) + + # self.downsample_model_12=DownsampleBlock(64, 128) + # self.downsample_model_22=DownsampleBlock(128, 192) + + # + + # self.upsample_model_03=UpsampleBlock(128, 64) + # self.upsample_model_13=UpsampleBlock(192, 128) + + self.upsample_model_04 = UpsampleBlock(128, 64) + self.upsample_model_14 = UpsampleBlock(192, 128) + + self.upsample_model_05 = UpsampleBlock(128, 64) + self.upsample_model_15 = UpsampleBlock(192, 128) + + def forward(self, x, x1, x2, x3): + X00 = self.residual_model_head0(x) + self.residual_model_head1( + x1 + ) # --- 182 ~ 185 + # X10 = self.residual_model_head1(x1) + + X01 = self.residual_model_01(X00) + X00 # --- 208 ~ 211 ,AddBackward1213 + + X10 = self.downsample_model_10(X00) + self.residual_model_head2( + x2 + ) # --- 186 ~ 189 + X20 = self.downsample_model_20(X10) + self.residual_model_head3( + x3 + ) # --- 190 ~ 193 + + residual_11 = ( + self.residual_model_11(X10) + X10 + ) # 201 ~ 204 , sum AddBackward1206 + downsample_11 = self.downsample_model_11(X01) # 214 ~ 217 + X11 = residual_11 + downsample_11 # --- AddBackward1218 + + residual_21 = ( + self.residual_model_21(X20) + X20 + ) # 194 ~ 197 , sum AddBackward1199 + downsample_21 = self.downsample_model_21(X11) # 219 ~ 222 + X21 = residual_21 + downsample_21 # AddBackward1223 + + X24 = self.residual_model_24(X21) + X21 # --- 224 ~ 227 , AddBackward1229 + X25 = self.residual_model_25(X24) + X24 # --- 230 ~ 233 , AddBackward1235 + + upsample_14 = self.upsample_model_14(X24) # 242 ~ 246 + residual_14 = self.residual_model_14(X11) + X11 # 248 ~ 251, AddBackward1253 + X14 = upsample_14 + residual_14 # --- AddBackward1254 + + upsample_04 = self.upsample_model_04(X14) # 268 ~ 272 + residual_04 = self.residual_model_04(X01) + X01 # 274 ~ 277, AddBackward1279 + X04 = upsample_04 + residual_04 # --- AddBackward1280 + + upsample_15 = self.upsample_model_15(X25) # 236 ~ 240 + residual_15 = self.residual_model_15(X14) + X14 # 255 ~ 258, AddBackward1260 + X15 = upsample_15 + residual_15 # AddBackward1261 + + upsample_05 = self.upsample_model_05(X15) # 262 ~ 266 + residual_05 = self.residual_model_05(X04) + X04 # 281 ~ 284,AddBackward1286 + X05 = upsample_05 + residual_05 # AddBackward1287 + + X_tail = self.residual_model_tail(X05) # 288 ~ 291 + + return X_tail +# end + + +class Model: + def __init__(self): + self.flownet = GMFlow() + self.ifnet = IFNet(arch_ver="4.6") + self.metricnet = MetricNet() + self.feat_ext = FeatureNet() + self.fusionnet = GridNet() + self.version = 3.9 + + def eval(self): + self.flownet.eval() + self.ifnet.eval() + self.metricnet.eval() + self.feat_ext.eval() + self.fusionnet.eval() + + def device(self): + self.flownet.to(device) + self.ifnet.to(device) + self.metricnet.to(device) + self.feat_ext.to(device) + self.fusionnet.to(device) + + def load_model(self, path_dict): + #models/rife46.pth + self.ifnet.load_state_dict(torch.load(path_dict["ifnet"])) + #models/GMFSS_fortuna_flownet.pkl + self.flownet.load_state_dict(torch.load(path_dict["flownet"])) + #models/GMFSS_fortuna_union_metric.pkl + self.metricnet.load_state_dict(torch.load(path_dict["metricnet"])) + #models/GMFSS_fortuna_union_feat.pkl + self.feat_ext.load_state_dict(torch.load(path_dict["feat_ext"])) + #models/GMFSS_fortuna_union_fusionnet.pkl + self.fusionnet.load_state_dict(torch.load(path_dict["fusionnet"])) + + def reuse(self, img0, img1, scale): + feat11, feat12, feat13 = self.feat_ext(img0) + feat21, feat22, feat23 = self.feat_ext(img1) + + img0 = F.interpolate( + img0, scale_factor=0.5, mode="bilinear", align_corners=False + ) + img1 = F.interpolate( + img1, scale_factor=0.5, mode="bilinear", align_corners=False + ) + + if scale != 1.0: + imgf0 = F.interpolate( + img0, scale_factor=scale, mode="bilinear", align_corners=False + ) + imgf1 = F.interpolate( + img1, scale_factor=scale, mode="bilinear", align_corners=False + ) + else: + imgf0 = img0 + imgf1 = img1 + flow01 = self.flownet(imgf0, imgf1, return_flow=True) + flow10 = self.flownet(imgf1, imgf0, return_flow=True) + if scale != 1.0: + flow01 = ( + F.interpolate( + flow01, + scale_factor=1.0 / scale, + mode="bilinear", + align_corners=False, + ) + / scale + ) + flow10 = ( + F.interpolate( + flow10, + scale_factor=1.0 / scale, + mode="bilinear", + align_corners=False, + ) + / scale + ) + + metric0, metric1 = self.metricnet(img0, img1, flow01, flow10) + + return ( + flow01, + flow10, + metric0, + metric1, + feat11, + feat12, + feat13, + feat21, + feat22, + feat23, + ) + + def inference( + self, + img0, + img1, + flow01, + flow10, + metric0, + metric1, + feat11, + feat12, + feat13, + feat21, + feat22, + feat23, + timestep, + ): + F1t = timestep * flow01 + F2t = (1 - timestep) * flow10 + + Z1t = timestep * metric0 + Z2t = (1 - timestep) * metric1 + + img0 = F.interpolate( + img0, scale_factor=0.5, mode="bilinear", align_corners=False + ) + I1t = softsplat(img0, F1t, Z1t, strMode="soft") + img1 = F.interpolate( + img1, scale_factor=0.5, mode="bilinear", align_corners=False + ) + I2t = softsplat(img1, F2t, Z2t, strMode="soft") + + rife = self.ifnet(img0, img1, timestep, scale_list=[8, 4, 2, 1]) + + feat1t1 = softsplat(feat11, F1t, Z1t, strMode="soft") + feat2t1 = softsplat(feat21, F2t, Z2t, strMode="soft") + + F1td = ( + F.interpolate(F1t, scale_factor=0.5, mode="bilinear", align_corners=False) + * 0.5 + ) + Z1d = F.interpolate(Z1t, scale_factor=0.5, mode="bilinear", align_corners=False) + feat1t2 = softsplat(feat12, F1td, Z1d, strMode="soft") + F2td = ( + F.interpolate(F2t, scale_factor=0.5, mode="bilinear", align_corners=False) + * 0.5 + ) + Z2d = F.interpolate(Z2t, scale_factor=0.5, mode="bilinear", align_corners=False) + feat2t2 = softsplat(feat22, F2td, Z2d, strMode="soft") + + F1tdd = ( + F.interpolate(F1t, scale_factor=0.25, mode="bilinear", align_corners=False) + * 0.25 + ) + Z1dd = F.interpolate( + Z1t, scale_factor=0.25, mode="bilinear", align_corners=False + ) + feat1t3 = softsplat(feat13, F1tdd, Z1dd, strMode="soft") + F2tdd = ( + F.interpolate(F2t, scale_factor=0.25, mode="bilinear", align_corners=False) + * 0.25 + ) + Z2dd = F.interpolate( + Z2t, scale_factor=0.25, mode="bilinear", align_corners=False + ) + feat2t3 = softsplat(feat23, F2tdd, Z2dd, strMode="soft") + + out = self.fusionnet( + torch.cat([I1t, rife, I2t], dim=1), + torch.cat([feat1t1, feat2t1], dim=1), + torch.cat([feat1t2, feat2t2], dim=1), + torch.cat([feat1t3, feat2t3], dim=1), + ) + + return torch.clamp(out, 0, 1) diff --git a/comfyui-frame-interpolation/vfi_models/gmfss_fortuna/__init__.py b/comfyui-frame-interpolation/vfi_models/gmfss_fortuna/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..3e55bb606f30d7d42eeac118fe8832bd7493957f --- /dev/null +++ b/comfyui-frame-interpolation/vfi_models/gmfss_fortuna/__init__.py @@ -0,0 +1,143 @@ +import pathlib +from vfi_utils import load_file_from_github_release, preprocess_frames, postprocess_frames, generic_frame_loop, InterpolationStateList +import typing +import torch +import torch.nn as nn +import torch.nn.functional as F +from comfy.model_management import get_torch_device + + +GLOBAL_MODEL_TYPE = pathlib.Path(__file__).parent.name +CKPTS_PATH_CONFIG = { + "GMFSS_fortuna_union": { + "ifnet": ("rife", "rife46.pth"), + "flownet": (GLOBAL_MODEL_TYPE, "GMFSS_fortuna_flownet.pkl"), + "metricnet": (GLOBAL_MODEL_TYPE, "GMFSS_fortuna_union_metric.pkl"), + "feat_ext": (GLOBAL_MODEL_TYPE, "GMFSS_fortuna_union_feat.pkl"), + "fusionnet": (GLOBAL_MODEL_TYPE, "GMFSS_fortuna_union_fusionnet.pkl") + }, + "GMFSS_fortuna": { + "flownet": (GLOBAL_MODEL_TYPE, "GMFSS_fortuna_flownet.pkl"), + "metricnet": (GLOBAL_MODEL_TYPE, "GMFSS_fortuna_metric.pkl"), + "feat_ext": (GLOBAL_MODEL_TYPE, "GMFSS_fortuna_feat.pkl"), + "fusionnet": (GLOBAL_MODEL_TYPE, "GMFSS_fortuna_fusionnet.pkl") + } +} + +class CommonModelInference(nn.Module): + def __init__(self, model_type): + super(CommonModelInference, self).__init__() + from .GMFSS_Fortuna_arch import Model as GMFSS + from .GMFSS_Fortuna_union_arch import Model as GMFSS_Union + self.model = GMFSS_Union() if "union" in model_type else GMFSS() + self.model.eval() + self.model.device() + _model_path_config = CKPTS_PATH_CONFIG[model_type] + self.model.load_model({ + key: load_file_from_github_release(*_model_path_config[key]) + for key in _model_path_config + }) + + def forward(self, I0, I1, timestep, scale=1.0): + n, c, h, w = I0.shape + tmp = max(64, int(64 / scale)) + ph = ((h - 1) // tmp + 1) * tmp + pw = ((w - 1) // tmp + 1) * tmp + padding = (0, pw - w, 0, ph - h) + I0 = F.pad(I0, padding) + I1 = F.pad(I1, padding) + ( + flow01, + flow10, + metric0, + metric1, + feat11, + feat12, + feat13, + feat21, + feat22, + feat23, + ) = self.model.reuse(I0, I1, scale) + + output = self.model.inference( + I0, + I1, + flow01, + flow10, + metric0, + metric1, + feat11, + feat12, + feat13, + feat21, + feat22, + feat23, + timestep, + ) + return output[:, :, :h, :w] + +class GMFSS_Fortuna_VFI: + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "ckpt_name": (list(CKPTS_PATH_CONFIG.keys()), ), + "frames": ("IMAGE", ), + "clear_cache_after_n_frames": ("INT", {"default": 10, "min": 1, "max": 1000}), + "multiplier": ("INT", {"default": 2, "min": 2, "max": 1000}), + }, + "optional": { + "optional_interpolation_states": ("INTERPOLATION_STATES", ) + } + } + + RETURN_TYPES = ("IMAGE", ) + FUNCTION = "vfi" + CATEGORY = "ComfyUI-Frame-Interpolation/VFI" + + def vfi( + self, + ckpt_name: typing.AnyStr, + frames: torch.Tensor, + clear_cache_after_n_frames = 10, + multiplier: typing.SupportsInt = 2, + optional_interpolation_states: InterpolationStateList = None, + **kwargs + ): + """ + Perform video frame interpolation using a given checkpoint model. + + Args: + ckpt_name (str): The name of the checkpoint model to use. + frames (torch.Tensor): A tensor containing input video frames. + clear_cache_after_n_frames (int, optional): The number of frames to process before clearing CUDA cache + to prevent memory overflow. Defaults to 10. Lower numbers are safer but mean more processing time. + How high you should set it depends on how many input frames there are, input resolution (after upscaling), + how many times you want to multiply them, and how long you're willing to wait for the process to complete. + multiplier (int, optional): The multiplier for each input frame. 60 input frames * 2 = 120 output frames. Defaults to 2. + + Returns: + tuple: A tuple containing the output interpolated frames. + + Note: + This method interpolates frames in a video sequence using a specified checkpoint model. + It processes each frame sequentially, generating interpolated frames between them. + + To prevent memory overflow, it clears the CUDA cache after processing a specified number of frames. + """ + + interpolation_model = CommonModelInference(model_type=ckpt_name) + interpolation_model.eval().to(get_torch_device()) + frames = preprocess_frames(frames) + + def return_middle_frame(frame_0, frame_1, timestep, model, scale): + return model(frame_0, frame_1, timestep, scale) + + scale = 1 + + args = [interpolation_model, scale] + out = postprocess_frames( + generic_frame_loop(type(self).__name__, frames, clear_cache_after_n_frames, multiplier, return_middle_frame, *args, + interpolation_states=optional_interpolation_states, dtype=torch.float32) + ) + return (out,) diff --git a/comfyui-frame-interpolation/vfi_models/gmfss_fortuna/__pycache__/__init__.cpython-310.pyc b/comfyui-frame-interpolation/vfi_models/gmfss_fortuna/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f8e2fe0f1a0f98cc488a5eea664d30bf73097e40 Binary files /dev/null and b/comfyui-frame-interpolation/vfi_models/gmfss_fortuna/__pycache__/__init__.cpython-310.pyc differ diff --git a/comfyui-frame-interpolation/vfi_models/ifrnet/IFRNet_L_arch.py b/comfyui-frame-interpolation/vfi_models/ifrnet/IFRNet_L_arch.py new file mode 100644 index 0000000000000000000000000000000000000000..f9554a0bbfbe274ccfa021c618512f5220bbb220 --- /dev/null +++ b/comfyui-frame-interpolation/vfi_models/ifrnet/IFRNet_L_arch.py @@ -0,0 +1,293 @@ +# https://github.com/ltkong218/IFRNet/blob/main/models/IFRNet_L.py +# https://github.com/ltkong218/IFRNet/blob/main/utils.py +import torch +import torch.nn as nn +import torch.nn.functional as F +from comfy.model_management import get_torch_device + + +def warp(img, flow): + B, _, H, W = flow.shape + xx = torch.linspace(-1.0, 1.0, W).view(1, 1, 1, W).expand(B, -1, H, -1) + yy = torch.linspace(-1.0, 1.0, H).view(1, 1, H, 1).expand(B, -1, -1, W) + grid = torch.cat([xx, yy], 1).to(img) + flow_ = torch.cat( + [ + flow[:, 0:1, :, :] / ((W - 1.0) / 2.0), + flow[:, 1:2, :, :] / ((H - 1.0) / 2.0), + ], + 1, + ) + grid_ = (grid + flow_).permute(0, 2, 3, 1) + output = F.grid_sample( + input=img, + grid=grid_, + mode="bilinear", + padding_mode="border", + align_corners=True, + ) + return output + + +def get_robust_weight(flow_pred, flow_gt, beta): + epe = ((flow_pred.detach() - flow_gt) ** 2).sum(dim=1, keepdim=True) ** 0.5 + robust_weight = torch.exp(-beta * epe) + return robust_weight + + +def resize(x, scale_factor): + return F.interpolate( + x, scale_factor=scale_factor, mode="bilinear", align_corners=False + ) + + +def convrelu( + in_channels, + out_channels, + kernel_size=3, + stride=1, + padding=1, + dilation=1, + groups=1, + bias=True, +): + return nn.Sequential( + nn.Conv2d( + in_channels, + out_channels, + kernel_size, + stride, + padding, + dilation, + groups, + bias=bias, + ), + nn.PReLU(out_channels), + ) + + +class ResBlock(nn.Module): + def __init__(self, in_channels, side_channels, bias=True): + super(ResBlock, self).__init__() + self.side_channels = side_channels + self.conv1 = nn.Sequential( + nn.Conv2d( + in_channels, in_channels, kernel_size=3, stride=1, padding=1, bias=bias + ), + nn.PReLU(in_channels), + ) + self.conv2 = nn.Sequential( + nn.Conv2d( + side_channels, + side_channels, + kernel_size=3, + stride=1, + padding=1, + bias=bias, + ), + nn.PReLU(side_channels), + ) + self.conv3 = nn.Sequential( + nn.Conv2d( + in_channels, in_channels, kernel_size=3, stride=1, padding=1, bias=bias + ), + nn.PReLU(in_channels), + ) + self.conv4 = nn.Sequential( + nn.Conv2d( + side_channels, + side_channels, + kernel_size=3, + stride=1, + padding=1, + bias=bias, + ), + nn.PReLU(side_channels), + ) + self.conv5 = nn.Conv2d( + in_channels, in_channels, kernel_size=3, stride=1, padding=1, bias=bias + ) + self.prelu = nn.PReLU(in_channels) + + def forward(self, x): + out = self.conv1(x) + out[:, -self.side_channels :, :, :] = self.conv2( + out[:, -self.side_channels :, :, :] + ) + out = self.conv3(out) + out[:, -self.side_channels :, :, :] = self.conv4( + out[:, -self.side_channels :, :, :] + ) + out = self.prelu(x + self.conv5(out)) + return out + + +class Encoder(nn.Module): + def __init__(self): + super(Encoder, self).__init__() + self.pyramid1 = nn.Sequential( + convrelu(3, 64, 7, 2, 3), convrelu(64, 64, 3, 1, 1) + ) + self.pyramid2 = nn.Sequential( + convrelu(64, 96, 3, 2, 1), convrelu(96, 96, 3, 1, 1) + ) + self.pyramid3 = nn.Sequential( + convrelu(96, 144, 3, 2, 1), convrelu(144, 144, 3, 1, 1) + ) + self.pyramid4 = nn.Sequential( + convrelu(144, 192, 3, 2, 1), convrelu(192, 192, 3, 1, 1) + ) + + def forward(self, img): + f1 = self.pyramid1(img) + f2 = self.pyramid2(f1) + f3 = self.pyramid3(f2) + f4 = self.pyramid4(f3) + return f1, f2, f3, f4 + + +class Decoder4(nn.Module): + def __init__(self): + super(Decoder4, self).__init__() + self.convblock = nn.Sequential( + convrelu(384 + 1, 384), + ResBlock(384, 64), + nn.ConvTranspose2d(384, 148, 4, 2, 1, bias=True), + ) + + def forward(self, f0, f1, embt): + b, c, h, w = f0.shape + embt = embt.repeat(1, 1, h, w) + f_in = torch.cat([f0, f1, embt], 1) + f_out = self.convblock(f_in) + return f_out + + +class Decoder3(nn.Module): + def __init__(self): + super(Decoder3, self).__init__() + self.convblock = nn.Sequential( + convrelu(436, 432), + ResBlock(432, 64), + nn.ConvTranspose2d(432, 100, 4, 2, 1, bias=True), + ) + + def forward(self, ft_, f0, f1, up_flow0, up_flow1): + f0_warp = warp(f0, up_flow0) + f1_warp = warp(f1, up_flow1) + f_in = torch.cat([ft_, f0_warp, f1_warp, up_flow0, up_flow1], 1) + f_out = self.convblock(f_in) + return f_out + + +class Decoder2(nn.Module): + def __init__(self): + super(Decoder2, self).__init__() + self.convblock = nn.Sequential( + convrelu(292, 288), + ResBlock(288, 64), + nn.ConvTranspose2d(288, 68, 4, 2, 1, bias=True), + ) + + def forward(self, ft_, f0, f1, up_flow0, up_flow1): + f0_warp = warp(f0, up_flow0) + f1_warp = warp(f1, up_flow1) + f_in = torch.cat([ft_, f0_warp, f1_warp, up_flow0, up_flow1], 1) + f_out = self.convblock(f_in) + return f_out + + +class Decoder1(nn.Module): + def __init__(self): + super(Decoder1, self).__init__() + self.convblock = nn.Sequential( + convrelu(196, 192), + ResBlock(192, 64), + nn.ConvTranspose2d(192, 8, 4, 2, 1, bias=True), + ) + + def forward(self, ft_, f0, f1, up_flow0, up_flow1): + f0_warp = warp(f0, up_flow0) + f1_warp = warp(f1, up_flow1) + f_in = torch.cat([ft_, f0_warp, f1_warp, up_flow0, up_flow1], 1) + f_out = self.convblock(f_in) + return f_out + + +class IRFNet_L(nn.Module): + def __init__(self): + super(IRFNet_L, self).__init__() + self.encoder = Encoder() + self.decoder4 = Decoder4() + self.decoder3 = Decoder3() + self.decoder2 = Decoder2() + self.decoder1 = Decoder1() + + def forward(self, img0, img1, scale_factor=1.0, timestep=0.5): + # emb1 = torch.tensor(1/2).view(1, 1, 1, 1).float() + # emb2 = torch.tensor(2/2).view(1, 1, 1, 1).float() + # embt = torch.cat([emb1, emb2], 0) + n, c, h, w = img0.shape + + ph = ((h - 1) // 64 + 1) * 64 + pw = ((w - 1) // 64 + 1) * 64 + padding = (0, pw - w, 0, ph - h) + img0 = F.pad(img0, padding) + img1 = F.pad(img1, padding) + + #Support multiple batches + embt = torch.tensor([timestep] * n).view(n, 1, 1, 1).float().to(get_torch_device()) + if "HalfTensor" in str(img0.type()): + embt = embt.half() + + mean_ = ( + torch.cat([img0, img1], 2) + .mean(1, keepdim=True) + .mean(2, keepdim=True) + .mean(3, keepdim=True) + ) + img0 = img0 - mean_ + img1 = img1 - mean_ + + img0_ = resize(img0, scale_factor=scale_factor) + img1_ = resize(img1, scale_factor=scale_factor) + + f0_1, f0_2, f0_3, f0_4 = self.encoder(img0_) + f1_1, f1_2, f1_3, f1_4 = self.encoder(img1_) + + out4 = self.decoder4(f0_4, f1_4, embt) + up_flow0_4 = out4[:, 0:2] + up_flow1_4 = out4[:, 2:4] + ft_3_ = out4[:, 4:] + + out3 = self.decoder3(ft_3_, f0_3, f1_3, up_flow0_4, up_flow1_4) + up_flow0_3 = out3[:, 0:2] + 2.0 * resize(up_flow0_4, scale_factor=2.0) + up_flow1_3 = out3[:, 2:4] + 2.0 * resize(up_flow1_4, scale_factor=2.0) + ft_2_ = out3[:, 4:] + + out2 = self.decoder2(ft_2_, f0_2, f1_2, up_flow0_3, up_flow1_3) + up_flow0_2 = out2[:, 0:2] + 2.0 * resize(up_flow0_3, scale_factor=2.0) + up_flow1_2 = out2[:, 2:4] + 2.0 * resize(up_flow1_3, scale_factor=2.0) + ft_1_ = out2[:, 4:] + + out1 = self.decoder1(ft_1_, f0_1, f1_1, up_flow0_2, up_flow1_2) + up_flow0_1 = out1[:, 0:2] + 2.0 * resize(up_flow0_2, scale_factor=2.0) + up_flow1_1 = out1[:, 2:4] + 2.0 * resize(up_flow1_2, scale_factor=2.0) + up_mask_1 = torch.sigmoid(out1[:, 4:5]) + up_res_1 = out1[:, 5:] + + up_flow0_1 = resize(up_flow0_1, scale_factor=(1.0 / scale_factor)) * ( + 1.0 / scale_factor + ) + up_flow1_1 = resize(up_flow1_1, scale_factor=(1.0 / scale_factor)) * ( + 1.0 / scale_factor + ) + up_mask_1 = resize(up_mask_1, scale_factor=(1.0 / scale_factor)) + up_res_1 = resize(up_res_1, scale_factor=(1.0 / scale_factor)) + + img0_warp = warp(img0, up_flow0_1) + img1_warp = warp(img1, up_flow1_1) + imgt_merge = up_mask_1 * img0_warp + (1 - up_mask_1) * img1_warp + mean_ + imgt_pred = imgt_merge + up_res_1 + imgt_pred = torch.clamp(imgt_pred, 0, 1) + return imgt_pred[:, :, :h, :w] diff --git a/comfyui-frame-interpolation/vfi_models/ifrnet/IFRNet_S_arch.py b/comfyui-frame-interpolation/vfi_models/ifrnet/IFRNet_S_arch.py new file mode 100644 index 0000000000000000000000000000000000000000..4a2282b93b74eddf5792190f77dff0de457ff8b4 --- /dev/null +++ b/comfyui-frame-interpolation/vfi_models/ifrnet/IFRNet_S_arch.py @@ -0,0 +1,293 @@ +# https://github.com/ltkong218/IFRNet/blob/main/models/IFRNet_S.py +# https://github.com/ltkong218/IFRNet/blob/main/utils.py +import torch +import torch.nn as nn +import torch.nn.functional as F +from comfy.model_management import get_torch_device + + +def warp(img, flow): + B, _, H, W = flow.shape + xx = torch.linspace(-1.0, 1.0, W).view(1, 1, 1, W).expand(B, -1, H, -1) + yy = torch.linspace(-1.0, 1.0, H).view(1, 1, H, 1).expand(B, -1, -1, W) + grid = torch.cat([xx, yy], 1).to(img) + flow_ = torch.cat( + [ + flow[:, 0:1, :, :] / ((W - 1.0) / 2.0), + flow[:, 1:2, :, :] / ((H - 1.0) / 2.0), + ], + 1, + ) + grid_ = (grid + flow_).permute(0, 2, 3, 1) + output = F.grid_sample( + input=img, + grid=grid_, + mode="bilinear", + padding_mode="border", + align_corners=True, + ) + return output + + +def get_robust_weight(flow_pred, flow_gt, beta): + epe = ((flow_pred.detach() - flow_gt) ** 2).sum(dim=1, keepdim=True) ** 0.5 + robust_weight = torch.exp(-beta * epe) + return robust_weight + + +def resize(x, scale_factor): + return F.interpolate( + x, scale_factor=scale_factor, mode="bilinear", align_corners=False + ) + + +def convrelu( + in_channels, + out_channels, + kernel_size=3, + stride=1, + padding=1, + dilation=1, + groups=1, + bias=True, +): + return nn.Sequential( + nn.Conv2d( + in_channels, + out_channels, + kernel_size, + stride, + padding, + dilation, + groups, + bias=bias, + ), + nn.PReLU(out_channels), + ) + + +class ResBlock(nn.Module): + def __init__(self, in_channels, side_channels, bias=True): + super(ResBlock, self).__init__() + self.side_channels = side_channels + self.conv1 = nn.Sequential( + nn.Conv2d( + in_channels, in_channels, kernel_size=3, stride=1, padding=1, bias=bias + ), + nn.PReLU(in_channels), + ) + self.conv2 = nn.Sequential( + nn.Conv2d( + side_channels, + side_channels, + kernel_size=3, + stride=1, + padding=1, + bias=bias, + ), + nn.PReLU(side_channels), + ) + self.conv3 = nn.Sequential( + nn.Conv2d( + in_channels, in_channels, kernel_size=3, stride=1, padding=1, bias=bias + ), + nn.PReLU(in_channels), + ) + self.conv4 = nn.Sequential( + nn.Conv2d( + side_channels, + side_channels, + kernel_size=3, + stride=1, + padding=1, + bias=bias, + ), + nn.PReLU(side_channels), + ) + self.conv5 = nn.Conv2d( + in_channels, in_channels, kernel_size=3, stride=1, padding=1, bias=bias + ) + self.prelu = nn.PReLU(in_channels) + + def forward(self, x): + out = self.conv1(x) + out[:, -self.side_channels :, :, :] = self.conv2( + out[:, -self.side_channels :, :, :] + ) + out = self.conv3(out) + out[:, -self.side_channels :, :, :] = self.conv4( + out[:, -self.side_channels :, :, :] + ) + out = self.prelu(x + self.conv5(out)) + return out + + +class Encoder(nn.Module): + def __init__(self): + super(Encoder, self).__init__() + self.pyramid1 = nn.Sequential( + convrelu(3, 24, 3, 2, 1), convrelu(24, 24, 3, 1, 1) + ) + self.pyramid2 = nn.Sequential( + convrelu(24, 36, 3, 2, 1), convrelu(36, 36, 3, 1, 1) + ) + self.pyramid3 = nn.Sequential( + convrelu(36, 54, 3, 2, 1), convrelu(54, 54, 3, 1, 1) + ) + self.pyramid4 = nn.Sequential( + convrelu(54, 72, 3, 2, 1), convrelu(72, 72, 3, 1, 1) + ) + + def forward(self, img): + f1 = self.pyramid1(img) + f2 = self.pyramid2(f1) + f3 = self.pyramid3(f2) + f4 = self.pyramid4(f3) + return f1, f2, f3, f4 + + +class Decoder4(nn.Module): + def __init__(self): + super(Decoder4, self).__init__() + self.convblock = nn.Sequential( + convrelu(144 + 1, 144), + ResBlock(144, 24), + nn.ConvTranspose2d(144, 58, 4, 2, 1, bias=True), + ) + + def forward(self, f0, f1, embt): + b, c, h, w = f0.shape + embt = embt.repeat(1, 1, h, w) + f_in = torch.cat([f0, f1, embt], 1) + f_out = self.convblock(f_in) + return f_out + + +class Decoder3(nn.Module): + def __init__(self): + super(Decoder3, self).__init__() + self.convblock = nn.Sequential( + convrelu(166, 162), + ResBlock(162, 24), + nn.ConvTranspose2d(162, 40, 4, 2, 1, bias=True), + ) + + def forward(self, ft_, f0, f1, up_flow0, up_flow1): + f0_warp = warp(f0, up_flow0) + f1_warp = warp(f1, up_flow1) + f_in = torch.cat([ft_, f0_warp, f1_warp, up_flow0, up_flow1], 1) + f_out = self.convblock(f_in) + return f_out + + +class Decoder2(nn.Module): + def __init__(self): + super(Decoder2, self).__init__() + self.convblock = nn.Sequential( + convrelu(112, 108), + ResBlock(108, 24), + nn.ConvTranspose2d(108, 28, 4, 2, 1, bias=True), + ) + + def forward(self, ft_, f0, f1, up_flow0, up_flow1): + f0_warp = warp(f0, up_flow0) + f1_warp = warp(f1, up_flow1) + f_in = torch.cat([ft_, f0_warp, f1_warp, up_flow0, up_flow1], 1) + f_out = self.convblock(f_in) + return f_out + + +class Decoder1(nn.Module): + def __init__(self): + super(Decoder1, self).__init__() + self.convblock = nn.Sequential( + convrelu(76, 72), + ResBlock(72, 24), + nn.ConvTranspose2d(72, 8, 4, 2, 1, bias=True), + ) + + def forward(self, ft_, f0, f1, up_flow0, up_flow1): + f0_warp = warp(f0, up_flow0) + f1_warp = warp(f1, up_flow1) + f_in = torch.cat([ft_, f0_warp, f1_warp, up_flow0, up_flow1], 1) + f_out = self.convblock(f_in) + return f_out + + +class IRFNet_S(nn.Module): + def __init__(self): + super(IRFNet_S, self).__init__() + self.encoder = Encoder() + self.decoder4 = Decoder4() + self.decoder3 = Decoder3() + self.decoder2 = Decoder2() + self.decoder1 = Decoder1() + + def forward(self, img0, img1, scale_factor=1.0, timestep=0.5): + # emb1 = torch.tensor(1/2).view(1, 1, 1, 1).float() + # emb2 = torch.tensor(2/2).view(1, 1, 1, 1).float() + # embt = torch.cat([emb1, emb2], 0) + n, c, h, w = img0.shape + + ph = ((h - 1) // 64 + 1) * 64 + pw = ((w - 1) // 64 + 1) * 64 + padding = (0, pw - w, 0, ph - h) + img0 = F.pad(img0, padding) + img1 = F.pad(img1, padding) + + #Support multiple batches + embt = torch.tensor([timestep] * n).view(n, 1, 1, 1).float().to(get_torch_device()) + if "HalfTensor" in str(img0.type()): + embt = embt.half() + + mean_ = ( + torch.cat([img0, img1], 2) + .mean(1, keepdim=True) + .mean(2, keepdim=True) + .mean(3, keepdim=True) + ) + img0 = img0 - mean_ + img1 = img1 - mean_ + + img0_ = resize(img0, scale_factor=scale_factor) + img1_ = resize(img1, scale_factor=scale_factor) + + f0_1, f0_2, f0_3, f0_4 = self.encoder(img0_) + f1_1, f1_2, f1_3, f1_4 = self.encoder(img1_) + + out4 = self.decoder4(f0_4, f1_4, embt) + up_flow0_4 = out4[:, 0:2] + up_flow1_4 = out4[:, 2:4] + ft_3_ = out4[:, 4:] + + out3 = self.decoder3(ft_3_, f0_3, f1_3, up_flow0_4, up_flow1_4) + up_flow0_3 = out3[:, 0:2] + 2.0 * resize(up_flow0_4, scale_factor=2.0) + up_flow1_3 = out3[:, 2:4] + 2.0 * resize(up_flow1_4, scale_factor=2.0) + ft_2_ = out3[:, 4:] + + out2 = self.decoder2(ft_2_, f0_2, f1_2, up_flow0_3, up_flow1_3) + up_flow0_2 = out2[:, 0:2] + 2.0 * resize(up_flow0_3, scale_factor=2.0) + up_flow1_2 = out2[:, 2:4] + 2.0 * resize(up_flow1_3, scale_factor=2.0) + ft_1_ = out2[:, 4:] + + out1 = self.decoder1(ft_1_, f0_1, f1_1, up_flow0_2, up_flow1_2) + up_flow0_1 = out1[:, 0:2] + 2.0 * resize(up_flow0_2, scale_factor=2.0) + up_flow1_1 = out1[:, 2:4] + 2.0 * resize(up_flow1_2, scale_factor=2.0) + up_mask_1 = torch.sigmoid(out1[:, 4:5]) + up_res_1 = out1[:, 5:] + + up_flow0_1 = resize(up_flow0_1, scale_factor=(1.0 / scale_factor)) * ( + 1.0 / scale_factor + ) + up_flow1_1 = resize(up_flow1_1, scale_factor=(1.0 / scale_factor)) * ( + 1.0 / scale_factor + ) + up_mask_1 = resize(up_mask_1, scale_factor=(1.0 / scale_factor)) + up_res_1 = resize(up_res_1, scale_factor=(1.0 / scale_factor)) + + img0_warp = warp(img0, up_flow0_1) + img1_warp = warp(img1, up_flow1_1) + imgt_merge = up_mask_1 * img0_warp + (1 - up_mask_1) * img1_warp + mean_ + imgt_pred = imgt_merge + up_res_1 + imgt_pred = torch.clamp(imgt_pred, 0, 1) + return imgt_pred[:, :, :h, :w] diff --git a/comfyui-frame-interpolation/vfi_models/ifrnet/__init__.py b/comfyui-frame-interpolation/vfi_models/ifrnet/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..38a9b771f535dbf081c3a2f32af4e8079cb6203b --- /dev/null +++ b/comfyui-frame-interpolation/vfi_models/ifrnet/__init__.py @@ -0,0 +1,57 @@ +import torch +import pathlib +from vfi_utils import load_file_from_github_release, preprocess_frames, postprocess_frames +import typing +from comfy.model_management import get_torch_device +from vfi_utils import generic_frame_loop, InterpolationStateList + +MODEL_TYPE = pathlib.Path(__file__).parent.name +CKPT_NAMES = ["IFRNet_S_Vimeo90K.pth", "IFRNet_L_Vimeo90K.pth", "IFRNet_S_GoPro.pth", "IFRNet_L_GoPro.pth"] + +class IFRNet_VFI: + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "ckpt_name": (CKPT_NAMES, ), + "frames": ("IMAGE", ), + "clear_cache_after_n_frames": ("INT", {"default": 10, "min": 1, "max": 1000}), + "multiplier": ("INT", {"default": 2, "min": 2, "max": 1000}), + "scale_factor": ([0.25, 0.5, 1.0, 2.0, 4.0], {"default": 1.0}), + }, + "optional": { + "optional_interpolation_states": ("INTERPOLATION_STATES", ) + } + } + + RETURN_TYPES = ("IMAGE", ) + FUNCTION = "vfi" + CATEGORY = "ComfyUI-Frame-Interpolation/VFI" + + def vfi( + self, + ckpt_name: typing.AnyStr, + frames: torch.Tensor, + clear_cache_after_n_frames: typing.SupportsInt = 1, + multiplier: typing.SupportsInt = 2, + scale_factor: typing.SupportsFloat = 1.0, + optional_interpolation_states: InterpolationStateList = None, + **kwargs + ): + from .IFRNet_S_arch import IRFNet_S + from .IFRNet_L_arch import IRFNet_L + model_path = load_file_from_github_release(MODEL_TYPE, ckpt_name) + interpolation_model = IRFNet_S() if 'S' in ckpt_name else IRFNet_L() + interpolation_model.load_state_dict(torch.load(model_path)) + interpolation_model.eval().to(get_torch_device()) + frames = preprocess_frames(frames) + + def return_middle_frame(frame_0, frame_1, timestep, model, scale_factor): + return model(frame_0, frame_1, timestep, scale_factor) + + args = [interpolation_model, scale_factor] + out = postprocess_frames( + generic_frame_loop(type(self).__name__, frames, clear_cache_after_n_frames, multiplier, return_middle_frame, *args, + interpolation_states=optional_interpolation_states, dtype=torch.float32) + ) + return (out,) diff --git a/comfyui-frame-interpolation/vfi_models/ifrnet/__pycache__/__init__.cpython-310.pyc b/comfyui-frame-interpolation/vfi_models/ifrnet/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3440a6e3a3408f4c5d63b0f4249990b435b8dcb1 Binary files /dev/null and b/comfyui-frame-interpolation/vfi_models/ifrnet/__pycache__/__init__.cpython-310.pyc differ diff --git a/comfyui-frame-interpolation/vfi_models/ifunet/IFUNet_arch.py b/comfyui-frame-interpolation/vfi_models/ifunet/IFUNet_arch.py new file mode 100644 index 0000000000000000000000000000000000000000..82066132e8fb370d8016afbedb47afed7779c9bb --- /dev/null +++ b/comfyui-frame-interpolation/vfi_models/ifunet/IFUNet_arch.py @@ -0,0 +1,766 @@ +""" +https://github.com/98mxr/IFUNet/blob/main/model/IFUNet.py +https://github.com/98mxr/IFUNet/blob/main/model/cbam.py +https://github.com/98mxr/IFUNet/blob/main/model/warplayer.py +https://github.com/98mxr/IFUNet/blob/5be535c8cff66d6fa1967252685719df4c0620e4/model/RIFE.py +https://github.com/98mxr/IFUNet/blob/main/model/rrdb.py +https://github.com/98mxr/IFUNet/blob/main/model/ResynNet.py +""" +import torch +import torch.nn as nn +import torch.nn.functional as F +from comfy.model_management import get_torch_device + +backwarp_tenGrid = {} +device = get_torch_device() + + +def conv(in_planes, out_planes, kernel_size=3, stride=1, padding=1, dilation=1): + return nn.Sequential( + nn.Conv2d( + in_planes, + out_planes, + kernel_size=kernel_size, + stride=stride, + padding=padding, + dilation=dilation, + bias=True, + ), + nn.PReLU(out_planes), + ) + + +def conv_bn(in_planes, out_planes, kernel_size=3, stride=1, padding=1, dilation=1): + return nn.Sequential( + nn.Conv2d( + in_planes, + out_planes, + kernel_size=kernel_size, + stride=stride, + padding=padding, + dilation=dilation, + bias=False, + ), + nn.BatchNorm2d(out_planes), + nn.PReLU(out_planes), + ) + + +class DegCNN(nn.Module): + def __init__(self): + super(DegCNN, self).__init__() + self.conv0 = conv(3, 32, 3, 2, 1) + self.conv1 = conv(32, 32, 3, 2, 1) + self.conv2 = conv(32, 32, 3, 2, 1) + self.conv3 = conv(32, 32, 3, 2, 1) + self.deconv = nn.Sequential( + nn.Dropout2d(0.95), + nn.ConvTranspose2d(4 * 32, 32, 4, 2, 1), + nn.PReLU(32), + nn.Conv2d(32, 3, 3, 1, 1), + nn.Sigmoid(), + ) + + def forward(self, x): + f0 = self.conv0(x) + f1 = self.conv1(f0) + f2 = self.conv2(f1) + f3 = self.conv3(f2) + f1 = F.interpolate(f1, scale_factor=2.0, mode="bilinear", align_corners=False) + f2 = F.interpolate(f2, scale_factor=4.0, mode="bilinear", align_corners=False) + f3 = F.interpolate(f3, scale_factor=8.0, mode="bilinear", align_corners=False) + return self.deconv(torch.cat((f0, f1, f2, f3), 1)) + + +class FlowBlock(nn.Module): + def __init__(self, in_planes, c=64): + super(FlowBlock, self).__init__() + self.conv0 = nn.Sequential( + conv_bn(in_planes, c // 2, 3, 2, 1), + conv_bn(c // 2, c, 3, 2, 1), + conv_bn(c, 2 * c, 3, 2, 1), + ) + self.convblock = nn.Sequential( + conv_bn(2 * c, 2 * c), + conv_bn(2 * c, 2 * c), + conv_bn(2 * c, 2 * c), + conv_bn(2 * c, 2 * c), + conv_bn(2 * c, 2 * c), + conv_bn(2 * c, 2 * c), + ) + self.lastconv = nn.ConvTranspose2d(2 * c, 4, 4, 2, 1) + + def forward(self, x, flow, scale=1): + x = F.interpolate( + x, scale_factor=1.0 / scale, mode="bilinear", align_corners=False + ) + if flow is not None: + flow = ( + F.interpolate( + flow, scale_factor=1.0 / scale, mode="bilinear", align_corners=False + ) + * 1.0 + / scale + ) + x = torch.cat((x, flow), 1) + feat = self.conv0(x) + feat = self.convblock(feat) + feat + tmp = self.lastconv(feat) + tmp = F.interpolate( + tmp, scale_factor=scale * 4, mode="bilinear", align_corners=False + ) + flow = tmp[:, :2] * scale * 4 + mask = tmp[:, 2:3] + return flow, mask + + +class ResynNet(nn.Module): + def __init__(self): + super(ResynNet, self).__init__() + self.block0 = FlowBlock(6, c=128) + self.block1 = FlowBlock(12, c=128) + self.block2 = FlowBlock(12, c=128) + self.degrad = DegCNN() + # Contextual Refinement context + decode + self.context0 = nn.Sequential( + conv(3, 16, 3, 2, 1), + conv(16, 32, 3, 2, 1), + ) + self.context1 = nn.Sequential( + conv(3, 16, 3, 2, 1), + conv(16, 32, 3, 2, 1), + ) + self.decode = nn.Sequential( + nn.ConvTranspose2d(64, 32, 4, 2, 1), + nn.ConvTranspose2d(32, 3, 4, 2, 1), + nn.Tanh(), + ) + + def calflow(self, img0, lowres, scale): + flow = None + stu = [self.block0, self.block1, self.block2] + for i in range(3): + if flow is not None: + flow_d, mask_d = stu[i]( + torch.cat((img0, lowres, warped_img0, mask), 1), + flow, + scale=scale[i], + ) + flow = flow + flow_d + mask = mask + mask_d + else: + flow, mask = stu[i](torch.cat((img0, lowres), 1), None, scale=scale[i]) + warped_img0 = warp(img0, flow) + flow_down = ( + F.interpolate(flow, scale_factor=0.25, mode="bilinear", align_corners=False) + * 0.25 + ) + c0 = warp(self.context0(img0), flow_down) + c1 = self.context1(warped_img0) + warped_img0 = warped_img0 + self.decode(torch.cat((c0, c1), 1)) + return flow, mask, torch.clamp(warped_img0, 0, 1) + + def forward( + self, x, deg=None, gt=None, scale=[4, 2, 1], training=False, blend=True + ): + if training: + deg = self.degrad(gt) + loss_cons = (gt - deg).abs().mean() + else: + loss_cons = torch.tensor([0]) + img_list = [] + N = x.shape[1] // 3 + for i in range(N): + img_list.append(x[:, i * 3 : i * 3 + 3]) + warped_list = [] + merged = [] + mask_list = [] + flow_list = [] + for i in range(N): + f, m, img = self.calflow(img_list[i], deg.detach(), scale) + mask_list.append(m) + warped_list.append(img) + flow_list.append(f) + if blend: + N += 1 + mask_list.append(m * 0) + warped_list.append(deg) + mask = F.softmax(torch.clamp(torch.cat(mask_list, 1), -4, 4), dim=1) + merged = 0 + for i in range(N): + merged += warped_list[i] * mask[:, i : i + 1] + return merged, loss_cons + + +def make_layer(basic_block, num_basic_block, **kwarg): + """Make layers by stacking the same blocks. + Args: + basic_block (nn.module): nn.module class for basic block. + num_basic_block (int): number of blocks. + Returns: + nn.Sequential: Stacked blocks in nn.Sequential. + """ + layers = [] + for _ in range(num_basic_block): + layers.append(basic_block(**kwarg)) + return nn.Sequential(*layers) + + +class ResidualDenseBlock(nn.Module): + """Residual Dense Block. + + Used in RRDB block in ESRGAN. + + Args: + num_feat (int): Channel number of intermediate features. + num_grow_ch (int): Channels for each growth. + """ + + def __init__(self, num_feat=64, num_grow_ch=32): + super(ResidualDenseBlock, self).__init__() + self.conv1 = nn.Conv2d(num_feat, num_grow_ch, 3, 1, 1) + self.conv2 = nn.Conv2d(num_feat + num_grow_ch, num_grow_ch, 3, 1, 1) + self.conv3 = nn.Conv2d(num_feat + 2 * num_grow_ch, num_grow_ch, 3, 1, 1) + self.conv4 = nn.Conv2d(num_feat + 3 * num_grow_ch, num_grow_ch, 3, 1, 1) + self.conv5 = nn.Conv2d(num_feat + 4 * num_grow_ch, num_feat, 3, 1, 1) + + self.lrelu = nn.LeakyReLU(negative_slope=0.2, inplace=True) + + # initialization + # default_init_weights([self.conv1, self.conv2, self.conv3, self.conv4, self.conv5], 0.1) + # 只能先取消,default_init_weights来自basicsr.arch_util + + def forward(self, x): + x1 = self.lrelu(self.conv1(x)) + x2 = self.lrelu(self.conv2(torch.cat((x, x1), 1))) + x3 = self.lrelu(self.conv3(torch.cat((x, x1, x2), 1))) + x4 = self.lrelu(self.conv4(torch.cat((x, x1, x2, x3), 1))) + x5 = self.conv5(torch.cat((x, x1, x2, x3, x4), 1)) + # Emperically, we use 0.2 to scale the residual for better performance + # 原作者这么说我就这么听着吧 + return x5 * 0.2 + x + + +class RRDB(nn.Module): + """Residual in Residual Dense Block. + + Used in RRDB-Net in ESRGAN. + + Args: + num_feat (int): Channel number of intermediate features. + num_grow_ch (int): Channels for each growth. + """ + + def __init__(self, num_feat, num_grow_ch=32): + super(RRDB, self).__init__() + self.rdb1 = ResidualDenseBlock(num_feat, num_grow_ch) + self.rdb2 = ResidualDenseBlock(num_feat, num_grow_ch) + self.rdb3 = ResidualDenseBlock(num_feat, num_grow_ch) + + def forward(self, x): + out = self.rdb1(x) + out = self.rdb2(out) + out = self.rdb3(out) + # Emperically, we use 0.2 to scale the residual for better performance + # 原作者这么说我就这么听着吧 + return out * 0.2 + x + + +class RRDBNet(nn.Module): + """Networks consisting of Residual in Residual Dense Block, which is used + in ESRGAN. + + ESRGAN: Enhanced Super-Resolution Generative Adversarial Networks. + + We extend ESRGAN for scale x2 and scale x1. + Note: This is one option for scale 1, scale 2 in RRDBNet. + We first employ the pixel-unshuffle (an inverse operation of pixelshuffle to reduce the spatial size + and enlarge the channel size before feeding inputs into the main ESRGAN architecture. + + Args: + num_in_ch (int): Channel number of inputs. + num_out_ch (int): Channel number of outputs. + num_feat (int): Channel number of intermediate features. + Default: 64 + num_block (int): Block number in the trunk network. Defaults: 23 + num_grow_ch (int): Channels for each growth. Default: 32. + """ + + def __init__( + self, num_in_ch=16, num_out_ch=1, num_feat=64, num_block=6, num_grow_ch=32 + ): + super(RRDBNet, self).__init__() + self.conv_first = nn.Conv2d(num_in_ch, num_feat, 3, 1, 1) + self.body = make_layer( + RRDB, num_block, num_feat=num_feat, num_grow_ch=num_grow_ch + ) + self.conv_body = nn.Conv2d(num_feat, num_feat, 3, 1, 1) + # upsample + self.conv_up1 = nn.Conv2d(num_feat, num_feat, 3, 1, 1) + self.conv_up2 = nn.Conv2d(num_feat, num_feat, 3, 1, 1) + self.conv_hr = nn.Conv2d(num_feat, num_feat, 3, 1, 1) + self.conv_last = nn.Conv2d(num_feat, num_out_ch, 3, 1, 1) + + self.lrelu = nn.LeakyReLU(negative_slope=0.2, inplace=True) + + def forward(self, img0, img1, warped_img0, warped_img1, flow): + x = torch.cat((img0, img1, warped_img0, warped_img1), 1) + x = F.interpolate(x, scale_factor=0.25, mode="bilinear", align_corners=False) + flow = ( + F.interpolate(flow, scale_factor=0.25, mode="bilinear", align_corners=False) + * 0.25 + ) + feat = torch.cat((x, flow), 1) + + feat = self.conv_first(feat) + body_feat = self.conv_body(self.body(feat)) + feat = feat + body_feat + # upsample,充分利用四倍放大 + feat = self.lrelu( + self.conv_up1(F.interpolate(feat, scale_factor=2.0, mode="nearest")) + ) + feat = self.lrelu( + self.conv_up2(F.interpolate(feat, scale_factor=2.0, mode="nearest")) + ) + out = self.conv_last(self.lrelu(self.conv_hr(feat))) + + out = torch.sigmoid(out) + return out + + +def warp(tenInput, tenFlow): + k = (str(tenFlow.device), str(tenFlow.size())) + if k not in backwarp_tenGrid: + tenHorizontal = ( + torch.linspace(-1.0, 1.0, tenFlow.shape[3], device=device) + .view(1, 1, 1, tenFlow.shape[3]) + .expand(tenFlow.shape[0], -1, tenFlow.shape[2], -1) + ) + tenVertical = ( + torch.linspace(-1.0, 1.0, tenFlow.shape[2], device=device) + .view(1, 1, tenFlow.shape[2], 1) + .expand(tenFlow.shape[0], -1, -1, tenFlow.shape[3]) + ) + backwarp_tenGrid[k] = torch.cat([tenHorizontal, tenVertical], 1).to(device) + + tenFlow = torch.cat( + [ + tenFlow[:, 0:1, :, :] / ((tenInput.shape[3] - 1.0) / 2.0), + tenFlow[:, 1:2, :, :] / ((tenInput.shape[2] - 1.0) / 2.0), + ], + 1, + ) + + g = (backwarp_tenGrid[k] + tenFlow).permute(0, 2, 3, 1) + return torch.nn.functional.grid_sample( + input=tenInput, + grid=g, + mode="bilinear", + padding_mode="border", + align_corners=True, + ) + + +class BasicConv(nn.Module): + def __init__( + self, + in_planes, + out_planes, + kernel_size, + stride=1, + padding=0, + dilation=1, + groups=1, + relu=True, + bn=True, + bias=False, + ): + super(BasicConv, self).__init__() + self.out_channels = out_planes + self.conv = nn.Conv2d( + in_planes, + out_planes, + kernel_size=kernel_size, + stride=stride, + padding=padding, + dilation=dilation, + groups=groups, + bias=bias, + ) + self.bn = ( + nn.BatchNorm2d(out_planes, eps=1e-5, momentum=0.01, affine=True) + if bn + else None + ) + self.relu = nn.ReLU() if relu else None + + def forward(self, x): + x = self.conv(x) + if self.bn is not None: + x = self.bn(x) + if self.relu is not None: + x = self.relu(x) + return x + + +class Flatten(nn.Module): + def forward(self, x): + return x.view(x.size(0), -1) + + +class ChannelGate(nn.Module): + def __init__(self, gate_channels, reduction_ratio=16, pool_types=["avg", "max"]): + super(ChannelGate, self).__init__() + self.gate_channels = gate_channels + self.mlp = nn.Sequential( + Flatten(), + nn.Linear(gate_channels, gate_channels // reduction_ratio), + nn.ReLU(), + nn.Linear(gate_channels // reduction_ratio, gate_channels), + ) + self.pool_types = pool_types + + def forward(self, x): + channel_att_sum = None + for pool_type in self.pool_types: + if pool_type == "avg": + avg_pool = F.avg_pool2d( + x, (x.size(2), x.size(3)), stride=(x.size(2), x.size(3)) + ) + channel_att_raw = self.mlp(avg_pool) + elif pool_type == "max": + max_pool = F.max_pool2d( + x, (x.size(2), x.size(3)), stride=(x.size(2), x.size(3)) + ) + channel_att_raw = self.mlp(max_pool) + elif pool_type == "lp": + lp_pool = F.lp_pool2d( + x, 2, (x.size(2), x.size(3)), stride=(x.size(2), x.size(3)) + ) + channel_att_raw = self.mlp(lp_pool) + elif pool_type == "lse": + # LSE pool only + lse_pool = logsumexp_2d(x) + channel_att_raw = self.mlp(lse_pool) + + if channel_att_sum is None: + channel_att_sum = channel_att_raw + else: + channel_att_sum = channel_att_sum + channel_att_raw + + scale = F.sigmoid(channel_att_sum).unsqueeze(2).unsqueeze(3).expand_as(x) + return x * scale + + +def logsumexp_2d(tensor): + tensor_flatten = tensor.view(tensor.size(0), tensor.size(1), -1) + s, _ = torch.max(tensor_flatten, dim=2, keepdim=True) + outputs = s + (tensor_flatten - s).exp().sum(dim=2, keepdim=True).log() + return outputs + + +class ChannelPool(nn.Module): + def forward(self, x): + return torch.cat( + (torch.max(x, 1)[0].unsqueeze(1), torch.mean(x, 1).unsqueeze(1)), dim=1 + ) + + +class SpatialGate(nn.Module): + def __init__(self): + super(SpatialGate, self).__init__() + kernel_size = 7 + self.compress = ChannelPool() + self.spatial = BasicConv( + 2, 1, kernel_size, stride=1, padding=(kernel_size - 1) // 2, relu=False + ) + + def forward(self, x): + x_compress = self.compress(x) + x_out = self.spatial(x_compress) + scale = F.sigmoid(x_out) # broadcasting + return x * scale + + +class CBAM(nn.Module): + def __init__( + self, + gate_channels, + reduction_ratio=16, + pool_types=["avg", "max"], + no_spatial=False, + ): + super(CBAM, self).__init__() + self.ChannelGate = ChannelGate(gate_channels, reduction_ratio, pool_types) + self.no_spatial = no_spatial + if not no_spatial: + self.SpatialGate = SpatialGate() + + def forward(self, x): + x_out = self.ChannelGate(x) + if not self.no_spatial: + x_out = self.SpatialGate(x_out) + return x_out + + +def conv(in_planes, out_planes, kernel_size=3, stride=1, padding=1, dilation=1): + return nn.Sequential( + nn.Conv2d( + in_planes, + out_planes, + kernel_size=kernel_size, + stride=stride, + padding=padding, + dilation=dilation, + bias=True, + ), + nn.PReLU(out_planes), + ) + + +class UNetConv(nn.Module): + def __init__(self, in_planes, out_planes, att=True): + super(UNetConv, self).__init__() + self.conv1 = conv(in_planes, out_planes, 3, 2, 1) + self.conv2 = conv(out_planes, out_planes, 3, 1, 1) + + if att: + self.cbam = CBAM(out_planes, 16) # 这一步导致了通道数最低为128 + else: + self.cbam = None + + def forward(self, x): + x = self.conv1(x) + x = self.conv2(x) + if self.cbam is not None: + x = self.cbam(x) + return x + + +class UpConv(nn.Module): + def __init__(self, in_planes, out_planes, att=True): + super(UpConv, self).__init__() + self.deconv = nn.Sequential( + nn.ConvTranspose2d(in_planes, in_planes // 2, 4, 2, 1), + nn.PReLU(in_planes // 2), + ) + + # 也许不需要这么卷积,我不确定 + self.conv1 = conv(in_planes, in_planes // 2, 3, 1, 1) + self.conv2 = conv(in_planes // 2, out_planes, 3, 1, 1) + + if att: + self.cbam = CBAM(out_planes, 16) + else: + self.cbam = None + + def forward(self, x1, x2): + x1 = self.deconv(x1) + y = self.conv1(torch.cat((x1, x2), 1)) + y = self.conv2(y) + if self.cbam is not None: + y = self.cbam(y) + return y + + +class FeatureNet(nn.Module): + def __init__(self, in_planes, out_planes): + super(FeatureNet, self).__init__() + # 处理IFBlock0时通道数问题 + self.conv0 = conv(7, in_planes, 1, 1, 0) + + self.conv1 = UNetConv(in_planes, out_planes // 8, att=False) + self.conv2 = UNetConv(out_planes // 8, out_planes // 4, att=True) + self.conv3 = UNetConv(out_planes // 4, out_planes // 2, att=True) + self.conv4 = UNetConv(out_planes // 2, out_planes, att=True) + self.conv5 = UNetConv(out_planes, 2 * out_planes, att=True) + + self.deconv5 = UpConv(2 * out_planes, out_planes, att=True) + self.deconv4 = UpConv(out_planes, out_planes // 2, att=False) + self.deconv3 = UpConv(out_planes // 2, out_planes // 4, att=False) + + def forward(self, x, level=0): + if x.shape[1] != 17: + x = self.conv0(x) + x2 = self.conv1(x) + x4 = self.conv2(x2) + x8 = self.conv3(x4) + x16 = self.conv4(x8) + x32 = self.conv5(x16) + y = self.deconv5(x32, x16) # 匹配IFBlock0通道和尺寸 + + # “早退机制”以期待用同一个UNet提取特征,不确定是否对训练产生影响 + if level != 0: + y = self.deconv4(y, x8) # 匹配IFBlock1通道和尺寸 + if level == 2: + y = self.deconv3(y, x4) # 匹配IFBlock2通道和尺寸 + return y + + +class IFBlock(nn.Module): + def __init__(self, c=64, level=0): + super(IFBlock, self).__init__() + self.convblock = nn.Sequential( + conv(c, c), + conv(c, c), + conv(c, c), + conv(c, c), + conv(c, c), + conv(c, c), + ) + self.flowconv = nn.Conv2d(c, 4, 3, 1, 1) + self.maskconvx16 = nn.Conv2d(c, 16 * 16 * 9, 1, 1, 0) + self.maskconvx8 = nn.Conv2d(c, 8 * 8 * 9, 1, 1, 0) + self.maskconvx4 = nn.Conv2d(c, 4 * 4 * 9, 1, 1, 0) + + self.level = level + assert self.level in [4, 8, 16], "Bitch" + + def mask_conv(self, x): + if self.level == 4: + return self.maskconvx4(x) + if self.level == 8: + return self.maskconvx8(x) + if self.level == 16: + return self.maskconvx16(x) + + def upsample_flow(self, flow, mask): + # 俺寻思俺懂了 + N, _, H, W = flow.shape + mask = mask.view(N, 1, 9, self.level, self.level, H, W) + mask = torch.softmax(mask, dim=2) + + up_flow = F.unfold(self.level * flow, [3, 3], padding=1) + up_flow = up_flow.view(N, 4, 9, 1, 1, H, W) + + up_flow = torch.sum(mask * up_flow, dim=2) + up_flow = up_flow.permute(0, 1, 4, 2, 5, 3) + return up_flow.reshape(N, 4, self.level * H, self.level * W) + + def forward(self, x, scale): + x = self.convblock(x) + x # 类似ResNet的f(x) + x + tmp = self.flowconv(x) + up_mask = self.mask_conv(x) + flow_up = self.upsample_flow(tmp, up_mask) + flow = ( + F.interpolate( + flow_up, scale_factor=scale, mode="bilinear", align_corners=False + ) + * scale + ) + return flow + + +class IFUNet(nn.Module): + def __init__(self): + super(IFUNet, self).__init__() + # block0通道数必须为128的整倍数 + self.fmap = FeatureNet(in_planes=17, out_planes=256) + self.block0 = IFBlock(c=256, level=16) + self.block1 = IFBlock(c=128, level=8) + self.block2 = IFBlock(c=64, level=4) + + def forward(self, x, scale=1.0, timestep=0.5, ensemble=True): + channel = x.shape[1] // 2 + img0 = x[:, :channel] + img1 = x[:, channel:] + if not torch.is_tensor(timestep): + timestep = (x[:, :1].clone() * 0 + 1) * timestep + else: + timestep = timestep.repeat(1, 1, img0.shape[2], img0.shape[3]) + warped_img0 = img0 + warped_img1 = img1 + flow = None + block = [self.block0, self.block1, self.block2] + for i in range(3): + if flow != None: + x = torch.cat((img0, img1, timestep, warped_img0, warped_img1), 1) + flowtmp = flow + if scale != 1: + x = F.interpolate( + x, scale_factor=scale, mode="bilinear", align_corners=False + ) + flowtmp = ( + F.interpolate( + flow, + scale_factor=scale, + mode="bilinear", + align_corners=False, + ) + * scale + ) + x = torch.cat((x, flowtmp), 1) + # 期待UNet能提取到特征,不再需要ensemble + Fmap = self.fmap(x, level=i) + flow_d = block[i](Fmap, scale=1.0 / scale) + flow = flow + flow_d + + if ensemble: + x = torch.cat( + (img1, img0, 1 - timestep, warped_img0, warped_img1), 1 + ) + flowtmp = flow + if scale != 1: + x = F.interpolate( + x, scale_factor=scale, mode="bilinear", align_corners=False + ) + flowtmp = ( + F.interpolate( + flow, + scale_factor=scale, + mode="bilinear", + align_corners=False, + ) + * scale + ) + x = torch.cat((x, flowtmp), 1) + # 期待UNet能提取到特征,不再需要ensemble + Fmap = self.fmap(x, level=i) + flow_d = block[i](Fmap, scale=1.0 / scale) + flow2 = flow + flow_d + flow = (flow + flow2) / 2 + else: + x = torch.cat((img0, img1, timestep), 1) + if scale != 1: + x = F.interpolate( + x, scale_factor=scale, mode="bilinear", align_corners=False + ) + Fmap = self.fmap(x, level=i) + flow = block[i](Fmap, scale=1.0 / scale) + + if ensemble: + x = torch.cat((img1, img0, 1 - timestep), 1) + if scale != 1: + x = F.interpolate( + x, scale_factor=scale, mode="bilinear", align_corners=False + ) + Fmap = self.fmap(x, level=i) + flow2 = block[i](Fmap, scale=1.0 / scale) + flow = (flow + flow2) / 2 + + warped_img0 = warp(img0, flow[:, :2]) + warped_img1 = warp(img1, flow[:, 2:4]) + return flow, warped_img0, warped_img1 + + +class IFUNetModel(nn.Module): + def __init__(self, local_rank=-1): + super(IFUNetModel, self).__init__() + self.flownet = IFUNet() + self.fusionnet = RRDBNet() + self.refinenet = ResynNet() + + def forward(self, img0, img1, timestep=0.5, scale=1.0, ensemble=False): + n, c, h, w = img0.shape + ph = ((h - 1) // 64 + 1) * 64 + pw = ((w - 1) // 64 + 1) * 64 + padding = (0, pw - w, 0, ph - h) + img0 = F.pad(img0, padding) + img1 = F.pad(img1, padding) + + imgs = torch.cat((img0, img1), 1) + flow, warped_img0, warped_img1 = self.flownet(imgs, scale, timestep, ensemble) + mask = self.fusionnet(img0, img1, warped_img0, warped_img1, flow) + merged = warped_img0 * mask + warped_img1 * (1 - mask) + merged, _ = self.refinenet(imgs, deg=merged, scale=[4, 2, 1]) + return merged[:, :, :h, :w] diff --git a/comfyui-frame-interpolation/vfi_models/ifunet/__init__.py b/comfyui-frame-interpolation/vfi_models/ifunet/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..bec98675f6cc459a026a0837c90915016c058d79 --- /dev/null +++ b/comfyui-frame-interpolation/vfi_models/ifunet/__init__.py @@ -0,0 +1,59 @@ +import torch +from torch.utils.data import DataLoader +import pathlib +from vfi_utils import load_file_from_github_release, preprocess_frames, postprocess_frames, generic_frame_loop, InterpolationStateList +import typing +from comfy.model_management import get_torch_device + +MODEL_TYPE = pathlib.Path(__file__).parent.name +CKPT_NAMES = ["IFUNet.pth"] + +class IFUnet_VFI: + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "ckpt_name": (CKPT_NAMES, ), + "frames": ("IMAGE", ), + "clear_cache_after_n_frames": ("INT", {"default": 10, "min": 1, "max": 1000}), + "multiplier": ("INT", {"default": 2, "min": 2, "max": 1000}), + "scale_factor": ("FLOAT", {"default": 1.0, "min": 0.1, "max": 100, "step": 0.1}), + "ensemble": ("BOOLEAN", {"default":True}) + }, + "optional": { + "optional_interpolation_states": ("INTERPOLATION_STATES", ) + } + } + + RETURN_TYPES = ("IMAGE", ) + FUNCTION = "vfi" + CATEGORY = "ComfyUI-Frame-Interpolation/VFI" + + def vfi( + self, + ckpt_name: typing.AnyStr, + frames: torch.Tensor, + clear_cache_after_n_frames: typing.SupportsInt = 1, + multiplier: typing.SupportsInt = 2, + scale_factor: typing.SupportsFloat = 1.0, + ensemble: bool = True, + optional_interpolation_states: InterpolationStateList = None, + **kwargs + ): + from .IFUNet_arch import IFUNetModel + model_path = load_file_from_github_release(MODEL_TYPE, ckpt_name) + interpolation_model = IFUNetModel() + interpolation_model.load_state_dict(torch.load(model_path)) + interpolation_model.eval().to(get_torch_device()) + frames = preprocess_frames(frames) + + def return_middle_frame(frame_0, frame_1, timestep, model, scale_factor, ensemble): + return model(frame_0, frame_1, timestep=timestep, scale=scale_factor, ensemble=ensemble) + + args = [interpolation_model, scale_factor, ensemble] + out = postprocess_frames( + generic_frame_loop(type(self).__name__, frames, clear_cache_after_n_frames, multiplier, return_middle_frame, *args, + interpolation_states=optional_interpolation_states, dtype=torch.float32) + ) + return (out,) + diff --git a/comfyui-frame-interpolation/vfi_models/ifunet/__pycache__/__init__.cpython-310.pyc b/comfyui-frame-interpolation/vfi_models/ifunet/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b772a792cbc713890a952e3df64b4ddff8b4bf8e Binary files /dev/null and b/comfyui-frame-interpolation/vfi_models/ifunet/__pycache__/__init__.cpython-310.pyc differ diff --git a/comfyui-frame-interpolation/vfi_models/m2m/M2M_arch.py b/comfyui-frame-interpolation/vfi_models/m2m/M2M_arch.py new file mode 100644 index 0000000000000000000000000000000000000000..536f915efa4678bd55884852ad6e3ea386fd3ffe --- /dev/null +++ b/comfyui-frame-interpolation/vfi_models/m2m/M2M_arch.py @@ -0,0 +1,1037 @@ +""" +https://github.com/feinanshan/M2M_VFI/blob/main/Test/model/py +https://raw.githubusercontent.com/feinanshan/M2M_VFI/main/Test/model/py +https://github.com/feinanshan/M2M_VFI/blob/main/Test/model/py +https://github.com/feinanshan/M2M_VFI/blob/main/Test/model/py +https://github.com/feinanshan/M2M_VFI/blob/main/Test/model/m2m.py +""" + +import collections +import math +import os +import re +import torch +import typing +from vfi_models.ops import softsplat_func +from vfi_models.ops import costvol_func + +########################################################## + + +objBackwarpcache = {} + + +def backwarp(tenIn: torch.Tensor, tenFlow: torch.Tensor): + if ( + "grid" + + str(tenFlow.dtype) + + str(tenFlow.device) + + str(tenFlow.shape[2]) + + str(tenFlow.shape[3]) + not in objBackwarpcache + ): + tenHor = ( + torch.linspace( + start=-1.0, + end=1.0, + steps=tenFlow.shape[3], + dtype=tenFlow.dtype, + device=tenFlow.device, + ) + .view(1, 1, 1, -1) + .repeat(1, 1, tenFlow.shape[2], 1) + ) + tenVer = ( + torch.linspace( + start=-1.0, + end=1.0, + steps=tenFlow.shape[2], + dtype=tenFlow.dtype, + device=tenFlow.device, + ) + .view(1, 1, -1, 1) + .repeat(1, 1, 1, tenFlow.shape[3]) + ) + + objBackwarpcache[ + "grid" + + str(tenFlow.dtype) + + str(tenFlow.device) + + str(tenFlow.shape[2]) + + str(tenFlow.shape[3]) + ] = torch.cat([tenHor, tenVer], 1) + # end + + if tenFlow.shape[3] == tenFlow.shape[2]: + tenFlow = tenFlow * (2.0 / ((tenFlow.shape[3] and tenFlow.shape[2]) - 1.0)) + + elif tenFlow.shape[3] != tenFlow.shape[2]: + tenFlow = tenFlow * torch.tensor( + data=[2.0 / (tenFlow.shape[3] - 1.0), 2.0 / (tenFlow.shape[2] - 1.0)], + dtype=tenFlow.dtype, + device=tenFlow.device, + ).view(1, 2, 1, 1) + + # end + + return torch.nn.functional.grid_sample( + input=tenIn, + grid=( + objBackwarpcache[ + "grid" + + str(tenFlow.dtype) + + str(tenFlow.device) + + str(tenFlow.shape[2]) + + str(tenFlow.shape[3]) + ] + + tenFlow + ).permute(0, 2, 3, 1), + mode="bilinear", + padding_mode="zeros", + align_corners=True, + ) + + +# end + +########################################################## + + +class Basic(torch.nn.Module): + def __init__( + self, + strType: str, + intChans: typing.List[int], + objScratch: typing.Optional[typing.Dict] = None, + ): + super().__init__() + + self.strType = strType + self.netEvenize = None + self.netMain = None + self.netShortcut = None + + intIn = intChans[0] + intOut = intChans[-1] + netMain = [] + intChans = intChans.copy() + fltStride = 1.0 + + for intPart, strPart in enumerate(self.strType.split("+")[0].split("-")): + if strPart.startswith("evenize") == True and intPart == 0: + + class Evenize(torch.nn.Module): + def __init__(self, strPad): + super().__init__() + + self.strPad = strPad + + # end + + def forward(self, tenIn: torch.Tensor) -> torch.Tensor: + intPad = [0, 0, 0, 0] + + if tenIn.shape[3] % 2 != 0: + intPad[1] = 1 + if tenIn.shape[2] % 2 != 0: + intPad[3] = 1 + + if min(intPad) != 0 or max(intPad) != 0: + tenIn = torch.nn.functional.pad( + input=tenIn, + pad=intPad, + mode=self.strPad + if self.strPad != "zeros" + else "constant", + value=0.0, + ) + # end + + return tenIn + + # end + + # end + + strPad = "zeros" + + if "(" in strPart: + if "replpad" in strPart.split("(")[1].split(")")[0].split(","): + strPad = "replicate" + if "reflpad" in strPart.split("(")[1].split(")")[0].split(","): + strPad = "reflect" + # end + + self.netEvenize = Evenize(strPad) + + elif strPart.startswith("conv") == True: + intKsize = 3 + intPad = 1 + strPad = "zeros" + + if "(" in strPart: + intKsize = int(strPart.split("(")[1].split(")")[0].split(",")[0]) + intPad = int(math.floor(0.5 * (intKsize - 1))) + + if "replpad" in strPart.split("(")[1].split(")")[0].split(","): + strPad = "replicate" + if "reflpad" in strPart.split("(")[1].split(")")[0].split(","): + strPad = "reflect" + # end + + if "nopad" in self.strType.split("+"): + intPad = 0 + # end + + netMain += [ + torch.nn.Conv2d( + in_channels=intChans[0], + out_channels=intChans[1], + kernel_size=intKsize, + stride=1, + padding=intPad, + padding_mode=strPad, + bias="nobias" not in self.strType.split("+"), + ) + ] + intChans = intChans[1:] + fltStride *= 1.0 + + elif strPart.startswith("sconv") == True: + intKsize = 3 + intPad = 1 + strPad = "zeros" + + if "(" in strPart: + intKsize = int(strPart.split("(")[1].split(")")[0].split(",")[0]) + intPad = int(math.floor(0.5 * (intKsize - 1))) + + if "replpad" in strPart.split("(")[1].split(")")[0].split(","): + strPad = "replicate" + if "reflpad" in strPart.split("(")[1].split(")")[0].split(","): + strPad = "reflect" + # end + + if "nopad" in self.strType.split("+"): + intPad = 0 + # end + + netMain += [ + torch.nn.Conv2d( + in_channels=intChans[0], + out_channels=intChans[1], + kernel_size=intKsize, + stride=2, + padding=intPad, + padding_mode=strPad, + bias="nobias" not in self.strType.split("+"), + ) + ] + intChans = intChans[1:] + fltStride *= 2.0 + + elif strPart.startswith("up") == True: + + class Up(torch.nn.Module): + def __init__(self, strType): + super().__init__() + + self.strType = strType + + # end + + def forward(self, tenIn: torch.Tensor) -> torch.Tensor: + if self.strType == "nearest": + return torch.nn.functional.interpolate( + input=tenIn, + scale_factor=2.0, + mode="nearest-exact", + align_corners=False, + ) + + elif self.strType == "bilinear": + return torch.nn.functional.interpolate( + input=tenIn, + scale_factor=2.0, + mode="bilinear", + align_corners=False, + ) + + elif self.strType == "pyramid": + return pyramid(tenIn, None, "up") + + elif self.strType == "shuffle": + return torch.nn.functional.pixel_shuffle( + tenIn, upscale_factor=2 + ) # https://github.com/pytorch/pytorch/issues/62854 + + # end + + assert False # to make torchscript happy + + # end + + # end + + strType = "bilinear" + + if "(" in strPart: + if "nearest" in strPart.split("(")[1].split(")")[0].split(","): + strType = "nearest" + if "pyramid" in strPart.split("(")[1].split(")")[0].split(","): + strType = "pyramid" + if "shuffle" in strPart.split("(")[1].split(")")[0].split(","): + strType = "shuffle" + # end + + netMain += [Up(strType)] + fltStride *= 0.5 + + elif strPart.startswith("prelu") == True: + netMain += [ + torch.nn.PReLU( + num_parameters=1, + init=float(strPart.split("(")[1].split(")")[0].split(",")[0]), + ) + ] + fltStride *= 1.0 + + elif True: + assert False + + # end + # end + + self.netMain = torch.nn.Sequential(*netMain) + + for strPart in self.strType.split("+")[1:]: + if strPart.startswith("skip") == True: + if intIn == intOut and fltStride == 1.0: + self.netShortcut = torch.nn.Identity() + + elif intIn != intOut and fltStride == 1.0: + self.netShortcut = torch.nn.Conv2d( + in_channels=intIn, + out_channels=intOut, + kernel_size=1, + stride=1, + padding=0, + bias="nobias" not in self.strType.split("+"), + ) + + elif intIn == intOut and fltStride != 1.0: + + class Down(torch.nn.Module): + def __init__(self, fltScale): + super().__init__() + + self.fltScale = fltScale + + # end + + def forward(self, tenIn: torch.Tensor) -> torch.Tensor: + return torch.nn.functional.interpolate( + input=tenIn, + scale_factor=self.fltScale, + mode="bilinear", + align_corners=False, + ) + + # end + + # end + + self.netShortcut = Down(1.0 / fltStride) + + elif intIn != intOut and fltStride != 1.0: + + class Down(torch.nn.Module): + def __init__(self, fltScale): + super().__init__() + + self.fltScale = fltScale + + # end + + def forward(self, tenIn: torch.Tensor) -> torch.Tensor: + return torch.nn.functional.interpolate( + input=tenIn, + scale_factor=self.fltScale, + mode="bilinear", + align_corners=False, + ) + + # end + + # end + + self.netShortcut = torch.nn.Sequential( + Down(1.0 / fltStride), + torch.nn.Conv2d( + in_channels=intIn, + out_channels=intOut, + kernel_size=1, + stride=1, + padding=0, + bias="nobias" not in self.strType.split("+"), + ), + ) + + # end + + elif strPart.startswith("...") == True: + pass + + # end + # end + + assert len(intChans) == 1 + + # end + + def forward(self, tenIn: torch.Tensor) -> torch.Tensor: + if self.netEvenize is not None: + tenIn = self.netEvenize(tenIn) + # end + + tenOut = self.netMain(tenIn) + + if self.netShortcut is not None: + tenOut = tenOut + self.netShortcut(tenIn) + # end + + return tenOut + + # end + + +# end + + +########################################################## + + +class Network(torch.nn.Module): + def __init__(self): + super().__init__() + + class Extractor(torch.nn.Module): + def __init__(self): + super().__init__() + + self.netOne = Basic( + "evenize(replpad)-sconv(2)-prelu(0.25)-conv(3,replpad)-prelu(0.25)-conv(3,replpad)-prelu(0.25)", + [3, 32, 32, 32], + None, + ) + self.netTwo = Basic( + "evenize(replpad)-sconv(2)-prelu(0.25)-conv(3,replpad)-prelu(0.25)-conv(3,replpad)-prelu(0.25)", + [32, 32, 32, 32], + None, + ) + self.netThr = Basic( + "evenize(replpad)-sconv(2)-prelu(0.25)-conv(3,replpad)-prelu(0.25)-conv(3,replpad)-prelu(0.25)", + [32, 32, 32, 32], + None, + ) + + # end + + def forward(self, tenIn): + tenOne = self.netOne(tenIn) + tenTwo = self.netTwo(tenOne) + tenThr = self.netThr(tenTwo) + tenFou = torch.nn.functional.avg_pool2d( + input=tenThr, kernel_size=2, stride=2, count_include_pad=False + ) + tenFiv = torch.nn.functional.avg_pool2d( + input=tenFou, kernel_size=2, stride=2, count_include_pad=False + ) + + return [tenOne, tenTwo, tenThr, tenFou, tenFiv] + + # end + + # end + + class Decoder(torch.nn.Module): + def __init__(self, intChannels): + super().__init__() + + self.netCostacti = torch.nn.PReLU(num_parameters=1, init=0.25) + self.netMain = Basic( + "conv(3,replpad)-prelu(0.25)-conv(3,replpad)-prelu(0.25)-conv(3,replpad)-prelu(0.25)-conv(3,replpad)-prelu(0.25)-conv(3,replpad)-prelu(0.25)-conv(3,replpad)", + [intChannels, 128, 128, 96, 64, 32, 2], + None, + ) + + # end + + def forward(self, tenOne, tenTwo, tenFlow): + if tenFlow is not None: + tenFlow = 2.0 * torch.nn.functional.interpolate( + input=tenFlow, + scale_factor=2.0, + mode="bilinear", + align_corners=False, + ) + # end + + tenMain = [] + + if tenFlow is None: + tenMain.append(tenOne) + tenMain.append(self.netCostacti(costvol_func.apply(tenOne, tenTwo))) + + elif tenFlow is not None: + tenMain.append(tenOne) + tenMain.append( + self.netCostacti( + costvol_func.apply( + tenOne, backwarp(tenTwo, tenFlow.detach()) + ) + ) + ) + tenMain.append(tenFlow) + + # end + + return (tenFlow if tenFlow is not None else 0.0) + self.netMain( + torch.cat(tenMain, 1) + ) + + # end + + # end + + self.netExtractor = Extractor() + + self.netFiv = Decoder(32 + 81 + 0) + self.netFou = Decoder(32 + 81 + 2) + self.netThr = Decoder(32 + 81 + 2) + self.netTwo = Decoder(32 + 81 + 2) + self.netOne = Decoder(32 + 81 + 2) + + # end + + def bidir(self, tenOne, tenTwo): + tenOne, tenTwo = list( + zip( + *[ + torch.split(tenFeat, [tenOne.shape[0], tenTwo.shape[0]], 0) + for tenFeat in self.netExtractor(torch.cat([tenOne, tenTwo], 0)) + ] + ) + ) + + tenFwd = None + tenFwd = self.netFiv(tenOne[-1], tenTwo[-1], tenFwd) + tenFwd = self.netFou(tenOne[-2], tenTwo[-2], tenFwd) + tenFwd = self.netThr(tenOne[-3], tenTwo[-3], tenFwd) + tenFwd = self.netTwo(tenOne[-4], tenTwo[-4], tenFwd) + tenFwd = self.netOne(tenOne[-5], tenTwo[-5], tenFwd) + + tenBwd = None + tenBwd = self.netFiv(tenTwo[-1], tenOne[-1], tenBwd) + tenBwd = self.netFou(tenTwo[-2], tenOne[-2], tenBwd) + tenBwd = self.netThr(tenTwo[-3], tenOne[-3], tenBwd) + tenBwd = self.netTwo(tenTwo[-4], tenOne[-4], tenBwd) + tenBwd = self.netOne(tenTwo[-5], tenOne[-5], tenBwd) + + return tenFwd, tenBwd + + # end + + +# end + +########################################################## + + +def forwarp_mframe_mask( + tenIn1, tenFlow1, t1, tenIn2, tenFlow2, t2, tenMetric1=None, tenMetric2=None +): + def one_fdir(tenIn, tenFlow, td, tenMetric): + tenIn = torch.cat( + [ + tenIn * td * (tenMetric).clip(-20.0, 20.0).exp(), + td * (tenMetric).clip(-20.0, 20.0).exp(), + ], + 1, + ) + + tenOut = softsplat_func.apply(tenIn, tenFlow) + + return tenOut[:, :-1, :, :], tenOut[:, -1:, :, :] + 0.0000001 + + flow_num = tenFlow1.shape[0] + tenOut = 0 + tenNormalize = 0 + for idx in range(flow_num): + tenOutF, tenNormalizeF = one_fdir( + tenIn1[idx], tenFlow1[idx], t1[idx], tenMetric1[idx] + ) + tenOutB, tenNormalizeB = one_fdir( + tenIn2[idx], tenFlow2[idx], t2[idx], tenMetric2[idx] + ) + + tenOut += tenOutF + tenOutB + tenNormalize += tenNormalizeF + tenNormalizeB + + return tenOut / tenNormalize, tenNormalize < 0.00001 + + +################################################################### + +c = 16 + + +def conv(in_planes, out_planes, kernel_size=3, stride=1, padding=1, dilation=1): + return torch.nn.Sequential( + torch.nn.Conv2d( + in_planes, + out_planes, + kernel_size=kernel_size, + stride=stride, + padding=padding, + dilation=dilation, + bias=True, + ), + torch.nn.PReLU(out_planes), + ) + + +def deconv(in_planes, out_planes, kernel_size=4, stride=2, padding=1): + return torch.nn.Sequential( + torch.torch.nn.ConvTranspose2d( + in_channels=in_planes, + out_channels=out_planes, + kernel_size=4, + stride=2, + padding=1, + bias=True, + ), + torch.nn.PReLU(out_planes), + ) + + +class Conv2(torch.nn.Module): + def __init__(self, in_planes, out_planes, stride=2): + super(Conv2, self).__init__() + self.conv1 = conv(in_planes, out_planes, 3, stride, 1) + self.conv2 = conv(out_planes, out_planes, 3, 1, 1) + + def forward(self, x): + x = self.conv1(x) + x = self.conv2(x) + return x + + +class Conv2n(torch.nn.Module): + def __init__(self, in_planes, out_planes, stride=2): + super(Conv2n, self).__init__() + self.conv1 = conv(in_planes, in_planes, 3, stride, 1) + self.conv2 = conv(in_planes, in_planes, 3, 1, 1) + self.conv3 = conv(in_planes, in_planes, 1, 1, 0) + self.conv4 = conv(in_planes, out_planes, 1, 1, 0) + + def forward(self, x): + x = self.conv1(x) + x = self.conv2(x) + x = self.conv3(x) + x = self.conv4(x) + return x + + +##################################################### + + +class ImgPyramid(torch.nn.Module): + def __init__(self): + super(ImgPyramid, self).__init__() + self.conv1 = Conv2(3, c) + self.conv2 = Conv2(c, 2 * c) + self.conv3 = Conv2(2 * c, 4 * c) + self.conv4 = Conv2(4 * c, 8 * c) + + def forward(self, x): + x1 = self.conv1(x) + x2 = self.conv2(x1) + x3 = self.conv3(x2) + x4 = self.conv4(x3) + return [x1, x2, x3, x4] + + +class EncDec(torch.nn.Module): + def __init__(self, branch): + super(EncDec, self).__init__() + self.branch = branch + + self.down0 = Conv2(8, 2 * c) + self.down1 = Conv2(6 * c, 4 * c) + self.down2 = Conv2(12 * c, 8 * c) + self.down3 = Conv2(24 * c, 16 * c) + + self.up0 = deconv(48 * c, 8 * c) + self.up1 = deconv(16 * c, 4 * c) + self.up2 = deconv(8 * c, 2 * c) + self.up3 = deconv(4 * c, c) + self.conv = torch.nn.Conv2d(c, 2 * self.branch, 3, 1, 1) + + self.conv_m = torch.nn.Conv2d(c, 1, 3, 1, 1) + + # For Channel dimennsion + self.conv_C = torch.nn.Sequential( + torch.nn.AdaptiveAvgPool2d(1), + torch.nn.Conv2d( + 16 * c, + 16 * 16 * c, + kernel_size=(1, 1), + stride=(1, 1), + padding=(0, 0), + bias=True, + ), + torch.nn.Sigmoid(), + ) + + # For Height dimennsion + self.conv_H = torch.nn.Sequential( + torch.nn.AdaptiveAvgPool2d((None, 1)), + torch.nn.Conv2d( + 16 * c, 16, kernel_size=(1, 1), stride=(1, 1), padding=(0, 0), bias=True + ), + torch.nn.Sigmoid(), + ) + + # For Width dimennsion + self.conv_W = torch.nn.Sequential( + torch.nn.AdaptiveAvgPool2d((1, None)), + torch.nn.Conv2d( + 16 * c, 16, kernel_size=(1, 1), stride=(1, 1), padding=(0, 0), bias=True + ), + torch.nn.Sigmoid(), + ) + + self.sigmoid = torch.nn.Sigmoid() + + def forward(self, flow0, flow1, im0, im1, c0, c1): + N_, C_, H_, W_ = im0.shape + + wim1 = backwarp(im1, flow0) + wim0 = backwarp(im0, flow1) + s0_0 = self.down0(torch.cat((flow0, im0, wim1), 1)) + s1_0 = self.down0(torch.cat((flow1, im1, wim0), 1)) + + ######################################################################################### + flow0 = ( + torch.nn.functional.interpolate( + flow0, scale_factor=0.5, mode="bilinear", align_corners=False + ) + * 0.5 + ) + flow1 = ( + torch.nn.functional.interpolate( + flow1, scale_factor=0.5, mode="bilinear", align_corners=False + ) + * 0.5 + ) + + wf0 = backwarp(torch.cat((s0_0, c0[0]), 1), flow1) + wf1 = backwarp(torch.cat((s1_0, c1[0]), 1), flow0) + + s0_1 = self.down1(torch.cat((s0_0, c0[0], wf1), 1)) + s1_1 = self.down1(torch.cat((s1_0, c1[0], wf0), 1)) + + ######################################################################################### + flow0 = ( + torch.nn.functional.interpolate( + flow0, scale_factor=0.5, mode="bilinear", align_corners=False + ) + * 0.5 + ) + flow1 = ( + torch.nn.functional.interpolate( + flow1, scale_factor=0.5, mode="bilinear", align_corners=False + ) + * 0.5 + ) + + wf0 = backwarp(torch.cat((s0_1, c0[1]), 1), flow1) + wf1 = backwarp(torch.cat((s1_1, c1[1]), 1), flow0) + + s0_2 = self.down2(torch.cat((s0_1, c0[1], wf1), 1)) + s1_2 = self.down2(torch.cat((s1_1, c1[1], wf0), 1)) + + ######################################################################################### + flow0 = ( + torch.nn.functional.interpolate( + flow0, scale_factor=0.5, mode="bilinear", align_corners=False + ) + * 0.5 + ) + flow1 = ( + torch.nn.functional.interpolate( + flow1, scale_factor=0.5, mode="bilinear", align_corners=False + ) + * 0.5 + ) + + wf0 = backwarp(torch.cat((s0_2, c0[2]), 1), flow1) + wf1 = backwarp(torch.cat((s1_2, c1[2]), 1), flow0) + + s0_3 = self.down3(torch.cat((s0_2, c0[2], wf1), 1)) + s1_3 = self.down3(torch.cat((s1_2, c1[2], wf0), 1)) + + ######################################################################################### + + s0_3_c = self.conv_C(s0_3) + s0_3_c = s0_3_c.view(N_, 16, -1, 1, 1) + + s0_3_h = self.conv_H(s0_3) + s0_3_h = s0_3_h.view(N_, 16, 1, -1, 1) + + s0_3_w = self.conv_W(s0_3) + s0_3_w = s0_3_w.view(N_, 16, 1, 1, -1) + + cube0 = (s0_3_c * s0_3_h * s0_3_w).mean(1) + + s0_3 = s0_3 * cube0 + + s1_3_c = self.conv_C(s1_3) + s1_3_c = s1_3_c.view(N_, 16, -1, 1, 1) + + s1_3_h = self.conv_H(s1_3) + s1_3_h = s1_3_h.view(N_, 16, 1, -1, 1) + + s1_3_w = self.conv_W(s1_3) + s1_3_w = s1_3_w.view(N_, 16, 1, 1, -1) + + cube1 = (s1_3_c * s1_3_h * s1_3_w).mean(1) + + s1_3 = s1_3 * cube1 + + ######################################################################################### + flow0 = ( + torch.nn.functional.interpolate( + flow0, scale_factor=0.5, mode="bilinear", align_corners=False + ) + * 0.5 + ) + flow1 = ( + torch.nn.functional.interpolate( + flow1, scale_factor=0.5, mode="bilinear", align_corners=False + ) + * 0.5 + ) + + wf0 = backwarp(torch.cat((s0_3, c0[3]), 1), flow1) + wf1 = backwarp(torch.cat((s1_3, c1[3]), 1), flow0) + + x0 = self.up0(torch.cat((s0_3, c0[3], wf1), 1)) + x1 = self.up0(torch.cat((s1_3, c1[3], wf0), 1)) + + x0 = self.up1(torch.cat((s0_2, x0), 1)) + x1 = self.up1(torch.cat((s1_2, x1), 1)) + + x0 = self.up2(torch.cat((s0_1, x0), 1)) + x1 = self.up2(torch.cat((s1_1, x1), 1)) + + x0 = self.up3(torch.cat((s0_0, x0), 1)) + x1 = self.up3(torch.cat((s1_0, x1), 1)) + + m0 = self.sigmoid(self.conv_m(x0)) * 0.8 + 0.1 + m1 = self.sigmoid(self.conv_m(x1)) * 0.8 + 0.1 + + x0 = self.conv(x0) + x1 = self.conv(x1) + + return x0, x1, m0.repeat(1, self.branch, 1, 1), m1.repeat(1, self.branch, 1, 1) + + +class M2M_PWC(torch.nn.Module): + def __init__(self, ratio=4): + super(M2M_PWC, self).__init__() + self.branch = 4 + self.ratio = ratio + + self.netFlow = Network() + + self.paramAlpha = torch.nn.Parameter(10.0 * torch.ones(1, 1, 1, 1)) + + class MotionRefineNet(torch.nn.Module): + def __init__(self, branch): + super(MotionRefineNet, self).__init__() + self.branch = branch + self.img_pyramid = ImgPyramid() + self.motion_encdec = EncDec(branch) + + def forward(self, flow0, flow1, im0, im1, ratio): + flow0 = ratio * torch.nn.functional.interpolate( + input=flow0, + scale_factor=ratio, + mode="bilinear", + align_corners=False, + ) + flow1 = ratio * torch.nn.functional.interpolate( + input=flow1, + scale_factor=ratio, + mode="bilinear", + align_corners=False, + ) + + c0 = self.img_pyramid(im0) + c1 = self.img_pyramid(im1) + + flow_res = self.motion_encdec(flow0, flow1, im0, im1, c0, c1) + + flow0 = flow0.repeat(1, self.branch, 1, 1) + flow_res[0] + flow1 = flow1.repeat(1, self.branch, 1, 1) + flow_res[1] + + return flow0, flow1, flow_res[2], flow_res[3] + + self.MRN = MotionRefineNet(self.branch) + + def forward(self, im0, im1, fltTimes=[0.5], ratio=None): + if ratio is None: + ratio = self.ratio + + intWidth = im0.shape[3] and im1.shape[3] + intHeight = im0.shape[2] and im1.shape[2] + + intPadr = ((ratio * 16) - (intWidth % (ratio * 16))) % (ratio * 16) + intPadb = ((ratio * 16) - (intHeight % (ratio * 16))) % (ratio * 16) + + im0 = torch.nn.functional.pad( + input=im0, pad=[0, intPadr, 0, intPadb], mode="replicate" + ) + im1 = torch.nn.functional.pad( + input=im1, pad=[0, intPadr, 0, intPadb], mode="replicate" + ) + + N_, C_, H_, W_ = im0.shape + + outputs = [] + + with torch.set_grad_enabled(False): + tenStats = [im0, im1] + tenMean_ = sum([tenIn.mean([1, 2, 3], True) for tenIn in tenStats]) / len( + tenStats + ) + tenStd_ = ( + sum( + [ + tenIn.std([1, 2, 3], False, True).square() + + (tenMean_ - tenIn.mean([1, 2, 3], True)).square() + for tenIn in tenStats + ] + ) + / len(tenStats) + ).sqrt() + + im0_o = (im0 - tenMean_) / (tenStd_ + 0.0000001) + im1_o = (im1 - tenMean_) / (tenStd_ + 0.0000001) + + im0 = (im0 - tenMean_) / (tenStd_ + 0.0000001) + im1 = (im1 - tenMean_) / (tenStd_ + 0.0000001) + + im0_ = torch.nn.functional.interpolate( + input=im0, scale_factor=2.0 / ratio, mode="bilinear", align_corners=False + ) + im1_ = torch.nn.functional.interpolate( + input=im1, scale_factor=2.0 / ratio, mode="bilinear", align_corners=False + ) + + tenFwd, tenBwd = self.netFlow.bidir(im0_, im1_) + + tenFwd, tenBwd, WeiMF, WeiMB = self.MRN(tenFwd, tenBwd, im0, im1, ratio) + + for fltTime_ in fltTimes: + im0 = im0_o.repeat(1, self.branch, 1, 1) + im1 = im1_o.repeat(1, self.branch, 1, 1) + tenStd = tenStd_.repeat(1, self.branch, 1, 1) + tenMean = tenMean_.repeat(1, self.branch, 1, 1) + fltTime = fltTime_.repeat(1, self.branch, 1, 1) + + tenFwd = tenFwd.reshape(N_, self.branch, 2, H_, W_).view( + N_ * self.branch, 2, H_, W_ + ) + tenBwd = tenBwd.reshape(N_, self.branch, 2, H_, W_).view( + N_ * self.branch, 2, H_, W_ + ) + + WeiMF = WeiMF.reshape(N_, self.branch, 1, H_, W_).view( + N_ * self.branch, 1, H_, W_ + ) + WeiMB = WeiMB.reshape(N_, self.branch, 1, H_, W_).view( + N_ * self.branch, 1, H_, W_ + ) + + im0 = im0.reshape(N_, self.branch, 3, H_, W_).view( + N_ * self.branch, 3, H_, W_ + ) + im1 = im1.reshape(N_, self.branch, 3, H_, W_).view( + N_ * self.branch, 3, H_, W_ + ) + + tenStd = tenStd.reshape(N_, self.branch, 1, 1, 1).view( + N_ * self.branch, 1, 1, 1 + ) + tenMean = tenMean.reshape(N_, self.branch, 1, 1, 1).view( + N_ * self.branch, 1, 1, 1 + ) + fltTime = fltTime.reshape(N_, self.branch, 1, 1, 1).view( + N_ * self.branch, 1, 1, 1 + ) + + tenPhotoone = ( + ( + 1.0 + - ( + WeiMF + * (im0 - backwarp(im1, tenFwd).detach()).abs().mean([1], True) + ) + ) + .clip(0.001, None) + .square() + ) + tenPhototwo = ( + ( + 1.0 + - ( + WeiMB + * (im1 - backwarp(im0, tenBwd).detach()).abs().mean([1], True) + ) + ) + .clip(0.001, None) + .square() + ) + + t0 = fltTime + flow0 = tenFwd * t0 + metric0 = self.paramAlpha * tenPhotoone + + t1 = 1.0 - fltTime + flow1 = tenBwd * t1 + metric1 = self.paramAlpha * tenPhototwo + + flow0 = flow0.reshape(N_, self.branch, 2, H_, W_).permute(1, 0, 2, 3, 4) + flow1 = flow1.reshape(N_, self.branch, 2, H_, W_).permute(1, 0, 2, 3, 4) + + metric0 = metric0.reshape(N_, self.branch, 1, H_, W_).permute(1, 0, 2, 3, 4) + metric1 = metric1.reshape(N_, self.branch, 1, H_, W_).permute(1, 0, 2, 3, 4) + + im0 = im0.reshape(N_, self.branch, 3, H_, W_).permute(1, 0, 2, 3, 4) + im1 = im1.reshape(N_, self.branch, 3, H_, W_).permute(1, 0, 2, 3, 4) + + t0 = t0.reshape(N_, self.branch, 1, 1, 1).permute(1, 0, 2, 3, 4) + t1 = t1.reshape(N_, self.branch, 1, 1, 1).permute(1, 0, 2, 3, 4) + + tenOutput, mask = forwarp_mframe_mask( + im0, flow0, t1, im1, flow1, t0, metric0, metric1 + ) + + tenOutput = tenOutput + mask * (t1.mean(0) * im0_o + t0.mean(0) * im1_o) + + outputs.append((tenOutput * (tenStd_ + 0.0000001)) + tenMean_) + + return [output[:, :, :intHeight, :intWidth] for output in outputs] diff --git a/comfyui-frame-interpolation/vfi_models/m2m/__init__.py b/comfyui-frame-interpolation/vfi_models/m2m/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..88e489e7825b005010e85009843b122aee8edbd6 --- /dev/null +++ b/comfyui-frame-interpolation/vfi_models/m2m/__init__.py @@ -0,0 +1,60 @@ +import pathlib +import torch +from torch.utils.data import DataLoader +import pathlib +from vfi_utils import load_file_from_github_release, preprocess_frames, postprocess_frames +import typing +from comfy.model_management import get_torch_device +from vfi_utils import InterpolationStateList, generic_frame_loop + +MODEL_TYPE = pathlib.Path(__file__).parent.name +CKPT_NAMES = ["M2M.pth"] + + +class M2M_VFI: + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "ckpt_name": (CKPT_NAMES, ), + "frames": ("IMAGE", ), + "clear_cache_after_n_frames": ("INT", {"default": 10, "min": 1, "max": 1000}), + "multiplier": ("INT", {"default": 2, "min": 2, "max": 1000}), + }, + "optional": { + "optional_interpolation_states": ("INTERPOLATION_STATES", ) + } + } + + RETURN_TYPES = ("IMAGE", ) + FUNCTION = "vfi" + CATEGORY = "ComfyUI-Frame-Interpolation/VFI" + + def vfi( + self, + ckpt_name: typing.AnyStr, + frames: torch.Tensor, + clear_cache_after_n_frames: typing.SupportsInt = 1, + multiplier: typing.SupportsInt = 2, + optional_interpolation_states: InterpolationStateList = None, + **kwargs + ): + from .M2M_arch import M2M_PWC + model_path = load_file_from_github_release(MODEL_TYPE, ckpt_name) + interpolation_model = M2M_PWC() + interpolation_model.load_state_dict(torch.load(model_path)) + interpolation_model.eval().to(get_torch_device()) + frames = preprocess_frames(frames) + + def return_middle_frame(frame_0, frame_1, int_timestep, model): + tenSteps = [ + torch.FloatTensor([int_timestep] * len(frame_0)).view(len(frame_0), 1, 1, 1).to(get_torch_device()) + ] + return model(frame_0, frame_1, tenSteps)[0] + + args = [interpolation_model] + out = postprocess_frames( + generic_frame_loop(type(self).__name__, frames, clear_cache_after_n_frames, multiplier, return_middle_frame, *args, + interpolation_states=optional_interpolation_states, dtype=torch.float32) + ) + return (out,) diff --git a/comfyui-frame-interpolation/vfi_models/m2m/__pycache__/__init__.cpython-310.pyc b/comfyui-frame-interpolation/vfi_models/m2m/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8aa52b372401cdf2c234a8a7628c77e8cfc7ebe8 Binary files /dev/null and b/comfyui-frame-interpolation/vfi_models/m2m/__pycache__/__init__.cpython-310.pyc differ diff --git a/comfyui-frame-interpolation/vfi_models/ops/__init__.py b/comfyui-frame-interpolation/vfi_models/ops/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..25b13b405172ab46f9b45769520c58f5c098286d --- /dev/null +++ b/comfyui-frame-interpolation/vfi_models/ops/__init__.py @@ -0,0 +1,22 @@ +import torch.multiprocessing as mp + +if mp.current_process().name == "MainProcess": + import yaml + import os + from pathlib import Path + + config_path = Path(Path(__file__).parent.parent.parent.resolve(), "config.yaml") + + if os.path.exists(config_path): + config = yaml.load(open(config_path, "r"), Loader=yaml.FullLoader) + ops_backend = config["ops_backend"] + else: + ops_backend = "taichi" + + assert ops_backend in ["taichi", "cupy"] + + if ops_backend == "taichi": + from .taichi_ops import softsplat, ModuleSoftsplat, FunctionSoftsplat, softsplat_func, costvol_func, sepconv_func, init, batch_edt, FunctionAdaCoF, ModuleCorrelation, FunctionCorrelation, _FunctionCorrelation + else: + from .cupy_ops import softsplat, ModuleSoftsplat, FunctionSoftsplat, softsplat_func, costvol_func, sepconv_func, init, batch_edt, FunctionAdaCoF, ModuleCorrelation, FunctionCorrelation, _FunctionCorrelation + diff --git a/comfyui-frame-interpolation/vfi_models/ops/cupy_ops/__init__.py b/comfyui-frame-interpolation/vfi_models/ops/cupy_ops/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..10090797e7a12b14bafe26d0c3235d6e80f82158 --- /dev/null +++ b/comfyui-frame-interpolation/vfi_models/ops/cupy_ops/__init__.py @@ -0,0 +1,11 @@ +from .costvol import * +from .sepconv import * +from .softsplat import * +from .adacof import * +from .correlation import * +from comfy.model_management import is_nvidia, get_torch_device_name, get_torch_device + +def init(): + if not is_nvidia(): + raise NotImplementedError(f"CuPy ops backend only support CUDA device but found {get_torch_device_name(get_torch_device())} instead. Try Taichi ops backend by editing config.yaml") + return \ No newline at end of file diff --git a/comfyui-frame-interpolation/vfi_models/ops/cupy_ops/adacof.py b/comfyui-frame-interpolation/vfi_models/ops/cupy_ops/adacof.py new file mode 100644 index 0000000000000000000000000000000000000000..378469045ab9dcb31df62080ba80b2cf5aa9b616 --- /dev/null +++ b/comfyui-frame-interpolation/vfi_models/ops/cupy_ops/adacof.py @@ -0,0 +1,491 @@ +import torch +from .utils import cuda_kernel, cuda_launch, cuda_int32 +import math + +kernel_AdaCoF_updateOutput = """ + extern "C" __global__ void kernel_AdaCoF_updateOutput( + const int n, + const float* input, + const float* weight, + const float* offset_i, + const float* offset_j, + float* output + ) { for (int intIndex = (blockIdx.x * blockDim.x) + threadIdx.x; intIndex < n; intIndex += blockDim.x * gridDim.x) { + float dblOutput = 0.0; + + const int intSample = ( intIndex / SIZE_3(output) / SIZE_2(output) / SIZE_1(output) ) % SIZE_0(output); + const int c = ( intIndex / SIZE_3(output) / SIZE_2(output) ) % SIZE_1(output); + const int i = ( intIndex / SIZE_3(output) ) % SIZE_2(output); + const int j = ( intIndex ) % SIZE_3(output); + + for (int k = 0; k < F_SIZE; k += 1) { + for (int l = 0; l < F_SIZE; l += 1) { + float w = VALUE_4(weight, intSample, k*F_SIZE+l, i, j); + float alpha = VALUE_4(offset_i, intSample, k*F_SIZE+l, i, j); + float beta = VALUE_4(offset_j, intSample, k*F_SIZE+l, i, j); + int A = (int) alpha; + int B = (int) beta; + + int i_k_A = i+k*DILATION+A; + if(i_k_A < 0) + i_k_A = 0; + if(i_k_A > SIZE_2(input) - 1) + i_k_A = SIZE_2(input) - 1; + + int j_l_B = j+l*DILATION+B; + if(j_l_B < 0) + j_l_B = 0; + if(j_l_B > SIZE_3(input) - 1) + j_l_B = SIZE_3(input) - 1; + + int i_k_A_1 = i+k*DILATION+A+1; + if(i_k_A_1 < 0) + i_k_A_1 = 0; + if(i_k_A_1 > SIZE_2(input) - 1) + i_k_A_1 = SIZE_2(input) - 1; + + int j_l_B_1 = j+l*DILATION+B+1; + if(j_l_B_1 < 0) + j_l_B_1 = 0; + if(j_l_B_1 > SIZE_3(input) - 1) + j_l_B_1 = SIZE_3(input) - 1; + + dblOutput += w * ( + VALUE_4(input, intSample, c, i_k_A, j_l_B)*(1-(alpha-(float)A))*(1-(beta-(float)B)) + + VALUE_4(input, intSample, c, i_k_A_1, j_l_B)*(alpha-(float)A)*(1-(beta-(float)B)) + + VALUE_4(input, intSample, c, i_k_A, j_l_B_1)*(1-(alpha-(float)A))*(beta-(float)B) + + VALUE_4(input, intSample, c, i_k_A_1, j_l_B_1)*(alpha-(float)A)*(beta-(float)B) + ); + } + } + + output[intIndex] = dblOutput; + } } +""" + +kernel_AdaCoF_updateGradWeight = """ + extern "C" __global__ void kernel_AdaCoF_updateGradWeight( + const int n, + const float* gradLoss, + const float* input, + const float* offset_i, + const float* offset_j, + float* gradWeight + ) { for (int intIndex = (blockIdx.x * blockDim.x) + threadIdx.x; intIndex < n; intIndex += blockDim.x * gridDim.x) { + float floatOutput = 0.0; + + const int intSample = ( intIndex / SIZE_3(gradWeight) / SIZE_2(gradWeight) / SIZE_1(gradWeight) ) % SIZE_0(gradWeight); + const int intDepth = ( intIndex / SIZE_3(gradWeight) / SIZE_2(gradWeight) ) % SIZE_1(gradWeight); + const int i = ( intIndex / SIZE_3(gradWeight) ) % SIZE_2(gradWeight); + const int j = ( intIndex ) % SIZE_3(gradWeight); + + int k = intDepth / F_SIZE; + int l = intDepth % F_SIZE; + + for (int c = 0; c < 3; c++) + { + float delta = VALUE_4(gradLoss, intSample, c, i, j); + float alpha = VALUE_4(offset_i, intSample, k*F_SIZE+l, i, j); + float beta = VALUE_4(offset_j, intSample, k*F_SIZE+l, i, j); + int A = (int) alpha; + int B = (int) beta; + + int i_k_A = i+k*DILATION+A; + if(i_k_A < 0) + i_k_A = 0; + if(i_k_A > SIZE_2(input) - 1) + i_k_A = SIZE_2(input) - 1; + + int j_l_B = j+l*DILATION+B; + if(j_l_B < 0) + j_l_B = 0; + if(j_l_B > SIZE_3(input) - 1) + j_l_B = SIZE_3(input) - 1; + + int i_k_A_1 = i+k*DILATION+A+1; + if(i_k_A_1 < 0) + i_k_A_1 = 0; + if(i_k_A_1 > SIZE_2(input) - 1) + i_k_A_1 = SIZE_2(input) - 1; + + int j_l_B_1 = j+l*DILATION+B+1; + if(j_l_B_1 < 0) + j_l_B_1 = 0; + if(j_l_B_1 > SIZE_3(input) - 1) + j_l_B_1 = SIZE_3(input) - 1; + + floatOutput += delta * ( + VALUE_4(input, intSample, c, i_k_A, j_l_B)*(1-(alpha-(float)A))*(1-(beta-(float)B)) + + VALUE_4(input, intSample, c, i_k_A_1, j_l_B)*(alpha-(float)A)*(1-(beta-(float)B)) + + VALUE_4(input, intSample, c, i_k_A, j_l_B_1)*(1-(alpha-(float)A))*(beta-(float)B) + + VALUE_4(input, intSample, c, i_k_A_1, j_l_B_1)*(alpha-(float)A)*(beta-(float)B) + ); + } + + gradWeight[intIndex] = floatOutput; + } } +""" + +kernel_AdaCoF_updateGradAlpha = """ + extern "C" __global__ void kernel_AdaCoF_updateGradAlpha( + const int n, + const float* gradLoss, + const float* input, + const float* weight, + const float* offset_i, + const float* offset_j, + float* gradOffset_i + ) { for (int intIndex = (blockIdx.x * blockDim.x) + threadIdx.x; intIndex < n; intIndex += blockDim.x * gridDim.x) { + float floatOutput = 0.0; + + const int intSample = ( intIndex / SIZE_3(gradOffset_i) / SIZE_2(gradOffset_i) / SIZE_1(gradOffset_i) ) % SIZE_0(gradOffset_i); + const int intDepth = ( intIndex / SIZE_3(gradOffset_i) / SIZE_2(gradOffset_i) ) % SIZE_1(gradOffset_i); + const int i = ( intIndex / SIZE_3(gradOffset_i) ) % SIZE_2(gradOffset_i); + const int j = ( intIndex ) % SIZE_3(gradOffset_i); + + int k = intDepth / F_SIZE; + int l = intDepth % F_SIZE; + + for (int c = 0; c < 3; c++) + { + float delta = VALUE_4(gradLoss, intSample, c, i, j); + float w = VALUE_4(weight, intSample, k*F_SIZE+l, i, j); + float alpha = VALUE_4(offset_i, intSample, k*F_SIZE+l, i, j); + float beta = VALUE_4(offset_j, intSample, k*F_SIZE+l, i, j); + int A = (int) alpha; + int B = (int) beta; + + int i_k_A = i+k*DILATION+A; + if(i_k_A < 0) + i_k_A = 0; + if(i_k_A > SIZE_2(input) - 1) + i_k_A = SIZE_2(input) - 1; + + int j_l_B = j+l*DILATION+B; + if(j_l_B < 0) + j_l_B = 0; + if(j_l_B > SIZE_3(input) - 1) + j_l_B = SIZE_3(input) - 1; + + int i_k_A_1 = i+k*DILATION+A+1; + if(i_k_A_1 < 0) + i_k_A_1 = 0; + if(i_k_A_1 > SIZE_2(input) - 1) + i_k_A_1 = SIZE_2(input) - 1; + + int j_l_B_1 = j+l*DILATION+B+1; + if(j_l_B_1 < 0) + j_l_B_1 = 0; + if(j_l_B_1 > SIZE_3(input) - 1) + j_l_B_1 = SIZE_3(input) - 1; + + floatOutput += delta * w * ( + - VALUE_4(input, intSample, c, i_k_A, j_l_B)*(1-(beta-(float)B)) + + VALUE_4(input, intSample, c, i_k_A_1, j_l_B)*(1-(beta-(float)B)) - + VALUE_4(input, intSample, c, i_k_A, j_l_B_1)*(beta-(float)B) + + VALUE_4(input, intSample, c, i_k_A_1, j_l_B_1)*(beta-(float)B) + ); + } + + gradOffset_i[intIndex] = floatOutput; + } } +""" + +kernel_AdaCoF_updateGradBeta = """ + extern "C" __global__ void kernel_AdaCoF_updateGradBeta( + const int n, + const float* gradLoss, + const float* input, + const float* weight, + const float* offset_i, + const float* offset_j, + float* gradOffset_j + ) { for (int intIndex = (blockIdx.x * blockDim.x) + threadIdx.x; intIndex < n; intIndex += blockDim.x * gridDim.x) { + float floatOutput = 0.0; + + const int intSample = ( intIndex / SIZE_3(gradOffset_j) / SIZE_2(gradOffset_j) / SIZE_1(gradOffset_j) ) % SIZE_0(gradOffset_j); + const int intDepth = ( intIndex / SIZE_3(gradOffset_j) / SIZE_2(gradOffset_j) ) % SIZE_1(gradOffset_j); + const int i = ( intIndex / SIZE_3(gradOffset_j) ) % SIZE_2(gradOffset_j); + const int j = ( intIndex ) % SIZE_3(gradOffset_j); + + int k = intDepth / F_SIZE; + int l = intDepth % F_SIZE; + + for (int c = 0; c < 3; c++) + { + float delta = VALUE_4(gradLoss, intSample, c, i, j); + float w = VALUE_4(weight, intSample, k*F_SIZE+l, i, j); + float alpha = VALUE_4(offset_i, intSample, k*F_SIZE+l, i, j); + float beta = VALUE_4(offset_j, intSample, k*F_SIZE+l, i, j); + int A = (int) alpha; + int B = (int) beta; + + int i_k_A = i+k*DILATION+A; + if(i_k_A < 0) + i_k_A = 0; + if(i_k_A > SIZE_2(input) - 1) + i_k_A = SIZE_2(input) - 1; + + int j_l_B = j+l*DILATION+B; + if(j_l_B < 0) + j_l_B = 0; + if(j_l_B > SIZE_3(input) - 1) + j_l_B = SIZE_3(input) - 1; + + int i_k_A_1 = i+k*DILATION+A+1; + if(i_k_A_1 < 0) + i_k_A_1 = 0; + if(i_k_A_1 > SIZE_2(input) - 1) + i_k_A_1 = SIZE_2(input) - 1; + + int j_l_B_1 = j+l*DILATION+B+1; + if(j_l_B_1 < 0) + j_l_B_1 = 0; + if(j_l_B_1 > SIZE_3(input) - 1) + j_l_B_1 = SIZE_3(input) - 1; + + floatOutput += delta * w * ( + - VALUE_4(input, intSample, c, i_k_A, j_l_B)*(1-(alpha-(float)A)) - + VALUE_4(input, intSample, c, i_k_A_1, j_l_B)*(alpha-(float)A) + + VALUE_4(input, intSample, c, i_k_A, j_l_B_1)*(1-(alpha-(float)A)) + + VALUE_4(input, intSample, c, i_k_A_1, j_l_B_1)*(alpha-(float)A) + ); + } + + gradOffset_j[intIndex] = floatOutput; + } } +""" + +class FunctionAdaCoF(torch.autograd.Function): + # end + @staticmethod + def forward(ctx, input, weight, offset_i, offset_j, dilation): + ctx.save_for_backward(input, weight, offset_i, offset_j) + ctx.dilation = dilation + + intSample = input.size(0) + intInputDepth = input.size(1) + intInputHeight = input.size(2) + intInputWidth = input.size(3) + intFilterSize = int(math.sqrt(weight.size(1))) + intOutputHeight = weight.size(2) + intOutputWidth = weight.size(3) + + assert ( + intInputHeight - ((intFilterSize - 1) * dilation + 1) == intOutputHeight - 1 + ) + assert ( + intInputWidth - ((intFilterSize - 1) * dilation + 1) == intOutputWidth - 1 + ) + + assert input.is_contiguous() == True + assert weight.is_contiguous() == True + assert offset_i.is_contiguous() == True + assert offset_j.is_contiguous() == True + + output = input.new_zeros( + intSample, intInputDepth, intOutputHeight, intOutputWidth + ) + + if input.is_cuda == True: + + class Stream: + ptr = torch.cuda.current_stream().cuda_stream + + # end + + n = output.nelement() + cuda_launch( + cuda_kernel( + "kernel_AdaCoF_updateOutput", + kernel_AdaCoF_updateOutput, + { + "input": input, + "weight": weight, + "offset_i": offset_i, + "offset_j": offset_j, + "output": output, + }, + F_SIZE=str(intFilterSize), + DILATION=str(dilation) + ), + )( + grid=tuple([int((n + 512 - 1) / 512), 1, 1]), + block=tuple([512, 1, 1]), + args=[ + n, + input.data_ptr(), + weight.data_ptr(), + offset_i.data_ptr(), + offset_j.data_ptr(), + output.data_ptr(), + ], + stream=Stream, + ) + + elif input.is_cuda == False: + raise NotImplementedError() + + # end + + return output + + # end + @staticmethod + def backward(ctx, gradOutput): + input, weight, offset_i, offset_j = ctx.saved_tensors + dilation = ctx.dilation + + intSample = input.size(0) + intInputDepth = input.size(1) + intInputHeight = input.size(2) + intInputWidth = input.size(3) + intFilterSize = int(math.sqrt(weight.size(1))) + intOutputHeight = weight.size(2) + intOutputWidth = weight.size(3) + + assert ( + intInputHeight - ((intFilterSize - 1) * dilation + 1) == intOutputHeight - 1 + ) + assert ( + intInputWidth - ((intFilterSize - 1) * dilation + 1) == intOutputWidth - 1 + ) + + assert gradOutput.is_contiguous() == True + + gradInput = ( + input.new_zeros(intSample, intInputDepth, intInputHeight, intInputWidth) + if ctx.needs_input_grad[0] == True + else None + ) + gradWeight = ( + input.new_zeros( + intSample, intFilterSize**2, intOutputHeight, intOutputWidth + ) + if ctx.needs_input_grad[1] == True + else None + ) + gradOffset_i = ( + input.new_zeros( + intSample, intFilterSize**2, intOutputHeight, intOutputWidth + ) + if ctx.needs_input_grad[2] == True + else None + ) + gradOffset_j = ( + input.new_zeros( + intSample, intFilterSize**2, intOutputHeight, intOutputWidth + ) + if ctx.needs_input_grad[2] == True + else None + ) + + if input.is_cuda == True: + + class Stream: + ptr = torch.cuda.current_stream().cuda_stream + + # end + + # weight grad + n_w = gradWeight.nelement() + cuda_launch( + cuda_kernel( + "kernel_AdaCoF_updateGradWeight", + kernel_AdaCoF_updateGradWeight, + { + "gradLoss": gradOutput, + "input": input, + "offset_i": offset_i, + "offset_j": offset_j, + "gradWeight": gradWeight, + }, + F_SIZE=str(intFilterSize), + DILATION=str(dilation) + ), + )( + grid=tuple([int((n_w + 512 - 1) / 512), 1, 1]), + block=tuple([512, 1, 1]), + args=[ + n_w, + gradOutput.data_ptr(), + input.data_ptr(), + offset_i.data_ptr(), + offset_j.data_ptr(), + gradWeight.data_ptr(), + ], + stream=Stream, + ) + + # alpha grad + n_i = gradOffset_i.nelement() + cuda_launch( + cuda_kernel( + "kernel_AdaCoF_updateGradAlpha", + kernel_AdaCoF_updateGradAlpha, + { + "gradLoss": gradOutput, + "input": input, + "weight": weight, + "offset_i": offset_i, + "offset_j": offset_j, + "gradOffset_i": gradOffset_i, + }, + F_SIZE=str(intFilterSize), + DILATION=str(dilation) + ), + )( + grid=tuple([int((n_i + 512 - 1) / 512), 1, 1]), + block=tuple([512, 1, 1]), + args=[ + n_i, + gradOutput.data_ptr(), + input.data_ptr(), + weight.data_ptr(), + offset_i.data_ptr(), + offset_j.data_ptr(), + gradOffset_i.data_ptr(), + ], + stream=Stream, + ) + + # beta grad + n_j = gradOffset_j.nelement() + cuda_launch( + cuda_kernel( + "kernel_AdaCoF_updateGradBeta", + kernel_AdaCoF_updateGradBeta, + { + "gradLoss": gradOutput, + "input": input, + "weight": weight, + "offset_i": offset_i, + "offset_j": offset_j, + "gradOffset_j": gradOffset_j, + }, + F_SIZE=str(intFilterSize), + DILATION=str(dilation) + ), + )( + grid=tuple([int((n_j + 512 - 1) / 512), 1, 1]), + block=tuple([512, 1, 1]), + args=[ + n_j, + gradOutput.data_ptr(), + input.data_ptr(), + weight.data_ptr(), + offset_i.data_ptr(), + offset_j.data_ptr(), + gradOffset_j.data_ptr(), + ], + stream=Stream, + ) + + elif input.is_cuda == False: + raise NotImplementedError() + + # end + + return gradInput, gradWeight, gradOffset_i, gradOffset_j, None + +__all__ = ["FunctionAdaCoF"] diff --git a/comfyui-frame-interpolation/vfi_models/ops/cupy_ops/batch_edt.py b/comfyui-frame-interpolation/vfi_models/ops/cupy_ops/batch_edt.py new file mode 100644 index 0000000000000000000000000000000000000000..3c3542c7dc9332417ed898de2f7da5e3f750b298 --- /dev/null +++ b/comfyui-frame-interpolation/vfi_models/ops/cupy_ops/batch_edt.py @@ -0,0 +1,119 @@ +############### DISTANCE TRANSFORM ############### +# img tensor: (bs,h,w) or (bs,1,h,w) +# returns same shape +# expects white lines, black whitespace +# defaults to diameter if empty image +from .utils import cuda_kernel, cuda_launch, cuda_int32, cuda_float32 +import torch + +_batch_edt_kernel = ( + "kernel_dt", + """ + extern "C" __global__ void kernel_dt( + const int bs, + const int h, + const int w, + const float diam2, + float* data, + float* output + ) { + int idx = blockIdx.x * blockDim.x + threadIdx.x; + if (idx >= bs*h*w) { + return; + } + int pb = idx / (h*w); + int pi = (idx - h*w*pb) / w; + int pj = (idx - h*w*pb - w*pi); + + float cost; + float mincost = diam2; + for (int j = 0; j < w; j++) { + cost = data[h*w*pb + w*pi + j] + (pj-j)*(pj-j); + if (cost < mincost) { + mincost = cost; + } + } + output[idx] = mincost; + return; + } +""", +) +_batch_edt = None + + +def batch_edt(img, block=1024): + # must initialize cuda/cupy after forking + global _batch_edt + if _batch_edt is None: + _batch_edt = cuda_launch(*_batch_edt_kernel) + + # bookkeeppingg + if len(img.shape) == 4: + assert img.shape[1] == 1 + img = img.squeeze(1) + expand = True + else: + expand = False + bs, h, w = img.shape + diam2 = h**2 + w**2 + odtype = img.dtype + grid = (img.nelement() + block - 1) // block + + # cupy implementation + if img.is_cuda: + # first pass, y-axis + data = ((1 - img.type(torch.float32)) * diam2).contiguous() + intermed = torch.zeros_like(data) + _batch_edt( + grid=(grid, 1, 1), + block=(block, 1, 1), # < 1024 + args=[ + cuda_int32(bs), + cuda_int32(h), + cuda_int32(w), + cuda_float32(diam2), + data.data_ptr(), + intermed.data_ptr(), + ], + ) + + # second pass, x-axis + intermed = intermed.permute(0, 2, 1).contiguous() + out = torch.zeros_like(intermed) + _batch_edt( + grid=(grid, 1, 1), + block=(block, 1, 1), + args=[ + cuda_int32(bs), + cuda_int32(w), + cuda_int32(h), + cuda_float32(diam2), + intermed.data_ptr(), + out.data_ptr(), + ], + ) + ans = out.permute(0, 2, 1).sqrt() + ans = ans.type(odtype) if odtype != ans.dtype else ans + + # default to scipy cpu implementation + else: + raise NotImplementedError() + """ sums = img.sum(dim=(1, 2)) + ans = torch.tensor( + np.stack( + [ + scipy.ndimage.morphology.distance_transform_edt(i) + if s != 0 + else np.ones_like(i) # change scipy behavior for empty image + * np.sqrt(diam2) + for i, s in zip(1 - img, sums) + ] + ), + dtype=odtype, + ) """ + + if expand: + ans = ans.unsqueeze(1) + return ans + +__all__ = ["batch_edt"] \ No newline at end of file diff --git a/comfyui-frame-interpolation/vfi_models/ops/cupy_ops/correlation.py b/comfyui-frame-interpolation/vfi_models/ops/cupy_ops/correlation.py new file mode 100644 index 0000000000000000000000000000000000000000..d1e69e2dbbba453ab367dc76a1c3c566d2f5540c --- /dev/null +++ b/comfyui-frame-interpolation/vfi_models/ops/cupy_ops/correlation.py @@ -0,0 +1,413 @@ +import torch +from .utils import cuda_kernel, cuda_launch, cuda_int32 + +kernel_Correlation_rearrange = """ + extern "C" __global__ void kernel_Correlation_rearrange( + const int n, + const float* input, + float* output + ) { + int intIndex = (blockIdx.x * blockDim.x) + threadIdx.x; + + if (intIndex >= n) { + return; + } + + int intSample = blockIdx.z; + int intChannel = blockIdx.y; + + float fltValue = input[(((intSample * SIZE_1(input)) + intChannel) * SIZE_2(input) * SIZE_3(input)) + intIndex]; + + __syncthreads(); + + int intPaddedY = (intIndex / SIZE_3(input)) + 4; + int intPaddedX = (intIndex % SIZE_3(input)) + 4; + int intRearrange = ((SIZE_3(input) + 8) * intPaddedY) + intPaddedX; + + output[(((intSample * SIZE_1(output) * SIZE_2(output)) + intRearrange) * SIZE_1(input)) + intChannel] = fltValue; + } +""" + +kernel_Correlation_updateOutput = """ + extern "C" __global__ void kernel_Correlation_updateOutput( + const int n, + const float* rbot0, + const float* rbot1, + float* top + ) { + extern __shared__ char patch_data_char[]; + + float *patch_data = (float *)patch_data_char; + + // First (upper left) position of kernel upper-left corner in current center position of neighborhood in image 1 + int x1 = blockIdx.x + 4; + int y1 = blockIdx.y + 4; + int item = blockIdx.z; + int ch_off = threadIdx.x; + + // Load 3D patch into shared shared memory + for (int j = 0; j < 1; j++) { // HEIGHT + for (int i = 0; i < 1; i++) { // WIDTH + int ji_off = (j + i) * SIZE_3(rbot0); + for (int ch = ch_off; ch < SIZE_3(rbot0); ch += 32) { // CHANNELS + int idx1 = ((item * SIZE_1(rbot0) + y1+j) * SIZE_2(rbot0) + x1+i) * SIZE_3(rbot0) + ch; + int idxPatchData = ji_off + ch; + patch_data[idxPatchData] = rbot0[idx1]; + } + } + } + + __syncthreads(); + + __shared__ float sum[32]; + + // Compute correlation + for (int top_channel = 0; top_channel < SIZE_1(top); top_channel++) { + sum[ch_off] = 0; + + int s2o = top_channel % 9 - 4; + int s2p = top_channel / 9 - 4; + + for (int j = 0; j < 1; j++) { // HEIGHT + for (int i = 0; i < 1; i++) { // WIDTH + int ji_off = (j + i) * SIZE_3(rbot0); + for (int ch = ch_off; ch < SIZE_3(rbot0); ch += 32) { // CHANNELS + int x2 = x1 + s2o; + int y2 = y1 + s2p; + + int idxPatchData = ji_off + ch; + int idx2 = ((item * SIZE_1(rbot0) + y2+j) * SIZE_2(rbot0) + x2+i) * SIZE_3(rbot0) + ch; + + sum[ch_off] += patch_data[idxPatchData] * rbot1[idx2]; + } + } + } + + __syncthreads(); + + if (ch_off == 0) { + float total_sum = 0; + for (int idx = 0; idx < 32; idx++) { + total_sum += sum[idx]; + } + const int sumelems = SIZE_3(rbot0); + const int index = ((top_channel*SIZE_2(top) + blockIdx.y)*SIZE_3(top))+blockIdx.x; + top[index + item*SIZE_1(top)*SIZE_2(top)*SIZE_3(top)] = total_sum / (float)sumelems; + } + } + } +""" + +kernel_Correlation_updateGradFirst = """ + #define ROUND_OFF 50000 + + extern "C" __global__ void kernel_Correlation_updateGradFirst( + const int n, + const int intSample, + const float* rbot0, + const float* rbot1, + const float* gradOutput, + float* gradFirst, + float* gradSecond + ) { for (int intIndex = (blockIdx.x * blockDim.x) + threadIdx.x; intIndex < n; intIndex += blockDim.x * gridDim.x) { + int n = intIndex % SIZE_1(gradFirst); // channels + int l = (intIndex / SIZE_1(gradFirst)) % SIZE_3(gradFirst) + 4; // w-pos + int m = (intIndex / SIZE_1(gradFirst) / SIZE_3(gradFirst)) % SIZE_2(gradFirst) + 4; // h-pos + + // round_off is a trick to enable integer division with ceil, even for negative numbers + // We use a large offset, for the inner part not to become negative. + const int round_off = ROUND_OFF; + const int round_off_s1 = round_off; + + // We add round_off before_s1 the int division and subtract round_off after it, to ensure the formula matches ceil behavior: + int xmin = (l - 4 + round_off_s1 - 1) + 1 - round_off; // ceil (l - 4) + int ymin = (m - 4 + round_off_s1 - 1) + 1 - round_off; // ceil (l - 4) + + // Same here: + int xmax = (l - 4 + round_off_s1) - round_off; // floor (l - 4) + int ymax = (m - 4 + round_off_s1) - round_off; // floor (m - 4) + + float sum = 0; + if (xmax>=0 && ymax>=0 && (xmin<=SIZE_3(gradOutput)-1) && (ymin<=SIZE_2(gradOutput)-1)) { + xmin = max(0,xmin); + xmax = min(SIZE_3(gradOutput)-1,xmax); + + ymin = max(0,ymin); + ymax = min(SIZE_2(gradOutput)-1,ymax); + + for (int p = -4; p <= 4; p++) { + for (int o = -4; o <= 4; o++) { + // Get rbot1 data: + int s2o = o; + int s2p = p; + int idxbot1 = ((intSample * SIZE_1(rbot0) + (m+s2p)) * SIZE_2(rbot0) + (l+s2o)) * SIZE_3(rbot0) + n; + float bot1tmp = rbot1[idxbot1]; // rbot1[l+s2o,m+s2p,n] + + // Index offset for gradOutput in following loops: + int op = (p+4) * 9 + (o+4); // index[o,p] + int idxopoffset = (intSample * SIZE_1(gradOutput) + op); + + for (int y = ymin; y <= ymax; y++) { + for (int x = xmin; x <= xmax; x++) { + int idxgradOutput = (idxopoffset * SIZE_2(gradOutput) + y) * SIZE_3(gradOutput) + x; // gradOutput[x,y,o,p] + sum += gradOutput[idxgradOutput] * bot1tmp; + } + } + } + } + } + const int sumelems = SIZE_1(gradFirst); + const int bot0index = ((n * SIZE_2(gradFirst)) + (m-4)) * SIZE_3(gradFirst) + (l-4); + gradFirst[bot0index + intSample*SIZE_1(gradFirst)*SIZE_2(gradFirst)*SIZE_3(gradFirst)] = sum / (float)sumelems; + } } +""" + +kernel_Correlation_updateGradSecond = """ + #define ROUND_OFF 50000 + + extern "C" __global__ void kernel_Correlation_updateGradSecond( + const int n, + const int intSample, + const float* rbot0, + const float* rbot1, + const float* gradOutput, + float* gradFirst, + float* gradSecond + ) { for (int intIndex = (blockIdx.x * blockDim.x) + threadIdx.x; intIndex < n; intIndex += blockDim.x * gridDim.x) { + int n = intIndex % SIZE_1(gradSecond); // channels + int l = (intIndex / SIZE_1(gradSecond)) % SIZE_3(gradSecond) + 4; // w-pos + int m = (intIndex / SIZE_1(gradSecond) / SIZE_3(gradSecond)) % SIZE_2(gradSecond) + 4; // h-pos + + // round_off is a trick to enable integer division with ceil, even for negative numbers + // We use a large offset, for the inner part not to become negative. + const int round_off = ROUND_OFF; + const int round_off_s1 = round_off; + + float sum = 0; + for (int p = -4; p <= 4; p++) { + for (int o = -4; o <= 4; o++) { + int s2o = o; + int s2p = p; + + //Get X,Y ranges and clamp + // We add round_off before_s1 the int division and subtract round_off after it, to ensure the formula matches ceil behavior: + int xmin = (l - 4 - s2o + round_off_s1 - 1) + 1 - round_off; // ceil (l - 4 - s2o) + int ymin = (m - 4 - s2p + round_off_s1 - 1) + 1 - round_off; // ceil (l - 4 - s2o) + + // Same here: + int xmax = (l - 4 - s2o + round_off_s1) - round_off; // floor (l - 4 - s2o) + int ymax = (m - 4 - s2p + round_off_s1) - round_off; // floor (m - 4 - s2p) + + if (xmax>=0 && ymax>=0 && (xmin<=SIZE_3(gradOutput)-1) && (ymin<=SIZE_2(gradOutput)-1)) { + xmin = max(0,xmin); + xmax = min(SIZE_3(gradOutput)-1,xmax); + + ymin = max(0,ymin); + ymax = min(SIZE_2(gradOutput)-1,ymax); + + // Get rbot0 data: + int idxbot0 = ((intSample * SIZE_1(rbot0) + (m-s2p)) * SIZE_2(rbot0) + (l-s2o)) * SIZE_3(rbot0) + n; + float bot0tmp = rbot0[idxbot0]; // rbot1[l+s2o,m+s2p,n] + + // Index offset for gradOutput in following loops: + int op = (p+4) * 9 + (o+4); // index[o,p] + int idxopoffset = (intSample * SIZE_1(gradOutput) + op); + + for (int y = ymin; y <= ymax; y++) { + for (int x = xmin; x <= xmax; x++) { + int idxgradOutput = (idxopoffset * SIZE_2(gradOutput) + y) * SIZE_3(gradOutput) + x; // gradOutput[x,y,o,p] + sum += gradOutput[idxgradOutput] * bot0tmp; + } + } + } + } + } + const int sumelems = SIZE_1(gradSecond); + const int bot1index = ((n * SIZE_2(gradSecond)) + (m-4)) * SIZE_3(gradSecond) + (l-4); + gradSecond[bot1index + intSample*SIZE_1(gradSecond)*SIZE_2(gradSecond)*SIZE_3(gradSecond)] = sum / (float)sumelems; + } } +""" + + +class _FunctionCorrelation(torch.autograd.Function): + @staticmethod + def forward(self, first, second): + rbot0 = first.new_zeros( + [first.shape[0], first.shape[2] + 8, first.shape[3] + 8, first.shape[1]] + ) + rbot1 = first.new_zeros( + [first.shape[0], first.shape[2] + 8, first.shape[3] + 8, first.shape[1]] + ) + + self.save_for_backward(first, second, rbot0, rbot1) + + first = first.contiguous() + assert first.is_cuda == True + second = second.contiguous() + assert second.is_cuda == True + + output = first.new_zeros([first.shape[0], 81, first.shape[2], first.shape[3]]) + + if first.is_cuda == True: + n = first.shape[2] * first.shape[3] + cuda_launch( + cuda_kernel( + "kernel_Correlation_rearrange", kernel_Correlation_rearrange, {"input": first, "output": rbot0} + ), + )( + grid=tuple([int((n + 16 - 1) / 16), first.shape[1], first.shape[0]]), + block=tuple([16, 1, 1]), + args=[n, first.data_ptr(), rbot0.data_ptr()], + ) + + n = second.shape[2] * second.shape[3] + cuda_launch( + cuda_kernel( + "kernel_Correlation_rearrange", kernel_Correlation_rearrange, {"input": second, "output": rbot1} + ), + )( + grid=tuple([int((n + 16 - 1) / 16), second.shape[1], second.shape[0]]), + block=tuple([16, 1, 1]), + args=[n, second.data_ptr(), rbot1.data_ptr()], + ) + + n = output.shape[1] * output.shape[2] * output.shape[3] + cuda_launch( + cuda_kernel( + "kernel_Correlation_updateOutput", + kernel_Correlation_updateOutput, + {"rbot0": rbot0, "rbot1": rbot1, "top": output}, + ), + )( + grid=tuple([output.shape[3], output.shape[2], output.shape[0]]), + block=tuple([32, 1, 1]), + shared_mem=first.shape[1] * 4, + args=[n, rbot0.data_ptr(), rbot1.data_ptr(), output.data_ptr()], + ) + + elif first.is_cuda == False: + raise NotImplementedError() + + # end + + return output + + # end + + @staticmethod + def backward(self, gradOutput): + first, second, rbot0, rbot1 = self.saved_tensors + + gradOutput = gradOutput.contiguous() + assert gradOutput.is_cuda == True + + gradFirst = ( + first.new_zeros( + [first.shape[0], first.shape[1], first.shape[2], first.shape[3]] + ) + if self.needs_input_grad[0] == True + else None + ) + gradSecond = ( + first.new_zeros( + [first.shape[0], first.shape[1], first.shape[2], first.shape[3]] + ) + if self.needs_input_grad[1] == True + else None + ) + + if first.is_cuda == True: + if gradFirst is not None: + for intSample in range(first.shape[0]): + n = first.shape[1] * first.shape[2] * first.shape[3] + cuda_launch( + cuda_kernel( + "kernel_Correlation_updateGradFirst", + kernel_Correlation_updateGradFirst, + { + "rbot0": rbot0, + "rbot1": rbot1, + "gradOutput": gradOutput, + "gradFirst": gradFirst, + "gradSecond": None, + }, + ), + )( + grid=tuple([int((n + 512 - 1) / 512), 1, 1]), + block=tuple([512, 1, 1]), + args=[ + n, + intSample, + rbot0.data_ptr(), + rbot1.data_ptr(), + gradOutput.data_ptr(), + gradFirst.data_ptr(), + None, + ], + ) + # end + # end + + if gradSecond is not None: + for intSample in range(first.shape[0]): + n = first.shape[1] * first.shape[2] * first.shape[3] + cuda_launch( + cuda_kernel( + "kernel_Correlation_updateGradSecond", + kernel_Correlation_updateGradSecond, + { + "rbot0": rbot0, + "rbot1": rbot1, + "gradOutput": gradOutput, + "gradFirst": None, + "gradSecond": gradSecond, + }, + ), + )( + grid=tuple([int((n + 512 - 1) / 512), 1, 1]), + block=tuple([512, 1, 1]), + args=[ + n, + intSample, + rbot0.data_ptr(), + rbot1.data_ptr(), + gradOutput.data_ptr(), + None, + gradSecond.data_ptr(), + ], + ) + # end + # end + + elif first.is_cuda == False: + raise NotImplementedError() + + # end + + return gradFirst, gradSecond + + # end + + +# end + + +def FunctionCorrelation(tenFirst, tenSecond): + return _FunctionCorrelation.apply(tenFirst, tenSecond) + + +# end + + +class ModuleCorrelation(torch.nn.Module): + def __init__(self): + super(ModuleCorrelation, self).__init__() + + # end + + def forward(self, tenFirst, tenSecond): + return _FunctionCorrelation.apply(tenFirst, tenSecond) + + # end + +__all__ = ["_FunctionCorrelation", "FunctionCorrelation", "ModuleCorrelation"] diff --git a/comfyui-frame-interpolation/vfi_models/ops/cupy_ops/costvol.py b/comfyui-frame-interpolation/vfi_models/ops/cupy_ops/costvol.py new file mode 100644 index 0000000000000000000000000000000000000000..070dd483be1716de1a3986034eaaeb9cddda9ee9 --- /dev/null +++ b/comfyui-frame-interpolation/vfi_models/ops/cupy_ops/costvol.py @@ -0,0 +1,317 @@ +from .utils import cuda_kernel, cuda_launch, cuda_int32 +import torch, collections + +costvol_out = """ + extern "C" __global__ void __launch_bounds__(512) costvol_out( + const int n, + const {{type}}* __restrict__ tenOne, + const {{type}}* __restrict__ tenTwo, + {{type}}* __restrict__ tenOut + ) { for (int intIndex = (blockIdx.x * blockDim.x) + threadIdx.x; intIndex < n; intIndex += blockDim.x * gridDim.x) { + const int intN = ( intIndex / SIZE_3(tenOut) / SIZE_2(tenOut) ) % SIZE_0(tenOut); + const int intC = -1; + const int intY = ( intIndex / SIZE_3(tenOut) ) % SIZE_2(tenOut); + const int intX = ( intIndex ) % SIZE_3(tenOut); + + {{type}} fltOne[{{intChans}}]; + + for (int intValue = 0; intValue < SIZE_1(tenOne); intValue += 1) { + fltOne[intValue] = VALUE_4(tenOne, intN, intValue, intY, intX); + } + + int intOffset = OFFSET_4(tenOut, intN, 0, intY, intX); + + for (int intOy = intY - 4; intOy <= intY + 4; intOy += 1) { + for (int intOx = intX - 4; intOx <= intX + 4; intOx += 1) { + {{type}} fltValue = 0.0f; + + if ((intOy >= 0) && (intOy < SIZE_2(tenOut)) && (intOx >= 0) && (intOx < SIZE_3(tenOut))) { + for (int intValue = 0; intValue < SIZE_1(tenOne); intValue += 1) { + fltValue += abs(fltOne[intValue] - VALUE_4(tenTwo, intN, intValue, intOy, intOx)); + } + } else { + for (int intValue = 0; intValue < SIZE_1(tenOne); intValue += 1) { + fltValue += abs(fltOne[intValue]); + } + } + + tenOut[intOffset] = fltValue / SIZE_1(tenOne); + intOffset += SIZE_2(tenOut) * SIZE_3(tenOut); + } + } + } } +""" + +costvol_onegrad = """ + extern "C" __global__ void __launch_bounds__(512) costvol_onegrad( + const int n, + const {{type}}* __restrict__ tenOne, + const {{type}}* __restrict__ tenTwo, + const {{type}}* __restrict__ tenOutgrad, + {{type}}* __restrict__ tenOnegrad, + {{type}}* __restrict__ tenTwograd + ) { for (int intIndex = (blockIdx.x * blockDim.x) + threadIdx.x; intIndex < n; intIndex += blockDim.x * gridDim.x) { + const int intN = ( intIndex / SIZE_3(tenOnegrad) / SIZE_2(tenOnegrad) ) % SIZE_0(tenOnegrad); + const int intC = -1; + const int intY = ( intIndex / SIZE_3(tenOnegrad) ) % SIZE_2(tenOnegrad); + const int intX = ( intIndex ) % SIZE_3(tenOnegrad); + + {{type}} fltOne[{{intChans}}]; + + for (int intValue = 0; intValue < SIZE_1(tenOne); intValue += 1) { + fltOne[intValue] = VALUE_4(tenOne, intN, intValue, intY, intX); + } + + int intOffset = OFFSET_4(tenOutgrad, intN, 0, intY, intX); + + for (int intOy = intY - 4; intOy <= intY + 4; intOy += 1) { + for (int intOx = intX - 4; intOx <= intX + 4; intOx += 1) { + if ((intOy >= 0) && (intOy < SIZE_2(tenOutgrad)) && (intOx >= 0) && (intOx < SIZE_3(tenOutgrad))) { + for (int intValue = 0; intValue < SIZE_1(tenOne); intValue += 1) { + if (fltOne[intValue] - VALUE_4(tenTwo, intN, intValue, intOy, intOx) >= 0.0f) { + tenOnegrad[OFFSET_4(tenOnegrad, intN, intValue, intY, intX)] += +tenOutgrad[intOffset] / SIZE_1(tenOne); + } else { + tenOnegrad[OFFSET_4(tenOnegrad, intN, intValue, intY, intX)] += -tenOutgrad[intOffset] / SIZE_1(tenOne); + } + } + } else { + for (int intValue = 0; intValue < SIZE_1(tenOne); intValue += 1) { + if (fltOne[intValue] >= 0.0f) { + tenOnegrad[OFFSET_4(tenOnegrad, intN, intValue, intY, intX)] += +tenOutgrad[intOffset] / SIZE_1(tenOne); + } else { + tenOnegrad[OFFSET_4(tenOnegrad, intN, intValue, intY, intX)] += -tenOutgrad[intOffset] / SIZE_1(tenOne); + } + } + } + + intOffset += SIZE_2(tenOutgrad) * SIZE_3(tenOutgrad); + } + } + } } +""" + +costvol_twograd = """ + extern "C" __global__ void __launch_bounds__(512) costvol_twograd( + const int n, + const {{type}}* __restrict__ tenOne, + const {{type}}* __restrict__ tenTwo, + const {{type}}* __restrict__ tenOutgrad, + {{type}}* __restrict__ tenOnegrad, + {{type}}* __restrict__ tenTwograd + ) { for (int intIndex = (blockIdx.x * blockDim.x) + threadIdx.x; intIndex < n; intIndex += blockDim.x * gridDim.x) { + const int intN = ( intIndex / SIZE_3(tenTwograd) / SIZE_2(tenTwograd) ) % SIZE_0(tenTwograd); + const int intC = -1; + const int intY = ( intIndex / SIZE_3(tenTwograd) ) % SIZE_2(tenTwograd); + const int intX = ( intIndex ) % SIZE_3(tenTwograd); + + {{type}} fltOne[{{intChans}}]; + + for (int intValue = 0; intValue < SIZE_1(tenOne); intValue += 1) { + fltOne[intValue] = VALUE_4(tenOne, intN, intValue, intY, intX); + } + + int intOffset = OFFSET_4(tenOutgrad, intN, 0, intY, intX); + + for (int intOy = intY - 4; intOy <= intY + 4; intOy += 1) { + for (int intOx = intX - 4; intOx <= intX + 4; intOx += 1) { + if ((intOy >= 0) && (intOy < SIZE_2(tenOutgrad)) && (intOx >= 0) && (intOx < SIZE_3(tenOutgrad))) { + for (int intValue = 0; intValue < SIZE_1(tenOne); intValue += 1) { + if (fltOne[intValue] - VALUE_4(tenTwo, intN, intValue, intOy, intOx) >= 0.0f) { + atomicAdd(&tenTwograd[OFFSET_4(tenTwograd, intN, intValue, intOy, intOx)], -tenOutgrad[intOffset] / SIZE_1(tenOne)); + } else { + atomicAdd(&tenTwograd[OFFSET_4(tenTwograd, intN, intValue, intOy, intOx)], +tenOutgrad[intOffset] / SIZE_1(tenOne)); + } + } + } else { + // ... + } + + intOffset += SIZE_2(tenOutgrad) * SIZE_3(tenOutgrad); + } + } + } } +""" + +class costvol_func(torch.autograd.Function): + @staticmethod + @torch.cuda.amp.custom_fwd(cast_inputs=torch.float32) + def forward(self, tenOne, tenTwo): + tenOut = tenOne.new_empty( + [tenOne.shape[0], 81, tenOne.shape[2], tenOne.shape[3]] + ) + + cuda_launch( + cuda_kernel( + "costvol_out", + costvol_out, + { + "intChans": tenOne.shape[1], + "tenOne": tenOne, + "tenTwo": tenTwo, + "tenOut": tenOut, + }, + ) + )( + grid=tuple( + [ + int( + ( + (tenOut.shape[0] * tenOut.shape[2] * tenOut.shape[3]) + + 512 + - 1 + ) + / 512 + ), + 1, + 1, + ] + ), + block=tuple([512, 1, 1]), + args=[ + cuda_int32(tenOut.shape[0] * tenOut.shape[2] * tenOut.shape[3]), + tenOne.data_ptr(), + tenTwo.data_ptr(), + tenOut.data_ptr(), + ], + stream=collections.namedtuple("Stream", "ptr")( + torch.cuda.current_stream().cuda_stream + ), + ) + + self.save_for_backward(tenOne, tenTwo) + + return tenOut + + # end + + @staticmethod + @torch.cuda.amp.custom_bwd + def backward(self, tenOutgrad): + tenOne, tenTwo = self.saved_tensors + + tenOutgrad = tenOutgrad.contiguous() + assert tenOutgrad.is_cuda == True + + tenOnegrad = ( + tenOne.new_zeros( + [tenOne.shape[0], tenOne.shape[1], tenOne.shape[2], tenOne.shape[3]] + ) + if self.needs_input_grad[0] == True + else None + ) + tenTwograd = ( + tenTwo.new_zeros( + [tenTwo.shape[0], tenTwo.shape[1], tenTwo.shape[2], tenTwo.shape[3]] + ) + if self.needs_input_grad[1] == True + else None + ) + + if tenOnegrad is not None: + cuda_launch( + cuda_kernel( + "costvol_onegrad", + costvol_onegrad, + { + "intChans": tenOne.shape[1], + "tenOne": tenOne, + "tenTwo": tenTwo, + "tenOutgrad": tenOutgrad, + "tenOnegrad": tenOnegrad, + "tenTwograd": tenTwograd, + }, + ) + )( + grid=tuple( + [ + int( + ( + ( + tenOnegrad.shape[0] + * tenOnegrad.shape[2] + * tenOnegrad.shape[3] + ) + + 512 + - 1 + ) + / 512 + ), + 1, + 1, + ] + ), + block=tuple([512, 1, 1]), + args=[ + cuda_int32( + tenOnegrad.shape[0] * tenOnegrad.shape[2] * tenOnegrad.shape[3] + ), + tenOne.data_ptr(), + tenTwo.data_ptr(), + tenOutgrad.data_ptr(), + tenOnegrad.data_ptr(), + tenTwograd.data_ptr(), + ], + stream=collections.namedtuple("Stream", "ptr")( + torch.cuda.current_stream().cuda_stream + ), + ) + # end + + if tenTwograd is not None: + cuda_launch( + cuda_kernel( + "costvol_twograd", + costvol_twograd, + { + "intChans": tenOne.shape[1], + "tenOne": tenOne, + "tenTwo": tenTwo, + "tenOutgrad": tenOutgrad, + "tenOnegrad": tenOnegrad, + "tenTwograd": tenTwograd, + }, + ) + )( + grid=tuple( + [ + int( + ( + ( + tenTwograd.shape[0] + * tenTwograd.shape[2] + * tenTwograd.shape[3] + ) + + 512 + - 1 + ) + / 512 + ), + 1, + 1, + ] + ), + block=tuple([512, 1, 1]), + args=[ + cuda_int32( + tenTwograd.shape[0] * tenTwograd.shape[2] * tenTwograd.shape[3] + ), + tenOne.data_ptr(), + tenTwo.data_ptr(), + tenOutgrad.data_ptr(), + tenOnegrad.data_ptr(), + tenTwograd.data_ptr(), + ], + stream=collections.namedtuple("Stream", "ptr")( + torch.cuda.current_stream().cuda_stream + ), + ) + # end + + return tenOnegrad, tenTwograd, None, None + + # end + + +# end + +__all__ = ["costvol_func"] \ No newline at end of file diff --git a/comfyui-frame-interpolation/vfi_models/ops/cupy_ops/sepconv.py b/comfyui-frame-interpolation/vfi_models/ops/cupy_ops/sepconv.py new file mode 100644 index 0000000000000000000000000000000000000000..c334cdca77674f2566dd0075903e4d590e6d9eca --- /dev/null +++ b/comfyui-frame-interpolation/vfi_models/ops/cupy_ops/sepconv.py @@ -0,0 +1,332 @@ +import torch +from .utils import cuda_launch, cuda_kernel, cuda_int32 + +sepconv_vergrad = """ + extern "C" __global__ void __launch_bounds__(512) sepconv_vergrad( + const int n, + const {{type}}* __restrict__ tenIn, + const {{type}}* __restrict__ tenVer, + const {{type}}* __restrict__ tenHor, + const {{type}}* __restrict__ tenOutgrad, + {{type}}* __restrict__ tenIngrad, + {{type}}* __restrict__ tenVergrad, + {{type}}* __restrict__ tenHorgrad + ) { for (int intIndex = (blockIdx.x * blockDim.x) + threadIdx.x; intIndex < n; intIndex += blockDim.x * gridDim.x) { + const int intN = ( intIndex / SIZE_3(tenVergrad) / SIZE_2(tenVergrad) / SIZE_1(tenVergrad) ) % SIZE_0(tenVergrad); + const int intC = ( intIndex / SIZE_3(tenVergrad) / SIZE_2(tenVergrad) ) % SIZE_1(tenVergrad); + const int intY = ( intIndex / SIZE_3(tenVergrad) ) % SIZE_2(tenVergrad); + const int intX = ( intIndex ) % SIZE_3(tenVergrad); + + {{type}} fltVergrad = 0.0; + + {{type}} fltKahanc = 0.0; + {{type}} fltKahany = 0.0; + {{type}} fltKahant = 0.0; + + for (int intI = 0; intI < SIZE_1(tenIn); intI += 1) { + for (int intFx = 0; intFx < SIZE_1(tenHor); intFx += 1) { + fltKahany = VALUE_4(tenHor, intN, intFx, intY, intX) * VALUE_4(tenIn, intN, intI, intY + intC, intX + intFx) * VALUE_4(tenOutgrad, intN, intI, intY, intX); + fltKahany = fltKahany - fltKahanc; + fltKahant = fltVergrad + fltKahany; + fltKahanc = (fltKahant - fltVergrad) - fltKahany; + fltVergrad = fltKahant; + } + } + + tenVergrad[intIndex] = fltVergrad; + } } +""" + +sepconv_ingrad = """ + extern "C" __global__ void __launch_bounds__(512) sepconv_ingrad( + const int n, + const {{type}}* __restrict__ tenIn, + const {{type}}* __restrict__ tenVer, + const {{type}}* __restrict__ tenHor, + const {{type}}* __restrict__ tenOutgrad, + {{type}}* __restrict__ tenIngrad, + {{type}}* __restrict__ tenVergrad, + {{type}}* __restrict__ tenHorgrad + ) { for (int intIndex = (blockIdx.x * blockDim.x) + threadIdx.x; intIndex < n; intIndex += blockDim.x * gridDim.x) { + const int intN = ( intIndex / SIZE_3(tenIngrad) / SIZE_2(tenIngrad) / SIZE_1(tenIngrad) ) % SIZE_0(tenIngrad); + const int intC = ( intIndex / SIZE_3(tenIngrad) / SIZE_2(tenIngrad) ) % SIZE_1(tenIngrad); + const int intY = ( intIndex / SIZE_3(tenIngrad) ) % SIZE_2(tenIngrad); + const int intX = ( intIndex ) % SIZE_3(tenIngrad); + + {{type}} fltIngrad = 0.0; + + {{type}} fltKahanc = 0.0; + {{type}} fltKahany = 0.0; + {{type}} fltKahant = 0.0; + + for (int intFy = 0; intFy < SIZE_1(tenVer); intFy += 1) { + int intKy = intY + intFy - (SIZE_1(tenVer) - 1); + + if (intKy < 0) { continue; } + if (intKy >= SIZE_2(tenVer)) { continue; } + + for (int intFx = 0; intFx < SIZE_1(tenHor); intFx += 1) { + int intKx = intX + intFx - (SIZE_1(tenHor) - 1); + + if (intKx < 0) { continue; } + if (intKx >= SIZE_3(tenHor)) { continue; } + + fltKahany = VALUE_4(tenVer, intN, (SIZE_1(tenVer) - 1) - intFy, intKy, intKx) * VALUE_4(tenHor, intN, (SIZE_1(tenHor) - 1) - intFx, intKy, intKx) * VALUE_4(tenOutgrad, intN, intC, intKy, intKx); + fltKahany = fltKahany - fltKahanc; + fltKahant = fltIngrad + fltKahany; + fltKahanc = (fltKahant - fltIngrad) - fltKahany; + fltIngrad = fltKahant; + } + } + + tenIngrad[intIndex] = fltIngrad; + } } +""" + +sepconv_out = """ + extern "C" __global__ void __launch_bounds__(512) sepconv_out( + const int n, + const {{type}}* __restrict__ tenIn, + const {{type}}* __restrict__ tenVer, + const {{type}}* __restrict__ tenHor, + {{type}}* __restrict__ tenOut + ) { for (int intIndex = (blockIdx.x * blockDim.x) + threadIdx.x; intIndex < n; intIndex += blockDim.x * gridDim.x) { + const int intN = ( intIndex / SIZE_3(tenOut) / SIZE_2(tenOut) / SIZE_1(tenOut) ) % SIZE_0(tenOut); + const int intC = ( intIndex / SIZE_3(tenOut) / SIZE_2(tenOut) ) % SIZE_1(tenOut); + const int intY = ( intIndex / SIZE_3(tenOut) ) % SIZE_2(tenOut); + const int intX = ( intIndex ) % SIZE_3(tenOut); + + {{type}} fltOut = 0.0; + + {{type}} fltKahanc = 0.0; + {{type}} fltKahany = 0.0; + {{type}} fltKahant = 0.0; + + for (int intFy = 0; intFy < SIZE_1(tenVer); intFy += 1) { + for (int intFx = 0; intFx < SIZE_1(tenHor); intFx += 1) { + fltKahany = VALUE_4(tenIn, intN, intC, intY + intFy, intX + intFx) * VALUE_4(tenVer, intN, intFy, intY, intX) * VALUE_4(tenHor, intN, intFx, intY, intX); + fltKahany = fltKahany - fltKahanc; + fltKahant = fltOut + fltKahany; + fltKahanc = (fltKahant - fltOut) - fltKahany; + fltOut = fltKahant; + } + } + + tenOut[intIndex] = fltOut; + } } +""" + +sepconv_horgrad = """ + extern "C" __global__ void __launch_bounds__(512) sepconv_horgrad( + const int n, + const {{type}}* __restrict__ tenIn, + const {{type}}* __restrict__ tenVer, + const {{type}}* __restrict__ tenHor, + const {{type}}* __restrict__ tenOutgrad, + {{type}}* __restrict__ tenIngrad, + {{type}}* __restrict__ tenVergrad, + {{type}}* __restrict__ tenHorgrad + ) { for (int intIndex = (blockIdx.x * blockDim.x) + threadIdx.x; intIndex < n; intIndex += blockDim.x * gridDim.x) { + const int intN = ( intIndex / SIZE_3(tenHorgrad) / SIZE_2(tenHorgrad) / SIZE_1(tenHorgrad) ) % SIZE_0(tenHorgrad); + const int intC = ( intIndex / SIZE_3(tenHorgrad) / SIZE_2(tenHorgrad) ) % SIZE_1(tenHorgrad); + const int intY = ( intIndex / SIZE_3(tenHorgrad) ) % SIZE_2(tenHorgrad); + const int intX = ( intIndex ) % SIZE_3(tenHorgrad); + + {{type}} fltHorgrad = 0.0; + + {{type}} fltKahanc = 0.0; + {{type}} fltKahany = 0.0; + {{type}} fltKahant = 0.0; + + for (int intI = 0; intI < SIZE_1(tenIn); intI += 1) { + for (int intFy = 0; intFy < SIZE_1(tenVer); intFy += 1) { + fltKahany = VALUE_4(tenVer, intN, intFy, intY, intX) * VALUE_4(tenIn, intN, intI, intY + intFy, intX + intC) * VALUE_4(tenOutgrad, intN, intI, intY, intX); + fltKahany = fltKahany - fltKahanc; + fltKahant = fltHorgrad + fltKahany; + fltKahanc = (fltKahant - fltHorgrad) - fltKahany; + fltHorgrad = fltKahant; + } + } + + tenHorgrad[intIndex] = fltHorgrad; + } } +""" + +class sepconv_func(torch.autograd.Function): + @staticmethod + @torch.cuda.amp.custom_fwd(cast_inputs=torch.float32) + def forward(self, tenIn, tenVer, tenHor): + tenOut = tenIn.new_empty( + [ + tenIn.shape[0], + tenIn.shape[1], + tenVer.shape[2] and tenHor.shape[2], + tenVer.shape[3] and tenHor.shape[3], + ] + ) + + if tenIn.is_cuda == True: + cuda_launch( + cuda_kernel( + "sepconv_out", + sepconv_out, + { + "tenIn": tenIn, + "tenVer": tenVer, + "tenHor": tenHor, + "tenOut": tenOut, + }, + ) + )( + grid=tuple([int((tenOut.nelement() + 512 - 1) / 512), 1, 1]), + block=tuple([512, 1, 1]), + args=[ + cuda_int32(tenOut.nelement()), + tenIn.data_ptr(), + tenVer.data_ptr(), + tenHor.data_ptr(), + tenOut.data_ptr(), + ], + ) + + elif tenIn.is_cuda != True: + assert False + + # end + + self.save_for_backward(tenIn, tenVer, tenHor) + + return tenOut + + # end + + @staticmethod + @torch.cuda.amp.custom_bwd + def backward(self, tenOutgrad): + tenIn, tenVer, tenHor = self.saved_tensors + + tenOutgrad = tenOutgrad.contiguous() + assert tenOutgrad.is_cuda == True + + tenIngrad = ( + tenIn.new_empty( + [tenIn.shape[0], tenIn.shape[1], tenIn.shape[2], tenIn.shape[3]] + ) + if self.needs_input_grad[0] == True + else None + ) + tenVergrad = ( + tenVer.new_empty( + [tenVer.shape[0], tenVer.shape[1], tenVer.shape[2], tenVer.shape[3]] + ) + if self.needs_input_grad[1] == True + else None + ) + tenHorgrad = ( + tenHor.new_empty( + [tenHor.shape[0], tenHor.shape[1], tenHor.shape[2], tenHor.shape[3]] + ) + if self.needs_input_grad[2] == True + else None + ) + + if tenIngrad is not None: + cuda_launch( + cuda_kernel( + "sepconv_ingrad", + sepconv_ingrad, + { + "tenIn": tenIn, + "tenVer": tenVer, + "tenHor": tenHor, + "tenOutgrad": tenOutgrad, + "tenIngrad": tenIngrad, + "tenVergrad": tenVergrad, + "tenHorgrad": tenHorgrad, + }, + ) + )( + grid=tuple([int((tenIngrad.nelement() + 512 - 1) / 512), 1, 1]), + block=tuple([512, 1, 1]), + args=[ + cuda_int32(tenIngrad.nelement()), + tenIn.data_ptr(), + tenVer.data_ptr(), + tenHor.data_ptr(), + tenOutgrad.data_ptr(), + tenIngrad.data_ptr(), + None, + None, + ], + ) + # end + + if tenVergrad is not None: + cuda_launch( + cuda_kernel( + "sepconv_vergrad", + sepconv_vergrad, + { + "tenIn": tenIn, + "tenVer": tenVer, + "tenHor": tenHor, + "tenOutgrad": tenOutgrad, + "tenIngrad": tenIngrad, + "tenVergrad": tenVergrad, + "tenHorgrad": tenHorgrad, + }, + ) + )( + grid=tuple([int((tenVergrad.nelement() + 512 - 1) / 512), 1, 1]), + block=tuple([512, 1, 1]), + args=[ + cuda_int32(tenVergrad.nelement()), + tenIn.data_ptr(), + tenVer.data_ptr(), + tenHor.data_ptr(), + tenOutgrad.data_ptr(), + None, + tenVergrad.data_ptr(), + None, + ], + ) + # end + + if tenHorgrad is not None: + cuda_launch( + cuda_kernel( + "sepconv_horgrad", + sepconv_horgrad, + { + "tenIn": tenIn, + "tenVer": tenVer, + "tenHor": tenHor, + "tenOutgrad": tenOutgrad, + "tenIngrad": tenIngrad, + "tenVergrad": tenVergrad, + "tenHorgrad": tenHorgrad, + }, + ) + )( + grid=tuple([int((tenHorgrad.nelement() + 512 - 1) / 512), 1, 1]), + block=tuple([512, 1, 1]), + args=[ + cuda_int32(tenHorgrad.nelement()), + tenIn.data_ptr(), + tenVer.data_ptr(), + tenHor.data_ptr(), + tenOutgrad.data_ptr(), + None, + None, + tenHorgrad.data_ptr(), + ], + ) + # end + + return tenIngrad, tenVergrad, tenHorgrad + + # end + + +# end +__all__ = ["sepconv_func"] \ No newline at end of file diff --git a/comfyui-frame-interpolation/vfi_models/ops/cupy_ops/softsplat.py b/comfyui-frame-interpolation/vfi_models/ops/cupy_ops/softsplat.py new file mode 100644 index 0000000000000000000000000000000000000000..4a2ae47a638c5d025e85169759b587947640e012 --- /dev/null +++ b/comfyui-frame-interpolation/vfi_models/ops/cupy_ops/softsplat.py @@ -0,0 +1,440 @@ +import torch +from .utils import cuda_launch, cuda_kernel, cuda_int32 +import cupy +import collections + +softsplat_flowgrad = """ + extern "C" __global__ void __launch_bounds__(512) softsplat_flowgrad( + const int n, + const {{type}}* __restrict__ tenIn, + const {{type}}* __restrict__ tenFlow, + const {{type}}* __restrict__ tenOutgrad, + {{type}}* __restrict__ tenIngrad, + {{type}}* __restrict__ tenFlowgrad + ) { for (int intIndex = (blockIdx.x * blockDim.x) + threadIdx.x; intIndex < n; intIndex += blockDim.x * gridDim.x) { + const int intN = ( intIndex / SIZE_3(tenFlowgrad) / SIZE_2(tenFlowgrad) / SIZE_1(tenFlowgrad) ) % SIZE_0(tenFlowgrad); + const int intC = ( intIndex / SIZE_3(tenFlowgrad) / SIZE_2(tenFlowgrad) ) % SIZE_1(tenFlowgrad); + const int intY = ( intIndex / SIZE_3(tenFlowgrad) ) % SIZE_2(tenFlowgrad); + const int intX = ( intIndex ) % SIZE_3(tenFlowgrad); + + assert(SIZE_1(tenFlow) == 2); + + {{type}} fltFlowgrad = 0.0f; + + {{type}} fltX = ({{type}}) (intX) + VALUE_4(tenFlow, intN, 0, intY, intX); + {{type}} fltY = ({{type}}) (intY) + VALUE_4(tenFlow, intN, 1, intY, intX); + + if (isfinite(fltX) == false) { return; } + if (isfinite(fltY) == false) { return; } + + int intNorthwestX = (int) (floor(fltX)); + int intNorthwestY = (int) (floor(fltY)); + int intNortheastX = intNorthwestX + 1; + int intNortheastY = intNorthwestY; + int intSouthwestX = intNorthwestX; + int intSouthwestY = intNorthwestY + 1; + int intSoutheastX = intNorthwestX + 1; + int intSoutheastY = intNorthwestY + 1; + + {{type}} fltNorthwest = 0.0f; + {{type}} fltNortheast = 0.0f; + {{type}} fltSouthwest = 0.0f; + {{type}} fltSoutheast = 0.0f; + + if (intC == 0) { + fltNorthwest = (({{type}}) (-1.0f)) * (({{type}}) (intSoutheastY) - fltY); + fltNortheast = (({{type}}) (+1.0f)) * (({{type}}) (intSouthwestY) - fltY); + fltSouthwest = (({{type}}) (-1.0f)) * (fltY - ({{type}}) (intNortheastY)); + fltSoutheast = (({{type}}) (+1.0f)) * (fltY - ({{type}}) (intNorthwestY)); + + } else if (intC == 1) { + fltNorthwest = (({{type}}) (intSoutheastX) - fltX) * (({{type}}) (-1.0f)); + fltNortheast = (fltX - ({{type}}) (intSouthwestX)) * (({{type}}) (-1.0f)); + fltSouthwest = (({{type}}) (intNortheastX) - fltX) * (({{type}}) (+1.0f)); + fltSoutheast = (fltX - ({{type}}) (intNorthwestX)) * (({{type}}) (+1.0f)); + + } + + for (int intChannel = 0; intChannel < SIZE_1(tenOutgrad); intChannel += 1) { + {{type}} fltIn = VALUE_4(tenIn, intN, intChannel, intY, intX); + + if ((intNorthwestX >= 0) && (intNorthwestX < SIZE_3(tenOutgrad)) && (intNorthwestY >= 0) && (intNorthwestY < SIZE_2(tenOutgrad))) { + fltFlowgrad += VALUE_4(tenOutgrad, intN, intChannel, intNorthwestY, intNorthwestX) * fltIn * fltNorthwest; + } + + if ((intNortheastX >= 0) && (intNortheastX < SIZE_3(tenOutgrad)) && (intNortheastY >= 0) && (intNortheastY < SIZE_2(tenOutgrad))) { + fltFlowgrad += VALUE_4(tenOutgrad, intN, intChannel, intNortheastY, intNortheastX) * fltIn * fltNortheast; + } + + if ((intSouthwestX >= 0) && (intSouthwestX < SIZE_3(tenOutgrad)) && (intSouthwestY >= 0) && (intSouthwestY < SIZE_2(tenOutgrad))) { + fltFlowgrad += VALUE_4(tenOutgrad, intN, intChannel, intSouthwestY, intSouthwestX) * fltIn * fltSouthwest; + } + + if ((intSoutheastX >= 0) && (intSoutheastX < SIZE_3(tenOutgrad)) && (intSoutheastY >= 0) && (intSoutheastY < SIZE_2(tenOutgrad))) { + fltFlowgrad += VALUE_4(tenOutgrad, intN, intChannel, intSoutheastY, intSoutheastX) * fltIn * fltSoutheast; + } + } + + tenFlowgrad[intIndex] = fltFlowgrad; + } } +""" + +softsplat_ingrad = """ + extern "C" __global__ void __launch_bounds__(512) softsplat_ingrad( + const int n, + const {{type}}* __restrict__ tenIn, + const {{type}}* __restrict__ tenFlow, + const {{type}}* __restrict__ tenOutgrad, + {{type}}* __restrict__ tenIngrad, + {{type}}* __restrict__ tenFlowgrad + ) { for (int intIndex = (blockIdx.x * blockDim.x) + threadIdx.x; intIndex < n; intIndex += blockDim.x * gridDim.x) { + const int intN = ( intIndex / SIZE_3(tenIngrad) / SIZE_2(tenIngrad) / SIZE_1(tenIngrad) ) % SIZE_0(tenIngrad); + const int intC = ( intIndex / SIZE_3(tenIngrad) / SIZE_2(tenIngrad) ) % SIZE_1(tenIngrad); + const int intY = ( intIndex / SIZE_3(tenIngrad) ) % SIZE_2(tenIngrad); + const int intX = ( intIndex ) % SIZE_3(tenIngrad); + + assert(SIZE_1(tenFlow) == 2); + + {{type}} fltIngrad = 0.0f; + + {{type}} fltX = ({{type}}) (intX) + VALUE_4(tenFlow, intN, 0, intY, intX); + {{type}} fltY = ({{type}}) (intY) + VALUE_4(tenFlow, intN, 1, intY, intX); + + if (isfinite(fltX) == false) { return; } + if (isfinite(fltY) == false) { return; } + + int intNorthwestX = (int) (floor(fltX)); + int intNorthwestY = (int) (floor(fltY)); + int intNortheastX = intNorthwestX + 1; + int intNortheastY = intNorthwestY; + int intSouthwestX = intNorthwestX; + int intSouthwestY = intNorthwestY + 1; + int intSoutheastX = intNorthwestX + 1; + int intSoutheastY = intNorthwestY + 1; + + {{type}} fltNorthwest = (({{type}}) (intSoutheastX) - fltX) * (({{type}}) (intSoutheastY) - fltY); + {{type}} fltNortheast = (fltX - ({{type}}) (intSouthwestX)) * (({{type}}) (intSouthwestY) - fltY); + {{type}} fltSouthwest = (({{type}}) (intNortheastX) - fltX) * (fltY - ({{type}}) (intNortheastY)); + {{type}} fltSoutheast = (fltX - ({{type}}) (intNorthwestX)) * (fltY - ({{type}}) (intNorthwestY)); + + if ((intNorthwestX >= 0) && (intNorthwestX < SIZE_3(tenOutgrad)) && (intNorthwestY >= 0) && (intNorthwestY < SIZE_2(tenOutgrad))) { + fltIngrad += VALUE_4(tenOutgrad, intN, intC, intNorthwestY, intNorthwestX) * fltNorthwest; + } + + if ((intNortheastX >= 0) && (intNortheastX < SIZE_3(tenOutgrad)) && (intNortheastY >= 0) && (intNortheastY < SIZE_2(tenOutgrad))) { + fltIngrad += VALUE_4(tenOutgrad, intN, intC, intNortheastY, intNortheastX) * fltNortheast; + } + + if ((intSouthwestX >= 0) && (intSouthwestX < SIZE_3(tenOutgrad)) && (intSouthwestY >= 0) && (intSouthwestY < SIZE_2(tenOutgrad))) { + fltIngrad += VALUE_4(tenOutgrad, intN, intC, intSouthwestY, intSouthwestX) * fltSouthwest; + } + + if ((intSoutheastX >= 0) && (intSoutheastX < SIZE_3(tenOutgrad)) && (intSoutheastY >= 0) && (intSoutheastY < SIZE_2(tenOutgrad))) { + fltIngrad += VALUE_4(tenOutgrad, intN, intC, intSoutheastY, intSoutheastX) * fltSoutheast; + } + + tenIngrad[intIndex] = fltIngrad; + } } +""" + +softsplat_out = """ + extern "C" __global__ void __launch_bounds__(512) softsplat_out( + const int n, + const {{type}}* __restrict__ tenIn, + const {{type}}* __restrict__ tenFlow, + {{type}}* __restrict__ tenOut + ) { for (int intIndex = (blockIdx.x * blockDim.x) + threadIdx.x; intIndex < n; intIndex += blockDim.x * gridDim.x) { + const int intN = ( intIndex / SIZE_3(tenOut) / SIZE_2(tenOut) / SIZE_1(tenOut) ) % SIZE_0(tenOut); + const int intC = ( intIndex / SIZE_3(tenOut) / SIZE_2(tenOut) ) % SIZE_1(tenOut); + const int intY = ( intIndex / SIZE_3(tenOut) ) % SIZE_2(tenOut); + const int intX = ( intIndex ) % SIZE_3(tenOut); + + assert(SIZE_1(tenFlow) == 2); + + {{type}} fltX = ({{type}}) (intX) + VALUE_4(tenFlow, intN, 0, intY, intX); + {{type}} fltY = ({{type}}) (intY) + VALUE_4(tenFlow, intN, 1, intY, intX); + + if (isfinite(fltX) == false) { return; } + if (isfinite(fltY) == false) { return; } + + {{type}} fltIn = VALUE_4(tenIn, intN, intC, intY, intX); + + int intNorthwestX = (int) (floor(fltX)); + int intNorthwestY = (int) (floor(fltY)); + int intNortheastX = intNorthwestX + 1; + int intNortheastY = intNorthwestY; + int intSouthwestX = intNorthwestX; + int intSouthwestY = intNorthwestY + 1; + int intSoutheastX = intNorthwestX + 1; + int intSoutheastY = intNorthwestY + 1; + + {{type}} fltNorthwest = (({{type}}) (intSoutheastX) - fltX) * (({{type}}) (intSoutheastY) - fltY); + {{type}} fltNortheast = (fltX - ({{type}}) (intSouthwestX)) * (({{type}}) (intSouthwestY) - fltY); + {{type}} fltSouthwest = (({{type}}) (intNortheastX) - fltX) * (fltY - ({{type}}) (intNortheastY)); + {{type}} fltSoutheast = (fltX - ({{type}}) (intNorthwestX)) * (fltY - ({{type}}) (intNorthwestY)); + + if ((intNorthwestX >= 0) && (intNorthwestX < SIZE_3(tenOut)) && (intNorthwestY >= 0) && (intNorthwestY < SIZE_2(tenOut))) { + atomicAdd(&tenOut[OFFSET_4(tenOut, intN, intC, intNorthwestY, intNorthwestX)], fltIn * fltNorthwest); + } + + if ((intNortheastX >= 0) && (intNortheastX < SIZE_3(tenOut)) && (intNortheastY >= 0) && (intNortheastY < SIZE_2(tenOut))) { + atomicAdd(&tenOut[OFFSET_4(tenOut, intN, intC, intNortheastY, intNortheastX)], fltIn * fltNortheast); + } + + if ((intSouthwestX >= 0) && (intSouthwestX < SIZE_3(tenOut)) && (intSouthwestY >= 0) && (intSouthwestY < SIZE_2(tenOut))) { + atomicAdd(&tenOut[OFFSET_4(tenOut, intN, intC, intSouthwestY, intSouthwestX)], fltIn * fltSouthwest); + } + + if ((intSoutheastX >= 0) && (intSoutheastX < SIZE_3(tenOut)) && (intSoutheastY >= 0) && (intSoutheastY < SIZE_2(tenOut))) { + atomicAdd(&tenOut[OFFSET_4(tenOut, intN, intC, intSoutheastY, intSoutheastX)], fltIn * fltSoutheast); + } + } } +""" + + +# end + +class softsplat_func(torch.autograd.Function): + @staticmethod + @torch.cuda.amp.custom_fwd(cast_inputs=torch.float32) + def forward(self, tenIn, tenFlow): + tenOut = tenIn.new_zeros( + [tenIn.shape[0], tenIn.shape[1], tenIn.shape[2], tenIn.shape[3]] + ) + + if tenIn.is_cuda == True: + cuda_launch( + cuda_kernel( + "softsplat_out", + softsplat_out, + {"tenIn": tenIn, "tenFlow": tenFlow, "tenOut": tenOut}, + ) + )( + grid=tuple([int((tenOut.nelement() + 512 - 1) / 512), 1, 1]), + block=tuple([512, 1, 1]), + args=[ + cuda_int32(tenOut.nelement()), + tenIn.data_ptr(), + tenFlow.data_ptr(), + tenOut.data_ptr(), + ], + stream=collections.namedtuple("Stream", "ptr")( + torch.cuda.current_stream().cuda_stream + ), + ) + + elif tenIn.is_cuda != True: + assert False + + # end + + self.save_for_backward(tenIn, tenFlow) + + return tenOut + + # end + + @staticmethod + @torch.cuda.amp.custom_bwd + def backward(self, tenOutgrad): + tenIn, tenFlow = self.saved_tensors + + tenOutgrad = tenOutgrad.contiguous() + assert tenOutgrad.is_cuda == True + + tenIngrad = ( + tenIn.new_zeros( + [tenIn.shape[0], tenIn.shape[1], tenIn.shape[2], tenIn.shape[3]] + ) + if self.needs_input_grad[0] == True + else None + ) + tenFlowgrad = ( + tenFlow.new_zeros( + [tenFlow.shape[0], tenFlow.shape[1], tenFlow.shape[2], tenFlow.shape[3]] + ) + if self.needs_input_grad[1] == True + else None + ) + + if tenIngrad is not None: + cuda_launch( + cuda_kernel( + "softsplat_ingrad", + softsplat_ingrad, + { + "tenIn": tenIn, + "tenFlow": tenFlow, + "tenOutgrad": tenOutgrad, + "tenIngrad": tenIngrad, + "tenFlowgrad": tenFlowgrad, + }, + ) + )( + grid=tuple([int((tenIngrad.nelement() + 512 - 1) / 512), 1, 1]), + block=tuple([512, 1, 1]), + args=[ + cuda_int32(tenIngrad.nelement()), + tenIn.data_ptr(), + tenFlow.data_ptr(), + tenOutgrad.data_ptr(), + tenIngrad.data_ptr(), + None, + ], + stream=collections.namedtuple("Stream", "ptr")( + torch.cuda.current_stream().cuda_stream + ), + ) + # end + + if tenFlowgrad is not None: + cuda_launch( + cuda_kernel( + "softsplat_flowgrad", + softsplat_flowgrad, + { + "tenIn": tenIn, + "tenFlow": tenFlow, + "tenOutgrad": tenOutgrad, + "tenIngrad": tenIngrad, + "tenFlowgrad": tenFlowgrad, + }, + ) + )( + grid=tuple([int((tenFlowgrad.nelement() + 512 - 1) / 512), 1, 1]), + block=tuple([512, 1, 1]), + args=[ + cuda_int32(tenFlowgrad.nelement()), + tenIn.data_ptr(), + tenFlow.data_ptr(), + tenOutgrad.data_ptr(), + None, + tenFlowgrad.data_ptr(), + ], + stream=collections.namedtuple("Stream", "ptr")( + torch.cuda.current_stream().cuda_stream + ), + ) + # end + + return tenIngrad, tenFlowgrad + + # end + + +def FunctionSoftsplat(tenInput, tenFlow, tenMetric, strType): + assert tenMetric is None or tenMetric.shape[1] == 1 + assert strType in ["summation", "average", "linear", "softmax"] + + if strType == "average": + tenInput = torch.cat( + [ + tenInput, + tenInput.new_ones( + tenInput.shape[0], 1, tenInput.shape[2], tenInput.shape[3] + ), + ], + 1, + ) + + elif strType == "linear": + tenInput = torch.cat([tenInput * tenMetric, tenMetric], 1) + + elif strType == "softmax": + tenInput = torch.cat([tenInput * tenMetric.exp(), tenMetric.exp()], 1) + + # end + + tenOutput = softsplat_func.apply(tenInput, tenFlow) + + if strType != "summation": + tenNormalize = tenOutput[:, -1:, :, :] + + tenNormalize[tenNormalize == 0.0] = 1.0 + + tenOutput = tenOutput[:, :-1, :, :] / tenNormalize + # end + + return tenOutput + + +# end + + +class ModuleSoftsplat(torch.nn.Module): + def __init__(self, strType): + super().__init__() + + self.strType = strType + + # end + + def forward(self, tenInput, tenFlow, tenMetric): + return FunctionSoftsplat(tenInput, tenFlow, tenMetric, self.strType) + + # end + + +# end + + + +def softsplat( + tenIn: torch.Tensor, tenFlow: torch.Tensor, tenMetric: torch.Tensor, strMode: str +): + assert strMode.split("-")[0] in ["sum", "avg", "linear", "soft"] + + if strMode == "sum": + assert tenMetric is None + if strMode == "avg": + assert tenMetric is None + if strMode.split("-")[0] == "linear": + assert tenMetric is not None + if strMode.split("-")[0] == "soft": + assert tenMetric is not None + + if strMode == "avg": + tenIn = torch.cat( + [ + tenIn, + tenIn.new_ones([tenIn.shape[0], 1, tenIn.shape[2], tenIn.shape[3]]), + ], + 1, + ) + + elif strMode.split("-")[0] == "linear": + tenIn = torch.cat([tenIn * tenMetric, tenMetric], 1) + + elif strMode.split("-")[0] == "soft": + tenIn = torch.cat([tenIn * tenMetric.exp(), tenMetric.exp()], 1) + + # end + + tenOut = softsplat_func.apply(tenIn, tenFlow) + + if strMode.split("-")[0] in ["avg", "linear", "soft"]: + tenNormalize = tenOut[:, -1:, :, :] + + if len(strMode.split("-")) == 1: + tenNormalize = tenNormalize + 0.0000001 + + elif strMode.split("-")[1] == "addeps": + tenNormalize = tenNormalize + 0.0000001 + + elif strMode.split("-")[1] == "zeroeps": + tenNormalize[tenNormalize == 0.0] = 1.0 + + elif strMode.split("-")[1] == "clipeps": + tenNormalize = tenNormalize.clip(0.0000001, None) + + # end + + tenOut = tenOut[:, :-1, :, :] / tenNormalize + # end + + return tenOut + + +# end + +__all__ = ["FunctionSoftsplat", "ModuleSoftsplat", "softsplat", "softsplat_func"] diff --git a/comfyui-frame-interpolation/vfi_models/ops/cupy_ops/utils.py b/comfyui-frame-interpolation/vfi_models/ops/cupy_ops/utils.py new file mode 100644 index 0000000000000000000000000000000000000000..ec29a48e11955eb9f9f8aa36b1542721dd362345 --- /dev/null +++ b/comfyui-frame-interpolation/vfi_models/ops/cupy_ops/utils.py @@ -0,0 +1,242 @@ +import cupy +import os +import re +import torch +import typing +from pathlib import Path +import platform + +########################################################## + + +objCudacache = {} + + +def cuda_int32(intIn: int): + return cupy.int32(intIn) + + +# end + + +def cuda_float32(fltIn: float): + return cupy.float32(fltIn) + + +# end + + +def cuda_kernel(strFunction: str, strKernel: str, objVariables: typing.Dict, **replace_kwargs): + if "device" not in objCudacache: + objCudacache["device"] = torch.cuda.get_device_name() + # end + + strKey = strFunction + + for strVariable in objVariables: + objValue = objVariables[strVariable] + + strKey += strVariable + + if objValue is None: + continue + + elif type(objValue) == int: + strKey += str(objValue) + + elif type(objValue) == float: + strKey += str(objValue) + + elif type(objValue) == bool: + strKey += str(objValue) + + elif type(objValue) == str: + strKey += objValue + + elif type(objValue) == torch.Tensor: + strKey += str(objValue.dtype) + strKey += str(objValue.shape) + strKey += str(objValue.stride()) + + elif True: + print(strVariable, type(objValue)) + assert False + + # end + # end + + strKey += objCudacache["device"] + + if strKey not in objCudacache: + for strVariable in objVariables: + objValue = objVariables[strVariable] + + if objValue is None: + continue + + elif type(objValue) == int: + strKernel = strKernel.replace("{{" + strVariable + "}}", str(objValue)) + + elif type(objValue) == float: + strKernel = strKernel.replace("{{" + strVariable + "}}", str(objValue)) + + elif type(objValue) == bool: + strKernel = strKernel.replace("{{" + strVariable + "}}", str(objValue)) + + elif type(objValue) == str: + strKernel = strKernel.replace("{{" + strVariable + "}}", objValue) + + elif type(objValue) == torch.Tensor and objValue.dtype == torch.uint8: + strKernel = strKernel.replace("{{type}}", "unsigned char") + + elif type(objValue) == torch.Tensor and objValue.dtype == torch.float16: + strKernel = strKernel.replace("{{type}}", "half") + + elif type(objValue) == torch.Tensor and objValue.dtype == torch.float32: + strKernel = strKernel.replace("{{type}}", "float") + + elif type(objValue) == torch.Tensor and objValue.dtype == torch.float64: + strKernel = strKernel.replace("{{type}}", "double") + + elif type(objValue) == torch.Tensor and objValue.dtype == torch.int32: + strKernel = strKernel.replace("{{type}}", "int") + + elif type(objValue) == torch.Tensor and objValue.dtype == torch.int64: + strKernel = strKernel.replace("{{type}}", "long") + + elif type(objValue) == torch.Tensor: + print(strVariable, objValue.dtype) + assert False + + elif True: + print(strVariable, type(objValue)) + assert False + + # end + # end + + while True: + objMatch = re.search("(SIZE_)([0-4])(\()([^\)]*)(\))", strKernel) + + if objMatch is None: + break + # end + + intArg = int(objMatch.group(2)) + + strTensor = objMatch.group(4) + intSizes = objVariables[strTensor].size() + + strKernel = strKernel.replace(objMatch.group(), str(intSizes[intArg])) + # end + + while True: + objMatch = re.search("(OFFSET_)([0-4])(\()([^\)]+)(\))", strKernel) + + if objMatch is None: + break + # end + + intArgs = int(objMatch.group(2)) + strArgs = objMatch.group(4).split(",") + + strTensor = strArgs[0] + intStrides = objVariables[strTensor].stride() + strIndex = [ + "((" + + strArgs[intArg + 1].replace("{", "(").replace("}", ")").strip() + + ")*" + + str(intStrides[intArg]) + + ")" + for intArg in range(intArgs) + ] + + strKernel = strKernel.replace( + objMatch.group(0), "(" + str.join("+", strIndex) + ")" + ) + # end + + while True: + objMatch = re.search("(VALUE_)([0-4])(\()", strKernel) + + if objMatch is None: + break + # end + + intStart = objMatch.span()[1] + intStop = objMatch.span()[1] + intParentheses = 1 + + while True: + intParentheses += 1 if strKernel[intStop] == "(" else 0 + intParentheses -= 1 if strKernel[intStop] == ")" else 0 + + if intParentheses == 0: + break + # end + + intStop += 1 + # end + + intArgs = int(objMatch.group(2)) + strArgs = strKernel[intStart:intStop].split(",") + + assert intArgs == len(strArgs) - 1 + + strTensor = strArgs[0] + intStrides = objVariables[strTensor].stride() + + strIndex = [] + + for intArg in range(intArgs): + strIndex.append( + "((" + + strArgs[intArg + 1].replace("{", "(").replace("}", ")").strip() + + ")*" + + str(intStrides[intArg]) + + ")" + ) + # end + + strKernel = strKernel.replace( + "VALUE_" + str(intArgs) + "(" + strKernel[intStart:intStop] + ")", + strTensor + "[" + str.join("+", strIndex) + "]", + ) + # end + + for replace_key, value in replace_kwargs.items(): + strKernel = strKernel.replace(replace_key, value) + + objCudacache[strKey] = {"strFunction": strFunction, "strKernel": strKernel} + # end + + return strKey + + +# end +def get_cuda_home_path(): + if "CUDA_HOME" in os.environ: + return os.environ["CUDA_HOME"] + import torch + torch_lib_path = Path(torch.__file__).parent / "lib" + torch_lib_path = str(torch_lib_path.resolve()) + if os.path.exists(torch_lib_path): + nvrtc = filter(lambda lib_file: "nvrtc-builtins" in lib_file, os.listdir(torch_lib_path)) + nvrtc = list(nvrtc) + return torch_lib_path if len(nvrtc) > 0 else None + +@cupy.memoize(for_each_device=True) +def cuda_launch(strKey: str): + if True:#"CUDA_HOME" not in os.environ: + cuda_home = get_cuda_home_path() + if cuda_home is not None: + os.environ["CUDA_HOME"] = cuda_home + os.environ["CUDA_PATH"] = cuda_home + else: + os.environ["CUDA_HOME"] = "/usr/local/cuda/" + os.environ["CUDA_PATH"] = "/usr/local/cuda/" + # print(objCudacache[strKey]['strKernel']) + # return cupy.cuda.compile_with_cache(objCudacache[strKey]['strKernel'], tuple(['-I ' + os.environ['CUDA_HOME'], '-I ' + os.environ['CUDA_HOME'] + '/include'])).get_function(objCudacache[strKey]['strFunction']) + return cupy.RawModule(code=objCudacache[strKey]["strKernel"]).get_function( + objCudacache[strKey]["strFunction"] + ) diff --git a/comfyui-frame-interpolation/vfi_models/ops/taichi_ops/__init__.py b/comfyui-frame-interpolation/vfi_models/ops/taichi_ops/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e36bb6cf71d64b17637b96712784de777eef1b28 --- /dev/null +++ b/comfyui-frame-interpolation/vfi_models/ops/taichi_ops/__init__.py @@ -0,0 +1,150 @@ +import comfy.model_management as model_management +import torch +import torch.multiprocessing as mp +from .worker_process import f +from .utils import to_shared_memory + +parent_conn, child_conn, process = None, None, None +device = model_management.get_torch_device() + +def req_to_taichi_process(op_name, *tensors): + global parent_conn, child_conn, process + if parent_conn is None: + mp.set_start_method('spawn', force=True) + parent_conn, child_conn = mp.Pipe() + process = mp.Process(target=f, args=(child_conn, device)) + process.start() + + tensors = to_shared_memory(tensors) + parent_conn.send((op_name, tensors)) + result = parent_conn.recv() + del tensors + + if type(result) not in [tuple, list]: + raise Exception(result) + + return [tensor.to(device) for tensor in result] + +def softsplat( + tenIn: torch.Tensor, tenFlow: torch.Tensor, tenMetric: torch.Tensor, strMode: str +): + assert strMode.split("-")[0] in ["sum", "avg", "linear", "soft"] + + if strMode == "sum": + assert tenMetric is None + if strMode == "avg": + assert tenMetric is None + if strMode.split("-")[0] == "linear": + assert tenMetric is not None + if strMode.split("-")[0] == "soft": + assert tenMetric is not None + + if strMode == "avg": + tenIn = torch.cat( + [ + tenIn, + tenIn.new_ones([tenIn.shape[0], 1, tenIn.shape[2], tenIn.shape[3]]), + ], + 1, + ) + + elif strMode.split("-")[0] == "linear": + tenIn = torch.cat([tenIn * tenMetric, tenMetric], 1) + + elif strMode.split("-")[0] == "soft": + tenIn = torch.cat([tenIn * tenMetric.exp(), tenMetric.exp()], 1) + + # end + + tenOut = req_to_taichi_process("softsplat_out", tenIn, tenFlow)[0] + + if strMode.split("-")[0] in ["avg", "linear", "soft"]: + tenNormalize = tenOut[:, -1:, :, :] + + if len(strMode.split("-")) == 1: + tenNormalize = tenNormalize + 0.0000001 + + elif strMode.split("-")[1] == "addeps": + tenNormalize = tenNormalize + 0.0000001 + + elif strMode.split("-")[1] == "zeroeps": + tenNormalize[tenNormalize == 0.0] = 1.0 + + elif strMode.split("-")[1] == "clipeps": + tenNormalize = tenNormalize.clip(0.0000001, None) + + # end + + tenOut = tenOut[:, :-1, :, :] / tenNormalize + # end + + return tenOut + +def FunctionSoftsplat(tenInput, tenFlow, tenMetric, strType): + assert tenMetric is None or tenMetric.shape[1] == 1 + assert strType in ["summation", "average", "linear", "softmax"] + + if strType == "average": + tenInput = torch.cat( + [ + tenInput, + tenInput.new_ones( + tenInput.shape[0], 1, tenInput.shape[2], tenInput.shape[3] + ), + ], + 1, + ) + + elif strType == "linear": + tenInput = torch.cat([tenInput * tenMetric, tenMetric], 1) + + elif strType == "softmax": + tenInput = torch.cat([tenInput * tenMetric.exp(), tenMetric.exp()], 1) + + # end + + tenOutput = req_to_taichi_process("softsplat_out", tenInput, tenFlow)[0] + + if strType != "summation": + tenNormalize = tenOutput[:, -1:, :, :] + + tenNormalize[tenNormalize == 0.0] = 1.0 + + tenOutput = tenOutput[:, :-1, :, :] / tenNormalize + # end + + return tenOutput + + +# end + + +class ModuleSoftsplat(torch.nn.Module): + def __init__(self, strType): + super(self).__init__() + + self.strType = strType + + # end + + def forward(self, tenInput, tenFlow, tenMetric): + return FunctionSoftsplat(tenInput, tenFlow, tenMetric, self.strType) + +def softsplat_func(tenIn, tenFlow): + return req_to_taichi_process("softsplat_out", tenIn, tenFlow)[0] + +class costvol_func: + @staticmethod + def apply(tenOne, tenTwo): + return req_to_taichi_process("costvol_out", tenOne, tenTwo)[0] + +class sepconv_func: + @staticmethod + def apply(tenIn, tenVer, tenHor): + return req_to_taichi_process("sepconv_out", tenIn, tenVer, tenHor)[0] + +def init(): + one_sample = torch.ones(1, 3, 16, 16, dtype=torch.float32, device=device) + softsplat_func(one_sample, one_sample) + costvol_func.apply(one_sample, one_sample) + sepconv_func.apply(one_sample, one_sample, one_sample) diff --git a/comfyui-frame-interpolation/vfi_models/ops/taichi_ops/adacof.py b/comfyui-frame-interpolation/vfi_models/ops/taichi_ops/adacof.py new file mode 100644 index 0000000000000000000000000000000000000000..acf2672e84b32f843018ee617b7800b9b884d4b1 --- /dev/null +++ b/comfyui-frame-interpolation/vfi_models/ops/taichi_ops/adacof.py @@ -0,0 +1,6 @@ +import torch +class FunctionAdaCoF(torch.autograd.Function): + # end + @staticmethod + def forward(ctx, input, weight, offset_i, offset_j, dilation): + raise NotImplementedError() diff --git a/comfyui-frame-interpolation/vfi_models/ops/taichi_ops/batch_edt.py b/comfyui-frame-interpolation/vfi_models/ops/taichi_ops/batch_edt.py new file mode 100644 index 0000000000000000000000000000000000000000..c1fe1fd4e2e6eb51cbad9d76d29cf2191c194d14 --- /dev/null +++ b/comfyui-frame-interpolation/vfi_models/ops/taichi_ops/batch_edt.py @@ -0,0 +1,2 @@ +def batch_edt(img, block=1024): + raise NotImplementedError() \ No newline at end of file diff --git a/comfyui-frame-interpolation/vfi_models/ops/taichi_ops/correlation.py b/comfyui-frame-interpolation/vfi_models/ops/taichi_ops/correlation.py new file mode 100644 index 0000000000000000000000000000000000000000..3782d1a930219681996d3e48361acf82b8866edc --- /dev/null +++ b/comfyui-frame-interpolation/vfi_models/ops/taichi_ops/correlation.py @@ -0,0 +1,15 @@ +import torch + +class _FunctionCorrelation(torch.autograd.Function): + @staticmethod + def forward(self, first, second): + raise NotImplementedError() + +def FunctionCorrelation(tenFirst, tenSecond): + raise NotImplementedError() + return _FunctionCorrelation.apply(tenFirst, tenSecond) + +class ModuleCorrelation(torch.nn.Module): + def __init__(self): + raise NotImplementedError() + super(ModuleCorrelation, self).__init__() \ No newline at end of file diff --git a/comfyui-frame-interpolation/vfi_models/ops/taichi_ops/costvol.py b/comfyui-frame-interpolation/vfi_models/ops/taichi_ops/costvol.py new file mode 100644 index 0000000000000000000000000000000000000000..a82b7273cd38b7ea19c99356ea762a6e4b58ff99 --- /dev/null +++ b/comfyui-frame-interpolation/vfi_models/ops/taichi_ops/costvol.py @@ -0,0 +1,26 @@ +import taichi as ti +import taichi.math as tm + +""" @ti.kernel +def costvol_out(tenOne: ti.types.ndarray(), tltOne: ti.types.ndarray(), tenTwo: ti.types.ndarray(), tenOut: ti.types.ndarray()): + N, C, H, W = tenOut.shape + for i, ch, y, x in ti.ndrange(N, C, H, W): + for intValue in range(tenOne.shape[1]): + tltOne[intValue] = tenOne[i, intValue, y, x] + + tenOut_ch = 0 + for intOy in range(y - 4, y + 4 + 1): + for intOx in range(x - 4, x + 4 + 1): + point = tm.ivec2(intOx, intOy) + fltValue = 0.0 + for intValue in range(ch): + if (point.y >= 0) and (point.y < H) and (point.x >= 0) and (point.x < W): + fltValue += ti.abs(tltOne[intValue] - tenTwo[i, intValue, point.y, point.x]) + else: + fltValue += ti.abs(tltOne[intValue]) + + tenOut[i, tenOut_ch, y, x] = fltValue / tenOne.shape[1] + tenOut_ch += 1 """ + +def worker_interface(op_name, tensors): + raise NotImplementedError(op_name) diff --git a/comfyui-frame-interpolation/vfi_models/ops/taichi_ops/raw_softsplat.py b/comfyui-frame-interpolation/vfi_models/ops/taichi_ops/raw_softsplat.py new file mode 100644 index 0000000000000000000000000000000000000000..0cfd3fd52484afa930939541c10c94c7b270d7bf --- /dev/null +++ b/comfyui-frame-interpolation/vfi_models/ops/taichi_ops/raw_softsplat.py @@ -0,0 +1,126 @@ +#Seperate taichi kernels to another file so that comfy.model_management won't be called in the new process + +import taichi as ti +import taichi.math as tm + +@ti.func +def put_to_tenOut(tenOut: ti.types.ndarray(), fltIn: ti.i32, flt: ti.i32, pos:tm.uvec2, i:ti.i32, ch:ti.i32): + N, C, H, W = tenOut.shape + if (pos.x >= 0) and (pos.x < W) and (pos.y >= 0) and (pos.y < H): + tenOut[i, ch, pos.y, pos.x] += fltIn * flt +@ti.kernel +def softsplat_out(tenIn: ti.types.ndarray(), tenFlow: ti.types.ndarray(), tenOut: ti.types.ndarray()): + N, C, H, W = tenIn.shape + for i, ch, y, x in ti.ndrange(N, C, H, W): + fltX = x + tenFlow[i, 0, y, x] + fltY = y + tenFlow[i, 1, y, x] + fltIn = tenIn[i, ch, y, x] + + northWest = tm.ivec2(ti.floor(fltX), ti.floor(fltY)) + northEast = northWest + [1, 0] + southWest = northWest + [0, 1] + southEast = northWest + [1, 1] + + fltNorthwest = (southEast.x - fltX) * (southEast.y - fltY) + fltNortheast = (fltX - southWest.x) * (southWest.y - fltY) + fltSouthwest = (northEast.x - fltX) * (fltY - northEast.y) + fltSoutheast = (fltX - northWest.x) * (fltY - northWest.y) + + put_to_tenOut(tenOut, fltIn, fltNorthwest, northWest, i, ch) + put_to_tenOut(tenOut, fltIn, fltNortheast, northEast, i, ch) + put_to_tenOut(tenOut, fltIn, fltSouthwest, southWest, i, ch) + put_to_tenOut(tenOut, fltIn, fltSoutheast, southEast, i, ch) + +@ti.func +def add_to_fltFlowgrad(fltFlowgrad, tenOutgrad, fltIn, flt, pos, i, ch): + N, C, H, W = tenOutgrad.shape + if (pos.x >= 0) and (pos.x < W) and (pos.y >= 0) and (pos.y < H): + fltFlowgrad += tenOutgrad[i, ch, pos.y, pos.x] * fltIn * flt + +@ti.kernel +def softsplat_flowgrad( + tenIn: ti.types.ndarray(), + tenFlow: ti.types.ndarray(), + tenOutgrad: ti.types.ndarray(), + tenIngrad: ti.types.ndarray(), + tenFlowgrad: ti.types.ndarray() +): + N, C, H, W = tenFlowgrad.shape + for i, ch, y, x in ti.ndrange(N, C, H, W): + fltFlowgrad = 0.0 + fltX = x + tenFlow[i, 0, y, x] + fltY = y + tenFlow[i, 1, y, x] + + northWest = tm.vec2(ti.floor(fltX, dtype=ti.i32), ti.floor(fltY, dtype=ti.i32)) + northEast = tm.vec2(northWest.x + 1, northWest.y) + southWest = tm.vec2(northWest.x, northWest.y + 1) + southEast = tm.vec2(northWest.x + 1, northWest.y + 1) + + if ch == 0: + fltNorthwest = -1.0 * (southEast.y - fltY) + fltNortheast = +1.0 * (southWest.y - fltY) + fltSouthwest = -1.0 * (fltY - northEast.y) + fltSoutheast = +1.0 * (fltY - northWest.y) + + elif ch == 1: + fltNorthwest = -1.0 * (southEast.x - fltX) + fltNortheast = -1.0 * (fltX - southWest.x) + fltSouthwest = +1.0 * (northEast.x - fltX) + fltSoutheast = +1.0 * (fltX - northWest.x) + + for outgrad_ch in ti.ndrange(tenOutgrad.shape[1]): + fltIn = tenIn[i, outgrad_ch, y, x] + add_to_fltFlowgrad(fltFlowgrad, tenOutgrad, fltIn, fltNorthwest, northWest, i, outgrad_ch) + add_to_fltFlowgrad(fltFlowgrad, tenOutgrad, fltIn, fltNortheast, northEast, i, outgrad_ch) + add_to_fltFlowgrad(fltFlowgrad, tenOutgrad, fltIn, fltSouthwest, southWest, i, outgrad_ch) + add_to_fltFlowgrad(fltFlowgrad, tenOutgrad, fltIn, fltSoutheast, southEast, i, outgrad_ch) + + tenFlowgrad[i] = fltFlowgrad #Is 'i' the same as intIndex? + +@ti.func +def add_to_fltIngrad(fltIngrad, tenOutgrad, flt, pos, i, ch): + N, C, H, W = tenOutgrad.shape + if (pos.x >= 0) and (pos.x < W) and (pos.y >= 0) and (pos.y < H): + fltIngrad += tenOutgrad[i, ch, pos.y, pos.x] * flt +@ti.kernel +def softsplat_ingrad( + tenIn: ti.types.ndarray(), + tenFlow: ti.types.ndarray(), + tenOutgrad: ti.types.ndarray(), + tenIngrad: ti.types.ndarray(), + tenFlowgrad: ti.types.ndarray() +): + N, C, H, W = tenIngrad.shape + for i, ch, y, x in ti.ndrange(N, C, H, W): + fltIngrad = 0.0 + fltX = x + tenFlow[i, 0, y, x] + fltY = y + tenFlow[i, 1, y, x] + + northWest = tm.vec2(ti.floor(fltX, dtype=ti.i32), ti.floor(fltY, dtype=ti.i32)) + northEast = tm.vec2(northWest.x + 1, northWest.y) + southWest = tm.vec2(northWest.x, northWest.y + 1) + southEast = tm.vec2(northWest.x + 1, northWest.y + 1) + + fltNorthwest = (southEast.x - fltX) * (southEast.y - fltY) + fltNortheast = (fltX - southWest.x) * (southWest.y - fltY) + fltSouthwest = (northEast.x - fltX) * (fltY - northEast.y) + fltSoutheast = (fltX - northWest.x) * (fltY - northWest.y) + + add_to_fltIngrad(fltIngrad, tenOutgrad, fltNorthwest, northWest, i, ch) + add_to_fltIngrad(fltIngrad, tenOutgrad, fltNortheast, northEast, i, ch) + add_to_fltIngrad(fltIngrad, tenOutgrad, fltSouthwest, southWest, i, ch) + add_to_fltIngrad(fltIngrad, tenOutgrad, fltSoutheast, southEast, i, ch) + tenIngrad[i] = fltIngrad + +# end + +def worker_interface(op_name, tensors): + if op_name == "softsplat_out": + tenIn, tenFlow = tensors + tenOut = tenIn.new_zeros(tenIn.shape) + softsplat_out(tenIn, tenFlow, tenOut) + return (tenOut, ) + + raise NotImplementedError(op_name) + +__all__ = ["worker_interface"] \ No newline at end of file diff --git a/comfyui-frame-interpolation/vfi_models/ops/taichi_ops/sepconv.py b/comfyui-frame-interpolation/vfi_models/ops/taichi_ops/sepconv.py new file mode 100644 index 0000000000000000000000000000000000000000..f9d8909befa072646f4077b10bd18f735c928218 --- /dev/null +++ b/comfyui-frame-interpolation/vfi_models/ops/taichi_ops/sepconv.py @@ -0,0 +1,39 @@ +import taichi as ti +import taichi.math as tm +from functools import reduce + +@ti.kernel +def sepconv_out(tenIn: ti.types.ndarray(), tenVer: ti.types.ndarray(), tenHor: ti.types.ndarray(), tenOut: ti.types.ndarray()): + N, C, H, W = tenIn.shape + intIndex = 0 + for i, ch, y, x in ti.ndrange(N, C, H, W): + fltOut, fltKahanc, fltKahany, fltKahant = 0.0, 0.0, 0.0, 0.0 + for intFy, intFx in ti.ndrange(tenVer.shape[1], tenHor.shape[1]): + fltKahany = tenIn[i, ch, y + intFy, x + intFx] * tenVer[i, intFy, y, x] * tenHor[i, intFx, y, x] + fltKahany = fltKahany - fltKahanc + fltKahant = fltOut + fltKahany + fltKahanc = (fltKahant - fltOut) - fltKahany + fltOut = fltKahant + tenOut[intIndex] = fltOut + intIndex += 1 + + +def worker_interface(op_name, tensors): + if op_name == "sepconv_out": + tenIn, tenVer, tenHor = tensors + real_tenOut_shape = [ + tenIn.shape[0], + tenIn.shape[1], + tenVer.shape[2] and tenHor.shape[2], + tenVer.shape[3] and tenHor.shape[3], + ] + tenOut = tenIn.new_zeros([ + int(reduce(lambda a, b: a * b, real_tenOut_shape)) + ]) + sepconv_out(tenIn, tenVer, tenHor, tenOut) + tenOut = tenOut.view(*real_tenOut_shape) + return (tenOut, ) + + raise NotImplementedError(op_name) + +__all__ = ["worker_interface"] \ No newline at end of file diff --git a/comfyui-frame-interpolation/vfi_models/ops/taichi_ops/utils.py b/comfyui-frame-interpolation/vfi_models/ops/taichi_ops/utils.py new file mode 100644 index 0000000000000000000000000000000000000000..ee42b2fb05c2230930d0fe4557db361a47b54708 --- /dev/null +++ b/comfyui-frame-interpolation/vfi_models/ops/taichi_ops/utils.py @@ -0,0 +1,11 @@ +import platform +import torch +def to_shared_memory(tensors: tuple[torch.Tensor]): + return [tensor.cpu() for tensor in tensors if tensor is not None] + """ if platform.system() == "Windows": + return [tensor.cpu() for tensor in tensors if tensor is not None] + + return [tensor.share_memory_() for tensor in tensors if tensor is not None] """ + +def to_device(tensors: tuple[torch.Tensor], device: torch.device): + return [tensor.to(device) for tensor in tensors if tensor is not None] \ No newline at end of file diff --git a/comfyui-frame-interpolation/vfi_models/ops/taichi_ops/worker_process.py b/comfyui-frame-interpolation/vfi_models/ops/taichi_ops/worker_process.py new file mode 100644 index 0000000000000000000000000000000000000000..586d06a9e310247fcdd2368f8e362eeaaddac1fd --- /dev/null +++ b/comfyui-frame-interpolation/vfi_models/ops/taichi_ops/worker_process.py @@ -0,0 +1,26 @@ +import torch.multiprocessing as mp +import torch +from .raw_softsplat import worker_interface as raw_softsplat +from .costvol import worker_interface as costvol +from .sepconv import worker_interface as sepconv +from .utils import to_shared_memory, to_device +import taichi as ti +import traceback + +def f(child_conn, device: torch.DeviceObjType): + ti.init(arch=ti.gpu) + while True: + op_name, tensors = child_conn.recv() + tensors = to_device(tensors, device) + try: + if "softsplat" in op_name: + result = raw_softsplat(op_name, tensors) + elif "costvol" in op_name: + result = costvol(op_name, tensors) + elif "sepconv" in op_name: + result = sepconv(op_name, tensors) + else: + raise NotImplementedError(op_name) + child_conn.send(to_shared_memory(result)) + except: + child_conn.send(traceback.format_exc()) diff --git a/comfyui-frame-interpolation/vfi_models/rife/__init__.py b/comfyui-frame-interpolation/vfi_models/rife/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..9c9e82dbeebcd7dcd49acc16703fbcea110d0657 --- /dev/null +++ b/comfyui-frame-interpolation/vfi_models/rife/__init__.py @@ -0,0 +1,107 @@ +import torch +from torch.utils.data import DataLoader +import pathlib +from vfi_utils import load_file_from_github_release, preprocess_frames, postprocess_frames, generic_frame_loop, InterpolationStateList +import typing +from comfy.model_management import get_torch_device +import re +from functools import cmp_to_key +from packaging import version + +MODEL_TYPE = pathlib.Path(__file__).parent.name +CKPT_NAME_VER_DICT = { + "rife40.pth": "4.0", + "rife41.pth": "4.0", + "rife42.pth": "4.2", + "rife43.pth": "4.3", + "rife44.pth": "4.3", + "rife45.pth": "4.5", + "rife46.pth": "4.6", + "rife47.pth": "4.7", + "rife48.pth": "4.7", + "rife49.pth": "4.7", + "sudo_rife4_269.662_testV1_scale1.pth": "4.0" + #Arch 4.10 doesn't work due to state dict mismatch + #TODO: Investigating and fix it + #"rife410.pth": "4.10", + #"rife411.pth": "4.10", + #"rife412.pth": "4.10" +} + +class RIFE_VFI: + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "ckpt_name": ( + sorted(list(CKPT_NAME_VER_DICT.keys()), key=lambda ckpt_name: version.parse(CKPT_NAME_VER_DICT[ckpt_name])), + {"default": "rife47.pth"} + ), + "frames": ("IMAGE", ), + "clear_cache_after_n_frames": ("INT", {"default": 10, "min": 1, "max": 1000}), + "multiplier": ("INT", {"default": 2, "min": 1}), + "fast_mode": ("BOOLEAN", {"default":True}), + "ensemble": ("BOOLEAN", {"default":True}), + "scale_factor": ([0.25, 0.5, 1.0, 2.0, 4.0], {"default": 1.0}) + }, + "optional": { + "optional_interpolation_states": ("INTERPOLATION_STATES", ) + } + } + + RETURN_TYPES = ("IMAGE", ) + FUNCTION = "vfi" + CATEGORY = "ComfyUI-Frame-Interpolation/VFI" + + def vfi( + self, + ckpt_name: typing.AnyStr, + frames: torch.Tensor, + clear_cache_after_n_frames = 10, + multiplier: typing.SupportsInt = 2, + fast_mode = False, + ensemble = False, + scale_factor = 1.0, + optional_interpolation_states: InterpolationStateList = None, + **kwargs + ): + """ + Perform video frame interpolation using a given checkpoint model. + + Args: + ckpt_name (str): The name of the checkpoint model to use. + frames (torch.Tensor): A tensor containing input video frames. + clear_cache_after_n_frames (int, optional): The number of frames to process before clearing CUDA cache + to prevent memory overflow. Defaults to 10. Lower numbers are safer but mean more processing time. + How high you should set it depends on how many input frames there are, input resolution (after upscaling), + how many times you want to multiply them, and how long you're willing to wait for the process to complete. + multiplier (int, optional): The multiplier for each input frame. 60 input frames * 2 = 120 output frames. Defaults to 2. + + Returns: + tuple: A tuple containing the output interpolated frames. + + Note: + This method interpolates frames in a video sequence using a specified checkpoint model. + It processes each frame sequentially, generating interpolated frames between them. + + To prevent memory overflow, it clears the CUDA cache after processing a specified number of frames. + """ + from .rife_arch import IFNet + model_path = load_file_from_github_release(MODEL_TYPE, ckpt_name) + arch_ver = CKPT_NAME_VER_DICT[ckpt_name] + interpolation_model = IFNet(arch_ver=arch_ver) + interpolation_model.load_state_dict(torch.load(model_path)) + interpolation_model.eval().to(get_torch_device()) + frames = preprocess_frames(frames) + + def return_middle_frame(frame_0, frame_1, timestep, model, scale_list, in_fast_mode, in_ensemble): + return model(frame_0, frame_1, timestep, scale_list, in_fast_mode, in_ensemble) + + scale_list = [8 / scale_factor, 4 / scale_factor, 2 / scale_factor, 1 / scale_factor] + + args = [interpolation_model, scale_list, fast_mode, ensemble] + out = postprocess_frames( + generic_frame_loop(type(self).__name__, frames, clear_cache_after_n_frames, multiplier, return_middle_frame, *args, + interpolation_states=optional_interpolation_states, dtype=torch.float32) + ) + return (out,) diff --git a/comfyui-frame-interpolation/vfi_models/rife/__pycache__/__init__.cpython-310.pyc b/comfyui-frame-interpolation/vfi_models/rife/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f0c4273950856094328ca9f2bafbfec1b164583f Binary files /dev/null and b/comfyui-frame-interpolation/vfi_models/rife/__pycache__/__init__.cpython-310.pyc differ diff --git a/comfyui-frame-interpolation/vfi_models/rife/__pycache__/rife_arch.cpython-310.pyc b/comfyui-frame-interpolation/vfi_models/rife/__pycache__/rife_arch.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6d546061280dc5058e141f3e03817b93ea158e1d Binary files /dev/null and b/comfyui-frame-interpolation/vfi_models/rife/__pycache__/rife_arch.cpython-310.pyc differ diff --git a/comfyui-frame-interpolation/vfi_models/rife/rife_arch.py b/comfyui-frame-interpolation/vfi_models/rife/rife_arch.py new file mode 100644 index 0000000000000000000000000000000000000000..cf2b4545298a1f34d8429e93f0aa4f43c06c090e --- /dev/null +++ b/comfyui-frame-interpolation/vfi_models/rife/rife_arch.py @@ -0,0 +1,586 @@ +""" +26-Dez-21 +https://github.com/hzwer/Practical-RIFE +https://github.com/hzwer/Practical-RIFE/blob/main/model/warplayer.py +https://github.com/HolyWu/vs-rife/blob/master/vsrife/__init__.py +""" +from torch.nn.parallel import DistributedDataParallel as DDP +from torch.optim import AdamW +import torch +import torch.nn.functional as F +import torch.nn as nn +import torch.optim as optim +import warnings +from comfy.model_management import get_torch_device + +device = get_torch_device() +backwarp_tenGrid = {} + + +class ResConv(nn.Module): + def __init__(self, c, dilation=1): + super(ResConv, self).__init__() + self.conv = nn.Conv2d(c, c, 3, 1, dilation, dilation=dilation, groups=1) + self.beta = nn.Parameter(torch.ones((1, c, 1, 1)), requires_grad=True) + self.relu = nn.LeakyReLU(0.2, True) + + def forward(self, x): + return self.relu(self.conv(x) * self.beta + x) + + +def warp(tenInput, tenFlow): + k = (str(tenFlow.device), str(tenFlow.size())) + if k not in backwarp_tenGrid: + tenHorizontal = ( + torch.linspace(-1.0, 1.0, tenFlow.shape[3], device=device) + .view(1, 1, 1, tenFlow.shape[3]) + .expand(tenFlow.shape[0], -1, tenFlow.shape[2], -1) + ) + tenVertical = ( + torch.linspace(-1.0, 1.0, tenFlow.shape[2], device=device) + .view(1, 1, tenFlow.shape[2], 1) + .expand(tenFlow.shape[0], -1, -1, tenFlow.shape[3]) + ) + backwarp_tenGrid[k] = torch.cat([tenHorizontal, tenVertical], 1).to(device) + + tenFlow = torch.cat( + [ + tenFlow[:, 0:1, :, :] / ((tenInput.shape[3] - 1.0) / 2.0), + tenFlow[:, 1:2, :, :] / ((tenInput.shape[2] - 1.0) / 2.0), + ], + 1, + ) + + g = (backwarp_tenGrid[k] + tenFlow).permute(0, 2, 3, 1) + + if tenInput.type() == "torch.cuda.HalfTensor": + g = g.half() + + padding_mode = "border" + if device.type == "mps": + # https://github.com/pytorch/pytorch/issues/125098 + padding_mode = "zeros" + g = g.clamp(-1, 1) + return torch.nn.functional.grid_sample( + input=tenInput, + grid=g, + mode="bilinear", + padding_mode=padding_mode, + align_corners=True, + ) + + +def conv( + in_planes, + out_planes, + kernel_size=3, + stride=1, + padding=1, + dilation=1, + arch_ver="4.0", +): + if arch_ver == "4.0": + return nn.Sequential( + nn.Conv2d( + in_planes, + out_planes, + kernel_size=kernel_size, + stride=stride, + padding=padding, + dilation=dilation, + bias=True, + ), + nn.PReLU(out_planes), + ) + if arch_ver in ["4.2", "4.3", "4.5", "4.6", "4.7", "4.10"]: + return nn.Sequential( + nn.Conv2d( + in_planes, + out_planes, + kernel_size=kernel_size, + stride=stride, + padding=padding, + dilation=dilation, + bias=True, + ), + nn.LeakyReLU(0.2, True), + ) + + +def conv_woact(in_planes, out_planes, kernel_size=3, stride=1, padding=1, dilation=1): + return nn.Sequential( + nn.Conv2d( + in_planes, + out_planes, + kernel_size=kernel_size, + stride=stride, + padding=padding, + dilation=dilation, + bias=True, + ), + ) + + +def conv_woact(in_planes, out_planes, kernel_size=3, stride=1, padding=1, dilation=1): + return nn.Sequential( + nn.Conv2d( + in_planes, + out_planes, + kernel_size=kernel_size, + stride=stride, + padding=padding, + dilation=dilation, + bias=True, + ) + ) + + +def deconv(in_planes, out_planes, kernel_size=4, stride=2, padding=1, arch_ver="4.0"): + if arch_ver == "4.0": + return nn.Sequential( + torch.nn.ConvTranspose2d( + in_channels=in_planes, + out_channels=out_planes, + kernel_size=4, + stride=2, + padding=1, + bias=True, + ), + nn.PReLU(out_planes), + ) + if arch_ver in ["4.2", "4.3", "4.5", "4.6", "4.7", "4.10"]: + return nn.Sequential( + torch.nn.ConvTranspose2d( + in_channels=in_planes, + out_channels=out_planes, + kernel_size=4, + stride=2, + padding=1, + bias=True, + ), + nn.LeakyReLU(0.2, True), + ) + + +class Conv2(nn.Module): + def __init__(self, in_planes, out_planes, stride=2, arch_ver="4.0"): + super(Conv2, self).__init__() + self.conv1 = conv(in_planes, out_planes, 3, stride, 1, arch_ver=arch_ver) + self.conv2 = conv(out_planes, out_planes, 3, 1, 1, arch_ver=arch_ver) + + def forward(self, x): + x = self.conv1(x) + x = self.conv2(x) + return x + + +class IFBlock(nn.Module): + def __init__(self, in_planes, c=64, arch_ver="4.0"): + super(IFBlock, self).__init__() + self.arch_ver = arch_ver + self.conv0 = nn.Sequential( + conv(in_planes, c // 2, 3, 2, 1, arch_ver=arch_ver), + conv(c // 2, c, 3, 2, 1, arch_ver=arch_ver), + ) + self.arch_ver = arch_ver + + if arch_ver in ["4.0", "4.2", "4.3"]: + self.convblock = nn.Sequential( + conv(c, c, arch_ver=arch_ver), + conv(c, c, arch_ver=arch_ver), + conv(c, c, arch_ver=arch_ver), + conv(c, c, arch_ver=arch_ver), + conv(c, c, arch_ver=arch_ver), + conv(c, c, arch_ver=arch_ver), + conv(c, c, arch_ver=arch_ver), + conv(c, c, arch_ver=arch_ver), + ) + self.lastconv = nn.ConvTranspose2d(c, 5, 4, 2, 1) + + if arch_ver in ["4.5", "4.6", "4.7", "4.10"]: + self.convblock = nn.Sequential( + ResConv(c), + ResConv(c), + ResConv(c), + ResConv(c), + ResConv(c), + ResConv(c), + ResConv(c), + ResConv(c), + ) + if arch_ver == "4.5": + self.lastconv = nn.Sequential( + nn.ConvTranspose2d(c, 4 * 5, 4, 2, 1), nn.PixelShuffle(2) + ) + if arch_ver in ["4.6", "4.7", "4.10"]: + self.lastconv = nn.Sequential( + nn.ConvTranspose2d(c, 4 * 6, 4, 2, 1), nn.PixelShuffle(2) + ) + + def forward(self, x, flow=None, scale=1): + x = F.interpolate( + x, scale_factor=1.0 / scale, mode="bilinear", align_corners=False + ) + if flow is not None: + flow = ( + F.interpolate( + flow, scale_factor=1.0 / scale, mode="bilinear", align_corners=False + ) + * 1.0 + / scale + ) + x = torch.cat((x, flow), 1) + feat = self.conv0(x) + if self.arch_ver == "4.0": + feat = self.convblock(feat) + feat + if self.arch_ver in ["4.2", "4.3", "4.5", "4.6", "4.7", "4.10"]: + feat = self.convblock(feat) + + tmp = self.lastconv(feat) + if self.arch_ver in ["4.0", "4.2", "4.3"]: + tmp = F.interpolate( + tmp, scale_factor=scale * 2, mode="bilinear", align_corners=False + ) + flow = tmp[:, :4] * scale * 2 + if self.arch_ver in ["4.5", "4.6", "4.7", "4.10"]: + tmp = F.interpolate( + tmp, scale_factor=scale, mode="bilinear", align_corners=False + ) + flow = tmp[:, :4] * scale + mask = tmp[:, 4:5] + return flow, mask + + +class Contextnet(nn.Module): + def __init__(self, arch_ver="4.0"): + super(Contextnet, self).__init__() + c = 16 + self.conv1 = Conv2(3, c, arch_ver=arch_ver) + self.conv2 = Conv2(c, 2 * c, arch_ver=arch_ver) + self.conv3 = Conv2(2 * c, 4 * c, arch_ver=arch_ver) + self.conv4 = Conv2(4 * c, 8 * c, arch_ver=arch_ver) + + def forward(self, x, flow): + x = self.conv1(x) + flow = ( + F.interpolate(flow, scale_factor=0.5, mode="bilinear", align_corners=False) + * 0.5 + ) + f1 = warp(x, flow) + x = self.conv2(x) + flow = ( + F.interpolate(flow, scale_factor=0.5, mode="bilinear", align_corners=False) + * 0.5 + ) + f2 = warp(x, flow) + x = self.conv3(x) + flow = ( + F.interpolate(flow, scale_factor=0.5, mode="bilinear", align_corners=False) + * 0.5 + ) + f3 = warp(x, flow) + x = self.conv4(x) + flow = ( + F.interpolate(flow, scale_factor=0.5, mode="bilinear", align_corners=False) + * 0.5 + ) + f4 = warp(x, flow) + return [f1, f2, f3, f4] + + +class Unet(nn.Module): + def __init__(self, arch_ver="4.0"): + super(Unet, self).__init__() + c = 16 + self.down0 = Conv2(17, 2 * c, arch_ver=arch_ver) + self.down1 = Conv2(4 * c, 4 * c, arch_ver=arch_ver) + self.down2 = Conv2(8 * c, 8 * c, arch_ver=arch_ver) + self.down3 = Conv2(16 * c, 16 * c, arch_ver=arch_ver) + self.up0 = deconv(32 * c, 8 * c, arch_ver=arch_ver) + self.up1 = deconv(16 * c, 4 * c, arch_ver=arch_ver) + self.up2 = deconv(8 * c, 2 * c, arch_ver=arch_ver) + self.up3 = deconv(4 * c, c, arch_ver=arch_ver) + self.conv = nn.Conv2d(c, 3, 3, 1, 1) + + def forward(self, img0, img1, warped_img0, warped_img1, mask, flow, c0, c1): + s0 = self.down0( + torch.cat((img0, img1, warped_img0, warped_img1, mask, flow), 1) + ) + s1 = self.down1(torch.cat((s0, c0[0], c1[0]), 1)) + s2 = self.down2(torch.cat((s1, c0[1], c1[1]), 1)) + s3 = self.down3(torch.cat((s2, c0[2], c1[2]), 1)) + x = self.up0(torch.cat((s3, c0[3], c1[3]), 1)) + x = self.up1(torch.cat((x, s2), 1)) + x = self.up2(torch.cat((x, s1), 1)) + x = self.up3(torch.cat((x, s0), 1)) + x = self.conv(x) + return torch.sigmoid(x) + + +""" +currently supports 4.0-4.12 + +4.0: 4.0, 4.1 +4.2: 4.2 +4.3: 4.3, 4.4 +4.5: 4.5 +4.6: 4.6 +4.7: 4.7, 4.8, 4.9 +4.10: 4.10 4.11 4.12 +""" + + +class IFNet(nn.Module): + def __init__(self, arch_ver="4.0"): + super(IFNet, self).__init__() + self.arch_ver = arch_ver + if arch_ver in ["4.0", "4.2", "4.3", "4.5", "4.6"]: + self.block0 = IFBlock(7, c=192, arch_ver=arch_ver) + self.block1 = IFBlock(8 + 4, c=128, arch_ver=arch_ver) + self.block2 = IFBlock(8 + 4, c=96, arch_ver=arch_ver) + self.block3 = IFBlock(8 + 4, c=64, arch_ver=arch_ver) + if arch_ver in ["4.7"]: + self.block0 = IFBlock(7 + 8, c=192, arch_ver=arch_ver) + self.block1 = IFBlock(8 + 4 + 8, c=128, arch_ver=arch_ver) + self.block2 = IFBlock(8 + 4 + 8, c=96, arch_ver=arch_ver) + self.block3 = IFBlock(8 + 4 + 8, c=64, arch_ver=arch_ver) + self.encode = nn.Sequential( + nn.Conv2d(3, 16, 3, 2, 1), nn.ConvTranspose2d(16, 4, 4, 2, 1) + ) + if arch_ver in ["4.10"]: + self.block0 = IFBlock(7 + 16, c=192) + self.block1 = IFBlock(8 + 4 + 16, c=128) + self.block2 = IFBlock(8 + 4 + 16, c=96) + self.block3 = IFBlock(8 + 4 + 16, c=64) + self.encode = nn.Sequential( + nn.Conv2d(3, 32, 3, 2, 1), + nn.LeakyReLU(0.2, True), + nn.Conv2d(32, 32, 3, 1, 1), + nn.LeakyReLU(0.2, True), + nn.Conv2d(32, 32, 3, 1, 1), + nn.LeakyReLU(0.2, True), + nn.ConvTranspose2d(32, 8, 4, 2, 1), + ) + + if arch_ver in ["4.0", "4.2", "4.3"]: + self.contextnet = Contextnet(arch_ver=arch_ver) + self.unet = Unet(arch_ver=arch_ver) + self.arch_ver = arch_ver + + def forward( + self, + img0, + img1, + timestep=0.5, + scale_list=[8, 4, 2, 1], + training=True, + fastmode=True, + ensemble=False, + return_flow=False, + ): + img0 = torch.clamp(img0, 0, 1) + img1 = torch.clamp(img1, 0, 1) + + n, c, h, w = img0.shape + ph = ((h - 1) // 64 + 1) * 64 + pw = ((w - 1) // 64 + 1) * 64 + padding = (0, pw - w, 0, ph - h) + img0 = F.pad(img0, padding) + img1 = F.pad(img1, padding) + x = torch.cat((img0, img1), 1) + + if training == False: + channel = x.shape[1] // 2 + img0 = x[:, :channel] + img1 = x[:, channel:] + if not torch.is_tensor(timestep): + timestep = (x[:, :1].clone() * 0 + 1) * timestep + else: + timestep = timestep.repeat(1, 1, img0.shape[2], img0.shape[3]) + + flow_list = [] + merged = [] + mask_list = [] + + if self.arch_ver in ["4.7", "4.10"]: + f0 = self.encode(img0[:, :3]) + f1 = self.encode(img1[:, :3]) + + warped_img0 = img0 + warped_img1 = img1 + flow = None + mask = None + block = [self.block0, self.block1, self.block2, self.block3] + + for i in range(4): + if flow is None: + # 4.0-4.6 + if self.arch_ver in ["4.0", "4.2", "4.3", "4.5", "4.6"]: + flow, mask = block[i]( + torch.cat((img0[:, :3], img1[:, :3], timestep), 1), + None, + scale=scale_list[i], + ) + if ensemble: + f1, m1 = block[i]( + torch.cat((img1[:, :3], img0[:, :3], 1 - timestep), 1), + None, + scale=scale_list[i], + ) + flow = (flow + torch.cat((f1[:, 2:4], f1[:, :2]), 1)) / 2 + mask = (mask + (-m1)) / 2 + + # 4.7+ + if self.arch_ver in ["4.7", "4.10"]: + flow, mask = block[i]( + torch.cat((img0[:, :3], img1[:, :3], f0, f1, timestep), 1), + None, + scale=scale_list[i], + ) + + if ensemble: + f_, m_ = block[i]( + torch.cat( + (img1[:, :3], img0[:, :3], f1, f0, 1 - timestep), 1 + ), + None, + scale=scale_list[i], + ) + flow = (flow + torch.cat((f_[:, 2:4], f_[:, :2]), 1)) / 2 + mask = (mask + (-m_)) / 2 + + else: + # 4.0-4.6 + if self.arch_ver in ["4.0", "4.2", "4.3", "4.5", "4.6"]: + f0, m0 = block[i]( + torch.cat( + (warped_img0[:, :3], warped_img1[:, :3], timestep, mask), 1 + ), + flow, + scale=scale_list[i], + ) + + if self.arch_ver in ["4.0"]: + if ( + i == 1 + and f0[:, :2].abs().max() > 32 + and f0[:, 2:4].abs().max() > 32 + and not training + ): + for k in range(4): + scale_list[k] *= 2 + flow, mask = block[0]( + torch.cat((img0[:, :3], img1[:, :3], timestep), 1), + None, + scale=scale_list[0], + ) + warped_img0 = warp(img0, flow[:, :2]) + warped_img1 = warp(img1, flow[:, 2:4]) + f0, m0 = block[i]( + torch.cat( + ( + warped_img0[:, :3], + warped_img1[:, :3], + timestep, + mask, + ), + 1, + ), + flow, + scale=scale_list[i], + ) + + # 4.7+ + if self.arch_ver in ["4.7", "4.10"]: + fd, m0 = block[i]( + torch.cat( + ( + warped_img0[:, :3], + warped_img1[:, :3], + warp(f0, flow[:, :2]), + warp(f1, flow[:, 2:4]), + timestep, + mask, + ), + 1, + ), + flow, + scale=scale_list[i], + ) + flow = flow + fd + + # 4.0-4.6 ensemble + if ensemble and self.arch_ver in [ + "4.0", + "4.2", + "4.3", + "4.5", + "4.6", + ]: + f1, m1 = block[i]( + torch.cat( + ( + warped_img1[:, :3], + warped_img0[:, :3], + 1 - timestep, + -mask, + ), + 1, + ), + torch.cat((flow[:, 2:4], flow[:, :2]), 1), + scale=scale_list[i], + ) + f0 = (f0 + torch.cat((f1[:, 2:4], f1[:, :2]), 1)) / 2 + m0 = (m0 + (-m1)) / 2 + + # 4.7+ ensemble + if ensemble and self.arch_ver in ["4.7", "4.10"]: + wf0 = warp(f0, flow[:, :2]) + wf1 = warp(f1, flow[:, 2:4]) + + f_, m_ = block[i]( + torch.cat( + ( + warped_img1[:, :3], + warped_img0[:, :3], + wf1, + wf0, + 1 - timestep, + -mask, + ), + 1, + ), + torch.cat((flow[:, 2:4], flow[:, :2]), 1), + scale=scale_list[i], + ) + fd = (fd + torch.cat((f_[:, 2:4], f_[:, :2]), 1)) / 2 + mask = (m0 + (-m_)) / 2 + + if self.arch_ver in ["4.0", "4.2", "4.3", "4.5", "4.6"]: + flow = flow + f0 + mask = mask + m0 + + if not ensemble and self.arch_ver in ["4.7", "4.10"]: + mask = m0 + + mask_list.append(mask) + flow_list.append(flow) + warped_img0 = warp(img0, flow[:, :2]) + warped_img1 = warp(img1, flow[:, 2:4]) + merged.append((warped_img0, warped_img1)) + + if self.arch_ver in ["4.0", "4.1", "4.2", "4.3", "4.4", "4.5", "4.6"]: + mask_list[3] = torch.sigmoid(mask_list[3]) + merged[3] = merged[3][0] * mask_list[3] + merged[3][1] * (1 - mask_list[3]) + + if self.arch_ver in ["4.7", "4.10"]: + mask = torch.sigmoid(mask) + merged[3] = warped_img0 * mask + warped_img1 * (1 - mask) + + if not fastmode and self.arch_ver in ["4.0", "4.2", "4.3"]: + c0 = self.contextnet(img0, flow[:, :2]) + c1 = self.contextnet(img1, flow[:, 2:4]) + tmp = self.unet(img0, img1, warped_img0, warped_img1, mask, flow, c0, c1) + res = tmp[:, :3] * 2 - 1 + merged[3] = torch.clamp(merged[3] + res, 0, 1) + return merged[3][:, :, :h, :w] \ No newline at end of file diff --git a/comfyui-frame-interpolation/vfi_models/sepconv/__init__.py b/comfyui-frame-interpolation/vfi_models/sepconv/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..eb62e76289052ff8a0bc7c9260b664c62e2e033a --- /dev/null +++ b/comfyui-frame-interpolation/vfi_models/sepconv/__init__.py @@ -0,0 +1,56 @@ +import torch +from torch.utils.data import DataLoader +import pathlib +from vfi_utils import load_file_from_github_release, preprocess_frames, postprocess_frames +import typing +from comfy.model_management import soft_empty_cache, get_torch_device +from vfi_utils import InterpolationStateList, generic_frame_loop + +MODEL_TYPE = pathlib.Path(__file__).parent.name +CKPT_NAMES = ["sepconv.pth"] + + +class SepconvVFI: + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "ckpt_name": (CKPT_NAMES, ), + "frames": ("IMAGE", ), + "clear_cache_after_n_frames": ("INT", {"default": 10, "min": 1, "max": 1000}), + "multiplier": ("INT", {"default": 2, "min": 2, "max": 1000}) + }, + "optional": { + "optional_interpolation_states": ("INTERPOLATION_STATES", ) + } + } + + RETURN_TYPES = ("IMAGE", ) + FUNCTION = "vfi" + CATEGORY = "ComfyUI-Frame-Interpolation/VFI" + + def vfi( + self, + ckpt_name: typing.AnyStr, + frames: torch.Tensor, + clear_cache_after_n_frames = 10, + multiplier: typing.SupportsInt = 2, + optional_interpolation_states: InterpolationStateList = None, + **kwargs + ): + from .sepconv_enhanced import Network + model_path = load_file_from_github_release(MODEL_TYPE, ckpt_name) + interpolation_model = Network() + interpolation_model.load_state_dict(torch.load(model_path)) + interpolation_model.eval().to(get_torch_device()) + frames = preprocess_frames(frames) + + def return_middle_frame(frame_0, frame_1, timestep, model): + return model(frame_0, frame_1) + + args = [interpolation_model] + out = postprocess_frames( + generic_frame_loop(type(self).__name__, frames, clear_cache_after_n_frames, multiplier, return_middle_frame, *args, + interpolation_states=optional_interpolation_states, use_timestep=False, dtype=torch.float32) + ) + return (out,) diff --git a/comfyui-frame-interpolation/vfi_models/sepconv/__pycache__/__init__.cpython-310.pyc b/comfyui-frame-interpolation/vfi_models/sepconv/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9715278fb5202c8da701a5f0e7db60bf3b3bdcb2 Binary files /dev/null and b/comfyui-frame-interpolation/vfi_models/sepconv/__pycache__/__init__.cpython-310.pyc differ diff --git a/comfyui-frame-interpolation/vfi_models/sepconv/sepconv_enhanced.py b/comfyui-frame-interpolation/vfi_models/sepconv/sepconv_enhanced.py new file mode 100644 index 0000000000000000000000000000000000000000..e5a747ee5053bd7b1053e1a432cf86a0164a2223 --- /dev/null +++ b/comfyui-frame-interpolation/vfi_models/sepconv/sepconv_enhanced.py @@ -0,0 +1,748 @@ +""" +23-nov-21 +https://github.com/sniklaus/revisiting-sepconv/blob/fea509d98157170df1fb35bf615bd41d98858e1a/run.py +https://github.com/sniklaus/revisiting-sepconv/blob/fea509d98157170df1fb35bf615bd41d98858e1a/sepconv/sepconv.py +Deleted stuffs about arguments_strModel and getopt +""" +#!/usr/bin/env python +import torch +import typing +from comfy.model_management import get_torch_device + +########################################################## +from vfi_models.ops import sepconv_func +########################################################## + + + + + +import torch + +import math +import numpy +import os +import PIL +import PIL.Image +import sys +import typing + +########################################################## + +assert ( + int(str("").join(torch.__version__.split(".")[0:2])) >= 13 +) # requires at least pytorch version 1.3.0 + +torch.set_grad_enabled( + False +) # make sure to not compute gradients for computational performance + +torch.backends.cudnn.enabled = ( + True # make sure to use cudnn for computational performance +) + +########################################################## + +########################################################## + + +class Basic(torch.nn.Module): + def __init__( + self, + strType: str, + intChans: typing.List[int], + objScratch: typing.Optional[typing.Dict] = None, + ): + super().__init__() + + self.strType = strType + self.netEvenize = None + self.netMain = None + self.netShortcut = None + + intIn = intChans[0] + intOut = intChans[-1] + netMain = [] + intChans = intChans.copy() + fltStride = 1.0 + + for intPart, strPart in enumerate(self.strType.split("+")[0].split("-")): + if strPart.startswith("conv") == True: + intKsize = 3 + intPad = 1 + strPad = "zeros" + + if "(" in strPart: + intKsize = int(strPart.split("(")[1].split(")")[0].split(",")[0]) + intPad = int(math.floor(0.5 * (intKsize - 1))) + + if "replpad" in strPart.split("(")[1].split(")")[0].split(","): + strPad = "replicate" + if "reflpad" in strPart.split("(")[1].split(")")[0].split(","): + strPad = "reflect" + # end + + if "nopad" in self.strType.split("+"): + intPad = 0 + # end + + netMain += [ + torch.nn.Conv2d( + in_channels=intChans[0], + out_channels=intChans[1], + kernel_size=intKsize, + stride=1, + padding=intPad, + padding_mode=strPad, + bias="nobias" not in self.strType.split("+"), + ) + ] + intChans = intChans[1:] + fltStride *= 1.0 + + elif strPart.startswith("sconv") == True: + intKsize = 3 + intPad = 1 + strPad = "zeros" + + if "(" in strPart: + intKsize = int(strPart.split("(")[1].split(")")[0].split(",")[0]) + intPad = int(math.floor(0.5 * (intKsize - 1))) + + if "replpad" in strPart.split("(")[1].split(")")[0].split(","): + strPad = "replicate" + if "reflpad" in strPart.split("(")[1].split(")")[0].split(","): + strPad = "reflect" + # end + + if "nopad" in self.strType.split("+"): + intPad = 0 + # end + + netMain += [ + torch.nn.Conv2d( + in_channels=intChans[0], + out_channels=intChans[1], + kernel_size=intKsize, + stride=2, + padding=intPad, + padding_mode=strPad, + bias="nobias" not in self.strType.split("+"), + ) + ] + intChans = intChans[1:] + fltStride *= 2.0 + + elif strPart.startswith("up") == True: + + class Up(torch.nn.Module): + def __init__(self, strType): + super().__init__() + + self.strType = strType + + # end + + def forward(self, tenIn: torch.Tensor) -> torch.Tensor: + if self.strType == "nearest": + return torch.nn.functional.interpolate( + input=tenIn, + scale_factor=2.0, + mode="nearest", + align_corners=False, + ) + + elif self.strType == "bilinear": + return torch.nn.functional.interpolate( + input=tenIn, + scale_factor=2.0, + mode="bilinear", + align_corners=False, + ) + + elif self.strType == "pyramid": + return pyramid(tenIn, None, "up") + + elif self.strType == "shuffle": + return torch.nn.functional.pixel_shuffle( + tenIn, upscale_factor=2 + ) # https://github.com/pytorch/pytorch/issues/62854 + + # end + + assert False # to make torchscript happy + + # end + + # end + + strType = "bilinear" + + if "(" in strPart: + if "nearest" in strPart.split("(")[1].split(")")[0].split(","): + strType = "nearest" + if "pyramid" in strPart.split("(")[1].split(")")[0].split(","): + strType = "pyramid" + if "shuffle" in strPart.split("(")[1].split(")")[0].split(","): + strType = "shuffle" + # end + + netMain += [Up(strType)] + fltStride *= 0.5 + + elif strPart.startswith("prelu") == True: + netMain += [ + torch.nn.PReLU( + num_parameters=1, + init=float(strPart.split("(")[1].split(")")[0].split(",")[0]), + ) + ] + fltStride *= 1.0 + + elif True: + assert False + + # end + # end + + self.netMain = torch.nn.Sequential(*netMain) + + for strPart in self.strType.split("+")[1:]: + if strPart.startswith("skip") == True: + if intIn == intOut and fltStride == 1.0: + self.netShortcut = torch.nn.Identity() + + elif intIn != intOut and fltStride == 1.0: + self.netShortcut = torch.nn.Conv2d( + in_channels=intIn, + out_channels=intOut, + kernel_size=1, + stride=1, + padding=0, + bias="nobias" not in self.strType.split("+"), + ) + + elif intIn == intOut and fltStride != 1.0: + + class Down(torch.nn.Module): + def __init__(self, fltScale): + super().__init__() + + self.fltScale = fltScale + + # end + + def forward(self, tenIn: torch.Tensor) -> torch.Tensor: + return torch.nn.functional.interpolate( + input=tenIn, + scale_factor=self.fltScale, + mode="bilinear", + align_corners=False, + ) + + # end + + # end + + self.netShortcut = Down(1.0 / fltStride) + + elif intIn != intOut and fltStride != 1.0: + + class Down(torch.nn.Module): + def __init__(self, fltScale): + super().__init__() + + self.fltScale = fltScale + + # end + + def forward(self, tenIn: torch.Tensor) -> torch.Tensor: + return torch.nn.functional.interpolate( + input=tenIn, + scale_factor=self.fltScale, + mode="bilinear", + align_corners=False, + ) + + # end + + # end + + self.netShortcut = torch.nn.Sequential( + Down(1.0 / fltStride), + torch.nn.Conv2d( + in_channels=intIn, + out_channels=intOut, + kernel_size=1, + stride=1, + padding=0, + bias="nobias" not in self.strType.split("+"), + ), + ) + + # end + + elif strPart.startswith("...") == True: + pass + + # end + # end + + assert len(intChans) == 1 + + # end + + def forward(self, tenIn: torch.Tensor) -> torch.Tensor: + if self.netEvenize is not None: + tenIn = self.netEvenize(tenIn) + # end + + tenOut = self.netMain(tenIn) + + if self.netShortcut is not None: + tenOut = tenOut + self.netShortcut(tenIn) + # end + + return tenOut + + # end + + +# end + + +class Encode(torch.nn.Module): + objScratch: typing.Dict[str, typing.List[int]] = None + + def __init__( + self, + intIns: typing.List[int], + intOuts: typing.List[int], + strHor: str, + strVer: str, + objScratch: typing.Dict[str, typing.List[int]], + ): + super().__init__() + + assert len(intIns) == len(intOuts) + assert len(intOuts) == len(intIns) + + self.intRows = len(intIns) and len(intOuts) + self.intIns = intIns.copy() + self.intOuts = intOuts.copy() + self.strHor = strHor + self.strVer = strVer + self.objScratch = objScratch + + self.netHor = torch.nn.ModuleList() + self.netVer = torch.nn.ModuleList() + + for intRow in range(self.intRows): + netHor = torch.nn.Identity() + netVer = torch.nn.Identity() + + if self.intOuts[intRow] != 0: + if self.intIns[intRow] != 0: + netHor = Basic( + self.strHor, + [ + self.intIns[intRow], + self.intOuts[intRow], + self.intOuts[intRow], + ], + objScratch, + ) + # end + + if intRow != 0: + netVer = Basic( + self.strVer, + [ + self.intOuts[intRow - 1], + self.intOuts[intRow], + self.intOuts[intRow], + ], + objScratch, + ) + # end + # end + + self.netHor.append(netHor) + self.netVer.append(netVer) + # end + + # end + + def forward(self, tenIns: typing.List[torch.Tensor]) -> typing.List[torch.Tensor]: + intRow = 0 + for netHor in self.netHor: + if self.intOuts[intRow] != 0: + if self.intIns[intRow] != 0: + tenIns[intRow] = netHor(tenIns[intRow]) + # end + # end + intRow += 1 + # end + + intRow = 0 + for netVer in self.netVer: + if self.intOuts[intRow] != 0: + if intRow != 0: + tenIns[intRow] = tenIns[intRow] + netVer(tenIns[intRow - 1]) + # end + # end + intRow += 1 + # end + + for intRow, tenIn in enumerate(tenIns): + self.objScratch["levelshape" + str(intRow)] = tenIn.shape + # end + + return tenIns + + # end + + +# end + + +class Decode(torch.nn.Module): + objScratch: typing.Dict[str, typing.List[int]] = None + + def __init__( + self, + intIns: typing.List[int], + intOuts: typing.List[int], + strHor: str, + strVer: str, + objScratch: typing.Dict[str, typing.List[int]], + ): + super().__init__() + + assert len(intIns) == len(intOuts) + assert len(intOuts) == len(intIns) + + self.intRows = len(intIns) and len(intOuts) + self.intIns = intIns.copy() + self.intOuts = intOuts.copy() + self.strHor = strHor + self.strVer = strVer + self.objScratch = objScratch + + self.netHor = torch.nn.ModuleList() + self.netVer = torch.nn.ModuleList() + + for intRow in range(self.intRows - 1, -1, -1): + netHor = torch.nn.Identity() + netVer = torch.nn.Identity() + + if self.intOuts[intRow] != 0: + if self.intIns[intRow] != 0: + netHor = Basic( + self.strHor, + [ + self.intIns[intRow], + self.intOuts[intRow], + self.intOuts[intRow], + ], + objScratch, + ) + # end + + if intRow != self.intRows - 1: + netVer = Basic( + self.strVer, + [ + self.intOuts[intRow + 1], + self.intOuts[intRow], + self.intOuts[intRow], + ], + objScratch, + ) + # end + # end + + self.netHor.append(netHor) + self.netVer.append(netVer) + # end + + # end + + def forward(self, tenIns: typing.List[torch.Tensor]) -> typing.List[torch.Tensor]: + intRow = self.intRows - 1 + for netHor in self.netHor: + if self.intOuts[intRow] != 0: + if self.intIns[intRow] != 0: + tenIns[intRow] = netHor(tenIns[intRow]) + # end + # end + intRow -= 1 + # end + + intRow = self.intRows - 1 + for netVer in self.netVer: + if self.intOuts[intRow] != 0: + if intRow != self.intRows - 1: + tenVer = netVer(tenIns[intRow + 1]) + + if "levelshape" + str(intRow) in self.objScratch: + if ( + tenVer.shape[2] + == self.objScratch["levelshape" + str(intRow)][2] + 1 + ): + tenVer = torch.nn.functional.pad( + input=tenVer, + pad=[0, 0, 0, -1], + mode="constant", + value=0.0, + ) + if ( + tenVer.shape[3] + == self.objScratch["levelshape" + str(intRow)][3] + 1 + ): + tenVer = torch.nn.functional.pad( + input=tenVer, + pad=[0, -1, 0, 0], + mode="constant", + value=0.0, + ) + # end + + tenIns[intRow] = tenIns[intRow] + tenVer + # end + # end + intRow -= 1 + # end + + return tenIns + + # end + + +# end + +########################################################## + + +class Network(torch.nn.Module): + def __init__(self): + super().__init__() + + self.intEncdec = [1, 1] + self.intChannels = [32, 64, 128, 256, 512] + + self.objScratch = {} + + self.netInput = torch.nn.Conv2d( + in_channels=3, + out_channels=int(round(0.5 * self.intChannels[0])), + kernel_size=3, + stride=1, + padding=1, + padding_mode="zeros", + ) + + self.netEncode = torch.nn.Sequential( + *( + [ + Encode( + [0] * len(self.intChannels), + self.intChannels, + "prelu(0.25)-conv(3)-prelu(0.25)-conv(3)+skip", + "prelu(0.25)-sconv(3)-prelu(0.25)-conv(3)", + self.objScratch, + ) + ] + + [ + Encode( + self.intChannels, + self.intChannels, + "prelu(0.25)-conv(3)-prelu(0.25)-conv(3)+skip", + "prelu(0.25)-sconv(3)-prelu(0.25)-conv(3)", + self.objScratch, + ) + for intEncdec in range(1, self.intEncdec[0]) + ] + ) + ) + + self.netDecode = torch.nn.Sequential( + *( + [ + Decode( + [0] + self.intChannels[1:], + [0] + self.intChannels[1:], + "prelu(0.25)-conv(3)-prelu(0.25)-conv(3)+skip", + "prelu(0.25)-up(bilinear)-conv(3)-prelu(0.25)-conv(3)", + self.objScratch, + ) + for intEncdec in range(0, self.intEncdec[1]) + ] + ) + ) + + self.netVerone = Basic( + "up(bilinear)-conv(3)-prelu(0.25)-conv(3)", + [self.intChannels[1], self.intChannels[1], 51], + ) + self.netVertwo = Basic( + "up(bilinear)-conv(3)-prelu(0.25)-conv(3)", + [self.intChannels[1], self.intChannels[1], 51], + ) + self.netHorone = Basic( + "up(bilinear)-conv(3)-prelu(0.25)-conv(3)", + [self.intChannels[1], self.intChannels[1], 51], + ) + self.netHortwo = Basic( + "up(bilinear)-conv(3)-prelu(0.25)-conv(3)", + [self.intChannels[1], self.intChannels[1], 51], + ) + + # self.load_state_dict(torch.hub.load_state_dict_from_url(url='http://content.sniklaus.com/resepconv/network-' + arguments_strModel + '.pytorch', file_name='resepconv-' + arguments_strModel)) + + # end + + def forward(self, x1, x2): + # padding if needed + intWidth = x1.shape[3] + intHeight = x1.shape[2] + + intPadr = (2 - (intWidth % 2)) % 2 + intPadb = (2 - (intHeight % 2)) % 2 + + tenOne = torch.nn.functional.pad( + input=x1, pad=[0, intPadr, 0, intPadb], mode="replicate" + ) + tenTwo = torch.nn.functional.pad( + input=x2, pad=[0, intPadr, 0, intPadb], mode="replicate" + ) + #### + + tenSeq = [tenOne, tenTwo] + + with torch.set_grad_enabled(False): + tenStack = torch.stack(tenSeq, 1) + tenMean = ( + tenStack.view(tenStack.shape[0], -1) + .mean(1, True) + .view(tenStack.shape[0], 1, 1, 1) + ) + tenStd = ( + tenStack.view(tenStack.shape[0], -1) + .std(1, True) + .view(tenStack.shape[0], 1, 1, 1) + ) + tenSeq = [ + (tenFrame - tenMean) / (tenStd + 0.0000001) for tenFrame in tenSeq + ] + tenSeq = [tenFrame.detach() for tenFrame in tenSeq] + # end + + tenOut = self.netDecode( + self.netEncode( + [torch.cat([self.netInput(tenSeq[0]), self.netInput(tenSeq[1])], 1)] + + ([0.0] * (len(self.intChannels) - 1)) + ) + )[1] + + tenOne = torch.nn.functional.pad( + input=tenOne, + pad=[ + int(math.floor(0.5 * 51)), + int(math.floor(0.5 * 51)), + int(math.floor(0.5 * 51)), + int(math.floor(0.5 * 51)), + ], + mode="replicate", + ) + tenTwo = torch.nn.functional.pad( + input=tenTwo, + pad=[ + int(math.floor(0.5 * 51)), + int(math.floor(0.5 * 51)), + int(math.floor(0.5 * 51)), + int(math.floor(0.5 * 51)), + ], + mode="replicate", + ) + + tenOne = torch.cat( + [ + tenOne, + tenOne.new_ones([tenOne.shape[0], 1, tenOne.shape[2], tenOne.shape[3]]), + ], + 1, + ).detach() + tenTwo = torch.cat( + [ + tenTwo, + tenTwo.new_ones([tenTwo.shape[0], 1, tenTwo.shape[2], tenTwo.shape[3]]), + ], + 1, + ).detach() + + tenVerone = self.netVerone(tenOut) + tenVertwo = self.netVertwo(tenOut) + tenHorone = self.netHorone(tenOut) + tenHortwo = self.netHortwo(tenOut) + + tenOut = sepconv_func.apply(tenOne, tenVerone, tenHorone) + sepconv_func.apply( + tenTwo, tenVertwo, tenHortwo + ) + + tenNormalize = tenOut[:, -1:, :, :] + tenNormalize[tenNormalize.abs() < 0.01] = 1.0 + tenOut = tenOut[:, :-1, :, :] / tenNormalize + + # crop if needed + return tenOut[:, :, :intHeight, :intWidth] + + # end + + +# end + +netNetwork = None + +########################################################## + + +def estimate(tenOne, tenTwo): + global netNetwork + + if netNetwork is None: + netNetwork = Network().to(get_torch_device()).eval() + # end + + assert tenOne.shape[1] == tenTwo.shape[1] + assert tenOne.shape[2] == tenTwo.shape[2] + + intWidth = tenOne.shape[2] + intHeight = tenOne.shape[1] + + assert ( + intWidth <= 1280 + ) # while our approach works with larger images, we do not recommend it unless you are aware of the implications + assert ( + intHeight <= 720 + ) # while our approach works with larger images, we do not recommend it unless you are aware of the implications + + tenPreprocessedOne = tenOne.to(get_torch_device()).view(1, 3, intHeight, intWidth) + tenPreprocessedTwo = tenTwo.to(get_torch_device()).view(1, 3, intHeight, intWidth) + + intPadr = (2 - (intWidth % 2)) % 2 + intPadb = (2 - (intHeight % 2)) % 2 + + tenPreprocessedOne = torch.nn.functional.pad( + input=tenPreprocessedOne, pad=[0, intPadr, 0, intPadb], mode="replicate" + ) + tenPreprocessedTwo = torch.nn.functional.pad( + input=tenPreprocessedTwo, pad=[0, intPadr, 0, intPadb], mode="replicate" + ) + + return netNetwork([tenPreprocessedOne, tenPreprocessedTwo])[ + 0, :, :intHeight, :intWidth + ].cpu() + + +# end diff --git a/comfyui-frame-interpolation/vfi_models/stmfnet/__init__.py b/comfyui-frame-interpolation/vfi_models/stmfnet/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..2d10f1ec96f25df510245e87bb7a41938ed4768b --- /dev/null +++ b/comfyui-frame-interpolation/vfi_models/stmfnet/__init__.py @@ -0,0 +1,100 @@ +import torch +from comfy.model_management import get_torch_device, soft_empty_cache +import numpy as np +import typing +from vfi_utils import InterpolationStateList, load_file_from_github_release, preprocess_frames, postprocess_frames, assert_batch_size +import pathlib +import warnings +import gc + +MODEL_TYPE = pathlib.Path(__file__).parent.name +device = get_torch_device() + +class STMFNet_VFI: + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "ckpt_name": (["stmfnet.pth"], ), + "frames": ("IMAGE", ), + "clear_cache_after_n_frames": ("INT", {"default": 10, "min": 1, "max": 1000}), + "multiplier": ("INT", {"default": 2, "min": 2, "max": 2}), #TODO: Implement recursively invoking interpolator for multi-frame interpolation + "duplicate_first_last_frames": ("BOOLEAN", {"default": False}) + }, + "optional": { + "optional_interpolation_states": ("INTERPOLATION_STATES", ) + } + } + + RETURN_TYPES = ("IMAGE", ) + FUNCTION = "vfi" + CATEGORY = "ComfyUI-Frame-Interpolation/VFI" + + #Reference: https://github.com/danier97/ST-MFNet/blob/main/interpolate_yuv.py#L93 + def vfi( + self, + ckpt_name: typing.AnyStr, + frames: torch.Tensor, + clear_cache_after_n_frames = 10, + multiplier: typing.SupportsInt = 2, + duplicate_first_last_frames: bool = False, + optional_interpolation_states: InterpolationStateList = None, + **kwargs + ): + from .stmfnet_arch import STMFNet_Model + if multiplier != 2: + warnings.warn("Currently, ST-MFNet only supports 2x interpolation. The process will continue but please set multiplier=2 afterward") + + assert_batch_size(frames, batch_size=4, vfi_name="ST-MFNet") + interpolation_states = optional_interpolation_states + model_path = load_file_from_github_release(MODEL_TYPE, ckpt_name) + model = STMFNet_Model() + model.load_state_dict(torch.load(model_path)['state_dict']) + model = model.eval().to(device) + + frames = preprocess_frames(frames) + number_of_frames_processed_since_last_cleared_cuda_cache = 0 + output_frames = [] + for frame_itr in range(len(frames) - 3): + #Does skipping frame i+1 make sanse in this case? + if interpolation_states is not None and interpolation_states.is_frame_skipped(frame_itr) and interpolation_states.is_frame_skipped(frame_itr + 1): + continue + + #Ensure that input frames are in fp32 - the same dtype as model + frame0, frame1, frame2, frame3 = ( + frames[frame_itr:frame_itr+1].float(), + frames[frame_itr+1:frame_itr+2].float(), + frames[frame_itr+2:frame_itr+3].float(), + frames[frame_itr+3:frame_itr+4].float() + ) + new_frame = model(frame0.to(device), frame1.to(device), frame2.to(device), frame3.to(device)).detach().cpu() + number_of_frames_processed_since_last_cleared_cuda_cache += 2 + + if frame_itr == 0: + output_frames.append(frame0) + if duplicate_first_last_frames: + output_frames.append(frame0) # repeat the first frame + output_frames.append(frame1) + output_frames.append(new_frame) + output_frames.append(frame2) + if frame_itr == len(frames) - 4: + output_frames.append(frame3) + if duplicate_first_last_frames: + output_frames.append(frame3) # repeat the last frame + + # Try to avoid a memory overflow by clearing cuda cache regularly + if number_of_frames_processed_since_last_cleared_cuda_cache >= clear_cache_after_n_frames: + print("Comfy-VFI: Clearing cache...", end = ' ') + soft_empty_cache() + number_of_frames_processed_since_last_cleared_cuda_cache = 0 + print("Done cache clearing") + gc.collect() + + dtype = torch.float32 + output_frames = [frame.cpu().to(dtype=dtype) for frame in output_frames] #Ensure all frames are in cpu + out = torch.cat(output_frames, dim=0) + # clear cache for courtesy + print("Comfy-VFI: Final clearing cache...", end = ' ') + soft_empty_cache() + print("Done cache clearing") + return (postprocess_frames(out), ) \ No newline at end of file diff --git a/comfyui-frame-interpolation/vfi_models/stmfnet/__pycache__/__init__.cpython-310.pyc b/comfyui-frame-interpolation/vfi_models/stmfnet/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3ab2ab2cf15f6644c7a08d72b914148966f4b05e Binary files /dev/null and b/comfyui-frame-interpolation/vfi_models/stmfnet/__pycache__/__init__.cpython-310.pyc differ diff --git a/comfyui-frame-interpolation/vfi_models/stmfnet/stmfnet_arch.py b/comfyui-frame-interpolation/vfi_models/stmfnet/stmfnet_arch.py new file mode 100644 index 0000000000000000000000000000000000000000..1e495e0eabf68a39af6bc7eceef554c3777d9d5f --- /dev/null +++ b/comfyui-frame-interpolation/vfi_models/stmfnet/stmfnet_arch.py @@ -0,0 +1,2858 @@ +# https://github.com/danielism97/ST-MFNet/blob/main/models/stmfnet.py +# https://github.com/danielism97/ST-MFNet/blob/main/models/misc/pwcnet.py +# https://github.com/danielism97/ST-MFNet/blob/main/models/misc/correlation/correlation.py +# https://github.com/danielism97/ST-MFNet/blob/main/models/misc/gridnet.py +# https://github.com/danielism97/ST-MFNet/blob/main/models/feature.py +# https://github.com/danielism97/ST-MFNet/blob/main/utility.py +# https://github.com/danielism97/ST-MFNet/blob/main/models/misc/resnet_3D.py +# https://github.com/danielism97/ST-MFNet/blob/main/cupy_module/adacof.py +# https://github.com/danielism97/ST-MFNet/blob/main/cupy_module/softsplat.py +# https://github.com/danielism97/ST-MFNet/blob/main/models/misc/__init__.py +# https://github.com/danielism97/ST-MFNet/blob/main/models/misc/pwcnet.py +# https://github.com/danielism97/ST-MFNet/blob/main/models/misc/correlation/correlation.py +from torch.nn import functional as F +from torch.utils.model_zoo import load_url as load_state_dict_from_url +import cv2 +import math +import numpy +import numpy as np +import PIL +import PIL.Image +import re +import sys +import torch +import torch.nn as nn +import torch.nn.functional as F +import torch.optim as optim +import torch.optim.lr_scheduler as lrs +from vfi_models.ops import FunctionCorrelation, FunctionAdaCoF, ModuleSoftsplat +from vfi_utils import get_ckpt_container_path +import pathlib +MODEL_TYPE = pathlib.Path(__file__).parent.name + +#Simple way to reduce oranges on VSCode bar +def identity(x): + return x + + +def backwarp(tenInput, tenFlow): + backwarp_tenGrid = {} + backwarp_tenPartial = {} + if str(tenFlow.shape) not in backwarp_tenGrid: + tenHor = ( + torch.linspace( + -1.0 + (1.0 / tenFlow.shape[3]), + 1.0 - (1.0 / tenFlow.shape[3]), + tenFlow.shape[3], + ) + .view(1, 1, 1, -1) + .expand(-1, -1, tenFlow.shape[2], -1) + ) + tenVer = ( + torch.linspace( + -1.0 + (1.0 / tenFlow.shape[2]), + 1.0 - (1.0 / tenFlow.shape[2]), + tenFlow.shape[2], + ) + .view(1, 1, -1, 1) + .expand(-1, -1, -1, tenFlow.shape[3]) + ) + + backwarp_tenGrid[str(tenFlow.shape)] = torch.cat([tenHor, tenVer], 1).cuda() + # end + + if str(tenFlow.shape) not in backwarp_tenPartial: + backwarp_tenPartial[str(tenFlow.shape)] = tenFlow.new_ones( + [tenFlow.shape[0], 1, tenFlow.shape[2], tenFlow.shape[3]] + ) + # end + + tenFlow = torch.cat( + [ + tenFlow[:, 0:1, :, :] / ((tenInput.shape[3] - 1.0) / 2.0), + tenFlow[:, 1:2, :, :] / ((tenInput.shape[2] - 1.0) / 2.0), + ], + 1, + ) + tenInput = torch.cat([tenInput, backwarp_tenPartial[str(tenFlow.shape)]], 1) + + tenOutput = torch.nn.functional.grid_sample( + input=tenInput, + grid=(backwarp_tenGrid[str(tenFlow.shape)] + tenFlow).permute(0, 2, 3, 1), + mode="bilinear", + padding_mode="zeros", + align_corners=False, + ) + + tenMask = tenOutput[:, -1:, :, :] + tenMask[tenMask > 0.999] = 1.0 + tenMask[tenMask < 1.0] = 0.0 + + return tenOutput[:, :-1, :, :] * tenMask + + +# end + +########################################################## + + +class PWCNet(torch.nn.Module): + def __init__(self): + super(PWCNet, self).__init__() + + class Extractor(torch.nn.Module): + def __init__(self): + super(Extractor, self).__init__() + + self.netOne = torch.nn.Sequential( + torch.nn.Conv2d( + in_channels=3, + out_channels=16, + kernel_size=3, + stride=2, + padding=1, + ), + torch.nn.LeakyReLU(inplace=False, negative_slope=0.1), + torch.nn.Conv2d( + in_channels=16, + out_channels=16, + kernel_size=3, + stride=1, + padding=1, + ), + torch.nn.LeakyReLU(inplace=False, negative_slope=0.1), + torch.nn.Conv2d( + in_channels=16, + out_channels=16, + kernel_size=3, + stride=1, + padding=1, + ), + torch.nn.LeakyReLU(inplace=False, negative_slope=0.1), + ) + + self.netTwo = torch.nn.Sequential( + torch.nn.Conv2d( + in_channels=16, + out_channels=32, + kernel_size=3, + stride=2, + padding=1, + ), + torch.nn.LeakyReLU(inplace=False, negative_slope=0.1), + torch.nn.Conv2d( + in_channels=32, + out_channels=32, + kernel_size=3, + stride=1, + padding=1, + ), + torch.nn.LeakyReLU(inplace=False, negative_slope=0.1), + torch.nn.Conv2d( + in_channels=32, + out_channels=32, + kernel_size=3, + stride=1, + padding=1, + ), + torch.nn.LeakyReLU(inplace=False, negative_slope=0.1), + ) + + self.netThr = torch.nn.Sequential( + torch.nn.Conv2d( + in_channels=32, + out_channels=64, + kernel_size=3, + stride=2, + padding=1, + ), + torch.nn.LeakyReLU(inplace=False, negative_slope=0.1), + torch.nn.Conv2d( + in_channels=64, + out_channels=64, + kernel_size=3, + stride=1, + padding=1, + ), + torch.nn.LeakyReLU(inplace=False, negative_slope=0.1), + torch.nn.Conv2d( + in_channels=64, + out_channels=64, + kernel_size=3, + stride=1, + padding=1, + ), + torch.nn.LeakyReLU(inplace=False, negative_slope=0.1), + ) + + self.netFou = torch.nn.Sequential( + torch.nn.Conv2d( + in_channels=64, + out_channels=96, + kernel_size=3, + stride=2, + padding=1, + ), + torch.nn.LeakyReLU(inplace=False, negative_slope=0.1), + torch.nn.Conv2d( + in_channels=96, + out_channels=96, + kernel_size=3, + stride=1, + padding=1, + ), + torch.nn.LeakyReLU(inplace=False, negative_slope=0.1), + torch.nn.Conv2d( + in_channels=96, + out_channels=96, + kernel_size=3, + stride=1, + padding=1, + ), + torch.nn.LeakyReLU(inplace=False, negative_slope=0.1), + ) + + self.netFiv = torch.nn.Sequential( + torch.nn.Conv2d( + in_channels=96, + out_channels=128, + kernel_size=3, + stride=2, + padding=1, + ), + torch.nn.LeakyReLU(inplace=False, negative_slope=0.1), + torch.nn.Conv2d( + in_channels=128, + out_channels=128, + kernel_size=3, + stride=1, + padding=1, + ), + torch.nn.LeakyReLU(inplace=False, negative_slope=0.1), + torch.nn.Conv2d( + in_channels=128, + out_channels=128, + kernel_size=3, + stride=1, + padding=1, + ), + torch.nn.LeakyReLU(inplace=False, negative_slope=0.1), + ) + + self.netSix = torch.nn.Sequential( + torch.nn.Conv2d( + in_channels=128, + out_channels=196, + kernel_size=3, + stride=2, + padding=1, + ), + torch.nn.LeakyReLU(inplace=False, negative_slope=0.1), + torch.nn.Conv2d( + in_channels=196, + out_channels=196, + kernel_size=3, + stride=1, + padding=1, + ), + torch.nn.LeakyReLU(inplace=False, negative_slope=0.1), + torch.nn.Conv2d( + in_channels=196, + out_channels=196, + kernel_size=3, + stride=1, + padding=1, + ), + torch.nn.LeakyReLU(inplace=False, negative_slope=0.1), + ) + + # end + + def forward(self, tenInput): + tenOne = self.netOne(tenInput) + tenTwo = self.netTwo(tenOne) + tenThr = self.netThr(tenTwo) + tenFou = self.netFou(tenThr) + tenFiv = self.netFiv(tenFou) + tenSix = self.netSix(tenFiv) + + return [tenOne, tenTwo, tenThr, tenFou, tenFiv, tenSix] + + # end + + # end + + class Decoder(torch.nn.Module): + def __init__(self, intLevel): + super(Decoder, self).__init__() + + intPrevious = [ + None, + None, + 81 + 32 + 2 + 2, + 81 + 64 + 2 + 2, + 81 + 96 + 2 + 2, + 81 + 128 + 2 + 2, + 81, + None, + ][intLevel + 1] + intCurrent = [ + None, + None, + 81 + 32 + 2 + 2, + 81 + 64 + 2 + 2, + 81 + 96 + 2 + 2, + 81 + 128 + 2 + 2, + 81, + None, + ][intLevel + 0] + + if intLevel < 6: + self.netUpflow = torch.nn.ConvTranspose2d( + in_channels=2, + out_channels=2, + kernel_size=4, + stride=2, + padding=1, + ) + if intLevel < 6: + self.netUpfeat = torch.nn.ConvTranspose2d( + in_channels=intPrevious + 128 + 128 + 96 + 64 + 32, + out_channels=2, + kernel_size=4, + stride=2, + padding=1, + ) + if intLevel < 6: + self.fltBackwarp = [None, None, None, 5.0, 2.5, 1.25, 0.625, None][ + intLevel + 1 + ] + + self.netOne = torch.nn.Sequential( + torch.nn.Conv2d( + in_channels=intCurrent, + out_channels=128, + kernel_size=3, + stride=1, + padding=1, + ), + torch.nn.LeakyReLU(inplace=False, negative_slope=0.1), + ) + + self.netTwo = torch.nn.Sequential( + torch.nn.Conv2d( + in_channels=intCurrent + 128, + out_channels=128, + kernel_size=3, + stride=1, + padding=1, + ), + torch.nn.LeakyReLU(inplace=False, negative_slope=0.1), + ) + + self.netThr = torch.nn.Sequential( + torch.nn.Conv2d( + in_channels=intCurrent + 128 + 128, + out_channels=96, + kernel_size=3, + stride=1, + padding=1, + ), + torch.nn.LeakyReLU(inplace=False, negative_slope=0.1), + ) + + self.netFou = torch.nn.Sequential( + torch.nn.Conv2d( + in_channels=intCurrent + 128 + 128 + 96, + out_channels=64, + kernel_size=3, + stride=1, + padding=1, + ), + torch.nn.LeakyReLU(inplace=False, negative_slope=0.1), + ) + + self.netFiv = torch.nn.Sequential( + torch.nn.Conv2d( + in_channels=intCurrent + 128 + 128 + 96 + 64, + out_channels=32, + kernel_size=3, + stride=1, + padding=1, + ), + torch.nn.LeakyReLU(inplace=False, negative_slope=0.1), + ) + + self.netSix = torch.nn.Sequential( + torch.nn.Conv2d( + in_channels=intCurrent + 128 + 128 + 96 + 64 + 32, + out_channels=2, + kernel_size=3, + stride=1, + padding=1, + ) + ) + + # end + + def forward(self, tenFirst, tenSecond, objPrevious): + tenFlow = None + tenFeat = None + + if objPrevious is None: + tenFlow = None + tenFeat = None + + tenVolume = torch.nn.functional.leaky_relu( + input=FunctionCorrelation( + tenFirst=tenFirst, tenSecond=tenSecond + ), + negative_slope=0.1, + inplace=False, + ) + + tenFeat = torch.cat([tenVolume], 1) + + elif objPrevious is not None: + tenFlow = self.netUpflow(objPrevious["tenFlow"]) + tenFeat = self.netUpfeat(objPrevious["tenFeat"]) + + tenVolume = torch.nn.functional.leaky_relu( + input=FunctionCorrelation( + tenFirst=tenFirst, + tenSecond=backwarp( + tenInput=tenSecond, tenFlow=tenFlow * self.fltBackwarp + ), + ), + negative_slope=0.1, + inplace=False, + ) + + tenFeat = torch.cat([tenVolume, tenFirst, tenFlow, tenFeat], 1) + + # end + + tenFeat = torch.cat([self.netOne(tenFeat), tenFeat], 1) + tenFeat = torch.cat([self.netTwo(tenFeat), tenFeat], 1) + tenFeat = torch.cat([self.netThr(tenFeat), tenFeat], 1) + tenFeat = torch.cat([self.netFou(tenFeat), tenFeat], 1) + tenFeat = torch.cat([self.netFiv(tenFeat), tenFeat], 1) + + tenFlow = self.netSix(tenFeat) + + return {"tenFlow": tenFlow, "tenFeat": tenFeat} + + # end + + # end + + class Refiner(torch.nn.Module): + def __init__(self): + super(Refiner, self).__init__() + + self.netMain = torch.nn.Sequential( + torch.nn.Conv2d( + in_channels=81 + 32 + 2 + 2 + 128 + 128 + 96 + 64 + 32, + out_channels=128, + kernel_size=3, + stride=1, + padding=1, + dilation=1, + ), + torch.nn.LeakyReLU(inplace=False, negative_slope=0.1), + torch.nn.Conv2d( + in_channels=128, + out_channels=128, + kernel_size=3, + stride=1, + padding=2, + dilation=2, + ), + torch.nn.LeakyReLU(inplace=False, negative_slope=0.1), + torch.nn.Conv2d( + in_channels=128, + out_channels=128, + kernel_size=3, + stride=1, + padding=4, + dilation=4, + ), + torch.nn.LeakyReLU(inplace=False, negative_slope=0.1), + torch.nn.Conv2d( + in_channels=128, + out_channels=96, + kernel_size=3, + stride=1, + padding=8, + dilation=8, + ), + torch.nn.LeakyReLU(inplace=False, negative_slope=0.1), + torch.nn.Conv2d( + in_channels=96, + out_channels=64, + kernel_size=3, + stride=1, + padding=16, + dilation=16, + ), + torch.nn.LeakyReLU(inplace=False, negative_slope=0.1), + torch.nn.Conv2d( + in_channels=64, + out_channels=32, + kernel_size=3, + stride=1, + padding=1, + dilation=1, + ), + torch.nn.LeakyReLU(inplace=False, negative_slope=0.1), + torch.nn.Conv2d( + in_channels=32, + out_channels=2, + kernel_size=3, + stride=1, + padding=1, + dilation=1, + ), + ) + + # end + + def forward(self, tenInput): + return self.netMain(tenInput) + + # end + + # end + + self.netExtractor = Extractor() + + self.netTwo = Decoder(2) + self.netThr = Decoder(3) + self.netFou = Decoder(4) + self.netFiv = Decoder(5) + self.netSix = Decoder(6) + + self.netRefiner = Refiner() + + self.load_state_dict( + { + strKey.replace("module", "net"): tenWeight + for strKey, tenWeight in torch.hub.load_state_dict_from_url( + url="http://content.sniklaus.com/github/pytorch-pwc/network-" + + "default" + + ".pytorch", + model_dir=get_ckpt_container_path(MODEL_TYPE) + ).items() + } + ) + + # end + + def forward(self, tenFirst, tenSecond, *args): + # optionally pass pre-extracted feature pyramid in as args + if len(args) == 0: + tenFirst = self.netExtractor(tenFirst) + tenSecond = self.netExtractor(tenSecond) + else: + tenFirst, tenSecond = args + + objEstimate = self.netSix(tenFirst[-1], tenSecond[-1], None) + objEstimate = self.netFiv(tenFirst[-2], tenSecond[-2], objEstimate) + objEstimate = self.netFou(tenFirst[-3], tenSecond[-3], objEstimate) + objEstimate = self.netThr(tenFirst[-4], tenSecond[-4], objEstimate) + objEstimate = self.netTwo(tenFirst[-5], tenSecond[-5], objEstimate) + + return objEstimate["tenFlow"] + self.netRefiner(objEstimate["tenFeat"]) + + # end + + def extract_pyramid(self, tenFirst, tenSecond): + return self.netExtractor(tenFirst), self.netExtractor(tenSecond) + + def extract_pyramid_single(self, tenFirst): + return self.netExtractor(tenFirst) + + +# end + +netNetwork = None + +########################################################## + + +def estimate(tenFirst, tenSecond): + global netNetwork + + if netNetwork is None: + netNetwork = Network().cuda().eval() + # end + + assert tenFirst.shape[1] == tenSecond.shape[1] + assert tenFirst.shape[2] == tenSecond.shape[2] + + intWidth = tenFirst.shape[2] + intHeight = tenFirst.shape[1] + + assert ( + intWidth == 1024 + ) # remember that there is no guarantee for correctness, comment this line out if you acknowledge this and want to continue + assert ( + intHeight == 436 + ) # remember that there is no guarantee for correctness, comment this line out if you acknowledge this and want to continue + + tenPreprocessedFirst = tenFirst.cuda().view(1, 3, intHeight, intWidth) + tenPreprocessedSecond = tenSecond.cuda().view(1, 3, intHeight, intWidth) + + intPreprocessedWidth = int(math.floor(math.ceil(intWidth / 64.0) * 64.0)) + intPreprocessedHeight = int(math.floor(math.ceil(intHeight / 64.0) * 64.0)) + + tenPreprocessedFirst = torch.nn.functional.interpolate( + input=tenPreprocessedFirst, + size=(intPreprocessedHeight, intPreprocessedWidth), + mode="bilinear", + align_corners=False, + ) + tenPreprocessedSecond = torch.nn.functional.interpolate( + input=tenPreprocessedSecond, + size=(intPreprocessedHeight, intPreprocessedWidth), + mode="bilinear", + align_corners=False, + ) + + tenFlow = 20.0 * torch.nn.functional.interpolate( + input=netNetwork(tenPreprocessedFirst, tenPreprocessedSecond), + size=(intHeight, intWidth), + mode="bilinear", + align_corners=False, + ) + + tenFlow[:, 0, :, :] *= float(intWidth) / float(intPreprocessedWidth) + tenFlow[:, 1, :, :] *= float(intHeight) / float(intPreprocessedHeight) + + return tenFlow[0, :, :, :].cpu() + + +# end + + +class Upsampler_8tap(nn.Module): + def __init__(self): + super(Upsampler_8tap, self).__init__() + filt_8tap = torch.tensor([[-1, 4, -11, 40, 40, -11, 4, -1]]).div(64) + self.filter = nn.Parameter(filt_8tap.repeat(3, 1, 1, 1), requires_grad=False) + + def forward(self, im): + b, c, h, w = im.shape + im_up = torch.zeros(b, c, h * 2, w * 2).to(im.device) + im_up[:, :, ::2, ::2] = im + + p = (8 - 1) // 2 + im_up_row = F.conv2d( + F.pad(im, pad=(p, p + 1, 0, 0), mode="reflect"), self.filter, groups=3 + ) + im_up[:, :, 0::2, 1::2] = im_up_row + im_up_col = torch.transpose( + F.conv2d( + F.pad(torch.transpose(im, 2, 3), pad=(p, p + 1, 0, 0), mode="reflect"), + self.filter, + groups=3, + ), + 2, + 3, + ) + im_up[:, :, 1::2, 0::2] = im_up_col + im_up_cross = F.conv2d( + F.pad(im_up[:, :, 1::2, ::2], pad=(p, p + 1, 0, 0), mode="reflect"), + self.filter, + groups=3, + ) + im_up[:, :, 1::2, 1::2] = im_up_cross + return im_up + +# end + + +model_urls = { + "r3d_18": "https://download.pytorch.org/models/r3d_18-b3b3357e.pth", + "mc3_18": "https://download.pytorch.org/models/mc3_18-a90a0ba3.pth", + "r2plus1d_18": "https://download.pytorch.org/models/r2plus1d_18-91a641e6.pth", +} + + +class Conv3DSimple(nn.Conv3d): + def __init__(self, in_planes, out_planes, midplanes=None, stride=1, padding=1): + super(Conv3DSimple, self).__init__( + in_channels=in_planes, + out_channels=out_planes, + kernel_size=(3, 3, 3), + stride=stride, + padding=padding, + bias=False, + ) + + @staticmethod + def get_downsample_stride(stride, temporal_stride): + if temporal_stride: + return (temporal_stride, stride, stride) + else: + return (stride, stride, stride) + + +class Conv2Plus1D(nn.Sequential): + def __init__(self, in_planes, out_planes, midplanes, stride=1, padding=1): + super(Conv2Plus1D, self).__init__( + nn.Conv3d( + in_planes, + midplanes, + kernel_size=(1, 3, 3), + stride=(1, stride, stride), + padding=(0, padding, padding), + bias=False, + ), + batchnorm(midplanes), + nn.ReLU(inplace=True), + nn.Conv3d( + midplanes, + out_planes, + kernel_size=(3, 1, 1), + stride=(stride, 1, 1), + padding=(padding, 0, 0), + bias=False, + ), + ) + + @staticmethod + def get_downsample_stride(stride): + return stride, stride, stride + + +class Conv3DNoTemporal(nn.Conv3d): + def __init__(self, in_planes, out_planes, midplanes=None, stride=1, padding=1): + super(Conv3DNoTemporal, self).__init__( + in_channels=in_planes, + out_channels=out_planes, + kernel_size=(1, 3, 3), + stride=(1, stride, stride), + padding=(0, padding, padding), + bias=False, + ) + + @staticmethod + def get_downsample_stride(stride): + return 1, stride, stride + + +class SEGating(nn.Module): + def __init__(self, inplanes, reduction=16): + super().__init__() + + self.pool = nn.AdaptiveAvgPool3d(1) + self.attn_layer = nn.Sequential( + nn.Conv3d(inplanes, inplanes, kernel_size=1, stride=1, bias=True), + nn.Sigmoid(), + ) + + def forward(self, x): + out = self.pool(x) + y = self.attn_layer(out) + return x * y + + +class BasicBlock(nn.Module): + expansion = 1 + + def __init__(self, inplanes, planes, conv_builder, stride=1, downsample=None): + midplanes = (inplanes * planes * 3 * 3 * 3) // (inplanes * 3 * 3 + 3 * planes) + + super(BasicBlock, self).__init__() + self.conv1 = nn.Sequential( + conv_builder(inplanes, planes, midplanes, stride), + batchnorm(planes), + nn.ReLU(inplace=True), + ) + self.conv2 = nn.Sequential( + conv_builder(planes, planes, midplanes), batchnorm(planes) + ) + self.fg = SEGating(planes) ## Feature Gating, from FLAVR + self.relu = nn.ReLU(inplace=True) + self.downsample = downsample + self.stride = stride + + def forward(self, x): + residual = x + out = self.conv1(x) + out = self.conv2(out) + out = self.fg(out) + if self.downsample is not None: + residual = self.downsample(x) + + out += residual + out = self.relu(out) + + return out + + +class Bottleneck(nn.Module): + expansion = 4 + + def __init__(self, inplanes, planes, conv_builder, stride=1, downsample=None): + super(Bottleneck, self).__init__() + midplanes = (inplanes * planes * 3 * 3 * 3) // (inplanes * 3 * 3 + 3 * planes) + + # 1x1x1 + self.conv1 = nn.Sequential( + nn.Conv3d(inplanes, planes, kernel_size=1, bias=False), + batchnorm(planes), + nn.ReLU(inplace=True), + ) + # Second kernel + self.conv2 = nn.Sequential( + conv_builder(planes, planes, midplanes, stride), + batchnorm(planes), + nn.ReLU(inplace=True), + ) + + # 1x1x1 + self.conv3 = nn.Sequential( + nn.Conv3d(planes, planes * self.expansion, kernel_size=1, bias=False), + batchnorm(planes * self.expansion), + ) + self.relu = nn.ReLU(inplace=True) + self.downsample = downsample + self.stride = stride + + def forward(self, x): + residual = x + + out = self.conv1(x) + out = self.conv2(out) + out = self.conv3(out) + + if self.downsample is not None: + residual = self.downsample(x) + + out += residual + out = self.relu(out) + + return out + + +class BasicStem(nn.Sequential): + """The default conv-batchnorm-relu stem""" + + def __init__(self, outplanes=32): + super(BasicStem, self).__init__( + nn.Conv3d( + 3, + outplanes, + kernel_size=(3, 7, 7), + stride=(1, 2, 2), + padding=(1, 3, 3), + bias=False, + ), + batchnorm(outplanes), + nn.ReLU(inplace=True), + ) + + +class R2Plus1dStem(nn.Sequential): + """R(2+1)D stem is different than the default one as it uses separated 3D convolution""" + + def __init__(self): + super(R2Plus1dStem, self).__init__( + nn.Conv3d( + 3, + 45, + kernel_size=(1, 7, 7), + stride=(1, 2, 2), + padding=(0, 3, 3), + bias=False, + ), + batchnorm(45), + nn.ReLU(inplace=True), + nn.Conv3d( + 45, + 64, + kernel_size=(3, 1, 1), + stride=(1, 1, 1), + padding=(1, 0, 0), + bias=False, + ), + batchnorm(64), + nn.ReLU(inplace=True), + ) + + +class VideoResNet(nn.Module): + def __init__( + self, + block, + conv_makers, + layers, + stem, + zero_init_residual=False, + channels=[32, 64, 96, 128], + ): + """Generic resnet video generator. + + Args: + block (nn.Module): resnet building block + conv_makers (list(functions)): generator function for each layer + layers (List[int]): number of blocks per layer + stem (nn.Module, optional): Resnet stem, if None, defaults to conv-bn-relu. Defaults to None. + zero_init_residual (bool, optional): Zero init bottleneck residual BN. Defaults to False. + """ + super(VideoResNet, self).__init__() + self.inplanes = channels[0] # output channel of first stem + + self.stem = stem() + + self.layer1 = self._make_layer( + block, conv_makers[0], channels[0], layers[0], stride=1 + ) + self.layer2 = self._make_layer( + block, conv_makers[1], channels[1], layers[1], stride=2, temporal_stride=1 + ) + self.layer3 = self._make_layer( + block, conv_makers[2], channels[2], layers[2], stride=2, temporal_stride=1 + ) + self.layer4 = self._make_layer( + block, conv_makers[3], channels[3], layers[3], stride=1, temporal_stride=1 + ) + + # init weights + self._initialize_weights() + + if zero_init_residual: + for m in self.modules(): + if isinstance(m, Bottleneck): + nn.init.constant_(m.bn3.weight, 0) + + def forward(self, x): + tensorConv0 = self.stem(x) + tensorConv1 = self.layer1(tensorConv0) + tensorConv2 = self.layer2(tensorConv1) + tensorConv3 = self.layer3(tensorConv2) + tensorConv4 = self.layer4(tensorConv3) + return tensorConv0, tensorConv1, tensorConv2, tensorConv3, tensorConv4 + + def _make_layer( + self, block, conv_builder, planes, blocks, stride=1, temporal_stride=None + ): + downsample = None + + if stride != 1 or self.inplanes != planes * block.expansion: + ds_stride = conv_builder.get_downsample_stride(stride, temporal_stride) + downsample = nn.Sequential( + nn.Conv3d( + self.inplanes, + planes * block.expansion, + kernel_size=1, + stride=ds_stride, + bias=False, + ), + batchnorm(planes * block.expansion), + ) + stride = ds_stride + + layers = [] + layers.append(block(self.inplanes, planes, conv_builder, stride, downsample)) + + self.inplanes = planes * block.expansion + for i in range(1, blocks): + layers.append(block(self.inplanes, planes, conv_builder)) + + return nn.Sequential(*layers) + + def _initialize_weights(self): + for m in self.modules(): + if isinstance(m, nn.Conv3d): + nn.init.kaiming_normal_(m.weight, mode="fan_out", nonlinearity="relu") + if m.bias is not None: + nn.init.constant_(m.bias, 0) + elif isinstance(m, nn.BatchNorm3d): + nn.init.constant_(m.weight, 1) + nn.init.constant_(m.bias, 0) + elif isinstance(m, nn.Linear): + nn.init.normal_(m.weight, 0, 0.01) + nn.init.constant_(m.bias, 0) + + +def _video_resnet(arch, pretrained=False, progress=True, **kwargs): + model = VideoResNet(**kwargs) + + if pretrained: + state_dict = load_state_dict_from_url(model_urls[arch], progress=progress, model_dir=get_ckpt_container_path(MODEL_TYPE)) + model.load_state_dict(state_dict) + return model + + +def r3d_18(bn=False, pretrained=False, progress=True, **kwargs): + """Construct 18 layer Resnet3D model as in + https://arxiv.org/abs/1711.11248 + + Args: + pretrained (bool): If True, returns a model pre-trained on Kinetics-400 + progress (bool): If True, displays a progress bar of the download to stderr + + Returns: + nn.Module: R3D-18 network + """ + + global batchnorm + if bn: + batchnorm = nn.BatchNorm3d + else: + batchnorm = identity + + return _video_resnet( + "r3d_18", + pretrained, + progress, + block=BasicBlock, + conv_makers=[Conv3DSimple] * 4, + layers=[2, 2, 2, 2], + stem=BasicStem, + **kwargs, + ) + + +def mc3_18(bn=False, pretrained=False, progress=True, **kwargs): + """Constructor for 18 layer Mixed Convolution network as in + https://arxiv.org/abs/1711.11248 + + Args: + pretrained (bool): If True, returns a model pre-trained on Kinetics-400 + progress (bool): If True, displays a progress bar of the download to stderr + + Returns: + nn.Module: MC3 Network definition + """ + global batchnorm + if bn: + batchnorm = nn.BatchNorm3d + else: + batchnorm = identity + + return _video_resnet( + "mc3_18", + pretrained, + progress, + block=BasicBlock, + conv_makers=[Conv3DSimple] + [Conv3DNoTemporal] * 3, + layers=[2, 2, 2, 2], + stem=BasicStem, + **kwargs, + ) + + +def r2plus1d_18(bn=False, pretrained=False, progress=True, **kwargs): + """Constructor for the 18 layer deep R(2+1)D network as in + https://arxiv.org/abs/1711.11248 + + Args: + pretrained (bool): If True, returns a model pre-trained on Kinetics-400 + progress (bool): If True, displays a progress bar of the download to stderr + + Returns: + nn.Module: R(2+1)D-18 network + """ + + global batchnorm + if bn: + batchnorm = nn.BatchNorm3d + else: + batchnorm = identity + + return _video_resnet( + "r2plus1d_18", + pretrained, + progress, + block=BasicBlock, + conv_makers=[Conv2Plus1D] * 4, + layers=[2, 2, 2, 2], + stem=R2Plus1dStem, + **kwargs, + ) + + +class upConv3D(nn.Module): + def __init__(self, in_ch, out_ch, kernel_size, stride, padding, upmode="transpose"): + super().__init__() + self.upmode = upmode + if self.upmode == "transpose": + self.upconv = nn.ModuleList( + [ + nn.ConvTranspose3d( + in_ch, + out_ch, + kernel_size=kernel_size, + stride=stride, + padding=padding, + ), + SEGating(out_ch), + batchnorm(out_ch), + ] + ) + else: + self.upconv = nn.ModuleList( + [ + nn.Upsample( + mode="trilinear", scale_factor=(1, 2, 2), align_corners=False + ), + nn.Conv3d(in_ch, out_ch, kernel_size=1, stride=1), + SEGating(out_ch), + batchnorm(out_ch), + ] + ) + self.upconv = nn.Sequential(*self.upconv) + + def forward(self, x): + return self.upconv(x) + + +class Conv_3d(nn.Module): + def __init__(self, in_ch, out_ch, kernel_size, stride=1, padding=0, bias=True): + super().__init__() + self.conv = nn.Sequential( + nn.Conv3d( + in_ch, + out_ch, + kernel_size=kernel_size, + stride=stride, + padding=padding, + bias=bias, + ), + SEGating(out_ch), + batchnorm(out_ch), + ) + + def forward(self, x): + return self.conv(x) + + +def make_optimizer(args, my_model): + trainable = filter(lambda x: x.requires_grad, my_model.parameters()) + + if args.optimizer == "SGD": + optimizer_function = optim.SGD + kwargs = {"momentum": 0.9} + elif args.optimizer == "ADAM": + optimizer_function = optim.Adam + kwargs = {"betas": (0.9, 0.999), "eps": 1e-08} + elif args.optimizer == "ADAMax": + optimizer_function = optim.Adamax + kwargs = {"betas": (0.9, 0.999), "eps": 1e-08} + elif args.optimizer == "RMSprop": + optimizer_function = optim.RMSprop + kwargs = {"eps": 1e-08} + + kwargs["lr"] = args.lr + kwargs["weight_decay"] = args.weight_decay + + return optimizer_function(trainable, **kwargs) + + +def make_scheduler(args, my_optimizer): + if args.decay_type == "step": + scheduler = lrs.StepLR(my_optimizer, step_size=args.lr_decay, gamma=args.gamma) + elif args.decay_type.find("step") >= 0: + milestones = args.decay_type.split("_") + milestones.pop(0) + milestones = list(map(lambda x: int(x), milestones)) + scheduler = lrs.MultiStepLR( + my_optimizer, milestones=milestones, gamma=args.gamma + ) + elif args.decay_type == "plateau": + scheduler = lrs.ReduceLROnPlateau( + my_optimizer, + mode="max", + factor=args.gamma, + patience=args.patience, + threshold=0.01, # metric to be used is psnr + threshold_mode="abs", + verbose=True, + ) + + return scheduler + + +def gaussian_kernel(sz, sigma): + k = torch.arange(-(sz - 1) / 2, (sz + 1) / 2) + k = torch.exp(-1.0 / (2 * sigma**2) * k**2) + k = k.reshape(-1, 1) * k.reshape(1, -1) + k = k / torch.sum(k) + return k + + +def moduleNormalize(frame): + return torch.cat( + [ + (frame[:, 0:1, :, :] - 0.4631), + (frame[:, 1:2, :, :] - 0.4352), + (frame[:, 2:3, :, :] - 0.3990), + ], + 1, + ) + + +class FoldUnfold: + """ + Class to handle folding tensor frame into batch of patches and back to frame again + Thanks to Charlie Tan (charlie.tan.2019@bristol.ac.uk) for the earier version. + """ + + def __init__(self, height, width, patch_size, overlap): + if height % 2 or width % 2 or patch_size % 2 or overlap % 2: + print( + "only defined for even values of height, width, patch_size size and overlap, odd values will reconstruct incorrectly" + ) + return + + self.height = height + self.width = width + + self.patch_size = patch_size + self.overlap = overlap + self.stride = patch_size - overlap + + def fold_to_patches(self, *frames): + """ + args: frames -- list of (1,3,H,W) tensors + returns: list of (B,3,h,w) image patches + """ + + # number of blocks in each direction + n_blocks_h = (self.height // (self.stride)) + 1 + n_blocks_w = (self.width // (self.stride)) + 1 + + # how much to pad each edge by + self.pad_h = (self.stride * n_blocks_h + self.overlap - self.height) // 2 + self.pad_w = (self.stride * n_blocks_w + self.overlap - self.width) // 2 + self.height_pad = self.height + 2 * self.pad_h + self.width_pad = self.width + 2 * self.pad_w + + # pad the frames and unfold into patches + patches_list = [] + for i in range(len(frames)): + padded = F.pad( + frames[i], + (self.pad_w, self.pad_w, self.pad_h, self.pad_h), + mode="reflect", + ) + unfolded = F.unfold(padded, self.patch_size, stride=self.stride) + patches = unfolded.permute(2, 1, 0).reshape( + -1, 3, self.patch_size, self.patch_size + ) + patches_list.append(patches) + + return patches_list + + def unfold_to_frame(self, patches): + """ + args: patches -- tensor of shape (B,3,h,w) + returns: frame -- tensor of shape (1,3,H,W) + """ + + # reshape and permute back into [frames, chans * patch_size ** 2, num_patches] as expected by fold + frame_unfold = patches.reshape(-1, 3 * self.patch_size**2, 1).permute(2, 1, 0) + + # fold into tensor of shape pad_shape + frame_fold = F.fold( + frame_unfold, + (self.height_pad, self.width_pad), + self.patch_size, + stride=self.stride, + ) + + # unfold sums overlaps instead of averaging so tensor of ones unfolded and + # folded to track overlaps and take mean of overlapping pixels + ones = torch.ones_like(frame_fold) + ones_unfold = F.unfold(ones, self.patch_size, stride=self.stride) + + # divisor is tensor of shape pad_shape where each element is the number of values that have overlapped + # 1 = no overlaps + divisor = F.fold( + ones_unfold, + (self.height_pad, self.width_pad), + self.patch_size, + stride=self.stride, + ) + + # divide reconstructed frame by divisor + frame_div = frame_fold / divisor + + # crop frame to remove the padded areas + frame_crop = frame_div[ + :, :, self.pad_h : -self.pad_h, self.pad_w : -self.pad_w + ].clone() + + return frame_crop + + +def read_frame_yuv2rgb(stream, width, height, iFrame, bit_depth, pix_fmt="420"): + if pix_fmt == "420": + multiplier = 1 + uv_factor = 2 + elif pix_fmt == "444": + multiplier = 2 + uv_factor = 1 + else: + print("Pixel format {} is not supported".format(pix_fmt)) + return + + if bit_depth == 8: + datatype = np.uint8 + stream.seek(iFrame * 1.5 * width * height * multiplier) + Y = np.fromfile(stream, dtype=datatype, count=width * height).reshape( + (height, width) + ) + + # read chroma samples and upsample since original is 4:2:0 sampling + U = np.fromfile( + stream, dtype=datatype, count=(width // uv_factor) * (height // uv_factor) + ).reshape((height // uv_factor, width // uv_factor)) + V = np.fromfile( + stream, dtype=datatype, count=(width // uv_factor) * (height // uv_factor) + ).reshape((height // uv_factor, width // uv_factor)) + + else: + datatype = np.uint16 + stream.seek(iFrame * 3 * width * height * multiplier) + Y = np.fromfile(stream, dtype=datatype, count=width * height).reshape( + (height, width) + ) + + U = np.fromfile( + stream, dtype=datatype, count=(width // uv_factor) * (height // uv_factor) + ).reshape((height // uv_factor, width // uv_factor)) + V = np.fromfile( + stream, dtype=datatype, count=(width // uv_factor) * (height // uv_factor) + ).reshape((height // uv_factor, width // uv_factor)) + + if pix_fmt == "420": + yuv = np.empty((height * 3 // 2, width), dtype=datatype) + yuv[0:height, :] = Y + + yuv[height : height + height // 4, :] = U.reshape(-1, width) + yuv[height + height // 4 :, :] = V.reshape(-1, width) + + if bit_depth != 8: + yuv = (yuv / (2**bit_depth - 1) * 255).astype(np.uint8) + + # convert to rgb + rgb = cv2.cvtColor(yuv, cv2.COLOR_YUV2RGB_I420) + + else: + yvu = np.stack([Y, V, U], axis=2) + if bit_depth != 8: + yvu = (yvu / (2**bit_depth - 1) * 255).astype(np.uint8) + rgb = cv2.cvtColor(yvu, cv2.COLOR_YCrCb2RGB) + + return rgb + + +def quantize(imTensor): + return imTensor.clamp(0.0, 1.0).mul(255).round() + + +def tensor2rgb(tensor): + """ + Convert GPU Tensor to RGB image (numpy array) + """ + out = [] + for b in range(tensor.shape[0]): + out.append( + np.moveaxis(quantize(tensor[b]).cpu().detach().numpy(), 0, 2).astype( + np.uint8 + ) + ) + return np.array(out) # (B,H,W,C) + + +class Identity(nn.Module): + def __init__(self, *args): + super(Identity, self).__init__() + + def forward(self, x): + return x + + +class SEBlock(nn.Module): + def __init__(self, input_dim, reduction=16): + super(SEBlock, self).__init__() + mid = int(input_dim / reduction) + self.avg_pool = nn.AdaptiveAvgPool2d(1) + self.fc = nn.Sequential( + nn.Linear(input_dim, mid), + nn.ReLU(inplace=True), + nn.Linear(mid, input_dim), + nn.Sigmoid(), + ) + + def forward(self, x): + b, c, _, _ = x.size() + y = self.avg_pool(x).view(b, c) + y = self.fc(y).view(b, c, 1, 1) + return x * y + + +class ResNextBlock(nn.Module): + def __init__( + self, down, cin, cout, ks, stride=1, groups=32, base_width=4, norm_layer=None + ): + super(ResNextBlock, self).__init__() + if norm_layer is None or norm_layer == "batch": + norm_layer = nn.BatchNorm2d + elif norm_layer == "identity": + norm_layer = Identity + width = int(cout * (base_width / 64.0)) * groups + # Both self.conv2 and self.downsample layers downsample the input when stride != 1 + self.conv1 = nn.Conv2d(cin, width, kernel_size=1, stride=1, bias=False) + self.bn1 = norm_layer(width) + if down: + self.conv2 = nn.Conv2d( + width, + width, + kernel_size=ks, + stride=stride, + padding=(ks - 1) // 2, + groups=groups, + bias=False, + ) + else: + self.conv2 = nn.ConvTranspose2d( + width, + width, + kernel_size=ks, + stride=stride, + padding=(ks - stride) // 2, + groups=groups, + bias=False, + ) + self.bn2 = norm_layer(width) + self.conv3 = nn.Conv2d(width, cout, kernel_size=1, stride=1, bias=False) + self.bn3 = norm_layer(cout) + self.relu = nn.ReLU(inplace=True) + self.downsample = None + if stride != 1 or cin != cout: + if down: + self.downsample = nn.Sequential( + nn.Conv2d(cin, cout, kernel_size=1, stride=stride, bias=False), + norm_layer(cout), + ) + else: + self.downsample = nn.Sequential( + # ks = stride here s.t. resolution can be kept + nn.ConvTranspose2d( + cin, cout, kernel_size=2, stride=stride, bias=False + ), + norm_layer(cout), + ) + self.stride = stride + + def forward(self, x): + identity = x + + out = self.conv1(x) + out = self.bn1(out) + out = self.relu(out) + + out = self.conv2(out) + out = self.bn2(out) + out = self.relu(out) + + out = self.conv3(out) + out = self.bn3(out) + + if self.downsample is not None: + identity = self.downsample(x) + + out += identity + out = self.relu(out) + + return out + + +class MultiScaleResNextBlock(nn.Module): + def __init__(self, down, cin, cout, ks_s, ks_l, stride, norm_layer): + super(MultiScaleResNextBlock, self).__init__() + self.resnext_small = ResNextBlock( + down, cin, cout // 2, ks_s, stride, norm_layer=norm_layer + ) + self.resnext_large = ResNextBlock( + down, cin, cout // 2, ks_l, stride, norm_layer=norm_layer + ) + self.attention = SEBlock(cout) + + def forward(self, tensorCombine): + out_small = self.resnext_small(tensorCombine) + out_large = self.resnext_large(tensorCombine) + out = torch.cat([out_small, out_large], 1) + out = self.attention(out) + return out + + +class UMultiScaleResNext(nn.Module): + def __init__( + self, channels=[64, 128, 256, 512], norm_layer="batch", inplanes=6, **kwargs + ): + super(UMultiScaleResNext, self).__init__() + self.conv1 = MultiScaleResNextBlock( + True, inplanes, channels[0], ks_s=3, ks_l=7, stride=2, norm_layer=norm_layer + ) + self.conv2 = MultiScaleResNextBlock( + True, + channels[0], + channels[1], + ks_s=3, + ks_l=7, + stride=2, + norm_layer=norm_layer, + ) + self.conv3 = MultiScaleResNextBlock( + True, + channels[1], + channels[2], + ks_s=3, + ks_l=5, + stride=2, + norm_layer=norm_layer, + ) + self.conv4 = MultiScaleResNextBlock( + True, + channels[2], + channels[3], + ks_s=3, + ks_l=5, + stride=2, + norm_layer=norm_layer, + ) + + self.deconv4 = MultiScaleResNextBlock( + True, + channels[3], + channels[3], + ks_s=3, + ks_l=5, + stride=1, + norm_layer=norm_layer, + ) + self.deconv3 = MultiScaleResNextBlock( + False, + channels[3], + channels[2], + ks_s=4, + ks_l=6, + stride=2, + norm_layer=norm_layer, + ) + self.deconv2 = MultiScaleResNextBlock( + False, + channels[2], + channels[1], + ks_s=4, + ks_l=8, + stride=2, + norm_layer=norm_layer, + ) + self.deconv1 = MultiScaleResNextBlock( + False, + channels[1], + channels[0], + ks_s=4, + ks_l=8, + stride=2, + norm_layer=norm_layer, + ) + + def forward(self, im0, im2): + tensorJoin = torch.cat([im0, im2], 1) # (B,6,H,W) + + tensorConv1 = self.conv1(tensorJoin) + tensorConv2 = self.conv2(tensorConv1) + tensorConv3 = self.conv3(tensorConv2) + tensorConv4 = self.conv4(tensorConv3) + + tensorDeconv4 = self.deconv4(tensorConv4) + tensorDeconv3 = self.deconv3(tensorDeconv4 + tensorConv4) + tensorDeconv2 = self.deconv2(tensorDeconv3 + tensorConv3) + tensorDeconv1 = self.deconv1(tensorDeconv2 + tensorConv2) + + return tensorDeconv1 + + +class MultiInputGridNet(nn.Module): + def __init__(self, in_chs, out_chs, grid_chs=(32, 64, 96), n_row=3, n_col=6): + super(MultiInputGridNet, self).__init__() + + self.n_row = n_row + self.n_col = n_col + self.n_chs = grid_chs + assert ( + len(grid_chs) == self.n_row + ), "should give num channels for each row (scale stream)" + assert ( + len(in_chs) == self.n_row + ), "should give input channels for each row (scale stream)" + + for r, n_ch in enumerate(self.n_chs): + setattr(self, f"lateral_{r}_0", LateralBlock(in_chs[r], n_ch)) + for c in range(1, self.n_col): + setattr(self, f"lateral_{r}_{c}", LateralBlock(n_ch, n_ch)) + + for r, (in_ch, out_ch) in enumerate(zip(self.n_chs[:-1], self.n_chs[1:])): + for c in range(int(self.n_col / 2)): + setattr(self, f"down_{r}_{c}", DownSamplingBlock(in_ch, out_ch)) + + for r, (in_ch, out_ch) in enumerate(zip(self.n_chs[1:], self.n_chs[:-1])): + for c in range(int(self.n_col / 2)): + setattr(self, f"up_{r}_{c}", UpSamplingBlock(in_ch, out_ch)) + + self.lateral_final = LateralBlock(self.n_chs[0], out_chs) + + def forward(self, *args): + assert len(args) == self.n_row + + # extensible, memory-efficient + cur_col = list(args) + for c in range(int(self.n_col / 2)): + for r in range(self.n_row): + cur_col[r] = getattr(self, f"lateral_{r}_{c}")(cur_col[r]) + if r != 0: + cur_col[r] += getattr(self, f"down_{r-1}_{c}")(cur_col[r - 1]) + + for c in range(int(self.n_col / 2), self.n_col): + for r in range(self.n_row - 1, -1, -1): + cur_col[r] = getattr(self, f"lateral_{r}_{c}")(cur_col[r]) + if r != self.n_row - 1: + cur_col[r] += getattr(self, f"up_{r}_{c-int(self.n_col/2)}")( + cur_col[r + 1] + ) + + return self.lateral_final(cur_col[0]) + + +class MIMOGridNet(nn.Module): + def __init__( + self, in_chs, out_chs, grid_chs=(32, 64, 96), n_row=3, n_col=6, outrow=(0, 1, 2) + ): + super(MIMOGridNet, self).__init__() + + self.n_row = n_row + self.n_col = n_col + self.n_chs = grid_chs + self.outrow = outrow + assert ( + len(grid_chs) == self.n_row + ), "should give num channels for each row (scale stream)" + assert ( + len(in_chs) == self.n_row + ), "should give input channels for each row (scale stream)" + assert len(out_chs) == len( + self.outrow + ), "should give out channels for each output row (scale stream)" + + for r, n_ch in enumerate(self.n_chs): + setattr(self, f"lateral_{r}_0", LateralBlock(in_chs[r], n_ch)) + for c in range(1, self.n_col): + setattr(self, f"lateral_{r}_{c}", LateralBlock(n_ch, n_ch)) + + for r, (in_ch, out_ch) in enumerate(zip(self.n_chs[:-1], self.n_chs[1:])): + for c in range(int(self.n_col / 2)): + setattr(self, f"down_{r}_{c}", DownSamplingBlock(in_ch, out_ch)) + + for r, (in_ch, out_ch) in enumerate(zip(self.n_chs[1:], self.n_chs[:-1])): + for c in range(int(self.n_col / 2)): + setattr(self, f"up_{r}_{c}", UpSamplingBlock(in_ch, out_ch)) + + for i, r in enumerate(outrow): + setattr(self, f"lateral_final_{r}", LateralBlock(self.n_chs[r], out_chs[i])) + + def forward(self, *args): + assert len(args) == self.n_row + + # extensible, memory-efficient + cur_col = list(args) + for c in range(int(self.n_col / 2)): + for r in range(self.n_row): + cur_col[r] = getattr(self, f"lateral_{r}_{c}")(cur_col[r]) + if r != 0: + cur_col[r] += getattr(self, f"down_{r-1}_{c}")(cur_col[r - 1]) + + for c in range(int(self.n_col / 2), self.n_col): + for r in range(self.n_row - 1, -1, -1): + cur_col[r] = getattr(self, f"lateral_{r}_{c}")(cur_col[r]) + if r != self.n_row - 1: + cur_col[r] += getattr(self, f"up_{r}_{c-int(self.n_col/2)}")( + cur_col[r + 1] + ) + + out = [] + for r in self.outrow: + out.append(getattr(self, f"lateral_final_{r}")(cur_col[r])) + + return out + + +class GeneralGridNet(nn.Module): + def __init__(self, in_chs, out_chs, grid_chs=(32, 64, 96), n_row=3, n_col=6): + super(GeneralGridNet, self).__init__() + + self.n_row = n_row + self.n_col = n_col + self.n_chs = grid_chs + assert ( + len(grid_chs) == self.n_row + ), "should give num channels for each row (scale stream)" + + for r, n_ch in enumerate(self.n_chs): + if r == 0: + setattr(self, f"lateral_{r}_0", LateralBlock(in_chs, n_ch)) + for c in range(1, self.n_col): + setattr(self, f"lateral_{r}_{c}", LateralBlock(n_ch, n_ch)) + + for r, (in_ch, out_ch) in enumerate(zip(self.n_chs[:-1], self.n_chs[1:])): + for c in range(int(self.n_col / 2)): + setattr(self, f"down_{r}_{c}", DownSamplingBlock(in_ch, out_ch)) + + for r, (in_ch, out_ch) in enumerate(zip(self.n_chs[1:], self.n_chs[:-1])): + for c in range(int(self.n_col / 2)): + setattr(self, f"up_{r}_{c}", UpSamplingBlock(in_ch, out_ch)) + + self.lateral_final = LateralBlock(self.n_chs[0], out_chs) + + def forward(self, x): + cur_col = [x] + [None] * (self.n_row - 1) + for c in range(int(self.n_col / 2)): + for r in range(self.n_row): + if cur_col[r] != None: + cur_col[r] = getattr(self, f"lateral_{r}_{c}")(cur_col[r]) + else: + cur_col[r] = 0.0 + if r != 0: + cur_col[r] += getattr(self, f"down_{r-1}_{c}")(cur_col[r - 1]) + + for c in range(int(self.n_col / 2), self.n_col): + for r in range(self.n_row - 1, -1, -1): + cur_col[r] = getattr(self, f"lateral_{r}_{c}")(cur_col[r]) + if r != self.n_row - 1: + cur_col[r] += getattr(self, f"up_{r}_{c-int(self.n_col/2)}")( + cur_col[r + 1] + ) + + return self.lateral_final(cur_col[0]) + + +class GridNet(nn.Module): + def __init__(self, in_chs, out_chs, grid_chs=(32, 64, 96)): + super(GridNet, self).__init__() + + self.n_row = 3 + self.n_col = 6 + self.n_chs = grid_chs + assert ( + len(grid_chs) == self.n_row + ), "should give num channels for each row (scale stream)" + + self.lateral_init = LateralBlock(in_chs, self.n_chs[0]) + + for r, n_ch in enumerate(self.n_chs): + for c in range(self.n_col - 1): + setattr(self, f"lateral_{r}_{c}", LateralBlock(n_ch, n_ch)) + + for r, (in_ch, out_ch) in enumerate(zip(self.n_chs[:-1], self.n_chs[1:])): + for c in range(int(self.n_col / 2)): + setattr(self, f"down_{r}_{c}", DownSamplingBlock(in_ch, out_ch)) + + for r, (in_ch, out_ch) in enumerate(zip(self.n_chs[1:], self.n_chs[:-1])): + for c in range(int(self.n_col / 2)): + setattr(self, f"up_{r}_{c}", UpSamplingBlock(in_ch, out_ch)) + + self.lateral_final = LateralBlock(self.n_chs[0], out_chs) + + def forward(self, x): + state_00 = self.lateral_init(x) + state_10 = self.down_0_0(state_00) + state_20 = self.down_1_0(state_10) + + state_01 = self.lateral_0_0(state_00) + state_11 = self.down_0_1(state_01) + self.lateral_1_0(state_10) + state_21 = self.down_1_1(state_11) + self.lateral_2_0(state_20) + + state_02 = self.lateral_0_1(state_01) + state_12 = self.down_0_2(state_02) + self.lateral_1_1(state_11) + state_22 = self.down_1_2(state_12) + self.lateral_2_1(state_21) + + state_23 = self.lateral_2_2(state_22) + state_13 = self.up_1_0(state_23) + self.lateral_1_2(state_12) + state_03 = self.up_0_0(state_13) + self.lateral_0_2(state_02) + + state_24 = self.lateral_2_3(state_23) + state_14 = self.up_1_1(state_24) + self.lateral_1_3(state_13) + state_04 = self.up_0_1(state_14) + self.lateral_0_3(state_03) + + state_25 = self.lateral_2_4(state_24) + state_15 = self.up_1_2(state_25) + self.lateral_1_4(state_14) + state_05 = self.up_0_2(state_15) + self.lateral_0_4(state_04) + + return self.lateral_final(state_05) + + +class LateralBlock(nn.Module): + def __init__(self, ch_in, ch_out): + super(LateralBlock, self).__init__() + self.f = nn.Sequential( + nn.PReLU(), + nn.Conv2d(ch_in, ch_out, kernel_size=3, padding=1), + nn.PReLU(), + nn.Conv2d(ch_out, ch_out, kernel_size=3, padding=1), + ) + if ch_in != ch_out: + self.conv = nn.Conv2d(ch_in, ch_out, kernel_size=3, padding=1) + + def forward(self, x): + fx = self.f(x) + if fx.shape[1] != x.shape[1]: + x = self.conv(x) + return fx + x + + +class DownSamplingBlock(nn.Module): + def __init__(self, ch_in, ch_out): + super(DownSamplingBlock, self).__init__() + self.f = nn.Sequential( + nn.PReLU(), + nn.Conv2d(ch_in, ch_out, kernel_size=3, stride=2, padding=1), + nn.PReLU(), + nn.Conv2d(ch_out, ch_out, kernel_size=3, padding=1), + ) + + def forward(self, x): + return self.f(x) + + +class UpSamplingBlock(nn.Module): + def __init__(self, ch_in, ch_out): + super(UpSamplingBlock, self).__init__() + self.f = nn.Sequential( + nn.Upsample(scale_factor=2, mode="bilinear", align_corners=False), + nn.PReLU(), + nn.Conv2d(ch_in, ch_out, kernel_size=3, padding=1), + nn.PReLU(), + nn.Conv2d(ch_out, ch_out, kernel_size=3, padding=1), + ) + + def forward(self, x): + return self.f(x) + +# end + + +class Network(torch.nn.Module): + def __init__(self): + super(Network, self).__init__() + + class Extractor(torch.nn.Module): + def __init__(self): + super(Extractor, self).__init__() + + self.netOne = torch.nn.Sequential( + torch.nn.Conv2d( + in_channels=3, + out_channels=16, + kernel_size=3, + stride=2, + padding=1, + ), + torch.nn.LeakyReLU(inplace=False, negative_slope=0.1), + torch.nn.Conv2d( + in_channels=16, + out_channels=16, + kernel_size=3, + stride=1, + padding=1, + ), + torch.nn.LeakyReLU(inplace=False, negative_slope=0.1), + torch.nn.Conv2d( + in_channels=16, + out_channels=16, + kernel_size=3, + stride=1, + padding=1, + ), + torch.nn.LeakyReLU(inplace=False, negative_slope=0.1), + ) + + self.netTwo = torch.nn.Sequential( + torch.nn.Conv2d( + in_channels=16, + out_channels=32, + kernel_size=3, + stride=2, + padding=1, + ), + torch.nn.LeakyReLU(inplace=False, negative_slope=0.1), + torch.nn.Conv2d( + in_channels=32, + out_channels=32, + kernel_size=3, + stride=1, + padding=1, + ), + torch.nn.LeakyReLU(inplace=False, negative_slope=0.1), + torch.nn.Conv2d( + in_channels=32, + out_channels=32, + kernel_size=3, + stride=1, + padding=1, + ), + torch.nn.LeakyReLU(inplace=False, negative_slope=0.1), + ) + + self.netThr = torch.nn.Sequential( + torch.nn.Conv2d( + in_channels=32, + out_channels=64, + kernel_size=3, + stride=2, + padding=1, + ), + torch.nn.LeakyReLU(inplace=False, negative_slope=0.1), + torch.nn.Conv2d( + in_channels=64, + out_channels=64, + kernel_size=3, + stride=1, + padding=1, + ), + torch.nn.LeakyReLU(inplace=False, negative_slope=0.1), + torch.nn.Conv2d( + in_channels=64, + out_channels=64, + kernel_size=3, + stride=1, + padding=1, + ), + torch.nn.LeakyReLU(inplace=False, negative_slope=0.1), + ) + + self.netFou = torch.nn.Sequential( + torch.nn.Conv2d( + in_channels=64, + out_channels=96, + kernel_size=3, + stride=2, + padding=1, + ), + torch.nn.LeakyReLU(inplace=False, negative_slope=0.1), + torch.nn.Conv2d( + in_channels=96, + out_channels=96, + kernel_size=3, + stride=1, + padding=1, + ), + torch.nn.LeakyReLU(inplace=False, negative_slope=0.1), + torch.nn.Conv2d( + in_channels=96, + out_channels=96, + kernel_size=3, + stride=1, + padding=1, + ), + torch.nn.LeakyReLU(inplace=False, negative_slope=0.1), + ) + + self.netFiv = torch.nn.Sequential( + torch.nn.Conv2d( + in_channels=96, + out_channels=128, + kernel_size=3, + stride=2, + padding=1, + ), + torch.nn.LeakyReLU(inplace=False, negative_slope=0.1), + torch.nn.Conv2d( + in_channels=128, + out_channels=128, + kernel_size=3, + stride=1, + padding=1, + ), + torch.nn.LeakyReLU(inplace=False, negative_slope=0.1), + torch.nn.Conv2d( + in_channels=128, + out_channels=128, + kernel_size=3, + stride=1, + padding=1, + ), + torch.nn.LeakyReLU(inplace=False, negative_slope=0.1), + ) + + self.netSix = torch.nn.Sequential( + torch.nn.Conv2d( + in_channels=128, + out_channels=196, + kernel_size=3, + stride=2, + padding=1, + ), + torch.nn.LeakyReLU(inplace=False, negative_slope=0.1), + torch.nn.Conv2d( + in_channels=196, + out_channels=196, + kernel_size=3, + stride=1, + padding=1, + ), + torch.nn.LeakyReLU(inplace=False, negative_slope=0.1), + torch.nn.Conv2d( + in_channels=196, + out_channels=196, + kernel_size=3, + stride=1, + padding=1, + ), + torch.nn.LeakyReLU(inplace=False, negative_slope=0.1), + ) + + # end + + def forward(self, tenInput): + tenOne = self.netOne(tenInput) + tenTwo = self.netTwo(tenOne) + tenThr = self.netThr(tenTwo) + tenFou = self.netFou(tenThr) + tenFiv = self.netFiv(tenFou) + tenSix = self.netSix(tenFiv) + + return [tenOne, tenTwo, tenThr, tenFou, tenFiv, tenSix] + + # end + + # end + + class Decoder(torch.nn.Module): + def __init__(self, intLevel): + super(Decoder, self).__init__() + + intPrevious = [ + None, + None, + 81 + 32 + 2 + 2, + 81 + 64 + 2 + 2, + 81 + 96 + 2 + 2, + 81 + 128 + 2 + 2, + 81, + None, + ][intLevel + 1] + intCurrent = [ + None, + None, + 81 + 32 + 2 + 2, + 81 + 64 + 2 + 2, + 81 + 96 + 2 + 2, + 81 + 128 + 2 + 2, + 81, + None, + ][intLevel + 0] + + if intLevel < 6: + self.netUpflow = torch.nn.ConvTranspose2d( + in_channels=2, + out_channels=2, + kernel_size=4, + stride=2, + padding=1, + ) + if intLevel < 6: + self.netUpfeat = torch.nn.ConvTranspose2d( + in_channels=intPrevious + 128 + 128 + 96 + 64 + 32, + out_channels=2, + kernel_size=4, + stride=2, + padding=1, + ) + if intLevel < 6: + self.fltBackwarp = [None, None, None, 5.0, 2.5, 1.25, 0.625, None][ + intLevel + 1 + ] + + self.netOne = torch.nn.Sequential( + torch.nn.Conv2d( + in_channels=intCurrent, + out_channels=128, + kernel_size=3, + stride=1, + padding=1, + ), + torch.nn.LeakyReLU(inplace=False, negative_slope=0.1), + ) + + self.netTwo = torch.nn.Sequential( + torch.nn.Conv2d( + in_channels=intCurrent + 128, + out_channels=128, + kernel_size=3, + stride=1, + padding=1, + ), + torch.nn.LeakyReLU(inplace=False, negative_slope=0.1), + ) + + self.netThr = torch.nn.Sequential( + torch.nn.Conv2d( + in_channels=intCurrent + 128 + 128, + out_channels=96, + kernel_size=3, + stride=1, + padding=1, + ), + torch.nn.LeakyReLU(inplace=False, negative_slope=0.1), + ) + + self.netFou = torch.nn.Sequential( + torch.nn.Conv2d( + in_channels=intCurrent + 128 + 128 + 96, + out_channels=64, + kernel_size=3, + stride=1, + padding=1, + ), + torch.nn.LeakyReLU(inplace=False, negative_slope=0.1), + ) + + self.netFiv = torch.nn.Sequential( + torch.nn.Conv2d( + in_channels=intCurrent + 128 + 128 + 96 + 64, + out_channels=32, + kernel_size=3, + stride=1, + padding=1, + ), + torch.nn.LeakyReLU(inplace=False, negative_slope=0.1), + ) + + self.netSix = torch.nn.Sequential( + torch.nn.Conv2d( + in_channels=intCurrent + 128 + 128 + 96 + 64 + 32, + out_channels=2, + kernel_size=3, + stride=1, + padding=1, + ) + ) + + # end + + def forward(self, tenFirst, tenSecond, objPrevious): + tenFlow = None + tenFeat = None + + if objPrevious is None: + tenFlow = None + tenFeat = None + + tenVolume = torch.nn.functional.leaky_relu( + input=FunctionCorrelation( + tenFirst=tenFirst, tenSecond=tenSecond + ), + negative_slope=0.1, + inplace=False, + ) + + tenFeat = torch.cat([tenVolume], 1) + + elif objPrevious is not None: + tenFlow = self.netUpflow(objPrevious["tenFlow"]) + tenFeat = self.netUpfeat(objPrevious["tenFeat"]) + + tenVolume = torch.nn.functional.leaky_relu( + input=FunctionCorrelation( + tenFirst=tenFirst, + tenSecond=backwarp( + tenInput=tenSecond, tenFlow=tenFlow * self.fltBackwarp + ), + ), + negative_slope=0.1, + inplace=False, + ) + + tenFeat = torch.cat([tenVolume, tenFirst, tenFlow, tenFeat], 1) + + # end + + tenFeat = torch.cat([self.netOne(tenFeat), tenFeat], 1) + tenFeat = torch.cat([self.netTwo(tenFeat), tenFeat], 1) + tenFeat = torch.cat([self.netThr(tenFeat), tenFeat], 1) + tenFeat = torch.cat([self.netFou(tenFeat), tenFeat], 1) + tenFeat = torch.cat([self.netFiv(tenFeat), tenFeat], 1) + + tenFlow = self.netSix(tenFeat) + + return {"tenFlow": tenFlow, "tenFeat": tenFeat} + + # end + + # end + + class Refiner(torch.nn.Module): + def __init__(self): + super(Refiner, self).__init__() + + self.netMain = torch.nn.Sequential( + torch.nn.Conv2d( + in_channels=81 + 32 + 2 + 2 + 128 + 128 + 96 + 64 + 32, + out_channels=128, + kernel_size=3, + stride=1, + padding=1, + dilation=1, + ), + torch.nn.LeakyReLU(inplace=False, negative_slope=0.1), + torch.nn.Conv2d( + in_channels=128, + out_channels=128, + kernel_size=3, + stride=1, + padding=2, + dilation=2, + ), + torch.nn.LeakyReLU(inplace=False, negative_slope=0.1), + torch.nn.Conv2d( + in_channels=128, + out_channels=128, + kernel_size=3, + stride=1, + padding=4, + dilation=4, + ), + torch.nn.LeakyReLU(inplace=False, negative_slope=0.1), + torch.nn.Conv2d( + in_channels=128, + out_channels=96, + kernel_size=3, + stride=1, + padding=8, + dilation=8, + ), + torch.nn.LeakyReLU(inplace=False, negative_slope=0.1), + torch.nn.Conv2d( + in_channels=96, + out_channels=64, + kernel_size=3, + stride=1, + padding=16, + dilation=16, + ), + torch.nn.LeakyReLU(inplace=False, negative_slope=0.1), + torch.nn.Conv2d( + in_channels=64, + out_channels=32, + kernel_size=3, + stride=1, + padding=1, + dilation=1, + ), + torch.nn.LeakyReLU(inplace=False, negative_slope=0.1), + torch.nn.Conv2d( + in_channels=32, + out_channels=2, + kernel_size=3, + stride=1, + padding=1, + dilation=1, + ), + ) + + # end + + def forward(self, tenInput): + return self.netMain(tenInput) + + # end + + # end + + self.netExtractor = Extractor() + + self.netTwo = Decoder(2) + self.netThr = Decoder(3) + self.netFou = Decoder(4) + self.netFiv = Decoder(5) + self.netSix = Decoder(6) + + self.netRefiner = Refiner() + + self.load_state_dict( + { + strKey.replace("module", "net"): tenWeight + for strKey, tenWeight in torch.hub.load_state_dict_from_url( + url="http://content.sniklaus.com/github/pytorch-pwc/network-" + + "default" + + ".pytorch", + model_dir=get_ckpt_container_path(MODEL_TYPE) + ).items() + } + ) + + # end + + def forward(self, tenFirst, tenSecond, *args): + # optionally pass pre-extracted feature pyramid in as args + if len(args) == 0: + tenFirst = self.netExtractor(tenFirst) + tenSecond = self.netExtractor(tenSecond) + else: + tenFirst, tenSecond = args + + objEstimate = self.netSix(tenFirst[-1], tenSecond[-1], None) + objEstimate = self.netFiv(tenFirst[-2], tenSecond[-2], objEstimate) + objEstimate = self.netFou(tenFirst[-3], tenSecond[-3], objEstimate) + objEstimate = self.netThr(tenFirst[-4], tenSecond[-4], objEstimate) + objEstimate = self.netTwo(tenFirst[-5], tenSecond[-5], objEstimate) + + return objEstimate["tenFlow"] + self.netRefiner(objEstimate["tenFeat"]) + + # end + + def extract_pyramid(self, tenFirst, tenSecond): + return self.netExtractor(tenFirst), self.netExtractor(tenSecond) + + def extract_pyramid_single(self, tenFirst): + return self.netExtractor(tenFirst) + + +# end + +netNetwork = None + +########################################################## + + +def estimate(tenFirst, tenSecond): + global netNetwork + + if netNetwork is None: + netNetwork = Network().cuda().eval() + # end + + assert tenFirst.shape[1] == tenSecond.shape[1] + assert tenFirst.shape[2] == tenSecond.shape[2] + + intWidth = tenFirst.shape[2] + intHeight = tenFirst.shape[1] + + assert ( + intWidth == 1024 + ) # remember that there is no guarantee for correctness, comment this line out if you acknowledge this and want to continue + assert ( + intHeight == 436 + ) # remember that there is no guarantee for correctness, comment this line out if you acknowledge this and want to continue + + tenPreprocessedFirst = tenFirst.cuda().view(1, 3, intHeight, intWidth) + tenPreprocessedSecond = tenSecond.cuda().view(1, 3, intHeight, intWidth) + + intPreprocessedWidth = int(math.floor(math.ceil(intWidth / 64.0) * 64.0)) + intPreprocessedHeight = int(math.floor(math.ceil(intHeight / 64.0) * 64.0)) + + tenPreprocessedFirst = torch.nn.functional.interpolate( + input=tenPreprocessedFirst, + size=(intPreprocessedHeight, intPreprocessedWidth), + mode="bilinear", + align_corners=False, + ) + tenPreprocessedSecond = torch.nn.functional.interpolate( + input=tenPreprocessedSecond, + size=(intPreprocessedHeight, intPreprocessedWidth), + mode="bilinear", + align_corners=False, + ) + + tenFlow = 20.0 * torch.nn.functional.interpolate( + input=netNetwork(tenPreprocessedFirst, tenPreprocessedSecond), + size=(intHeight, intWidth), + mode="bilinear", + align_corners=False, + ) + + tenFlow[:, 0, :, :] *= float(intWidth) / float(intPreprocessedWidth) + tenFlow[:, 1, :, :] *= float(intHeight) / float(intPreprocessedHeight) + + return tenFlow[0, :, :, :].cpu() + + +# end + + +class UNet3d_18(nn.Module): + def __init__(self, channels=[32, 64, 96, 128], bn=True): + super(UNet3d_18, self).__init__() + growth = 2 # since concatenating previous outputs + upmode = "transpose" # use transposeConv to upsample + + self.channels = channels + + self.lrelu = nn.LeakyReLU(0.2, True) + + self.encoder = r3d_18(bn=bn, channels=channels) + + self.decoder = nn.Sequential( + Conv_3d( + channels[::-1][0], + channels[::-1][1], + kernel_size=3, + padding=1, + bias=True, + ), + upConv3D( + channels[::-1][1] * growth, + channels[::-1][2], + kernel_size=(3, 4, 4), + stride=(1, 2, 2), + padding=(1, 1, 1), + upmode=upmode, + ), + upConv3D( + channels[::-1][2] * growth, + channels[::-1][3], + kernel_size=(3, 4, 4), + stride=(1, 2, 2), + padding=(1, 1, 1), + upmode=upmode, + ), + Conv_3d( + channels[::-1][3] * growth, + channels[::-1][3], + kernel_size=3, + padding=1, + bias=True, + ), + upConv3D( + channels[::-1][3] * growth, + channels[::-1][3], + kernel_size=(3, 4, 4), + stride=(1, 2, 2), + padding=(1, 1, 1), + upmode=upmode, + ), + ) + + self.feature_fuse = nn.Sequential( + *( + [ + nn.Conv2d( + channels[::-1][3] * 5, + channels[::-1][3], + kernel_size=1, + stride=1, + bias=False, + ) + ] + + [nn.BatchNorm2d(channels[::-1][3]) if bn else Identity] + ) + ) + + self.outconv = nn.Sequential( + nn.ReflectionPad2d(3), + nn.Conv2d(channels[::-1][3], 3, kernel_size=7, stride=1, padding=0), + ) + + def forward(self, im1, im3, im5, im7, im4_tilde): + images = torch.stack((im1, im3, im4_tilde, im5, im7), dim=2) + + x_0, x_1, x_2, x_3, x_4 = self.encoder(images) + + dx_3 = self.lrelu(self.decoder[0](x_4)) + dx_3 = torch.cat([dx_3, x_3], dim=1) + + dx_2 = self.lrelu(self.decoder[1](dx_3)) + dx_2 = torch.cat([dx_2, x_2], dim=1) + + dx_1 = self.lrelu(self.decoder[2](dx_2)) + dx_1 = torch.cat([dx_1, x_1], dim=1) + + dx_0 = self.lrelu(self.decoder[3](dx_1)) + dx_0 = torch.cat([dx_0, x_0], dim=1) + + dx_out = self.lrelu(self.decoder[4](dx_0)) + dx_out = torch.cat(torch.unbind(dx_out, 2), 1) + + out = self.lrelu(self.feature_fuse(dx_out)) + out = self.outconv(out) + + return out + + +class KernelEstimation(torch.nn.Module): + def __init__(self, kernel_size): + super(KernelEstimation, self).__init__() + self.kernel_size = kernel_size + + def Subnet_offset(ks): + return torch.nn.Sequential( + torch.nn.Conv2d( + in_channels=64, out_channels=64, kernel_size=3, stride=1, padding=1 + ), + torch.nn.ReLU(inplace=False), + torch.nn.Conv2d( + in_channels=64, out_channels=64, kernel_size=3, stride=1, padding=1 + ), + torch.nn.ReLU(inplace=False), + torch.nn.Conv2d( + in_channels=64, out_channels=ks, kernel_size=3, stride=1, padding=1 + ), + torch.nn.ReLU(inplace=False), + torch.nn.Upsample(scale_factor=2, mode="bilinear", align_corners=True), + torch.nn.Conv2d( + in_channels=ks, out_channels=ks, kernel_size=3, stride=1, padding=1 + ), + ) + + def Subnet_weight(ks): + return torch.nn.Sequential( + torch.nn.Conv2d( + in_channels=64, out_channels=64, kernel_size=3, stride=1, padding=1 + ), + torch.nn.ReLU(inplace=False), + torch.nn.Conv2d( + in_channels=64, out_channels=64, kernel_size=3, stride=1, padding=1 + ), + torch.nn.ReLU(inplace=False), + torch.nn.Conv2d( + in_channels=64, out_channels=ks, kernel_size=3, stride=1, padding=1 + ), + torch.nn.ReLU(inplace=False), + torch.nn.Upsample(scale_factor=2, mode="bilinear", align_corners=True), + torch.nn.Conv2d( + in_channels=ks, out_channels=ks, kernel_size=3, stride=1, padding=1 + ), + torch.nn.Softmax(dim=1), + ) + + def Subnet_offset_ds(ks): + return torch.nn.Sequential( + torch.nn.Conv2d( + in_channels=64, out_channels=64, kernel_size=3, stride=1, padding=1 + ), + torch.nn.ReLU(inplace=False), + torch.nn.Conv2d( + in_channels=64, out_channels=64, kernel_size=3, stride=1, padding=1 + ), + torch.nn.ReLU(inplace=False), + torch.nn.Conv2d( + in_channels=64, out_channels=ks, kernel_size=3, stride=1, padding=1 + ), + ) + + def Subnet_weight_ds(ks): + return torch.nn.Sequential( + torch.nn.Conv2d( + in_channels=64, out_channels=64, kernel_size=3, stride=1, padding=1 + ), + torch.nn.ReLU(inplace=False), + torch.nn.Conv2d( + in_channels=64, out_channels=64, kernel_size=3, stride=1, padding=1 + ), + torch.nn.ReLU(inplace=False), + torch.nn.Conv2d( + in_channels=64, out_channels=ks, kernel_size=3, stride=1, padding=1 + ), + torch.nn.Softmax(dim=1), + ) + + def Subnet_offset_us(ks): + return torch.nn.Sequential( + torch.nn.Conv2d( + in_channels=64, out_channels=64, kernel_size=3, stride=1, padding=1 + ), + torch.nn.ReLU(inplace=False), + torch.nn.Conv2d( + in_channels=64, out_channels=64, kernel_size=3, stride=1, padding=1 + ), + torch.nn.ReLU(inplace=False), + torch.nn.Conv2d( + in_channels=64, out_channels=ks, kernel_size=3, stride=1, padding=1 + ), + torch.nn.ReLU(inplace=False), + torch.nn.Upsample(scale_factor=4, mode="bilinear", align_corners=True), + torch.nn.Conv2d( + in_channels=ks, out_channels=ks, kernel_size=3, stride=1, padding=1 + ), + ) + + def Subnet_weight_us(ks): + return torch.nn.Sequential( + torch.nn.Conv2d( + in_channels=64, out_channels=64, kernel_size=3, stride=1, padding=1 + ), + torch.nn.ReLU(inplace=False), + torch.nn.Conv2d( + in_channels=64, out_channels=64, kernel_size=3, stride=1, padding=1 + ), + torch.nn.ReLU(inplace=False), + torch.nn.Conv2d( + in_channels=64, out_channels=ks, kernel_size=3, stride=1, padding=1 + ), + torch.nn.ReLU(inplace=False), + torch.nn.Upsample(scale_factor=4, mode="bilinear", align_corners=True), + torch.nn.Conv2d( + in_channels=ks, out_channels=ks, kernel_size=3, stride=1, padding=1 + ), + torch.nn.Softmax(dim=1), + ) + + self.moduleWeight1_ds = Subnet_weight_ds(self.kernel_size**2) + self.moduleAlpha1_ds = Subnet_offset_ds(self.kernel_size**2) + self.moduleBeta1_ds = Subnet_offset_ds(self.kernel_size**2) + self.moduleWeight2_ds = Subnet_weight_ds(self.kernel_size**2) + self.moduleAlpha2_ds = Subnet_offset_ds(self.kernel_size**2) + self.moduleBeta2_ds = Subnet_offset_ds(self.kernel_size**2) + + self.moduleWeight1 = Subnet_weight(self.kernel_size**2) + self.moduleAlpha1 = Subnet_offset(self.kernel_size**2) + self.moduleBeta1 = Subnet_offset(self.kernel_size**2) + self.moduleWeight2 = Subnet_weight(self.kernel_size**2) + self.moduleAlpha2 = Subnet_offset(self.kernel_size**2) + self.moduleBeta2 = Subnet_offset(self.kernel_size**2) + + self.moduleWeight1_us = Subnet_weight_us(self.kernel_size**2) + self.moduleAlpha1_us = Subnet_offset_us(self.kernel_size**2) + self.moduleBeta1_us = Subnet_offset_us(self.kernel_size**2) + self.moduleWeight2_us = Subnet_weight_us(self.kernel_size**2) + self.moduleAlpha2_us = Subnet_offset_us(self.kernel_size**2) + self.moduleBeta2_us = Subnet_offset_us(self.kernel_size**2) + + def forward(self, tensorCombine): + # Frame 0 + Weight1_ds = self.moduleWeight1_ds(tensorCombine) + Weight1 = self.moduleWeight1(tensorCombine) + Weight1_us = self.moduleWeight1_us(tensorCombine) + Alpha1_ds = self.moduleAlpha1_ds(tensorCombine) + Alpha1 = self.moduleAlpha1(tensorCombine) + Alpha1_us = self.moduleAlpha1_us(tensorCombine) + Beta1_ds = self.moduleBeta1_ds(tensorCombine) + Beta1 = self.moduleBeta1(tensorCombine) + Beta1_us = self.moduleBeta1_us(tensorCombine) + + # Frame 2 + Weight2_ds = self.moduleWeight2_ds(tensorCombine) + Weight2 = self.moduleWeight2(tensorCombine) + Weight2_us = self.moduleWeight2_us(tensorCombine) + Alpha2_ds = self.moduleAlpha2_ds(tensorCombine) + Alpha2 = self.moduleAlpha2(tensorCombine) + Alpha2_us = self.moduleAlpha2_us(tensorCombine) + Beta2_ds = self.moduleBeta2_ds(tensorCombine) + Beta2 = self.moduleBeta2(tensorCombine) + Beta2_us = self.moduleBeta2_us(tensorCombine) + + return ( + Weight1_ds, + Alpha1_ds, + Beta1_ds, + Weight2_ds, + Alpha2_ds, + Beta2_ds, + Weight1, + Alpha1, + Beta1, + Weight2, + Alpha2, + Beta2, + Weight1_us, + Alpha1_us, + Beta1_us, + Weight2_us, + Alpha2_us, + Beta2_us, + ) + + +class STMFNet_Model(torch.nn.Module): + def __init__(self): + super(STMFNet_Model, self).__init__() + + class Metric(torch.nn.Module): + def __init__(self): + super(Metric, self).__init__() + self.paramScale = torch.nn.Parameter(-torch.ones(1, 1, 1, 1)) + + def forward(self, tenFirst, tenSecond, tenFlow): + return self.paramScale * F.l1_loss( + input=tenFirst, + target=backwarp(tenSecond, tenFlow), + reduction="none", + ).mean(1, True) + + self.kernel_size = 5 + self.dilation = 1 + self.featc = [64, 128, 256, 512] + self.featnorm = "batch" + self.finetune_pwc = False + + self.kernel_pad = int(((self.kernel_size - 1) * self.dilation) / 2.0) + + self.feature_extractor = UMultiScaleResNext( + self.featc, norm_layer=self.featnorm + ) + + self.get_kernel = KernelEstimation(self.kernel_size) + + self.modulePad = torch.nn.ReplicationPad2d( + [self.kernel_pad, self.kernel_pad, self.kernel_pad, self.kernel_pad] + ) + + self.moduleAdaCoF = FunctionAdaCoF.apply + + self.gauss_kernel = torch.nn.Parameter( + gaussian_kernel(5, 0.5).repeat(3, 1, 1, 1), requires_grad=False + ) + + self.upsampler = Upsampler_8tap() + + self.scale_synthesis = MIMOGridNet( + (6, 6 + 6, 6), (3,), grid_chs=(32, 64, 96), n_row=3, n_col=4, outrow=(1,) + ) + + self.flow_estimator = PWCNet() + + self.softsplat = ModuleSoftsplat(strType="softmax") + + self.metric = Metric() + + self.dyntex_generator = UNet3d_18(bn=self.featnorm) + + # freeze weights of PWCNet if not finetuning it + if not self.finetune_pwc: + for param in self.flow_estimator.parameters(): + param.requires_grad = False + + def forward(self, I0, I1, I2, I3): + h0 = int(list(I1.size())[2]) + w0 = int(list(I1.size())[3]) + h2 = int(list(I2.size())[2]) + w2 = int(list(I2.size())[3]) + if h0 != h2 or w0 != w2: + sys.exit("Frame sizes do not match") + + h_padded = False + w_padded = False + if h0 % 128 != 0: + pad_h = 128 - (h0 % 128) + I0 = F.pad(I0, (0, 0, 0, pad_h), mode="reflect") + I1 = F.pad(I1, (0, 0, 0, pad_h), mode="reflect") + I2 = F.pad(I2, (0, 0, 0, pad_h), mode="reflect") + I3 = F.pad(I3, (0, 0, 0, pad_h), mode="reflect") + h_padded = True + + if w0 % 128 != 0: + pad_w = 128 - (w0 % 128) + I0 = F.pad(I0, (0, pad_w, 0, 0), mode="reflect") + I1 = F.pad(I1, (0, pad_w, 0, 0), mode="reflect") + I2 = F.pad(I2, (0, pad_w, 0, 0), mode="reflect") + I3 = F.pad(I3, (0, pad_w, 0, 0), mode="reflect") + w_padded = True + + feats = self.feature_extractor(moduleNormalize(I1), moduleNormalize(I2)) + kernelest = self.get_kernel(feats) + Weight1_ds, Alpha1_ds, Beta1_ds, Weight2_ds, Alpha2_ds, Beta2_ds = kernelest[:6] + Weight1, Alpha1, Beta1, Weight2, Alpha2, Beta2 = kernelest[6:12] + Weight1_us, Alpha1_us, Beta1_us, Weight2_us, Alpha2_us, Beta2_us = kernelest[ + 12: + ] + + # Original scale + tensorAdaCoF1 = ( + self.moduleAdaCoF(self.modulePad(I1), Weight1, Alpha1, Beta1, self.dilation) + * 1.0 + ) + tensorAdaCoF2 = ( + self.moduleAdaCoF(self.modulePad(I2), Weight2, Alpha2, Beta2, self.dilation) + * 1.0 + ) + + # 1/2 downsampled version + c, h, w = I1.shape[1:] + p = (self.gauss_kernel.shape[-1] - 1) // 2 + I1_blur = F.conv2d( + F.pad(I1, pad=(p, p, p, p), mode="reflect"), self.gauss_kernel, groups=c + ) + I2_blur = F.conv2d( + F.pad(I2, pad=(p, p, p, p), mode="reflect"), self.gauss_kernel, groups=c + ) + I1_ds = F.interpolate( + I1_blur, size=(h // 2, w // 2), mode="bilinear", align_corners=False + ) + I2_ds = F.interpolate( + I2_blur, size=(h // 2, w // 2), mode="bilinear", align_corners=False + ) + tensorAdaCoF1_ds = ( + self.moduleAdaCoF( + self.modulePad(I1_ds), Weight1_ds, Alpha1_ds, Beta1_ds, self.dilation + ) + * 1.0 + ) + tensorAdaCoF2_ds = ( + self.moduleAdaCoF( + self.modulePad(I2_ds), Weight2_ds, Alpha2_ds, Beta2_ds, self.dilation + ) + * 1.0 + ) + + # x2 upsampled version + I1_us = self.upsampler(I1) + I2_us = self.upsampler(I2) + tensorAdaCoF1_us = ( + self.moduleAdaCoF( + self.modulePad(I1_us), Weight1_us, Alpha1_us, Beta1_us, self.dilation + ) + * 1.0 + ) + tensorAdaCoF2_us = ( + self.moduleAdaCoF( + self.modulePad(I2_us), Weight2_us, Alpha2_us, Beta2_us, self.dilation + ) + * 1.0 + ) + + # use softsplat for refinement + pyramid0, pyramid2 = self.flow_estimator.extract_pyramid(I1, I2) + flow_0_2 = 20 * self.flow_estimator(I1, I2, pyramid0, pyramid2) + flow_0_2 = F.interpolate( + flow_0_2, size=(h, w), mode="bilinear", align_corners=False + ) + flow_2_0 = 20 * self.flow_estimator(I2, I1, pyramid2, pyramid0) + flow_2_0 = F.interpolate( + flow_2_0, size=(h, w), mode="bilinear", align_corners=False + ) + metric_0_2 = self.metric(I1, I2, flow_0_2) + metric_2_0 = self.metric(I2, I1, flow_2_0) + tensorSoftsplat0 = self.softsplat(I1, 0.5 * flow_0_2, metric_0_2) + tensorSoftsplat2 = self.softsplat(I2, 0.5 * flow_2_0, metric_2_0) + + # synthesize multiple scales + tensorCombine_us = torch.cat([tensorAdaCoF1_us, tensorAdaCoF2_us], dim=1) + tensorCombine = torch.cat( + [tensorAdaCoF1, tensorAdaCoF2, tensorSoftsplat0, tensorSoftsplat2], dim=1 + ) + tensorCombine_ds = torch.cat([tensorAdaCoF1_ds, tensorAdaCoF2_ds], dim=1) + output_tilde = self.scale_synthesis( + tensorCombine_us, tensorCombine, tensorCombine_ds + )[0] + + # generate dynamic texture + dyntex = self.dyntex_generator(I0, I1, I2, I3, output_tilde) + output = output_tilde + dyntex + + if h_padded: + output = output[:, :, 0:h0, :] + if w_padded: + output = output[:, :, :, 0:w0] + + if self.training: + return {"frame1": output} + else: + return output \ No newline at end of file diff --git a/comfyui-frame-interpolation/vfi_models/xvfi/__init__.py b/comfyui-frame-interpolation/vfi_models/xvfi/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e52fc1a85dfadc84dd517875abd7d592e3c087e2 --- /dev/null +++ b/comfyui-frame-interpolation/vfi_models/xvfi/__init__.py @@ -0,0 +1,115 @@ +import argparse +import torch +import torch.nn as nn +import torch.nn.functional as F +import einops +from torch.utils.data import DataLoader +import pathlib +from vfi_utils import load_file_from_github_release, preprocess_frames, postprocess_frames, InterpolationStateList +import typing +from comfy.model_management import get_torch_device + +CKPT_CONFIGS = { + "XVFInet_X4K1000FPS_exp1_latest.pt": { + "module_scale_factor": 4, + "S_trn": 3, + "S_tst": 5 + }, + "XVFInet_Vimeo_exp1_latest.pt": { + "module_scale_factor": 2, + "S_trn": 1, + "S_tst": 1 + } +} + +class XVFI_Inference(nn.Module): + def __init__(self, model_path, model_config) -> None: + super(XVFI_Inference, self).__init__() + from .xvfi_arch import XVFInet, weights_init + model_config = model_config + args = argparse.Namespace( + gpu=get_torch_device(), + nf=64, + **model_config, + img_ch=3, + ) + self.model = XVFInet(args).apply(weights_init).to(get_torch_device()) + self.model.load_state_dict(torch.load(model_path, map_location=get_torch_device())["state_dict_Model"]) + + def forward(self, I0, I1, timestep): + #"Real" inference is called "test_custom" in the original repo + #https://github.com/JihyongOh/XVFI/blob/main/utils.py#L434 + #https://github.com/JihyongOh/XVFI/blob/main/main.py#L336 + + x = torch.stack([I0, I1], dim=0) + x = einops.rearrange(x, "t b c h w -> b c t h w") + return self.model(x, timestep, is_training=False) + +MODEL_TYPE = pathlib.Path(__file__).parent.name + +class XVFI: + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "ckpt_name": (list(CKPT_CONFIGS.keys()), ), + "frames": ("IMAGE", ), + "batch_size": ("INT", {"default": 1, "min": 1, "max": 100}), + "multipler": ("INT", {"default": 2, "min": 2, "max": 1000}), + }, + "optional": { + "optional_interpolation_states": ("INTERPOLATION_STATES", ), + } + } + + RETURN_TYPES = ("IMAGE", ) + FUNCTION = "vfi" + CATEGORY = "ComfyUI-Frame-Interpolation/VFI" + + def vfi( + self, + ckpt_name: typing.AnyStr, + frames: torch.Tensor, + batch_size: typing.SupportsInt = 1, + multipler: typing.SupportsInt = 2, + optional_interpolation_states: InterpolationStateList = None + ): + model_path = load_file_from_github_release(MODEL_TYPE, ckpt_name) + ckpt_config = CKPT_CONFIGS[ckpt_name] + global model + model = XVFI_Inference(model_path, ckpt_config) + + frames = preprocess_frames(frames) + #https://github.com/JihyongOh/XVFI/blob/main/main.py#L314 + divide = 2 ** (ckpt_config["S_tst"]) * ckpt_config["module_scale_factor"] * 4 + B, C, H, W = frames.size() + H_padding = (divide - H % divide) % divide + W_padding = (divide - W % divide) % divide + if H_padding != 0 or W_padding != 0: + frames = F.pad(frames, (0, W_padding, 0, H_padding), "constant") + + frame_dict = { + str(i): frames[i].unsqueeze(0) for i in range(frames.shape[0]) + } + + if optional_interpolation_states is None: + interpolation_states = [True] * (frames.shape[0] - 1) + else: + interpolation_states = optional_interpolation_states + + enabled_former_idxs = [i for i, state in enumerate(interpolation_states) if state] + former_idxs_loader = DataLoader(enabled_former_idxs, batch_size=batch_size) + + for former_idxs_batch in former_idxs_loader: + for middle_i in range(1, multipler): + _middle_frames = model( + frames[former_idxs_batch], + frames[former_idxs_batch + 1], + timestep=torch.tensor([middle_i/multipler]).repeat(len(former_idxs_batch)).unsqueeze(1).to(get_torch_device()) + ) + for i, former_idx in enumerate(former_idxs_batch): + frame_dict[f'{former_idx}.{middle_i}'] = _middle_frames[i].unsqueeze(0) + + out_frames = torch.cat([frame_dict[key] for key in sorted(frame_dict.keys())], dim=0)[:, :, :H, :W] + return (postprocess_frames(out_frames), ) + diff --git a/comfyui-frame-interpolation/vfi_models/xvfi/xvfi_arch.py b/comfyui-frame-interpolation/vfi_models/xvfi/xvfi_arch.py new file mode 100644 index 0000000000000000000000000000000000000000..dae013e749616c9b6b2e2767db08b8c8dab6046f --- /dev/null +++ b/comfyui-frame-interpolation/vfi_models/xvfi/xvfi_arch.py @@ -0,0 +1,506 @@ +import functools, random +import torch +import torch.nn as nn +import torch.nn.functional as F +from torch.autograd import Variable +import numpy as np +from torch.nn import init +from comfy.model_management import get_torch_device + + + +class XVFInet(nn.Module): + + def __init__(self, args): + super(XVFInet, self).__init__() + self.args = args + self.device = get_torch_device() + self.nf = args.nf + self.scale = args.module_scale_factor + self.vfinet = VFInet(args) + self.lrelu = nn.ReLU() + self.in_channels = 3 + self.channel_converter = nn.Sequential( + nn.Conv3d(self.in_channels, self.nf, [1, 3, 3], [1, 1, 1], [0, 1, 1]), + nn.ReLU()) + + self.rec_ext_ds_module = [self.channel_converter] + self.rec_ext_ds = nn.Conv3d(self.nf, self.nf, [1, 3, 3], [1, 2, 2], [0, 1, 1]) + for _ in range(int(np.log2(self.scale))): + self.rec_ext_ds_module.append(self.rec_ext_ds) + self.rec_ext_ds_module.append(nn.ReLU()) + self.rec_ext_ds_module.append(nn.Conv3d(self.nf, self.nf, [1, 3, 3], 1, [0, 1, 1])) + self.rec_ext_ds_module.append(RResBlock2D_3D(args, T_reduce_flag=False)) + self.rec_ext_ds_module = nn.Sequential(*self.rec_ext_ds_module) + + self.rec_ctx_ds = nn.Conv3d(self.nf, self.nf, [1, 3, 3], [1, 2, 2], [0, 1, 1]) + + print("The lowest scale depth for training (S_trn): ", self.args.S_trn) + print("The lowest scale depth for test (S_tst): ", self.args.S_tst) + + def forward(self, x, t_value, is_training=True): + ''' + x shape : [B,C,T,H,W] + t_value shape : [B,1] ############### + ''' + B, C, T, H, W = x.size() + B2, C2 = t_value.size() + assert C2 == 1, "t_value shape is [B,]" + assert T % 2 == 0, "T must be an even number" + t_value = t_value.view(B, 1, 1, 1) + + flow_l = None + feat_x = self.rec_ext_ds_module(x) + feat_x_list = [feat_x] + self.lowest_depth_level = self.args.S_trn if is_training else self.args.S_tst + for level in range(1, self.lowest_depth_level+1): + feat_x = self.rec_ctx_ds(feat_x) + feat_x_list.append(feat_x) + + if is_training: + out_l_list = [] + flow_refine_l_list = [] + out_l, flow_l, flow_refine_l = self.vfinet(x, feat_x_list[self.args.S_trn], flow_l, t_value, level=self.args.S_trn, is_training=True) + out_l_list.append(out_l) + flow_refine_l_list.append(flow_refine_l) + for level in range(self.args.S_trn-1, 0, -1): ## self.args.S_trn, self.args.S_trn-1, ..., 1. level 0 is not included + out_l, flow_l = self.vfinet(x, feat_x_list[level], flow_l, t_value, level=level, is_training=True) + out_l_list.append(out_l) + out_l, flow_l, flow_refine_l, occ_0_l0 = self.vfinet(x, feat_x_list[0], flow_l, t_value, level=0, is_training=True) + out_l_list.append(out_l) + flow_refine_l_list.append(flow_refine_l) + return out_l_list[::-1], flow_refine_l_list[::-1], occ_0_l0, torch.mean(x, dim=2) # out_l_list should be reversed. [out_l0, out_l1, ...] + + else: # Testing + for level in range(self.args.S_tst, 0, -1): ## self.args.S_tst, self.args.S_tst-1, ..., 1. level 0 is not included + flow_l = self.vfinet(x, feat_x_list[level], flow_l, t_value, level=level, is_training=False) + out_l = self.vfinet(x, feat_x_list[0], flow_l, t_value, level=0, is_training=False) + return out_l + + +class VFInet(nn.Module): + + def __init__(self, args): + super(VFInet, self).__init__() + self.args = args + self.device = get_torch_device() + self.nf = args.nf + self.scale = args.module_scale_factor + self.in_channels = 3 + + self.conv_flow_bottom = nn.Sequential( + nn.Conv2d(2*self.nf, 2*self.nf, [4,4], 2, [1,1]), + nn.ReLU(), + nn.Conv2d(2*self.nf, 4*self.nf, [4,4], 2, [1,1]), + nn.ReLU(), + nn.UpsamplingNearest2d(scale_factor=2), + nn.Conv2d(4 * self.nf, 2 * self.nf, [3, 3], 1, [1, 1]), + nn.ReLU(), + nn.UpsamplingNearest2d(scale_factor=2), + nn.Conv2d(2 * self.nf, self.nf, [3, 3], 1, [1, 1]), + nn.ReLU(), + nn.Conv2d(self.nf, 6, [3,3], 1, [1,1]), + ) + + self.conv_flow1 = nn.Conv2d(2*self.nf, self.nf, [3, 3], 1, [1, 1]) + + self.conv_flow2 = nn.Sequential( + nn.Conv2d(2*self.nf + 4, 2 * self.nf, [4, 4], 2, [1, 1]), + nn.ReLU(), + nn.Conv2d(2 * self.nf, 4 * self.nf, [4, 4], 2, [1, 1]), + nn.ReLU(), + nn.UpsamplingNearest2d(scale_factor=2), + nn.Conv2d(4 * self.nf, 2 * self.nf, [3, 3], 1, [1, 1]), + nn.ReLU(), + nn.UpsamplingNearest2d(scale_factor=2), + nn.Conv2d(2 * self.nf, self.nf, [3, 3], 1, [1, 1]), + nn.ReLU(), + nn.Conv2d(self.nf, 6, [3, 3], 1, [1, 1]), + ) + + self.conv_flow3 = nn.Sequential( + nn.Conv2d(4 + self.nf * 4, self.nf, [1, 1], 1, [0, 0]), + nn.ReLU(), + nn.Conv2d(self.nf, 2 * self.nf, [4, 4], 2, [1, 1]), + nn.ReLU(), + nn.Conv2d(2 * self.nf, 4 * self.nf, [4, 4], 2, [1, 1]), + nn.ReLU(), + nn.UpsamplingNearest2d(scale_factor=2), + nn.Conv2d(4 * self.nf, 2 * self.nf, [3, 3], 1, [1, 1]), + nn.ReLU(), + nn.UpsamplingNearest2d(scale_factor=2), + nn.Conv2d(2 * self.nf, self.nf, [3, 3], 1, [1, 1]), + nn.ReLU(), + nn.Conv2d(self.nf, 4, [3, 3], 1, [1, 1]), + ) + + self.refine_unet = RefineUNet(args) + self.lrelu = nn.ReLU() + + def forward(self, x, feat_x, flow_l_prev, t_value, level, is_training): + ''' + x shape : [B,C,T,H,W] + t_value shape : [B,1] ############### + ''' + B, C, T, H, W = x.size() + assert T % 2 == 0, "T must be an even number" + + ####################### For a single level + l = 2 ** level + x_l = x.permute(0,2,1,3,4) + x_l = x_l.contiguous().view(B * T, C, H, W) + + if level == 0: + pass + else: + x_l = F.interpolate(x_l, scale_factor=(1.0 / l, 1.0 / l), mode='bicubic', align_corners=False) + ''' + Down pixel-shuffle + ''' + x_l = x_l.view(B, T, C, H//l, W//l) + x_l = x_l.permute(0,2,1,3,4) + + B, C, T, H, W = x_l.size() + + ## Feature extraction + feat0_l = feat_x[:,:,0,:,:] + feat1_l = feat_x[:,:,1,:,:] + + ## Flow estimation + if flow_l_prev is None: + flow_l_tmp = self.conv_flow_bottom(torch.cat((feat0_l, feat1_l), dim=1)) + flow_l = flow_l_tmp[:,:4,:,:] + else: + up_flow_l_prev = 2.0*F.interpolate(flow_l_prev.detach(), scale_factor=(2,2), mode='bilinear', align_corners=False) + warped_feat1_l = self.bwarp(feat1_l, up_flow_l_prev[:,:2,:,:]) + warped_feat0_l = self.bwarp(feat0_l, up_flow_l_prev[:,2:,:,:]) + flow_l_tmp = self.conv_flow2(torch.cat([self.conv_flow1(torch.cat([feat0_l, warped_feat1_l],dim=1)), self.conv_flow1(torch.cat([feat1_l, warped_feat0_l],dim=1)), up_flow_l_prev],dim=1)) + flow_l = flow_l_tmp[:,:4,:,:] + up_flow_l_prev + + if not is_training and level!=0: + return flow_l + + flow_01_l = flow_l[:,:2,:,:] + flow_10_l = flow_l[:,2:,:,:] + z_01_l = torch.sigmoid(flow_l_tmp[:,4:5,:,:]) + z_10_l = torch.sigmoid(flow_l_tmp[:,5:6,:,:]) + + ## Complementary Flow Reversal (CFR) + flow_forward, norm0_l = self.z_fwarp(flow_01_l, t_value * flow_01_l, z_01_l) ## Actually, F (t) -> (t+1). Translation only. Not normalized yet + flow_backward, norm1_l = self.z_fwarp(flow_10_l, (1-t_value) * flow_10_l, z_10_l) ## Actually, F (1-t) -> (-t). Translation only. Not normalized yet + + flow_t0_l = -(1-t_value) * ((t_value)*flow_forward) + (t_value) * ((t_value)*flow_backward) # The numerator of Eq.(1) in the paper. + flow_t1_l = (1-t_value) * ((1-t_value)*flow_forward) - (t_value) * ((1-t_value)*flow_backward) # The numerator of Eq.(2) in the paper. + + norm_l = (1-t_value)*norm0_l + t_value*norm1_l + mask_ = (norm_l.detach() > 0).type(norm_l.type()) + flow_t0_l = (1-mask_) * flow_t0_l + mask_ * (flow_t0_l.clone() / (norm_l.clone() + (1-mask_))) # Divide the numerator with denominator in Eq.(1) + flow_t1_l = (1-mask_) * flow_t1_l + mask_ * (flow_t1_l.clone() / (norm_l.clone() + (1-mask_))) # Divide the numerator with denominator in Eq.(2) + + ## Feature warping + warped0_l = self.bwarp(feat0_l, flow_t0_l) + warped1_l = self.bwarp(feat1_l, flow_t1_l) + + ## Flow refinement + flow_refine_l = torch.cat([feat0_l, warped0_l, warped1_l, feat1_l, flow_t0_l, flow_t1_l], dim=1) + flow_refine_l = self.conv_flow3(flow_refine_l) + torch.cat([flow_t0_l, flow_t1_l], dim=1) + flow_t0_l = flow_refine_l[:, :2, :, :] + flow_t1_l = flow_refine_l[:, 2:4, :, :] + + warped0_l = self.bwarp(feat0_l, flow_t0_l) + warped1_l = self.bwarp(feat1_l, flow_t1_l) + + ## Flow upscale + flow_t0_l = self.scale * F.interpolate(flow_t0_l, scale_factor=(self.scale, self.scale), mode='bilinear',align_corners=False) + flow_t1_l = self.scale * F.interpolate(flow_t1_l, scale_factor=(self.scale, self.scale), mode='bilinear',align_corners=False) + + ## Image warping and blending + warped_img0_l = self.bwarp(x_l[:,:,0,:,:], flow_t0_l) + warped_img1_l = self.bwarp(x_l[:,:,1,:,:], flow_t1_l) + + refine_out = self.refine_unet(torch.cat([F.pixel_shuffle(torch.cat([feat0_l, feat1_l, warped0_l, warped1_l],dim=1), self.scale), x_l[:,:,0,:,:], x_l[:,:,1,:,:], warped_img0_l, warped_img1_l, flow_t0_l, flow_t1_l],dim=1)) + occ_0_l = torch.sigmoid(refine_out[:, 0:1, :, :]) + occ_1_l = 1-occ_0_l + + out_l = (1-t_value)*occ_0_l*warped_img0_l + t_value*occ_1_l*warped_img1_l + out_l = out_l / ( (1-t_value)*occ_0_l + t_value*occ_1_l ) + refine_out[:, 1:4, :, :] + + if not is_training and level==0: + return out_l + + if is_training: + if flow_l_prev is None: + # if level == self.args.S_trn: + return out_l, flow_l, flow_refine_l[:, 0:4, :, :] + elif level != 0: + return out_l, flow_l + else: # level==0 + return out_l, flow_l, flow_refine_l[:, 0:4, :, :], occ_0_l + + def bwarp(self, x, flo): + ''' + x: [B, C, H, W] (im2) + flo: [B, 2, H, W] flow + ''' + B, C, H, W = x.size() + # mesh grid + xx = torch.arange(0, W).view(1, 1, 1, W).expand(B, 1, H, W) + yy = torch.arange(0, H).view(1, 1, H, 1).expand(B, 1, H, W) + grid = torch.cat((xx, yy), 1).float() + + grid = grid.to(self.device) + vgrid = torch.autograd.Variable(grid) + flo + + # scale grid to [-1,1] + vgrid[:, 0, :, :] = 2.0 * vgrid[:, 0, :, :].clone() / max(W - 1, 1) - 1.0 + vgrid[:, 1, :, :] = 2.0 * vgrid[:, 1, :, :].clone() / max(H - 1, 1) - 1.0 + + vgrid = vgrid.permute(0, 2, 3, 1) # [B,H,W,2] + output = nn.functional.grid_sample(x, vgrid, align_corners=True) + mask = torch.autograd.Variable(torch.ones(x.size())).to(self.device) + mask = nn.functional.grid_sample(mask, vgrid, align_corners=True) + + # mask[mask<0.9999] = 0 + # mask[mask>0] = 1 + mask = mask.masked_fill_(mask < 0.999, 0) + mask = mask.masked_fill_(mask > 0, 1) + + return output * mask + + def fwarp(self, img, flo): + + """ + -img: image (N, C, H, W) + -flo: optical flow (N, 2, H, W) + elements of flo is in [0, H] and [0, W] for dx, dy + https://github.com/lyh-18/EQVI/blob/EQVI-master/models/forward_warp_gaussian.py + """ + + # (x1, y1) (x1, y2) + # +---------------+ + # | | + # | o(x, y) | + # | | + # | | + # | | + # | | + # +---------------+ + # (x2, y1) (x2, y2) + + N, C, _, _ = img.size() + + # translate start-point optical flow to end-point optical flow + y = flo[:, 0:1:, :] + x = flo[:, 1:2, :, :] + + x = x.repeat(1, C, 1, 1) + y = y.repeat(1, C, 1, 1) + + # Four point of square (x1, y1), (x1, y2), (x2, y1), (y2, y2) + x1 = torch.floor(x) + x2 = x1 + 1 + y1 = torch.floor(y) + y2 = y1 + 1 + + # firstly, get gaussian weights + w11, w12, w21, w22 = self.get_gaussian_weights(x, y, x1, x2, y1, y2) + + # secondly, sample each weighted corner + img11, o11 = self.sample_one(img, x1, y1, w11) + img12, o12 = self.sample_one(img, x1, y2, w12) + img21, o21 = self.sample_one(img, x2, y1, w21) + img22, o22 = self.sample_one(img, x2, y2, w22) + + imgw = img11 + img12 + img21 + img22 + o = o11 + o12 + o21 + o22 + + return imgw, o + + + def z_fwarp(self, img, flo, z): + """ + -img: image (N, C, H, W) + -flo: optical flow (N, 2, H, W) + elements of flo is in [0, H] and [0, W] for dx, dy + modified from https://github.com/lyh-18/EQVI/blob/EQVI-master/models/forward_warp_gaussian.py + """ + + # (x1, y1) (x1, y2) + # +---------------+ + # | | + # | o(x, y) | + # | | + # | | + # | | + # | | + # +---------------+ + # (x2, y1) (x2, y2) + + N, C, _, _ = img.size() + + # translate start-point optical flow to end-point optical flow + y = flo[:, 0:1:, :] + x = flo[:, 1:2, :, :] + + x = x.repeat(1, C, 1, 1) + y = y.repeat(1, C, 1, 1) + + # Four point of square (x1, y1), (x1, y2), (x2, y1), (y2, y2) + x1 = torch.floor(x) + x2 = x1 + 1 + y1 = torch.floor(y) + y2 = y1 + 1 + + # firstly, get gaussian weights + w11, w12, w21, w22 = self.get_gaussian_weights(x, y, x1, x2, y1, y2, z+1e-5) + + # secondly, sample each weighted corner + img11, o11 = self.sample_one(img, x1, y1, w11) + img12, o12 = self.sample_one(img, x1, y2, w12) + img21, o21 = self.sample_one(img, x2, y1, w21) + img22, o22 = self.sample_one(img, x2, y2, w22) + + imgw = img11 + img12 + img21 + img22 + o = o11 + o12 + o21 + o22 + + return imgw, o + + + def get_gaussian_weights(self, x, y, x1, x2, y1, y2, z=1.0): + # z 0.0 ~ 1.0 + w11 = z * torch.exp(-((x - x1) ** 2 + (y - y1) ** 2)) + w12 = z * torch.exp(-((x - x1) ** 2 + (y - y2) ** 2)) + w21 = z * torch.exp(-((x - x2) ** 2 + (y - y1) ** 2)) + w22 = z * torch.exp(-((x - x2) ** 2 + (y - y2) ** 2)) + + return w11, w12, w21, w22 + + def sample_one(self, img, shiftx, shifty, weight): + """ + Input: + -img (N, C, H, W) + -shiftx, shifty (N, c, H, W) + """ + + N, C, H, W = img.size() + + # flatten all (all restored as Tensors) + flat_shiftx = shiftx.view(-1) + flat_shifty = shifty.view(-1) + flat_basex = torch.arange(0, H, requires_grad=False).view(-1, 1)[None, None].to(self.device).long().repeat(N, C,1,W).view(-1) + flat_basey = torch.arange(0, W, requires_grad=False).view(1, -1)[None, None].to(self.device).long().repeat(N, C,H,1).view(-1) + flat_weight = weight.view(-1) + flat_img = img.contiguous().view(-1) + + # The corresponding positions in I1 + idxn = torch.arange(0, N, requires_grad=False).view(N, 1, 1, 1).to(self.device).long().repeat(1, C, H, W).view(-1) + idxc = torch.arange(0, C, requires_grad=False).view(1, C, 1, 1).to(self.device).long().repeat(N, 1, H, W).view(-1) + idxx = flat_shiftx.long() + flat_basex + idxy = flat_shifty.long() + flat_basey + + # recording the inside part the shifted + mask = idxx.ge(0) & idxx.lt(H) & idxy.ge(0) & idxy.lt(W) + + # Mask off points out of boundaries + ids = (idxn * C * H * W + idxc * H * W + idxx * W + idxy) + ids_mask = torch.masked_select(ids, mask).clone().to(self.device) + + # Note here! accmulate fla must be true for proper bp + img_warp = torch.zeros([N * C * H * W, ]).to(self.device) + img_warp.put_(ids_mask, torch.masked_select(flat_img * flat_weight, mask), accumulate=True) + + one_warp = torch.zeros([N * C * H * W, ]).to(self.device) + one_warp.put_(ids_mask, torch.masked_select(flat_weight, mask), accumulate=True) + + return img_warp.view(N, C, H, W), one_warp.view(N, C, H, W) + +class RefineUNet(nn.Module): + def __init__(self, args): + super(RefineUNet, self).__init__() + self.args = args + self.scale = args.module_scale_factor + self.nf = args.nf + self.conv1 = nn.Conv2d(self.nf, self.nf, [3,3], 1, [1,1]) + self.conv2 = nn.Conv2d(self.nf, self.nf, [3,3], 1, [1,1]) + self.lrelu = nn.ReLU() + self.NN = nn.UpsamplingNearest2d(scale_factor=2) + + self.enc1 = nn.Conv2d((4*self.nf)//self.scale//self.scale + 4*args.img_ch + 4, self.nf, [4, 4], 2, [1, 1]) + self.enc2 = nn.Conv2d(self.nf, 2*self.nf, [4, 4], 2, [1, 1]) + self.enc3 = nn.Conv2d(2*self.nf, 4*self.nf, [4, 4], 2, [1, 1]) + self.dec0 = nn.Conv2d(4*self.nf, 4*self.nf, [3, 3], 1, [1, 1]) + self.dec1 = nn.Conv2d(4*self.nf + 2*self.nf, 2*self.nf, [3, 3], 1, [1, 1]) ## input concatenated with enc2 + self.dec2 = nn.Conv2d(2*self.nf + self.nf, self.nf, [3, 3], 1, [1, 1]) ## input concatenated with enc1 + self.dec3 = nn.Conv2d(self.nf, 1+args.img_ch, [3, 3], 1, [1, 1]) ## input added with warped image + + def forward(self, concat): + enc1 = self.lrelu(self.enc1(concat)) + enc2 = self.lrelu(self.enc2(enc1)) + out = self.lrelu(self.enc3(enc2)) + + out = self.lrelu(self.dec0(out)) + out = self.NN(out) + + out = torch.cat((out,enc2),dim=1) + out = self.lrelu(self.dec1(out)) + + out = self.NN(out) + out = torch.cat((out,enc1),dim=1) + out = self.lrelu(self.dec2(out)) + + out = self.NN(out) + out = self.dec3(out) + return out + +class ResBlock2D_3D(nn.Module): + ## Shape of input [B,C,T,H,W] + ## Shape of output [B,C,T,H,W] + def __init__(self, args): + super(ResBlock2D_3D, self).__init__() + self.args = args + self.nf = args.nf + + self.conv3x3_1 = nn.Conv3d(self.nf, self.nf, [1,3,3], 1, [0,1,1]) + self.conv3x3_2 = nn.Conv3d(self.nf, self.nf, [1,3,3], 1, [0,1,1]) + self.lrelu = nn.ReLU() + + def forward(self, x): + ''' + x shape : [B,C,T,H,W] + ''' + B, C, T, H, W = x.size() + + out = self.conv3x3_2(self.lrelu(self.conv3x3_1(x))) + + return x + out + +class RResBlock2D_3D(nn.Module): + + def __init__(self, args, T_reduce_flag=False): + super(RResBlock2D_3D, self).__init__() + self.args = args + self.nf = args.nf + self.T_reduce_flag = T_reduce_flag + self.resblock1 = ResBlock2D_3D(self.args) + self.resblock2 = ResBlock2D_3D(self.args) + if T_reduce_flag: + self.reduceT_conv = nn.Conv3d(self.nf, self.nf, [3,1,1], 1, [0,0,0]) + + def forward(self, x): + ''' + x shape : [B,C,T,H,W] + ''' + out = self.resblock1(x) + out = self.resblock2(out) + if self.T_reduce_flag: + return self.reduceT_conv(out + x) + else: + return out + x + +def weights_init(m): + classname = m.__class__.__name__ + if (classname.find('Conv2d') != -1) or (classname.find('Conv3d') != -1): + init.xavier_normal_(m.weight) + # init.kaiming_normal_(m.weight, nonlinearity='relu') + if hasattr(m, 'bias') and m.bias is not None: + init.zeros_(m.bias) \ No newline at end of file diff --git a/comfyui-frame-interpolation/vfi_utils.py b/comfyui-frame-interpolation/vfi_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..7504637e63abfc8b826a36f11456e8a47d2dbf5d --- /dev/null +++ b/comfyui-frame-interpolation/vfi_utils.py @@ -0,0 +1,295 @@ +import yaml +import os +from torch.hub import download_url_to_file, get_dir +from urllib.parse import urlparse +import torch +import typing +import traceback +import einops +import gc +import torchvision.transforms.functional as transform +from comfy.model_management import soft_empty_cache, get_torch_device +import numpy as np + +BASE_MODEL_DOWNLOAD_URLS = [ + "https://github.com/styler00dollar/VSGAN-tensorrt-docker/releases/download/models/", + "https://github.com/Fannovel16/ComfyUI-Frame-Interpolation/releases/download/models/", + "https://github.com/dajes/frame-interpolation-pytorch/releases/download/v1.0.0/" +] + +config_path = os.path.join(os.path.dirname(__file__), "./config.yaml") +if os.path.exists(config_path): + config = yaml.load(open(config_path, "r"), Loader=yaml.FullLoader) +else: + raise Exception("config.yaml file is neccessary, plz recreate the config file by downloading it from https://github.com/Fannovel16/ComfyUI-Frame-Interpolation") +DEVICE = get_torch_device() + +class InterpolationStateList(): + + def __init__(self, frame_indices: typing.List[int], is_skip_list: bool): + self.frame_indices = frame_indices + self.is_skip_list = is_skip_list + + def is_frame_skipped(self, frame_index): + is_frame_in_list = frame_index in self.frame_indices + return self.is_skip_list and is_frame_in_list or not self.is_skip_list and not is_frame_in_list + + +class MakeInterpolationStateList: + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "frame_indices": ("STRING", {"multiline": True, "default": "1,2,3"}), + "is_skip_list": ("BOOLEAN", {"default": True},), + }, + } + + RETURN_TYPES = ("INTERPOLATION_STATES",) + FUNCTION = "create_options" + CATEGORY = "ComfyUI-Frame-Interpolation/VFI" + + def create_options(self, frame_indices: str, is_skip_list: bool): + frame_indices_list = [int(item) for item in frame_indices.split(',')] + + interpolation_state_list = InterpolationStateList( + frame_indices=frame_indices_list, + is_skip_list=is_skip_list, + ) + return (interpolation_state_list,) + + +def get_ckpt_container_path(model_type): + return os.path.abspath(os.path.join(os.path.dirname(__file__), config["ckpts_path"], model_type)) + +def load_file_from_url(url, model_dir=None, progress=True, file_name=None): + """Load file form http url, will download models if necessary. + + Ref:https://github.com/1adrianb/face-alignment/blob/master/face_alignment/utils.py + + Args: + url (str): URL to be downloaded. + model_dir (str): The path to save the downloaded model. Should be a full path. If None, use pytorch hub_dir. + Default: None. + progress (bool): Whether to show the download progress. Default: True. + file_name (str): The downloaded file name. If None, use the file name in the url. Default: None. + + Returns: + str: The path to the downloaded file. + """ + if model_dir is None: # use the pytorch hub_dir + hub_dir = get_dir() + model_dir = os.path.join(hub_dir, 'checkpoints') + + os.makedirs(model_dir, exist_ok=True) + + parts = urlparse(url) + file_name = os.path.basename(parts.path) + if file_name is not None: + file_name = file_name + cached_file = os.path.abspath(os.path.join(model_dir, file_name)) + if not os.path.exists(cached_file): + print(f'Downloading: "{url}" to {cached_file}\n') + download_url_to_file(url, cached_file, hash_prefix=None, progress=progress) + return cached_file + +def load_file_from_github_release(model_type, ckpt_name): + error_strs = [] + for i, base_model_download_url in enumerate(BASE_MODEL_DOWNLOAD_URLS): + try: + return load_file_from_url(base_model_download_url + ckpt_name, get_ckpt_container_path(model_type)) + except Exception: + traceback_str = traceback.format_exc() + if i < len(BASE_MODEL_DOWNLOAD_URLS) - 1: + print("Failed! Trying another endpoint.") + error_strs.append(f"Error when downloading from: {base_model_download_url + ckpt_name}\n\n{traceback_str}") + + error_str = '\n\n'.join(error_strs) + raise Exception(f"Tried all GitHub base urls to download {ckpt_name} but no suceess. Below is the error log:\n\n{error_str}") + + +def load_file_from_direct_url(model_type, url): + return load_file_from_url(url, get_ckpt_container_path(model_type)) + +def preprocess_frames(frames): + return einops.rearrange(frames[..., :3], "n h w c -> n c h w") + +def postprocess_frames(frames): + return einops.rearrange(frames, "n c h w -> n h w c")[..., :3].cpu() + +def assert_batch_size(frames, batch_size=2, vfi_name=None): + subject_verb = "Most VFI models require" if vfi_name is None else f"VFI model {vfi_name} requires" + assert len(frames) >= batch_size, f"{subject_verb} at least {batch_size} frames to work with, only found {frames.shape[0]}. Please check the frame input using PreviewImage." + +def _generic_frame_loop( + frames, + clear_cache_after_n_frames, + multiplier: typing.Union[typing.SupportsInt, typing.List], + return_middle_frame_function, + *return_middle_frame_function_args, + interpolation_states: InterpolationStateList = None, + use_timestep=True, + dtype=torch.float16, + final_logging=True): + + #https://github.com/hzwer/Practical-RIFE/blob/main/inference_video.py#L169 + def non_timestep_inference(frame0, frame1, n): + middle = return_middle_frame_function(frame0, frame1, None, *return_middle_frame_function_args) + if n == 1: + return [middle] + first_half = non_timestep_inference(frame0, middle, n=n//2) + second_half = non_timestep_inference(middle, frame1, n=n//2) + if n%2: + return [*first_half, middle, *second_half] + else: + return [*first_half, *second_half] + + output_frames = torch.zeros(multiplier*frames.shape[0], *frames.shape[1:], dtype=dtype, device="cpu") + out_len = 0 + + number_of_frames_processed_since_last_cleared_cuda_cache = 0 + + for frame_itr in range(len(frames) - 1): # Skip the final frame since there are no frames after it + frame0 = frames[frame_itr:frame_itr+1] + output_frames[out_len] = frame0 # Start with first frame + out_len += 1 + # Ensure that input frames are in fp32 - the same dtype as model + frame0 = frame0.to(dtype=torch.float32) + frame1 = frames[frame_itr+1:frame_itr+2].to(dtype=torch.float32) + + if interpolation_states is not None and interpolation_states.is_frame_skipped(frame_itr): + continue + + # Generate and append a batch of middle frames + middle_frame_batches = [] + + if use_timestep: + for middle_i in range(1, multiplier): + timestep = middle_i/multiplier + + middle_frame = return_middle_frame_function( + frame0.to(DEVICE), + frame1.to(DEVICE), + timestep, + *return_middle_frame_function_args + ).detach().cpu() + middle_frame_batches.append(middle_frame.to(dtype=dtype)) + else: + middle_frames = non_timestep_inference(frame0.to(DEVICE), frame1.to(DEVICE), multiplier - 1) + middle_frame_batches.extend(torch.cat(middle_frames, dim=0).detach().cpu().to(dtype=dtype)) + + # Copy middle frames to output + for middle_frame in middle_frame_batches: + output_frames[out_len] = middle_frame + out_len += 1 + + number_of_frames_processed_since_last_cleared_cuda_cache += 1 + # Try to avoid a memory overflow by clearing cuda cache regularly + if number_of_frames_processed_since_last_cleared_cuda_cache >= clear_cache_after_n_frames: + print("Comfy-VFI: Clearing cache...", end=' ') + soft_empty_cache() + number_of_frames_processed_since_last_cleared_cuda_cache = 0 + print("Done cache clearing") + + gc.collect() + + if final_logging: + print(f"Comfy-VFI done! {len(output_frames)} frames generated at resolution: {output_frames[0].shape}") + # Append final frame + output_frames[out_len] = frames[-1:] + out_len += 1 + # clear cache for courtesy + if final_logging: + print("Comfy-VFI: Final clearing cache...", end = ' ') + soft_empty_cache() + if final_logging: + print("Done cache clearing") + return output_frames[:out_len] + +def generic_frame_loop( + model_name, + frames, + clear_cache_after_n_frames, + multiplier: typing.Union[typing.SupportsInt, typing.List], + return_middle_frame_function, + *return_middle_frame_function_args, + interpolation_states: InterpolationStateList = None, + use_timestep=True, + dtype=torch.float32): + + assert_batch_size(frames, vfi_name=model_name.replace('_', ' ').replace('VFI', '')) + if type(multiplier) == int: + return _generic_frame_loop( + frames, + clear_cache_after_n_frames, + multiplier, + return_middle_frame_function, + *return_middle_frame_function_args, + interpolation_states=interpolation_states, + use_timestep=use_timestep, + dtype=dtype + ) + if type(multiplier) == list: + multipliers = list(map(int, multiplier)) + multipliers += [2] * (len(frames) - len(multipliers) - 1) + frame_batches = [] + for frame_itr in range(len(frames) - 1): + multiplier = multipliers[frame_itr] + if multiplier == 0: continue + frame_batch = _generic_frame_loop( + frames[frame_itr:frame_itr+2], + clear_cache_after_n_frames, + multiplier, + return_middle_frame_function, + *return_middle_frame_function_args, + interpolation_states=interpolation_states, + use_timestep=use_timestep, + dtype=dtype, + final_logging=False + ) + if frame_itr != len(frames) - 2: # Not append last frame unless this batch is the last one + frame_batch = frame_batch[:-1] + frame_batches.append(frame_batch) + output_frames = torch.cat(frame_batches) + print(f"Comfy-VFI done! {len(output_frames)} frames generated at resolution: {output_frames[0].shape}") + return output_frames + raise NotImplementedError(f"multipiler of {type(multiplier)}") + +class FloatToInt: + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "float": ("FLOAT", {"default": 0, 'min': 0, 'step': 0.01}) + } + } + + RETURN_TYPES = ("INT",) + FUNCTION = "convert" + CATEGORY = "ComfyUI-Frame-Interpolation" + + def convert(self, float): + if hasattr(float, "__iter__"): + return (list(map(int, float)),) + return (int(float),) + +""" def generic_4frame_loop( + frames, + clear_cache_after_n_frames, + multiplier: typing.SupportsInt, + return_middle_frame_function, + *return_middle_frame_function_args, + interpolation_states: InterpolationStateList = None, + use_timestep=False): + + if use_timestep: raise NotImplementedError("Timestep 4 frame VFI model") + def non_timestep_inference(frame_0, frame_1, frame_2, frame_3, n): + middle = return_middle_frame_function(frame_0, frame_1, None, *return_middle_frame_function_args) + if n == 1: + return [middle] + first_half = non_timestep_inference(frame_0, middle, n=n//2) + second_half = non_timestep_inference(middle, frame_1, n=n//2) + if n%2: + return [*first_half, middle, *second_half] + else: + return [*first_half, *second_half] """ \ No newline at end of file diff --git a/comfyui-impact-pack/.github/workflows/publish.yml b/comfyui-impact-pack/.github/workflows/publish.yml new file mode 100644 index 0000000000000000000000000000000000000000..1aa6978a6d4db8d7a1f6e71eaccb8970aa03e5d9 --- /dev/null +++ b/comfyui-impact-pack/.github/workflows/publish.yml @@ -0,0 +1,25 @@ +name: Publish to Comfy registry +on: + workflow_dispatch: + push: + branches: + - main + paths: + - "pyproject.toml" + +permissions: + issues: write + +jobs: + publish-node: + name: Publish Custom Node to registry + runs-on: ubuntu-latest + if: ${{ github.repository_owner == 'ltdrdata' }} + steps: + - name: Check out code + uses: actions/checkout@v4 + - name: Publish Custom Node + uses: Comfy-Org/publish-node-action@v1 + with: + ## Add your own personal access token to your Github Repository secrets and reference it here. + personal_access_token: ${{ secrets.REGISTRY_ACCESS_TOKEN }} diff --git a/comfyui-impact-pack/.gitignore b/comfyui-impact-pack/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..4282eafb32edfbe4bd00b66ae8adcfa7bbcca05f --- /dev/null +++ b/comfyui-impact-pack/.gitignore @@ -0,0 +1,12 @@ +__pycache__ +*.ini +wildcards/** +.vscode/ +.idea/ +subpack +impact_subpack +*.txt +*.yaml +!requirements.txt +!LICENSE.txt +.claude/ \ No newline at end of file diff --git a/comfyui-impact-pack/.gitmodules b/comfyui-impact-pack/.gitmodules new file mode 100644 index 0000000000000000000000000000000000000000..9180e6465120d9a6e7de990c99b7517e29cda2e3 --- /dev/null +++ b/comfyui-impact-pack/.gitmodules @@ -0,0 +1,3 @@ +[submodule "subpack"] + path = subpack + url = https://github.com/ltdrdata/ComfyUI-Impact-Subpack diff --git a/comfyui-impact-pack/.tracking b/comfyui-impact-pack/.tracking new file mode 100644 index 0000000000000000000000000000000000000000..8abce8d6140efd40aafd20fd9c849e0918d3c445 --- /dev/null +++ b/comfyui-impact-pack/.tracking @@ -0,0 +1,103 @@ +.github/workflows/publish.yml +.gitignore +.gitmodules +LICENSE.txt +README.md +__init__.py +custom_wildcards/put_wildcards_here +docs/wildcards/README.md +docs/wildcards/SUMMARY.md +docs/wildcards/WILDCARD_SYSTEM_DESIGN.md +docs/wildcards/WILDCARD_SYSTEM_PRD.md +docs/wildcards/WILDCARD_TESTING_GUIDE.md +example_workflows/1-FaceDetailer.jpg +example_workflows/1-FaceDetailer.json +example_workflows/2-MaskDetailer.jpg +example_workflows/2-MaskDetailer.json +example_workflows/3-SEGSDetailer.jpg +example_workflows/3-SEGSDetailer.json +example_workflows/4-MakeTileSEGS-Upscale.jpg +example_workflows/4-MakeTileSEGS-Upscale.json +example_workflows/5-PreviewDetailerHookProvider.jpg +example_workflows/5-PreviewDetailerHookProvider.json +example_workflows/5-prompt-per-tile.jpg +example_workflows/5-prompt-per-tile.json +example_workflows/6-DetailerWildcard.jpg +example_workflows/6-DetailerWildcard.json +install.py +js/common.js +js/impact-image-util.js +js/impact-pack.js +js/impact-sam-editor.js +js/impact-segs-picker.js +js/mask-rect-area-advanced.js +js/mask-rect-area.js +latent.png +locales/ko/nodeDefs.json +modules/impact/additional_dependencies.py +modules/impact/animatediff_nodes.py +modules/impact/bridge_nodes.py +modules/impact/config.py +modules/impact/core.py +modules/impact/defs.py +modules/impact/detectors.py +modules/impact/hf_nodes.py +modules/impact/hook_nodes.py +modules/impact/hooks.py +modules/impact/impact_onnx.py +modules/impact/impact_pack.py +modules/impact/impact_sampling.py +modules/impact/impact_server.py +modules/impact/logics.py +modules/impact/pipe.py +modules/impact/segs_nodes.py +modules/impact/segs_upscaler.py +modules/impact/special_samplers.py +modules/impact/util_nodes.py +modules/impact/utils.py +modules/impact/wildcards.py +modules/thirdparty/noise_nodes.py +node_list.json +notebook/comfyui_colab_impact_pack.ipynb +pyproject.toml +requirements.txt +ruff.toml +tests/README.md +tests/RUN_ALL_TESTS.md +tests/restart_test_server.sh +tests/test_config_quotes.sh +tests/test_deep_nesting.sh +tests/test_dynamic_prompts_full.sh +tests/test_edge_cases.sh +tests/test_encoding.sh +tests/test_error_handling.sh +tests/test_ondemand_loading.sh +tests/wildcards/README.md +tests/wildcards/find_deep_transitive.py +tests/wildcards/find_transitive_wildcards.sh +tests/wildcards/run_quick_test.sh +tests/wildcards/samples/README.md +tests/wildcards/test_lazy_load_api.sh +tests/wildcards/test_lazy_load_verification.py +tests/wildcards/test_progressive_loading.py +tests/wildcards/test_progressive_ondemand.sh +tests/wildcards/test_sequential_loading.sh +tests/wildcards/test_versatile_prompts.sh +tests/wildcards/test_wildcard_consistency.sh +tests/wildcards/test_wildcard_final.py +tests/wildcards/test_wildcard_lazy_loading.py +tests/wildcards/verify_ondemand_mode.sh +tests/workflows/advanced-sampler.json +tests/workflows/detailer-pipe-test-sdxl.json +tests/workflows/detailer-pipe-test.json +tests/workflows/impactwildcardprocessor_separate_tests.json +tests/workflows/impactwildcardprocessor_yaml_tests.json +tests/workflows/loop-test.json +tests/workflows/masks.json +tests/workflows/regional_prompt.json +troubleshooting/TROUBLESHOOTING.md +troubleshooting/black1.png +troubleshooting/black2.png +wildcards/put_wildcards_here +wildcards/samples/flower.txt +wildcards/samples/jewel.txt \ No newline at end of file diff --git a/comfyui-impact-pack/LICENSE.txt b/comfyui-impact-pack/LICENSE.txt new file mode 100644 index 0000000000000000000000000000000000000000..f288702d2fa16d3cdf0035b15a9fcbc552cd88e7 --- /dev/null +++ b/comfyui-impact-pack/LICENSE.txt @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/comfyui-impact-pack/README.md b/comfyui-impact-pack/README.md new file mode 100644 index 0000000000000000000000000000000000000000..5832a2b715c84343fb612b4a5c753bc3b964c651 --- /dev/null +++ b/comfyui-impact-pack/README.md @@ -0,0 +1,519 @@ +[![Youtube Badge](https://img.shields.io/badge/Youtube-FF0000?style=for-the-badge&logo=Youtube&logoColor=white&link=https://www.youtube.com/watch?v=AccoxDZIg3Y&list=PL_Ej2RDzjQLGfEeizq4GISeY3FtVyFmGP)](https://www.youtube.com/watch?v=AccoxDZIg3Y&list=PL_Ej2RDzjQLGfEeizq4GISeY3FtVyFmGP) + +# ComfyUI-Impact-Pack + +**Custom node pack for ComfyUI** +This node pack helps to conveniently enhance images through Detector, Detailer, Upscaler, Pipe, and more. + +NOTE: The UltralyticsDetectorProvider node is not part of the ComfyUI-Impact-Pack. To use the UltralyticsDetectorProvider node, please install the ComfyUI-Impact-Subpack separately. + +## NOTICE +* V8.24: This compatibility patch requires ComfyUI version 0.3.63 or higher due to structural changes in DifferentialDiffusion. +* V8.19: legacy nodes (mmdet and etc.) are removed +* V8.18: Support [facebookresearch/sam2](https://github.com/facebookresearch/sam2) models +* V8.0: The `Impact Subpack` is no longer installed automatically. To use `UltralyticsDetectorProvider` nodes, please install the `Impact Subpack` separately. +* V7.6: Automatic installation is no longer supported. Please install using ComfyUI-Manager, or manually install requirements.txt and run install.py to complete the installation. +* V7.0: Supports Switch based on Execution Model Inversion. +* V6.0: Supports FLUX.1 model in Impact KSampler, Detailers, PreviewBridgeLatent +* V5.0: It is no longer compatible with versions of ComfyUI before 2024.04.08. +* V4.87.4: Update to a version of ComfyUI after 2024.04.08 for proper functionality. +* V4.85: Incompatible with the outdated **ComfyUI IPAdapter Plus**. (A version dated March 24th or later is required.) +* V4.77: Compatibility patch applied. Requires ComfyUI version (Oct. 8th) or later. +* V4.73.3: ControlNetApply (SEGS) supports AnimateDiff +* V4.20.1: Due to the feature update in `RegionalSampler`, the parameter order has changed, causing malfunctions in previously created `RegionalSamplers`. Please adjust the parameters accordingly. +* V4.12: `MASKS` is changed to `MASK`. +* V4.7.2 isn't compatible with old version of `ControlNet Auxiliary Preprocessor`. If you will use `MediaPipe FaceMesh to SEGS` update to latest version(Sep. 17th). +* Selection weight syntax is changed(: -> ::) since V3.16. ([tutorial](https://github.com/ltdrdata/ComfyUI-extension-tutorials/blob/Main/ComfyUI-Impact-Pack/tutorial/ImpactWildcardProcessor.md)) +* Starting from V3.6, requires latest version(Aug 8, 9ccc965) of ComfyUI. +* **In versions below V3.3.1, there was an issue with the image quality generated after using the UltralyticsDetectorProvider. Please make sure to upgrade to a newer version.** +* Starting from V3.0, nodes related to `mmdet` are optional nodes that are activated only based on the configuration settings. + - Through ComfyUI-Impact-Subpack, you can utilize UltralyticsDetectorProvider to access various detection models. +* Between versions 2.22 and 2.21, there is partial compatibility loss regarding the Detailer workflow. If you continue to use the existing workflow, errors may occur during execution. An additional output called "enhanced_alpha_list" has been added to Detailer-related nodes. +* The permission error related to cv2 that occurred during the installation of Impact Pack has been patched in version 2.21.4. However, please note that the latest versions of ComfyUI and ComfyUI-Manager are required. +* The "PreviewBridge" feature may not function correctly on ComfyUI versions released before July 1, 2023. +* Attempting to load the "ComfyUI-Impact-Pack" on ComfyUI versions released before June 27, 2023, will result in a failure. +* With the addition of wildcard support in FaceDetailer, the structure of DETAILER_PIPE-related nodes and Detailer nodes has changed. There may be malfunctions when using the existing workflow. + + +## How To Install + +### **Recommended** +* Install via [ComfyUI-Manager](https://github.com/ltdrdata/ComfyUI-Manager). + +### **Manual** +* Navigate to `ComfyUI/custom_nodes` in your terminal (cmd). +* Clone the repository under the `custom_nodes` directory using the following command: + ``` + git clone https://github.com/ltdrdata/ComfyUI-Impact-Pack comfyui-impact-pack + cd comfyui-impact-pack + ``` +* Install dependencies in your Python environment. + * For Windows Portable, run the following command inside `ComfyUI\custom_nodes\comfyui-impact-pack`: + ``` + ..\..\..\python_embeded\python.exe -m pip install -r requirements.txt + ``` + * If using venv or conda, activate your Python environment first, then run: + ``` + pip install -r requirements.txt + ``` + +### Companion Pack +* If you need the `Ultralytics Detector Provider` to use various YOLO detection models, you should also install [ComfyUI-Impact-Subpack](https://github.com/ltdrdata/ComfyUI-Impact-Subpack). + + +## Custom Nodes +### [Detector nodes](https://github.com/ltdrdata/ComfyUI-extension-tutorials/blob/Main/ComfyUI-Impact-Pack/tutorial/detectors.md) + * `SAMLoader (Impact)` - Loads the SAM model. + * `ONNXDetectorProvider` - Loads the ONNX model to provide BBOX_DETECTOR. + * `CLIPSegDetectorProvider` - Wrapper for CLIPSeg to provide BBOX_DETECTOR. + * You need to install the ComfyUI-CLIPSeg node extension. + * `SEGM Detector (combined)` - Detects segmentation and returns a mask from the input image. + * `BBOX Detector (combined)` - Detects bounding boxes and returns a mask from the input image. + * `SAMDetector (combined)` - Utilizes the SAM technology to extract the segment at the location indicated by the input SEGS on the input image and outputs it as a unified mask. + * `SAMDetector (Segmented)` - It is similar to `SAMDetector (combined)`, but it separates and outputs the detected segments. Multiple segments can be found for the same detected area, and currently, a policy is in place to group them arbitrarily in sets of three. This aspect is expected to be improved in the future. + * As a result, it outputs the `combined_mask`, which is a unified mask, and `batch_masks`, which are multiple masks grouped together in batch form. + * While `batch_masks` may not be completely separated, it provides functionality to perform some level of segmentation. + * `Simple Detector (SEGS)` - Operating primarily with `BBOX_DETECTOR`, and with the additional provision of `SAM_MODEL` or `SEGM_DETECTOR`, this node internally generates improved SEGS through mask operations on both *bbox* and *silhouette*. It serves as a convenient tool to simplify a somewhat intricate workflow. + * `Simple Detector for Video (SEGS)` – Performs detection on videos composed of image frames. Instead of using a single mask, it performs detection individually on each image frame and generates a SEGS object with a batch of masks. + * `SAM2 Video Detector (SEGS)` – Similar to `Simple Detector for Video (SEGS)`, but utilizes SAM2’s video tracking technology to generate a SEGS object with a batch of masks. + * To use this node, you must select a SAM2 model in the SAMLoader. + + +### ControlNet, IPAdapter + * `ControlNetApply (SEGS)` - To apply ControlNet in SEGS, you need to use the Preprocessor Provider node from the Inspire Pack to utilize this node. + * `segs_preprocessor` and `control_image` can be selectively applied. If a `control_image` is given, `segs_preprocessor` will be ignored. + * If set to `control_image`, you can preview the cropped cnet image through `SEGSPreview (CNET Image)`. Images generated by `segs_preprocessor` should be verified through the `cnet_images` output of each Detailer. + * The `segs_preprocessor` operates by applying preprocessing on-the-fly based on the cropped image during the detailing process, while `control_image` will be cropped and used as input to `ControlNetApply (SEGS)`. + * `ControlNetClear (SEGS)` - Clear applied ControlNet in SEGS + * `IPAdapterApply (SEGS)` - To apply IPAdapter in SEGS, you need to use the Preprocessor Provider node from the Inspire Pack to utilize this node. + + +### Mask operation + * `Pixelwise(SEGS & SEGS)` - Performs a 'pixelwise and' operation between two SEGS. + * `Pixelwise(SEGS - SEGS)` - Subtracts one SEGS from another. + * `Pixelwise(SEGS & MASK)` - Performs a pixelwise AND operation between SEGS and MASK. + * `Pixelwise(SEGS & MASKS ForEach)` - Performs a pixelwise AND operation between SEGS and MASKS. + * Please note that this operation is performed with batches of MASKS, not just a single MASK. + * `Pixelwise(MASK & MASK)` - Performs a 'pixelwise and' operation between two masks. + * `Pixelwise(MASK - MASK)` - Subtracts one mask from another. + * `Pixelwise(MASK + MASK)` - Combine two masks. + * `SEGM Detector (SEGS)` - Detects segmentation and returns SEGS from the input image. + * `BBOX Detector (SEGS)` - Detects bounding boxes and returns SEGS from the input image. + * `Dilate Mask` - Dilate Mask. + * Support erosion for negative value. + * `Gaussian Blur Mask` - Apply Gaussian Blur to Mask. You can utilize this for mask feathering. + * `Mask Rect Area` - Create a rectangular mask defined by percentages with preview canvas. + * `Mask Rect Area (Advanced)` - Create a rectangular mask defined by pixels and image size. + + +### [Detailer nodes](https://github.com/ltdrdata/ComfyUI-extension-tutorials/blob/Main/ComfyUI-Impact-Pack/tutorial/detailers.md) + * `Detailer (SEGS)` - Refines the image based on SEGS. + * `Detailer (SEGS) with auto retry` - Refines the image based on SEGS and will automatically retry if the patch is all black. + * `DetailerDebug (SEGS)` - Refines the image based on SEGS. Additionally, it provides the ability to monitor the cropped image and the refined image of the cropped image. + * To prevent regeneration caused by the seed that does not change every time when using 'external_seed', please disable the 'seed random generate' option in the 'Detailer...' node. + * `MASK to SEGS` - Generates SEGS based on the mask. + * `MASK to SEGS For Video` - Generates SEGS based on the mask for Video. (Renamed from `MASK to SEGS For AnimateDiff`) + * When using a single mask, convert it to SEGS to apply it to the entire frame. + * When using a batch mask, the contour fill feature is disabled. + * `MediaPipe FaceMesh to SEGS` - Separate each landmark from the mediapipe facemesh image to create labeled SEGS. + * Usually, the size of images created through the MediaPipe facemesh preprocessor is downscaled. It resizes the MediaPipe facemesh image to the original size given as reference_image_opt for matching sizes during processing. + * `ToBinaryMask` - Separates the mask generated with alpha values between 0 and 255 into 0 and 255. The non-zero parts are always set to 255. + * `Masks to Mask List` - This node converts the MASKS in batch form to a list of individual masks. + * `Mask List to Masks` - This node converts the MASK list to MASK batch form. + * `EmptySEGS` - Provides an empty SEGS. + * `MaskPainter` - Provides a feature to draw masks. + * `FaceDetailer` - Easily detects faces and improves them. + * `FaceDetailer (pipe)` - Easily detects faces and improves them (for multipass). + * `MaskDetailer (pipe)` - This is a simple inpaint node that applies the Detailer to the mask area. + + * `FromDetailer (SDXL/pipe)`, `BasicPipe -> DetailerPipe (SDXL)`, `Edit DetailerPipe (SDXL)` - These are pipe functions used in Detailer for utilizing the refiner model of SDXL. + * `Any PIPE -> BasicPipe` - Convert the PIPE Value of other custom nodes that are not BASIC_PIPE but internally have the same structure as BASIC_PIPE to BASIC_PIPE. If an incompatible type is applied, it may cause runtime errors. + + +### SEGS Manipulation nodes + * `SEGSDetailer` - Performs detailed work on SEGS without pasting it back onto the original image. + * `SEGSPaste` - Pastes the results of SEGS onto the original image. + * If `ref_image_opt` is present, the images contained within SEGS are ignored. Instead, the image within `ref_image_opt` corresponding to the crop area of SEGS is taken and pasted. The size of the image in `ref_image_opt` should be the same as the original image size. + * This node can be used in conjunction with the processing results of AnimateDiff. + * `SEGSPreview` - Provides a preview of SEGS. + * This option is used to preview the improved image through `SEGSDetailer` before merging it into the original. Prior to going through ```SEGSDetailer```, SEGS only contains mask information without image information. If fallback_image_opt is connected to the original image, SEGS without image information will generate a preview using the original image. However, if SEGS already contains image information, fallback_image_opt will be ignored. + * This node can be used in conjunction with the processing results of AnimateDiff. + * `SEGSPreview (CNET Image)` - Show images configured with `ControlNetApply (SEGS)` for debugging purposes. + * `SEGSToImageList` - Convert SEGS To Image List + * `SEGSToMaskList` - Convert SEGS To Mask List + * `SEGS Filter (label)` - This node filters SEGS based on the label of the detected areas. + * `SEGS Filter (ordered)` - This node sorts SEGS based on size and position and retrieves SEGs within a certain range. + * `SEGS Filter (range)` - This node retrieves only SEGs from SEGS that have a size and position within a certain range. + * `SEGS Filter (non max suppression)` - This node filters SEGS by removing those with high overlap based on the Intersection over Union (IoU) threshold, keeping only the most confident detections. + * `SEGS Filter (intersection)` - This node filters segs1, keeping only the SEGS that do not significantly overlap with any SEGS in segs2, based on the Intersection over Area (IoA) threshold. + * `SEGS Assign (label)` - Assign labels sequentially to SEGS. This node is useful when used with `[LAB]` of FaceDetailer. + * `SEGSConcat` - Concatenate segs1 and segs2. If source shape of segs1 and segs2 are different from segs2 will be ignored. + * `SEGS Merge` - SEGS contains multiple SEGs. SEGS Merge integrates several SEGs into a single merged SEG. The label is changed to `merged` and the confidence becomes the minimum confidence. The applied controlnet and cropped_image are removed. + * `Picker (SEGS)` - Among the input SEGS, you can select a specific SEG through a dialog. If no SEG is selected, it outputs an empty SEGS. Increasing the batch_size of SEGSDetailer can be used for the purpose of selecting from the candidates. + * `Set Default Image For SEGS` - Set a default image for SEGS. SEGS with images set this way do not need to have a fallback image set. When override is set to false, the original image is preserved. + * `Remove Image from SEGS` - Remove the image set for the SEGS that has been configured by "Set Default Image for SEGS" or SEGSDetailer. When the image for the SEGS is removed, the Detailer node will operate based on the currently processed image instead of the SEGS. + * `Make Tile SEGS` - [experimental] Create SEGS in the form of tiles from an image to facilitate experiments for Tiled Upscale using the Detailer. + * The `filter_in_segs_opt` and `filter_out_segs_opt` are optional inputs. If these inputs are provided, when creating the tiles, the mask for each tile is generated by overlapping with the mask of `filter_in_segs_opt` and excluding the overlap with the mask of `filter_out_segs_opt`. Tiles with an empty mask will not be created as SEGS. + * `Dilate Mask (SEGS)` - Dilate/Erosion Mask in SEGS + * `Gaussian Blur Mask (SEGS)` - Apply Gaussian Blur to Mask in SEGS + * `SEGS_ELT Manipulation` - experimental nodes + * `DecomposeSEGS` - Decompose SEGS to allow for detailed manipulation. + * `AssembleSEGS` - Reassemble the decomposed SEGS. + * `From SEG_ELT` - Extract detailed information from SEG_ELT. + * `Edit SEG_ELT` - Modify some of the information in SEG_ELT. + * `Dilate SEG_ELT` - Dilate the mask of SEG_ELT. + * `From SEG_ELT` bbox - Extract coordinate from bbox in SEG_ELT + * `From SEG_ELT` crop_region - Extract coordinate from crop_region in SEG_ELT + * `Count Elt in SEGS` - Number of Elts ins SEGS + + +### Pipe nodes + * `ToDetailerPipe`, `FromDetailerPipe` - These nodes are used to bundle multiple inputs used in the detailer, such as models and vae, ..., into a single DETAILER_PIPE or extract the elements that are bundled in the DETAILER_PIPE. + * `ToBasicPipe`, `FromBasicPipe` - These nodes are used to bundle model, clip, vae, positive conditioning, and negative conditioning into a single BASIC_PIPE, or extract each element from the BASIC_PIPE. + * `EditBasicPipe`, `EditDetailerPipe` - These nodes are used to replace some elements in BASIC_PIPE or DETAILER_PIPE. + * `FromDetailerPipe_v2`, `FromBasicPipe_v2` - It has the same functionality as `FromDetailerPipe` and `FromBasicPipe`, but it has an additional output that directly exports the input pipe. It is useful when editing EditBasicPipe and EditDetailerPipe. +* `Latent Scale (on Pixel Space)` - This node converts latent to pixel space, upscales it, and then converts it back to latent. + * If upscale_model_opt is provided, it uses the model to upscale the pixel and then downscales it using the interpolation method provided in scale_method to the target resolution. +* `PixelKSampleUpscalerProvider` - An upscaler is provided that converts latent to pixels using VAEDecode, performs upscaling, converts back to latent using VAEEncode, and then performs k-sampling. This upscaler can be attached to nodes such as `Iterative Upscale` for use. + * Similar to `Latent Scale (on Pixel Space)`, if upscale_model_opt is provided, it performs pixel upscaling using the model. +* `PixelTiledKSampleUpscalerProvider` - It is similar to `PixelKSampleUpscalerProvider`, but it uses `ComfyUI_TiledKSampler` and Tiled VAE Decoder/Encoder to avoid GPU VRAM issues at high resolutions. + * You need to install the [BlenderNeko/ComfyUI_TiledKSampler](https://github.com/BlenderNeko/ComfyUI_TiledKSampler) node extension. + + +### PK_HOOK + * `DenoiseScheduleHookProvider` - IterativeUpscale provides a hook that gradually changes the denoise to target_denoise as the iterative-step progresses. + * `CfgScheduleHookProvider` - IterativeUpscale provides a hook that gradually changes the cfg to target_cfg as the iterative-step progresses. + * `StepsScheduleHookProvider` - IterativeUpscale provides a hook that gradually changes the sampling-steps to target_steps as the iterative-step progresses. + * `NoiseInjectionHookProvider` - During each iteration of IterativeUpscale, noise is injected into the latent space while varying the strength according to a schedule. + * You need to install the [BlenderNeko/ComfyUI_Noise](https://github.com/BlenderNeko/ComfyUI_Noise) node extension. + * The seed serves as the initial value required for generating noise, and it increments by 1 with each iteration as the process unfolds. + * The source determines the types of CPU noise and GPU noise to be configured. + * Currently, there is only a simple schedule available, where the strength of the noise varies from start_strength to end_strength during the progression of each iteration. + * `UnsamplerHookProvider` - Apply Unsampler during each iteration. To use this node, ComfyUI_Noise must be installed. + * `PixelKSampleHookCombine` - This is used to connect two PK_HOOKs. hook1 is executed first and then hook2 is executed. + * If you want to simultaneously change cfg and denoise, you can combine the PK_HOOKs of CfgScheduleHookProvider and PixelKSampleHookCombine. + + +### DETAILER_HOOK + * `NoiseInjectionDetailerHookProvider` - The `detailer_hook` is a hook in the `Detailer` that injects noise during the processing of each SEGS. + * `UnsamplerDetailerHookProvider` - Apply Unsampler during each cycle. To use this node, ComfyUI_Noise must be installed. + * `DenoiseSchedulerDetailerHookProvider` - During the progress of the cycle, the detailer's denoise is altered up to the `target_denoise`. + * `CoreMLDetailerHookProvider` - CoreML supports only 512x512, 512x768, 768x512, 768x768 size sampling. CoreMLDetailerHookProvider precisely fixes the upscale of the crop_region to this size. When using this hook, it will always be selected size, regardless of the guide_size. However, if the guide_size is too small, skipping will occur. + * `DetailerHookCombine` - This is used to connect two DETAILER_HOOKs. Similar to PixelKSampleHookCombine. + * `SEGSOrderedFilterDetailerHook`, SEGSRangeFilterDetailerHook, SEGSLabelFilterDetailerHook - There are a wrapper node that provides SEGSFilter nodes to be applied in FaceDetailer or Detector by creating DETAILER_HOOK. + * `PreviewDetailerHook` - Connecting this hook node helps provide assistance for viewing previews whenever SEGS Detailing tasks are completed. When working with a large number of SEGS, such as Make Tile SEGS, it allows for monitoring the situation as improvements progress incrementally. + * Since this is the hook applied when pasting onto the original image, it has no effect on nodes like `SEGSDetailer`. + * `VariationNoiseDetailerHookProvider` - Apply variation seed to the detailer. It can be applied in multiple stages through combine. + * `CustomSamplerDetailerHookProvider` - Apply a hook that allows you to use a custom sampler in the Detailer nodes. When using `DetailerHookCombine`, the sampler from the first hook is applied. + * `LamaRemoverDetailerHookProvider` – Applies Lama Remover to the upscaled image during the detailing stage. If `skip_sampling` is set to True, Lama Remover can be used alone without the detailing stage, allowing it to simply remove detected regions. + * Not applicable for **AnimateDiff** detailers. When using `DetailerHookCombine`, `skip_sampling` is only applied if it is set to `True` for all hooks. + * To use this node, the node pack at [Layer-norm/comfyui-lama-remover](https://github.com/Layer-norm/comfyui-lama-remover) must be installed. + + +### Iterative Upscale nodes + * `Iterative Upscale (Latent/on Pixel Space)` - The upscaler takes the input upscaler and splits the scale_factor into steps, then iteratively performs upscaling. + This takes latent as input and outputs latent as the result. + * `Iterative Upscale (Image)` - The upscaler takes the input upscaler and splits the scale_factor into steps, then iteratively performs upscaling. This takes image as input and outputs image as the result. + * Internally, this node uses 'Iterative Upscale (Latent)'. + + +### TwoSamplers nodes +* `TwoSamplersForMask` - This node can apply two samplers depending on the mask area. The base_sampler is applied to the area where the mask is 0, while the mask_sampler is applied to the area where the mask is 1. + * Note: The latent encoded through VAEEncodeForInpaint cannot be used. +* `KSamplerProvider` - This is a wrapper that enables KSampler to be used in TwoSamplersForMask TwoSamplersForMaskUpscalerProvider. +* `TiledKSamplerProvider` - ComfyUI_TiledKSampler is a wrapper that provides KSAMPLER. + * You need to install the [BlenderNeko/ComfyUI_TiledKSampler](https://github.com/BlenderNeko/ComfyUI_TiledKSampler) node extension. + +* `TwoAdvancedSamplersForMask` - TwoSamplersForMask is similar to TwoAdvancedSamplersForMask, but they differ in their operation. TwoSamplersForMask performs sampling in the mask area only after all the samples in the base area are finished. On the other hand, TwoAdvancedSamplersForMask performs sampling in both the base area and the mask area sequentially at each step. +* `KSamplerAdvancedProvider` - This is a wrapper that enables KSampler to be used in TwoAdvancedSamplersForMask, RegionalSampler. + * sigma_factor: By multiplying the denoise schedule by the sigma_factor, you can adjust the amount of denoising based on the configured denoise. + +* `TwoSamplersForMaskUpscalerProvider` - This is an Upscaler that extends TwoSamplersForMask to be used in Iterative Upscale. + * TwoSamplersForMaskUpscalerProviderPipe - pipe version of TwoSamplersForMaskUpscalerProvider. + + +### Image Utils + * `PreviewBridge (image)` - This custom node can be used with a bridge for image when using the MaskEditor feature of Clipspace. + * `PreviewBridge (latent)` - This custom node can be used with a bridge for latent image when using the MaskEditor feature of Clipspace. + * If a latent with a mask is provided as input, it displays the mask. Additionally, the mask output provides the mask set in the latent. + * If a latent without a mask is provided as input, it outputs the original latent as is, but the mask output provides an output with the entire region set as a mask. + * When set mask through MaskEditor, a mask is applied to the latent, and the output includes the stored mask. The same mask is also output as the mask output. + * When connected to `vae_opt`, it takes higher priority than the `preview_method`. + * `ImageSender`, `ImageReceiver` - The images generated in ImageSender are automatically sent to the ImageReceiver with the same link_id. + * `LatentSender`, `LatentReceiver` - The latent generated in LatentSender are automatically sent to the LatentReceiver with the same link_id. + * Furthermore, LatentSender is implemented with PreviewLatent, which stores the latent in payload form within the image thumbnail. + * Due to the current structure of ComfyUI, it is unable to distinguish between SDXL latent and SD1.5/SD2.1 latent. Therefore, it generates thumbnails by decoding them using the SD1.5 method. + + +### Switch nodes + * `Switch (image,mask)`, `Switch (latent)`, `Switch (SEGS)` - Among multiple inputs, it selects the input designated by the selector and outputs it. The first input must be provided, while the others are optional. However, if the input specified by the selector is not connected, an error may occur. + * `Switch (Any)` - This is a Switch node that takes an arbitrary number of inputs and produces a single output. Its type is determined when connected to any node, and connecting inputs increases the available slots for connections. + * `Inversed Switch (Any)` - In contrast to `Switch (Any)`, it takes a single input and outputs one of many. + * NOTE: See this [tutorial](https://github.com/ltdrdata/ComfyUI-extension-tutorials/blob/Main/ComfyUI-Impact-Pack/tutorial/switch.md) + + +### [Wildcards](http://github.com/ltdrdata/ComfyUI-extension-tutorials/blob/Main/ComfyUI-Impact-Pack/tutorial/ImpactWildcard.md) nodes + * These are nodes that supports syntax in the form of `__wildcard-name__` and dynamic prompt syntax like `{a|b|c}`. + * Wildcard files can be used by placing `.txt` or `.yaml` files under either `ComfyUI-Impact-Pack/wildcards` or `ComfyUI-Impact-Pack/custom_wildcards` paths. + * You can download and use [Wildcard YAML](https://civitai.com/models/138970/billions-of-wildcards-all-in-one) files in this format. + * After the first execution, you can change the custom wildcards path in the `custom_wildcards` entry within the `ComfyUI-Impact-Pack/impact-pack.ini` file created. + * `ImpactWildcardProcessor` - The text is generated by processing the wildcard in the Text. If the mode is set to "populate", a dynamic prompt is generated with each execution and the input is filled in the second textbox. If the mode is set to "fixed", the content of the second textbox remains unchanged. + * When an image is generated with the "fixed" mode, the prompt used for that particular generation is stored in the metadata. + * `ImpactWildcardEncode` - Similar to ImpactWildcardProcessor, this provides the loading functionality of LoRAs (e.g. ``). Populated prompts are encoded using the clip after all the lora loading is done. + * If the `Inspire Pack` is installed, you can use **Lora Block Weight** in the form of `LBW=lbw spec;` + * ``, ``, `` + + +### Regional Sampling + * These nodes offer the capability to divide regions and perform partial sampling using a mask. Unlike TwoSamplersForMask, sampling for each region is applied during each step. + * `RegionalPrompt` - This node combines a **mask** for specifying regions and the **sampler** to apply to each region to create `REGIONAL_PROMPTS`. + * `CombineRegionalPrompts` - Combine multiple `REGIONAL_PROMPTS` to create a single `REGIONAL_PROMPTS`. + * `RegionalSampler` - This node performs sampling using a base sampler and regional prompts. Sampling by the base sampler is executed at each step, while sampling for each region is performed through the sampler bound to each region. + * overlap_factor - Specifies the amount of overlap for each region to blend well with the area outside the mask. + * restore_latent - When sampling each region, restore the areas outside the mask to the base latent, preventing additional noise from being introduced outside the mask during region sampling. + * `RegionalSamplerAdvanced` - This is the Advanced version of the RegionalSampler. You can control it using `step` instead of `denoise`. + > NOTE: The `sde` sampler and `uni_pc` sampler introduce additional noise during each step of the sampling process. To mitigate this, when sampling each region, the `uni_pc` sampler applies additional `dpmpp_fast`, and the sde sampler applies the `dpmpp_2m` sampler as an additional measure. + + +### Impact KSampler + * These samplers support basic_pipe and AYS/OSS/GITS scheduler + * `KSampler (pipe)` - pipe version of KSampler + * `KSampler (advanced/pipe)` - pipe version of KSamplerAdvacned + * When converting the scheduler widget to input, refer to the `Impact Scheduler Adapter` node to resolve compatibility issues. + * `GITSScheduler Func Provider` - provider scheduler function for GITSScheduler + + +### Batch/List Util + * `Image Batch to Image List` - Convert Image batch to Image List + - You can use images generated in a multi batch to handle them + * `Image List to Image Batch` - Convert Image List to Image Batch + * `Make Image List` - Convert multiple images into a single image list + * `Make Image Batch` - Convert multiple images into a single image batch + - The input of images can be scaled up as needed + * `Masks to Mask List`, `Mask List to Masks`, `Make Mask List`, `Make Mask Batch` - It has the same functionality as the nodes above, but uses mask as input instead of image. + * `Flatten Mask Batch` - Flattens a Mask Batch into a single Mask. Normal operation is not guaranteed for non-binary masks. + * `Make List (Any)` - Create a list with arbitrary values. + * `Select Nth Item (Any list)` - Selects the Nth item from a list. If the index is out of range, it returns the last item in the list. + + +### Logics (experimental) + * These nodes are experimental nodes designed to implement the logic for loops and dynamic switching. + * `ImpactCompare`, `ImpactConditionalBranch`, `ImpactConditionalBranchSelMode`, `ImpactInt`, `ImpactBoolean`, `ImpactValueSender`, `ImpactValueReceiver`, `ImpactImageInfo`, `ImpactMinMax`, `ImpactNeg`, `ImpactConditionalStopIteration` + * `ImpactIsNotEmptySEGS` - This node returns `true` only if the input SEGS is not empty. + * `ImpactIfNone` - Returns `true` if any_input is None, and returns `false` if it is not None. + * `Queue Trigger` - When this node is executed, it adds a new queue to assist with repetitive tasks. It will only execute if the signal's status changes. + * `Queue Trigger (Countdown)` - Like the Queue Trigger, it adds a queue, but only adds it if it's greater than 1, and decrements the count by one each time it runs. + * `Sleep` - Waits for the specified time (in seconds). + * `Set Widget Value` - This node sets one of the optional inputs to the specified node's widget. An error may occur if the types do not match. + * `Set Mute State` - This node changes the mute state of a specific node. + * `Control Bridge` - This node modifies the state of the connected control nodes based on the `mode` and `behavior` . If there are nodes that require a change, the current execution is paused, the mute status is updated, and a new prompt queue is inserted. + * When the `mode` is `active`, it makes the connected control nodes active regardless of the behavior. + * When the `mode` is `Bypass/Mute`, it changes the state of the connected nodes based on whether the behavior is `Bypass` or `Mute`. + * **Limitation**: Due to these characteristics, it does not function correctly when the batch count exceeds 1. Additionally, it does not guarantee proper operation when the seed is randomized or when the state of nodes is altered by actions such as `Queue Trigger`, `Set Widget Value`, `Set Mute`, before the Control Bridge. + * When utilizing this node, please structure the workflow in such a way that `Queue Trigger`, `Set Widget Value`, `Set Mute State`, and similar actions are executed at the end of the workflow. + * If you want to change the value of the seed at each iteration, please ensure that Set Widget Value is executed at the end of the workflow instead of using randomization. + * It is not a problem if the seed changes due to randomization as long as it occurs after the Control Bridge section. + * `Remote Boolean (on prompt)`, `Remote Int (on prompt)` - At the start of the prompt, this node forcibly sets the `widget_value` of `node_id`. It is disregarded if the target widget type is different. + * You can find the `node_id` by checking through [ComfyUI-Manager](https://github.com/ltdrdata/ComfyUI-Manager) using the format `Badge: #ID Nickname`. + * Experimental set of nodes for implementing loop functionality (tutorial to be prepared later / [example workflow](test/loop-test.json)). + + +### Limitation +* Many nodes in the `Impact Pack` use a wildcard type to allow arbitrary input/output connections. This approach will be replaced once ComfyUI officially supports **dynamic types**. Until then, while it functions without issues, type validation may still produce error messages. + + +### HuggingFace nodes + * These nodes provide functionalities based on HuggingFace repository models. + * The path where the HuggingFace model cache is stored can be changed through the `HF_HOME` environment variable. + * `HF Transformers Classifier Provider` - This is a node that provides a classifier based on HuggingFace's transformers models. + * The 'repo id' parameter should contain HuggingFace's repo id. When `preset_repo_id` is set to `Manual repo id`, use the manually entered repo id in `manual_repo_id`. + * e.g. 'rizvandwiki/gender-classification-2' is a repository that provides a model for gender classification. + * `SEGS Classify` - This node utilizes the `TRANSFORMERS_CLASSIFIER` loaded with 'HF Transformers Classifier Provider' to classify `SEGS`. + * The 'expr' allows for forms like `label > number`, and in the case of `preset_expr` being `Manual expr`, it uses the expression entered in `manual_expr`. + * For example, in the case of `male <= 0.4`, if the score of the `male` label in the classification result is less than or equal to 0.4, it is categorized as `filtered_SEGS`, otherwise, it is categorized as `remained_SEGS`. + * For supported labels, please refer to the `config.json` of the respective HuggingFace repository. + * `#Female` and `#Male` are symbols that group multiple labels such as `Female, women, woman, ...`, for convenience, rather than being single labels. + + +### Etc nodes + * `Impact Scheduler Adapter` - With the addition of AYS to the scheduler of the Impact Pack and Inspire Pack, there is an issue of incompatibility when the existing scheduler widget is converted to input. The Impact Scheduler Adapter allows for an indirect connection to be possible. + * `StringListToString` - Convert String List to String + * `WildcardPromptFromString` - Create labeled wildcard for detailer from string. + * This node works well when used with MakeTileSEGS. [[Link](https://github.com/ltdrdata/ComfyUI-Impact-Pack/pull/536#discussion_r1586060779)] + + * `String Selector` - It selects and returns a portion of the string. When `multiline` mode is disabled, it simply returns the string of the line pointed to by the selector. When `multiline` mode is enabled, it divides the string based on lines that start with `#` and returns them. If the `select` value is larger than the number of items, it will start counting from the first line again and return accordingly. + * `Combine Conditionings` - It takes multiple conditionings as input and combines them into a single conditioning. + * `Concat Conditionings` - It takes multiple conditionings as input and concat them into a single conditioning. + * `Negative Cond Placeholder` - Models like FLUX.1 do not use Negative Conditioning. This is a placeholder node for them. You can use FLUX.1 by replacing the Negative Conditioning used in Impact KSampler, KSampler (Inspire), and Detailer with this node. + * `Execution Order Controller` - A helper node that can forcibly control the execution order of nodes. + * Connect the output of the node that should be executed first to the signal, and make the input of the node that should be executed later pass through this node. + * `List Bridge` - When passing the list output through this node, it collects and organizes the data before forwarding it, which ensures that the previous stage's sub-workflow has been completed. + + +## Feature +* `Interactive SAM Detector (Clipspace)` - When you right-click on a node that has 'MASK' and 'IMAGE' outputs, a context menu will open. From this menu, you can either open a dialog to create a SAM Mask using 'Open in SAM Detector', or copy the content (likely mask data) using 'Copy (Clipspace)' and generate a mask using 'Impact SAM Detector' from the clipspace menu, and then paste it using 'Paste (Clipspace)'. +* Providing a feature to detect errors that occur when mixing models and clips from checkpoints such as `SDXL Base`, `SDXL Refiner`, `SD1.x`, `SD2.x` during sample execution, and reporting appropriate errors. + + +## How To Install? + +### Install via ComfyUI-Manager (Recommended) +* Search `ComfyUI Impact Pack` in ComfyUI-Manager and click `Install` button. + +### Manual Install (Not Recommended) +1. `cd custom_nodes` +2. `git clone https://github.com/ltdrdata/ComfyUI-Impact-Pack` +3. `cd ComfyUI-Impact-Pack` +4. `pip install -r requirements.txt` + * **IMPORTANT**: + * You must install it within the Python environment where ComfyUI is running. + * For the portable version, use `\python_embeded\python.exe -m pip` instead of `pip`. For a `venv`, activate the `venv` first and then use `pip`. +5. Restart ComfyUI + +* NOTE1: If an error occurs during the installation process, please refer to [Troubleshooting Page](troubleshooting/TROUBLESHOOTING.md) for assistance. +* NOTE2: You can use this colab notebook [colab notebook](https://colab.research.google.com/github/ltdrdata/ComfyUI-Impact-Pack/blob/Main/notebook/comfyui_colab_impact_pack.ipynb) to launch it. This notebook automatically downloads the impact pack to the custom_nodes directory, installs the tested dependencies, and runs it. +* NOTE3: If you create an empty file named `skip_download_model` in the `ComfyUI/custom_nodes/` directory, it will skip the model download step during the installation of the impact pack. + + +## Package Dependencies (If you need to manual setup.) + +* pip install + * segment-anything + * scikit-image + * piexif + * opencv-python + * scipy + * numpy<2 + * dill + * matplotlib + * (optional) onnxruntime + * (deprecated) openmim # for mim + * (deprecated) pycocotools # for mim + +* linux packages (ubuntu) + * libgl1-mesa-glx + * libglib2.0-0 + + +## Config example +* Once you run the Impact Pack for the first time, an `impact-pack.ini` file will be automatically generated in the Impact Pack directory. You can modify this configuration file to customize the default behavior. + * `dependency_version` - don't touch this + * `sam_editor_cpu` - use cpu for `SAM editor` instead of gpu + * sam_editor_model: Specify the SAM model for the SAM editor. + * You can download various SAM models using ComfyUI-Manager. + * Path to SAM model: `ComfyUI/models/sams` +``` +[default] +sam_editor_cpu = False +sam_editor_model = sam_vit_b_01ec64.pth +``` + + +## Other Materials (auto-download when installing) + +* ComfyUI/models/sams <= https://dl.fbaipublicfiles.com/segment_anything/sam_vit_b_01ec64.pth + + +## Troubleshooting page +* [Troubleshooting Page](troubleshooting/TROUBLESHOOTING.md) + + +## How To Use (DDetailer feature) + +#### 1. Basic auto face detection and refine exapmle. +![simple](https://github.com/ltdrdata/ComfyUI-extension-tutorials/raw/Main/ComfyUI-Impact-Pack/images/simple.png) +* The face that has been damaged due to low resolution is restored with high resolution by generating and synthesizing it, in order to restore the details. +* The FaceDetailer node is a combination of a Detector node for face detection and a Detailer node for image enhancement. See the [Advanced Tutorial](https://github.com/ltdrdata/ComfyUI-extension-tutorials/raw/Main/ComfyUI-Impact-Pack/tutorial/advanced.md) for a more detailed explanation. +* The MASK output of FaceDetailer provides a visualization of where the detected and enhanced areas are. + +![simple-orig](https://github.com/ltdrdata/ComfyUI-extension-tutorials/raw/Main/ComfyUI-Impact-Pack/images/simple-original.png) ![simple-refined](https://github.com/ltdrdata/ComfyUI-extension-tutorials/raw/Main/ComfyUI-Impact-Pack/images/simple-refined.png) +* You can see that the face in the image on the left has increased detail as in the image on the right. + +#### 2. 2Pass refine (restore a severely damaged face) +![2pass-workflow-example](https://github.com/ltdrdata/ComfyUI-extension-tutorials/raw/Main/ComfyUI-Impact-Pack/images/2pass-simple.png) +* Although two FaceDetailers can be attached together for a 2-pass configuration, various common inputs used in KSampler can be passed through DETAILER_PIPE, so FaceDetailerPipe can be used to configure easily. +* In 1pass, only rough outline recovery is required, so restore with a reasonable resolution and low options. However, if you increase the dilation at this time, not only the face but also the surrounding parts are included in the recovery range, so it is useful when you need to reshape the face other than the facial part. + +![2pass-example-original](https://github.com/ltdrdata/ComfyUI-extension-tutorials/raw/Main/ComfyUI-Impact-Pack/images/2pass-original.png) ![2pass-example-middle](https://github.com/ltdrdata/ComfyUI-extension-tutorials/raw/Main/ComfyUI-Impact-Pack/images/2pass-1pass.png) ![2pass-example-result](https://github.com/ltdrdata/ComfyUI-extension-tutorials/raw/Main/ComfyUI-Impact-Pack/images/2pass-2pass.png) +* In the first stage, the severely damaged face is restored to some extent, and in the second stage, the details are restored + +#### 3. Face Bbox(bounding box) + Person silhouette segmentation (prevent distortion of the background.) +![combination-workflow-example](https://github.com/ltdrdata/ComfyUI-extension-tutorials/raw/Main/ComfyUI-Impact-Pack/images/combination.jpg) +![combination-example-original](https://github.com/ltdrdata/ComfyUI-extension-tutorials/raw/Main/ComfyUI-Impact-Pack/images/combination-original.png) ![combination-example-refined](https://github.com/ltdrdata/ComfyUI-extension-tutorials/raw/Main/ComfyUI-Impact-Pack/images/combination-refined.png) + +* Facial synthesis that emphasizes details is delicately aligned with the contours of the face, and it can be observed that it does not affect the image outside of the face. + +* The BBoxDetectorForEach node is used to detect faces, and the SAMDetectorCombined node is used to find the segment related to the detected face. By using the Segs & Mask node with the two masks obtained in this way, an accurate mask that intersects based on segs can be generated. If this generated mask is input to the DetailerForEach node, only the target area can be created in high resolution from the image and then composited. + +#### 4. Iterative Upscale +![upscale-workflow-example](https://github.com/ltdrdata/ComfyUI-extension-tutorials/raw/Main/ComfyUI-Impact-Pack/images/upscale-workflow.png) + +* The IterativeUpscale node is a node that enlarges an image/latent by a scale_factor. In this process, the upscale is carried out progressively by dividing it into steps. +* IterativeUpscale takes an Upscaler as an input, similar to a plugin, and uses it during each iteration. PixelKSampleUpscalerProvider is an Upscaler that converts the latent representation to pixel space and applies ksampling. + * The upscale_model_opt is an optional parameter that determines whether to use the upscale function of the model base if available. Using the upscale function of the model base can significantly reduce the number of iterative steps required. If an x2 upscaler is used, the image/latent is first upscaled by a factor of 2 and then downscaled to the target scale at each step before further processing is done. + +* The following image is an image of 304x512 pixels and the same image scaled up to three times its original size using IterativeUpscale. + +![combination-example-original](https://github.com/ltdrdata/ComfyUI-extension-tutorials/raw/Main/ComfyUI-Impact-Pack/images/upscale-original.png) ![combination-example-refined](https://github.com/ltdrdata/ComfyUI-extension-tutorials/raw/Main/ComfyUI-Impact-Pack/images/upscale-3x.png) + + +#### 5. Interactive SAM Detector (Clipspace) + +* When you right-click on the node that outputs 'MASK' and 'IMAGE', a menu called "Open in SAM Detector" appears, as shown in the following picture. Clicking on the menu opens a dialog in SAM's functionality, allowing you to generate a segment mask. +![samdetector-menu](https://github.com/ltdrdata/ComfyUI-extension-tutorials/raw/Main/ComfyUI-Impact-Pack/images/SAMDetector-menu.png) + +* By clicking the left mouse button on a coordinate, a positive prompt in blue color is entered, indicating the area that should be included. Clicking the right mouse button on a coordinate enters a negative prompt in red color, indicating the area that should be excluded. Positive prompts represent the areas that should be included, while negative prompts represent the areas that should be excluded. +* You can remove the points that were added by using the "undo" button. After selecting the points, pressing the "detect" button generates the mask. Additionally, you can adjust the fidelity slider to determine the extent to which the mask belongs to the confidence region. + +![samdetector-dialog](https://github.com/ltdrdata/ComfyUI-extension-tutorials/raw/Main/ComfyUI-Impact-Pack/images/SAMDetector-dialog.jpg) + +* If you opened the dialog through "Open in SAM Detector" from the node, you can directly apply the changes by clicking the "Save to node" button. However, if you opened the dialog through the "clipspace" menu, you can save it to clipspace by clicking the "Save" button. + +![samdetector-result](https://github.com/ltdrdata/ComfyUI-extension-tutorials/raw/Main/ComfyUI-Impact-Pack/images/SAMDetector-result.jpg) + +* When you execute using the reflected mask in the node, you can observe that the image and mask are displayed separately. + + +## Others Tutorials +* [ComfyUI-extension-tutorials/ComfyUI-Impact-Pack](https://github.com/ltdrdata/ComfyUI-extension-tutorials/tree/Main/ComfyUI-Impact-Pack) - You can find various tutorials and workflows on this page. +* [Advanced Tutorial](https://github.com/ltdrdata/ComfyUI-extension-tutorials/blob/Main/ComfyUI-Impact-Pack/tutorial/advanced.md) +* [SAM Application](https://github.com/ltdrdata/ComfyUI-extension-tutorials/blob/Main/ComfyUI-Impact-Pack/tutorial/sam.md) +* [PreviewBridge](https://github.com/ltdrdata/ComfyUI-extension-tutorials/blob/Main/ComfyUI-Impact-Pack/tutorial/previewbridge.md) +* [Mask Pointer](https://github.com/ltdrdata/ComfyUI-extension-tutorials/blob/Main/ComfyUI-Impact-Pack/tutorial/maskpointer.md) +* [ONNX Tutorial](https://github.com/ltdrdata/ComfyUI-extension-tutorials/blob/Main/ComfyUI-Impact-Pack/tutorial/ONNX.md) +* [CLIPSeg Tutorial](https://github.com/ltdrdata/ComfyUI-extension-tutorials/blob/Main/ComfyUI-Impact-Pack/tutorial/clipseg.md) +* [Extreme Highresolution Upscale](https://github.com/ltdrdata/ComfyUI-extension-tutorials/blob/Main/ComfyUI-Impact-Pack/tutorial/extreme-upscale.md) +* [TwoSamplersForMask](https://github.com/ltdrdata/ComfyUI-extension-tutorials/blob/Main/ComfyUI-Impact-Pack/tutorial/TwoSamplers.md) +* [TwoAdvancedSamplersForMask](https://github.com/ltdrdata/ComfyUI-extension-tutorials/blob/Main/ComfyUI-Impact-Pack/tutorial/TwoAdvancedSamplers.md) +* [Advanced Iterative Upscale: PK_HOOK](https://github.com/ltdrdata/ComfyUI-extension-tutorials/blob/Main/ComfyUI-Impact-Pack/tutorial/pk_hook.md) +* [Advanced Iterative Upscale: TwoSamplersForMask Upscale Provider](https://github.com/ltdrdata/ComfyUI-extension-tutorials/blob/Main/ComfyUI-Impact-Pack/tutorial/TwoSamplersUpscale.md) +* [Interactive SAM + PreviewBridge](https://github.com/ltdrdata/ComfyUI-extension-tutorials/blob/Main/ComfyUI-Impact-Pack/tutorial/sam_with_preview_bridge.md) +* [ImageSender/ImageReceiver/LatentSender/LatentReceiver](https://github.com/ltdrdata/ComfyUI-extension-tutorials/blob/Main/ComfyUI-Impact-Pack/tutorial/sender_receiver.md) +* [ImpactWildcardProcessor](https://github.com/ltdrdata/ComfyUI-extension-tutorials/blob/Main/ComfyUI-Impact-Pack/tutorial/ImpactWildcardProcessor.md) + + +## Credits + +ComfyUI/[ComfyUI](https://github.com/comfyanonymous/ComfyUI) - A powerful and modular stable diffusion GUI. + +dustysys/[ddetailer](https://github.com/dustysys/ddetailer) - DDetailer for Stable-diffusion-webUI extension. + +Bing-su/[dddetailer](https://github.com/Bing-su/dddetailer) - The anime-face-detector used in ddetailer has been updated to be compatible with mmdet 3.0.0, and we have also applied a patch to the pycocotools dependency for Windows environment in ddetailer. + +facebook/[segment-anything](https://github.com/facebookresearch/segment-anything) - Segmentation Anything! + +hysts/[anime-face-detector](https://github.com/hysts/anime-face-detector) - Creator of `anime-face_yolov3`, which has impressive performance on a variety of art styles. + +open-mmlab/[mmdetection](https://github.com/open-mmlab/mmdetection) - Object detection toolset. `dd-person_mask2former` was trained via transfer learning using their [R-50 Mask2Former instance segmentation model](https://github.com/open-mmlab/mmdetection/tree/master/configs/mask2former#instance-segmentation) as a base. + +biegert/[ComfyUI-CLIPSeg](https://github.com/biegert/ComfyUI-CLIPSeg) - This is a custom node that enables the use of CLIPSeg technology, which can find segments through prompts, in ComfyUI. + +BlenderNeok/[ComfyUI-TiledKSampler](https://github.com/BlenderNeko/ComfyUI_TiledKSampler) - The tile sampler allows high-resolution sampling even in places with low GPU VRAM. + +BlenderNeok/[ComfyUI_Noise](https://github.com/BlenderNeko/ComfyUI_Noise) - The noise injection feature relies on this function and slerp code for noise variation + +WASasquatch/[was-node-suite-comfyui](https://github.com/WASasquatch/was-node-suite-comfyui) - A powerful custom node extensions of ComfyUI. + +Trung0246/[ComfyUI-0246](https://github.com/Trung0246/ComfyUI-0246) - Nice bypass hack! + +Layer-norm/[comfyui-lama-remover](https://github.com/Layer-norm/comfyui-lama-remover) - Required for using `LamaRemoverDetailerHook`. diff --git a/comfyui-impact-pack/__init__.py b/comfyui-impact-pack/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..ee98acabb015300edfe657a7221065c8ed84c5e6 --- /dev/null +++ b/comfyui-impact-pack/__init__.py @@ -0,0 +1,456 @@ +""" +@author: Dr.Lt.Data +@title: Impact Pack +@nickname: Impact Pack +@description: This extension offers various detector nodes and detailer nodes that allow you to configure a workflow that automatically enhances facial details. And provide iterative upscaler. +""" + +import folder_paths +import os +import sys +import logging + +comfy_path = os.path.dirname(folder_paths.__file__) +impact_path = os.path.join(os.path.dirname(__file__)) +modules_path = os.path.join(os.path.dirname(__file__), "modules") + +sys.path.append(modules_path) + +import impact.config +logging.info(f"### Loading: ComfyUI-Impact-Pack ({impact.config.version})") + +# Core +# recheck dependencies for colab +try: + import folder_paths + import torch # noqa: F401 + import cv2 # noqa: F401 + from cv2 import setNumThreads # noqa: F401 + import numpy as np # noqa: F401 + import comfy.samplers + import comfy.sd # noqa: F401 + from PIL import Image, ImageFilter # noqa: F401 + from skimage.measure import label, regionprops # noqa: F401 + from collections import namedtuple # noqa: F401 + import piexif # noqa: F401 + import nodes +except Exception as e: + import logging + logging.error("[Impact Pack] Failed to import due to several dependencies are missing!!!!") + raise e + + +import impact.impact_server # to load server api + +from .modules.impact.impact_pack import * # noqa: F403 +from .modules.impact.detectors import * # noqa: F403 +from .modules.impact.pipe import * # noqa: F403 +from .modules.impact.logics import * # noqa: F403 +from .modules.impact.util_nodes import * # noqa: F403 +from .modules.impact.segs_nodes import * # noqa: F403 +from .modules.impact.special_samplers import * # noqa: F403 +from .modules.impact.hf_nodes import * # noqa: F403 +from .modules.impact.bridge_nodes import * # noqa: F403 +from .modules.impact.hook_nodes import * # noqa: F403 +from .modules.impact.animatediff_nodes import * # noqa: F403 +from .modules.impact.segs_upscaler import * # noqa: F403 + +import threading + + +threading.Thread(target=impact.wildcards.wildcard_load).start() + + +NODE_CLASS_MAPPINGS = { + "SAMLoader": SAMLoader, # noqa: F405 + "CLIPSegDetectorProvider": CLIPSegDetectorProvider, # noqa: F405 + "ONNXDetectorProvider": ONNXDetectorProvider, # noqa: F405 + + "BitwiseAndMaskForEach": BitwiseAndMaskForEach, # noqa: F405 + "SubtractMaskForEach": SubtractMaskForEach, # noqa: F405 + + "DetailerForEach": DetailerForEach, # noqa: F405 + "DetailerForEachAutoRetry": DetailerForEachAutoRetry, # noqa: F405 + "DetailerForEachDebug": DetailerForEachTest, # noqa: F405 + "DetailerForEachPipe": DetailerForEachPipe, # noqa: F405 + "DetailerForEachDebugPipe": DetailerForEachTestPipe, # noqa: F405 + "DetailerForEachPipeForAnimateDiff": DetailerForEachPipeForAnimateDiff, # noqa: F405 + + "SAMDetectorCombined": SAMDetectorCombined, # noqa: F405 + "SAMDetectorSegmented": SAMDetectorSegmented, # noqa: F405 + + "FaceDetailer": FaceDetailer, # noqa: F405 + "FaceDetailerPipe": FaceDetailerPipe, # noqa: F405 + "MaskDetailerPipe": MaskDetailerPipe, # noqa: F405 + + "ToDetailerPipe": ToDetailerPipe, # noqa: F405 + "ToDetailerPipeSDXL": ToDetailerPipeSDXL, # noqa: F405 + "FromDetailerPipe": FromDetailerPipe, # noqa: F405 + "FromDetailerPipe_v2": FromDetailerPipe_v2, # noqa: F405 + "FromDetailerPipeSDXL": FromDetailerPipe_SDXL, # noqa: F405 + "AnyPipeToBasic": AnyPipeToBasic, # noqa: F405 + "ToBasicPipe": ToBasicPipe, # noqa: F405 + "FromBasicPipe": FromBasicPipe, # noqa: F405 + "FromBasicPipe_v2": FromBasicPipe_v2, # noqa: F405 + "BasicPipeToDetailerPipe": BasicPipeToDetailerPipe, # noqa: F405 + "BasicPipeToDetailerPipeSDXL": BasicPipeToDetailerPipeSDXL, # noqa: F405 + "DetailerPipeToBasicPipe": DetailerPipeToBasicPipe, # noqa: F405 + "EditBasicPipe": EditBasicPipe, # noqa: F405 + "EditDetailerPipe": EditDetailerPipe, # noqa: F405 + "EditDetailerPipeSDXL": EditDetailerPipeSDXL, # noqa: F405 + + "LatentPixelScale": LatentPixelScale, # noqa: F405 + "PixelKSampleUpscalerProvider": PixelKSampleUpscalerProvider, # noqa: F405 + "PixelKSampleUpscalerProviderPipe": PixelKSampleUpscalerProviderPipe, # noqa: F405 + "IterativeLatentUpscale": IterativeLatentUpscale, # noqa: F405 + "IterativeImageUpscale": IterativeImageUpscale, # noqa: F405 + "PixelTiledKSampleUpscalerProvider": PixelTiledKSampleUpscalerProvider, # noqa: F405 + "PixelTiledKSampleUpscalerProviderPipe": PixelTiledKSampleUpscalerProviderPipe, # noqa: F405 + "TwoSamplersForMaskUpscalerProvider": TwoSamplersForMaskUpscalerProvider, # noqa: F405 + "TwoSamplersForMaskUpscalerProviderPipe": TwoSamplersForMaskUpscalerProviderPipe, # noqa: F405 + + "PixelKSampleHookCombine": PixelKSampleHookCombine, # noqa: F405 + "DenoiseScheduleHookProvider": DenoiseScheduleHookProvider, # noqa: F405 + "StepsScheduleHookProvider": StepsScheduleHookProvider, # noqa: F405 + "CfgScheduleHookProvider": CfgScheduleHookProvider, # noqa: F405 + "NoiseInjectionHookProvider": NoiseInjectionHookProvider, # noqa: F405 + "UnsamplerHookProvider": UnsamplerHookProvider, # noqa: F405 + "CoreMLDetailerHookProvider": CoreMLDetailerHookProvider, # noqa: F405 + "PreviewDetailerHookProvider": PreviewDetailerHookProvider, # noqa: F405 + "BlackPatchRetryHookProvider": BlackPatchRetryHookProvider, # noqa: F405 + "CustomSamplerDetailerHookProvider": CustomSamplerDetailerHookProvider, # noqa: F405 + "LamaRemoverDetailerHookProvider": LamaRemoverDetailerHookProvider, # noqa: F405 + + "DetailerHookCombine": DetailerHookCombine, # noqa: F405 + "NoiseInjectionDetailerHookProvider": NoiseInjectionDetailerHookProvider, # noqa: F405 + "UnsamplerDetailerHookProvider": UnsamplerDetailerHookProvider, # noqa: F405 + "DenoiseSchedulerDetailerHookProvider": DenoiseSchedulerDetailerHookProvider, # noqa: F405 + "SEGSOrderedFilterDetailerHookProvider": SEGSOrderedFilterDetailerHookProvider, # noqa: F405 + "SEGSRangeFilterDetailerHookProvider": SEGSRangeFilterDetailerHookProvider, # noqa: F405 + "SEGSLabelFilterDetailerHookProvider": SEGSLabelFilterDetailerHookProvider, # noqa: F405 + "VariationNoiseDetailerHookProvider": VariationNoiseDetailerHookProvider, # noqa: F405 + # "CustomNoiseDetailerHookProvider": CustomNoiseDetailerHookProvider, + + "BitwiseAndMask": BitwiseAndMask, # noqa: F405 + "SubtractMask": SubtractMask, # noqa: F405 + "AddMask": AddMask, # noqa: F405 + "MaskRectArea": MaskRectArea, # noqa: F405 + "MaskRectAreaAdvanced": MaskRectAreaAdvanced, # noqa: F405 + "ImpactSegsAndMask": SegsBitwiseAndMask, # noqa: F405 + "ImpactSegsAndMaskForEach": SegsBitwiseAndMaskForEach, # noqa: F405 + "EmptySegs": EmptySEGS, # noqa: F405 + "ImpactFlattenMask": FlattenMask, # noqa: F405 + + "MediaPipeFaceMeshToSEGS": MediaPipeFaceMeshToSEGS, # noqa: F405 + "MaskToSEGS": MaskToSEGS, # noqa: F405 + "MaskToSEGS_for_AnimateDiff": MaskToSEGS_for_AnimateDiff, # noqa: F405 + "ToBinaryMask": ToBinaryMask, # noqa: F405 + "MasksToMaskList": MasksToMaskList, # noqa: F405 + "MaskListToMaskBatch": MaskListToMaskBatch, # noqa: F405 + "ImageListToImageBatch": ImageListToImageBatch, # noqa: F405 + "SetDefaultImageForSEGS": DefaultImageForSEGS, # noqa: F405 + "RemoveImageFromSEGS": RemoveImageFromSEGS, # noqa: F405 + + "BboxDetectorSEGS": BboxDetectorForEach, # noqa: F405 + "SegmDetectorSEGS": SegmDetectorForEach, # noqa: F405 + "ONNXDetectorSEGS": BboxDetectorForEach, # noqa: F405 + "ImpactSimpleDetectorSEGS_for_AD": SimpleDetectorForAnimateDiff, # noqa: F405 + "ImpactSAM2VideoDetectorSEGS": SAM2VideoDetectorSEGS, # noqa: F405 + "ImpactSimpleDetectorSEGS": SimpleDetectorForEach, # noqa: F405 + "ImpactSimpleDetectorSEGSPipe": SimpleDetectorForEachPipe, # noqa: F405 + "ImpactControlNetApplySEGS": ControlNetApplySEGS, # noqa: F405 + "ImpactControlNetApplyAdvancedSEGS": ControlNetApplyAdvancedSEGS, # noqa: F405 + "ImpactControlNetClearSEGS": ControlNetClearSEGS, # noqa: F405 + "ImpactIPAdapterApplySEGS": IPAdapterApplySEGS, # noqa: F405 + + "ImpactDecomposeSEGS": DecomposeSEGS, # noqa: F405 + "ImpactAssembleSEGS": AssembleSEGS, # noqa: F405 + "ImpactFrom_SEG_ELT": From_SEG_ELT, # noqa: F405 + "ImpactEdit_SEG_ELT": Edit_SEG_ELT, # noqa: F405 + "ImpactDilate_Mask_SEG_ELT": Dilate_SEG_ELT, # noqa: F405 + "ImpactDilateMask": DilateMask, # noqa: F405 + "ImpactGaussianBlurMask": GaussianBlurMask, # noqa: F405 + "ImpactDilateMaskInSEGS": DilateMaskInSEGS, # noqa: F405 + "ImpactGaussianBlurMaskInSEGS": GaussianBlurMaskInSEGS, # noqa: F405 + "ImpactScaleBy_BBOX_SEG_ELT": SEG_ELT_BBOX_ScaleBy, # noqa: F405 + "ImpactFrom_SEG_ELT_bbox": From_SEG_ELT_bbox, # noqa: F405 + "ImpactFrom_SEG_ELT_crop_region": From_SEG_ELT_crop_region, # noqa: F405 + "ImpactCount_Elts_in_SEGS": Count_Elts_in_SEGS, # noqa: F405 + + "BboxDetectorCombined_v2": BboxDetectorCombined, # noqa: F405 + "SegmDetectorCombined_v2": SegmDetectorCombined, # noqa: F405 + "SegsToCombinedMask": SegsToCombinedMask, # noqa: F405 + + "KSamplerProvider": KSamplerProvider, # noqa: F405 + "TwoSamplersForMask": TwoSamplersForMask, # noqa: F405 + "TiledKSamplerProvider": TiledKSamplerProvider, # noqa: F405 + + "KSamplerAdvancedProvider": KSamplerAdvancedProvider, # noqa: F405 + "TwoAdvancedSamplersForMask": TwoAdvancedSamplersForMask, # noqa: F405 + + "ImpactNegativeConditioningPlaceholder": NegativeConditioningPlaceholder, # noqa: F405 + + "PreviewBridge": PreviewBridge, # noqa: F405 + "PreviewBridgeLatent": PreviewBridgeLatent, # noqa: F405 + "ImageSender": ImageSender, # noqa: F405 + "ImageReceiver": ImageReceiver, # noqa: F405 + "LatentSender": LatentSender, # noqa: F405 + "LatentReceiver": LatentReceiver, # noqa: F405 + "ImageMaskSwitch": ImageMaskSwitch, # noqa: F405 + "LatentSwitch": GeneralSwitch, # noqa: F405 + "SEGSSwitch": GeneralSwitch, # noqa: F405 + "ImpactSwitch": GeneralSwitch, # noqa: F405 + "ImpactInversedSwitch": GeneralInversedSwitch, # noqa: F405 + + "ImpactWildcardProcessor": ImpactWildcardProcessor, # noqa: F405 + "ImpactWildcardEncode": ImpactWildcardEncode, # noqa: F405 + + "SEGSUpscaler": SEGSUpscaler, # noqa: F405 + "SEGSUpscalerPipe": SEGSUpscalerPipe, # noqa: F405 + "SEGSDetailer": SEGSDetailer, # noqa: F405 + "SEGSPaste": SEGSPaste, # noqa: F405 + "SEGSPreview": SEGSPreview, # noqa: F405 + "SEGSPreviewCNet": SEGSPreviewCNet, # noqa: F405 + "SEGSToImageList": SEGSToImageList, # noqa: F405 + "ImpactSEGSToMaskList": SEGSToMaskList, # noqa: F405 + "ImpactSEGSToMaskBatch": SEGSToMaskBatch, # noqa: F405 + "ImpactSEGSConcat": SEGSConcat, # noqa: F405 + "ImpactSEGSPicker": SEGSPicker, # noqa: F405 + "ImpactMakeTileSEGS": MakeTileSEGS, # noqa: F405 + "ImpactSEGSMerge": SEGSMerge, # noqa: F405 + + "SEGSDetailerForAnimateDiff": SEGSDetailerForAnimateDiff, # noqa: F405 + + "ImpactKSamplerBasicPipe": KSamplerBasicPipe, # noqa: F405 + "ImpactKSamplerAdvancedBasicPipe": KSamplerAdvancedBasicPipe, # noqa: F405 + + "ReencodeLatent": ReencodeLatent, # noqa: F405 + "ReencodeLatentPipe": ReencodeLatentPipe, # noqa: F405 + + "ImpactImageBatchToImageList": ImageBatchToImageList, # noqa: F405 + "ImpactMakeImageList": MakeImageList, # noqa: F405 + "ImpactMakeImageBatch": MakeImageBatch, # noqa: F405 + "ImpactMakeAnyList": MakeAnyList, # noqa: F405 + "ImpactMakeMaskList": MakeMaskList, # noqa: F405 + "ImpactMakeMaskBatch": MakeMaskBatch, # noqa: F405 + "ImpactSelectNthItemOfAnyList": NthItemOfAnyList, # noqa: F405 + + "RegionalSampler": RegionalSampler, # noqa: F405 + "RegionalSamplerAdvanced": RegionalSamplerAdvanced, # noqa: F405 + "CombineRegionalPrompts": CombineRegionalPrompts, # noqa: F405 + "RegionalPrompt": RegionalPrompt, # noqa: F405 + + "ImpactCombineConditionings": CombineConditionings, # noqa: F405 + "ImpactConcatConditionings": ConcatConditionings, # noqa: F405 + + "ImpactSEGSLabelAssign": SEGSLabelAssign, # noqa: F405 + "ImpactSEGSLabelFilter": SEGSLabelFilter, # noqa: F405 + "ImpactSEGSRangeFilter": SEGSRangeFilter, # noqa: F405 + "ImpactSEGSOrderedFilter": SEGSOrderedFilter, # noqa: F405 + "ImpactSEGSIntersectionFilter": SEGSIntersectionFilter, # noqa: F405 + "ImpactSEGSNMSFilter": SEGSNMSFilter, # noqa: F405 + + "ImpactCompare": ImpactCompare, # noqa: F405 + "ImpactConditionalBranch": ImpactConditionalBranch, # noqa: F405 + "ImpactConditionalBranchSelMode": ImpactConditionalBranchSelMode, # noqa: F405 + "ImpactIfNone": ImpactIfNone, # noqa: F405 + "ImpactConvertDataType": ImpactConvertDataType, # noqa: F405 + "ImpactLogicalOperators": ImpactLogicalOperators, # noqa: F405 + "ImpactInt": ImpactInt, # noqa: F405 + "ImpactFloat": ImpactFloat, # noqa: F405 + "ImpactBoolean": ImpactBoolean, # noqa: F405 + "ImpactValueSender": ImpactValueSender, # noqa: F405 + "ImpactValueReceiver": ImpactValueReceiver, # noqa: F405 + "ImpactImageInfo": ImpactImageInfo, # noqa: F405 + "ImpactLatentInfo": ImpactLatentInfo, # noqa: F405 + "ImpactMinMax": ImpactMinMax, # noqa: F405 + "ImpactNeg": ImpactNeg, # noqa: F405 + "ImpactConditionalStopIteration": ImpactConditionalStopIteration, # noqa: F405 + "ImpactStringSelector": StringSelector, # noqa: F405 + "StringListToString": StringListToString, # noqa: F405 + "WildcardPromptFromString": WildcardPromptFromString, # noqa: F405 + "ImpactExecutionOrderController": ImpactExecutionOrderController, # noqa: F405 + "ImpactListBridge": ImpactListBridge, # noqa: F405 + + "RemoveNoiseMask": RemoveNoiseMask, # noqa: F405 + + "ImpactLogger": ImpactLogger, # noqa: F405 + "ImpactDummyInput": ImpactDummyInput, # noqa: F405 + + "ImpactQueueTrigger": ImpactQueueTrigger, # noqa: F405 + "ImpactQueueTriggerCountdown": ImpactQueueTriggerCountdown, # noqa: F405 + "ImpactSetWidgetValue": ImpactSetWidgetValue, # noqa: F405 + "ImpactNodeSetMuteState": ImpactNodeSetMuteState, # noqa: F405 + "ImpactControlBridge": ImpactControlBridge, # noqa: F405 + "ImpactIsNotEmptySEGS": ImpactNotEmptySEGS, # noqa: F405 + "ImpactSleep": ImpactSleep, # noqa: F405 + "ImpactRemoteBoolean": ImpactRemoteBoolean, # noqa: F405 + "ImpactRemoteInt": ImpactRemoteInt, # noqa: F405 + + "ImpactHFTransformersClassifierProvider": HF_TransformersClassifierProvider, # noqa: F405 + "ImpactSEGSClassify": SEGS_Classify, # noqa: F405 + + "ImpactSchedulerAdapter": ImpactSchedulerAdapter, # noqa: F405 + "GITSSchedulerFuncProvider": GITSSchedulerFuncProvider # noqa: F405 +} + + +NODE_DISPLAY_NAME_MAPPINGS = { + "SAMLoader": "SAMLoader (Impact)", + + "BboxDetectorSEGS": "BBOX Detector (SEGS)", + "SegmDetectorSEGS": "SEGM Detector (SEGS)", + "ONNXDetectorSEGS": "ONNX Detector (SEGS/legacy) - use BBOXDetector", + "ImpactSimpleDetectorSEGS_for_AD": "Simple Detector for Video (SEGS)", + "ImpactSAM2VideoDetectorSEGS": "SAM2 Video Detector (SEGS)", + "ImpactSimpleDetectorSEGS": "Simple Detector (SEGS)", + "ImpactSimpleDetectorSEGSPipe": "Simple Detector (SEGS/pipe)", + "ImpactControlNetApplySEGS": "ControlNetApply (SEGS) - DEPRECATED", + "ImpactControlNetApplyAdvancedSEGS": "ControlNetApply (SEGS)", + "ImpactIPAdapterApplySEGS": "IPAdapterApply (SEGS)", + + "BboxDetectorCombined_v2": "BBOX Detector (combined)", + "SegmDetectorCombined_v2": "SEGM Detector (combined)", + "SegsToCombinedMask": "SEGS to MASK (combined)", + "MediaPipeFaceMeshToSEGS": "MediaPipe FaceMesh to SEGS", + "MaskToSEGS": "MASK to SEGS", + "MaskToSEGS_for_AnimateDiff": "MASK to SEGS for Video", + "BitwiseAndMaskForEach": "Pixelwise(SEGS & SEGS)", + "SubtractMaskForEach": "Pixelwise(SEGS - SEGS)", + "ImpactSegsAndMask": "Pixelwise(SEGS & MASK)", + "ImpactSegsAndMaskForEach": "Pixelwise(SEGS & MASKS ForEach)", + "BitwiseAndMask": "Pixelwise(MASK & MASK)", + "SubtractMask": "Pixelwise(MASK - MASK)", + "AddMask": "Pixelwise(MASK + MASK)", + "MaskRectArea": "Mask Rect Area", + "MaskRectAreaAdvanced": "Mask Rect Area (Advanced)", + "ImpactFlattenMask": "Flatten Mask Batch", + "DetailerForEach": "Detailer (SEGS)", + "DetailerForEachAutoRetry": "Detailer (SEGS) with auto retry", + "DetailerForEachPipe": "Detailer (SEGS/pipe)", + "DetailerForEachDebug": "DetailerDebug (SEGS)", + "DetailerForEachDebugPipe": "DetailerDebug (SEGS/pipe)", + "SEGSDetailerForAnimateDiff": "SEGSDetailer For Video (SEGS/pipe)", + "DetailerForEachPipeForAnimateDiff": "Detailer For Video (SEGS/pipe)", + "SEGSUpscaler": "Upscaler (SEGS)", + "SEGSUpscalerPipe": "Upscaler (SEGS/pipe)", + + "SAMDetectorCombined": "SAMDetector (combined)", + "SAMDetectorSegmented": "SAMDetector (segmented)", + "FaceDetailerPipe": "FaceDetailer (pipe)", + "MaskDetailerPipe": "MaskDetailer (pipe)", + + "FromDetailerPipeSDXL": "FromDetailer (SDXL/pipe)", + "BasicPipeToDetailerPipeSDXL": "BasicPipe -> DetailerPipe (SDXL)", + "EditDetailerPipeSDXL": "Edit DetailerPipe (SDXL)", + + "BasicPipeToDetailerPipe": "BasicPipe -> DetailerPipe", + "DetailerPipeToBasicPipe": "DetailerPipe -> BasicPipe", + "EditBasicPipe": "Edit BasicPipe", + "EditDetailerPipe": "Edit DetailerPipe", + "AnyPipeToBasic": "Any PIPE -> BasicPipe", + + "LatentPixelScale": "Latent Scale (on Pixel Space)", + "IterativeLatentUpscale": "Iterative Upscale (Latent/on Pixel Space)", + "IterativeImageUpscale": "Iterative Upscale (Image)", + + "TwoSamplersForMaskUpscalerProvider": "TwoSamplersForMask Upscaler Provider", + "TwoSamplersForMaskUpscalerProviderPipe": "TwoSamplersForMask Upscaler Provider (pipe)", + + "ReencodeLatent": "Reencode Latent", + "ReencodeLatentPipe": "Reencode Latent (pipe)", + + "ImpactKSamplerBasicPipe": "KSampler (pipe)", + "ImpactKSamplerAdvancedBasicPipe": "KSampler (Advanced/pipe)", + "ImpactSEGSLabelAssign": "SEGS Assign (label)", + "ImpactSEGSLabelFilter": "SEGS Filter (label)", + "ImpactSEGSRangeFilter": "SEGS Filter (range)", + "ImpactSEGSOrderedFilter": "SEGS Filter (ordered)", + "ImpactSEGSIntersectionFilter": "SEGS Filter (intersection)", + "ImpactSEGSNMSFilter": "SEGS Filter (non max suppression)", + "ImpactSEGSConcat": "SEGS Concat", + "ImpactSEGSToMaskList": "SEGS to Mask List", + "ImpactSEGSToMaskBatch": "SEGS to Mask Batch", + "ImpactSEGSPicker": "Picker (SEGS)", + "ImpactMakeTileSEGS": "Make Tile SEGS", + "ImpactSEGSMerge": "SEGS Merge", + + "ImpactDecomposeSEGS": "Decompose (SEGS)", + "ImpactAssembleSEGS": "Assemble (SEGS)", + "ImpactFrom_SEG_ELT": "From SEG_ELT", + "ImpactEdit_SEG_ELT": "Edit SEG_ELT", + "ImpactFrom_SEG_ELT_bbox": "From SEG_ELT bbox", + "ImpactFrom_SEG_ELT_crop_region": "From SEG_ELT crop_region", + "ImpactDilate_Mask_SEG_ELT": "Dilate Mask (SEG_ELT)", + "ImpactScaleBy_BBOX_SEG_ELT": "ScaleBy BBOX (SEG_ELT)", + "ImpactCount_Elts_in_SEGS": "Count Elts in SEGS", + "ImpactDilateMask": "Dilate Mask", + "ImpactGaussianBlurMask": "Gaussian Blur Mask", + "ImpactDilateMaskInSEGS": "Dilate Mask (SEGS)", + "ImpactGaussianBlurMaskInSEGS": "Gaussian Blur Mask (SEGS)", + + "PreviewBridge": "Preview Bridge (Image)", + "PreviewBridgeLatent": "Preview Bridge (Latent)", + "ImageSender": "Image Sender", + "ImageReceiver": "Image Receiver", + "ImageMaskSwitch": "Switch (images, mask)", + "ImpactSwitch": "Switch (Any)", + "ImpactInversedSwitch": "Inversed Switch (Any)", + "ImpactExecutionOrderController": "Execution Order Controller", + "ImpactListBridge": "List Bridge", + + "MasksToMaskList": "Mask Batch to Mask List", + "MaskListToMaskBatch": "Mask List to Mask Batch", + "ImpactImageBatchToImageList": "Image Batch to Image List", + "ImageListToImageBatch": "Image List to Image Batch", + + "ImpactMakeImageList": "Make Image List", + "ImpactMakeImageBatch": "Make Image Batch", + "ImpactMakeMaskList": "Make Mask List", + "ImpactMakeMaskBatch": "Make Mask Batch", + "ImpactMakeAnyList": "Make List (Any)", + "ImpactSelectNthItemOfAnyList": "Select Nth Item (Any list)", + + "ImpactStringSelector": "String Selector", + "StringListToString": "String List to String", + "WildcardPromptFromString": "Wildcard Prompt from String", + "ImpactIsNotEmptySEGS": "SEGS isn't Empty", + "SetDefaultImageForSEGS": "Set Default Image for SEGS", + "RemoveImageFromSEGS": "Remove Image from SEGS", + + "RemoveNoiseMask": "Remove Noise Mask", + + "ImpactCombineConditionings": "Combine Conditionings", + "ImpactConcatConditionings": "Concat Conditionings", + + "ImpactQueueTrigger": "Queue Trigger", + "ImpactQueueTriggerCountdown": "Queue Trigger (Countdown)", + "ImpactSetWidgetValue": "Set Widget Value", + "ImpactNodeSetMuteState": "Set Mute State", + "ImpactControlBridge": "Control Bridge", + "ImpactSleep": "Sleep", + "ImpactRemoteBoolean": "Remote Boolean (on prompt)", + "ImpactRemoteInt": "Remote Int (on prompt)", + + "ImpactHFTransformersClassifierProvider": "HF Transformers Classifier Provider", + "ImpactSEGSClassify": "SEGS Classify", + + "LatentSwitch": "Switch (latent/legacy)", + "SEGSSwitch": "Switch (SEGS/legacy)", + + "SEGSPreviewCNet": "SEGSPreview (CNET Image)", + + "ImpactSchedulerAdapter": "Impact Scheduler Adapter", + "GITSSchedulerFuncProvider": "GITSScheduler Func Provider", + "ImpactNegativeConditioningPlaceholder": "Negative Cond Placeholder" +} + + +# NOTE: Inject directly into EXTENSION_WEB_DIRS instead of WEB_DIRECTORY +# Provide the js path fixed as ComfyUI-Impact-Pack instead of the path name, making it available for external use + +# WEB_DIRECTORY = "js" -- deprecated method +nodes.EXTENSION_WEB_DIRS["ComfyUI-Impact-Pack"] = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'js') + + +__all__ = ['NODE_CLASS_MAPPINGS', 'NODE_DISPLAY_NAME_MAPPINGS'] diff --git a/comfyui-impact-pack/__pycache__/__init__.cpython-310.pyc b/comfyui-impact-pack/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..14689de30db42844549fa5ce91fd7a1816cfb62b Binary files /dev/null and b/comfyui-impact-pack/__pycache__/__init__.cpython-310.pyc differ diff --git a/comfyui-impact-pack/custom_wildcards/put_wildcards_here b/comfyui-impact-pack/custom_wildcards/put_wildcards_here new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/comfyui-impact-pack/docs/wildcards/README.md b/comfyui-impact-pack/docs/wildcards/README.md new file mode 100644 index 0000000000000000000000000000000000000000..fd5da5c3189941fe4585657d6a8cc1e285355769 --- /dev/null +++ b/comfyui-impact-pack/docs/wildcards/README.md @@ -0,0 +1,39 @@ +# Wildcard System Documentation + +Progressive on-demand wildcard loading system for ComfyUI Impact Pack. + +## Documentation Structure + +- **[WILDCARD_SYSTEM_PRD.md](WILDCARD_SYSTEM_PRD.md)** - Product requirements and specifications +- **[WILDCARD_SYSTEM_DESIGN.md](WILDCARD_SYSTEM_DESIGN.md)** - Technical architecture and implementation +- **[WILDCARD_TESTING_GUIDE.md](WILDCARD_TESTING_GUIDE.md)** - Testing procedures and validation + +## Quick Links + +- Test Suite: `../../tests/` +- Test Samples: `../../tests/wildcards/samples/` +- Implementation: `../../modules/impact/wildcards.py` +- Server API: `../../modules/impact/impact_server.py` + +## Test Execution + +```bash +cd tests/ + +# Run all test suites +bash test_encoding.sh # UTF-8 multi-language (15 tests) +bash test_error_handling.sh # Error handling (10 tests) +bash test_edge_cases.sh # Edge cases (20 tests) +bash test_deep_nesting.sh # 7-level nesting (15 tests) +bash test_ondemand_loading.sh # On-demand loading (8 tests) +bash test_config_quotes.sh # Config quotes (5 tests) +``` + +## Status + +✅ **Production Ready** +- 73 tests, 100% pass rate (6 test suites) +- Complete PRD coverage +- Zero implementation bugs +- UTF-8 encoding verified +- Error handling validated diff --git a/comfyui-impact-pack/docs/wildcards/SUMMARY.md b/comfyui-impact-pack/docs/wildcards/SUMMARY.md new file mode 100644 index 0000000000000000000000000000000000000000..b0742a0aca832dc48403c1c9077656069cb0f085 --- /dev/null +++ b/comfyui-impact-pack/docs/wildcards/SUMMARY.md @@ -0,0 +1,151 @@ +# Wildcard System - Project Summary + +## Overview + +Progressive on-demand wildcard loading system for ComfyUI Impact Pack with dynamic prompt support, UTF-8 encoding, and comprehensive testing. + +**Status**: ✅ Production Ready +**Test Coverage**: 86 tests, 100% pass rate +**Documentation**: Complete PRD, design docs, and testing guide + +--- + +## Core Features + +- **Wildcard Expansion**: `__wildcard__` syntax with transitive multi-level expansion +- **Dynamic Prompts**: + - Basic selection: `{option1|option2|option3}` + - Weighted selection: `{10::common|1::rare}` (weight comes first) + - Multi-select: `{2$$, $$red|blue|green}` with custom separators +- **UTF-8 Support**: Korean, Chinese, Arabic, emoji, special characters +- **Pattern Matching**: Depth-agnostic `__*/name__` syntax +- **On-Demand Loading**: Progressive lazy loading with configurable cache limits +- **Error Handling**: Circular reference detection, graceful fallbacks + +--- + +## Architecture + +### Implementation +- `modules/impact/wildcards.py` - Core LazyWildcardLoader and expansion engine +- `modules/impact/impact_server.py` - Server API endpoint (/impact/wildcards) +- `modules/impact/config.py` - Configuration with quoted path support + +### Key Design Decisions +- **Lazy Loading**: Memory-efficient progressive loading strategy +- **Transitive Expansion**: Multi-level wildcard references through directory hierarchy +- **Case-Insensitive Matching**: Fuzzy matching for user convenience +- **Circular Reference Detection**: Max 100 iterations with clear error messages + +--- + +## Testing + +### Test Suites (86 tests) +1. **UTF-8 Encoding** (15 tests) - Multi-language support validation +2. **Error Handling** (10 tests) - Graceful error recovery +3. **Edge Cases** (20 tests) - Boundary conditions and special scenarios +4. **Deep Nesting** (17 tests) - 7-level transitive expansion + pattern matching +5. **On-Demand Loading** (8 tests) - Progressive loading with cache limits +6. **Config Quotes** (5 tests) - Configuration path handling +7. **Dynamic Prompts** (11 tests) - Statistical validation of dynamic features + +### Test Infrastructure +- Dedicated ports per suite (8188-8198) +- Automated server lifecycle management +- Comprehensive logging in `/tmp/` +- 100% pass rate with statistical validation + +--- + +## Documentation + +- **[README](README.md)** - Quick start and feature overview +- **[PRD](WILDCARD_SYSTEM_PRD.md)** - Complete product requirements +- **[Design](WILDCARD_SYSTEM_DESIGN.md)** - Technical architecture +- **[Testing Guide](WILDCARD_TESTING_GUIDE.md)** - Test procedures and validation + +--- + +## Quick Start + +### Basic Usage +```python +# Simple wildcard +"a photo of __animal__" + +# Dynamic prompt +"a {red|blue|green} __vehicle__" + +# Weighted selection (weight comes FIRST) +"{10::common|1::rare} scene" + +# Multi-select +"{2$$, $$happy|sad|angry|excited} person" +``` + +### Running Tests +```bash +cd tests/ +bash test_encoding.sh +bash test_error_handling.sh +bash test_edge_cases.sh +bash test_deep_nesting.sh +bash test_ondemand_loading.sh +bash test_config_quotes.sh +bash test_dynamic_prompts_full.sh +``` + +--- + +## Key Implementations + +### Weighted Selection Syntax +**Correct**: `{weight::option}` - Weight comes FIRST +- `{10::common|1::rare}` → 91% common, 9% rare ✅ +- `{5::red|3::green|2::blue}` → 50%, 30%, 20% ✅ + +**Incorrect**: `{option::weight}` - Treated as equal weights +- `{common::10|rare::1}` → 50% each ❌ + +### Empty Line Filtering +Filter empty lines AND comment lines: +```python +[x for x in lines if x.strip() and not x.strip().startswith('#')] +``` + +### Config Path Quotes +Strip quotes from configuration paths: +```python +custom_wildcards_path = default_conf.get('custom_wildcards', '').strip('\'"') +``` + +--- + +## Limitations + +- Weighted selection supports integers and simple decimals only +- Complex decimal weights may conflict with multiselect pattern detection +- Circular references limited to 100 iterations +- Prefer integer weight ratios for clarity + +--- + +## Performance + +- **Lazy Loading**: Only load wildcards when needed +- **On-Demand Mode**: Progressive loading based on cache limits +- **Memory Efficient**: Configurable cache size (0.5MB - 100MB) +- **Fast Lookup**: Optimized directory traversal with pattern matching + +--- + +## Production Ready + +✅ Zero known bugs +✅ Complete PRD coverage +✅ 100% test pass rate +✅ Statistical validation +✅ Comprehensive documentation +✅ Multi-language support +✅ Graceful error handling diff --git a/comfyui-impact-pack/docs/wildcards/WILDCARD_SYSTEM_DESIGN.md b/comfyui-impact-pack/docs/wildcards/WILDCARD_SYSTEM_DESIGN.md new file mode 100644 index 0000000000000000000000000000000000000000..fa9f8da69b855bbca08a23da7ae2ef62c643b41a --- /dev/null +++ b/comfyui-impact-pack/docs/wildcards/WILDCARD_SYSTEM_DESIGN.md @@ -0,0 +1,817 @@ +# Wildcard System - Design Document + +**Document Type**: Technical Design Document +**Product**: ComfyUI Impact Pack Wildcard System +**Version**: 2.0 (Depth-Agnostic Matching) +**Last Updated**: 2025-11-18 +**Status**: Released + +--- + +## 1. System Architecture + +### 1.1 High-Level Architecture + +``` +┌─────────────────────────────────────────────────────────────┐ +│ ComfyUI Frontend │ +│ ┌──────────────────────────────────────────────────────┐ │ +│ │ ImpactWildcardProcessor / ImpactWildcardEncode │ │ +│ │ - Wildcard Prompt (editable) │ │ +│ │ - Populated Prompt (read-only in Populate mode) │ │ +│ │ - Mode: Populate / Fixed │ │ +│ │ - UI Indicator: 🟢 Full Cache / 🔵 On-Demand │ │ +│ └──────────────────────────────────────────────────────┘ │ +└────────────────────────┬─────────────────────────────────────┘ + │ + ▼ +┌─────────────────────────────────────────────────────────────┐ +│ Impact Server (API) │ +│ ┌──────────────────────────────────────────────────────┐ │ +│ │ POST /impact/wildcards │ │ +│ │ GET /impact/wildcards/list │ │ +│ │ GET /impact/wildcards/list/loaded │ │ +│ │ GET /impact/wildcards/refresh │ │ +│ └──────────────────────────────────────────────────────┘ │ +└────────────────────────┬─────────────────────────────────────┘ + │ + ▼ +┌─────────────────────────────────────────────────────────────┐ +│ Wildcard Processing Engine │ +│ ┌──────────────────────────────────────────────────────┐ │ +│ │ process() - Main entry point │ │ +│ │ ├─ process_comment_out() │ │ +│ │ ├─ replace_options() - {a|b|c} │ │ +│ │ └─ replace_wildcard() - __wildcard__ │ │ +│ │ │ │ +│ │ get_wildcard_value() │ │ +│ │ ├─ Direct lookup │ │ +│ │ ├─ Depth-agnostic fallback ⭐ NEW │ │ +│ │ └─ On-demand file loading │ │ +│ │ │ │ +│ │ get_wildcard_options() - {option1|__wild__|option3} │ │ +│ │ └─ Pattern matching for wildcards in options │ │ +│ └──────────────────────────────────────────────────────┘ │ +└────────────────────────┬─────────────────────────────────────┘ + │ + ▼ +┌─────────────────────────────────────────────────────────────┐ +│ Loading System │ +│ ┌──────────────────────────────────────────────────────┐ │ +│ │ Startup Phase │ │ +│ │ ├─ calculate_directory_size() - Early termination │ │ +│ │ ├─ Determine mode (Full Cache / On-Demand) │ │ +│ │ └─ scan_wildcard_metadata() - TXT metadata only │ │ +│ │ │ │ +│ │ Full Cache Mode │ │ +│ │ └─ load_wildcards() - Load all data │ │ +│ │ │ │ +│ │ On-Demand Mode ⭐ NEW │ │ +│ │ ├─ Pre-load: YAML files (keys in content) │ │ +│ │ └─ On-demand: TXT files (path = key) │ │ +│ └──────────────────────────────────────────────────────┘ │ +└────────────────────────┬─────────────────────────────────────┘ + │ + ▼ +┌─────────────────────────────────────────────────────────────┐ +│ Data Storage │ +│ ┌──────────────────────────────────────────────────────┐ │ +│ │ wildcard_dict = {} │ │ +│ │ - Full cache: All wildcard data │ │ +│ │ - On-demand: Not used │ │ +│ │ │ │ +│ │ available_wildcards = {} ⭐ NEW │ │ +│ │ - On-demand only: Metadata (path → file) │ │ +│ │ - Example: {"dragon": "/path/dragon.txt"} │ │ +│ │ │ │ +│ │ loaded_wildcards = {} ⭐ NEW │ │ +│ │ - On-demand only: Loaded data cache │ │ +│ │ - Example: {"dragon": ["red dragon", "blue..."]} │ │ +│ └──────────────────────────────────────────────────────┘ │ +└────────────────────────┬─────────────────────────────────────┘ + │ + ▼ +┌─────────────────────────────────────────────────────────────┐ +│ File System │ +│ ┌──────────────────────────────────────────────────────┐ │ +│ │ wildcards/ (bundled) │ │ +│ │ custom_wildcards/ (user-defined) │ │ +│ │ ├─ *.txt files (one option per line) │ │ +│ │ └─ *.yaml files (nested structure) │ │ +│ └──────────────────────────────────────────────────────┘ │ +└─────────────────────────────────────────────────────────────┘ +``` + +--- + +## 2. Core Components + +### 2.1 Processing Engine + +#### 2.1.1 process() + +**Purpose**: Main entry point for wildcard text processing + +**Flow**: +```python +def process(text, seed=None): + 1. process_comment_out(text) # Remove # comments + 2. random.seed(seed) # Deterministic generation + 3. replace_options(text) # Process {a|b|c} + 4. replace_wildcard(text) # Process __wildcard__ + 5. return processed_text +``` + +**Features**: +- Maximum 100 iterations for nested expansion +- Deterministic with seed +- Supports transitive wildcards + +--- + +#### 2.1.2 replace_options() + +**Purpose**: Process dynamic prompts `{option1|option2}` + +**Supported Syntax**: +```python +{a|b|c} # Random selection +{3::a|2::b|c} # Weighted (3:2:1 ratio) +{2$$, $$a|b|c|d} # Multi-select 2, comma-separated +{2-4$$; $$a|b|c|d} # Multi-select 2-4, semicolon-separated +{a|{b|c}|d} # Nested options +``` + +**Algorithm**: +1. Parse weight prefix (`::`) +2. Calculate normalized probabilities +3. Use `np.random.choice()` with probabilities +4. Handle multi-select with custom separators + +--- + +#### 2.1.3 replace_wildcard() + +**Purpose**: Process wildcard references `__wildcard__` + +**Flow**: +```python +def replace_wildcard(string): + for each __match__: + 1. keyword = normalize(match) + 2. options = get_wildcard_value(keyword) + 3. if options: + random select from options + elif '*' in keyword: + pattern matching (for __*/name__) + else: + keep unchanged + 4. replace in string +``` + +**Pattern Matching** (`__*/name__`): +```python +if keyword.startswith('*/'): + base_name = keyword[2:] # "*/dragon" → "dragon" + for k in wildcards: + if matches_pattern(k, base_name): + collect options + combine all options +``` + +--- + +### 2.2 Depth-Agnostic Matching ⭐ NEW + +#### 2.2.1 get_wildcard_value() + +**Purpose**: Retrieve wildcard data with automatic depth-agnostic fallback + +**Algorithm**: +```python +def get_wildcard_value(key): + # Phase 1: Direct lookup + if key in loaded_wildcards: + return loaded_wildcards[key] + + # Phase 2: File discovery + file_path = find_wildcard_file(key) + if file_path: + load and cache + return data + + # Phase 3: Depth-agnostic fallback ⭐ NEW + matched_keys = [] + for k in available_wildcards: + if matches_depth_agnostic(k, key): + matched_keys.append(k) + + if matched_keys: + # Combine all matched wildcards + all_options = [] + for mk in matched_keys: + all_options.extend(get_wildcard_value(mk)) + + # Cache combined result + loaded_wildcards[key] = all_options + return all_options + + return None +``` + +**Pattern Matching Logic**: +```python +def matches_depth_agnostic(stored_key, search_key): + """ + Examples: + search_key = "dragon" + stored_key = "dragon" → True (exact) + stored_key = "custom_wildcards/dragon" → True (ends with) + stored_key = "dragon/wizard" → True (starts with) + stored_key = "a/b/dragon/c/d" → True (contains) + """ + return (stored_key == search_key or + stored_key.endswith('/' + search_key) or + stored_key.startswith(search_key + '/') or + ('/' + search_key + '/') in stored_key) +``` + +**Benefits**: +- Works with any directory structure +- No configuration needed +- Combines multiple sources for variety +- Cached for performance + +--- + +### 2.3 Loading System + +#### 2.3.1 Mode Detection + +**Decision Algorithm**: +```python +def determine_loading_mode(): + total_size = calculate_directory_size() + cache_limit = config.wildcard_cache_limit_mb * 1024 * 1024 + + if total_size >= cache_limit: + return ON_DEMAND_MODE + else: + return FULL_CACHE_MODE +``` + +**Early Termination**: +```python +def calculate_directory_size(): + size = 0 + for file in walk(directory): + size += file_size + if size >= cache_limit: + return size # Early termination + return size +``` + +**Performance**: < 1 second for 10GB+ collections + +--- + +#### 2.3.2 Metadata Scanning ⭐ NEW + +**Purpose**: Discover TXT wildcards without loading data + +**Algorithm**: +```python +def scan_wildcard_metadata(path): + for file in walk(path): + if file.endswith('.txt'): + rel_path = relpath(file, path) + key = normalize(remove_extension(rel_path)) + available_wildcards[key] = file # Store path only +``` + +**Storage**: +```python +available_wildcards = { + "dragon": "/path/custom_wildcards/dragon.txt", + "custom_wildcards/dragon": "/path/custom_wildcards/dragon.txt", + "dragon/wizard": "/path/dragon/wizard.txt", + ... +} +``` + +**Memory**: ~50 bytes per file (path string) + +--- + +#### 2.3.3 On-Demand Loading ⭐ NEW + +**Purpose**: Load wildcard data only when accessed + +**Flow**: +``` +User request: __dragon__ + ↓ +get_wildcard_value("dragon") + ↓ +Not in cache → find_wildcard_file("dragon") + ↓ +File not found → Depth-agnostic fallback + ↓ +Pattern match: ["custom_wildcards/dragon", "dragon/wizard", ...] + ↓ +Load each matched file + ↓ +Combine all options + ↓ +Cache result: loaded_wildcards["dragon"] = combined_options + ↓ +Return combined_options +``` + +**YAML Pre-Loading**: +```python +def load_yaml_wildcards(): + """ + YAML wildcards CANNOT be on-demand because: + - Keys are inside file content, not file path + - Must parse entire file to discover keys + + Example: + File: colors.yaml + Content: + warm: [red, orange, yellow] + cold: [blue, green, purple] + + To know "__colors/warm__" exists, must parse entire file. + """ + for yaml_file in find_yaml_files(): + data = yaml.load(yaml_file) + for key, value in data.items(): + loaded_wildcards[key] = value +``` + +--- + +### 2.4 Data Structures + +#### 2.4.1 Global State + +```python +# Configuration +_on_demand_mode = False # True if on-demand mode active +wildcard_dict = {} # Full cache mode storage +available_wildcards = {} # On-demand metadata (key → file path) +loaded_wildcards = {} # On-demand loaded data (key → options) + +# Thread safety +wildcard_lock = threading.Lock() +``` + +#### 2.4.2 Key Normalization + +```python +def wildcard_normalize(x): + """ + Normalize wildcard keys for consistent lookup + + Examples: + "Dragon" → "dragon" (lowercase) + "dragon.txt" → "dragon" (remove extension) + "folder/Dragon" → "folder/dragon" (lowercase) + """ + return x.lower().replace('\\', '/') +``` + +--- + +## 3. API Design + +### 3.1 POST /impact/wildcards + +**Purpose**: Process wildcard text + +**Request**: +```json +{ + "text": "a {red|blue} __flowers__", + "seed": 42 +} +``` + +**Response**: +```json +{ + "text": "a red rose" +} +``` + +**Implementation**: +```python +@app.post("/impact/wildcards") +def process_wildcards(request): + text = request.json["text"] + seed = request.json.get("seed") + result = process(text, seed) + return {"text": result} +``` + +--- + +### 3.2 GET /impact/wildcards/list/loaded ⭐ NEW + +**Purpose**: Track progressive loading + +**Response**: +```json +{ + "data": ["__dragon__", "__flowers__"], + "on_demand_mode": true, + "total_available": 1000 +} +``` + +**Implementation**: +```python +@app.get("/impact/wildcards/list/loaded") +def get_loaded_wildcards(): + with wildcard_lock: + if _on_demand_mode: + return { + "data": [f"__{k}__" for k in loaded_wildcards.keys()], + "on_demand_mode": True, + "total_available": len(available_wildcards) + } + else: + return { + "data": [f"__{k}__" for k in wildcard_dict.keys()], + "on_demand_mode": False, + "total_available": len(wildcard_dict) + } +``` + +--- + +### 3.3 GET /impact/wildcards/refresh + +**Purpose**: Reload all wildcards + +**Implementation**: +```python +@app.get("/impact/wildcards/refresh") +def refresh_wildcards(): + global wildcard_dict, loaded_wildcards, available_wildcards + + with wildcard_lock: + # Clear all caches + wildcard_dict.clear() + loaded_wildcards.clear() + available_wildcards.clear() + + # Re-initialize + wildcard_load() + + return {"status": "ok"} +``` + +--- + +## 4. File Format Support + +### 4.1 TXT Format + +**Structure**: +``` +# flowers.txt +rose +tulip +# Comments start with # +sunflower +``` + +**Parsing**: +```python +def load_txt_wildcard(file_path): + with open(file_path) as f: + lines = f.read().splitlines() + return [x for x in lines if not x.strip().startswith('#')] +``` + +**On-Demand**: ✅ Fully supported + +--- + +### 4.2 YAML Format + +**Structure**: +```yaml +# colors.yaml +warm: + - red + - orange + - yellow + +cold: + - blue + - green + - purple +``` + +**Usage**: `__colors/warm__`, `__colors/cold__` + +**Parsing**: +```python +def load_yaml_wildcard(file_path): + data = yaml.load(file_path) + for key, value in data.items(): + if isinstance(value, list): + loaded_wildcards[key] = value + elif isinstance(value, dict): + # Recursive for nested structure + load_nested(key, value) +``` + +**On-Demand**: ⚠️ Always pre-loaded (keys in content) + +--- + +## 5. UI Integration + +### 5.1 ImpactWildcardProcessor Node + +**Features**: +- **Wildcard Prompt**: User input with wildcard syntax +- **Populated Prompt**: Processed result +- **Mode Selector**: Populate / Fixed + - **Populate**: Process wildcards on queue, populate result + - **Fixed**: Use populated text as-is (for saved images) + +**UI Indicator**: +- 🟢 **Full Cache**: All wildcards loaded +- 🔵 **On-Demand**: Progressive loading active (shows count) + +--- + +### 5.2 ImpactWildcardEncode Node + +**Additional Features**: +- **LoRA Loading**: `` +- **LoRA Block Weight**: `` +- **BREAK Syntax**: Separate encoding with Concat +- **Clip Integration**: Returns processed model + clip + +**Special Syntax**: +``` + +``` + +--- + +### 5.3 Detailer Wildcard Features + +**Ordering**: +- `[ASC]`: Ascending order (x, y) +- `[DSC]`: Descending order (x, y) +- `[ASC-SIZE]`: Ascending by area +- `[DSC-SIZE]`: Descending by area +- `[RND]`: Random order + +**Control**: +- `[SEP]`: Separate prompts per detection area +- `[SKIP]`: Skip detailing for this area +- `[STOP]`: Stop detailing (including current area) +- `[LAB]`: Label-based application +- `[CONCAT]`: Concatenate with positive conditioning + +**Example**: +``` +[ASC] +1girl, blue eyes, smile [SEP] +1boy, brown eyes [SEP] +``` + +--- + +## 6. Performance Optimization + +### 6.1 Startup Optimization + +**Techniques**: +1. **Early Termination**: Stop size calculation at cache limit +2. **Metadata Only**: Don't load TXT file content +3. **YAML Pre-loading**: Small files, pre-load is acceptable + +**Results**: +- 10GB collection: 20-60 min → < 1 min (95%+ improvement) + +--- + +### 6.2 Runtime Optimization + +**Techniques**: +1. **Caching**: Store loaded wildcards in memory +2. **Depth-Agnostic Caching**: Cache combined pattern results +3. **NumPy Random**: Fast random generation + +**Results**: +- First access: < 50ms +- Cached access: < 1ms + +--- + +### 6.3 Memory Optimization + +**Techniques**: +1. **Progressive Loading**: Load only accessed wildcards +2. **Metadata Storage**: Store paths, not data +3. **Combined Caching**: Cache pattern match results + +**Results**: +- Initial: < 100MB (vs 1GB+ in old implementation) +- Growth: Linear with usage, not total size + +--- + +## 7. Error Handling + +### 7.1 File Not Found + +**Scenario**: Wildcard file doesn't exist + +**Handling**: +```python +def get_wildcard_value(key): + file_path = find_wildcard_file(key) + if file_path is None: + # Try depth-agnostic fallback + matched = find_pattern_matches(key) + if matched: + return combine_matched(matched) + + # No match found - log warning, return None + logging.warning(f"Wildcard not found: {key}") + return None +``` + +**User Impact**: Wildcard remains unexpanded + +--- + +### 7.2 File Read Error + +**Scenario**: Cannot read file (permissions, encoding, etc.) + +**Handling**: +```python +def load_txt_wildcard(file_path): + try: + with open(file_path, 'r', encoding="ISO-8859-1") as f: + return f.read().splitlines() + except Exception as e: + logging.error(f"Failed to load {file_path}: {e}") + return None +``` + +**User Impact**: Wildcard not loaded, error logged + +--- + +### 7.3 Infinite Loop Protection + +**Scenario**: Circular wildcard references + +**Protection**: +```python +def process(text, seed=None): + max_iterations = 100 + for i in range(max_iterations): + new_text = process_one_pass(text) + if new_text == text: + break # No changes, done + text = new_text + + if i == max_iterations - 1: + logging.warning("Max iterations reached") + + return text +``` + +**User Impact**: Processing stops after 100 iterations + +--- + +## 8. Testing Strategy + +### 8.1 Unit Tests + +**Coverage**: +- `process()`: All syntax variations +- `replace_options()`: Weight, multi-select, nested +- `replace_wildcard()`: Direct, pattern, depth-agnostic +- `get_wildcard_value()`: Direct, fallback, caching + +--- + +### 8.2 Integration Tests + +**Scenarios**: +- Full cache mode activation +- On-demand mode activation +- Progressive loading tracking +- Depth-agnostic matching +- API endpoints + +**Test Suite**: `tests/test_dragon_wildcard_expansion.sh` + +--- + +### 8.3 Performance Tests + +**Metrics**: +- Startup time (10GB collection) +- Memory usage (initial, after 100 accesses) +- First access latency +- Cached access latency +- Pattern matching latency + +**Test Tool**: `/tmp/test_depth_agnostic.sh` + +--- + +## 9. Security Considerations + +### 9.1 Path Traversal + +**Risk**: Malicious wildcard names could access files outside wildcard directory + +**Mitigation**: +```python +def find_wildcard_file(key): + # Normalize and validate path + safe_key = os.path.normpath(key) + if '..' in safe_key or safe_key.startswith('/'): + logging.error(f"Invalid wildcard path: {key}") + return None + + # Ensure result is within wildcard directory + file_path = os.path.join(wildcards_path, safe_key) + if not file_path.startswith(wildcards_path): + logging.error(f"Path traversal attempt: {key}") + return None + + return file_path +``` + +--- + +### 9.2 Resource Exhaustion + +**Risk**: Very large wildcards or infinite loops + +**Mitigation**: +1. **Iteration Limit**: Max 100 expansions +2. **File Size Limit**: Reasonable file size checks +3. **Memory Monitoring**: Track loaded wildcard count + +--- + +## 10. Future Enhancements + +### 10.1 Planned Features + +1. **LRU Cache**: Automatic eviction of least-used wildcards +2. **Background Preloading**: Preload frequently-used wildcards +3. **Persistent Cache**: Save loaded wildcards across restarts +4. **Usage Statistics**: Track wildcard access patterns +5. **Compression**: Compress infrequently-used wildcards + +### 10.2 Performance Improvements + +1. **Parallel Loading**: Load multiple wildcards concurrently +2. **Index Structure**: B-tree for faster lookups +3. **Memory Pooling**: Reduce allocation overhead + +--- + +## 11. References + +### 11.1 External Documentation + +- [Product Requirements Document](WILDCARD_SYSTEM_PRD.md) +- [User Guide](WILDCARD_SYSTEM_OVERVIEW.md) +- [Testing Guide](WILDCARD_TESTING_GUIDE.md) +- [Tutorial](../../ComfyUI-extension-tutorials/ComfyUI-Impact-Pack/tutorial/ImpactWildcard.md) + +### 11.2 Code References + +- **Core Engine**: `modules/impact/wildcards.py` +- **API Server**: `modules/impact/impact_server.py` +- **UI Nodes**: `nodes.py` (ImpactWildcardProcessor, ImpactWildcardEncode) + +--- + +**Document Approval**: +- Engineering Lead: ✅ Approved +- Architecture Review: ✅ Approved +- Security Review: ✅ Approved + +**Last Review**: 2025-11-18 diff --git a/comfyui-impact-pack/docs/wildcards/WILDCARD_SYSTEM_PRD.md b/comfyui-impact-pack/docs/wildcards/WILDCARD_SYSTEM_PRD.md new file mode 100644 index 0000000000000000000000000000000000000000..811c47b2d06bd1b5e84a096b35bf17493a9ad603 --- /dev/null +++ b/comfyui-impact-pack/docs/wildcards/WILDCARD_SYSTEM_PRD.md @@ -0,0 +1,435 @@ +# Wildcard System - Product Requirements Document + +**Product**: ComfyUI Impact Pack Wildcard System +**Version**: 2.0 (Depth-Agnostic Matching) +**Status**: Released +**Last Updated**: 2025-11-18 + +--- + +## 1. Overview + +### 1.1 Product Vision + +The Wildcard System provides **dynamic text generation** for AI prompts, enabling users to create rich, varied prompts with minimal manual effort. + +### 1.2 Target Users + +- **AI Artists**: Creating varied prompts for image generation +- **Content Creators**: Generating diverse text content +- **Game Designers**: Dynamic NPC dialogue and procedural content +- **ComfyUI Users**: Workflow automation with dynamic text + +--- + +## 2. Core Features + +> **Note**: For detailed syntax examples and usage guides, see the [ImpactWildcard Tutorial](../../../ComfyUI-extension-tutorials/ComfyUI-Impact-Pack/tutorial/ImpactWildcard.md). + +### 2.1 Wildcard Syntax + +**Basic Wildcards**: +- `__wildcard_name__` - Simple text replacement (e.g., `__flower__` → random flower from flower.txt) +- `__category/subcategory__` - Hierarchical organization with subdirectories (e.g., `__obj/person__`) +- Transitive wildcards - Wildcards can reference other wildcards +- Case-insensitive matching - `__Jewel__` and `__jewel__` are identical +- `*` aggregation pattern (V4.15.1+) - Groups all items from path and subdirectories into one collection + +**Quantifiers**: +- `N#__wildcard__` - Repeat wildcard N times +- Example: `5#__wildcards__` expands to `__wildcards__|__wildcards__|__wildcards__|__wildcards__|__wildcards__` +- Can be combined with multi-select: `{2$$, $$5#__wildcards__}` + +**Comments**: +- Lines starting with `#` are treated as comments and removed +- Text following a comment is separated by single blank space from text before comment +- Example: + ``` + first {a|b|c} second # not a comment, + # this is a comment + trailing text + ``` + Becomes: `first a second # not a comment, trailing text` + +**Pattern Matching**: +- `__*/wildcard__` - Depth-agnostic pattern matching at any directory level +- Automatic fallback when direct lookup fails + +--- + +### 2.2 Dynamic Prompts + +**Basic Selection**: +- `{option1|option2|option3}` - Random selection from options +- Unlimited nesting: `{a|{d|e|f}|c}` - Nested options are evaluated +- Example: `{blue apple|red {cherry|berry}|green melon}` → `blue apple`, `red cherry`, `red berry`, or `green melon` +- Complex nesting: `1{girl is holding {blue pencil|red __fruit__|colorful __flower__}|boy is riding __vehicle__}` + +**Weighted Selection**: +- `{weight::option}` - Control selection probability +- **Syntax**: Weight comes FIRST, then `::`, then the option value +- **Correct**: `{10::common|1::rare}` → 10:1 ratio (≈91% vs ≈9%) +- **Incorrect**: `{common::10|rare::1}` → Will be treated as equal weights (50% vs 50%) +- Weights are normalized: `{5::red|3::green|2::blue}` → 50% red, 30% green, 20% blue +- Unweighted options default to weight 1: `{5::red|green|2::blue}` → 5:1:2 ratio + +**Limitations**: +- Weights must be integers or simple decimals (e.g., `5`, `10`, `0.5`) +- Complex decimal weights may cause parsing issues due to multiselect pattern conflicts +- For decimal ratios, prefer integer equivalents: use `{5::a|3::b|2::c}` instead of `{0.5::a|0.3::b|0.2::c}` + +**Multi-Select**: +- `{n$$opt1|opt2|opt3}` - Select exactly n items +- `{n1-n2$$opt1|opt2|opt3}` - Select between n1 and n2 items (excess ignored if range exceeds options) +- `{-n$$opt1|opt2|opt3}` - Select between 1 and n items +- **Custom separator**: `{n$$ separator $$opt1|opt2|opt3}` + - Example: `{2$$ and $$red|blue|green}` → "red and blue" + - Example: `{1-2$$ or $$apple|orange|banana}` → "apple" or "apple or orange" + +--- + +### 2.3 ComfyUI Nodes + +**ImpactWildcardProcessor**: +- **Purpose**: Browser-level wildcard processing for prompt generation +- **Dual Input Fields**: + - Upper field: Wildcard Prompt (accepts wildcard syntax) + - Lower field: Populated Prompt (displays generated result) +- **Mode Control**: + - **Populate**: Processes wildcards on queue prompt, populates result (read-only) + - **Fixed**: Ignores wildcard prompt, allows manual editing of populated prompt +- **Seed Input**: + - Supports seed-based deterministic generation + - Compatible seed inputs: `ImpactInt`, `Seed (rgthree)` only + - Limitation: Reads superficial input only, does not use execution results from other nodes +- **UI Indicator**: + - 🟢 Full Cache: All wildcards pre-loaded + - 🔵 On-Demand: Shows count of loaded wildcards + +**ImpactWildcardEncode**: +- All features of ImpactWildcardProcessor +- **LoRA Loading**: `` syntax + - If `clip_weight` omitted, uses same value as `model_weight` + - All loaded LoRAs applied to both `model` and `clip` outputs +- **LoRA Block Weight (LBW)** (requires Inspire Pack): + - Syntax: `` + - Use `;` as separator within spec, recommended to end with `;` + - Specs without `A=` or `B=` → used in `Lora Loader (Block Weight)` node + - Specs with `A=` or `B=` → parameters for `A` and `B` in loader node + - Examples: + - `` + - `` + - `` +- **BREAK Syntax**: Separately encode prompts and connect using `Conditioning (Concat)` +- **Output**: Returns processed conditioning with all LoRAs applied + +--- + +### 2.4 Detailer Integration + +Special syntax for Detailer Wildcard nodes (region-specific prompt application). + +**Ordering Control** (place at very beginning of prompt): +- `[ASC]` - Ascending order by (x, y) coordinates (left takes precedence, then top) +- `[DSC]` - Descending order by (x, y) coordinates +- `[ASC-SIZE]` - Ascending order by area size +- `[DSC-SIZE]` - Descending order by area size +- `[RND]` - Random order +- Example: `[ASC]\n1girl, blue eyes, smile [SEP]\n1boy, brown eyes [SEP]` + +**Area Control**: +- `[SEP]` - Separator for different prompts per detection area (SEG) +- `[SKIP]` - Skip detailing for current SEG +- `[STOP]` - Stop detailing, including current SEG +- `[CONCAT]` - Concatenate wildcard conditioning with positive conditioning (instead of replacing) + +**Label-Based Application**: +- `[LAB]` - Apply prompts based on labels (each label appears once) +- `[ALL]` - Prefix that applies to all labels +- Example: + ``` + [LAB] + [ALL] laugh, detailed eyes + [Female] blue eyes + [Male] brown eyes + ``` + Female labels get: "laugh, detailed eyes, blue eyes" + Male labels get: "laugh, detailed eyes, brown eyes" + +**Complete Example**: +``` +[DSC-SIZE] +sun glasses[SEP] +[SKIP][SEP] +blue glasses[SEP] +[STOP] +``` +Result: Faces sorted by size descending, largest gets "sun glasses", second largest skipped, third gets "blue glasses", rest not detailed. + +--- + +### 2.5 File Formats + +**TXT Files**: +- **Format**: One option per line (comma-separated on single line = one item) +- **Comments**: Lines starting with `#` are comments +- **Encoding**: UTF-8 +- **Loading**: Supports on-demand loading (loaded only when used) +- **Subfolder Support**: Use path in wildcard name (e.g., `custom_wildcards/obj/person.txt` → `__obj/person__`) +- **Example** (flower.txt): + ``` + rose + orchid + iris + carnation + lily + ``` + +**YAML Files** (V4.18.4+): +- **Format**: Nested hierarchical structure with multiple levels +- **Usage**: Keys become wildcard paths (e.g., `astronomy.Celestial-Bodies` → `__astronomy/Celestial-Bodies__`) +- **Loading**: Always pre-loaded at startup (keys exist in file content, not path) +- **Example**: + ```yaml + astronomy: + Celestial-Bodies: + - Star + - Planet + surface-swap: + - swap the surfaces for + - replace the surfaces with + ``` +- **Performance Note**: For large collections with on-demand loading, prefer TXT file structure over YAML + +**Wildcard Directories**: +- Default directories: `ComfyUI-Impact-Pack/wildcards/` and `ComfyUI-Impact-Pack/custom_wildcards/` +- Recommendation: Use `custom_wildcards/` to avoid conflicts during updates +- Custom path: Configure via `impact-pack.ini` → `custom_wildcards` setting + +--- + +### 2.6 System Features + +**Progressive On-Demand Loading** ⭐: +- **Automatic Mode Detection**: System chooses optimal loading strategy based on collection size +- **Full Cache Mode** (total size < 50MB): + - All wildcards loaded into memory at startup + - Instant access with no load delays + - UI Indicator: 🟢 `Select Wildcard 🟢 Full Cache` + - Startup log: `Using full cache mode.` +- **On-Demand Mode** (total size ≥ 50MB): + - Only metadata scanned at startup (< 1 minute for 10GB+) + - Actual wildcard data loaded progressively as accessed + - Low initial memory (< 100MB) + - UI Indicator: 🔵 `Select Wildcard 🔵 On-Demand: X loaded` + - Startup log: `Using on-demand loading mode (metadata scan only).` +- **Configuration**: Adjust threshold via `impact-pack.ini` → `wildcard_cache_limit_mb = 50` +- **File Type Behavior**: + - TXT files: Full on-demand loading support + - YAML files: Always pre-loaded (keys embedded in content) +- **Refresh Behavior**: Clears all cached data, re-scans directories, re-determines mode + +**Depth-Agnostic Matching** ⭐: +- **Automatic Fallback**: When direct lookup fails, searches for pattern matches at any depth +- **Pattern Matching**: Finds keys that end with, start with, or contain the wildcard name +- **Multi-Source Combination**: Combines all matched wildcards into single selection pool +- **Zero Configuration**: Works automatically with any directory structure +- **Performance**: Results cached for subsequent access + +**Wildcard Refresh API**: +- `GET /impact/wildcards/refresh` - Reload wildcards without restarting ComfyUI +- Clears all cached data (full cache and on-demand loaded) +- Re-scans wildcard directories +- Re-determines loading mode + +**Other APIs**: +- `POST /impact/wildcards` - Process wildcard text with seed +- `GET /impact/wildcards/list` - List all available wildcards +- `GET /impact/wildcards/list/loaded` - Show currently loaded wildcards (on-demand mode) + +**Deterministic Generation**: +- Seed-based random selection ensures reproducibility +- Same seed + same wildcard = same result +- Compatible with ImpactInt and Seed(rgthree) nodes + +--- + +## 3. Requirements + +### 3.1 Functional Requirements + +**FR-1: Wildcard Processing** +- Support all documented syntax patterns +- Deterministic results with seed control +- Up to 100 levels of nested expansion +- Graceful error handling + +**FR-2: Dynamic Prompts** +- Random, weighted, and multi-select +- Unlimited nesting depth +- Custom separators + +**FR-3: Progressive Loading** +- Automatic mode detection +- On-demand loading for large collections +- Real-time tracking + +**FR-4: Depth-Agnostic Matching** +- Automatic fallback pattern matching +- Combine all matched wildcards +- Support any directory structure + +**FR-5: ComfyUI Integration** +- ImpactWildcardProcessor node +- ImpactWildcardEncode node with LoRA +- Detailer special syntax + +--- + +### 3.2 Non-Functional Requirements + +**NFR-1: Usability** +- Time to first success: < 5 minutes +- Zero configuration for basic use +- Clear error messages + +**NFR-2: Reliability** +- 100% deterministic with same seed +- Graceful error handling +- No data loss on refresh + +**NFR-3: Compatibility** +- Python 3.8+ +- Windows, Linux, macOS +- Backward compatible with v1.x + +**NFR-4: Scalability** +- Collections up to 100GB +- Up to 1M wildcard files +- Concurrent multi-user access + +--- + +## 4. Configuration + +**File**: `impact-pack.ini` (in ComfyUI-Impact-Pack directory) + +```ini +[default] +# Custom wildcard directory (optional) +# Use this to specify additional wildcard directory path +custom_wildcards = /path/to/wildcards + +# Cache size limit in MB (default: 50) +# Determines threshold for Full Cache vs On-Demand mode +wildcard_cache_limit_mb = 50 +``` + +**Default Wildcard Directories**: +- `ComfyUI-Impact-Pack/wildcards/` - System wildcards (avoid modifying) +- `ComfyUI-Impact-Pack/custom_wildcards/` - User wildcards (recommended) +- Custom path via `custom_wildcards` setting (optional) + +**Configuration Best Practices**: +- No configuration required for basic use +- Use `custom_wildcards/` to avoid conflicts during updates +- Adjust `wildcard_cache_limit_mb` based on system memory and collection size: + - Lower limit → More likely to use on-demand mode (slower first access, lower memory) + - Higher limit → More likely to use full cache mode (faster access, higher memory) +- For large collections (10GB+), consider organizing into subdirectories for better performance + +--- + +## 5. User Workflows + +### 5.1 Getting Started + +**Goal**: First wildcard in < 5 minutes + +1. Create file: `custom_wildcards/flower.txt` +2. Add content (one per line): + ``` + rose + orchid + iris + carnation + lily + ``` +3. Use in ImpactWildcardProcessor: `a beautiful __flower__` +4. Set mode to Populate and run queue prompt +5. Result: Random selection like "a beautiful rose" + +### 5.2 Reusable Prompt Templates + +**Goal**: Save frequently used prompts + +1. Create `custom_wildcards/ppos.txt` with: + ``` + photorealistic:1.4, best quality:1.4 + ``` +2. Use concise prompt: `__ppos__, beautiful nature` +3. Result: "photorealistic:1.4, best quality:1.4, beautiful nature" + +### 5.3 Large Collections + +**Goal**: Import 10GB+ seamlessly + +1. Copy large wildcard collection to directory +2. Start ComfyUI (< 1 minute startup with on-demand mode) +3. Check UI indicator: 🔵 On-Demand mode active +4. Use wildcards immediately (loaded on first access) +5. Subsequent uses are cached for speed + +### 5.4 LoRA + Wildcards + +**Goal**: Dynamic character with LoRA + +1. Create `custom_wildcards/characters.txt`: + ``` + young girl with blue dress + warrior with armor + mage with robe + ``` +2. Use ImpactWildcardEncode node +3. Prompt: `__characters__, {day|night} scene, detailed face` +4. Result: Random character with LoRA loaded + random time of day + +### 5.5 Multi-Face Detailing + +**Goal**: Different prompts for multiple detected faces + +1. Create Detailer Wildcard prompt: + ``` + [DSC-SIZE] + blue eyes, smile[SEP] + brown eyes, serious[SEP] + green eyes, laugh + ``` +2. Result: Largest face gets "blue eyes, smile", second gets "brown eyes, serious", third gets "green eyes, laugh" + +--- + +## 6. References + +### User Documentation +- **[ImpactWildcard Tutorial](../../../ComfyUI-extension-tutorials/ComfyUI-Impact-Pack/tutorial/ImpactWildcard.md)** - Complete feature documentation + +### Technical Documentation +- **[Design Document](WILDCARD_SYSTEM_DESIGN.md)** - Architecture details +- **[Testing Guide](WILDCARD_TESTING_GUIDE.md)** - Test procedures + +--- + +## Appendix: Glossary + +- **Wildcard**: Reusable text snippet (`__name__`) +- **Dynamic Prompt**: Inline options (`{a|b|c}`) +- **Pattern Matching**: Finding wildcards by partial match +- **Depth-Agnostic**: Works with any directory structure +- **On-Demand Loading**: Load data when accessed +- **LoRA**: Low-Rank Adaptation models +- **Detailer**: Node for region-specific processing + +--- + +**Last Updated**: 2025-11-18 diff --git a/comfyui-impact-pack/docs/wildcards/WILDCARD_TESTING_GUIDE.md b/comfyui-impact-pack/docs/wildcards/WILDCARD_TESTING_GUIDE.md new file mode 100644 index 0000000000000000000000000000000000000000..495a895613deab9dde4bfeeb8fe52c252d281443 --- /dev/null +++ b/comfyui-impact-pack/docs/wildcards/WILDCARD_TESTING_GUIDE.md @@ -0,0 +1,381 @@ +# Wildcard System Testing Guide + +Complete testing guide for the ComfyUI Impact Pack wildcard system. + +--- + +## 📋 Table of Contents + +1. [Test Overview](#test-overview) +2. [Test Suites](#test-suites) +3. [Quick Start](#quick-start) +4. [Running Tests](#running-tests) +5. [Test Validation](#test-validation) + +--- + +## Test Overview + +### Test Statistics +- **Total Tests**: 86 tests across 7 suites +- **Coverage**: 100% of PRD core requirements +- **Pass Rate**: 100% +- **Test Types**: UTF-8, error handling, edge cases, nesting, on-demand, config, dynamic prompts + +### Test Structure + +``` +tests/ +├── Test Suites (7 suites, 86 tests) +│ ├── test_encoding.sh # 15 tests - UTF-8 multi-language support +│ ├── test_error_handling.sh # 10 tests - Error recovery and graceful handling +│ ├── test_edge_cases.sh # 20 tests - Boundary conditions and special cases +│ ├── test_deep_nesting.sh # 17 tests - 7-level transitive expansion + pattern matching +│ ├── test_ondemand_loading.sh # 8 tests - Progressive lazy loading with cache limits +│ ├── test_config_quotes.sh # 5 tests - Configuration path handling +│ └── test_dynamic_prompts_full.sh # 11 tests - Weighted/multiselect with statistical validation +│ +├── Documentation +│ ├── README.md # Test suite overview +│ └── RUN_ALL_TESTS.md # Execution guide +│ +├── Test Samples +│ └── wildcards/samples/ # Test wildcard files +│ ├── level1/.../level7/ # 7-level nesting structure +│ ├── *.txt # Various test wildcards +│ └── 아름다운색.txt # Korean UTF-8 sample +│ +└── Utilities + └── restart_test_server.sh # Server management utility +``` + +--- + +## Test Suites + +### 1. UTF-8 Encoding Tests (15 tests) +**File**: `test_encoding.sh` +**Port**: 8188 +**Purpose**: Multi-language support validation + +**Test Coverage**: +- Korean text (한글) +- Chinese text (中文) +- Arabic text (العربية) +- Emoji support (🐉🔥⚡) +- Special characters +- Mixed multi-language content +- Case-insensitive Korean matching + +**Key Validations**: +- All non-ASCII characters preserved +- UTF-8 encoding consistency +- No character corruption +- Proper string comparison + +--- + +### 2. Error Handling Tests (10 tests) +**File**: `test_error_handling.sh` +**Port**: 8189 +**Purpose**: Graceful error recovery + +**Test Coverage**: +- Non-existent wildcards +- Missing files +- Circular reference detection (direct and indirect) +- Malformed dynamic prompt syntax +- Deep nesting without crashes +- Invalid quantifiers + +**Key Validations**: +- No server crashes +- Clear error messages +- Original text preserved on error +- Circular detection within 100 iterations + +--- + +### 3. Edge Cases Tests (20 tests) +**File**: `test_edge_cases.sh` +**Port**: 8190 +**Purpose**: Boundary conditions and special scenarios + +**Test Coverage**: +- Empty lines and comments in wildcard files +- Very long lines (>1000 chars) +- Basic wildcard expansion +- Case-insensitive matching +- Quantifiers (1-10 repetitions) +- Pattern matching (`__*/name__`) + +**Key Validations**: +- Empty lines filtered correctly +- Comments ignored properly +- Long text handling +- Quantifier accuracy +- Pattern matching at any depth + +--- + +### 4. Deep Nesting Tests (17 tests) +**File**: `test_deep_nesting.sh` +**Port**: 8194 +**Purpose**: 7-level transitive expansion and pattern matching + +**Test Coverage**: +- Direct level access (Level 1-7) +- Transitive expansion through all levels +- Multiple wildcard nesting +- Mixed depth combinations +- Quantifiers with nesting +- Weighted selection with nesting +- Depth-agnostic pattern matching + +**Key Validations**: +- All 7 levels fully expanded +- No unexpanded wildcards remain +- Pattern matching ignores directory depth +- Complex combinations work correctly + +**Directory Structure**: +``` +samples/level1/level2/level3/level4/level5/level6/level7/ +``` + +--- + +### 5. On-Demand Loading Tests (8 tests) +**File**: `test_ondemand_loading.sh` +**Port**: 8191 +**Purpose**: Progressive lazy loading with configurable cache limits + +**Test Coverage**: +- Small cache (1MB) - On-demand mode +- Medium cache (10MB) - Hybrid mode +- Large cache (100MB) - Full cache mode +- Aggressive lazy (0.5MB) +- Various thresholds (5MB, 20MB, 50MB) + +**Key Validations**: +- Correct loading mode selection +- Progressive loading functionality +- Cache limit enforcement +- No performance degradation + +**Note**: Uses temporary samples in `/tmp/` with auto-cleanup + +--- + +### 6. Config Quotes Tests (5 tests) +**File**: `test_config_quotes.sh` +**Port**: 8192 +**Purpose**: Configuration path handling with quotes + +**Test Coverage**: +- Paths with single quotes +- Paths with double quotes +- Paths with spaces (quoted) +- Mixed quote scenarios +- Unquoted baseline + +**Key Validations**: +- Quotes stripped correctly +- Paths with spaces handled +- Wildcards loaded from quoted paths + +--- + +### 7. Dynamic Prompts Tests (11 tests) +**File**: `test_dynamic_prompts_full.sh` +**Port**: 8193 +**Purpose**: Statistical validation of weighted and multiselect features + +**Test Coverage**: +- Multiselect (2-5 items) with custom separators +- Weighted selection (various ratios: 10:1, 1:1:1, 5:3:2) +- Nested dynamic prompts +- Basic random selection +- Seed variation validation + +**Statistical Validation**: +- 100 iterations for weighted selection +- 20 iterations for multiselect +- Distribution verification (±15% tolerance) +- Duplicate detection +- Separator validation + +**Key Validations**: +- Exact item count for multiselect +- No duplicates in multiselect +- Correct separators +- Statistical distribution matches weight ratios +- Nested prompt expansion + +--- + +## Quick Start + +### Run All Tests +```bash +cd tests/ +bash test_encoding.sh && \ +bash test_error_handling.sh && \ +bash test_edge_cases.sh && \ +bash test_deep_nesting.sh && \ +bash test_ondemand_loading.sh && \ +bash test_config_quotes.sh && \ +bash test_dynamic_prompts_full.sh +``` + +### Run Individual Suite +```bash +cd tests/ +bash test_encoding.sh +``` + +### Check Test Results +All tests output: +- ✅ PASS - Test succeeded with validation +- ❌ FAIL - Test failed (should not occur) +- ⚠️ WARNING - Partial success or non-critical issue + +--- + +## Running Tests + +### Prerequisites +- ComfyUI server must be installable +- Port availability (8188-8194) +- Network access to 127.0.0.1 +- Python 3 with json module + +### Automatic Server Management +All test suites automatically: +1. Kill any existing server on target port +2. Create temporary configuration file +3. Start ComfyUI server +4. Wait for server ready (up to 60s) +5. Execute tests +6. Clean up (kill server, remove config) + +### Test Execution Flow +``` +1. Setup + ├─ Kill existing server on port + ├─ Create impact-pack.ini config + └─ Start ComfyUI server + +2. Wait for Ready + ├─ Poll server every second + ├─ Max 60 seconds timeout + └─ Log tail on failure + +3. Execute Tests + ├─ Call /impact/wildcards API + ├─ Validate responses + └─ Check behavior + +4. Cleanup + ├─ Kill server process + └─ Remove config file +``` + +--- + +## Test Validation + +### What Tests Validate + +**Behavioral Validation** (Not just "no errors"): +- **Weighted Selection**: Statistical distribution matches weight ratios +- **Multiselect**: Exact count, no duplicates, correct separator +- **Nesting**: All levels fully expanded, no remaining wildcards +- **Pattern Matching**: Depth-agnostic matching works correctly +- **UTF-8**: Character preservation and proper encoding +- **Error Handling**: Graceful recovery with meaningful messages + +### Success Criteria +- All 86 tests must pass (100% pass rate) +- No server crashes or hangs +- API responses within expected format +- Statistical distributions within ±15% tolerance +- No unexpanded wildcards in final output + +### Validation Examples + +**Weighted Selection**: +```bash +# Test 10:1 ratio with 100 iterations +# Expected: ~91% common, ~9% rare +# Actual: Count distribution within ±15% +``` + +**Multiselect**: +```bash +# Test {2$$, $$red|blue|green} +# Expected: Exactly 2 items, comma-space separator, no duplicates +# Validation: Count words, check separator, detect duplicates +``` + +**Pattern Matching**: +```bash +# Test __*/dragon__ +# Expected: Matches dragon.txt, fantasy/dragon.txt, dragon/fire.txt +# Validation: No unexpanded wildcards remain +``` + +--- + +## Troubleshooting + +### Common Issues + +**Server Fails to Start**: +```bash +# Check log file +tail -20 /tmp/{test_name}_test.log + +# Check port availability +lsof -i :8188 + +# Kill conflicting process +pkill -f "python.*main.py.*--port 8188" +``` + +**Tests Timeout**: +- Increase wait time in test script (default 60s) +- Check server performance and resources +- Verify network connectivity to 127.0.0.1 + +**Statistical Tests Fail**: +- Expected for very small sample sizes +- ±15% tolerance accounts for randomness +- Rerun test to verify consistency + +**UTF-8 Issues**: +- Ensure terminal supports UTF-8 +- Check file encoding: `file -i tests/wildcards/samples/*.txt` +- Verify locale: `locale | grep UTF-8` + +--- + +## Test Maintenance + +### Adding New Tests +1. Create new test function in appropriate suite +2. Follow existing test patterns (setup, execute, validate, cleanup) +3. Update test counts in README.md and SUMMARY.md +4. Update this guide with new test description + +### Modifying Existing Tests +1. Preserve behavioral validation (not just "no errors") +2. Maintain statistical rigor for dynamic prompt tests +3. Update documentation if test purpose changes +4. Verify all 86 tests still pass after modification + +### Test Philosophy +- **Tests validate behavior**, not just execution success +- **Statistical validation** for probabilistic features +- **Real-world scenarios** with production-like setup +- **Comprehensive coverage** of all PRD requirements diff --git a/comfyui-impact-pack/example_workflows/1-FaceDetailer.jpg b/comfyui-impact-pack/example_workflows/1-FaceDetailer.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3ca20f5bef7e9ad4f68160b789c3fcd51093ad28 Binary files /dev/null and b/comfyui-impact-pack/example_workflows/1-FaceDetailer.jpg differ diff --git a/comfyui-impact-pack/example_workflows/1-FaceDetailer.json b/comfyui-impact-pack/example_workflows/1-FaceDetailer.json new file mode 100644 index 0000000000000000000000000000000000000000..0801a0bb5dfc6e0e6bcc4de41d0005bb220578f8 --- /dev/null +++ b/comfyui-impact-pack/example_workflows/1-FaceDetailer.json @@ -0,0 +1,1269 @@ +{ + "last_node_id": 61, + "last_link_id": 170, + "nodes": [ + { + "id": 28, + "type": "KSampler", + "pos": [ + 530, + 840 + ], + "size": [ + 320, + 600 + ], + "flags": {}, + "order": 14, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 65 + }, + { + "name": "positive", + "type": "CONDITIONING", + "link": 57 + }, + { + "name": "negative", + "type": "CONDITIONING", + "link": 170 + }, + { + "name": "latent_image", + "type": "LATENT", + "link": 59, + "slot_index": 3 + } + ], + "outputs": [ + { + "name": "LATENT", + "type": "LATENT", + "links": [ + 60 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "KSampler" + }, + "widgets_values": [ + 431433362471142, + "fixed", + 20, + 8, + "euler", + "normal", + 1 + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 43, + "type": "PreviewImage", + "pos": [ + 2390, + -140 + ], + "size": [ + 230, + 300 + ], + "flags": {}, + "order": 19, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 142 + } + ], + "outputs": [], + "title": "Cropped (refined)", + "properties": { + "Node name for S&R": "PreviewImage" + }, + "widgets_values": [], + "color": "#223", + "bgcolor": "#335" + }, + { + "id": 52, + "type": "PreviewImage", + "pos": [ + 2390, + 210 + ], + "size": [ + 230, + 310 + ], + "flags": {}, + "order": 20, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 146 + } + ], + "outputs": [], + "properties": { + "Node name for S&R": "PreviewImage" + }, + "widgets_values": [], + "color": "#223", + "bgcolor": "#335" + }, + { + "id": 53, + "type": "UltralyticsDetectorProvider", + "pos": [ + 1290, + 200 + ], + "size": [ + 315, + 78 + ], + "flags": {}, + "order": 0, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "BBOX_DETECTOR", + "type": "BBOX_DETECTOR", + "shape": 3, + "links": [ + 150 + ], + "slot_index": 0 + }, + { + "name": "SEGM_DETECTOR", + "type": "SEGM_DETECTOR", + "shape": 3, + "links": null + } + ], + "properties": { + "Node name for S&R": "UltralyticsDetectorProvider" + }, + "widgets_values": [ + "bbox/face_yolov8m.pt" + ], + "color": "#223", + "bgcolor": "#335" + }, + { + "id": 16, + "type": "SAMLoader", + "pos": [ + 1290, + 340 + ], + "size": [ + 320, + 82 + ], + "flags": {}, + "order": 1, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "SAM_MODEL", + "type": "SAM_MODEL", + "links": [ + 151 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "SAMLoader" + }, + "widgets_values": [ + "sam_vit_b_01ec64.pth", + "AUTO" + ], + "color": "#223", + "bgcolor": "#335" + }, + { + "id": 30, + "type": "VAEDecode", + "pos": [ + 1010, + 840 + ], + "size": [ + 140, + 50 + ], + "flags": {}, + "order": 15, + "mode": 0, + "inputs": [ + { + "name": "samples", + "type": "LATENT", + "link": 60 + }, + { + "name": "vae", + "type": "VAE", + "link": 164 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 78, + 152 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "VAEDecode" + }, + "widgets_values": [], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 4, + "type": "CheckpointLoaderSimple", + "pos": [ + -640, + 190 + ], + "size": [ + 312.0885314941406, + 98 + ], + "flags": {}, + "order": 2, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "links": [ + 64, + 157 + ], + "slot_index": 0 + }, + { + "name": "CLIP", + "type": "CLIP", + "links": [ + 148, + 149, + 159 + ], + "slot_index": 1 + }, + { + "name": "VAE", + "type": "VAE", + "links": [ + 161, + 163 + ], + "slot_index": 2 + } + ], + "properties": { + "Node name for S&R": "CheckpointLoaderSimple" + }, + "widgets_values": [ + "SD1.5/fantexiRealistic_v10.safetensors" + ], + "color": "#222", + "bgcolor": "#000" + }, + { + "id": 58, + "type": "Reroute", + "pos": [ + 850, + 220 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 10, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 163 + } + ], + "outputs": [ + { + "name": "", + "type": "VAE", + "links": [ + 164 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 5, + "type": "CLIPTextEncode", + "pos": [ + -120, + 300 + ], + "size": [ + 310, + 180 + ], + "flags": {}, + "order": 6, + "mode": 0, + "inputs": [ + { + "name": "clip", + "type": "CLIP", + "link": 148 + } + ], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [ + 57, + 165 + ], + "slot_index": 0 + } + ], + "title": "Positive", + "properties": { + "Node name for S&R": "CLIPTextEncode" + }, + "widgets_values": [ + "(photorealistic:1.4), best quality, masterpiece, 1girl, (detailed eyes), perfect anatomy, smile, details, perfect eyes, perfect face, (SpringGreen+letter_printed_sleeveless_turtleneck), ((white_low_waist_jeans)), (thigh_gap:1.2), at_the_top_of_mountain, snow, daytime, windy, path, mountain_villa, sky_view, slender, looking_away, (small breast:1.2)" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 6, + "type": "CLIPTextEncode", + "pos": [ + -120, + 540 + ], + "size": [ + 310, + 120 + ], + "flags": {}, + "order": 7, + "mode": 0, + "inputs": [ + { + "name": "clip", + "type": "CLIP", + "link": 149 + } + ], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [ + 167 + ], + "slot_index": 0 + } + ], + "title": "Negative", + "properties": { + "Node name for S&R": "CLIPTextEncode" + }, + "widgets_values": [ + "embedding:easynegative, embedding:badhandv4, paintings, sketches, (worst quality:1.4, low quality, normal quality), lowres, normal quality, (monochrome), (grayscale), skin spots, acnes, skin blemishes, age spot, glans, nsfw, watermark, signature, text, bikini, bad anatomy, (six_fingers), (nail_art), nail polish, blush, fruit," + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 60, + "type": "Reroute", + "pos": [ + 340, + 540 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 12, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 167 + } + ], + "outputs": [ + { + "name": "", + "type": "CONDITIONING", + "links": [ + 168, + 170 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 31, + "type": "Reroute", + "pos": [ + 130, + 190 + ], + "size": [ + 82, + 26 + ], + "flags": {}, + "order": 4, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 64 + } + ], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "links": [ + 65 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": true, + "horizontal": false + } + }, + { + "id": 29, + "type": "EmptyLatentImage", + "pos": [ + -120, + 900 + ], + "size": [ + 310, + 130 + ], + "flags": {}, + "order": 3, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "LATENT", + "type": "LATENT", + "links": [ + 59 + ] + } + ], + "properties": { + "Node name for S&R": "EmptyLatentImage" + }, + "widgets_values": [ + 296, + 512, + 1 + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 51, + "type": "FaceDetailer", + "pos": [ + 1720, + -330 + ], + "size": [ + 350, + 1180 + ], + "flags": {}, + "order": 17, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 152 + }, + { + "name": "model", + "type": "MODEL", + "link": 158 + }, + { + "name": "clip", + "type": "CLIP", + "link": 160 + }, + { + "name": "vae", + "type": "VAE", + "link": 162 + }, + { + "name": "positive", + "type": "CONDITIONING", + "link": 166 + }, + { + "name": "negative", + "type": "CONDITIONING", + "link": 169 + }, + { + "name": "bbox_detector", + "type": "BBOX_DETECTOR", + "link": 150 + }, + { + "name": "sam_model_opt", + "type": "SAM_MODEL", + "shape": 7, + "link": 151 + }, + { + "name": "segm_detector_opt", + "type": "SEGM_DETECTOR", + "shape": 7, + "link": null + }, + { + "name": "detailer_hook", + "type": "DETAILER_HOOK", + "shape": 7, + "link": null + }, + { + "name": "scheduler_func_opt", + "type": "SCHEDULER_FUNC", + "shape": 7, + "link": null + } + ], + "outputs": [ + { + "name": "image", + "type": "IMAGE", + "shape": 3, + "links": [ + 141 + ], + "slot_index": 0 + }, + { + "name": "cropped_refined", + "type": "IMAGE", + "shape": 6, + "links": [ + 142 + ], + "slot_index": 1 + }, + { + "name": "cropped_enhanced_alpha", + "type": "IMAGE", + "shape": 6, + "links": [ + 146 + ], + "slot_index": 2 + }, + { + "name": "mask", + "type": "MASK", + "shape": 3, + "links": [ + 153 + ], + "slot_index": 3 + }, + { + "name": "detailer_pipe", + "type": "DETAILER_PIPE", + "shape": 3, + "links": null + }, + { + "name": "cnet_images", + "type": "IMAGE", + "shape": 6, + "links": null + } + ], + "properties": { + "Node name for S&R": "FaceDetailer" + }, + "widgets_values": [ + 360, + true, + 768, + 0, + "fixed", + 20, + 8, + "euler", + "normal", + 0.5, + 5, + true, + false, + 0.5, + 15, + 3, + "center-1", + 0, + 0.93, + 0, + 0.7, + "False", + 10, + "", + 1, + false, + 20, + false, + false + ], + "color": "#223", + "bgcolor": "#335" + }, + { + "id": 17, + "type": "MaskToImage", + "pos": [ + 2150, + 590 + ], + "size": [ + 176.39999389648438, + 26 + ], + "flags": {}, + "order": 21, + "mode": 0, + "inputs": [ + { + "name": "mask", + "type": "MASK", + "link": 153 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 107 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "MaskToImage" + }, + "widgets_values": [], + "color": "#223", + "bgcolor": "#335" + }, + { + "id": 18, + "type": "PreviewImage", + "pos": [ + 2390, + 590 + ], + "size": [ + 230, + 290 + ], + "flags": {}, + "order": 22, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 107 + } + ], + "outputs": [], + "title": "Mask", + "properties": { + "Node name for S&R": "PreviewImage" + }, + "widgets_values": [], + "color": "#223", + "bgcolor": "#335" + }, + { + "id": 7, + "type": "PreviewImage", + "pos": [ + 2660, + -320 + ], + "size": [ + 430, + 650 + ], + "flags": {}, + "order": 18, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 141 + } + ], + "outputs": [], + "title": "Enhanced", + "properties": { + "Node name for S&R": "PreviewImage" + }, + "widgets_values": [], + "color": "#223", + "bgcolor": "#335" + }, + { + "id": 33, + "type": "PreviewImage", + "pos": [ + 1250, + 840 + ], + "size": [ + 360, + 630 + ], + "flags": {}, + "order": 16, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 78 + } + ], + "outputs": [], + "properties": { + "Node name for S&R": "PreviewImage" + }, + "widgets_values": [], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 55, + "type": "Reroute", + "pos": [ + -190, + -310 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 5, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 157 + } + ], + "outputs": [ + { + "name": "", + "type": "MODEL", + "links": [ + 158 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 56, + "type": "Reroute", + "pos": [ + -190, + -290 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 8, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 159 + } + ], + "outputs": [ + { + "name": "", + "type": "CLIP", + "links": [ + 160 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 57, + "type": "Reroute", + "pos": [ + -190, + -270 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 9, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 161 + } + ], + "outputs": [ + { + "name": "", + "type": "VAE", + "links": [ + 162 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 59, + "type": "Reroute", + "pos": [ + 290, + -250 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 11, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 165 + } + ], + "outputs": [ + { + "name": "", + "type": "CONDITIONING", + "links": [ + 166 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 61, + "type": "Reroute", + "pos": [ + 520, + -230 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 13, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 168 + } + ], + "outputs": [ + { + "name": "", + "type": "CONDITIONING", + "links": [ + 169 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + } + ], + "links": [ + [ + 57, + 5, + 0, + 28, + 1, + "CONDITIONING" + ], + [ + 59, + 29, + 0, + 28, + 3, + "LATENT" + ], + [ + 60, + 28, + 0, + 30, + 0, + "LATENT" + ], + [ + 64, + 4, + 0, + 31, + 0, + "*" + ], + [ + 65, + 31, + 0, + 28, + 0, + "MODEL" + ], + [ + 78, + 30, + 0, + 33, + 0, + "IMAGE" + ], + [ + 107, + 17, + 0, + 18, + 0, + "IMAGE" + ], + [ + 141, + 51, + 0, + 7, + 0, + "IMAGE" + ], + [ + 142, + 51, + 1, + 43, + 0, + "IMAGE" + ], + [ + 146, + 51, + 2, + 52, + 0, + "IMAGE" + ], + [ + 148, + 4, + 1, + 5, + 0, + "CLIP" + ], + [ + 149, + 4, + 1, + 6, + 0, + "CLIP" + ], + [ + 150, + 53, + 0, + 51, + 6, + "BBOX_DETECTOR" + ], + [ + 151, + 16, + 0, + 51, + 7, + "SAM_MODEL" + ], + [ + 152, + 30, + 0, + 51, + 0, + "IMAGE" + ], + [ + 153, + 51, + 3, + 17, + 0, + "MASK" + ], + [ + 157, + 4, + 0, + 55, + 0, + "*" + ], + [ + 158, + 55, + 0, + 51, + 1, + "MODEL" + ], + [ + 159, + 4, + 1, + 56, + 0, + "*" + ], + [ + 160, + 56, + 0, + 51, + 2, + "CLIP" + ], + [ + 161, + 4, + 2, + 57, + 0, + "*" + ], + [ + 162, + 57, + 0, + 51, + 3, + "VAE" + ], + [ + 163, + 4, + 2, + 58, + 0, + "*" + ], + [ + 164, + 58, + 0, + 30, + 1, + "VAE" + ], + [ + 165, + 5, + 0, + 59, + 0, + "*" + ], + [ + 166, + 59, + 0, + 51, + 4, + "CONDITIONING" + ], + [ + 167, + 6, + 0, + 60, + 0, + "*" + ], + [ + 168, + 60, + 0, + 61, + 0, + "*" + ], + [ + 169, + 61, + 0, + 51, + 5, + "CONDITIONING" + ], + [ + 170, + 60, + 0, + 28, + 2, + "CONDITIONING" + ] + ], + "groups": [], + "config": {}, + "extra": { + "ds": { + "scale": 1, + "offset": [ + 740, + 430 + ] + }, + "groupNodes": {}, + "controller_panel": { + "controllers": {}, + "hidden": true, + "highlight": true, + "version": 2, + "default_order": [] + }, + "node_versions": { + "comfy-core": "0.3.14", + "comfyui-impact-subpack": "74db20c95eca152a6d686c914edc0ef4e4762cb8", + "comfyui-impact-pack": "1ae7cae2df8cca06027edfa3a24512671239d6c4" + }, + "ue_links": [], + "VHS_latentpreview": false, + "VHS_latentpreviewrate": 0, + "VHS_MetadataImage": true, + "VHS_KeepIntermediate": true + }, + "version": 0.4 +} \ No newline at end of file diff --git a/comfyui-impact-pack/example_workflows/2-MaskDetailer.json b/comfyui-impact-pack/example_workflows/2-MaskDetailer.json new file mode 100644 index 0000000000000000000000000000000000000000..52ba3f05f7ce0ca6c0279754922b40f2166400d8 --- /dev/null +++ b/comfyui-impact-pack/example_workflows/2-MaskDetailer.json @@ -0,0 +1,596 @@ +{ + "last_node_id": 5, + "last_link_id": 5, + "nodes": [ + { + "id": 1, + "type": "LoadImage", + "pos": [ + 30, + 210 + ], + "size": [ + 390, + 320 + ], + "flags": {}, + "order": 0, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "shape": 3, + "links": [ + 1 + ] + }, + { + "name": "MASK", + "type": "MASK", + "shape": 3, + "links": [ + 2 + ] + } + ], + "properties": { + "Node name for S&R": "LoadImage" + }, + "widgets_values": [ + "clipspace/clipspace-mask-609196.2000000011.png [input]", + "image" + ] + }, + { + "id": 5, + "type": "PreviewImage", + "pos": [ + 1230, + 210 + ], + "size": [ + 210, + 246 + ], + "flags": {}, + "order": 3, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 5 + } + ], + "outputs": [], + "properties": { + "Node name for S&R": "PreviewImage" + }, + "widgets_values": [] + }, + { + "id": 3, + "type": "workflow>Impact::MAKE_BASIC_PIPE", + "pos": [ + 20, + 620 + ], + "size": [ + 400, + 200 + ], + "flags": {}, + "order": 1, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "basic_pipe", + "type": "BASIC_PIPE", + "shape": 3, + "links": [ + 3 + ] + } + ], + "properties": { + "Node name for S&R": "workflow/Impact::MAKE_BASIC_PIPE" + }, + "widgets_values": [ + "SD1.5/realcartoon3d_v13.safetensors", + "(best quality:1.4), fox girl", + "(worst quality:1.4), nsfw" + ] + }, + { + "id": 2, + "type": "MaskDetailerPipe", + "pos": [ + 530, + 210 + ], + "size": [ + 569.4000244140625, + 850 + ], + "flags": {}, + "order": 2, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 1 + }, + { + "name": "mask", + "type": "MASK", + "link": 2 + }, + { + "name": "basic_pipe", + "type": "BASIC_PIPE", + "link": 3, + "slot_index": 2 + }, + { + "name": "refiner_basic_pipe_opt", + "type": "BASIC_PIPE", + "shape": 7, + "link": null + }, + { + "name": "detailer_hook", + "type": "DETAILER_HOOK", + "shape": 7, + "link": null + }, + { + "name": "scheduler_func_opt", + "type": "SCHEDULER_FUNC", + "shape": 7, + "link": null + } + ], + "outputs": [ + { + "name": "image", + "type": "IMAGE", + "shape": 3, + "links": [ + 5 + ], + "slot_index": 0 + }, + { + "name": "cropped_refined", + "type": "IMAGE", + "shape": 6, + "links": null + }, + { + "name": "cropped_enhanced_alpha", + "type": "IMAGE", + "shape": 6, + "links": [ + 4 + ], + "slot_index": 2 + }, + { + "name": "basic_pipe", + "type": "BASIC_PIPE", + "shape": 3, + "links": null + }, + { + "name": "refiner_basic_pipe_opt", + "type": "BASIC_PIPE", + "shape": 3, + "links": null + } + ], + "properties": { + "Node name for S&R": "MaskDetailerPipe" + }, + "widgets_values": [ + 512, + true, + 1024, + true, + 1003, + "fixed", + 20, + 8, + "euler", + "normal", + 0.75, + 5, + 3, + 10, + 0.2, + 1, + 1, + false, + 20, + false, + false + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 4, + "type": "PreviewImage", + "pos": [ + 1230, + 560 + ], + "size": [ + 210, + 246 + ], + "flags": {}, + "order": 4, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 4 + } + ], + "outputs": [], + "properties": { + "Node name for S&R": "PreviewImage" + }, + "widgets_values": [] + } + ], + "links": [ + [ + 1, + 1, + 0, + 2, + 0, + "IMAGE" + ], + [ + 2, + 1, + 1, + 2, + 1, + "MASK" + ], + [ + 3, + 3, + 0, + 2, + 2, + "BASIC_PIPE" + ], + [ + 4, + 2, + 2, + 4, + 0, + "IMAGE" + ], + [ + 5, + 2, + 0, + 5, + 0, + "IMAGE" + ] + ], + "groups": [], + "config": {}, + "extra": { + "ds": { + "scale": 1, + "offset": [ + 80, + -110 + ] + }, + "groupNodes": { + "Impact::MAKE_BASIC_PIPE": { + "author": "Dr.Lt.Data", + "category": "", + "config": { + "1": { + "input": { + "text": { + "name": "Positive prompt" + } + } + }, + "2": { + "input": { + "text": { + "name": "Negative prompt" + } + } + } + }, + "datetime": 1708272471445, + "external": [], + "links": [ + [ + 0, + 1, + 1, + 0, + 1, + "CLIP" + ], + [ + 0, + 1, + 2, + 0, + 1, + "CLIP" + ], + [ + 0, + 0, + 3, + 0, + 1, + "MODEL" + ], + [ + 0, + 1, + 3, + 1, + 1, + "CLIP" + ], + [ + 0, + 2, + 3, + 2, + 1, + "VAE" + ], + [ + 1, + 0, + 3, + 3, + 3, + "CONDITIONING" + ], + [ + 2, + 0, + 3, + 4, + 4, + "CONDITIONING" + ] + ], + "nodes": [ + { + "flags": {}, + "index": 0, + "mode": 0, + "order": 0, + "outputs": [ + { + "links": [], + "name": "MODEL", + "shape": 3, + "slot_index": 0, + "type": "MODEL", + "localized_name": "MODEL" + }, + { + "links": [], + "name": "CLIP", + "shape": 3, + "slot_index": 1, + "type": "CLIP", + "localized_name": "CLIP" + }, + { + "links": [], + "name": "VAE", + "shape": 3, + "slot_index": 2, + "type": "VAE", + "localized_name": "VAE" + } + ], + "pos": [ + 550, + 360 + ], + "properties": { + "Node name for S&R": "CheckpointLoaderSimple" + }, + "size": { + "0": 315, + "1": 98 + }, + "type": "CheckpointLoaderSimple", + "widgets_values": [ + "SDXL/sd_xl_base_1.0_0.9vae.safetensors" + ], + "inputs": [] + }, + { + "flags": {}, + "index": 1, + "inputs": [ + { + "link": null, + "name": "clip", + "type": "CLIP", + "localized_name": "clip" + } + ], + "mode": 0, + "order": 1, + "outputs": [ + { + "links": [], + "name": "CONDITIONING", + "shape": 3, + "slot_index": 0, + "type": "CONDITIONING", + "localized_name": "CONDITIONING" + } + ], + "pos": [ + 940, + 480 + ], + "properties": { + "Node name for S&R": "CLIPTextEncode" + }, + "size": { + "0": 263, + "1": 99 + }, + "title": "Positive", + "type": "CLIPTextEncode", + "widgets_values": [ + "" + ] + }, + { + "flags": {}, + "index": 2, + "inputs": [ + { + "link": null, + "name": "clip", + "type": "CLIP", + "localized_name": "clip" + } + ], + "mode": 0, + "order": 2, + "outputs": [ + { + "links": [], + "name": "CONDITIONING", + "shape": 3, + "slot_index": 0, + "type": "CONDITIONING", + "localized_name": "CONDITIONING" + } + ], + "pos": [ + 940, + 640 + ], + "properties": { + "Node name for S&R": "CLIPTextEncode" + }, + "size": { + "0": 263, + "1": 99 + }, + "title": "Negative", + "type": "CLIPTextEncode", + "widgets_values": [ + "" + ] + }, + { + "flags": {}, + "index": 3, + "inputs": [ + { + "link": null, + "name": "model", + "type": "MODEL", + "localized_name": "model" + }, + { + "link": null, + "name": "clip", + "type": "CLIP", + "localized_name": "clip" + }, + { + "link": null, + "name": "vae", + "type": "VAE", + "localized_name": "vae" + }, + { + "link": null, + "name": "positive", + "type": "CONDITIONING", + "localized_name": "positive" + }, + { + "link": null, + "name": "negative", + "type": "CONDITIONING", + "localized_name": "negative" + } + ], + "mode": 0, + "order": 3, + "outputs": [ + { + "links": null, + "name": "basic_pipe", + "shape": 3, + "slot_index": 0, + "type": "BASIC_PIPE", + "localized_name": "basic_pipe" + } + ], + "pos": [ + 1320, + 360 + ], + "properties": { + "Node name for S&R": "ToBasicPipe" + }, + "size": { + "0": 241.79998779296875, + "1": 106 + }, + "type": "ToBasicPipe" + } + ], + "packname": "Impact", + "version": "1.0" + } + }, + "controller_panel": { + "controllers": {}, + "hidden": true, + "highlight": true, + "version": 2, + "default_order": [] + }, + "node_versions": { + "comfy-core": "0.3.14", + "comfyui-impact-pack": "1ae7cae2df8cca06027edfa3a24512671239d6c4" + }, + "ue_links": [], + "VHS_latentpreview": false, + "VHS_latentpreviewrate": 0, + "VHS_MetadataImage": true, + "VHS_KeepIntermediate": true + }, + "version": 0.4 +} \ No newline at end of file diff --git a/comfyui-impact-pack/example_workflows/3-SEGSDetailer.jpg b/comfyui-impact-pack/example_workflows/3-SEGSDetailer.jpg new file mode 100644 index 0000000000000000000000000000000000000000..62524615835a8b057d91096d7378f96f3eb8229b Binary files /dev/null and b/comfyui-impact-pack/example_workflows/3-SEGSDetailer.jpg differ diff --git a/comfyui-impact-pack/example_workflows/3-SEGSDetailer.json b/comfyui-impact-pack/example_workflows/3-SEGSDetailer.json new file mode 100644 index 0000000000000000000000000000000000000000..08bd26dedabcb57a545d197a9a48635966debc2f --- /dev/null +++ b/comfyui-impact-pack/example_workflows/3-SEGSDetailer.json @@ -0,0 +1,1056 @@ +{ + "last_node_id": 19, + "last_link_id": 30, + "nodes": [ + { + "id": 8, + "type": "SAMLoader", + "pos": [ + 60, + 530 + ], + "size": [ + 315, + 82 + ], + "flags": {}, + "order": 0, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "SAM_MODEL", + "type": "SAM_MODEL", + "shape": 3, + "links": [ + 7 + ] + } + ], + "properties": { + "Node name for S&R": "SAMLoader" + }, + "widgets_values": [ + "sam_vit_b_01ec64.pth", + "AUTO" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 7, + "type": "UltralyticsDetectorProvider", + "pos": [ + 60, + 390 + ], + "size": [ + 315, + 78 + ], + "flags": {}, + "order": 1, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "BBOX_DETECTOR", + "type": "BBOX_DETECTOR", + "shape": 3, + "links": [ + 6 + ] + }, + { + "name": "SEGM_DETECTOR", + "type": "SEGM_DETECTOR", + "shape": 3, + "links": null + } + ], + "properties": { + "Node name for S&R": "UltralyticsDetectorProvider" + }, + "widgets_values": [ + "bbox/face_yolov8m.pt" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 14, + "type": "Reroute", + "pos": [ + 570, + 330 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 5, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 18 + } + ], + "outputs": [ + { + "name": "", + "type": "IMAGE", + "links": [ + 19 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + }, + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 15, + "type": "Reroute", + "pos": [ + 1240, + 330 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 7, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 19 + } + ], + "outputs": [ + { + "name": "", + "type": "IMAGE", + "links": [ + 24, + 26 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + }, + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 16, + "type": "Reroute", + "pos": [ + 1740, + 330 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 8, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 24 + } + ], + "outputs": [ + { + "name": "", + "type": "IMAGE", + "links": [ + 25 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + }, + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 17, + "type": "Reroute", + "pos": [ + 1390, + 390 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 9, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "pos": [ + 37.5, + 0 + ], + "link": 26 + } + ], + "outputs": [ + { + "name": "", + "type": "IMAGE", + "links": [ + 27, + 28 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": true + }, + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 13, + "type": "SEGSPaste", + "pos": [ + 1860, + 510 + ], + "size": [ + 570, + 122 + ], + "flags": {}, + "order": 10, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 25 + }, + { + "name": "segs", + "type": "SEGS", + "link": 22 + }, + { + "name": "ref_image_opt", + "type": "IMAGE", + "shape": 7, + "link": null + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "shape": 3, + "links": [ + 29 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "SEGSPaste" + }, + "widgets_values": [ + 5, + 255 + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 1, + "type": "LoadImage", + "pos": [ + 60, + 680 + ], + "size": [ + 315, + 314 + ], + "flags": {}, + "order": 2, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "shape": 3, + "links": [ + 1, + 8, + 18 + ], + "slot_index": 0 + }, + { + "name": "MASK", + "type": "MASK", + "shape": 3, + "links": null + } + ], + "properties": { + "Node name for S&R": "LoadImage" + }, + "widgets_values": [ + "ComfyUI_temp_xltgv_00001_.png", + "image" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 19, + "type": "workflow>MAKE_BASIC_PIPE", + "pos": [ + 60, + 70 + ], + "size": [ + 400, + 200 + ], + "flags": {}, + "order": 3, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "basic_pipe", + "type": "BASIC_PIPE", + "shape": 3, + "links": [ + 30 + ] + } + ], + "properties": { + "Node name for S&R": "workflow/MAKE_BASIC_PIPE" + }, + "widgets_values": [ + "SD1.5/V07_v07.safetensors", + "best quality:1.4, detailed, (goth:0.8)", + "low quality:1.4, worst quality:1.4" + ], + "color": "#222", + "bgcolor": "#000" + }, + { + "id": 6, + "type": "SEGSPreview", + "pos": [ + 1460, + 600 + ], + "size": [ + 320, + 314 + ], + "flags": {}, + "order": 11, + "mode": 0, + "inputs": [ + { + "name": "segs", + "type": "SEGS", + "link": 5 + }, + { + "name": "fallback_image_opt", + "type": "IMAGE", + "shape": 7, + "link": 27 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "shape": 6, + "links": null + } + ], + "properties": { + "Node name for S&R": "SEGSPreview" + }, + "widgets_values": [ + true, + 0.2 + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 4, + "type": "SEGSDetailer", + "pos": [ + 960, + 530 + ], + "size": [ + 440, + 734 + ], + "flags": {}, + "order": 6, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 8 + }, + { + "name": "segs", + "type": "SEGS", + "link": 3 + }, + { + "name": "basic_pipe", + "type": "BASIC_PIPE", + "link": 30, + "slot_index": 2 + }, + { + "name": "refiner_basic_pipe_opt", + "type": "BASIC_PIPE", + "shape": 7, + "link": null + }, + { + "name": "scheduler_func_opt", + "type": "SCHEDULER_FUNC", + "shape": 7, + "link": null + } + ], + "outputs": [ + { + "name": "segs", + "type": "SEGS", + "shape": 3, + "links": [ + 5, + 22 + ], + "slot_index": 0 + }, + { + "name": "cnet_images", + "type": "IMAGE", + "shape": 6, + "links": [], + "slot_index": 1 + } + ], + "properties": { + "Node name for S&R": "SEGSDetailer" + }, + "widgets_values": [ + 256, + true, + 768, + 1021210429641780, + "fixed", + 20, + 8, + "euler", + "normal", + 0.3, + true, + false, + 0.2, + 1, + 1, + false, + 20 + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 5, + "type": "PreviewImage", + "pos": [ + 1460, + 940 + ], + "size": [ + 320, + 310 + ], + "flags": {}, + "order": 12, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 28 + } + ], + "outputs": [], + "properties": { + "Node name for S&R": "PreviewImage" + }, + "widgets_values": [], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 18, + "type": "PreviewImage", + "pos": [ + 1860, + 690 + ], + "size": [ + 570, + 560 + ], + "flags": {}, + "order": 13, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 29 + } + ], + "outputs": [], + "properties": { + "Node name for S&R": "PreviewImage" + }, + "widgets_values": [], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 2, + "type": "ImpactSimpleDetectorSEGS", + "pos": [ + 570, + 530 + ], + "size": [ + 315, + 310 + ], + "flags": {}, + "order": 4, + "mode": 0, + "inputs": [ + { + "name": "bbox_detector", + "type": "BBOX_DETECTOR", + "link": 6, + "slot_index": 0 + }, + { + "name": "image", + "type": "IMAGE", + "link": 1 + }, + { + "name": "sam_model_opt", + "type": "SAM_MODEL", + "shape": 7, + "link": 7, + "slot_index": 2 + }, + { + "name": "segm_detector_opt", + "type": "SEGM_DETECTOR", + "shape": 7, + "link": null + } + ], + "outputs": [ + { + "name": "SEGS", + "type": "SEGS", + "shape": 3, + "links": [ + 3 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "ImpactSimpleDetectorSEGS" + }, + "widgets_values": [ + 0.5, + 0, + 3, + 10, + 0.5, + 0, + 0, + 0.7, + 0 + ], + "color": "#322", + "bgcolor": "#533" + } + ], + "links": [ + [ + 1, + 1, + 0, + 2, + 1, + "IMAGE" + ], + [ + 3, + 2, + 0, + 4, + 1, + "SEGS" + ], + [ + 5, + 4, + 0, + 6, + 0, + "SEGS" + ], + [ + 6, + 7, + 0, + 2, + 0, + "BBOX_DETECTOR" + ], + [ + 7, + 8, + 0, + 2, + 2, + "SAM_MODEL" + ], + [ + 8, + 1, + 0, + 4, + 0, + "IMAGE" + ], + [ + 18, + 1, + 0, + 14, + 0, + "*" + ], + [ + 19, + 14, + 0, + 15, + 0, + "*" + ], + [ + 22, + 4, + 0, + 13, + 1, + "SEGS" + ], + [ + 24, + 15, + 0, + 16, + 0, + "*" + ], + [ + 25, + 16, + 0, + 13, + 0, + "IMAGE" + ], + [ + 26, + 15, + 0, + 17, + 0, + "*" + ], + [ + 27, + 17, + 0, + 6, + 1, + "IMAGE" + ], + [ + 28, + 17, + 0, + 5, + 0, + "IMAGE" + ], + [ + 29, + 13, + 0, + 18, + 0, + "IMAGE" + ], + [ + 30, + 19, + 0, + 4, + 2, + "BASIC_PIPE" + ] + ], + "groups": [], + "config": {}, + "extra": { + "groupNodes": { + "MAKE_BASIC_PIPE": { + "nodes": [ + { + "type": "CheckpointLoaderSimple", + "pos": [ + 140, + 150 + ], + "size": { + "0": 421.5882568359375, + "1": 98 + }, + "flags": {}, + "order": 3, + "mode": 0, + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "links": [], + "shape": 3, + "slot_index": 0, + "localized_name": "MODEL" + }, + { + "name": "CLIP", + "type": "CLIP", + "links": [], + "shape": 3, + "slot_index": 1, + "localized_name": "CLIP" + }, + { + "name": "VAE", + "type": "VAE", + "links": [], + "shape": 3, + "localized_name": "VAE" + } + ], + "properties": { + "Node name for S&R": "CheckpointLoaderSimple" + }, + "widgets_values": [ + "SD1.5/V07_v07.safetensors" + ], + "color": "#222", + "bgcolor": "#000", + "index": 0, + "inputs": [] + }, + { + "type": "CLIPTextEncode", + "pos": [ + 740, + 60 + ], + "size": { + "0": 256.9515686035156, + "1": 76.1346435546875 + }, + "flags": {}, + "order": 6, + "mode": 0, + "inputs": [ + { + "name": "clip", + "type": "CLIP", + "link": null, + "localized_name": "clip" + } + ], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [], + "shape": 3, + "slot_index": 0, + "localized_name": "CONDITIONING" + } + ], + "properties": { + "Node name for S&R": "CLIPTextEncode" + }, + "widgets_values": [ + "best quality:1.4, detailed, (goth:0.8)" + ], + "color": "#222", + "bgcolor": "#000", + "index": 1 + }, + { + "type": "CLIPTextEncode", + "pos": [ + 740, + 270 + ], + "size": { + "0": 258.04248046875, + "1": 79.95282745361328 + }, + "flags": {}, + "order": 7, + "mode": 0, + "inputs": [ + { + "name": "clip", + "type": "CLIP", + "link": null, + "slot_index": 0, + "localized_name": "clip" + } + ], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [], + "shape": 3, + "slot_index": 0, + "localized_name": "CONDITIONING" + } + ], + "properties": { + "Node name for S&R": "CLIPTextEncode" + }, + "widgets_values": [ + "low quality:1.4, worst quality:1.4" + ], + "color": "#222", + "bgcolor": "#000", + "index": 2 + }, + { + "type": "ToBasicPipe", + "pos": [ + 1240, + 150 + ], + "size": { + "0": 241.79998779296875, + "1": 106 + }, + "flags": {}, + "order": 9, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": null, + "localized_name": "model" + }, + { + "name": "clip", + "type": "CLIP", + "link": null, + "localized_name": "clip" + }, + { + "name": "vae", + "type": "VAE", + "link": null, + "slot_index": 2, + "localized_name": "vae" + }, + { + "name": "positive", + "type": "CONDITIONING", + "link": null, + "localized_name": "positive" + }, + { + "name": "negative", + "type": "CONDITIONING", + "link": null, + "localized_name": "negative" + } + ], + "outputs": [ + { + "name": "basic_pipe", + "type": "BASIC_PIPE", + "links": [], + "shape": 3, + "slot_index": 0, + "localized_name": "basic_pipe" + } + ], + "properties": { + "Node name for S&R": "ToBasicPipe" + }, + "color": "#222", + "bgcolor": "#000", + "index": 3 + } + ], + "links": [ + [ + 0, + 1, + 1, + 0, + 9, + "CLIP" + ], + [ + 0, + 1, + 2, + 0, + 9, + "CLIP" + ], + [ + 0, + 0, + 3, + 0, + 9, + "MODEL" + ], + [ + 0, + 1, + 3, + 1, + 9, + "CLIP" + ], + [ + 0, + 2, + 3, + 2, + 9, + "VAE" + ], + [ + 1, + 0, + 3, + 3, + 10, + "CONDITIONING" + ], + [ + 2, + 0, + 3, + 4, + 11, + "CONDITIONING" + ] + ], + "external": [ + [ + 3, + 0, + "BASIC_PIPE" + ] + ] + } + }, + "controller_panel": { + "controllers": {}, + "hidden": true, + "highlight": true, + "version": 2, + "default_order": [] + }, + "ds": { + "scale": 0.7513148009015777, + "offset": [ + 158.41700000000017, + 158.82600000000025 + ] + }, + "node_versions": { + "comfyui-impact-pack": "1ae7cae2df8cca06027edfa3a24512671239d6c4", + "comfyui-impact-subpack": "74db20c95eca152a6d686c914edc0ef4e4762cb8", + "comfy-core": "0.3.14" + }, + "ue_links": [], + "VHS_latentpreview": false, + "VHS_latentpreviewrate": 0, + "VHS_MetadataImage": true, + "VHS_KeepIntermediate": true + }, + "version": 0.4 +} \ No newline at end of file diff --git a/comfyui-impact-pack/example_workflows/4-MakeTileSEGS-Upscale.json b/comfyui-impact-pack/example_workflows/4-MakeTileSEGS-Upscale.json new file mode 100644 index 0000000000000000000000000000000000000000..902e5a7b10adfa5e7ab53439b3ae84616443dd28 --- /dev/null +++ b/comfyui-impact-pack/example_workflows/4-MakeTileSEGS-Upscale.json @@ -0,0 +1,1627 @@ +{ + "last_node_id": 67, + "last_link_id": 115, + "nodes": [ + { + "id": 31, + "type": "Reroute", + "pos": [ + 1170, + 730 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 15, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 61 + } + ], + "outputs": [ + { + "name": "", + "type": "IMAGE", + "links": [ + 59, + 60 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 32, + "type": "SAMLoader", + "pos": [ + -160, + 840 + ], + "size": [ + 315, + 82 + ], + "flags": {}, + "order": 0, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "SAM_MODEL", + "type": "SAM_MODEL", + "shape": 3, + "links": [ + 62 + ] + } + ], + "properties": { + "Node name for S&R": "SAMLoader" + }, + "widgets_values": [ + "sam_vit_b_01ec64.pth", + "AUTO" + ] + }, + { + "id": 24, + "type": "UltralyticsDetectorProvider", + "pos": [ + -160, + 700 + ], + "size": [ + 315, + 78 + ], + "flags": {}, + "order": 1, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "BBOX_DETECTOR", + "type": "BBOX_DETECTOR", + "shape": 3, + "links": [ + 35 + ] + }, + { + "name": "SEGM_DETECTOR", + "type": "SEGM_DETECTOR", + "shape": 3, + "links": [], + "slot_index": 1 + } + ], + "properties": { + "Node name for S&R": "UltralyticsDetectorProvider" + }, + "widgets_values": [ + "segm/person_yolov8m-seg.pt" + ] + }, + { + "id": 9, + "type": "ImageScaleBy", + "pos": [ + 280, + 290 + ], + "size": [ + 315, + 82 + ], + "flags": {}, + "order": 12, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 8, + "slot_index": 0 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "shape": 3, + "links": [ + 10, + 28 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "ImageScaleBy" + }, + "widgets_values": [ + "lanczos", + 2 + ] + }, + { + "id": 52, + "type": "Reroute", + "pos": [ + 1816.5716552734375, + 473.7144470214844 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 21, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 106 + } + ], + "outputs": [ + { + "name": "", + "type": "SEGS", + "links": [ + 98 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 53, + "type": "Reroute", + "pos": [ + 1180, + 1540 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 19, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 110 + } + ], + "outputs": [ + { + "name": "", + "type": "SEGS", + "links": [ + 100 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 19, + "type": "workflow>MAKE_BASIC_PIPE", + "pos": [ + 1440, + 850 + ], + "size": [ + 420, + 170 + ], + "flags": {}, + "order": 2, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "basic_pipe", + "type": "BASIC_PIPE", + "shape": 3, + "links": [ + 76 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "workflow/MAKE_BASIC_PIPE" + }, + "widgets_values": [ + "SDXL/MOHAWK_v20BackedVAE.safetensors", + "photograph of a girl, metalic robotic body, sun rising, snow field, hdr, cropped,", + "deformed, blurry, leather, fabric\n" + ] + }, + { + "id": 16, + "type": "PreviewImage", + "pos": [ + 2990, + 730 + ], + "size": [ + 610.069580078125, + 774.6857299804688 + ], + "flags": {}, + "order": 25, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 96 + } + ], + "outputs": [], + "properties": { + "Node name for S&R": "PreviewImage" + }, + "widgets_values": [] + }, + { + "id": 54, + "type": "Reroute", + "pos": [ + 2390, + 1540 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 22, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 100 + } + ], + "outputs": [ + { + "name": "", + "type": "SEGS", + "links": [ + 101 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 51, + "type": "DetailerForEachDebugPipe", + "pos": [ + 2510, + 730 + ], + "size": [ + 410, + 996 + ], + "flags": {}, + "order": 24, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 95, + "slot_index": 0 + }, + { + "name": "segs", + "type": "SEGS", + "link": 101 + }, + { + "name": "basic_pipe", + "type": "BASIC_PIPE", + "link": 94 + }, + { + "name": "detailer_hook", + "type": "DETAILER_HOOK", + "shape": 7, + "link": null + }, + { + "name": "refiner_basic_pipe_opt", + "type": "BASIC_PIPE", + "shape": 7, + "link": null + }, + { + "name": "scheduler_func_opt", + "type": "SCHEDULER_FUNC", + "shape": 7, + "link": null + } + ], + "outputs": [ + { + "name": "image", + "type": "IMAGE", + "shape": 3, + "links": [ + 96 + ], + "slot_index": 0 + }, + { + "name": "segs", + "type": "SEGS", + "shape": 3, + "links": null + }, + { + "name": "basic_pipe", + "type": "BASIC_PIPE", + "shape": 3, + "links": null + }, + { + "name": "cropped", + "type": "IMAGE", + "shape": 6, + "links": null + }, + { + "name": "cropped_refined", + "type": "IMAGE", + "shape": 6, + "links": [], + "slot_index": 4 + }, + { + "name": "cropped_refined_alpha", + "type": "IMAGE", + "shape": 6, + "links": [], + "slot_index": 5 + }, + { + "name": "cnet_images", + "type": "IMAGE", + "shape": 6, + "links": [], + "slot_index": 6 + } + ], + "properties": { + "Node name for S&R": "DetailerForEachDebugPipe" + }, + "widgets_values": [ + 64, + true, + 1024, + 522790177337692, + "fixed", + 20, + 8, + "dpmpp_3m_sde_gpu", + "karras", + 0.4, + 10, + true, + true, + "[CONCAT] red double bun, metalic arm, zoey", + 0.2, + 1, + false, + 50, + false, + false + ] + }, + { + "id": 20, + "type": "Reroute", + "pos": [ + 660, + 730 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 14, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 28 + } + ], + "outputs": [ + { + "name": "", + "type": "IMAGE", + "links": [ + 61, + 107, + 111 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 28, + "type": "SEGSPreview", + "pos": [ + 1279, + 1610 + ], + "size": [ + 315, + 314 + ], + "flags": {}, + "order": 18, + "mode": 0, + "inputs": [ + { + "name": "segs", + "type": "SEGS", + "link": 109, + "slot_index": 0 + }, + { + "name": "fallback_image_opt", + "type": "IMAGE", + "shape": 7, + "link": 59, + "slot_index": 1 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "shape": 6, + "links": [], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "SEGSPreview" + }, + "widgets_values": [ + true, + 0.1 + ] + }, + { + "id": 56, + "type": "ImpactMakeTileSEGS", + "pos": [ + 780, + 470 + ], + "size": [ + 315, + 218 + ], + "flags": {}, + "order": 17, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 111 + }, + { + "name": "filter_in_segs_opt", + "type": "SEGS", + "shape": 7, + "link": null + }, + { + "name": "filter_out_segs_opt", + "type": "SEGS", + "shape": 7, + "link": 114 + } + ], + "outputs": [ + { + "name": "SEGS", + "type": "SEGS", + "shape": 3, + "links": [ + 105, + 106 + ] + } + ], + "properties": { + "Node name for S&R": "ImpactMakeTileSEGS" + }, + "widgets_values": [ + 768, + 1.5, + 200, + 30, + 0.7000000000000001, + "Reuse fast" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 6, + "type": "SEGSPreview", + "pos": [ + 1292, + 268 + ], + "size": [ + 430.35296630859375, + 388.4536437988281 + ], + "flags": {}, + "order": 20, + "mode": 0, + "inputs": [ + { + "name": "segs", + "type": "SEGS", + "link": 105, + "slot_index": 0 + }, + { + "name": "fallback_image_opt", + "type": "IMAGE", + "shape": 7, + "link": 10, + "slot_index": 1 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "shape": 6, + "links": [], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "SEGSPreview" + }, + "widgets_values": [ + true, + 0.1 + ] + }, + { + "id": 60, + "type": "Note", + "pos": [ + -1033, + 292 + ], + "size": [ + 638.3837890625, + 178.84756469726562 + ], + "flags": {}, + "order": 3, + "mode": 0, + "inputs": [], + "outputs": [], + "title": "1.Intro", + "properties": { + "text": "" + }, + "widgets_values": [ + "This video demonstrates how to apply the newly added \"Make Tile SEGS\" in the Impact Pack to upscale using the upscale method.\n\n\"Make Tile SEGS\" node splits the image into tiles and creates SEGS.\n\nBy using this, you can mimic the tile-based upscale function and, if the detected SEGS is too large, you can also split it for detailing." + ], + "color": "#222", + "bgcolor": "#000" + }, + { + "id": 2, + "type": "LoadImage", + "pos": [ + -160, + 290 + ], + "size": [ + 315, + 314 + ], + "flags": {}, + "order": 4, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "shape": 3, + "links": [ + 8, + 34 + ], + "slot_index": 0 + }, + { + "name": "MASK", + "type": "MASK", + "shape": 3, + "links": null + } + ], + "properties": { + "Node name for S&R": "LoadImage" + }, + "widgets_values": [ + "20240107_013.webp", + "image" + ] + }, + { + "id": 62, + "type": "Note", + "pos": [ + 190, + 60 + ], + "size": [ + 396.33758544921875, + 127.46672821044922 + ], + "flags": {}, + "order": 5, + "mode": 0, + "inputs": [], + "outputs": [], + "title": "2. Simple Upscale", + "properties": { + "text": "" + }, + "widgets_values": [ + "First, let's upscale the original 1024x1536 image to double its size.\n\nSimply upscale by 2x using the \"Upscale Image Scale By\". \nThe result will, of course, be blurry.\n" + ], + "color": "#222", + "bgcolor": "#000" + }, + { + "id": 61, + "type": "Note", + "pos": [ + 780, + 35 + ], + "size": [ + 677.756591796875, + 157.3253173828125 + ], + "flags": {}, + "order": 6, + "mode": 0, + "inputs": [], + "outputs": [], + "title": "3. Make Tile SEGS", + "properties": { + "text": "" + }, + "widgets_values": [ + "Let's process this image into SEGS using \"Make Tile SEGS\".\n\nYou can see that SEGS is structured so that every part of the image can be included in the mask area.\n\nUnlike the traditional tile upscaler, this method uses Detailer, so you can improve tile heterogeneity using the 'crop_factor'.\n\nAlso, setting 'mask_irregularity' to 0.7 will make the mask border irregular, improving the heterogeneity of the junctions." + ], + "color": "#222", + "bgcolor": "#000" + }, + { + "id": 63, + "type": "Note", + "pos": [ + -108, + 1056 + ], + "size": [ + 709.2979736328125, + 143.4364013671875 + ], + "flags": {}, + "order": 7, + "mode": 0, + "inputs": [], + "outputs": [], + "title": "4.Human SEGS", + "properties": { + "text": "" + }, + "widgets_values": [ + "Next, let's separate the background and the person to alleviate the noticeable artifacts, especially in the case of humans.\n\nApply the person ultralytics model to the \"Simple Detector\" to create SEGS containing the entire person.\n\nConnect the SEGS to the 'filter_out_segs_opt' in one \"Make Tile SEGS\" node, \nand in the other \"Make Tile SEGS\" node, connect it to the 'filter_in_segs_opt'." + ], + "color": "#222", + "bgcolor": "#000" + }, + { + "id": 65, + "type": "Note", + "pos": [ + 776, + 803 + ], + "size": [ + 620.825927734375, + 163.94039916992188 + ], + "flags": {}, + "order": 8, + "mode": 0, + "inputs": [], + "outputs": [], + "title": "5. filter_out_segs_opt", + "properties": { + "text": "" + }, + "widgets_values": [ + "The node connected to 'filter_out_segs_opt' creates SEGS excluding the mask of the input SEGS, allowing you to detail the background tiles.\n\n'min_overlap' determines how much the masks of each SEGS should overlap, and 'filter_segs_dilation' dilates the mask of the input SEGS.\n\nIncreasing 'filter_segs_dilation' in 'filter_out_segs_opt' generates masks further away from the person." + ], + "color": "#222", + "bgcolor": "#000" + }, + { + "id": 66, + "type": "Note", + "pos": [ + 814, + 2007 + ], + "size": [ + 620.825927734375, + 163.94039916992188 + ], + "flags": {}, + "order": 9, + "mode": 0, + "inputs": [], + "outputs": [], + "title": "6. filter_in_segs_opt", + "properties": { + "text": "" + }, + "widgets_values": [ + "On the other hand, the node connected to 'filter_in_segs_opt' creates SEGS with masks overlapping the input SEGS, allowing you to detail the person.\n\nSince detailing the person requires more attention than the background, increase 'bbox_size' to avoid creating small pieces, and increase 'min_overlap' to reduce junction artifacts and allow overlapping detailing.\n" + ], + "color": "#222", + "bgcolor": "#000" + }, + { + "id": 67, + "type": "Note", + "pos": [ + 1955, + 1805 + ], + "size": [ + 620.825927734375, + 163.94039916992188 + ], + "flags": {}, + "order": 10, + "mode": 0, + "inputs": [], + "outputs": [], + "title": "7. Detailing", + "properties": { + "text": "" + }, + "widgets_values": [ + "Now, using the SEGS created in this way, let's improve the upscaled image using two Detailer nodes.\n\nAlthough you can handle this with \"SEGS Concat\", separating into two Detailer nodes allows for separate options for background and person detailing.\n\nThis way, when modifying the detailing options for a person, you can prevent the recalculation of background detailing.\n" + ], + "color": "#222", + "bgcolor": "#000" + }, + { + "id": 64, + "type": "Note", + "pos": [ + 2994, + 500 + ], + "size": [ + 620.825927734375, + 163.94039916992188 + ], + "flags": {}, + "order": 11, + "mode": 0, + "inputs": [], + "outputs": [], + "title": "8. Result", + "properties": { + "text": "" + }, + "widgets_values": [ + "It seems that the image has upscaled well without significant artifacts in the 2048x3072 size." + ], + "color": "#222", + "bgcolor": "#000" + }, + { + "id": 10, + "type": "DetailerForEachDebugPipe", + "pos": [ + 1960, + 730 + ], + "size": [ + 410, + 996 + ], + "flags": {}, + "order": 23, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 60, + "slot_index": 0 + }, + { + "name": "segs", + "type": "SEGS", + "link": 98 + }, + { + "name": "basic_pipe", + "type": "BASIC_PIPE", + "link": 76 + }, + { + "name": "detailer_hook", + "type": "DETAILER_HOOK", + "shape": 7, + "link": null + }, + { + "name": "refiner_basic_pipe_opt", + "type": "BASIC_PIPE", + "shape": 7, + "link": null + }, + { + "name": "scheduler_func_opt", + "type": "SCHEDULER_FUNC", + "shape": 7, + "link": null + } + ], + "outputs": [ + { + "name": "image", + "type": "IMAGE", + "shape": 3, + "links": [ + 95 + ], + "slot_index": 0 + }, + { + "name": "segs", + "type": "SEGS", + "shape": 3, + "links": null + }, + { + "name": "basic_pipe", + "type": "BASIC_PIPE", + "shape": 3, + "links": [ + 94 + ], + "slot_index": 2 + }, + { + "name": "cropped", + "type": "IMAGE", + "shape": 6, + "links": null + }, + { + "name": "cropped_refined", + "type": "IMAGE", + "shape": 6, + "links": [], + "slot_index": 4 + }, + { + "name": "cropped_refined_alpha", + "type": "IMAGE", + "shape": 6, + "links": [], + "slot_index": 5 + }, + { + "name": "cnet_images", + "type": "IMAGE", + "shape": 6, + "links": [], + "slot_index": 6 + } + ], + "properties": { + "Node name for S&R": "DetailerForEachDebugPipe" + }, + "widgets_values": [ + 64, + true, + 1024, + 522790177337686, + "fixed", + 20, + 8, + "dpmpp_2m_sde_gpu", + "karras", + 0.46, + 10, + true, + true, + "", + 0.2, + 1, + false, + 10, + false, + false + ] + }, + { + "id": 57, + "type": "ImpactMakeTileSEGS", + "pos": [ + 820, + 1610 + ], + "size": [ + 315, + 218 + ], + "flags": {}, + "order": 16, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 107 + }, + { + "name": "filter_in_segs_opt", + "type": "SEGS", + "shape": 7, + "link": 115 + }, + { + "name": "filter_out_segs_opt", + "type": "SEGS", + "shape": 7, + "link": null + } + ], + "outputs": [ + { + "name": "SEGS", + "type": "SEGS", + "shape": 3, + "links": [ + 109, + 110 + ] + } + ], + "properties": { + "Node name for S&R": "ImpactMakeTileSEGS" + }, + "widgets_values": [ + 1200, + 1.4000000000000001, + 200, + 100, + 0.7000000000000001, + "Reuse fast" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 22, + "type": "ImpactSimpleDetectorSEGS", + "pos": [ + 282, + 699 + ], + "size": [ + 315, + 310 + ], + "flags": {}, + "order": 13, + "mode": 0, + "inputs": [ + { + "name": "bbox_detector", + "type": "BBOX_DETECTOR", + "link": 35, + "slot_index": 0 + }, + { + "name": "image", + "type": "IMAGE", + "link": 34, + "slot_index": 1 + }, + { + "name": "sam_model_opt", + "type": "SAM_MODEL", + "shape": 7, + "link": 62, + "slot_index": 2 + }, + { + "name": "segm_detector_opt", + "type": "SEGM_DETECTOR", + "shape": 7, + "link": null + } + ], + "outputs": [ + { + "name": "SEGS", + "type": "SEGS", + "shape": 3, + "links": [ + 114, + 115 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "ImpactSimpleDetectorSEGS" + }, + "widgets_values": [ + 0.5, + 0, + 3, + 10, + 0.5, + 0, + 0, + 0.7000000000000001, + 0 + ] + } + ], + "links": [ + [ + 8, + 2, + 0, + 9, + 0, + "IMAGE" + ], + [ + 10, + 9, + 0, + 6, + 1, + "IMAGE" + ], + [ + 28, + 9, + 0, + 20, + 0, + "*" + ], + [ + 34, + 2, + 0, + 22, + 1, + "IMAGE" + ], + [ + 35, + 24, + 0, + 22, + 0, + "BBOX_DETECTOR" + ], + [ + 59, + 31, + 0, + 28, + 1, + "IMAGE" + ], + [ + 60, + 31, + 0, + 10, + 0, + "IMAGE" + ], + [ + 61, + 20, + 0, + 31, + 0, + "*" + ], + [ + 62, + 32, + 0, + 22, + 2, + "SAM_MODEL" + ], + [ + 76, + 19, + 0, + 10, + 2, + "BASIC_PIPE" + ], + [ + 94, + 10, + 2, + 51, + 2, + "BASIC_PIPE" + ], + [ + 95, + 10, + 0, + 51, + 0, + "IMAGE" + ], + [ + 96, + 51, + 0, + 16, + 0, + "IMAGE" + ], + [ + 98, + 52, + 0, + 10, + 1, + "SEGS" + ], + [ + 100, + 53, + 0, + 54, + 0, + "*" + ], + [ + 101, + 54, + 0, + 51, + 1, + "SEGS" + ], + [ + 105, + 56, + 0, + 6, + 0, + "SEGS" + ], + [ + 106, + 56, + 0, + 52, + 0, + "*" + ], + [ + 107, + 20, + 0, + 57, + 0, + "IMAGE" + ], + [ + 109, + 57, + 0, + 28, + 0, + "SEGS" + ], + [ + 110, + 57, + 0, + 53, + 0, + "*" + ], + [ + 111, + 20, + 0, + 56, + 0, + "IMAGE" + ], + [ + 114, + 22, + 0, + 56, + 2, + "SEGS" + ], + [ + 115, + 22, + 0, + 57, + 1, + "SEGS" + ] + ], + "groups": [], + "config": {}, + "extra": { + "groupNodes": { + "MAKE_BASIC_PIPE": { + "nodes": [ + { + "type": "CheckpointLoaderSimple", + "pos": [ + -80, + 1100 + ], + "size": { + "0": 315, + "1": 98 + }, + "flags": {}, + "order": 0, + "mode": 0, + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "links": [], + "shape": 3, + "slot_index": 0, + "localized_name": "MODEL" + }, + { + "name": "CLIP", + "type": "CLIP", + "links": [], + "shape": 3, + "slot_index": 1, + "localized_name": "CLIP" + }, + { + "name": "VAE", + "type": "VAE", + "links": [], + "shape": 3, + "slot_index": 2, + "localized_name": "VAE" + } + ], + "properties": { + "Node name for S&R": "CheckpointLoaderSimple" + }, + "widgets_values": [ + "SD1.5/majicmixRealistic_v7.safetensors" + ], + "index": 0, + "inputs": [] + }, + { + "type": "CLIPTextEncode", + "pos": [ + 455, + 1026 + ], + "size": { + "0": 210, + "1": 104.50106048583984 + }, + "flags": {}, + "order": 2, + "mode": 0, + "inputs": [ + { + "name": "clip", + "type": "CLIP", + "link": null, + "localized_name": "clip" + } + ], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [], + "shape": 3, + "slot_index": 0, + "localized_name": "CONDITIONING" + } + ], + "properties": { + "Node name for S&R": "CLIPTextEncode" + }, + "widgets_values": [ + "photograph, 4k, hdr, cropped, 1girl sit, blur hair, pink bag" + ], + "index": 1 + }, + { + "type": "CLIPTextEncode", + "pos": [ + 456, + 1239 + ], + "size": { + "0": 210, + "1": 104.50106048583984 + }, + "flags": {}, + "order": 3, + "mode": 0, + "inputs": [ + { + "name": "clip", + "type": "CLIP", + "link": null, + "slot_index": 0, + "localized_name": "clip" + } + ], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [], + "shape": 3, + "localized_name": "CONDITIONING" + } + ], + "properties": { + "Node name for S&R": "CLIPTextEncode" + }, + "widgets_values": [ + "deformed, blurry\n" + ], + "index": 2 + }, + { + "type": "ToBasicPipe", + "pos": [ + 800, + 1100 + ], + "size": { + "0": 241.79998779296875, + "1": 106 + }, + "flags": {}, + "order": 5, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": null, + "localized_name": "model" + }, + { + "name": "clip", + "type": "CLIP", + "link": null, + "slot_index": 1, + "localized_name": "clip" + }, + { + "name": "vae", + "type": "VAE", + "link": null, + "localized_name": "vae" + }, + { + "name": "positive", + "type": "CONDITIONING", + "link": null, + "localized_name": "positive" + }, + { + "name": "negative", + "type": "CONDITIONING", + "link": null, + "slot_index": 4, + "localized_name": "negative" + } + ], + "outputs": [ + { + "name": "basic_pipe", + "type": "BASIC_PIPE", + "links": [], + "shape": 3, + "slot_index": 0, + "localized_name": "basic_pipe" + } + ], + "properties": { + "Node name for S&R": "ToBasicPipe" + }, + "index": 3 + } + ], + "links": [ + [ + 0, + 1, + 1, + 0, + 11, + "CLIP" + ], + [ + 0, + 1, + 2, + 0, + 11, + "CLIP" + ], + [ + 0, + 0, + 3, + 0, + 11, + "MODEL" + ], + [ + 0, + 1, + 3, + 1, + 11, + "CLIP" + ], + [ + 0, + 2, + 3, + 2, + 11, + "VAE" + ], + [ + 1, + 0, + 3, + 3, + 13, + "CONDITIONING" + ], + [ + 2, + 0, + 3, + 4, + 14, + "CONDITIONING" + ] + ], + "external": [ + [ + 3, + 0, + "BASIC_PIPE" + ] + ] + } + }, + "controller_panel": { + "controllers": {}, + "hidden": true, + "highlight": true, + "version": 2, + "default_order": [] + }, + "ds": { + "scale": 1.4641000000000006, + "offset": { + "0": -481.44390869140625, + "1": -92.16561126708984 + } + }, + "node_versions": { + "comfyui-impact-pack": "1ae7cae2df8cca06027edfa3a24512671239d6c4", + "comfyui-impact-subpack": "74db20c95eca152a6d686c914edc0ef4e4762cb8", + "comfy-core": "0.3.14" + }, + "ue_links": [], + "VHS_latentpreview": false, + "VHS_latentpreviewrate": 0, + "VHS_MetadataImage": true, + "VHS_KeepIntermediate": true + }, + "version": 0.4 +} \ No newline at end of file diff --git a/comfyui-impact-pack/example_workflows/5-PreviewDetailerHookProvider.jpg b/comfyui-impact-pack/example_workflows/5-PreviewDetailerHookProvider.jpg new file mode 100644 index 0000000000000000000000000000000000000000..18544acc52adb8272a7df4e6331735103e4f75e7 Binary files /dev/null and b/comfyui-impact-pack/example_workflows/5-PreviewDetailerHookProvider.jpg differ diff --git a/comfyui-impact-pack/example_workflows/5-PreviewDetailerHookProvider.json b/comfyui-impact-pack/example_workflows/5-PreviewDetailerHookProvider.json new file mode 100644 index 0000000000000000000000000000000000000000..d5c88dbd46c0576070bfb55d6386589d7317143d --- /dev/null +++ b/comfyui-impact-pack/example_workflows/5-PreviewDetailerHookProvider.json @@ -0,0 +1,1629 @@ +{ + "last_node_id": 70, + "last_link_id": 125, + "nodes": [ + { + "id": 31, + "type": "Reroute", + "pos": [ + 1170, + 730 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 12, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 61 + } + ], + "outputs": [ + { + "name": "", + "type": "IMAGE", + "links": [ + 59, + 60 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 32, + "type": "SAMLoader", + "pos": [ + -160, + 840 + ], + "size": [ + 315, + 82 + ], + "flags": {}, + "order": 0, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "SAM_MODEL", + "type": "SAM_MODEL", + "shape": 3, + "links": [ + 62 + ] + } + ], + "properties": { + "Node name for S&R": "SAMLoader" + }, + "widgets_values": [ + "sam_vit_b_01ec64.pth", + "AUTO" + ] + }, + { + "id": 24, + "type": "UltralyticsDetectorProvider", + "pos": [ + -160, + 700 + ], + "size": [ + 315, + 78 + ], + "flags": {}, + "order": 1, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "BBOX_DETECTOR", + "type": "BBOX_DETECTOR", + "shape": 3, + "links": [ + 35 + ] + }, + { + "name": "SEGM_DETECTOR", + "type": "SEGM_DETECTOR", + "shape": 3, + "links": [], + "slot_index": 1 + } + ], + "properties": { + "Node name for S&R": "UltralyticsDetectorProvider" + }, + "widgets_values": [ + "segm/person_yolov8m-seg.pt" + ] + }, + { + "id": 53, + "type": "Reroute", + "pos": [ + 1180, + 1540 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 16, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 110 + } + ], + "outputs": [ + { + "name": "", + "type": "SEGS", + "links": [ + 100 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 20, + "type": "Reroute", + "pos": [ + 660, + 730 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 10, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 28 + } + ], + "outputs": [ + { + "name": "", + "type": "IMAGE", + "links": [ + 61, + 107, + 111 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 28, + "type": "SEGSPreview", + "pos": [ + 1279, + 1610 + ], + "size": [ + 315, + 314 + ], + "flags": {}, + "order": 15, + "mode": 0, + "inputs": [ + { + "name": "segs", + "type": "SEGS", + "link": 109, + "slot_index": 0 + }, + { + "name": "fallback_image_opt", + "type": "IMAGE", + "shape": 7, + "link": 59, + "slot_index": 1 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "shape": 6, + "links": [], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "SEGSPreview" + }, + "widgets_values": [ + true, + 0.1 + ] + }, + { + "id": 6, + "type": "SEGSPreview", + "pos": [ + 1292, + 268 + ], + "size": [ + 430.35296630859375, + 388.4536437988281 + ], + "flags": {}, + "order": 17, + "mode": 0, + "inputs": [ + { + "name": "segs", + "type": "SEGS", + "link": 105, + "slot_index": 0 + }, + { + "name": "fallback_image_opt", + "type": "IMAGE", + "shape": 7, + "link": 10, + "slot_index": 1 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "shape": 6, + "links": [], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "SEGSPreview" + }, + "widgets_values": [ + true, + 0.1 + ] + }, + { + "id": 57, + "type": "ImpactMakeTileSEGS", + "pos": [ + 820, + 1610 + ], + "size": [ + 315, + 218 + ], + "flags": {}, + "order": 13, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 107 + }, + { + "name": "filter_in_segs_opt", + "type": "SEGS", + "shape": 7, + "link": 115 + }, + { + "name": "filter_out_segs_opt", + "type": "SEGS", + "shape": 7, + "link": null + } + ], + "outputs": [ + { + "name": "SEGS", + "type": "SEGS", + "shape": 3, + "links": [ + 109, + 110 + ] + } + ], + "properties": { + "Node name for S&R": "ImpactMakeTileSEGS" + }, + "widgets_values": [ + 1200, + 1.4000000000000001, + 200, + 100, + 0.7000000000000001, + "Reuse fast" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 22, + "type": "ImpactSimpleDetectorSEGS", + "pos": [ + 282, + 699 + ], + "size": [ + 315, + 310 + ], + "flags": {}, + "order": 8, + "mode": 0, + "inputs": [ + { + "name": "bbox_detector", + "type": "BBOX_DETECTOR", + "link": 35, + "slot_index": 0 + }, + { + "name": "image", + "type": "IMAGE", + "link": 34, + "slot_index": 1 + }, + { + "name": "sam_model_opt", + "type": "SAM_MODEL", + "shape": 7, + "link": 62, + "slot_index": 2 + }, + { + "name": "segm_detector_opt", + "type": "SEGM_DETECTOR", + "shape": 7, + "link": null, + "slot_index": 3 + } + ], + "outputs": [ + { + "name": "SEGS", + "type": "SEGS", + "shape": 3, + "links": [ + 114, + 115 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "ImpactSimpleDetectorSEGS" + }, + "widgets_values": [ + 0.5, + 0, + 3, + 10, + 0.5, + 0, + 0, + 0.7000000000000001, + 0 + ] + }, + { + "id": 2, + "type": "LoadImage", + "pos": [ + -160, + 290 + ], + "size": [ + 315, + 314 + ], + "flags": {}, + "order": 2, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "shape": 3, + "links": [ + 8, + 34 + ], + "slot_index": 0 + }, + { + "name": "MASK", + "type": "MASK", + "shape": 3, + "links": null + } + ], + "properties": { + "Node name for S&R": "LoadImage" + }, + "widgets_values": [ + "combination-2pass-original.png", + "image" + ] + }, + { + "id": 9, + "type": "ImageScaleBy", + "pos": [ + 280, + 290 + ], + "size": [ + 315, + 82 + ], + "flags": {}, + "order": 7, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 8, + "slot_index": 0 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "shape": 3, + "links": [ + 10, + 28 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "ImageScaleBy" + }, + "widgets_values": [ + "lanczos", + 3 + ] + }, + { + "id": 16, + "type": "PreviewImage", + "pos": [ + 2990, + 730 + ], + "size": [ + 610.069580078125, + 774.6857299804688 + ], + "flags": {}, + "order": 22, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 96 + } + ], + "outputs": [], + "properties": { + "Node name for S&R": "PreviewImage" + }, + "widgets_values": [] + }, + { + "id": 68, + "type": "PreviewDetailerHookProvider", + "pos": [ + 943, + -1972 + ], + "size": [ + 1360.0478515625, + 1943.85986328125 + ], + "flags": {}, + "order": 3, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "DETAILER_HOOK", + "type": "DETAILER_HOOK", + "shape": 3, + "links": [ + 120 + ], + "slot_index": 0 + }, + { + "name": "UPSCALER_HOOK", + "type": "UPSCALER_HOOK", + "links": null + } + ], + "title": "PreviewDetailerHookProvider - Live Preview", + "properties": { + "Node name for S&R": "PreviewDetailerHookProvider" + }, + "widgets_values": [ + 95 + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 69, + "type": "Reroute", + "pos": [ + 2360, + -1920 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 9, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "pos": [ + 37.5, + 0 + ], + "link": 120 + } + ], + "outputs": [ + { + "name": "", + "type": "DETAILER_HOOK", + "links": [ + 121 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": true + } + }, + { + "id": 19, + "type": "workflow>MAKE_BASIC_PIPE", + "pos": [ + 1440, + 850 + ], + "size": [ + 451.0836486816406, + 279.9571533203125 + ], + "flags": {}, + "order": 4, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "basic_pipe", + "type": "BASIC_PIPE", + "shape": 3, + "links": [ + 76 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "workflow/MAKE_BASIC_PIPE" + }, + "widgets_values": [ + "SDXL/MOHAWK_v20BackedVAE.safetensors", + "cinematic photograph of a girl is walking, cinematic lighting, white inddor", + "deformed, blurry, \n" + ] + }, + { + "id": 52, + "type": "Reroute", + "pos": [ + 2330, + 470 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 18, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 106 + } + ], + "outputs": [ + { + "name": "", + "type": "SEGS", + "links": [ + 119 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 54, + "type": "Reroute", + "pos": [ + 1780, + 1540 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 19, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 100 + } + ], + "outputs": [ + { + "name": "", + "type": "SEGS", + "links": [ + 118 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 56, + "type": "ImpactMakeTileSEGS", + "pos": [ + 780, + 470 + ], + "size": [ + 315, + 218 + ], + "flags": {}, + "order": 14, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 111 + }, + { + "name": "filter_in_segs_opt", + "type": "SEGS", + "shape": 7, + "link": null + }, + { + "name": "filter_out_segs_opt", + "type": "SEGS", + "shape": 7, + "link": 114 + } + ], + "outputs": [ + { + "name": "SEGS", + "type": "SEGS", + "shape": 3, + "links": [ + 105, + 106 + ] + } + ], + "properties": { + "Node name for S&R": "ImpactMakeTileSEGS" + }, + "widgets_values": [ + 768, + 1.5, + 200, + 0, + 0.7000000000000001, + "Reuse fast" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 10, + "type": "DetailerForEachDebugPipe", + "pos": [ + 1960, + 730 + ], + "size": [ + 410, + 996 + ], + "flags": {}, + "order": 20, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 60, + "slot_index": 0 + }, + { + "name": "segs", + "type": "SEGS", + "link": 118 + }, + { + "name": "basic_pipe", + "type": "BASIC_PIPE", + "link": 76 + }, + { + "name": "detailer_hook", + "type": "DETAILER_HOOK", + "shape": 7, + "link": 124, + "slot_index": 3 + }, + { + "name": "refiner_basic_pipe_opt", + "type": "BASIC_PIPE", + "shape": 7, + "link": null + }, + { + "name": "scheduler_func_opt", + "type": "SCHEDULER_FUNC", + "shape": 7, + "link": null + } + ], + "outputs": [ + { + "name": "image", + "type": "IMAGE", + "shape": 3, + "links": [ + 95 + ], + "slot_index": 0 + }, + { + "name": "segs", + "type": "SEGS", + "shape": 3, + "links": null + }, + { + "name": "basic_pipe", + "type": "BASIC_PIPE", + "shape": 3, + "links": [ + 94 + ], + "slot_index": 2 + }, + { + "name": "cropped", + "type": "IMAGE", + "shape": 6, + "links": null + }, + { + "name": "cropped_refined", + "type": "IMAGE", + "shape": 6, + "links": [], + "slot_index": 4 + }, + { + "name": "cropped_refined_alpha", + "type": "IMAGE", + "shape": 6, + "links": [], + "slot_index": 5 + }, + { + "name": "cnet_images", + "type": "IMAGE", + "shape": 6, + "links": [], + "slot_index": 6 + } + ], + "title": "DetailerDebug (SEGS/pipe) - person", + "properties": { + "Node name for S&R": "DetailerForEachDebugPipe" + }, + "widgets_values": [ + 64, + true, + 1024, + 522790177337686, + "fixed", + 20, + 8, + "dpmpp_3m_sde_gpu", + "karras", + 0.45, + 10, + true, + true, + "", + 0.2, + 1, + false, + 10, + false, + false + ] + }, + { + "id": 51, + "type": "DetailerForEachDebugPipe", + "pos": [ + 2510, + 730 + ], + "size": [ + 410, + 996 + ], + "flags": {}, + "order": 21, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 95, + "slot_index": 0 + }, + { + "name": "segs", + "type": "SEGS", + "link": 119 + }, + { + "name": "basic_pipe", + "type": "BASIC_PIPE", + "link": 94 + }, + { + "name": "detailer_hook", + "type": "DETAILER_HOOK", + "shape": 7, + "link": 125 + }, + { + "name": "refiner_basic_pipe_opt", + "type": "BASIC_PIPE", + "shape": 7, + "link": null + }, + { + "name": "scheduler_func_opt", + "type": "SCHEDULER_FUNC", + "shape": 7, + "link": null + } + ], + "outputs": [ + { + "name": "image", + "type": "IMAGE", + "shape": 3, + "links": [ + 96 + ], + "slot_index": 0 + }, + { + "name": "segs", + "type": "SEGS", + "shape": 3, + "links": null + }, + { + "name": "basic_pipe", + "type": "BASIC_PIPE", + "shape": 3, + "links": null + }, + { + "name": "cropped", + "type": "IMAGE", + "shape": 6, + "links": null + }, + { + "name": "cropped_refined", + "type": "IMAGE", + "shape": 6, + "links": [], + "slot_index": 4 + }, + { + "name": "cropped_refined_alpha", + "type": "IMAGE", + "shape": 6, + "links": [], + "slot_index": 5 + }, + { + "name": "cnet_images", + "type": "IMAGE", + "shape": 6, + "links": [], + "slot_index": 6 + } + ], + "title": "DetailerDebug (SEGS/pipe) - background", + "properties": { + "Node name for S&R": "DetailerForEachDebugPipe" + }, + "widgets_values": [ + 64, + true, + 1024, + 522790177337693, + "fixed", + 20, + 8, + "dpmpp_2m_sde_gpu", + "karras", + 0.4, + 10, + true, + true, + "[CONCAT] red double bun, metalic arm, zoey", + 0.2, + 1, + false, + 50, + false, + false + ] + }, + { + "id": 60, + "type": "Note", + "pos": [ + -1033, + 292 + ], + "size": [ + 638.3837890625, + 178.84756469726562 + ], + "flags": {}, + "order": 5, + "mode": 0, + "inputs": [], + "outputs": [], + "title": "1.Intro", + "properties": { + "text": "" + }, + "widgets_values": [ + "Using nodes like Make Tile SEGS for Detailer work will result in processing SEGS within a large number of Detailer nodes.\n\nPreviewDetailerHookProvider is connected to Detailers to monitor intermediate processes.\n" + ], + "color": "#222", + "bgcolor": "#000" + }, + { + "id": 62, + "type": "Note", + "pos": [ + 364, + -1967 + ], + "size": [ + 552.4130859375, + 204.45199584960938 + ], + "flags": {}, + "order": 6, + "mode": 0, + "inputs": [], + "outputs": [], + "title": "2. PreviewDetailerHookProvider", + "properties": { + "text": "" + }, + "widgets_values": [ + "To add PreviewDetailerHookProvider, simply connect it to the detailer_hook input of the Detailer node you want to monitor.\n\nThis node can also be used in the Detailer For AnimateDiff node.\n\nHowever, since this node provides a preview hook for pasting onto the original image, it cannot be used in SEGSDetailer where there is no pasting step.\n\n\n\nNow let's give it a try." + ], + "color": "#222", + "bgcolor": "#000" + }, + { + "id": 70, + "type": "Reroute", + "pos": [ + 2360, + 310 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 11, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "pos": [ + 37.5, + 0 + ], + "link": 121 + } + ], + "outputs": [ + { + "name": "", + "type": "DETAILER_HOOK", + "links": [ + 124, + 125 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": true + } + } + ], + "links": [ + [ + 8, + 2, + 0, + 9, + 0, + "IMAGE" + ], + [ + 10, + 9, + 0, + 6, + 1, + "IMAGE" + ], + [ + 28, + 9, + 0, + 20, + 0, + "*" + ], + [ + 34, + 2, + 0, + 22, + 1, + "IMAGE" + ], + [ + 35, + 24, + 0, + 22, + 0, + "BBOX_DETECTOR" + ], + [ + 59, + 31, + 0, + 28, + 1, + "IMAGE" + ], + [ + 60, + 31, + 0, + 10, + 0, + "IMAGE" + ], + [ + 61, + 20, + 0, + 31, + 0, + "*" + ], + [ + 62, + 32, + 0, + 22, + 2, + "SAM_MODEL" + ], + [ + 76, + 19, + 0, + 10, + 2, + "BASIC_PIPE" + ], + [ + 94, + 10, + 2, + 51, + 2, + "BASIC_PIPE" + ], + [ + 95, + 10, + 0, + 51, + 0, + "IMAGE" + ], + [ + 96, + 51, + 0, + 16, + 0, + "IMAGE" + ], + [ + 100, + 53, + 0, + 54, + 0, + "*" + ], + [ + 105, + 56, + 0, + 6, + 0, + "SEGS" + ], + [ + 106, + 56, + 0, + 52, + 0, + "*" + ], + [ + 107, + 20, + 0, + 57, + 0, + "IMAGE" + ], + [ + 109, + 57, + 0, + 28, + 0, + "SEGS" + ], + [ + 110, + 57, + 0, + 53, + 0, + "*" + ], + [ + 111, + 20, + 0, + 56, + 0, + "IMAGE" + ], + [ + 114, + 22, + 0, + 56, + 2, + "SEGS" + ], + [ + 115, + 22, + 0, + 57, + 1, + "SEGS" + ], + [ + 118, + 54, + 0, + 10, + 1, + "SEGS" + ], + [ + 119, + 52, + 0, + 51, + 1, + "SEGS" + ], + [ + 120, + 68, + 0, + 69, + 0, + "*" + ], + [ + 121, + 69, + 0, + 70, + 0, + "*" + ], + [ + 124, + 70, + 0, + 10, + 3, + "DETAILER_HOOK" + ], + [ + 125, + 70, + 0, + 51, + 3, + "DETAILER_HOOK" + ] + ], + "groups": [], + "config": {}, + "extra": { + "groupNodes": { + "MAKE_BASIC_PIPE": { + "nodes": [ + { + "type": "CheckpointLoaderSimple", + "pos": [ + -80, + 1100 + ], + "size": { + "0": 315, + "1": 98 + }, + "flags": {}, + "order": 0, + "mode": 0, + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "links": [], + "shape": 3, + "slot_index": 0, + "localized_name": "MODEL" + }, + { + "name": "CLIP", + "type": "CLIP", + "links": [], + "shape": 3, + "slot_index": 1, + "localized_name": "CLIP" + }, + { + "name": "VAE", + "type": "VAE", + "links": [], + "shape": 3, + "slot_index": 2, + "localized_name": "VAE" + } + ], + "properties": { + "Node name for S&R": "CheckpointLoaderSimple" + }, + "widgets_values": [ + "SD1.5/majicmixRealistic_v7.safetensors" + ], + "index": 0, + "inputs": [] + }, + { + "type": "CLIPTextEncode", + "pos": [ + 455, + 1026 + ], + "size": { + "0": 210, + "1": 104.50106048583984 + }, + "flags": {}, + "order": 2, + "mode": 0, + "inputs": [ + { + "name": "clip", + "type": "CLIP", + "link": null, + "localized_name": "clip" + } + ], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [], + "shape": 3, + "slot_index": 0, + "localized_name": "CONDITIONING" + } + ], + "properties": { + "Node name for S&R": "CLIPTextEncode" + }, + "widgets_values": [ + "photograph, 4k, hdr, cropped, 1girl sit, blur hair, pink bag" + ], + "index": 1 + }, + { + "type": "CLIPTextEncode", + "pos": [ + 456, + 1239 + ], + "size": { + "0": 210, + "1": 104.50106048583984 + }, + "flags": {}, + "order": 3, + "mode": 0, + "inputs": [ + { + "name": "clip", + "type": "CLIP", + "link": null, + "slot_index": 0, + "localized_name": "clip" + } + ], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [], + "shape": 3, + "localized_name": "CONDITIONING" + } + ], + "properties": { + "Node name for S&R": "CLIPTextEncode" + }, + "widgets_values": [ + "deformed, blurry\n" + ], + "index": 2 + }, + { + "type": "ToBasicPipe", + "pos": [ + 800, + 1100 + ], + "size": { + "0": 241.79998779296875, + "1": 106 + }, + "flags": {}, + "order": 5, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": null, + "localized_name": "model" + }, + { + "name": "clip", + "type": "CLIP", + "link": null, + "slot_index": 1, + "localized_name": "clip" + }, + { + "name": "vae", + "type": "VAE", + "link": null, + "localized_name": "vae" + }, + { + "name": "positive", + "type": "CONDITIONING", + "link": null, + "localized_name": "positive" + }, + { + "name": "negative", + "type": "CONDITIONING", + "link": null, + "slot_index": 4, + "localized_name": "negative" + } + ], + "outputs": [ + { + "name": "basic_pipe", + "type": "BASIC_PIPE", + "links": [], + "shape": 3, + "slot_index": 0, + "localized_name": "basic_pipe" + } + ], + "properties": { + "Node name for S&R": "ToBasicPipe" + }, + "index": 3 + } + ], + "links": [ + [ + 0, + 1, + 1, + 0, + 11, + "CLIP" + ], + [ + 0, + 1, + 2, + 0, + 11, + "CLIP" + ], + [ + 0, + 0, + 3, + 0, + 11, + "MODEL" + ], + [ + 0, + 1, + 3, + 1, + 11, + "CLIP" + ], + [ + 0, + 2, + 3, + 2, + 11, + "VAE" + ], + [ + 1, + 0, + 3, + 3, + 13, + "CONDITIONING" + ], + [ + 2, + 0, + 3, + 4, + 14, + "CONDITIONING" + ] + ], + "external": [ + [ + 3, + 0, + "BASIC_PIPE" + ] + ] + } + }, + "controller_panel": { + "controllers": {}, + "hidden": true, + "highlight": true, + "version": 2, + "default_order": [] + }, + "ds": { + "scale": 0.620921323059155, + "offset": [ + 432.38467086326943, + 608.3387630215522 + ] + }, + "node_versions": { + "comfyui-impact-pack": "1ae7cae2df8cca06027edfa3a24512671239d6c4", + "comfyui-impact-subpack": "74db20c95eca152a6d686c914edc0ef4e4762cb8", + "comfy-core": "0.3.14" + }, + "ue_links": [], + "VHS_latentpreview": false, + "VHS_latentpreviewrate": 0, + "VHS_MetadataImage": true, + "VHS_KeepIntermediate": true + }, + "version": 0.4 +} \ No newline at end of file diff --git a/comfyui-impact-pack/example_workflows/5-prompt-per-tile.json b/comfyui-impact-pack/example_workflows/5-prompt-per-tile.json new file mode 100644 index 0000000000000000000000000000000000000000..15a6b8d003579ea1b815ac835f9cddefd5b39ee3 --- /dev/null +++ b/comfyui-impact-pack/example_workflows/5-prompt-per-tile.json @@ -0,0 +1,1290 @@ +{ + "last_node_id": 30, + "last_link_id": 50, + "nodes": [ + { + "id": 3, + "type": "KSampler", + "pos": [ + -160, + -150 + ], + "size": [ + 315, + 474 + ], + "flags": {}, + "order": 4, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 1 + }, + { + "name": "positive", + "type": "CONDITIONING", + "link": 4 + }, + { + "name": "negative", + "type": "CONDITIONING", + "link": 6 + }, + { + "name": "latent_image", + "type": "LATENT", + "link": 2 + } + ], + "outputs": [ + { + "name": "LATENT", + "type": "LATENT", + "links": [ + 7 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "KSampler" + }, + "widgets_values": [ + 2, + "fixed", + 20, + 7, + "dpmpp_2m", + "karras", + 1 + ], + "color": "#223", + "bgcolor": "#335" + }, + { + "id": 4, + "type": "CheckpointLoaderSimple", + "pos": [ + -580, + -300 + ], + "size": [ + 315, + 98 + ], + "flags": {}, + "order": 0, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "links": [ + 1, + 25 + ], + "slot_index": 0 + }, + { + "name": "CLIP", + "type": "CLIP", + "links": [ + 3, + 5, + 26 + ], + "slot_index": 1 + }, + { + "name": "VAE", + "type": "VAE", + "links": [ + 8, + 27 + ], + "slot_index": 2 + } + ], + "properties": { + "Node name for S&R": "CheckpointLoaderSimple" + }, + "widgets_values": [ + "SD1.5/noosphere_v42.safetensors" + ], + "color": "#223", + "bgcolor": "#335" + }, + { + "id": 5, + "type": "EmptyLatentImage", + "pos": [ + -567, + 312 + ], + "size": [ + 315, + 106 + ], + "flags": {}, + "order": 1, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "LATENT", + "type": "LATENT", + "links": [ + 2 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "EmptyLatentImage" + }, + "widgets_values": [ + 512, + 768, + 1 + ], + "color": "#223", + "bgcolor": "#335" + }, + { + "id": 6, + "type": "CLIPTextEncode", + "pos": [ + -610, + -150 + ], + "size": [ + 422.84503173828125, + 164.31304931640625 + ], + "flags": {}, + "order": 2, + "mode": 0, + "inputs": [ + { + "name": "clip", + "type": "CLIP", + "link": 3 + } + ], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [ + 4, + 28 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "CLIPTextEncode" + }, + "widgets_values": [ + "photo of a blonde girl and a dark haired man with beard, front view, detailed faces, high details, realistic, nature background, high saturation" + ], + "color": "#232", + "bgcolor": "#353" + }, + { + "id": 7, + "type": "CLIPTextEncode", + "pos": [ + -611, + 66 + ], + "size": [ + 425.27801513671875, + 180.6060791015625 + ], + "flags": {}, + "order": 3, + "mode": 0, + "inputs": [ + { + "name": "clip", + "type": "CLIP", + "link": 5 + } + ], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [ + 6, + 29 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "CLIPTextEncode" + }, + "widgets_values": [ + "text, watermark, nsfw" + ], + "color": "#322", + "bgcolor": "#533" + }, + { + "id": 8, + "type": "VAEDecode", + "pos": [ + -115, + -271 + ], + "size": [ + 210, + 46 + ], + "flags": {}, + "order": 5, + "mode": 0, + "inputs": [ + { + "name": "samples", + "type": "LATENT", + "link": 7 + }, + { + "name": "vae", + "type": "VAE", + "link": 8 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 21, + 22, + 30 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "VAEDecode" + }, + "widgets_values": [], + "color": "#223", + "bgcolor": "#335" + }, + { + "id": 10, + "type": "ImpactMakeTileSEGS", + "pos": [ + 840, + -90 + ], + "size": [ + 282.6341552734375, + 218 + ], + "flags": {}, + "order": 10, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 31 + }, + { + "name": "filter_in_segs_opt", + "type": "SEGS", + "shape": 7, + "link": null + }, + { + "name": "filter_out_segs_opt", + "type": "SEGS", + "shape": 7, + "link": null + } + ], + "outputs": [ + { + "name": "SEGS", + "type": "SEGS", + "shape": 3, + "links": [ + 14, + 15 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "ImpactMakeTileSEGS" + }, + "widgets_values": [ + 704, + 1.1, + 4, + 0, + 0, + "Reuse fast" + ], + "color": "#2a363b", + "bgcolor": "#3f5159" + }, + { + "id": 11, + "type": "WD14Tagger|pysssss", + "pos": [ + 1901, + -282 + ], + "size": [ + 276.18115234375, + 470 + ], + "flags": { + "collapsed": false + }, + "order": 12, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 10 + } + ], + "outputs": [ + { + "name": "STRING", + "type": "STRING", + "shape": 6, + "links": [ + 39 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "WD14Tagger|pysssss" + }, + "widgets_values": [ + "wd-v1-4-moat-tagger-v2", + 0.35000000000000003, + 0.85, + true, + false, + "" + ], + "color": "#332922", + "bgcolor": "#593930" + }, + { + "id": 12, + "type": "DetailerForEach", + "pos": [ + 2881.51708984375, + -286.8627624511719 + ], + "size": [ + 310.9673767089844, + 790 + ], + "flags": {}, + "order": 17, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 32 + }, + { + "name": "segs", + "type": "SEGS", + "link": 12 + }, + { + "name": "model", + "type": "MODEL", + "link": 25 + }, + { + "name": "clip", + "type": "CLIP", + "link": 26 + }, + { + "name": "vae", + "type": "VAE", + "link": 27 + }, + { + "name": "positive", + "type": "CONDITIONING", + "link": 28 + }, + { + "name": "negative", + "type": "CONDITIONING", + "link": 29 + }, + { + "name": "detailer_hook", + "type": "DETAILER_HOOK", + "shape": 7, + "link": null + }, + { + "name": "wildcard", + "type": "STRING", + "widget": { + "name": "wildcard" + }, + "link": 49 + }, + { + "name": "scheduler_func_opt", + "type": "SCHEDULER_FUNC", + "shape": 7, + "link": null + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "shape": 3, + "links": [ + 17 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "DetailerForEach" + }, + "widgets_values": [ + 768, + true, + 1024, + 20, + "fixed", + 20, + 3.5, + "dpmpp_2m_sde_gpu", + "karras", + 0.5, + 16, + true, + true, + "", + 1, + false, + 16, + false, + false + ], + "color": "#2a363b", + "bgcolor": "#3f5159" + }, + { + "id": 13, + "type": "WD14Tagger|pysssss", + "pos": [ + 1388, + -240 + ], + "size": [ + 290, + 240 + ], + "flags": { + "collapsed": false + }, + "order": 7, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 22 + } + ], + "outputs": [ + { + "name": "STRING", + "type": "STRING", + "shape": 6, + "links": [ + 34 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "WD14Tagger|pysssss" + }, + "widgets_values": [ + "wd-v1-4-moat-tagger-v2", + 0.35000000000000003, + 0.85, + true, + false, + "" + ], + "color": "#332922", + "bgcolor": "#593930" + }, + { + "id": 14, + "type": "SEGSToImageList", + "pos": [ + 830, + 230 + ], + "size": [ + 276.6341552734375, + 46 + ], + "flags": {}, + "order": 11, + "mode": 0, + "inputs": [ + { + "name": "segs", + "type": "SEGS", + "link": 14 + }, + { + "name": "fallback_image_opt", + "type": "IMAGE", + "shape": 7, + "link": 33 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "shape": 6, + "links": [ + 10, + 18 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "SEGSToImageList" + }, + "widgets_values": [], + "color": "#2a363b", + "bgcolor": "#3f5159" + }, + { + "id": 15, + "type": "ImpactSEGSLabelAssign", + "pos": [ + 2409.8916015625, + 36.29731369018555 + ], + "size": [ + 283.6341552734375, + 103.9290771484375 + ], + "flags": {}, + "order": 16, + "mode": 0, + "inputs": [ + { + "name": "segs", + "type": "SEGS", + "link": 15 + }, + { + "name": "labels", + "type": "STRING", + "widget": { + "name": "labels" + }, + "link": 50 + } + ], + "outputs": [ + { + "name": "SEGS", + "type": "SEGS", + "shape": 3, + "links": [ + 12 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "ImpactSEGSLabelAssign" + }, + "widgets_values": [ + "" + ], + "color": "#2a363b", + "bgcolor": "#3f5159" + }, + { + "id": 16, + "type": "PreviewImage", + "pos": [ + 3270, + -287 + ], + "size": [ + 842.0664672851562, + 1217.6240234375 + ], + "flags": {}, + "order": 18, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 17 + } + ], + "outputs": [], + "properties": { + "Node name for S&R": "PreviewImage" + }, + "widgets_values": [], + "color": "#2a363b", + "bgcolor": "#3f5159" + }, + { + "id": 17, + "type": "PreviewImage", + "pos": [ + 788, + 339 + ], + "size": [ + 421.1688537597656, + 448.1822509765625 + ], + "flags": {}, + "order": 13, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 18 + } + ], + "outputs": [], + "title": "Preview Tiles", + "properties": { + "Node name for S&R": "PreviewImage" + }, + "widgets_values": [], + "color": "#2a363b", + "bgcolor": "#3f5159" + }, + { + "id": 19, + "type": "PreviewImage", + "pos": [ + 173, + -283 + ], + "size": [ + 475.25579833984375, + 668.4122924804688 + ], + "flags": {}, + "order": 6, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 21 + } + ], + "outputs": [], + "properties": { + "Node name for S&R": "PreviewImage" + }, + "widgets_values": [], + "color": "#223", + "bgcolor": "#335" + }, + { + "id": 21, + "type": "ImageScaleBy", + "pos": [ + 840, + -270 + ], + "size": [ + 315, + 82 + ], + "flags": {}, + "order": 8, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 30 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "shape": 3, + "links": [ + 31, + 32, + 33 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "ImageScaleBy" + }, + "widgets_values": [ + "bicubic", + 2.5 + ], + "color": "#233", + "bgcolor": "#355" + }, + { + "id": 25, + "type": "StringListToString", + "pos": [ + 1375, + 131 + ], + "size": [ + 315, + 82 + ], + "flags": {}, + "order": 9, + "mode": 0, + "inputs": [ + { + "name": "string_list", + "type": "STRING", + "widget": { + "name": "string_list" + }, + "link": 34 + } + ], + "outputs": [ + { + "name": "STRING", + "type": "STRING", + "shape": 3, + "links": [ + 47 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "StringListToString" + }, + "widgets_values": [ + "", + "" + ], + "color": "#332922", + "bgcolor": "#593930" + }, + { + "id": 26, + "type": "StringListToString", + "pos": [ + 1913, + 259 + ], + "size": [ + 268.8372497558594, + 58 + ], + "flags": {}, + "order": 14, + "mode": 0, + "inputs": [ + { + "name": "string_list", + "type": "STRING", + "widget": { + "name": "string_list" + }, + "link": 39 + } + ], + "outputs": [ + { + "name": "STRING", + "type": "STRING", + "shape": 3, + "links": [ + 48 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "StringListToString" + }, + "widgets_values": [ + "\\n", + "" + ], + "color": "#332922", + "bgcolor": "#593930" + }, + { + "id": 30, + "type": "WildcardPromptFromString", + "pos": [ + 2396.2451171875, + -266.2974548339844 + ], + "size": [ + 315, + 198 + ], + "flags": {}, + "order": 15, + "mode": 0, + "inputs": [ + { + "name": "string", + "type": "STRING", + "widget": { + "name": "string" + }, + "link": 48 + }, + { + "name": "restrict_to_tags", + "type": "STRING", + "widget": { + "name": "restrict_to_tags" + }, + "link": 47 + } + ], + "outputs": [ + { + "name": "wildcard", + "type": "STRING", + "shape": 3, + "links": [ + 49 + ], + "slot_index": 0 + }, + { + "name": "segs_labels", + "type": "STRING", + "shape": 3, + "links": [ + 50 + ], + "slot_index": 1 + } + ], + "properties": { + "Node name for S&R": "WildcardPromptFromString" + }, + "widgets_values": [ + "", + "\\n", + "", + ", realistic, high details, high saturation", + "", + "1girl, 1boy, 2girls, multiple girls, realistic" + ], + "color": "#2a363b", + "bgcolor": "#3f5159" + } + ], + "links": [ + [ + 1, + 4, + 0, + 3, + 0, + "MODEL" + ], + [ + 2, + 5, + 0, + 3, + 3, + "LATENT" + ], + [ + 3, + 4, + 1, + 6, + 0, + "CLIP" + ], + [ + 4, + 6, + 0, + 3, + 1, + "CONDITIONING" + ], + [ + 5, + 4, + 1, + 7, + 0, + "CLIP" + ], + [ + 6, + 7, + 0, + 3, + 2, + "CONDITIONING" + ], + [ + 7, + 3, + 0, + 8, + 0, + "LATENT" + ], + [ + 8, + 4, + 2, + 8, + 1, + "VAE" + ], + [ + 10, + 14, + 0, + 11, + 0, + "IMAGE" + ], + [ + 12, + 15, + 0, + 12, + 1, + "SEGS" + ], + [ + 14, + 10, + 0, + 14, + 0, + "SEGS" + ], + [ + 15, + 10, + 0, + 15, + 0, + "SEGS" + ], + [ + 17, + 12, + 0, + 16, + 0, + "IMAGE" + ], + [ + 18, + 14, + 0, + 17, + 0, + "IMAGE" + ], + [ + 21, + 8, + 0, + 19, + 0, + "IMAGE" + ], + [ + 22, + 8, + 0, + 13, + 0, + "IMAGE" + ], + [ + 25, + 4, + 0, + 12, + 2, + "MODEL" + ], + [ + 26, + 4, + 1, + 12, + 3, + "CLIP" + ], + [ + 27, + 4, + 2, + 12, + 4, + "VAE" + ], + [ + 28, + 6, + 0, + 12, + 5, + "CONDITIONING" + ], + [ + 29, + 7, + 0, + 12, + 6, + "CONDITIONING" + ], + [ + 30, + 8, + 0, + 21, + 0, + "IMAGE" + ], + [ + 31, + 21, + 0, + 10, + 0, + "IMAGE" + ], + [ + 32, + 21, + 0, + 12, + 0, + "IMAGE" + ], + [ + 33, + 21, + 0, + 14, + 1, + "IMAGE" + ], + [ + 34, + 13, + 0, + 25, + 0, + "STRING" + ], + [ + 39, + 11, + 0, + 26, + 0, + "STRING" + ], + [ + 47, + 25, + 0, + 30, + 1, + "STRING" + ], + [ + 48, + 26, + 0, + 30, + 0, + "STRING" + ], + [ + 49, + 30, + 0, + 12, + 8, + "STRING" + ], + [ + 50, + 30, + 1, + 15, + 1, + "STRING" + ] + ], + "groups": [ + { + "id": 1, + "title": "Base Image", + "bounding": [ + -620, + -374, + 1311, + 872 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + }, + { + "id": 2, + "title": "Upscale and Create Tiles", + "bounding": [ + 745, + -375, + 515, + 1202 + ], + "color": "#8AA", + "font_size": 24, + "flags": {} + }, + { + "id": 3, + "title": "Tag Base Image", + "bounding": [ + 1311, + -374, + 431, + 668 + ], + "color": "#b06634", + "font_size": 24, + "flags": {} + }, + { + "id": 4, + "title": "Tag Tiles", + "bounding": [ + 1815, + -378, + 460, + 750 + ], + "color": "#b06634", + "font_size": 24, + "flags": {} + }, + { + "id": 5, + "title": "Assign Prompts to Tiles", + "bounding": [ + 2367, + -381, + 380, + 615 + ], + "color": "#8AA", + "font_size": 24, + "flags": {} + }, + { + "id": 6, + "title": "Add Details", + "bounding": [ + 2834, + -382, + 1359, + 1377 + ], + "color": "#3f789e", + "font_size": 24, + "flags": {} + } + ], + "config": {}, + "extra": { + "ds": { + "scale": 1, + "offset": [ + 711, + 400 + ] + }, + "groupNodes": {}, + "controller_panel": { + "controllers": {}, + "hidden": true, + "highlight": true, + "version": 2, + "default_order": [] + }, + "node_versions": { + "comfy-core": "0.3.14", + "comfyui-impact-pack": "1ae7cae2df8cca06027edfa3a24512671239d6c4", + "comfyui-wd14-tagger": "1.0.0" + }, + "ue_links": [], + "VHS_latentpreview": false, + "VHS_latentpreviewrate": 0, + "VHS_MetadataImage": true, + "VHS_KeepIntermediate": true + }, + "version": 0.4 +} \ No newline at end of file diff --git a/comfyui-impact-pack/example_workflows/6-DetailerWildcard.json b/comfyui-impact-pack/example_workflows/6-DetailerWildcard.json new file mode 100644 index 0000000000000000000000000000000000000000..4dd684a664dacd76cc79d7c471b69c276648fbfb --- /dev/null +++ b/comfyui-impact-pack/example_workflows/6-DetailerWildcard.json @@ -0,0 +1,1084 @@ +{ + "last_node_id": 57, + "last_link_id": 116, + "nodes": [ + { + "id": 38, + "type": "SAMLoader", + "pos": [ + 870, + 1120 + ], + "size": [ + 315, + 82 + ], + "flags": {}, + "order": 0, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "SAM_MODEL", + "type": "SAM_MODEL", + "links": [ + 81 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "SAMLoader" + }, + "widgets_values": [ + "sam_vit_b_01ec64.pth", + "AUTO" + ], + "color": "#223", + "bgcolor": "#335" + }, + { + "id": 50, + "type": "Reroute", + "pos": [ + 1100, + 30 + ], + "size": [ + 75, + 26 + ], + "flags": {}, + "order": 6, + "mode": 0, + "inputs": [ + { + "name": "", + "type": "*", + "link": 110 + } + ], + "outputs": [ + { + "name": "", + "type": "VAE", + "links": [ + 109 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": false, + "horizontal": false + } + }, + { + "id": 48, + "type": "FromBasicPipe", + "pos": [ + 910, + 300 + ], + "size": [ + 221.4781951904297, + 106 + ], + "flags": {}, + "order": 5, + "mode": 0, + "inputs": [ + { + "name": "basic_pipe", + "type": "BASIC_PIPE", + "link": 116 + } + ], + "outputs": [ + { + "name": "model", + "type": "MODEL", + "links": [ + 99 + ], + "slot_index": 0 + }, + { + "name": "clip", + "type": "CLIP", + "links": null + }, + { + "name": "vae", + "type": "VAE", + "links": [ + 110 + ], + "slot_index": 2 + }, + { + "name": "positive", + "type": "CONDITIONING", + "links": [ + 100 + ], + "slot_index": 3 + }, + { + "name": "negative", + "type": "CONDITIONING", + "links": [ + 101 + ], + "slot_index": 4 + } + ], + "properties": { + "Node name for S&R": "FromBasicPipe" + }, + "widgets_values": [] + }, + { + "id": 5, + "type": "EmptyLatentImage", + "pos": [ + 490, + 190 + ], + "size": [ + 315, + 106 + ], + "flags": {}, + "order": 1, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "LATENT", + "type": "LATENT", + "links": [ + 2 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "EmptyLatentImage" + }, + "widgets_values": [ + 768, + 512, + 1 + ] + }, + { + "id": 42, + "type": "PreviewImage", + "pos": [ + 2140, + 130 + ], + "size": [ + 793.8984985351562, + 562.4002685546875 + ], + "flags": {}, + "order": 11, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 107 + } + ], + "outputs": [], + "title": "Refined", + "properties": { + "Node name for S&R": "PreviewImage" + }, + "widgets_values": [], + "color": "#223", + "bgcolor": "#335" + }, + { + "id": 52, + "type": "PreviewImage", + "pos": [ + 2140, + 770 + ], + "size": [ + 800, + 580 + ], + "flags": {}, + "order": 12, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 113 + } + ], + "outputs": [], + "title": "Original", + "properties": { + "Node name for S&R": "PreviewImage" + }, + "widgets_values": [], + "color": "#432", + "bgcolor": "#653" + }, + { + "id": 44, + "type": "BasicPipeToDetailerPipe", + "pos": [ + 1230, + 950 + ], + "size": [ + 380, + 240 + ], + "flags": {}, + "order": 4, + "mode": 0, + "inputs": [ + { + "name": "basic_pipe", + "type": "BASIC_PIPE", + "link": 115, + "slot_index": 0 + }, + { + "name": "bbox_detector", + "type": "BBOX_DETECTOR", + "link": 114 + }, + { + "name": "sam_model_opt", + "type": "SAM_MODEL", + "shape": 7, + "link": 81 + }, + { + "name": "segm_detector_opt", + "type": "SEGM_DETECTOR", + "shape": 7, + "link": null + }, + { + "name": "detailer_hook", + "type": "DETAILER_HOOK", + "shape": 7, + "link": null + } + ], + "outputs": [ + { + "name": "detailer_pipe", + "type": "DETAILER_PIPE", + "links": [ + 105 + ], + "slot_index": 0 + } + ], + "title": "BasicPipe -> DetailerPipe (NEW!!)", + "properties": { + "Node name for S&R": "BasicPipeToDetailerPipe" + }, + "widgets_values": [ + "{blue eyes, (angry:1.2)|{green eyes, mouth open|red eyes}| smile}", + "Select the LoRA to add to the text", + "Select the Wildcard to add to the text" + ], + "color": "#223", + "bgcolor": "#335" + }, + { + "id": 51, + "type": "Reroute", + "pos": [ + 2380, + 30 + ], + "size": [ + 82, + 26 + ], + "flags": {}, + "order": 10, + "mode": 2, + "inputs": [ + { + "name": "", + "type": "*", + "link": 111 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 113 + ], + "slot_index": 0 + } + ], + "properties": { + "showOutputText": true, + "horizontal": false + } + }, + { + "id": 8, + "type": "VAEDecode", + "pos": [ + 1430, + 60 + ], + "size": [ + 140, + 46 + ], + "flags": { + "collapsed": true + }, + "order": 8, + "mode": 0, + "inputs": [ + { + "name": "samples", + "type": "LATENT", + "link": 7 + }, + { + "name": "vae", + "type": "VAE", + "link": 109 + } + ], + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 106, + 111 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "VAEDecode" + }, + "widgets_values": [], + "color": "#432", + "bgcolor": "#653" + }, + { + "id": 3, + "type": "KSampler", + "pos": [ + 1209, + 126 + ], + "size": [ + 400, + 650 + ], + "flags": {}, + "order": 7, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": 99 + }, + { + "name": "positive", + "type": "CONDITIONING", + "link": 100 + }, + { + "name": "negative", + "type": "CONDITIONING", + "link": 101 + }, + { + "name": "latent_image", + "type": "LATENT", + "link": 2 + } + ], + "outputs": [ + { + "name": "LATENT", + "type": "LATENT", + "links": [ + 7 + ], + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "KSampler" + }, + "widgets_values": [ + 497844439625000, + "fixed", + 20, + 8, + "euler", + "normal", + 1 + ], + "color": "#432", + "bgcolor": "#653" + }, + { + "id": 56, + "type": "UltralyticsDetectorProvider", + "pos": [ + 870, + 970 + ], + "size": [ + 315, + 78 + ], + "flags": {}, + "order": 2, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "BBOX_DETECTOR", + "type": "BBOX_DETECTOR", + "shape": 3, + "links": [ + 114 + ], + "slot_index": 0 + }, + { + "name": "SEGM_DETECTOR", + "type": "SEGM_DETECTOR", + "shape": 3, + "links": null + } + ], + "properties": { + "Node name for S&R": "UltralyticsDetectorProvider" + }, + "widgets_values": [ + "bbox/face_yolov8m.pt" + ], + "color": "#223", + "bgcolor": "#335" + }, + { + "id": 57, + "type": "workflow>MAKE_BASIC_PIPE", + "pos": [ + 50, + 470 + ], + "size": [ + 410, + 360 + ], + "flags": {}, + "order": 3, + "mode": 0, + "inputs": [], + "outputs": [ + { + "name": "VAE", + "type": "VAE", + "shape": 3, + "links": null + }, + { + "name": "basic_pipe", + "type": "BASIC_PIPE", + "shape": 3, + "links": [ + 115, + 116 + ] + } + ], + "properties": { + "Node name for S&R": "workflow/MAKE_BASIC_PIPE" + }, + "widgets_values": [ + "vae-ft-mse-840000-ema-pruned.safetensors", + "SD1.5/V07_v07.safetensors", + "RAW photo, delicate, best quality, colorful, 2girls, 8k uhd, film grain, soft lighting, dslr, (Fujifilm XT3), (photorealistic:1.4), (detailed skin), soft lips, (very detailed long ponytail), aged down, studio lighting, from top, colorful sports wear, happy face, spread lips, (walking), (central park, cloud, sunshine), small breast", + "(low quality:1.4), (worst quality:1.4), bad anatomy, (nsfw:1.2), muscle, from back, from front, monochrome, (bikini:1.2)" + ], + "color": "#222", + "bgcolor": "#000" + }, + { + "id": 49, + "type": "FaceDetailerPipe", + "pos": [ + 1630, + 130 + ], + "size": [ + 480, + 1220 + ], + "flags": {}, + "order": 9, + "mode": 0, + "inputs": [ + { + "name": "image", + "type": "IMAGE", + "link": 106 + }, + { + "name": "detailer_pipe", + "type": "DETAILER_PIPE", + "link": 105 + }, + { + "name": "scheduler_func_opt", + "type": "SCHEDULER_FUNC", + "shape": 7, + "link": null + } + ], + "outputs": [ + { + "name": "image", + "type": "IMAGE", + "shape": 3, + "links": [ + 107 + ], + "slot_index": 0 + }, + { + "name": "cropped_refined", + "type": "IMAGE", + "shape": 6, + "links": null + }, + { + "name": "cropped_enhanced_alpha", + "type": "IMAGE", + "shape": 6, + "links": null + }, + { + "name": "mask", + "type": "MASK", + "shape": 3, + "links": null + }, + { + "name": "detailer_pipe", + "type": "DETAILER_PIPE", + "shape": 3, + "links": null + }, + { + "name": "cnet_images", + "type": "IMAGE", + "shape": 6, + "links": null + } + ], + "properties": { + "Node name for S&R": "FaceDetailerPipe" + }, + "widgets_values": [ + 256, + true, + 768, + 307405256705890, + "fixed", + 20, + 8, + "euler", + "normal", + 0.5, + 5, + true, + false, + 0.5, + 10, + 3, + "center-1", + 0, + 0.93, + 0, + 0.7, + "False", + 10, + 0.2, + 1, + false, + 0, + false, + false + ], + "color": "#223", + "bgcolor": "#335" + } + ], + "links": [ + [ + 2, + 5, + 0, + 3, + 3, + "LATENT" + ], + [ + 7, + 3, + 0, + 8, + 0, + "LATENT" + ], + [ + 81, + 38, + 0, + 44, + 2, + "SAM_MODEL" + ], + [ + 99, + 48, + 0, + 3, + 0, + "MODEL" + ], + [ + 100, + 48, + 3, + 3, + 1, + "CONDITIONING" + ], + [ + 101, + 48, + 4, + 3, + 2, + "CONDITIONING" + ], + [ + 105, + 44, + 0, + 49, + 1, + "DETAILER_PIPE" + ], + [ + 106, + 8, + 0, + 49, + 0, + "IMAGE" + ], + [ + 107, + 49, + 0, + 42, + 0, + "IMAGE" + ], + [ + 109, + 50, + 0, + 8, + 1, + "VAE" + ], + [ + 110, + 48, + 2, + 50, + 0, + "*" + ], + [ + 111, + 8, + 0, + 51, + 0, + "*" + ], + [ + 113, + 51, + 0, + 52, + 0, + "IMAGE" + ], + [ + 114, + 56, + 0, + 44, + 1, + "BBOX_DETECTOR" + ], + [ + 115, + 57, + 1, + 44, + 0, + "BASIC_PIPE" + ], + [ + 116, + 57, + 1, + 48, + 0, + "BASIC_PIPE" + ] + ], + "groups": [], + "config": {}, + "extra": { + "groupNodes": { + "MAKE_BASIC_PIPE": { + "nodes": [ + { + "type": "VAELoader", + "pos": [ + -200, + 600 + ], + "size": { + "0": 315, + "1": 58 + }, + "flags": {}, + "order": 1, + "mode": 0, + "outputs": [ + { + "name": "VAE", + "type": "VAE", + "links": [], + "slot_index": 0, + "localized_name": "VAE" + } + ], + "properties": { + "Node name for S&R": "VAELoader" + }, + "widgets_values": [ + "vae-ft-mse-840000-ema-pruned.safetensors" + ], + "index": 0, + "inputs": [] + }, + { + "type": "CheckpointLoaderSimple", + "pos": [ + -660, + 680 + ], + "size": { + "0": 315, + "1": 98 + }, + "flags": {}, + "order": 6, + "mode": 0, + "outputs": [ + { + "name": "MODEL", + "type": "MODEL", + "links": [], + "slot_index": 0, + "localized_name": "MODEL" + }, + { + "name": "CLIP", + "type": "CLIP", + "links": [], + "slot_index": 1, + "localized_name": "CLIP" + }, + { + "name": "VAE", + "type": "VAE", + "links": [], + "slot_index": 2, + "localized_name": "VAE" + } + ], + "properties": { + "Node name for S&R": "CheckpointLoaderSimple" + }, + "widgets_values": [ + "SD1.5/V07_v07.safetensors" + ], + "index": 1, + "inputs": [] + }, + { + "type": "CLIPTextEncode", + "pos": [ + -260, + 750 + ], + "size": { + "0": 411.9563903808594, + "1": 162.07196044921875 + }, + "flags": {}, + "order": 7, + "mode": 0, + "inputs": [ + { + "name": "clip", + "type": "CLIP", + "link": null, + "localized_name": "clip" + } + ], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [], + "slot_index": 0, + "localized_name": "CONDITIONING" + } + ], + "title": "Positive", + "properties": { + "Node name for S&R": "CLIPTextEncode" + }, + "widgets_values": [ + "RAW photo, delicate, best quality, colorful, 2girls, 8k uhd, film grain, soft lighting, dslr, (Fujifilm XT3), (photorealistic:1.4), (detailed skin), soft lips, (very detailed long ponytail), aged down, studio lighting, from top, colorful sports wear, happy face, spread lips, (walking), (central park, cloud, sunshine), small breast" + ], + "index": 2 + }, + { + "type": "CLIPTextEncode", + "pos": [ + -260, + 960 + ], + "size": { + "0": 410, + "1": 130 + }, + "flags": {}, + "order": 8, + "mode": 0, + "inputs": [ + { + "name": "clip", + "type": "CLIP", + "link": null, + "localized_name": "clip" + } + ], + "outputs": [ + { + "name": "CONDITIONING", + "type": "CONDITIONING", + "links": [], + "slot_index": 0, + "localized_name": "CONDITIONING" + } + ], + "title": "Negative", + "properties": { + "Node name for S&R": "CLIPTextEncode" + }, + "widgets_values": [ + "(low quality:1.4), (worst quality:1.4), bad anatomy, (nsfw:1.2), muscle, from back, from front, monochrome, (bikini:1.2)" + ], + "index": 3 + }, + { + "type": "ToBasicPipe", + "pos": [ + 210, + 680 + ], + "size": { + "0": 241.79998779296875, + "1": 106 + }, + "flags": {}, + "order": 9, + "mode": 0, + "inputs": [ + { + "name": "model", + "type": "MODEL", + "link": null, + "localized_name": "model" + }, + { + "name": "clip", + "type": "CLIP", + "link": null, + "localized_name": "clip" + }, + { + "name": "vae", + "type": "VAE", + "link": null, + "localized_name": "vae" + }, + { + "name": "positive", + "type": "CONDITIONING", + "link": null, + "localized_name": "positive" + }, + { + "name": "negative", + "type": "CONDITIONING", + "link": null, + "localized_name": "negative" + } + ], + "outputs": [ + { + "name": "basic_pipe", + "type": "BASIC_PIPE", + "links": [], + "slot_index": 0, + "localized_name": "basic_pipe" + } + ], + "properties": { + "Node name for S&R": "ToBasicPipe" + }, + "index": 4 + } + ], + "links": [ + [ + 1, + 1, + 2, + 0, + 4, + "CLIP" + ], + [ + 1, + 1, + 3, + 0, + 4, + "CLIP" + ], + [ + 1, + 0, + 4, + 0, + 4, + "MODEL" + ], + [ + 1, + 1, + 4, + 1, + 4, + "CLIP" + ], + [ + 0, + 0, + 4, + 2, + 14, + "VAE" + ], + [ + 2, + 0, + 4, + 3, + 6, + "CONDITIONING" + ], + [ + 3, + 0, + 4, + 4, + 7, + "CONDITIONING" + ] + ], + "external": [ + [ + 4, + 0, + "BASIC_PIPE" + ] + ] + } + }, + "controller_panel": { + "controllers": {}, + "hidden": true, + "highlight": true, + "version": 2, + "default_order": [] + }, + "ds": { + "scale": 0.7513148009015777, + "offset": { + "0": 149.68603515625, + "1": 245.33897399902344 + } + }, + "node_versions": { + "comfyui-impact-pack": "1ae7cae2df8cca06027edfa3a24512671239d6c4", + "comfy-core": "0.3.14", + "comfyui-impact-subpack": "74db20c95eca152a6d686c914edc0ef4e4762cb8" + }, + "ue_links": [], + "VHS_latentpreview": false, + "VHS_latentpreviewrate": 0, + "VHS_MetadataImage": true, + "VHS_KeepIntermediate": true + }, + "version": 0.4 +} \ No newline at end of file diff --git a/comfyui-impact-pack/impact-pack.ini b/comfyui-impact-pack/impact-pack.ini new file mode 100644 index 0000000000000000000000000000000000000000..429b923867a305873e04658527cd4601f7a24b75 --- /dev/null +++ b/comfyui-impact-pack/impact-pack.ini @@ -0,0 +1,7 @@ +[default] +sam_editor_cpu = False +sam_editor_model = sam_vit_b_01ec64.pth +custom_wildcards = D:\ComfyUI\custom_nodes\comfyui-impact-pack\modules\impact\..\..\custom_wildcards +disable_gpu_opencv = True +wildcard_cache_limit_mb = 50.0 + diff --git a/comfyui-impact-pack/install.py b/comfyui-impact-pack/install.py new file mode 100644 index 0000000000000000000000000000000000000000..592c2c86a290b6806f2a2f208baaeb7ae689165a --- /dev/null +++ b/comfyui-impact-pack/install.py @@ -0,0 +1,116 @@ +import os +import shutil +import sys +import subprocess +import threading +import locale +import traceback + + +if sys.argv[0] == 'install.py': + sys.path.append('.') # for portable version + + +impact_path = os.path.join(os.path.dirname(__file__), "modules") + + +comfy_path = os.environ.get('COMFYUI_PATH') +if comfy_path is None: + print(f"\nWARN: The `COMFYUI_PATH` environment variable is not set. Assuming `{os.path.dirname(__file__)}/../../` as the ComfyUI path.", file=sys.stderr) + comfy_path = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..')) + +model_path = os.environ.get('COMFYUI_MODEL_PATH') +if model_path is None: + try: + import folder_paths + model_path = folder_paths.models_dir + except: + pass + + if model_path is None: + model_path = os.path.abspath(os.path.join(comfy_path, 'models')) + print(f"\nWARN: The `COMFYUI_MODEL_PATH` environment variable is not set. Assuming `{model_path}` as the ComfyUI path.", file=sys.stderr) + + +sys.path.append(impact_path) +sys.path.append(comfy_path) + + +# --- +def handle_stream(stream, is_stdout): + stream.reconfigure(encoding=locale.getpreferredencoding(), errors='replace') + + for msg in stream: + if is_stdout: + print(msg, end="", file=sys.stdout) + else: + print(msg, end="", file=sys.stderr) + + +def process_wrap(cmd_str, cwd=None, handler=None, env=None): + print(f"[Impact Pack] EXECUTE: {cmd_str} in '{cwd}'") + process = subprocess.Popen(cmd_str, cwd=cwd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, env=env, text=True, bufsize=1) + + if handler is None: + handler = handle_stream + + stdout_thread = threading.Thread(target=handler, args=(process.stdout, True)) + stderr_thread = threading.Thread(target=handler, args=(process.stderr, False)) + + stdout_thread.start() + stderr_thread.start() + + stdout_thread.join() + stderr_thread.join() + + return process.wait() +# --- + + +try: + from torchvision.datasets.utils import download_url + import impact.config + + print("### ComfyUI-Impact-Pack: Check dependencies") + def install(): + new_env = os.environ.copy() + new_env["COMFYUI_PATH"] = comfy_path + new_env["COMFYUI_MODEL_PATH"] = model_path + + # Download model + print("### ComfyUI-Impact-Pack: Check basic models") + sam_path = os.path.join(model_path, "sams") + onnx_path = os.path.join(model_path, "onnx") + + if not os.path.exists(os.path.join(os.path.dirname(__file__), '..', 'skip_download_model')): + try: + if not os.path.exists(os.path.join(sam_path, "sam_vit_b_01ec64.pth")): + download_url("https://dl.fbaipublicfiles.com/segment_anything/sam_vit_b_01ec64.pth", sam_path) + except: + print("[Impact Pack] Failed to auto-download model files. Please download them manually.") + + if not os.path.exists(onnx_path): + print(f"### ComfyUI-Impact-Pack: onnx model directory created ({onnx_path})") + os.mkdir(onnx_path) + + impact.config.write_config() + + # Remove legacy subpack + try: + subpack_path = os.path.join(os.path.dirname(__file__), 'impact_subpack') + if os.path.exists(subpack_path): + shutil.rmtree(subpack_path) + print(f"Legacy subpack is detected. '{subpack_path}' is removed.") + + subpack_path = os.path.join(os.path.dirname(__file__), 'subpack') + if os.path.exists(subpack_path): + shutil.rmtree(subpack_path) + print(f"Legacy subpack is detected. '{subpack_path}' is removed.") + except: + print(f"ERROT: Failed to delete legacy subpack '{subpack_path}'\nPlease delete the folder after terminate ComfyUI.") + + install() + +except Exception: + print("[ERROR] ComfyUI-Impact-Pack: Dependency installation has failed. Please install manually.") + traceback.print_exc() diff --git a/comfyui-impact-pack/js/common.js b/comfyui-impact-pack/js/common.js new file mode 100644 index 0000000000000000000000000000000000000000..f2244e3ff62fa0596dadfb1cf3c7a171cc2dbe69 --- /dev/null +++ b/comfyui-impact-pack/js/common.js @@ -0,0 +1,281 @@ +import { api } from "../../scripts/api.js"; +import { app } from "../../scripts/app.js"; + +let original_show = app.ui.dialog.show; + +export function customAlert(message) { + try { + app.extensionManager.toast.addAlert(message); + } + catch { + alert(message); + } +} + +export function isBeforeFrontendVersion(compareVersion) { + try { + const frontendVersion = window['__COMFYUI_FRONTEND_VERSION__']; + if (typeof frontendVersion !== 'string') { + return false; + } + + function parseVersion(versionString) { + const parts = versionString.split('.').map(Number); + return parts.length === 3 && parts.every(part => !isNaN(part)) ? parts : null; + } + + const currentVersion = parseVersion(frontendVersion); + const comparisonVersion = parseVersion(compareVersion); + + if (!currentVersion || !comparisonVersion) { + return false; + } + + for (let i = 0; i < 3; i++) { + if (currentVersion[i] > comparisonVersion[i]) { + return false; + } else if (currentVersion[i] < comparisonVersion[i]) { + return true; + } + } + + return false; + } catch { + return true; + } +} + +function dialog_show_wrapper(html) { + if (typeof html === "string") { + if(html.includes("IMPACT-PACK-SIGNAL: STOP CONTROL BRIDGE")) { + return; + } + + this.textElement.innerHTML = html; + } else { + this.textElement.replaceChildren(html); + } + this.element.style.display = "flex"; +} + +app.ui.dialog.show = dialog_show_wrapper; + + +function nodeFeedbackHandler(event) { + let nodes = app.graph._nodes_by_id; + let node = nodes[event.detail.node_id]; + if(node) { + const w = node.widgets.find((w) => event.detail.widget_name === w.name); + if(w) { + w.value = event.detail.value; + } + } +} + +api.addEventListener("impact-node-feedback", nodeFeedbackHandler); + + +function setMuteState(event) { + let nodes = app.graph._nodes_by_id; + let node = nodes[event.detail.node_id]; + if(node) { + if(event.detail.is_active) + node.mode = 0; + else + node.mode = 2; + } +} + +api.addEventListener("impact-node-mute-state", setMuteState); + + +async function bridgeContinue(event) { + let nodes = app.graph._nodes_by_id; + let node = nodes[event.detail.node_id]; + if(node) { + const mutes = new Set(event.detail.mutes); + const actives = new Set(event.detail.actives); + const bypasses = new Set(event.detail.bypasses); + + for(let i in app.graph._nodes_by_id) { + let this_node = app.graph._nodes_by_id[i]; + if(mutes.has(i)) { + this_node.mode = 2; + } + else if(actives.has(i)) { + this_node.mode = 0; + } + else if(bypasses.has(i)) { + this_node.mode = 4; + } + } + + await app.queuePrompt(0, 1); + } +} + +api.addEventListener("impact-bridge-continue", bridgeContinue); + + +function addQueue(event) { + app.queuePrompt(0, 1); +} + +api.addEventListener("impact-add-queue", addQueue); + + +function refreshPreview(event) { + let node_id = event.detail.node_id; + let item = event.detail.item; + let img = new Image(); + img.src = `/view?filename=${item.filename}&subfolder=${item.subfolder}&type=${item.type}&no-cache=${Date.now()}`; + let node = app.graph._nodes_by_id[node_id]; + if(node) + node.imgs = [img]; +} + +api.addEventListener("impact-preview", refreshPreview); + + +// ============================================================================ +// MaskRectArea Shared Utilities +// ============================================================================ + +/** + * Reads a numeric value from a connected link by inspecting the origin node widget. + * More reliable than getInputData() in ComfyUI's frontend execution model. + * + * @param {LGraphNode} node - LiteGraph node instance + * @param {string} inputName - Name of the input to read + * @returns {number|null} The numeric value or null if not available + */ +export function readLinkedNumber(node, inputName) { + try { + if (!node || !node.graph || !Array.isArray(node.inputs)) { + return null; + } + const inp = node.inputs.find(i => i && i.name === inputName); + if (!inp || inp.link == null) { + return null; + } + + const link = node.graph.links && node.graph.links[inp.link]; + if (!link) { + return null; + } + + const originNode = node.graph.getNodeById + ? node.graph.getNodeById(link.origin_id) + : null; + if (!originNode || !Array.isArray(originNode.widgets) || originNode.widgets.length === 0) { + return null; + } + + const w = originNode.widgets.find(ww => ww && ww.name === "value") + || originNode.widgets[0]; + const v = w ? w.value : null; + + return (typeof v === "number") ? v : null; + } catch (e) { + return null; + } +} + +/** + * Generates a color based on percentage using HSL color space. + * + * @param {number} percent - Value between 0 and 1 + * @param {string} alpha - Hex alpha value (e.g., "ff", "80") + * @returns {string} Hex color string with alpha (e.g., "#ff8040ff") + */ +export function getDrawColor(percent, alpha) { + let h = 360 * percent; + let s = 50; + let l = 50; + l /= 100; + const a = s * Math.min(l, 1 - l) / 100; + const f = n => { + const k = (n + h / 30) % 12; + const color = l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1); + return Math.round(255 * color).toString(16).padStart(2, '0'); + }; + return `#${f(0)}${f(8)}${f(4)}${alpha}`; +} + +/** + * Computes and adjusts canvas size for preview widgets. + * + * @param {LGraphNode} node - LiteGraph node instance + * @param {[number, number]} size - [width, height] array + * @param {number} minHeight - Minimum canvas height (REQUIRED) + * @param {number} minWidth - Minimum canvas width (REQUIRED) + * @returns {void} + */ +export function computeCanvasSize(node, size, minHeight, minWidth) { + // Validate required parameters + if (typeof minHeight !== 'number' || typeof minWidth !== 'number') { + console.warn('[computeCanvasSize] minHeight and minWidth are required parameters'); + return; + } + + // Null safety check for widgets array + if (!node.widgets?.length || node.widgets[0].last_y == null) { + return; + } + + // LiteGraph global availability check + const NODE_WIDGET_HEIGHT = (typeof LiteGraph !== 'undefined' && LiteGraph.NODE_WIDGET_HEIGHT) + ? LiteGraph.NODE_WIDGET_HEIGHT + : 20; + + let y = node.widgets[0].last_y + 5; + let freeSpace = size[1] - y; + + // Compute the height of all non-customCanvas widgets + let widgetHeight = 0; + for (let i = 0; i < node.widgets.length; i++) { + const w = node.widgets[i]; + if (w.type !== "customCanvas") { + if (w.computeSize) { + widgetHeight += w.computeSize()[1] + 4; + } else { + widgetHeight += NODE_WIDGET_HEIGHT + 5; + } + } + } + + // Ensure there is enough vertical space + freeSpace -= widgetHeight; + + // Clamp minimum canvas height + if (freeSpace < minHeight) { + freeSpace = minHeight; + } + + // Allow both grow and shrink to fit content + const targetHeight = y + widgetHeight + freeSpace; + if (node.size[1] !== targetHeight) { + node.size[1] = targetHeight; + node.graph.setDirtyCanvas(true); + } + + // Ensure the node width meets the minimum width requirement + if (node.size[0] < minWidth) { + node.size[0] = minWidth; + node.graph.setDirtyCanvas(true); + } + + // Position each of the widgets + for (const w of node.widgets) { + w.y = y; + if (w.type === "customCanvas") { + y += freeSpace; + } else if (w.computeSize) { + y += w.computeSize()[1] + 4; + } else { + y += NODE_WIDGET_HEIGHT + 4; + } + } + + node.canvasHeight = freeSpace; +} diff --git a/comfyui-impact-pack/js/impact-image-util.js b/comfyui-impact-pack/js/impact-image-util.js new file mode 100644 index 0000000000000000000000000000000000000000..4985a9e5ca0bc19be6159449c87eceeee8ef2192 --- /dev/null +++ b/comfyui-impact-pack/js/impact-image-util.js @@ -0,0 +1,229 @@ +import { ComfyApp, app } from "../../scripts/app.js"; +import { api } from "../../scripts/api.js"; + +function load_image(str) { + let base64String = canvas.toDataURL('image/png'); + let img = new Image(); + img.src = base64String; +} + +function getFileItem(baseType, path) { + try { + let pathType = baseType; + + if (path.endsWith("[output]")) { + pathType = "output"; + path = path.slice(0, -9); + } else if (path.endsWith("[input]")) { + pathType = "input"; + path = path.slice(0, -8); + } else if (path.endsWith("[temp]")) { + pathType = "temp"; + path = path.slice(0, -7); + } + + const subfolder = path.substring(0, path.lastIndexOf('/')); + const filename = path.substring(path.lastIndexOf('/') + 1); + + return { + filename: filename, + subfolder: subfolder, + type: pathType + }; + } + catch(exception) { + return null; + } +} + +async function loadImageFromUrl(image, node_id, v, need_to_load) { + let item = getFileItem('temp', v); + + if(item) { + let params = `?node_id=${node_id}&filename=${item.filename}&type=${item.type}&subfolder=${item.subfolder}`; + + let res = await api.fetchApi('/impact/set/pb_id_image'+params, { cache: "no-store" }); + if(res.status == 200) { + let pb_id = await res.text(); + if(need_to_load) {; + image.src = api.apiURL(`/view?filename=${item.filename}&type=${item.type}&subfolder=${item.subfolder}`); + } + return pb_id; + } + else { + return `$${node_id}-0`; + } + } + else { + return `$${node_id}-0`; + } +} + +async function loadImageFromId(image, v) { + let res = await api.fetchApi('/impact/get/pb_id_image?id='+v, { cache: "no-store" }); + if(res.status == 200) { + let item = await res.json(); + image.src = api.apiURL(`/view?filename=${item.filename}&type=${item.type}&subfolder=${item.subfolder}`); + return true; + } + + return false; +} + +app.registerExtension({ + name: "Comfy.Impact.img", + + nodeCreated(node, app) { + if(node.comfyClass == "PreviewBridge" || node.comfyClass == "PreviewBridgeLatent") { + let w = node.widgets.find(obj => obj.name === 'image'); + node._imgs = [new Image()]; + node.imageIndex = 0; + + Object.defineProperty(w, 'value', { + async set(v) { + if(w._lock) + return; + + const stackTrace = new Error().stack; + if(stackTrace.includes('presetText.js')) + return; + + var image = new Image(); + if(v && v.constructor == String && v.startsWith('$')) { + // from node feedback + let need_to_load = node._imgs[0].src == ''; + if(await loadImageFromId(image, v, need_to_load)) { + w._value = v; + if(node._imgs[0].src == '') { + node._imgs = [image]; + } + } + else { + w._value = `$${node.id}-0`; + } + } + else { + // from clipspace + w._lock = true; + w._value = await loadImageFromUrl(image, node.id, v, false); + w._lock = false; + } + }, + get() { + if(w._value == undefined) { + w._value = `$${node.id}-0`; + } + return w._value; + } + }); + + Object.defineProperty(node, 'imgs', { + set(v) { + const stackTrace = new Error().stack; + if(v && v.length == 0) + return; + else if(stackTrace.includes('pasteFromClipspace')) { + let sp = new URLSearchParams(v[0].src.split("?")[1]); + let str = ""; + if(sp.get('subfolder')) { + str += sp.get('subfolder') + '/'; + } + str += `${sp.get("filename")} [${sp.get("type")}]`; + + w.value = str; + } + + node._imgs = v; + }, + get() { + return node._imgs; + } + }); + } + + if(node.comfyClass == "ImageReceiver") { + let path_widget = node.widgets.find(obj => obj.name === 'image'); + let w = node.widgets.find(obj => obj.name === 'image_data'); + let stw_widget = node.widgets.find(obj => obj.name === 'save_to_workflow'); + w._value = ""; + + Object.defineProperty(w, 'value', { + set(v) { + if(v != '[IMAGE DATA]') + w._value = v; + }, + get() { + const stackTrace = new Error().stack; + if(!stackTrace.includes('draw') && !stackTrace.includes('graphToPrompt') && stackTrace.includes('app.js')) { + return "[IMAGE DATA]"; + } + else { + if(stw_widget.value) + return w._value; + else + return ""; + } + } + }); + + let set_img_act = (v) => { + node._img = v; + var canvas = document.createElement('canvas'); + canvas.width = v[0].width; + canvas.height = v[0].height; + + var context = canvas.getContext('2d'); + context.drawImage(v[0], 0, 0, v[0].width, v[0].height); + + var base64Image = canvas.toDataURL('image/png'); + w.value = base64Image; + }; + + Object.defineProperty(node, 'imgs', { + set(v) { + if (v && !v[0].complete) { + let orig_onload = v[0].onload; + v[0].onload = function(v2) { + if(orig_onload) + orig_onload(); + set_img_act(v); + }; + } + else { + set_img_act(v); + } + }, + get() { + if(this._img == undefined && w.value != '') { + this._img = [new Image()]; + if(stw_widget.value && w.value != '[IMAGE DATA]') + this._img[0].src = w.value; + } + else if(this._img == undefined && path_widget.value) { + let image = new Image(); + image.src = path_widget.value; + + try { + let item = getFileItem('temp', path_widget.value); + let params = `?filename=${item.filename}&type=${item.type}&subfolder=${item.subfolder}`; + + let res = api.fetchApi('/view/validate'+params, { cache: "no-store" }).then(response => response); + if(res.status == 200) { + image.src = api.apiURL('/view'+params); + } + + this._img = [new Image()]; // placeholder + image.onload = function(v) { + set_img_act([image]); + }; + } + catch { + + } + } + return this._img; + } + }); + } + } +}) diff --git a/comfyui-impact-pack/js/impact-pack.js b/comfyui-impact-pack/js/impact-pack.js new file mode 100644 index 0000000000000000000000000000000000000000..4d7d1db4e15f869d915a58c0e802a16da52e7ace --- /dev/null +++ b/comfyui-impact-pack/js/impact-pack.js @@ -0,0 +1,988 @@ +import { ComfyApp, app } from "../../scripts/app.js"; +import { ComfyDialog, $el } from "../../scripts/ui.js"; +import { api } from "../../scripts/api.js"; +import { customAlert, isBeforeFrontendVersion } from "./common.js"; + +const is_legacy_front = () => isBeforeFrontendVersion('1.16.9'); + +if(is_legacy_front()) { + customAlert("An outdated version(<1.16.9) of the `comfyui-frontend-package` is installed. It is not compatible with the current version of the Impact Pack."); +} + +let wildcards_list = []; +let wildcard_status = { + on_demand_mode: false, + total_available: 0, + loaded_count: 0, + last_update: null +}; + +async function load_wildcards() { + let res = await api.fetchApi('/impact/wildcards/list'); + let data = await res.json(); + wildcards_list = data.data; +} + +async function load_wildcard_status() { + try { + let res = await api.fetchApi('/impact/wildcards/list/loaded'); + let data = await res.json(); + wildcard_status = { + on_demand_mode: data.on_demand_mode || false, + total_available: data.total_available || 0, + loaded_count: data.data ? data.data.length : 0, + last_update: new Date() + }; + } catch (error) { + console.error('Failed to load wildcard status:', error); + } +} + +export function get_wildcard_label() { + if (wildcard_status.on_demand_mode) { + return `Select Wildcard 🔵 On-Demand: ${wildcard_status.loaded_count} loaded`; + } else { + return `Select Wildcard 🟢 Full Cache`; + } +} + +export function is_wildcard_label(value) { + // Check if value is a label (not an actual wildcard selection) + return value === "Select the Wildcard to add to the text" || + value.startsWith("Select Wildcard 🔵 On-Demand:") || + value === "Select Wildcard 🟢 Full Cache"; +} + +Promise.all([load_wildcards(), load_wildcard_status()]); + +export function get_wildcards_list() { + return wildcards_list; +} + +export { load_wildcard_status }; + +// temporary implementation (copying from https://github.com/pythongosssss/ComfyUI-WD14-Tagger) +// I think this should be included into master!! +class ImpactProgressBadge { + constructor() { + if (!window.__progress_badge__) { + window.__progress_badge__ = Symbol("__impact_progress_badge__"); + } + this.symbol = window.__progress_badge__; + } + + getState(node) { + return node[this.symbol] || {}; + } + + setState(node, state) { + node[this.symbol] = state; + app.canvas.setDirty(true); + } + + addStatusHandler(nodeType) { + if (nodeType[this.symbol]?.statusTagHandler) { + return; + } + if (!nodeType[this.symbol]) { + nodeType[this.symbol] = {}; + } + nodeType[this.symbol] = { + statusTagHandler: true, + }; + + api.addEventListener("impact/update_status", ({ detail }) => { + let { node, progress, text } = detail; + const n = app.graph.getNodeById(+(node || app.runningNodeId)); + if (!n) return; + const state = this.getState(n); + state.status = Object.assign(state.status || {}, { progress: text ? progress : null, text: text || null }); + this.setState(n, state); + }); + + const self = this; + const onDrawForeground = nodeType.prototype.onDrawForeground; + nodeType.prototype.onDrawForeground = function (ctx) { + const r = onDrawForeground?.apply?.(this, arguments); + const state = self.getState(this); + if (!state?.status?.text) { + return r; + } + + const { fgColor, bgColor, text, progress, progressColor } = { ...state.status }; + + ctx.save(); + ctx.font = "12px sans-serif"; + const sz = ctx.measureText(text); + ctx.fillStyle = bgColor || "dodgerblue"; + ctx.beginPath(); + ctx.roundRect(0, -LiteGraph.NODE_TITLE_HEIGHT - 20, sz.width + 12, 20, 5); + ctx.fill(); + + if (progress) { + ctx.fillStyle = progressColor || "green"; + ctx.beginPath(); + ctx.roundRect(0, -LiteGraph.NODE_TITLE_HEIGHT - 20, (sz.width + 12) * progress, 20, 5); + ctx.fill(); + } + + ctx.fillStyle = fgColor || "#fff"; + ctx.fillText(text, 6, -LiteGraph.NODE_TITLE_HEIGHT - 6); + ctx.restore(); + return r; + }; + } +} + +const input_tracking = {}; +const input_dirty = {}; +const output_tracking = {}; + +function progressExecuteHandler(event) { + if(event.detail?.output?.aux){ + const id = event.detail.node; + if(input_tracking.hasOwnProperty(id)) { + if(input_tracking.hasOwnProperty(id) && input_tracking[id][0] != event.detail.output.aux[0]) { + input_dirty[id] = true; + } + else{ + + } + } + + input_tracking[id] = event.detail.output.aux; + } +} + +function imgSendHandler(event) { + if(event.detail.images.length > 0){ + let data = event.detail.images[0]; + let filename = `${data.filename} [${data.type}]`; + + let nodes = app.graph._nodes; + for(let i in nodes) { + if(nodes[i].type == 'ImageReceiver') { + let is_linked = false; + + if(nodes[i].widgets[1].type == 'converted-widget') { + for(let j in nodes[i].inputs) { + let input = nodes[i].inputs[j]; + if(input.name === 'link_id') { + if(input.link) { + let src_node = app.graph._nodes_by_id[app.graph.links[input.link].origin_id]; + if(src_node.type == 'ImpactInt' || src_node.type == 'PrimitiveNode') { + is_linked = true; + } + } + break; + } + } + } + else if(nodes[i].widgets[1].value == event.detail.link_id) { + is_linked = true; + } + + if(is_linked) { + if(data.subfolder) + nodes[i].widgets[0].value = `${data.subfolder}/${data.filename} [${data.type}]`; + else + nodes[i].widgets[0].value = `${data.filename} [${data.type}]`; + + let img = new Image(); + img.onload = (event) => { + nodes[i].imgs = [img]; + nodes[i].size[1] = Math.max(200, nodes[i].size[1]); + app.canvas.setDirty(true); + }; + img.src = `/view?filename=${data.filename}&type=${data.type}&subfolder=${data.subfolder}`+app.getPreviewFormatParam(); + } + } + } + } +} + + +function latentSendHandler(event) { + if(event.detail.images.length > 0){ + let data = event.detail.images[0]; + let filename = `${data.filename} [${data.type}]`; + + let nodes = app.graph._nodes; + for(let i in nodes) { + if(nodes[i].type == 'LatentReceiver') { + if(nodes[i].widgets[1].value == event.detail.link_id) { + if(data.subfolder) + nodes[i].widgets[0].value = `${data.subfolder}/${data.filename} [${data.type}]`; + else + nodes[i].widgets[0].value = `${data.filename} [${data.type}]`; + + let img = new Image(); + img.src = `/view?filename=${data.filename}&type=${data.type}&subfolder=${data.subfolder}`+app.getPreviewFormatParam(); + nodes[i].imgs = [img]; + nodes[i].size[1] = Math.max(200, nodes[i].size[1]); + } + } + } + } +} + + +function valueSendHandler(event) { + let nodes = app.graph._nodes; + for(let i in nodes) { + if(nodes[i].type == 'ImpactValueReceiver') { + if(nodes[i].widgets[2].value == event.detail.link_id) { + nodes[i].widgets[1].value = event.detail.value; + + let typ = typeof event.detail.value; + if(typ == 'string') { + nodes[i].widgets[0].value = "STRING"; + } + else if(typ == "boolean") { + nodes[i].widgets[0].value = "BOOLEAN"; + } + else if(typ != "number") { + nodes[i].widgets[0].value = typeof event.detail.value; + } + else if(Number.isInteger(event.detail.value)) { + nodes[i].widgets[0].value = "INT"; + } + else { + nodes[i].widgets[0].value = "FLOAT"; + } + } + } + } +} + + +const impactProgressBadge = new ImpactProgressBadge(); + +api.addEventListener("stop-iteration", () => { + document.getElementById("autoQueueCheckbox").checked = false; +}); +api.addEventListener("value-send", valueSendHandler); +api.addEventListener("img-send", imgSendHandler); +api.addEventListener("latent-send", latentSendHandler); +api.addEventListener("executed", progressExecuteHandler); + +// Update wildcard status after workflow execution (on-demand mode) +api.addEventListener("executed", async (event) => { + if (wildcard_status.on_demand_mode) { + await load_wildcard_status(); + await load_wildcards(); + app.canvas.setDirty(true); + } +}); + +app.registerExtension({ + name: "Comfy.Impack", + + commands: [ + { + id: 'refresh-impact-wildcard', + label: 'Impact: Refresh Wildcard', + function: async () => { + await api.fetchApi('/impact/wildcards/refresh'); + await Promise.all([load_wildcards(), load_wildcard_status()]); + app.extensionManager.toast.add({ + severity: 'info', + summary: 'Refreshed!', + detail: 'Impact Wildcard List is refreshed!!', + life: 3000 + }); + } + } + ], + + menuCommands: [ + { + path: ['Edit'], + commands: ['refresh-impact-wildcard'] + } + ], + + loadedGraphNode(node, app) { + if (node.comfyClass == "MaskPainter") { + input_dirty[node.id + ""] = true; + } + }, + + async beforeRegisterNodeDef(nodeType, nodeData, app) { + if (nodeData.name == "IterativeLatentUpscale" || nodeData.name == "IterativeImageUpscale" + || nodeData.name == "RegionalSampler"|| nodeData.name == "RegionalSamplerAdvanced") { + impactProgressBadge.addStatusHandler(nodeType); + } + + if(nodeData.name == "ImpactControlBridge") { + const onConnectionsChange = nodeType.prototype.onConnectionsChange; + nodeType.prototype.onConnectionsChange = function (type, index, connected, link_info) { + if(index != 0 || !link_info || this.inputs[0].type != '*') + return; + + // assign type + let slot_type = '*'; + + if(type == 2) { + slot_type = link_info.type; + } + else { + const node = app.graph.getNodeById(link_info.origin_id); + slot_type = node?.outputs[link_info.origin_slot]?.type; + } + + this.inputs[0].type = slot_type; + this.outputs[0].type = slot_type; + this.outputs[0].label = slot_type; + } + } + + if(nodeData.name == "ImpactConditionalBranch" || nodeData.name == "ImpactConditionalBranchSelMode") { + const onConnectionsChange = nodeType.prototype.onConnectionsChange; + nodeType.prototype.onConnectionsChange = function (type, index, connected, link_info) { + if(!link_info || this.inputs[0].type != '*') + return; + + if(index >= 2) + return; + + // assign type + let slot_type = '*'; + + if(type == 2) { + slot_type = link_info.type; + } + else { + const node = app.graph.getNodeById(link_info.origin_id); + slot_type = node?.outputs[link_info.origin_slot].type; + } + + this.inputs[0].type = slot_type; + this.inputs[1].type = slot_type; + this.outputs[0].type = slot_type; + this.outputs[0].label = slot_type; + } + } + + if(nodeData.name == "ImpactCompare") { + const onConnectionsChange = nodeType.prototype.onConnectionsChange; + nodeType.prototype.onConnectionsChange = function (type, index, connected, link_info) { + if(!link_info || this.inputs[0].type != '*' || type == 2) + return; + + // assign type + const node = app.graph.getNodeById(link_info.origin_id); + let slot_type = node?.outputs[link_info.origin_slot].type; + + this.inputs[0].type = slot_type; + this.inputs[1].type = slot_type; + } + } + + if(nodeData.name == "ImpactSelectNthItemOfAnyList") { + const onConnectionsChange = nodeType.prototype.onConnectionsChange; + nodeType.prototype.onConnectionsChange = function (type, index, connected, link_info) { + if(!link_info || this.inputs[0].type != '*') + return; + + if(index >= 2) + return; + + // assign type + let slot_type = '*'; + + if(type == 2) { + slot_type = link_info.type; + } + else { + const node = app.graph.getNodeById(link_info.origin_id); + slot_type = node?.outputs[link_info.origin_slot].type; + } + + this.inputs[0].type = slot_type; + this.outputs[0].type = slot_type; + this.outputs[0].label = slot_type; + } + } + + if(nodeData.name === 'ImpactInversedSwitch') { + nodeData.output = ['*']; + nodeData.output_is_list = [false]; + nodeData.output_name = ['output1']; + + const onConnectionsChange = nodeType.prototype.onConnectionsChange; + nodeType.prototype.onConnectionsChange = function (type, index, connected, link_info) { + if(!link_info) + return; + + // HOTFIX: subgraph + const stackTrace = new Error().stack; + + if(stackTrace.includes('convertToSubgraph') || stackTrace.includes('Subgraph.configure')) { + return; + } + + if(type == 2) { + // connect output + if(connected){ + if(app.graph._nodes_by_id[link_info.target_id]?.type == 'Reroute') { + app.graph._nodes_by_id[link_info.target_id].disconnectInput(link_info.target_slot); + } + + if(this.outputs[0].type == '*'){ + if(link_info.type == '*' && app.graph.getNodeById(link_info.target_id).slots[link_info.target_slot].type != '*') { + app.graph._nodes_by_id[link_info.target_id].disconnectInput(link_info.target_slot); + } + else { + // propagate type + this.outputs[0].type = link_info.type; + this.outputs[0].name = link_info.type; + + for(let i in this.inputs) { + if(this.inputs[i].name != 'select') + this.inputs[i].type = link_info.type; + } + } + } + } + } + else { + if(app.graph._nodes_by_id[link_info.origin_id]?.type == 'Reroute') + this.disconnectInput(link_info.target_slot); + + // connect input + if(this.inputs[0].type == '*'){ + const node = app.graph.getNodeById(link_info.origin_id); + let origin_type = node?.outputs[link_info.origin_slot]?.type; + + if(origin_type==undefined) { + return; // fallback + } + + if(origin_type == '*' && app.graph.getNodeById(link_info.origin_id).slots[link_info.origin_slot].type != '*') { + this.disconnectInput(link_info.target_slot); + return; + } + + for(let i in this.inputs) { + if(this.inputs[i].name != 'select') + this.inputs[i].type = origin_type; + } + + this.outputs[0].type = origin_type; + this.outputs[0].name = 'output1'; + } + + return; + } + + if (!connected && this.outputs.length > 1) { + const stackTrace = new Error().stack; + + if( + !stackTrace.includes('LGraphNode.prototype.connect') && // for touch device + !stackTrace.includes('LGraphNode.connect') && // for mouse device + !stackTrace.includes('loadGraphData')) { + if(this.outputs[link_info.origin_slot].links.length == 0) { + this.removeOutput(link_info.origin_slot); + } + } + } + + let slot_i = 1; + for (let i = 0; i < this.outputs.length; i++) { + this.outputs[i].name = `output${slot_i}` + if (this.outputs[i].slot_index === undefined) { + this.outputs[i].slot_index = i; + } + slot_i++; + } + + if(connected) { + // NOTE: node.slot_index is different with link_info.origin_slot + let last_slot_index = this.outputs.length - 1; + if (last_slot_index == link_info.origin_slot) { + this.addOutput(`output${slot_i}`, this.outputs[0].type); + } + } + + let select_slot = this.inputs.find(x => x.name == "select"); + if(this.widgets?.length) { + this.widgets[0].options.max = select_slot?this.outputs.length-1:this.outputs.length; + this.widgets[0].value = Math.min(this.widgets[0].value, this.widgets[0].options.max); + if(this.widgets[0].options.max > 0 && this.widgets[0].value == 0) + this.widgets[0].value = 1; + } + } + } + + if (nodeData.name === 'ImpactMakeImageList' || nodeData.name === 'ImpactMakeImageBatch' || + nodeData.name === 'ImpactMakeMaskList' || nodeData.name === 'ImpactMakeMaskBatch' || + nodeData.name === 'ImpactMakeAnyList' || nodeData.name === 'CombineRegionalPrompts' || + nodeData.name === 'ImpactCombineConditionings' || nodeData.name === 'ImpactConcatConditionings' || + nodeData.name === 'ImpactSEGSConcat' || + nodeData.name === 'ImpactSwitch' || nodeData.name === 'LatentSwitch' || nodeData.name == 'SEGSSwitch') { + var input_name = "input"; + + switch(nodeData.name) { + case 'ImpactMakeImageList': + case 'ImpactMakeImageBatch': + input_name = "image"; + break; + + case 'ImpactMakeMaskList': + case 'ImpactMakeMaskBatch': + input_name = "mask"; + break; + + case 'ImpactMakeAnyList': + input_name = "value"; + break; + + case 'ImpactSEGSConcat': + input_name = "segs"; + break; + + case 'CombineRegionalPrompts': + input_name = "regional_prompts"; + break; + + case 'ImpactCombineConditionings': + case 'ImpactConcatConditionings': + input_name = "conditioning"; + break; + + case 'LatentSwitch': + input_name = "input"; + break; + + case 'SEGSSwitch': + input_name = "input"; + break; + + case 'ImpactSwitch': + input_name = "input"; + } + + const onConnectionsChange = nodeType.prototype.onConnectionsChange; + nodeType.prototype.onConnectionsChange = function (type, index, connected, link_info) { + const stackTrace = new Error().stack; + + // HOTFIX: subgraph + if(stackTrace.includes('convertToSubgraph') || stackTrace.includes('Subgraph.configure')) { + return; + } + + if(stackTrace.includes('loadGraphData')) { + if(this.widgets?.[0]) { + this.widgets[0].options.max = this.inputs.length-3; + this.widgets[0].value = Math.min(this.widgets[0].value, this.widgets[0].options.max); + } + return; + } + + if(stackTrace.includes('pasteFromClipboard')) { + if(this.widgets?.[0]) { + this.widgets[0].options.max = this.inputs.length-3; + this.widgets[0].value = Math.min(this.widgets[0].value, this.widgets[0].options.max); + } + return; + } + + if(!link_info) + return; + + if(type == 2) { + // connect output + if(connected && index == 0){ + if(nodeData.name == 'ImpactSwitch' && app.graph._nodes_by_id[link_info.target_id]?.type == 'Reroute') { + app.graph._nodes_by_id[link_info.target_id].disconnectInput(link_info.target_slot); + } + + if(this.outputs[0].type == '*'){ + if(link_info.type == '*' && app.graph.getNodeById(link_info.target_id).slots[link_info.target_slot].type != '*') { + app.graph._nodes_by_id[link_info.target_id].disconnectInput(link_info.target_slot); + } + else { + // propagate type + this.outputs[0].type = link_info.type; + this.outputs[0].label = link_info.type; + this.outputs[0].name = link_info.type; + + for(let i in this.inputs) { + let input_i = this.inputs[i]; + if(input_i.name != 'select' && input_i.name != 'sel_mode') + input_i.type = link_info.type; + } + } + } + } + + return; + } + else { + if(nodeData.name == 'ImpactSwitch' && app.graph._nodes_by_id[link_info.origin_id]?.type == 'Reroute') + this.disconnectInput(link_info.target_slot); + + // connect input + if(this.inputs[index].name == 'select' || this.inputs[index].name == 'sel_mode') + return; + + if(this.inputs[0].type == '*'){ + const node = app.graph.getNodeById(link_info.origin_id); + + // NOTE: node is undefined when subgraph editing mode + if(node) { + let origin_type = node.outputs[link_info.origin_slot]?.type; + if(link_info.target_slot == 0 && this.inputs.length > 3) { // NOTE: widgets are regarded as input since new front + origin_type = this.inputs[1].type; + node.connect(link_info.origin_slot, node.id, 'input1'); + } + + if(origin_type == '*' && app.graph.getNodeById(link_info.origin_id).slots[link_info.origin_slot].type != '*') { + this.disconnectInput(link_info.target_slot); + return; + } + + for(let i in this.inputs) { + let input_i = this.inputs[i]; + if(input_i.name != 'select' && input_i.name != 'sel_mode') + input_i.type = origin_type; + } + + this.outputs[0].type = origin_type; + this.outputs[0].label = origin_type; + this.outputs[0].name = origin_type; + } + } + } + + let widget_count = 0; + if(nodeData.name == 'ImpactSwitch' || nodeData.name == 'LatentSwitch' || nodeData.name == 'SEGSSwitch') { + widget_count += 1; + } + + if (!connected && (this.inputs.length > widget_count+1)) { + if( + !stackTrace.includes('LGraphNode.prototype.connect') && // for touch device + !stackTrace.includes('LGraphNode.connect') && // for mouse device + !stackTrace.includes('loadGraphData') && + this.inputs[index].name != 'select') { + this.removeInput(index); + } + } + + let slot_i = 1; + for (let i = 0; i < this.inputs.length; i++) { + let input_i = this.inputs[i]; + if(input_i.name != 'select'&& input_i.name != 'sel_mode') { + input_i.name = `${input_name}${slot_i}` + slot_i++; + } + } + + if(connected) { + this.addInput(`${input_name}${slot_i}`, this.outputs[0].type); + } + + if(this.widgets?.[0]) { + this.widgets[0].options.max = this.inputs.length-3; + this.widgets[0].value = Math.min(this.widgets[0].value, this.widgets[0].options.max); + } + } + } + }, + + nodeCreated(node, app) { + if(node.comfyClass == "MaskPainter") { + node.addWidget("button", "Edit mask", null, () => { + ComfyApp.copyToClipspace(node); + ComfyApp.clipspace_return_node = node; + ComfyApp.open_maskeditor(); + }); + } + + switch(node.comfyClass) { + case "ToDetailerPipe": + case "ToDetailerPipeSDXL": + case "BasicPipeToDetailerPipe": + case "BasicPipeToDetailerPipeSDXL": + case "EditDetailerPipe": + case "FaceDetailer": + case "DetailerForEach": + case "DetailerForEachDebug": + case "DetailerForEachPipe": + case "DetailerForEachDebugPipe": + { + for(let i in node.widgets) { + let widget = node.widgets[i]; + if(widget.type === "customtext") { + widget.dynamicPrompts = false; + widget.inputEl.placeholder = "wildcard spec: if kept empty, this option will be ignored"; + widget.serializeValue = () => { + return node.widgets[i].value; + }; + } + } + } + break; + } + + if(node.comfyClass == "ImpactSEGSLabelFilter" || node.comfyClass == "SEGSLabelFilterDetailerHookProvider") { + node.widgets[0].callback = (value, canvas, node, pos, e) => { + if(node) { + if(node.widgets[1].value.trim() != "" && !node.widgets[1].value.trim().endsWith(",")) + node.widgets[1].value += ", " + + node.widgets[1].value += value; + if(node.widgets_values) + node.widgets_values[1] = node.widgets[1].value; + } + } + + Object.defineProperty(node.widgets[0], "value", { + set: (value) => { + node._value = value; + }, + get: () => { + return node._value; + } + }); + } + + if(node.comfyClass == "UltralyticsDetectorProvider") { + let model_name_widget = node.widgets.find((w) => w.name === "model_name"); + let orig_draw = node.onDrawForeground; + node.onDrawForeground = function (ctx) { + const r = orig_draw?.apply?.(this, arguments); + + let is_seg = model_name_widget.value?.startsWith('segm/') || model_name_widget.value?.includes('-seg'); + if(!is_seg) { + var slot_pos = new Float32Array(2); + var pos = node.getConnectionPos(false, 1, slot_pos); + + pos[0] -= node.pos[0] - 10; + pos[1] -= node.pos[1]; + + ctx.beginPath(); + ctx.strokeStyle = "red"; + ctx.lineWidth = 4; + ctx.moveTo(pos[0] - 5, pos[1] - 5); + ctx.lineTo(pos[0] + 5, pos[1] + 5); + ctx.moveTo(pos[0] + 5, pos[1] - 5); + ctx.lineTo(pos[0] - 5, pos[1] + 5); + ctx.stroke(); + } + } + } + + if( + node.comfyClass == "ImpactWildcardEncode" || node.comfyClass == "ImpactWildcardProcessor" + || node.comfyClass == "ToDetailerPipe" || node.comfyClass == "ToDetailerPipeSDXL" + || node.comfyClass == "EditDetailerPipe" || node.comfyClass == "EditDetailerPipeSDXL" + || node.comfyClass == "BasicPipeToDetailerPipe" || node.comfyClass == "BasicPipeToDetailerPipeSDXL") { + node._value = "Select the LoRA to add to the text"; + node._wvalue = "Select the Wildcard to add to the text"; + + var tbox_id = 0; + var combo_id = 3; + var has_lora = true; + + switch(node.comfyClass){ + case "ImpactWildcardEncode": + tbox_id = 0; + combo_id = 3; + break; + + case "ImpactWildcardProcessor": + tbox_id = 0; + combo_id = 4; + has_lora = false; + break; + + case "ToDetailerPipe": + case "ToDetailerPipeSDXL": + case "EditDetailerPipe": + case "EditDetailerPipeSDXL": + case "BasicPipeToDetailerPipe": + case "BasicPipeToDetailerPipeSDXL": + tbox_id = 0; + combo_id = 1; + break; + } + + node.widgets[combo_id+1].callback = async (value, canvas, node, pos, e) => { + if(node) { + if(node.widgets[tbox_id].value != '') + node.widgets[tbox_id].value += ', ' + + node.widgets[tbox_id].value += node._wildcard_value; + + // Reload wildcard status to update loaded count + if (wildcard_status.on_demand_mode) { + await load_wildcard_status(); + await load_wildcards(); + app.canvas.setDirty(true); + } + } + } + + Object.defineProperty(node.widgets[combo_id+1], "value", { + set: (value) => { + if (!is_wildcard_label(value)) + node._wildcard_value = value; + }, + get: () => { return get_wildcard_label(); } + }); + + Object.defineProperty(node.widgets[combo_id+1].options, "values", { + set: (x) => {}, + get: () => { + return wildcards_list; + } + }); + + if(has_lora) { + node.widgets[combo_id].callback = (value, canvas, node, pos, e) => { + if(node) { + let lora_name = node._value; + if(lora_name.endsWith('.safetensors')) { + lora_name = lora_name.slice(0, -12); + } + + node.widgets[tbox_id].value += ``; + if(node.widgets_values) { + node.widgets_values[tbox_id] = node.widgets[tbox_id].value; + } + } + } + + Object.defineProperty(node.widgets[combo_id], "value", { + set: (value) => { + if (value !== "Select the LoRA to add to the text") + node._value = value; + }, + + get: () => { return "Select the LoRA to add to the text"; } + }); + } + + // Preventing validation errors from occurring in any situation. + if(has_lora) { + node.widgets[combo_id].serializeValue = () => { return "Select the LoRA to add to the text"; } + } + node.widgets[combo_id+1].serializeValue = () => { return "Select the Wildcard to add to the text"; } + } + + if(node.comfyClass == "ImpactWildcardProcessor" || node.comfyClass == "ImpactWildcardEncode") { + node.widgets[0].inputEl.placeholder = "Wildcard Prompt (User input)"; + node.widgets[1].inputEl.placeholder = "Populated Prompt (Will be generated automatically)"; + node.widgets[1].inputEl.disabled = true; + + const populated_text_widget = node.widgets.find((w) => w.name == 'populated_text'); + const mode_widget = node.widgets.find((w) => w.name == 'mode'); + + // mode combo + Object.defineProperty(mode_widget, "value", { + set: (value) => { + if(value == true) + node._mode_value = "populate"; + else if(value == false) + node._mode_value = "fixed"; + else + node._mode_value = value; // combo value + + populated_text_widget.inputEl.disabled = node._mode_value == 'populate'; + }, + get: () => { + if(node._mode_value != undefined) + return node._mode_value; + else + return 'populate'; + } + }); + } + + if (node.comfyClass == "MaskPainter") { + node.widgets[0].value = '#placeholder'; + + Object.defineProperty(node, "images", { + set: function(value) { + node._images = value; + }, + get: function() { + const id = node.id+""; + if(node.widgets[0].value != '#placeholder') { + var need_invalidate = false; + + if(input_dirty.hasOwnProperty(id) && input_dirty[id]) { + node.widgets[0].value = {...input_tracking[id][1]}; + input_dirty[id] = false; + need_invalidate = true + this._images = app.nodeOutputs[id].images; + } + + let filename = app.nodeOutputs[id]['aux'][1][0]['filename']; + let subfolder = app.nodeOutputs[id]['aux'][1][0]['subfolder']; + let type = app.nodeOutputs[id]['aux'][1][0]['type']; + + let item = + { + image_hash: app.nodeOutputs[id]['aux'][0], + forward_filename: app.nodeOutputs[id]['aux'][1][0]['filename'], + forward_subfolder: app.nodeOutputs[id]['aux'][1][0]['subfolder'], + forward_type: app.nodeOutputs[id]['aux'][1][0]['type'] + }; + + if(node._images) { + app.nodeOutputs[id].images = [{ + ...node._images[0], + ...item + }]; + + node.widgets[0].value = + { + ...node._images[0], + ...item + }; + } + else { + app.nodeOutputs[id].images = [{ + ...item + }]; + + node.widgets[0].value = + { + ...item + }; + } + + if(need_invalidate) { + Promise.all( + app.nodeOutputs[id].images.map((src) => { + return new Promise((r) => { + const img = new Image(); + img.onload = () => r(img); + img.onerror = () => r(null); + img.src = "/view?" + new URLSearchParams(src).toString(); + }); + }) + ).then((imgs) => { + this.imgs = imgs.filter(Boolean); + this.setSizeForImage?.(); + app.graph.setDirtyCanvas(true); + }); + + app.nodeOutputs[id].images[0] = { ...node.widgets[0].value }; + } + + return app.nodeOutputs[id].images; + } + else { + return node._images; + } + } + }); + } + } +}); diff --git a/comfyui-impact-pack/js/impact-sam-editor.js b/comfyui-impact-pack/js/impact-sam-editor.js new file mode 100644 index 0000000000000000000000000000000000000000..371987c0b8f9fa7149d48711c3540f14d0768db1 --- /dev/null +++ b/comfyui-impact-pack/js/impact-sam-editor.js @@ -0,0 +1,641 @@ +import { app } from "../../scripts/app.js"; +import { api } from "../../scripts/api.js"; +import { ComfyDialog, $el } from "../../scripts/ui.js"; +import { ComfyApp } from "../../scripts/app.js"; +import { ClipspaceDialog } from "../../extensions/core/clipspace.js"; + +function addMenuHandler(nodeType, cb) { + const getOpts = nodeType.prototype.getExtraMenuOptions; + nodeType.prototype.getExtraMenuOptions = function () { + const r = getOpts.apply(this, arguments); + cb.apply(this, arguments); + return r; + }; +} + +// Helper function to convert a data URL to a Blob object +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 }); +} + +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; +} + +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 = `view?filename=${filepath.filename}&type=${filepath.type}`; + + if(ComfyApp.clipspace.images) + ComfyApp.clipspace.images[ComfyApp.clipspace['selectedIndex']] = filepath; + + ClipspaceDialog.invalidatePreview(); +} + +class ImpactSamEditorDialog extends ComfyDialog { + static instance = null; + + static getInstance() { + if(!ImpactSamEditorDialog.instance) { + ImpactSamEditorDialog.instance = new ImpactSamEditorDialog(); + } + + return ImpactSamEditorDialog.instance; + } + + 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.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(self, name, callback) { + const divElement = document.createElement('div'); + divElement.id = "sam-confidence-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 = "21px"; + divElement.style.padding = "1px 6px"; + divElement.style.display = "flex"; + divElement.style.position = "relative"; + divElement.style.top = "2px"; + self.confidence_slider_input = document.createElement('input'); + self.confidence_slider_input.setAttribute('type', 'range'); + self.confidence_slider_input.setAttribute('min', '0'); + self.confidence_slider_input.setAttribute('max', '100'); + self.confidence_slider_input.setAttribute('value', '70'); + const labelElement = document.createElement("label"); + labelElement.textContent = name; + + divElement.appendChild(labelElement); + divElement.appendChild(self.confidence_slider_input); + + self.confidence_slider_input.addEventListener("change", callback); + + return divElement; + } + + async detect_and_invalidate_mask_canvas(self) { + const mask_img = await self.detect(self); + + const canvas = self.maskCtx.canvas; + const ctx = self.maskCtx; + + ctx.clearRect(0, 0, canvas.width, canvas.height); + + await new Promise((resolve, reject) => { + self.mask_image = new Image(); + self.mask_image.onload = function() { + ctx.drawImage(self.mask_image, 0, 0, canvas.width, canvas.height); + resolve(); + }; + self.mask_image.onerror = reject; + self.mask_image.src = mask_img.src; + }); + } + + setlayout(imgCanvas, maskCanvas, pointsCanvas) { + const self = this; + + // If it is specified as relative, using it only as a hidden placeholder for padding is recommended + // to prevent anomalies where it exceeds a certain size and goes outside of the window. + var placeholder = document.createElement("div"); + placeholder.style.position = "relative"; + placeholder.style.height = "50px"; + + 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"; + + var brush = document.createElement("div"); + brush.id = "sam-brush"; + brush.style.backgroundColor = "blue"; + brush.style.outline = "2px solid pink"; + brush.style.borderRadius = "50%"; + brush.style.MozBorderRadius = "50%"; + brush.style.WebkitBorderRadius = "50%"; + brush.style.position = "absolute"; + brush.style.zIndex = 100; + brush.style.pointerEvents = "none"; + this.brush = brush; + this.element.appendChild(imgCanvas); + this.element.appendChild(maskCanvas); + this.element.appendChild(pointsCanvas); + this.element.appendChild(placeholder); // must below z-index than bottom_panel to avoid covering button + this.element.appendChild(bottom_panel); + document.body.appendChild(brush); + this.brush_size = 5; + + var confidence_slider = this.createLeftSlider(self, "Confidence", (event) => { + self.confidence = event.target.value; + }); + + var clearButton = this.createLeftButton("Clear", () => { + self.maskCtx.clearRect(0, 0, self.maskCanvas.width, self.maskCanvas.height); + self.pointsCtx.clearRect(0, 0, self.pointsCanvas.width, self.pointsCanvas.height); + + self.prompt_points = []; + + self.invalidatePointsCanvas(self); + }); + + var detectButton = this.createLeftButton("Detect", () => self.detect_and_invalidate_mask_canvas(self)); + + var cancelButton = this.createRightButton("Cancel", () => { + document.removeEventListener("mouseup", ImpactSamEditorDialog.handleMouseUp); + document.removeEventListener("keydown", ImpactSamEditorDialog.handleKeyDown); + self.close(); + }); + + self.saveButton = this.createRightButton("Save", () => { + document.removeEventListener("mouseup", ImpactSamEditorDialog.handleMouseUp); + document.removeEventListener("keydown", ImpactSamEditorDialog.handleKeyDown); + self.save(self); + }); + + var undoButton = this.createLeftButton("Undo", () => { + if(self.prompt_points.length > 0) { + self.prompt_points.pop(); + self.pointsCtx.clearRect(0, 0, self.pointsCanvas.width, self.pointsCanvas.height); + self.invalidatePointsCanvas(self); + } + }); + + bottom_panel.appendChild(clearButton); + bottom_panel.appendChild(detectButton); + bottom_panel.appendChild(self.saveButton); + bottom_panel.appendChild(cancelButton); + bottom_panel.appendChild(confidence_slider); + bottom_panel.appendChild(undoButton); + + imgCanvas.style.position = "relative"; + imgCanvas.style.top = "200"; + imgCanvas.style.left = "0"; + + maskCanvas.style.position = "absolute"; + maskCanvas.style.opacity = 0.5; + pointsCanvas.style.position = "absolute"; + } + + show() { + this.mask_image = null; + self.prompt_points = []; + + this.message_box = $el("p", ["Please wait a moment while the SAM model and the image are being loaded."]); + this.element.appendChild(this.message_box); + + if(self.imgCtx) { + self.imgCtx.clearRect(0, 0, self.imageCanvas.width, self.imageCanvas.height); + } + + const target_image_path = ComfyApp.clipspace.imgs[ComfyApp.clipspace['selectedIndex']].src; + this.load_sam(target_image_path); + + if(!this.is_layout_created) { + // layout + const imgCanvas = document.createElement('canvas'); + const maskCanvas = document.createElement('canvas'); + const pointsCanvas = document.createElement('canvas'); + + imgCanvas.id = "imageCanvas"; + maskCanvas.id = "samEditorMaskCanvas"; + pointsCanvas.id = "pointsCanvas"; + + this.setlayout(imgCanvas, maskCanvas, pointsCanvas); + + // prepare content + this.imgCanvas = imgCanvas; + this.maskCanvas = maskCanvas; + this.pointsCanvas = pointsCanvas; + this.maskCtx = maskCanvas.getContext('2d'); + this.pointsCtx = pointsCanvas.getContext('2d'); + + this.is_layout_created = true; + + // replacement of onClose hook since close is not real close + const self = this; + const observer = new MutationObserver(function(mutations) { + mutations.forEach(function(mutation) { + if (mutation.type === 'attributes' && mutation.attributeName === 'style') { + if(self.last_display_style && self.last_display_style != 'none' && self.element.style.display == 'none') { + ComfyApp.onClipspaceEditorClosed(); + } + + self.last_display_style = self.element.style.display; + } + }); + }); + + const config = { attributes: true }; + observer.observe(this.element, config); + } + + this.setImages(target_image_path, this.imgCanvas, this.pointsCanvas); + + if(ComfyApp.clipspace_return_node) { + this.saveButton.innerText = "Save to node"; + } + else { + this.saveButton.innerText = "Save"; + } + this.saveButton.disabled = true; + + this.element.style.display = "block"; + this.element.style.zIndex = 8888; // NOTE: alert dialog must be high priority. + } + + updateBrushPreview(self, event) { + event.preventDefault(); + + const centerX = event.pageX; + const centerY = event.pageY; + + const brush = self.brush; + + brush.style.width = self.brush_size * 2 + "px"; + brush.style.height = self.brush_size * 2 + "px"; + brush.style.left = (centerX - self.brush_size) + "px"; + brush.style.top = (centerY - self.brush_size) + "px"; + } + + setImages(target_image_path, imgCanvas, pointsCanvas) { + const imgCtx = imgCanvas.getContext('2d'); + const maskCtx = this.maskCtx; + const maskCanvas = this.maskCanvas; + + const self = this; + + // image load + const orig_image = new Image(); + window.addEventListener("resize", () => { + // repositioning + imgCanvas.width = window.innerWidth - 250; + imgCanvas.height = window.innerHeight - 200; + + // redraw image + let drawWidth = orig_image.width; + let drawHeight = orig_image.height; + + if (orig_image.width > imgCanvas.width) { + drawWidth = imgCanvas.width; + drawHeight = (drawWidth / orig_image.width) * orig_image.height; + } + + if (drawHeight > imgCanvas.height) { + drawHeight = imgCanvas.height; + drawWidth = (drawHeight / orig_image.height) * orig_image.width; + } + + imgCtx.drawImage(orig_image, 0, 0, drawWidth, drawHeight); + + // update mask + let w = (drawWidth * imgCanvas.clientWidth/imgCanvas.width) + "px"; + let h = (drawHeight * imgCanvas.clientHeight/imgCanvas.height) + "px"; + + pointsCanvas.width = drawWidth * imgCanvas.clientWidth/imgCanvas.width; + pointsCanvas.height = drawHeight * imgCanvas.clientHeight/imgCanvas.height; + pointsCanvas.style.top = imgCanvas.offsetTop + "px"; + pointsCanvas.style.left = imgCanvas.offsetLeft + "px"; + + maskCanvas.width = pointsCanvas.width; + maskCanvas.height = pointsCanvas.height; + maskCanvas.style.top = imgCanvas.offsetTop + "px"; + maskCanvas.style.left = imgCanvas.offsetLeft + "px"; + + self.invalidateMaskCanvas(self); + self.invalidatePointsCanvas(self); + }); + + // original image load + orig_image.onload = () => self.onLoaded(self); + const rgb_url = new URL(target_image_path); + rgb_url.searchParams.delete('channel'); + rgb_url.searchParams.set('channel', 'rgb'); + orig_image.src = rgb_url; + self.image = orig_image; + } + + onLoaded(self) { + if(self.message_box) { + self.element.removeChild(self.message_box); + self.message_box = null; + } + + window.dispatchEvent(new Event('resize')); + + self.setEventHandler(pointsCanvas); + self.saveButton.disabled = false; + } + + setEventHandler(targetCanvas) { + targetCanvas.addEventListener("contextmenu", (event) => { + event.preventDefault(); + }); + + const self = this; + targetCanvas.addEventListener('pointermove', (event) => this.updateBrushPreview(self,event)); + targetCanvas.addEventListener('pointerdown', (event) => this.handlePointerDown(self,event)); + targetCanvas.addEventListener('pointerover', (event) => { this.brush.style.display = "block"; }); + targetCanvas.addEventListener('pointerleave', (event) => { this.brush.style.display = "none"; }); + document.addEventListener('keydown', ImpactSamEditorDialog.handleKeyDown); + } + + static handleKeyDown(event) { + const self = ImpactSamEditorDialog.instance; + if (event.key === '=') { // positive + brush.style.backgroundColor = "blue"; + brush.style.outline = "2px solid pink"; + self.is_positive_mode = true; + } else if (event.key === '-') { // negative + brush.style.backgroundColor = "red"; + brush.style.outline = "2px solid skyblue"; + self.is_positive_mode = false; + } + } + + is_positive_mode = true; + prompt_points = []; + confidence = 70; + + invalidatePointsCanvas(self) { + const ctx = self.pointsCtx; + + for (const i in self.prompt_points) { + const [is_positive, x, y] = self.prompt_points[i]; + + const scaledX = x * ctx.canvas.width / self.image.width; + const scaledY = y * ctx.canvas.height / self.image.height; + + if(is_positive) + ctx.fillStyle = "blue"; + else + ctx.fillStyle = "red"; + ctx.beginPath(); + ctx.arc(scaledX, scaledY, 3, 0, 3 * Math.PI); + ctx.fill(); + } + } + + invalidateMaskCanvas(self) { + if(self.mask_image) { + self.maskCtx.clearRect(0, 0, self.maskCanvas.width, self.maskCanvas.height); + self.maskCtx.drawImage(self.mask_image, 0, 0, self.maskCanvas.width, self.maskCanvas.height); + } + } + + async load_sam(url) { + const parsedUrl = new URL(url); + const searchParams = new URLSearchParams(parsedUrl.search); + + const filename = searchParams.get("filename") || ""; + const fileType = searchParams.get("type") || ""; + const subfolder = searchParams.get("subfolder") || ""; + + const data = { + sam_model_name: "auto", + filename: filename, + type: fileType, + subfolder: subfolder + }; + + api.fetchApi('/sam/prepare', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify(data) + }); + } + + async detect(self) { + const positive_points = []; + const negative_points = []; + + for(const i in self.prompt_points) { + const [is_positive, x, y] = self.prompt_points[i]; + const point = [x,y]; + if(is_positive) { + positive_points.push(point); + } + else + negative_points.push(point); + } + + const data = { + positive_points: positive_points, + negative_points: negative_points, + threshold: self.confidence/100 + }; + + const response = await api.fetchApi('/sam/detect', { + method: 'POST', + headers: { 'Content-Type': 'image/png' }, + body: JSON.stringify(data) + }); + + const blob = await response.blob(); + const url = URL.createObjectURL(blob); + + return new Promise((resolve, reject) => { + const image = new Image(); + image.onload = () => resolve(image); + image.onerror = reject; + image.src = url; + }); + } + + handlePointerDown(self, event) { + if ([0, 2, 5].includes(event.button)) { + event.preventDefault(); + const x = event.offsetX || event.targetTouches[0].clientX - maskRect.left; + const y = event.offsetY || event.targetTouches[0].clientY - maskRect.top; + + const originalX = x * self.image.width / self.pointsCanvas.clientWidth; + const originalY = y * self.image.height / self.pointsCanvas.clientHeight; + + var point = null; + if (event.button == 0) { + // positive + point = [true, originalX, originalY]; + } else { + // negative + point = [false, originalX, originalY]; + } + + self.prompt_points.push(point); + + self.invalidatePointsCanvas(self); + } + } + + async save(self) { + if(!self.mask_image) { + this.close(); + return; + } + + const save_canvas = document.createElement('canvas'); + + const save_ctx = save_canvas.getContext('2d', {willReadFrequently:true}); + save_canvas.width = self.mask_image.width; + save_canvas.height = self.mask_image.height; + + save_ctx.drawImage(self.mask_image, 0, 0, save_canvas.width, save_canvas.height); + + const save_data = save_ctx.getImageData(0, 0, save_canvas.width, save_canvas.height); + + // refine mask image + for (let i = 0; i < save_data.data.length; i += 4) { + if(save_data.data[i]) { + save_data.data[i+3] = 0; + } + else { + save_data.data[i+3] = 255; + } + + save_data.data[i] = 0; + save_data.data[i+1] = 0; + save_data.data[i+2] = 0; + } + + save_ctx.globalCompositeOperation = 'source-over'; + save_ctx.putImageData(save_data, 0, 0); + + const formData = new FormData(); + const filename = "clipspace-mask-" + performance.now() + ".png"; + + const item = + { + "filename": filename, + "subfolder": "", + "type": "temp", + }; + + 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 = `${filename} [temp]`; + } + + const dataURL = save_canvas.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', "temp"); + + await uploadMask(item, formData); + ComfyApp.onClipspaceEditorSave(); + this.close(); + } +} + +app.registerExtension({ + name: "Comfy.Impact.SAMEditor", + init(app) { + const callback = + function () { + let dlg = ImpactSamEditorDialog.getInstance(); + dlg.show(); + }; + + const context_predicate = () => ComfyApp.clipspace && ComfyApp.clipspace.imgs && ComfyApp.clipspace.imgs.length > 0 + ClipspaceDialog.registerButton("Impact SAM Detector", context_predicate, callback); + }, + + async beforeRegisterNodeDef(nodeType, nodeData, app) { + if (Array.isArray(nodeData.output) && (nodeData.output.includes("MASK") || nodeData.output.includes("IMAGE"))) { + addMenuHandler(nodeType, function (_, options) { + options.unshift({ + content: "Open in SAM Detector", + callback: () => { + ComfyApp.copyToClipspace(this); + ComfyApp.clipspace_return_node = this; + + let dlg = ImpactSamEditorDialog.getInstance(); + dlg.show(); + }, + }); + }); + } + } +}); + diff --git a/comfyui-impact-pack/js/impact-segs-picker.js b/comfyui-impact-pack/js/impact-segs-picker.js new file mode 100644 index 0000000000000000000000000000000000000000..01319f072923294d9a531aa296435ffa78eafe2a --- /dev/null +++ b/comfyui-impact-pack/js/impact-segs-picker.js @@ -0,0 +1,182 @@ +import { ComfyApp, app } from "../../scripts/app.js"; +import { ComfyDialog, $el } from "../../scripts/ui.js"; +import { api } from "../../scripts/api.js"; + +async function open_picker(node) { + const resp = await api.fetchApi(`/impact/segs/picker/count?id=${node.id}`); + const body = await resp.text(); + + let cnt = parseInt(body); + + var existingPicker = document.getElementById('impact-picker'); + if (existingPicker) { + existingPicker.parentNode.removeChild(existingPicker); + } + + var gallery = document.createElement('div'); + gallery.id = 'impact-picker'; + + gallery.style.position = "absolute"; + gallery.style.height = "80%"; + gallery.style.width = "80%"; + gallery.style.top = "10%"; + gallery.style.left = "10%"; + gallery.style.display = 'flex'; + gallery.style.flexWrap = 'wrap'; + gallery.style.maxHeight = '600px'; + gallery.style.overflow = 'auto'; + gallery.style.backgroundColor = 'rgba(0,0,0,0.3)'; + gallery.style.padding = '20px'; + gallery.draggable = false; + gallery.style.zIndex = 5000; + + var doneButton = document.createElement('button'); + doneButton.textContent = 'Done'; + doneButton.style.padding = '10px 10px'; + doneButton.style.border = 'none'; + doneButton.style.borderRadius = '5px'; + doneButton.style.fontFamily = 'Arial, sans-serif'; + doneButton.style.fontSize = '16px'; + doneButton.style.fontWeight = 'bold'; + doneButton.style.color = '#fff'; + doneButton.style.background = 'linear-gradient(to bottom, #0070B8, #003D66)'; + doneButton.style.boxShadow = '0 2px 4px rgba(0, 0, 0, 0.4)'; + doneButton.style.margin = "20px"; + doneButton.style.height = "40px"; + + var cancelButton = document.createElement('button'); + cancelButton.textContent = 'Cancel'; + cancelButton.style.padding = '10px 10px'; + cancelButton.style.border = 'none'; + cancelButton.style.borderRadius = '5px'; + cancelButton.style.fontFamily = 'Arial, sans-serif'; + cancelButton.style.fontSize = '16px'; + cancelButton.style.fontWeight = 'bold'; + cancelButton.style.color = '#fff'; + cancelButton.style.background = 'linear-gradient(to bottom, #ff70B8, #ff3D66)'; + cancelButton.style.boxShadow = '0 2px 4px rgba(0, 0, 0, 0.4)'; + cancelButton.style.margin = "20px"; + cancelButton.style.height = "40px"; + + const w = node.widgets.find((w) => w.name == 'picks'); + let prev_selected = w.value.split(',').map(function(item) { + return parseInt(item, 10); + }); + + let images = []; + doneButton.onclick = () => { + var result = ''; + for(let i in images) { + if(images[i].isSelected) { + if(result != '') + result += ', '; + + result += (parseInt(i)+1); + } + } + + w.value = result; + + gallery.parentNode.removeChild(gallery); + } + + cancelButton.onclick = () => { + gallery.parentNode.removeChild(gallery); + } + + var panel = document.createElement('div'); + panel.style.clear = 'both'; + panel.style.width = '100%'; + panel.style.height = '40px'; + panel.style.justifyContent = 'center'; + panel.style.alignItems = 'center'; + panel.style.display = 'flex'; + panel.appendChild(doneButton); + panel.appendChild(cancelButton); + gallery.appendChild(panel); + + var hint = document.createElement('label'); + hint.style.position = 'absolute'; + hint.innerHTML = 'Click: Toggle Selection
    Ctrl-click: Single Selection'; + gallery.appendChild(hint); + + let max_size = 300; + + for(let i=0; i image.naturalHeight) { + ratio = max_size/image.naturalWidth; + } + else { + ratio = max_size/image.naturalHeight; + } + + let width = image.naturalWidth * ratio; + let height = image.naturalHeight * ratio; + + if(width < height) { + this.style.marginLeft = (200-width)/2+"px"; + } + else{ + this.style.marginTop = (200-height)/2+"px"; + } + + this.style.width = width+"px"; + this.style.height = height+"px"; + this.style.objectFit = 'cover'; + } + + image.addEventListener('click', function(event) { + if(event.ctrlKey) { + for(let i in images) { + if(images[i].isSelected) { + images[i].style.border = 'none'; + images[i].isSelected = false; + } + } + + image.style.border = '2px solid #006699'; + image.isSelected = true; + + return; + } + + if(image.isSelected) { + image.style.border = 'none'; + image.isSelected = false; + } + else { + image.style.border = '2px solid #006699'; + image.isSelected = true; + } + }); + + gallery.appendChild(image); + } + + document.body.appendChild(gallery); +} + + +app.registerExtension({ + name: "Comfy.Impack.Picker", + + nodeCreated(node, app) { + if(node.comfyClass == "ImpactSEGSPicker") { + node.addWidget("button", "pick", "image", () => { + open_picker(node); + }); + } + } +}); \ No newline at end of file diff --git a/comfyui-impact-pack/js/mask-rect-area-advanced.js b/comfyui-impact-pack/js/mask-rect-area-advanced.js new file mode 100644 index 0000000000000000000000000000000000000000..985b92c5d0c0dc65913d9af4da08d23582120941 --- /dev/null +++ b/comfyui-impact-pack/js/mask-rect-area-advanced.js @@ -0,0 +1,459 @@ +import { app } from "../../scripts/app.js"; +import { readLinkedNumber, getDrawColor, computeCanvasSize } from "./common.js"; +function showPreviewCanvas(node, app) { + + const widget = { + type: "customCanvas", + name: "mask-rect-area-canvas", + get value() { + return this.canvas.value; + }, + set value(x) { + this.canvas.value = x; + }, + draw: function (ctx, node, widgetWidth, widgetY) { + + // If we are initially offscreen when created we wont have received a resize event + // Calculate it here instead + if (!node.canvasHeight) { + computeCanvasSize(node, node.size, 220, 240); + } + + const visible = true; + const t = ctx.getTransform(); + const margin = 12; + const border = 2; + const widgetHeight = node.canvasHeight; + + // Keep preview in sync when inputs are driven by links. + syncLinkedInputsToPropertiesAdvanced(node); + + const width = Math.max(1, Math.round(node.properties["width"])); + const height = Math.max(1, Math.round(node.properties["height"])); + const scale = Math.min( + (widgetWidth - margin * 3) / width, + (widgetHeight - margin * 3) / height + ); + const blurRadius = node.properties["blur_radius"] || 0; + const index = 0; + + Object.assign(this.canvas.style, { + left: `${t.e}px`, + top: `${t.f + (widgetY * t.d)}px`, + width: `${widgetWidth * t.a}px`, + height: `${widgetHeight * t.d}px`, + position: "absolute", + zIndex: 1, + fontSize: `${t.d * 10.0}px`, + pointerEvents: "none" + }); + + this.canvas.hidden = !visible; + + let backgroundWidth = width * scale; + let backgroundHeight = height * scale; + + let xOffset = margin; + if (backgroundWidth < widgetWidth) { + xOffset += (widgetWidth - backgroundWidth) / 2 - margin; + } + let yOffset = (margin / 2); + if (backgroundHeight < widgetHeight) { + yOffset += (widgetHeight - backgroundHeight) / 2 - margin; + } + + let widgetX = xOffset; + widgetY = widgetY + yOffset; + + // Draw the background border + ctx.fillStyle = globalThis.LiteGraph.WIDGET_OUTLINE_COLOR; + ctx.fillRect(widgetX - border, widgetY - border, backgroundWidth + border * 2, backgroundHeight + border * 2) + + // Draw the main background area + ctx.fillStyle = globalThis.LiteGraph.WIDGET_BGCOLOR; + ctx.fillRect(widgetX, widgetY, backgroundWidth, backgroundHeight); + + // Draw the conditioning zone + let [x, y, w, h] = getDrawArea(node, backgroundWidth, backgroundHeight); + + ctx.fillStyle = getDrawColor(0, "80"); + ctx.fillRect(widgetX + x, widgetY + y, w, h); + ctx.beginPath(); + ctx.lineWidth = 1; + + // Draw grid lines + for (let x = 0; x <= width / 64; x += 1) { + ctx.moveTo(widgetX + x * 64 * scale, widgetY); + ctx.lineTo(widgetX + x * 64 * scale, widgetY + backgroundHeight); + } + + for (let y = 0; y <= height / 64; y += 1) { + ctx.moveTo(widgetX, widgetY + y * 64 * scale); + ctx.lineTo(widgetX + backgroundWidth, widgetY + y * 64 * scale); + } + + ctx.strokeStyle = "#66666650"; + ctx.stroke(); + ctx.closePath(); + + // Draw current zone + let [sx, sy, sw, sh] = getDrawArea(node, backgroundWidth, backgroundHeight); + + ctx.fillStyle = getDrawColor(0, "80"); + ctx.fillRect(widgetX + sx, widgetY + sy, sw, sh); + + ctx.fillStyle = getDrawColor(0, "40"); + ctx.fillRect(widgetX + sx + border, widgetY + sy + border, sw - border * 2, sh - border * 2); + + // Draw white border around the current zone + ctx.strokeStyle = globalThis.LiteGraph.NODE_SELECTED_TITLE_COLOR; + ctx.lineWidth = 2; + ctx.strokeRect(widgetX + sx, widgetY + sy, sw, sh); + + // Display + ctx.beginPath(); + + ctx.arc(LiteGraph.NODE_SLOT_HEIGHT * 0.5, LiteGraph.NODE_SLOT_HEIGHT * (index + 0.5) + 4, 4, 0, Math.PI * 2); + ctx.fill(); + + ctx.lineWidth = 1; + ctx.strokeStyle = "white"; + ctx.stroke(); + + ctx.lineWidth = 1; + ctx.closePath(); + + // Draw progress bar canvas + if (backgroundWidth < widgetWidth) { + xOffset += (widgetWidth - backgroundWidth) / 2 - margin; + } + + // Adjust X and Y coordinates + const barHeight = 8; + let widgetYBar = widgetY + backgroundHeight + margin; + + // Draw the border around the progress bar + ctx.fillStyle = globalThis.LiteGraph.WIDGET_OUTLINE_COLOR; + ctx.fillRect( + widgetX - border, + widgetYBar - border, + backgroundWidth + border * 2, + barHeight + border * 2 + ); + + // Draw the main bar area (background) + ctx.fillStyle = globalThis.LiteGraph.WIDGET_BGCOLOR; + ctx.fillRect( + widgetX, + widgetYBar, + backgroundWidth, + barHeight + ); + + // Draw progress bar grid + ctx.beginPath(); + ctx.lineWidth = 1; + ctx.strokeStyle = "#66666650"; + + // Calculate the number of grid lines based on the bar size + const numLines = Math.floor(backgroundWidth / 64); + + // Draw grid lines + for (let x = 0; x <= width / 64; x += 1) { + ctx.moveTo(widgetX + x * 64 * scale, widgetYBar); + ctx.lineTo(widgetX + x * 64 * scale, widgetYBar + barHeight); + } + ctx.stroke(); + ctx.closePath(); + + // Draw progress (based on blur_radius) + const progress = Math.min(blurRadius / 255, 1); + ctx.fillStyle = "rgba(0, 120, 255, 0.5)"; + + ctx.fillRect( + widgetX, + widgetYBar, + backgroundWidth * progress, + barHeight + ); + } + }; + + widget.canvas = document.createElement("canvas"); + widget.canvas.className = "mask-rect-area-canvas"; + widget.parent = node; + + widget.computeLayoutSize = function (node) { + return { + minHeight: 200, + maxHeight: 300 + }; + }; + + document.body.appendChild(widget.canvas); + node.addCustomWidget(widget); + + app.canvas.onDrawBackground = function () { + // Draw node isnt fired once the node is off the screen + // if it goes off screen quickly, the input may not be removed + // this shifts it off screen so it can be moved back if the node is visible. + for (let n in app.graph._nodes) { + n = app.graph._nodes[n]; + for (let w in n.widgets) { + let wid = n.widgets[w]; + if (Object.hasOwn(wid, "canvas")) { + wid.canvas.style.left = -8000 + "px"; + wid.canvas.style.position = "absolute"; + } + } + } + }; + + node.onResize = function (size) { + computeCanvasSize(node, size, 220, 240); + }; + + return {minWidth: 200, minHeight: 200, widget}; +} + +app.registerExtension({ + name: "drltdata.MaskRectAreaAdvanced", + async beforeRegisterNodeDef(nodeType, nodeData, app) { + if (nodeData.name !== "MaskRectAreaAdvanced") { + return; + } + + const onNodeCreated = nodeType.prototype.onNodeCreated; + nodeType.prototype.onNodeCreated = function () { + const r = onNodeCreated ? onNodeCreated.apply(this, arguments) : undefined; + + this.setProperty("width", 512); + this.setProperty("height", 512); + this.setProperty("x", 0); + this.setProperty("y", 0); + this.setProperty("w", 256); + this.setProperty("h", 256); + this.setProperty("blur_radius", 0); + + this.selected = false; + this.index = 3; + this.serialize_widgets = true; + + // If the node already provides widgets from Python/ComfyUI, do NOT recreate them + const hasExisting = Array.isArray(this.widgets) && this.widgets.some(w => w && w.name === "x"); + + // Helper: attach callbacks to existing widgets to keep node.properties in sync (canvas preview). + const hookWidget = (node, widgetName, propName, opts) => { + if (!Array.isArray(node.widgets)) { + return; + } + const w = node.widgets.find(ww => ww && ww.name === widgetName); + if (!w) { + return; + } + + const min = (opts && typeof opts.min === "number") ? opts.min : undefined; + const max = (opts && typeof opts.max === "number") ? opts.max : undefined; + const step = (opts && typeof opts.step === "number") ? opts.step : undefined; + + if (node.properties && Object.prototype.hasOwnProperty.call(node.properties, propName)) { + w.value = node.properties[propName]; + } else { + node.properties[propName] = w.value; + } + + const prevCb = w.callback; + w.callback = function (v, ...args) { + let val = v; + if (typeof val === "number") { + if (typeof step === "number" && step > 0) { + const s = step / 10; + val = Math.round(val / s) * s; + } else { + val = Math.round(val); + } + if (typeof min === "number") { + val = Math.max(min, val); + } + if (typeof max === "number") { + val = Math.min(max, val); + } + } + this.value = val; + node.properties[propName] = val; + if (prevCb) { + return prevCb.call(this, val, ...args); + } + }; + }; + + if (hasExisting) { + hookWidget(this, "x", "x", {"step": 10}); + hookWidget(this, "y", "y", {"step": 10}); + hookWidget(this, "width", "w", {"step": 10}); + hookWidget(this, "height", "h", {"step": 10}); + hookWidget(this, "image_width", "width", {"step": 10}); + hookWidget(this, "image_height", "height", {"step": 10}); + hookWidget(this, "blur_radius", "blur_radius", {"min": 0, "max": 255, "step": 10}); + } else { + CUSTOM_INT(this, "x", 0, function (v, _, node) { + const s = this.options.step / 10; + this.value = Math.round(v / s) * s; + node.properties["x"] = this.value; + }); + CUSTOM_INT(this, "y", 0, function (v, _, node) { + const s = this.options.step / 10; + this.value = Math.round(v / s) * s; + node.properties["y"] = this.value; + }); + CUSTOM_INT(this, "width", 256, function (v, _, node) { + const s = this.options.step / 10; + this.value = Math.round(v / s) * s; + node.properties["w"] = this.value; + }); + CUSTOM_INT(this, "height", 256, function (v, _, node) { + const s = this.options.step / 10; + this.value = Math.round(v / s) * s; + node.properties["h"] = this.value; + }); + CUSTOM_INT(this, "image_width", 512, function (v, _, node) { + const s = this.options.step / 10; + this.value = Math.round(v / s) * s; + node.properties["width"] = this.value; + }); + CUSTOM_INT(this, "image_height", 512, function (v, _, node) { + const s = this.options.step / 10; + this.value = Math.round(v / s) * s; + node.properties["height"] = this.value; + }); + CUSTOM_INT(this, "blur_radius", 0, function (v, _, node) { + this.value = Math.round(v) || 0; + node.properties["blur_radius"] = this.value; + }, + {"min": 0, "max": 255, "step": 10} + ); + } + + showPreviewCanvas(this, app); + + this.onSelected = function () { + this.selected = true; + }; + this.onDeselected = function () { + this.selected = false; + }; + + return r; + }; + } +}); + +// Calculate the drawing area using individual properties. +function getDrawArea(node, backgroundWidth, backgroundHeight) { + let x = node.properties["x"] * backgroundWidth / node.properties["width"]; + let y = node.properties["y"] * backgroundHeight / node.properties["height"]; + let w = node.properties["w"] * backgroundWidth / node.properties["width"]; + let h = node.properties["h"] * backgroundHeight / node.properties["height"]; + + if (x > backgroundWidth) { + x = backgroundWidth; + } + if (y > backgroundHeight) { + y = backgroundHeight; + } + + if (x + w > backgroundWidth) { + w = Math.max(0, backgroundWidth - x); + } + + if (y + h > backgroundHeight) { + h = Math.max(0, backgroundHeight - y); + } + + return [x, y, w, h]; +} + +function CUSTOM_INT(node, inputName, val, func, config = {}) { + return { + widget: node.addWidget( + "number", + inputName, + val, + func, + Object.assign({}, {min: 0, max: 4096, step: 640, precision: 0}, config) + ) + }; +} + +function syncLinkedInputsToPropertiesAdvanced(node) { + let changed = false; + + const vx = readLinkedNumber(node, "x"); + if (vx != null) { + const nv = Math.max(0, Math.round(vx)); + if (node.properties["x"] !== nv) { + node.properties["x"] = nv; + changed = true; + } + } + + const vy = readLinkedNumber(node, "y"); + if (vy != null) { + const nv = Math.max(0, Math.round(vy)); + if (node.properties["y"] !== nv) { + node.properties["y"] = nv; + changed = true; + } + } + + // Input "width" is the rectangle width in px -> property "w" + const vw = readLinkedNumber(node, "width"); + if (vw != null) { + const nv = Math.max(0, Math.round(vw)); + if (node.properties["w"] !== nv) { + node.properties["w"] = nv; + changed = true; + } + } + + // Input "height" is the rectangle height in px -> property "h" + const vh = readLinkedNumber(node, "height"); + if (vh != null) { + const nv = Math.max(0, Math.round(vh)); + if (node.properties["h"] !== nv) { + node.properties["h"] = nv; + changed = true; + } + } + + // Image size (must be >=1 to avoid division by zero in getDrawArea) + const viw = readLinkedNumber(node, "image_width"); + if (viw != null) { + const nv = Math.max(1, Math.round(viw)); + if (node.properties["width"] !== nv) { + node.properties["width"] = nv; + changed = true; + } + } + + const vih = readLinkedNumber(node, "image_height"); + if (vih != null) { + const nv = Math.max(1, Math.round(vih)); + if (node.properties["height"] !== nv) { + node.properties["height"] = nv; + changed = true; + } + } + + const vbr = readLinkedNumber(node, "blur_radius"); + if (vbr != null) { + const nv = Math.max(0, Math.min(255, Math.round(vbr))); + if (node.properties["blur_radius"] !== nv) { + node.properties["blur_radius"] = nv; + changed = true; + } + } + + return changed; +} + diff --git a/comfyui-impact-pack/js/mask-rect-area.js b/comfyui-impact-pack/js/mask-rect-area.js new file mode 100644 index 0000000000000000000000000000000000000000..309096bb1c70ddd61adcc1b88c47e543ecf8f9d0 --- /dev/null +++ b/comfyui-impact-pack/js/mask-rect-area.js @@ -0,0 +1,494 @@ +import { app } from "../../scripts/app.js"; +import { readLinkedNumber, getDrawColor, computeCanvasSize } from "./common.js"; +function showPreviewCanvas(node, app) { + + const widget = { + type: "customCanvas", + name: "mask-rect-area-canvas", + get value() { + return this.canvas.value; + }, + set value(x) { + this.canvas.value = x; + }, + draw: function (ctx, node, widgetWidth, widgetY) { + + // If we are initially offscreen when created we wont have received a resize event + // Calculate it here instead + if (!node.canvasHeight) { + computeCanvasSize(node, node.size, 200, 200); + } + + const visible = true; + const t = ctx.getTransform(); + const margin = 12; + const border = 2; + const widgetHeight = node.canvasHeight; + const width = 512; + const height = 512; + const scale = Math.min((widgetWidth - margin * 3) / width, (widgetHeight - margin * 3) / height); + const blurRadius = node.properties["blur_radius"] || 0; + const index = 0; + + Object.assign(this.canvas.style, { + left: `${t.e}px`, + top: `${t.f + (widgetY * t.d)}px`, + width: `${widgetWidth * t.a}px`, + height: `${widgetHeight * t.d}px`, + position: "absolute", + zIndex: 1, + fontSize: `${t.d * 10.0}px`, + pointerEvents: "none" + }); + + this.canvas.hidden = !visible; + + let backgroundWidth = width * scale; + let backgroundHeight = height * scale; + let xOffset = margin; + if (backgroundWidth < widgetWidth) { + xOffset += (widgetWidth - backgroundWidth) / 2 - margin; + } + let yOffset = (margin / 2); + if (backgroundHeight < widgetHeight) { + yOffset += (widgetHeight - backgroundHeight) / 2 - margin; + } + + let widgetX = xOffset; + widgetY = widgetY + yOffset; + + // Draw the background border + ctx.fillStyle = globalThis.LiteGraph.WIDGET_OUTLINE_COLOR; + ctx.fillRect(widgetX - border, widgetY - border, backgroundWidth + border * 2, backgroundHeight + border * 2); + + // Draw the main background area + ctx.fillStyle = globalThis.LiteGraph.WIDGET_BGCOLOR; + ctx.fillRect(widgetX, widgetY, backgroundWidth, backgroundHeight); + + // Keep preview in sync when inputs are driven by links. + syncLinkedInputsToProperties(node); + + // Draw the conditioning zone + let [x, y, w, h] = getDrawArea(node, backgroundWidth, backgroundHeight); + + ctx.fillStyle = getDrawColor(0, "80"); + ctx.fillRect(widgetX + x, widgetY + y, w, h); + ctx.beginPath(); + ctx.lineWidth = 1; + + // Draw grid lines + for (let x = 0; x <= width / 64; x += 1) { + ctx.moveTo(widgetX + x * 64 * scale, widgetY); + ctx.lineTo(widgetX + x * 64 * scale, widgetY + backgroundHeight); + } + + for (let y = 0; y <= height / 64; y += 1) { + ctx.moveTo(widgetX, widgetY + y * 64 * scale); + ctx.lineTo(widgetX + backgroundWidth, widgetY + y * 64 * scale); + } + + ctx.strokeStyle = "#66666650"; + ctx.stroke(); + ctx.closePath(); + + // Draw current zone + let [sx, sy, sw, sh] = getDrawArea(node, backgroundWidth, backgroundHeight); + + ctx.fillStyle = getDrawColor(0, "80"); + ctx.fillRect(widgetX + sx, widgetY + sy, sw, sh); + + ctx.fillStyle = getDrawColor(0, "40"); + ctx.fillRect(widgetX + sx + border, widgetY + sy + border, sw - border * 2, sh - border * 2); + + // Draw white border around the current zone + ctx.strokeStyle = globalThis.LiteGraph.NODE_SELECTED_TITLE_COLOR; + ctx.lineWidth = 2; + ctx.strokeRect(widgetX + sx, widgetY + sy, sw, sh); + + // Display + ctx.beginPath(); + + ctx.arc(LiteGraph.NODE_SLOT_HEIGHT * 0.5, LiteGraph.NODE_SLOT_HEIGHT * (index + 0.5) + 4, 4, 0, Math.PI * 2); + ctx.fill(); + + ctx.lineWidth = 1; + ctx.strokeStyle = "white"; + ctx.stroke(); + ctx.lineWidth = 1; + ctx.closePath(); + + // Draw progress bar canvas + if (backgroundWidth < widgetWidth) { + xOffset += (widgetWidth - backgroundWidth) / 2 - margin; + } + + const barHeight = 8; + let widgetYBar = widgetY + backgroundHeight + margin; + + // Draw progress bar border + ctx.fillStyle = globalThis.LiteGraph.WIDGET_OUTLINE_COLOR; + ctx.fillRect( + widgetX - border, + widgetYBar - border, + backgroundWidth + border * 2, + barHeight + border * 2 + ); + + // Draw progress bar area + ctx.fillStyle = globalThis.LiteGraph.WIDGET_BGCOLOR; // Mismo color de fondo que el canvas + ctx.fillRect( + widgetX, + widgetYBar, + backgroundWidth, + barHeight + ); + + // Draw progress bar grid + ctx.beginPath(); + ctx.lineWidth = 1; + ctx.strokeStyle = "#66666650"; + + // Determine max lines + const numLines = Math.floor(backgroundWidth / 64); + + // Draw progress bar grid + for (let x = 0; x <= width / 64; x += 1) { + ctx.moveTo(widgetX + x * 64 * scale, widgetYBar); + ctx.lineTo(widgetX + x * 64 * scale, widgetYBar + barHeight); + } + ctx.stroke(); + ctx.closePath(); + + // Draw progress bar + const progress = Math.min(blurRadius / 255, 1); + ctx.fillStyle = "rgba(0, 120, 255, 0.5)"; + + ctx.fillRect( + widgetX, + widgetYBar, + backgroundWidth * progress, + barHeight + ); + } + }; + + widget.canvas = document.createElement("canvas"); + widget.canvas.className = "mask-rect-area-canvas"; + widget.parent = node; + + widget.computeLayoutSize = function (node) { + return { + minHeight: 200, + maxHeight: 300 + }; + }; + + document.body.appendChild(widget.canvas); + node.addCustomWidget(widget); + + app.canvas.onDrawBackground = function () { + // Draw node isnt fired once the node is off the screen + // if it goes off screen quickly, the input may not be removed + // this shifts it off screen so it can be moved back if the node is visible. + for (let n in app.graph._nodes) { + n = app.graph._nodes[n]; + for (let w in n.widgets) { + let wid = n.widgets[w]; + if (Object.hasOwn(wid, "canvas")) { + wid.canvas.style.left = -8000 + "px"; + wid.canvas.style.position = "absolute"; + } + } + } + }; + + node.onResize = function (size) { + computeCanvasSize(node, size, 200, 200); + }; + + return {minWidth: 200, minHeight: 200, widget}; +} + +app.registerExtension({ + name: 'drltdata.MaskRectArea', + async beforeRegisterNodeDef(nodeType, nodeData, app) { + if (nodeData.name !== "MaskRectArea") { + return; + } + + const onNodeCreated = nodeType.prototype.onNodeCreated; + nodeType.prototype.onNodeCreated = function () { + const r = onNodeCreated ? onNodeCreated.apply(this, arguments) : undefined; + + this.setProperty("width", 512); + this.setProperty("height", 512); + this.setProperty("x", 0); + this.setProperty("y", 0); + this.setProperty("w", 50); + this.setProperty("h", 50); + this.setProperty("blur_radius", 0); + + this.selected = false; + this.index = 3; + this.serialize_widgets = true; + + // If Python/ComfyUI already created typed widgets, do not recreate them (avoid duplicates). + const hasExisting = Array.isArray(this.widgets) && this.widgets.some(w => w && w.name === "x"); + + // Hook existing widgets to keep node.properties in sync (canvas uses properties). + const hookWidget = (node, widgetName, propName, opts) => { + if (!Array.isArray(node.widgets)) { + return; + } + const w = node.widgets.find(ww => ww && ww.name === widgetName); + if (!w) { + return; + } + + const min = (opts && typeof opts.min === "number") ? opts.min : undefined; + const max = (opts && typeof opts.max === "number") ? opts.max : undefined; + + if (node.properties && Object.prototype.hasOwnProperty.call(node.properties, propName)) { + w.value = node.properties[propName]; + } else { + node.properties[propName] = w.value; + } + + const prevCb = w.callback; + w.callback = function (v, ...args) { + let val = v; + + if (typeof val === "number") { + val = Math.round(val); + + if (typeof min === "number") { + val = Math.max(min, val); + } + if (typeof max === "number") { + val = Math.min(max, val); + } + } + + this.value = val; + node.properties[propName] = val; + + if (prevCb) { + return prevCb.call(this, val, ...args); + } + }; + }; + + if (hasExisting) { + // Note: "width"/"height" widgets map to "w"/"h" properties (percent-based). + hookWidget(this, "x", "x", {"min": 0, "max": 100}); + hookWidget(this, "y", "y", {"min": 0, "max": 100}); + hookWidget(this, "width", "w", {"min": 0, "max": 100}); + hookWidget(this, "height", "h", {"min": 0, "max": 100}); + hookWidget(this, "blur_radius", "blur_radius", {"min": 0, "max": 255}); + } else { + CUSTOM_INT(this, "x", 0, function (v, _, node) { + this.value = Math.max(0, Math.min(100, Math.round(v))); + node.properties["x"] = this.value; + }); + CUSTOM_INT(this, "y", 0, function (v, _, node) { + this.value = Math.max(0, Math.min(100, Math.round(v))); + node.properties["y"] = this.value; + }); + CUSTOM_INT(this, "w", 50, function (v, _, node) { + this.value = Math.max(0, Math.min(100, Math.round(v))); + node.properties["w"] = this.value; + }); + CUSTOM_INT(this, "h", 50, function (v, _, node) { + this.value = Math.max(0, Math.min(100, Math.round(v))); + node.properties["h"] = this.value; + }); + CUSTOM_INT(this, "blur_radius", 0, function (v, _, node) { + this.value = Math.round(v) || 0; + node.properties["blur_radius"] = this.value; + }, {"min": 0, "max": 255, "step": 10}); + + // If Python widgets exist, they will be used instead; this is back-compat only. + } + + showPreviewCanvas(this, app); + + // Sync linked input values -> node.properties so the preview updates when driven by connections. + const prevOnExecute = this.onExecute; + this.onExecute = function () { + const rr = prevOnExecute ? prevOnExecute.apply(this, arguments) : undefined; + + const readLinkedInt = (inputName) => { + if (!Array.isArray(this.inputs)) { + return null; + } + const inp = this.inputs.find(i => i && i.name === inputName); + if (!inp || !inp.link) { + return null; + } + try { + const v = this.getInputData(inputName); + return (typeof v === "number") ? v : null; + } catch (e) { + return null; + } + }; + + let changed = false; + + const vx = readLinkedInt("x"); + if (vx != null) { + const nv = Math.max(0, Math.min(100, Math.round(vx))); + if (this.properties["x"] !== nv) { + this.properties["x"] = nv; + changed = true; + } + } + + const vy = readLinkedInt("y"); + if (vy != null) { + const nv = Math.max(0, Math.min(100, Math.round(vy))); + if (this.properties["y"] !== nv) { + this.properties["y"] = nv; + changed = true; + } + } + + const vw = readLinkedInt("width"); + if (vw != null) { + const nv = Math.max(0, Math.min(100, Math.round(vw))); + if (this.properties["w"] !== nv) { + this.properties["w"] = nv; + changed = true; + } + } + + const vh = readLinkedInt("height"); + if (vh != null) { + const nv = Math.max(0, Math.min(100, Math.round(vh))); + if (this.properties["h"] !== nv) { + this.properties["h"] = nv; + changed = true; + } + } + + const vbr = readLinkedInt("blur_radius"); + if (vbr != null) { + const nv = Math.max(0, Math.min(255, Math.round(vbr))); + if (this.properties["blur_radius"] !== nv) { + this.properties["blur_radius"] = nv; + changed = true; + } + } + + if (changed) { + this.setDirtyCanvas(true, true); + if (this.graph) { + this.graph.setDirtyCanvas(true, true); + } + } + + return rr; + }; + + this.onSelected = function () { + this.selected = true; + }; + this.onDeselected = function () { + this.selected = false; + }; + + return r; + }; + } +}); + + +// Calculate the drawing area using percentage-based properties. +function getDrawArea(node, backgroundWidth, backgroundHeight) { + // Convert percentages to actual pixel values based on the background dimensions + let x = (node.properties["x"] / 100) * backgroundWidth; + let y = (node.properties["y"] / 100) * backgroundHeight; + let w = (node.properties["w"] / 100) * backgroundWidth; + let h = (node.properties["h"] / 100) * backgroundHeight; + + // Ensure the values do not exceed the background boundaries + if (x > backgroundWidth) { + x = backgroundWidth; + } + if (y > backgroundHeight) { + y = backgroundHeight; + } + + // Adjust width and height to fit within the background dimensions + if (x + w > backgroundWidth) { + w = Math.max(0, backgroundWidth - x); + } + if (y + h > backgroundHeight) { + h = Math.max(0, backgroundHeight - y); + } + + return [x, y, w, h]; +} + +function CUSTOM_INT(node, inputName, val, func, config = {}) { + return { + widget: node.addWidget( + "number", + inputName, + val, + func, + Object.assign({}, {min: 0, max: 100, step: 10, precision: 0}, config) + ) + }; +} + +function syncLinkedInputsToProperties(node) { + let changed = false; + + const vx = readLinkedNumber(node, "x"); + if (vx != null) { + const nv = Math.max(0, Math.min(100, Math.round(vx))); + if (node.properties["x"] !== nv) { + node.properties["x"] = nv; + changed = true; + } + } + + const vy = readLinkedNumber(node, "y"); + if (vy != null) { + const nv = Math.max(0, Math.min(100, Math.round(vy))); + if (node.properties["y"] !== nv) { + node.properties["y"] = nv; + changed = true; + } + } + + const vw = readLinkedNumber(node, "width"); + if (vw != null) { + const nv = Math.max(0, Math.min(100, Math.round(vw))); + if (node.properties["w"] !== nv) { + node.properties["w"] = nv; + changed = true; + } + } + + const vh = readLinkedNumber(node, "height"); + if (vh != null) { + const nv = Math.max(0, Math.min(100, Math.round(vh))); + if (node.properties["h"] !== nv) { + node.properties["h"] = nv; + changed = true; + } + } + + const vbr = readLinkedNumber(node, "blur_radius"); + if (vbr != null) { + const nv = Math.max(0, Math.min(255, Math.round(vbr))); + if (node.properties["blur_radius"] !== nv) { + node.properties["blur_radius"] = nv; + changed = true; + } + } + + return changed; +} diff --git a/comfyui-impact-pack/latent.png b/comfyui-impact-pack/latent.png new file mode 100644 index 0000000000000000000000000000000000000000..19fed324a25a7e1a2252400e7752ce5586742429 Binary files /dev/null and b/comfyui-impact-pack/latent.png differ diff --git a/comfyui-impact-pack/locales/ko/nodeDefs.json b/comfyui-impact-pack/locales/ko/nodeDefs.json new file mode 100644 index 0000000000000000000000000000000000000000..1626d6cb14c1defb57640264d02ad7e968a42483 --- /dev/null +++ b/comfyui-impact-pack/locales/ko/nodeDefs.json @@ -0,0 +1,1241 @@ +{ + "FaceDetailer": { + "description": "감지 모델(bbox, segm, sam) 모델을 이용해서 입력 이미지에서 자동으로 특정 객체를 감지하고, 감지 영역을 가이드 크기를 기반으로 확대해서 인페이트하는 방법으로 디테일을 강화합니다.\n사용자들이 자주 사용하는 얼굴 디테일 강화 워크플로를 단순화하기 위해 특화 시킨 노드이긴 하지만, 감지 모델에 따라서 다양한 자동 인페인트 용도로 사용 가능합니다.", + "display_name": "얼굴 디테일러", + "inputs": { + "image": { + "name": "이미지" + }, + "model": { + "name": "모델", + "tooltip": "만약 `ImpactDummyInput` 을 연결 하면, 인페인트 단계를 건너 뜁니다." + }, + "guide_size": { + "name": "가이드 크기", + "tooltip": "'가이드 크기 대상'으로 지정된 크기의 가장 짧은면을 이 크기까지 확대합니다." + }, + "guide_size_for": { + "name": "가이드 크기 대상", + "tooltip": "bbox: 감지된 사각 영역(bbox)\ncrop_region: 잘라낸 영역" + }, + "max_size": { + "name": "최대 크기", + "tooltip": "'가이드 크기'로 확대 할 때, 가장 긴 면의 길이를 이 크기로 제한합니다. 너무 크게 확대 되는 것을 막아줍니다." + }, + "seed": { + "name": "시드" + }, + "steps": { + "name": "스텝수" + }, + "sampler_name": { + "name": "샘플러 이름" + }, + "scheduler": { + "name": "스케쥴러" + }, + "positive": { + "name": "긍정 조건" + }, + "negative": { + "name": "부정 조건" + }, + "denoise": { + "name": "노이즈 제거양" + }, + "feather": { + "name": "가장자리 흐림", + "tooltip": "확대 해서 인페인트 된 이미지를 원본 이미지에 붙여넣을 때, 이 수치로 마스크의 가장 자리를 흐리게 해서 붙여넣어 이음매의 위화감을 줄여줍니다." + }, + "noise_mask": { + "name": "노이즈 마스크 사용", + "tooltip": "인페인트 할 때, 마스크를 적용해서 마스크 영역만 인페인트합니다. 이 옵션을 적용하지 않으면, 잘라낸 이미지 전체가 재생성되어 노이즈 제거양이 클 때 위화감이 나타나게 됩니다." + }, + "force_inpaint": { + "name": "인페인트 강제 적용", + "tooltip": "가이드 크기와 상관 없이 인페인팅을 무조건 적용 합니다. 이 옵션이 꺼져있는 경우 가이드 크기보다 이미 큰 감지 영역은 인페인팅을 건너 뜁니다." + }, + "bbox_threshold": { + "name": "bbox 감지 임계치", + "tooltip": "사각 영역(bbox) 감지 모델의 최소 감지 임계치를 설정합니다. 임계치가 높을수록 확실한 객체만 감지하지만, 객체를 감지하지 못할 확률이 증가합니다." + }, + "bbox_dilation": { + "name": "bbox 확장", + "tooltip": "감지된 사각 영역(bbox)을 확장 합니다. 이 옵션은 감지된 영역보다 더 넓은 영역을 인페인트 할 경우 사용합니다.\n주의: sam 모델을 사용할 경우 잘라낸 영역내에서 bbox 확장을 하더라도, sam 감지 영역이 작으면 여전히 제한됩니다." + }, + "bbox_crop_factor": { + "name": "bbox 자르기 배율", + "tooltip": "감지된 사각 영역(bbox)의 몇배 크기의 영역을 잘라낼 것 인지를 설정합니다. 이 크기가 너무 작으면, 인페인트 할 이미지의 주변 정보가 부족해서 위화감이 강한 이미지가 생성됩니다. 이 크기가 너무 크면, 인페인팅에 너무 오랜 시간이 걸릴 수 있으며, 모델의 역량을 초과할 정도로 클 경우 올바르지 않은 이미지를 생성하게 됩니다." + }, + "sam_detection_hint": { + "name": "sam 감지 힌트", + "tooltip": "[실험기능] 오래된 실험 기능으로, sam 모델의 감지 힌트를 제공하는 방식입니다. cetner-1 (중앙점 1개) 외에는 사용하지 않을 것을 권장합니다." + }, + "sam_dilation": { + "name": "sam 마스크 확장", + "tooltip": "sam 모델로 감지된 실루엣 마스크를 확장합니다." + }, + "sam_threshold": { + "name": "sam 감지 임계치", + "tooltip": "sam 모델의 최소 감지 임계치를 설정합니다. 임계치가 높을수록 확실한 객체만 감지하지만, 객체를 감지하지 못할 확률이 증가합니다." + }, + "sam_bbox_expansion": { + "name": "sam 영역 확장", + "tooltip": "sam 의 감지 영역을 확장합니다. 감지 영역은 마스크를 포함하는 전체 사각 영역입니다.\n주의1:sam 마스크를 확장하더라도, 감지 영역을 벗어날 수 없습니다.\n주의2: bbox 확장을 하더라도, sam 감지 영역이 작으면 여전히 제한됩니다." + }, + "sam_mask_hint_threshold": { + "name": "sam 마스크 힌트 임계치", + "tooltip": "[실험기능] 오래된 실험 기능으로, mask-hint 모드에서만 사용되는 옵션으로, 마스크에서 이 크기 이상의 점 마스크를 sam의 힌트로 사용합니다." + }, + "sam_mask_hint_use_negative": { + "name": "sam 마스크 힌트에 제외 힌트 사용", + "tooltip": "[실험기능] 오래된 실험 기능으로, mask-hitn 모드에서만 사용되는 옵션으로, sam 마스크 힌트 임계치보다 작은 점 마스크를 sam의 제외 힌트로 사용합니다." + }, + "drop_size": { + "name": "감지 최소 크기", + "tooltip": "사각 영역(bbox) 감지기로 감지한 크기가 이 설정값 보다 작을 경우 무시합니다." + }, + "bbox_detector": { + "name": "bbox 감지기", + "tooltip": "디테일 개선 대상을 자동으로 감지해주는 사각 영역(bbox) 감지기 입력.\n이 감지기로 감지된 감지 정보가 기준 정보입니다." + }, + "wildcard": { + "name": "와일드카드 프롬프트", + "tooltip": "'와일드카드 인코더 (Impact)'와 유사한 기능을 수행하여, 와일드카드 기능과 로라 로딩 기능을 제공합니다. 또한, 감지된 영역별로 다른 프롬프트를 적용하는 기능들을 제공합니다.\n더 자세한 정보는 튜토리얼 페이지를 참고하세요.\n주의:이 입력을 비워두면, 이 입력은 무시됩니다." + }, + "cycle": { + "name": "반복수", + "tooltip": "설정된 값만큼 인페인팅을 반복 적용합니다. 인코딩/디코딩 없이 확대된 잠재 이미지 단계에서 반복됩니다." + }, + "sam_model_opt": { + "name": "sam 모델", + "tooltip": "이 모델을 제공할 경우 sam 모델을 감지 보조 모델로 사용합니다. bbox 감지기로 감지된 사각 영역에 sam 모델을 적용해서 정교한 실루엣 마스크를 생성합니다.\n주의: 이 입력이 연결될 경우 segm 감지기는 무시됩니다." + }, + "segm_detector_opt": { + "name": "segm 감지기", + "tooltip": "이 모델을 제공할 경우 segm 모델을 감지 보조 모델로 사용합니다. bbox 감지기로 감지된 사각 영역에 segm 감지기로 감지된 실루엣 마스크를 생성합니다.\n주의: 이 입력은 sam 모델이 연결될 경우 무시됩니다." + }, + "detailer_hook": { + "name": "디테일러 후크", + "tooltip": "이 노드의 실행 중간단계에서 여러가지 기능을 수행할 수 있는 후크를 연결합니다." + }, + "inpaint_model": { + "name": "인페인트 모델 모드", + "tooltip": "인페인트 전용 모델을 사용할 경우 이 옵션을 켜면, 인페인팅시에 '인페인트 모델 조건 설정'이 적용되어 수행됩니다." + }, + "noise_mask_feather": { + "name": "노이즈 마스크 가장자리 흐림", + "tooltip": "인페인트시에 적용되는 노이즈 마스크의 가장자리를 흐리게 합니다. 이 설정값이 0을 초과할 경우, 내부적으로 자동으로 '차등 확산' 노드를 적용합니다." + }, + "scheduler_func_opt": { + "name": "스케쥴러 함수", + "tooltip": "GITS 스케쥴러 처럼 기본 스케쥴러 리스트에서 선택할 수 없는 특수 스케쥴러를 사용할 수 있게 해줍니다. 이 입력이 연결되면, 기본 스케쥴러 선택은 무시됩니다." + }, + "tiled_encode": { + "name": "타일 인코드 사용", + "tooltip": "이 옵션을 켜면, 내부적으로 'VAE 인코드'를 사용할 경우, 기본 'VAE 인코드' 대신 'VAE 인코드 (타일)' 을 적용합니다." + }, + "tiled_decode": { + "name": "타일 디코드 사용", + "tooltip": "이 옵션을 켜면, 내부적으로 'VAE 다코드'를 사용할 경우, 기본 'VAE 디코드' 대신 'VAE 디코드 (타일)' 을 적용합니다." + } + }, + "outputs": { + "0": { + "name": "개선 이미" + }, + "1": { + "name": "잘라낸 이미지" + }, + "2": { + "name": "잘라낸 투명 이미지" + }, + "3": { + "name": "마스크" + }, + "4": { + "name": "디테일러 파이프" + }, + "5": { + "name": "컨트롤넷 이미지" + } + } + }, + "FaceDetailerPipe": { + "description": "감지 모델(bbox, segm, sam) 모델을 이용해서 입력 이미지에서 자동으로 특정 객체를 감지하고, 감지 영역을 가이드 크기를 기반으로 확대해서 인페이트하는 방법으로 디테일을 강화합니다.\n사용자들이 자주 사용하는 얼굴 디테일 강화 워크플로를 단순화하기 위해 특화 시킨 노드이긴 하지만, 감지 모델에 따라서 다양한 자동 인페인트 용도로 사용 가능합니다.", + "display_name": "얼굴 디테일러 (파이프)", + "inputs": { + "image": { + "name": "이미지" + }, + "detailer_pipe": { + "name": "디테일러 파이프", + "tooltip": "만약 디테일러 파이프 내의 모델에 `ImpactDummyInput` 가 설정된 경우, 인페인트 단계를 건너 뜁니다." + }, + "guide_size": { + "name": "가이드 크기", + "tooltip": "'가이드 크기 대상'으로 지정된 크기의 가장 짧은면을 이 크기까지 확대합니다." + }, + "guide_size_for": { + "name": "가이드 크기 대상", + "tooltip": "bbox: 감지된 사각 영역(bbox)\ncrop_region: 잘라낸 영역" + }, + "max_size": { + "name": "최대 크기", + "tooltip": "'가이드 크기'로 확대 할 때, 가장 긴 면의 길이를 이 크기로 제한합니다. 너무 크게 확대 되는 것을 막아줍니다." + }, + "seed": { + "name": "시드" + }, + "steps": { + "name": "스텝수" + }, + "sampler_name": { + "name": "샘플러 이름" + }, + "scheduler": { + "name": "스케쥴러" + }, + "denoise": { + "name": "노이즈 제거양" + }, + "feather": { + "name": "가장자리 흐림", + "tooltip": "확대 해서 인페인트 된 이미지를 원본 이미지에 붙여넣을 때, 이 수치로 마스크의 가장 자리를 흐리게 해서 붙여넣어 이음매의 위화감을 줄여줍니다." + }, + "noise_mask": { + "name": "노이즈 마스크 사용", + "tooltip": "인페인트 할 때, 마스크를 적용해서 마스크 영역만 인페인트합니다. 이 옵션을 적용하지 않으면, 잘라낸 이미지 전체가 재생성되어 노이즈 제거양이 클 때 위화감이 나타나게 됩니다." + }, + "force_inpaint": { + "name": "인페인트 강제 적용", + "tooltip": "가이드 크기와 상관 없이 인페인팅을 무조건 적용 합니다. 이 옵션이 꺼져있는 경우 가이드 크기보다 이미 큰 감지 영역은 인페인팅을 건너 뜁니다." + }, + "bbox_threshold": { + "name": "bbox 감지 임계치", + "tooltip": "사각 영역(bbox) 감지 모델의 최소 감지 임계치를 설정합니다. 임계치가 높을수록 확실한 객체만 감지하지만, 객체를 감지하지 못할 확률이 증가합니다." + }, + "bbox_dilation": { + "name": "bbox 확장", + "tooltip": "감지된 사각 영역(bbox)을 확장 합니다. 이 옵션은 감지된 영역보다 더 넓은 영역을 인페인트 할 경우 사용합니다.\n주의: sam 모델을 사용할 경우 잘라낸 영역내에서 bbox 확장을 하더라도, sam 감지 영역이 작으면 여전히 제한됩니다." + }, + "bbox_crop_factor": { + "name": "bbox 자르기 배율", + "tooltip": "감지된 사각 영역(bbox)의 몇배 크기의 영역을 잘라낼 것 인지를 설정합니다. 이 크기가 너무 작으면, 인페인트 할 이미지의 주변 정보가 부족해서 위화감이 강한 이미지가 생성됩니다. 이 크기가 너무 크면, 인페인팅에 너무 오랜 시간이 걸릴 수 있으며, 모델의 역량을 초과할 정도로 클 경우 올바르지 않은 이미지를 생성하게 됩니다." + }, + "sam_detection_hint": { + "name": "sam 감지 힌트", + "tooltip": "[실험기능] 오래된 실험 기능으로, sam 모델의 감지 힌트를 제공하는 방식입니다. cetner-1 (중앙점 1개) 외에는 사용하지 않을 것을 권장합니다." + }, + "sam_dilation": { + "name": "sam 마스크 확장", + "tooltip": "sam 모델로 감지된 실루엣 마스크를 확장합니다." + }, + "sam_threshold": { + "name": "sam 감지 임계치", + "tooltip": "sam 모델의 최소 감지 임계치를 설정합니다. 임계치가 높을수록 확실한 객체만 감지하지만, 객체를 감지하지 못할 확률이 증가합니다." + }, + "sam_bbox_expansion": { + "name": "sam 영역 확장", + "tooltip": "sam 의 감지 영역을 확장합니다. 감지 영역은 마스크를 포함하는 전체 사각 영역입니다.\n주의1:sam 마스크를 확장하더라도, 감지 영역을 벗어날 수 없습니다.\n주의2: bbox 확장을 하더라도, sam 감지 영역이 작으면 여전히 제한됩니다." + }, + "sam_mask_hint_threshold": { + "name": "sam 마스크 힌트 임계치", + "tooltip": "[실험기능] 오래된 실험 기능으로, mask-hint 모드에서만 사용되는 옵션으로, 마스크에서 이 크기 이상의 점 마스크를 sam의 힌트로 사용합니다." + }, + "sam_mask_hint_use_negative": { + "name": "sam 마스크 힌트에 제외 힌트 사용", + "tooltip": "[실험기능] 오래된 실험 기능으로, mask-hitn 모드에서만 사용되는 옵션으로, sam 마스크 힌트 임계치보다 작은 점 마스크를 sam의 제외 힌트로 사용합니다." + }, + "drop_size": { + "name": "감지 최소 크기", + "tooltip": "사각 영역(bbox) 감지기로 감지한 크기가 이 설정값 보다 작을 경우 무시합니다." + }, + "refiner_ratio": { + "name": "라파이너 적용 비율", + "tooltip": "SDXL 리파이너 모델을 사용할 경우 적용될 후반 스텝수 비율을 설정합니다." + }, + "cycle": { + "name": "반복수", + "tooltip": "설정된 값만큼 인페인팅을 반복 적용합니다. 인코딩/디코딩 없이 확대된 잠재 이미지 단계에서 반복됩니다." + }, + "inpaint_model": { + "name": "인페인트 모델 모드", + "tooltip": "인페인트 전용 모델을 사용할 경우 이 옵션을 켜면, 인페인팅시에 '인페인트 모델 조건 설정'이 적용되어 수행됩니다." + }, + "noise_mask_feather": { + "name": "노이즈 마스크 가장자리 흐림", + "tooltip": "인페인트시에 적용되는 노이즈 마스크의 가장자리를 흐리게 합니다. 이 설정값이 0을 초과할 경우, 내부적으로 자동으로 '차등 확산' 노드를 적용합니다." + }, + "scheduler_func_opt": { + "name": "스케쥴러 함수", + "tooltip": "GITS 스케쥴러 처럼 기본 스케쥴러 리스트에서 선택할 수 없는 특수 스케쥴러를 사용할 수 있게 해줍니다. 이 입력이 연결되면, 기본 스케쥴러 선택은 무시됩니다." + }, + "tiled_encode": { + "name": "타일 인코드 사용", + "tooltip": "이 옵션을 켜면, 내부적으로 'VAE 인코드'를 사용할 경우, 기본 'VAE 인코드' 대신 'VAE 인코드 (타일)' 을 적용합니다." + }, + "tiled_decode": { + "name": "타일 디코드 사용", + "tooltip": "이 옵션을 켜면, 내부적으로 'VAE 다코드'를 사용할 경우, 기본 'VAE 디코드' 대신 'VAE 디코드 (타일)' 을 적용합니다." + } + }, + "outputs": { + "0": { + "name": "개선 이미" + }, + "1": { + "name": "잘라낸 이미지" + }, + "2": { + "name": "잘라낸 투명 이미지" + }, + "3": { + "name": "마스크" + }, + "4": { + "name": "디테일러 파이프" + }, + "5": { + "name": "컨트롤넷 이미지" + } + } + }, + "DetailerForEach": { + "description": "감지 영역 정보 묶음(SEGS)내의 각 영역들에 대해 가이드 크기를 기반으로 확대해서 인페이트하는 방법으로 디테일을 강화합니다.", + "display_name": "디테일러 (SEGS)", + "inputs": { + "image": { + "name": "이미지" + }, + "segs": { + "name": "segs", + "tooltip": "감지 영역 정보를 담고 있는 묶음.\n이 영역들을 대상으로 인페인트가 적용됩니다." + }, + "model": { + "name": "모델", + "tooltip": "만약 `ImpactDummyInput` 을 연결 하면, 인페인트 단계를 건너 뜁니다." + }, + "guide_size": { + "name": "가이드 크기", + "tooltip": "'가이드 크기 대상'으로 지정된 크기의 가장 짧은면을 이 크기까지 확대합니다." + }, + "guide_size_for": { + "name": "가이드 크기 대상", + "tooltip": "bbox: 감지된 사각 영역(bbox)\ncrop_region: 잘라낸 영역" + }, + "max_size": { + "name": "최대 크기", + "tooltip": "'가이드 크기'로 확대 할 때, 가장 긴 면의 길이를 이 크기로 제한합니다. 너무 크게 확대 되는 것을 막아줍니다." + }, + "seed": { + "name": "시드" + }, + "steps": { + "name": "스텝수" + }, + "sampler_name": { + "name": "샘플러 이름" + }, + "scheduler": { + "name": "스케쥴러" + }, + "positive": { + "name": "긍정 조건" + }, + "negative": { + "name": "부정 조건" + }, + "denoise": { + "name": "노이즈 제거양" + }, + "feather": { + "name": "가장자리 흐림", + "tooltip": "확대 해서 인페인트 된 이미지를 원본 이미지에 붙여넣을 때, 이 수치로 마스크의 가장 자리를 흐리게 해서 붙여넣어 이음매의 위화감을 줄여줍니다." + }, + "noise_mask": { + "name": "노이즈 마스크 사용", + "tooltip": "인페인트 할 때, 마스크를 적용해서 마스크 영역만 인페인트합니다. 이 옵션을 적용하지 않으면, 잘라낸 이미지 전체가 재생성되어 노이즈 제거양이 클 때 위화감이 나타나게 됩니다." + }, + "force_inpaint": { + "name": "인페인트 강제 적용", + "tooltip": "가이드 크기와 상관 없이 인페인팅을 무조건 적용 합니다. 이 옵션이 꺼져있는 경우 가이드 크기보다 이미 큰 감지 영역은 인페인팅을 건너 뜁니다." + }, + "wildcard": { + "name": "와일드카드 프롬프트", + "tooltip": "'와일드카드 인코더 (Impact)'와 유사한 기능을 수행하여, 와일드카드 기능과 로라 로딩 기능을 제공합니다. 또한, 감지된 영역별로 다른 프롬프트를 적용하는 기능들을 제공합니다.\n더 자세한 정보는 튜토리얼 페이지를 참고하세요.\n주의:이 입력을 비워두면, 이 입력은 무시됩니다." + }, + "cycle": { + "name": "반복수", + "tooltip": "설정된 값만큼 인페인팅을 반복 적용합니다. 인코딩/디코딩 없이 확대된 잠재 이미지 단계에서 반복됩니다." + }, + "detailer_hook": { + "name": "디테일러 후크", + "tooltip": "이 노드의 실행 중간단계에서 여러가지 기능을 수행할 수 있는 후크를 연결합니다." + }, + "inpaint_model": { + "name": "인페인트 모델 모드", + "tooltip": "인페인트 전용 모델을 사용할 경우 이 옵션을 켜면, 인페인팅시에 '인페인트 모델 조건 설정'이 적용되어 수행됩니다." + }, + "noise_mask_feather": { + "name": "노이즈 마스크 가장자리 흐림", + "tooltip": "인페인트시에 적용되는 노이즈 마스크의 가장자리를 흐리게 합니다. 이 설정값이 0을 초과할 경우, 내부적으로 자동으로 '차등 확산' 노드를 적용합니다." + }, + "scheduler_func_opt": { + "name": "스케쥴러 함수", + "tooltip": "GITS 스케쥴러 처럼 기본 스케쥴러 리스트에서 선택할 수 없는 특수 스케쥴러를 사용할 수 있게 해줍니다. 이 입력이 연결되면, 기본 스케쥴러 선택은 무시됩니다." + }, + "tiled_encode": { + "name": "타일 인코드 사용", + "tooltip": "이 옵션을 켜면, 내부적으로 'VAE 인코드'를 사용할 경우, 기본 'VAE 인코드' 대신 'VAE 인코드 (타일)' 을 적용합니다." + }, + "tiled_decode": { + "name": "타일 디코드 사용", + "tooltip": "이 옵션을 켜면, 내부적으로 'VAE 다코드'를 사용할 경우, 기본 'VAE 디코드' 대신 'VAE 디코드 (타일)' 을 적용합니다." + } + }, + "outputs": { + "0": { + "name": "개선 이미지" + } + } + }, + "DetailerForEachPipe": { + "description": "감지 영역 정보 묶음(SEGS)내의 각 영역들에 대해 가이드 크기를 기반으로 확대해서 인페이트하는 방법으로 디테일을 강화합니다.", + "display_name": "디테일러 (상세/SEGS/파이프)", + "inputs": { + "image": { + "name": "이미지" + }, + "segs": { + "name": "segs", + "tooltip": "감지 영역 정보를 담고 있는 묶음.\n이 영역들을 대상으로 인페인트가 적용됩니다." + }, + "guide_size": { + "name": "가이드 크기", + "tooltip": "'가이드 크기 대상'으로 지정된 크기의 가장 짧은면을 이 크기까지 확대합니다." + }, + "guide_size_for": { + "name": "가이드 크기 대상", + "tooltip": "bbox: 감지된 사각 영역(bbox)\ncrop_region: 잘라낸 영역" + }, + "max_size": { + "name": "최대 크기", + "tooltip": "'가이드 크기'로 확대 할 때, 가장 긴 면의 길이를 이 크기로 제한합니다. 너무 크게 확대 되는 것을 막아줍니다." + }, + "seed": { + "name": "시드" + }, + "steps": { + "name": "스텝수" + }, + "sampler_name": { + "name": "샘플러 이름" + }, + "scheduler": { + "name": "스케쥴러" + }, + "denoise": { + "name": "노이즈 제거양" + }, + "feather": { + "name": "가장자리 흐림", + "tooltip": "확대 해서 인페인트 된 이미지를 원본 이미지에 붙여넣을 때, 이 수치로 마스크의 가장 자리를 흐리게 해서 붙여넣어 이음매의 위화감을 줄여줍니다." + }, + "noise_mask": { + "name": "노이즈 마스크 사용", + "tooltip": "인페인트 할 때, 마스크를 적용해서 마스크 영역만 인페인트합니다. 이 옵션을 적용하지 않으면, 잘라낸 이미지 전체가 재생성되어 노이즈 제거양이 클 때 위화감이 나타나게 됩니다." + }, + "force_inpaint": { + "name": "인페인트 강제 적용", + "tooltip": "가이드 크기와 상관 없이 인페인팅을 무조건 적용 합니다. 이 옵션이 꺼져있는 경우 가이드 크기보다 이미 큰 감지 영역은 인페인팅을 건너 뜁니다." + }, + "basic_pipe": { + "name": "기본 파이프", + "tooltip": "만약 기본 파이프 내의 모델에 `ImpactDummyInput` 가 설정된 경우, 인페인트 단계를 건너 뜁니다." + }, + "refiner_ratio": { + "name": "라파이너 적용 비율", + "tooltip": "SDXL 리파이너 모델을 사용할 경우 적용될 후반 스텝수 비율을 설정합니다." + }, + "cycle": { + "name": "반복수", + "tooltip": "설정된 값만큼 인페인팅을 반복 적용합니다. 인코딩/디코딩 없이 확대된 잠재 이미지 단계에서 반복됩니다." + }, + "detailer_hook": { + "name": "디테일러 후크", + "tooltip": "이 노드의 실행 중간단계에서 여러가지 기능을 수행할 수 있는 후크를 연결합니다." + }, + "refiner_basic_pipe_opt": { + "name": "리파이너 기본 파이프", + "tooltip": "SDXL 리파이너 단계에 적용할 기본 파이프를 연결합니다." + }, + "inpaint_model": { + "name": "인페인트 모델 모드", + "tooltip": "인페인트 전용 모델을 사용할 경우 이 옵션을 켜면, 인페인팅시에 '인페인트 모델 조건 설정'이 적용되어 수행됩니다." + }, + "noise_mask_feather": { + "name": "노이즈 마스크 가장자리 흐림", + "tooltip": "인페인트시에 적용되는 노이즈 마스크의 가장자리를 흐리게 합니다. 이 설정값이 0을 초과할 경우, 내부적으로 자동으로 '차등 확산' 노드를 적용합니다." + }, + "scheduler_func_opt": { + "name": "스케쥴러 함수", + "tooltip": "GITS 스케쥴러 처럼 기본 스케쥴러 리스트에서 선택할 수 없는 특수 스케쥴러를 사용할 수 있게 해줍니다. 이 입력이 연결되면, 기본 스케쥴러 선택은 무시됩니다." + }, + "tiled_encode": { + "name": "타일 인코드 사용", + "tooltip": "이 옵션을 켜면, 내부적으로 'VAE 인코드'를 사용할 경우, 기본 'VAE 인코드' 대신 'VAE 인코드 (타일)' 을 적용합니다." + }, + "tiled_decode": { + "name": "타일 디코드 사용", + "tooltip": "이 옵션을 켜면, 내부적으로 'VAE 다코드'를 사용할 경우, 기본 'VAE 디코드' 대신 'VAE 디코드 (타일)' 을 적용합니다." + } + }, + "outputs": { + "0": { + "name": "개선 이미지" + }, + "1": { + "name": "segs" + }, + "2": { + "name": "기본 파이프" + }, + "3": { + "name": "컨트롤넷 이미지" + } + } + }, + "DetailerForEachDebug": { + "description": "감지 영역 정보 묶음(SEGS)내의 각 영역들에 대해 가이드 크기를 기반으로 확대해서 인페이트하는 방법으로 디테일을 강화합니다.", + "display_name": "디테일러 (상세/SEGS)", + "inputs": { + "image": { + "name": "이미지" + }, + "segs": { + "name": "segs", + "tooltip": "감지 영역 정보를 담고 있는 묶음.\n이 영역들을 대상으로 인페인트가 적용됩니다." + }, + "model": { + "name": "모델", + "tooltip": "만약 `ImpactDummyInput` 을 연결 하면, 인페인트 단계를 건너 뜁니다." + }, + "guide_size": { + "name": "가이드 크기", + "tooltip": "'가이드 크기 대상'으로 지정된 크기의 가장 짧은면을 이 크기까지 확대합니다." + }, + "guide_size_for": { + "name": "가이드 크기 대상", + "tooltip": "bbox: 감지된 사각 영역(bbox)\ncrop_region: 잘라낸 영역" + }, + "max_size": { + "name": "최대 크기", + "tooltip": "'가이드 크기'로 확대 할 때, 가장 긴 면의 길이를 이 크기로 제한합니다. 너무 크게 확대 되는 것을 막아줍니다." + }, + "seed": { + "name": "시드" + }, + "steps": { + "name": "스텝수" + }, + "sampler_name": { + "name": "샘플러 이름" + }, + "scheduler": { + "name": "스케쥴러" + }, + "positive": { + "name": "긍정 조건" + }, + "negative": { + "name": "부정 조건" + }, + "denoise": { + "name": "노이즈 제거양" + }, + "feather": { + "name": "가장자리 흐림", + "tooltip": "확대 해서 인페인트 된 이미지를 원본 이미지에 붙여넣을 때, 이 수치로 마스크의 가장 자리를 흐리게 해서 붙여넣어 이음매의 위화감을 줄여줍니다." + }, + "noise_mask": { + "name": "노이즈 마스크 사용", + "tooltip": "인페인트 할 때, 마스크를 적용해서 마스크 영역만 인페인트합니다. 이 옵션을 적용하지 않으면, 잘라낸 이미지 전체가 재생성되어 노이즈 제거양이 클 때 위화감이 나타나게 됩니다." + }, + "force_inpaint": { + "name": "인페인트 강제 적용", + "tooltip": "가이드 크기와 상관 없이 인페인팅을 무조건 적용 합니다. 이 옵션이 꺼져있는 경우 가이드 크기보다 이미 큰 감지 영역은 인페인팅을 건너 뜁니다." + }, + "wildcard": { + "name": "와일드카드 프롬프트", + "tooltip": "'와일드카드 인코더 (Impact)'와 유사한 기능을 수행하여, 와일드카드 기능과 로라 로딩 기능을 제공합니다. 또한, 감지된 영역별로 다른 프롬프트를 적용하는 기능들을 제공합니다.\n더 자세한 정보는 튜토리얼 페이지를 참고하세요.\n주의:이 입력을 비워두면, 이 입력은 무시됩니다." + }, + "cycle": { + "name": "반복수", + "tooltip": "설정된 값만큼 인페인팅을 반복 적용합니다. 인코딩/디코딩 없이 확대된 잠재 이미지 단계에서 반복됩니다." + }, + "detailer_hook": { + "name": "디테일러 후크", + "tooltip": "이 노드의 실행 중간단계에서 여러가지 기능을 수행할 수 있는 후크를 연결합니다." + }, + "inpaint_model": { + "name": "인페인트 모델 모드", + "tooltip": "인페인트 전용 모델을 사용할 경우 이 옵션을 켜면, 인페인팅시에 '인페인트 모델 조건 설정'이 적용되어 수행됩니다." + }, + "noise_mask_feather": { + "name": "노이즈 마스크 가장자리 흐림", + "tooltip": "인페인트시에 적용되는 노이즈 마스크의 가장자리를 흐리게 합니다. 이 설정값이 0을 초과할 경우, 내부적으로 자동으로 '차등 확산' 노드를 적용합니다." + }, + "scheduler_func_opt": { + "name": "스케쥴러 함수", + "tooltip": "GITS 스케쥴러 처럼 기본 스케쥴러 리스트에서 선택할 수 없는 특수 스케쥴러를 사용할 수 있게 해줍니다. 이 입력이 연결되면, 기본 스케쥴러 선택은 무시됩니다." + }, + "tiled_encode": { + "name": "타일 인코드 사용", + "tooltip": "이 옵션을 켜면, 내부적으로 'VAE 인코드'를 사용할 경우, 기본 'VAE 인코드' 대신 'VAE 인코드 (타일)' 을 적용합니다." + }, + "tiled_decode": { + "name": "타일 디코드 사용", + "tooltip": "이 옵션을 켜면, 내부적으로 'VAE 다코드'를 사용할 경우, 기본 'VAE 디코드' 대신 'VAE 디코드 (타일)' 을 적용합니다." + } + }, + "outputs": { + "0": { + "name": "개선 이미지" + }, + "1": { + "name": "잘라낸 이미지" + }, + "2": { + "name": "잘라낸 개선 이미지" + }, + "3": { + "name": "잘라낸 투명 개선 이미지" + }, + "4": { + "name": "컨트롤넷 이미지" + } + } + }, + "DetailerForEachDebugPipe": { + "description": "감지 영역 정보 묶음(SEGS)내의 각 영역들에 대해 가이드 크기를 기반으로 확대해서 인페이트하는 방법으로 디테일을 강화합니다.", + "display_name": "디테일러 (상세/SEGS/파이프)", + "inputs": { + "image": { + "name": "이미지" + }, + "segs": { + "name": "segs", + "tooltip": "감지 영역 정보를 담고 있는 묶음.\n이 영역들을 대상으로 인페인트가 적용됩니다." + }, + "guide_size": { + "name": "가이드 크기", + "tooltip": "'가이드 크기 대상'으로 지정된 크기의 가장 짧은면을 이 크기까지 확대합니다." + }, + "guide_size_for": { + "name": "가이드 크기 대상", + "tooltip": "bbox: 감지된 사각 영역(bbox)\ncrop_region: 잘라낸 영역" + }, + "max_size": { + "name": "최대 크기", + "tooltip": "'가이드 크기'로 확대 할 때, 가장 긴 면의 길이를 이 크기로 제한합니다. 너무 크게 확대 되는 것을 막아줍니다." + }, + "seed": { + "name": "시드" + }, + "steps": { + "name": "스텝수" + }, + "sampler_name": { + "name": "샘플러 이름" + }, + "scheduler": { + "name": "스케쥴러" + }, + "denoise": { + "name": "노이즈 제거양" + }, + "feather": { + "name": "가장자리 흐림", + "tooltip": "확대 해서 인페인트 된 이미지를 원본 이미지에 붙여넣을 때, 이 수치로 마스크의 가장 자리를 흐리게 해서 붙여넣어 이음매의 위화감을 줄여줍니다." + }, + "noise_mask": { + "name": "노이즈 마스크 사용", + "tooltip": "인페인트 할 때, 마스크를 적용해서 마스크 영역만 인페인트합니다. 이 옵션을 적용하지 않으면, 잘라낸 이미지 전체가 재생성되어 노이즈 제거양이 클 때 위화감이 나타나게 됩니다." + }, + "force_inpaint": { + "name": "인페인트 강제 적용", + "tooltip": "가이드 크기와 상관 없이 인페인팅을 무조건 적용 합니다. 이 옵션이 꺼져있는 경우 가이드 크기보다 이미 큰 감지 영역은 인페인팅을 건너 뜁니다." + }, + "basic_pipe": { + "name": "기본 파이프", + "tooltip": "만약 기본 파이프 내의 모델에 `ImpactDummyInput` 가 설정된 경우, 인페인트 단계를 건너 뜁니다." + }, + "refiner_ratio": { + "name": "라파이너 적용 비율", + "tooltip": "SDXL 리파이너 모델을 사용할 경우 적용될 후반 스텝수 비율을 설정합니다." + }, + "cycle": { + "name": "반복수", + "tooltip": "설정된 값만큼 인페인팅을 반복 적용합니다. 인코딩/디코딩 없이 확대된 잠재 이미지 단계에서 반복됩니다." + }, + "detailer_hook": { + "name": "디테일러 후크", + "tooltip": "이 노드의 실행 중간단계에서 여러가지 기능을 수행할 수 있는 후크를 연결합니다." + }, + "refiner_basic_pipe_opt": { + "name": "리파이너 기본 파이프", + "tooltip": "SDXL 리파이너 단계에 적용할 기본 파이프를 연결합니다." + }, + "inpaint_model": { + "name": "인페인트 모델 모드", + "tooltip": "인페인트 전용 모델을 사용할 경우 이 옵션을 켜면, 인페인팅시에 '인페인트 모델 조건 설정'이 적용되어 수행됩니다." + }, + "noise_mask_feather": { + "name": "노이즈 마스크 가장자리 흐림", + "tooltip": "인페인트시에 적용되는 노이즈 마스크의 가장자리를 흐리게 합니다. 이 설정값이 0을 초과할 경우, 내부적으로 자동으로 '차등 확산' 노드를 적용합니다." + }, + "scheduler_func_opt": { + "name": "스케쥴러 함수", + "tooltip": "GITS 스케쥴러 처럼 기본 스케쥴러 리스트에서 선택할 수 없는 특수 스케쥴러를 사용할 수 있게 해줍니다. 이 입력이 연결되면, 기본 스케쥴러 선택은 무시됩니다." + }, + "tiled_encode": { + "name": "타일 인코드 사용", + "tooltip": "이 옵션을 켜면, 내부적으로 'VAE 인코드'를 사용할 경우, 기본 'VAE 인코드' 대신 'VAE 인코드 (타일)' 을 적용합니다." + }, + "tiled_decode": { + "name": "타일 디코드 사용", + "tooltip": "이 옵션을 켜면, 내부적으로 'VAE 다코드'를 사용할 경우, 기본 'VAE 디코드' 대신 'VAE 디코드 (타일)' 을 적용합니다." + } + }, + "outputs": { + "0": { + "name": "개선 이미지" + }, + "1": { + "name": "개선 SEGS" + }, + "2": { + "name": "기본 파이프" + }, + "3": { + "name": "잘라낸 이미지" + }, + "4": { + "name": "잘라낸 개선 이미지" + }, + "5": { + "name": "잘라낸 투명 개선 이미지" + }, + "6": { + "name": "컨트롤넷 이미지" + } + } + }, + "DetailerForEachPipeForAnimateDiff": { + "description": "감지 영역 정보 묶음(SEGS)내의 각 영역들에 대해 가이드 크기를 기반으로 확대해서 인페이트하는 방법으로 디테일을 강화합니다.\n이 노드는 AnimateDiff와 같은 동영상의 디테일 개선을 위한 특수 디테일러 노드로써, SEGS가 담고 있는 마스크가 여러 프레임에 걸친 배치 마스크가 되는 경우를 처리할 수 있습니다.", + "display_name": "디테일러 (AnimateDiff/파이프)", + "inputs": { + "image_frames": { + "name": "이미지 프레임 묶음" + }, + "segs": { + "name": "segs", + "tooltip": "감지 영역 정보를 담고 있는 묶음.\n이 영역들을 대상으로 인페인트가 적용됩니다." + }, + "guide_size": { + "name": "가이드 크기", + "tooltip": "'가이드 크기 대상'으로 지정된 크기의 가장 짧은면을 이 크기까지 확대합니다." + }, + "guide_size_for": { + "name": "가이드 크기 대상", + "tooltip": "bbox: 감지된 사각 영역(bbox)\ncrop_region: 잘라낸 영역" + }, + "max_size": { + "name": "최대 크기", + "tooltip": "'가이드 크기'로 확대 할 때, 가장 긴 면의 길이를 이 크기로 제한합니다. 너무 크게 확대 되는 것을 막아줍니다." + }, + "seed": { + "name": "시드" + }, + "steps": { + "name": "스텝수" + }, + "sampler_name": { + "name": "샘플러 이름" + }, + "scheduler": { + "name": "스케쥴러" + }, + "denoise": { + "name": "노이즈 제거양" + }, + "feather": { + "name": "가장자리 흐림", + "tooltip": "확대 해서 인페인트 된 이미지를 원본 이미지에 붙여넣을 때, 이 수치로 마스크의 가장 자리를 흐리게 해서 붙여넣어 이음매의 위화감을 줄여줍니다." + }, + "basic_pipe": { + "name": "기본 파이프", + "tooltip": "만약 기본 파이프 내의 모델에 `ImpactDummyInput` 가 설정된 경우, 인페인트 단계를 건너 뜁니다." + }, + "refiner_ratio": { + "name": "라파이너 적용 비율", + "tooltip": "SDXL 리파이너 모델을 사용할 경우 적용될 후반 스텝수 비율을 설정합니다." + }, + "detailer_hook": { + "name": "디테일러 후크", + "tooltip": "이 노드의 실행 중간단계에서 여러가지 기능을 수행할 수 있는 후크를 연결합니다." + }, + "refiner_basic_pipe_opt": { + "name": "리파이너 기본 파이프", + "tooltip": "SDXL 리파이너 단계에 적용할 기본 파이프를 연결합니다." + }, + "noise_mask_feather": { + "name": "노이즈 마스크 가장자리 흐림", + "tooltip": "인페인트시에 적용되는 노이즈 마스크의 가장자리를 흐리게 합니다. 이 설정값이 0을 초과할 경우, 내부적으로 자동으로 '차등 확산' 노드를 적용합니다." + }, + "scheduler_func_opt": { + "name": "스케쥴러 함수", + "tooltip": "GITS 스케쥴러 처럼 기본 스케쥴러 리스트에서 선택할 수 없는 특수 스케쥴러를 사용할 수 있게 해줍니다. 이 입력이 연결되면, 기본 스케쥴러 선택은 무시됩니다." + } + }, + "outputs": { + "0": { + "name": "개선 SEGS" + }, + "1": { + "name": "개선 이미지" + }, + "2": { + "name": "기본 파이프" + }, + "3": { + "name": "컨트롤넷 이미지" + } + } + }, + "SEGSDetailerForAnimateDiff": { + "description": "감지 영역 정보 묶음(SEGS)내의 각 영역들에 대해 가이드 크기를 기반으로 확대해서 인페이트하는 방법으로 디테일을 강화합니다.\n이 노드는 원본 이미지가 아닌 SEGS를 대상으로 적용되는 노드로 원본 이미지에 적용하려면 'SEGS 붙여넣기' 노드를 사용하세요.\n이 노드는 AnimateDiff와 같은 동영상의 디테일 개선을 위한 특수 디테일러 노드로써, SEGS가 담고 있는 마스크가 여러 프레임에 걸친 배치 마스크가 되는 경우를 처리할 수 있습니다.", + "display_name": "SEGS 디테일러 (AnimateDiff/파이프)", + "inputs": { + "image_frames": { + "name": "이미지 프레임 묶음" + }, + "segs": { + "name": "segs", + "tooltip": "감지 영역 정보를 담고 있는 묶음.\n이 영역들을 대상으로 인페인트가 적용됩니다." + }, + "guide_size": { + "name": "가이드 크기", + "tooltip": "'가이드 크기 대상'으로 지정된 크기의 가장 짧은면을 이 크기까지 확대합니다." + }, + "guide_size_for": { + "name": "가이드 크기 대상", + "tooltip": "bbox: 감지된 사각 영역(bbox)\ncrop_region: 잘라낸 영역" + }, + "max_size": { + "name": "최대 크기", + "tooltip": "'가이드 크기'로 확대 할 때, 가장 긴 면의 길이를 이 크기로 제한합니다. 너무 크게 확대 되는 것을 막아줍니다." + }, + "seed": { + "name": "시드" + }, + "steps": { + "name": "스텝수" + }, + "sampler_name": { + "name": "샘플러 이름" + }, + "scheduler": { + "name": "스케쥴러" + }, + "denoise": { + "name": "노이즈 제거양" + }, + "basic_pipe": { + "name": "기본 파이프", + "tooltip": "만약 기본 파이프 내의 모델에 `ImpactDummyInput` 가 설정된 경우, 인페인트 단계를 건너 뜁니다." + }, + "refiner_ratio": { + "name": "라파이너 적용 비율", + "tooltip": "SDXL 리파이너 모델을 사용할 경우 적용될 후반 스텝수 비율을 설정합니다." + }, + "refiner_basic_pipe_opt": { + "name": "리파이너 기본 파이프", + "tooltip": "SDXL 리파이너 단계에 적용할 기본 파이프를 연결합니다." + }, + "noise_mask_feather": { + "name": "노이즈 마스크 가장자리 흐림", + "tooltip": "인페인트시에 적용되는 노이즈 마스크의 가장자리를 흐리게 합니다. 이 설정값이 0을 초과할 경우, 내부적으로 자동으로 '차등 확산' 노드를 적용합니다." + }, + "scheduler_func_opt": { + "name": "스케쥴러 함수", + "tooltip": "GITS 스케쥴러 처럼 기본 스케쥴러 리스트에서 선택할 수 없는 특수 스케쥴러를 사용할 수 있게 해줍니다. 이 입력이 연결되면, 기본 스케쥴러 선택은 무시됩니다." + } + }, + "outputs": { + "0": { + "name": "개선 SEGS" + }, + "1": { + "name": "개선 이미지" + } + } + }, + "SEGSDetailer": { + "description": "감지 영역 정보 묶음(SEGS)내의 각 영역들에 대해 가이드 크기를 기반으로 확대해서 인페이트하는 방법으로 디테일을 강화합니다.\n이 노드는 원본 이미지가 아닌 SEGS를 대상으로 적용되는 노드로 원본 이미지에 적용하려면 'SEGS 붙여넣기' 노드를 사용하세요.", + "display_name": "SEGS 디테일러 (파이프)", + "inputs": { + "image": { + "name": "이미지" + }, + "segs": { + "name": "segs", + "tooltip": "감지 영역 정보를 담고 있는 묶음.\n이 영역들을 대상으로 인페인트가 적용됩니다." + }, + "guide_size": { + "name": "가이드 크기", + "tooltip": "'가이드 크기 대상'으로 지정된 크기의 가장 짧은면을 이 크기까지 확대합니다." + }, + "guide_size_for": { + "name": "가이드 크기 대상", + "tooltip": "bbox: 감지된 사각 영역(bbox)\ncrop_region: 잘라낸 영역" + }, + "max_size": { + "name": "최대 크기", + "tooltip": "'가이드 크기'로 확대 할 때, 가장 긴 면의 길이를 이 크기로 제한합니다. 너무 크게 확대 되는 것을 막아줍니다." + }, + "seed": { + "name": "시드" + }, + "steps": { + "name": "스텝수" + }, + "sampler_name": { + "name": "샘플러 이름" + }, + "scheduler": { + "name": "스케쥴러" + }, + "denoise": { + "name": "노이즈 제거양" + }, + "noise_mask": { + "name": "노이즈 마스크 사용", + "tooltip": "인페인트 할 때, 마스크를 적용해서 마스크 영역만 인페인트합니다. 이 옵션을 적용하지 않으면, 잘라낸 이미지 전체가 재생성되어 노이즈 제거양이 클 때 위화감이 나타나게 됩니다." + }, + "force_inpaint": { + "name": "인페인트 강제 적용", + "tooltip": "가이드 크기와 상관 없이 인페인팅을 무조건 적용 합니다. 이 옵션이 꺼져있는 경우 가이드 크기보다 이미 큰 감지 영역은 인페인팅을 건너 뜁니다." + }, + "basic_pipe": { + "name": "기본 파이프", + "tooltip": "만약 기본 파이프 내의 모델에 `ImpactDummyInput` 가 설정된 경우, 인페인트 단계를 건너 뜁니다." + }, + "refiner_ratio": { + "name": "라파이너 적용 비율", + "tooltip": "SDXL 리파이너 모델을 사용할 경우 적용될 후반 스텝수 비율을 설정합니다." + }, + "batch_size": { + "name": "배치 갯수", + "tooltip": "대상 SEGS 에 대해서 배치 갯수만큼 여러개의 후보를 생성합니다. 여러개를 생성할 경우 '고르기 (SEGS)'와 함께 사용하세요." + }, + "cycle": { + "name": "반복수", + "tooltip": "설정된 값만큼 인페인팅을 반복 적용합니다. 인코딩/디코딩 없이 확대된 잠재 이미지 단계에서 반복됩니다." + }, + "refiner_basic_pipe_opt": { + "name": "리파이너 기본 파이프", + "tooltip": "SDXL 리파이너 단계에 적용할 기본 파이프를 연결합니다." + }, + "inpaint_model": { + "name": "인페인트 모델 모드", + "tooltip": "인페인트 전용 모델을 사용할 경우 이 옵션을 켜면, 인페인팅시에 '인페인트 모델 조건 설정'이 적용되어 수행됩니다." + }, + "noise_mask_feather": { + "name": "노이즈 마스크 가장자리 흐림", + "tooltip": "인페인트시에 적용되는 노이즈 마스크의 가장자리를 흐리게 합니다. 이 설정값이 0을 초과할 경우, 내부적으로 자동으로 '차등 확산' 노드를 적용합니다." + }, + "scheduler_func_opt": { + "name": "스케쥴러 함수", + "tooltip": "GITS 스케쥴러 처럼 기본 스케쥴러 리스트에서 선택할 수 없는 특수 스케쥴러를 사용할 수 있게 해줍니다. 이 입력이 연결되면, 기본 스케쥴러 선택은 무시됩니다." + } + }, + "outputs": { + "0": { + "name": "개선 SEGS" + }, + "1": { + "name": "컨트롤넷 이미지" + } + } + }, + "MaskDetailerPipe": { + "description": "이 디테일러 노드는 마스크로 설정된 영역을 확대해서 가이드 크기를 기반으로 확대해서 인페인트하는 방법으로 디테일을 강화합니다.", + "display_name": "마스크 디테일러 (파이프)", + "inputs": { + "image": { + "name": "이미지" + }, + "mask": { + "name": "마스크", + "tooltip": "디테일을 강화하고 싶은 대상 영역이 설정된 마스크. 분리된 마스크 영역은 개별적으로 디테일 강화가 이루어집니다." + }, + "basic_pipe": { + "name": "기본 파이프", + "tooltip": "만약 기본 파이프 내의 모델에 `ImpactDummyInput` 가 설정된 경우, 인페인트 단계를 건너 뜁니다." + }, + "guide_size": { + "name": "가이드 크기", + "tooltip": "'가이드 크기 대상'으로 지정된 크기의 가장 짧은면을 이 크기까지 확대합니다." + }, + "guide_size_for": { + "name": "가이드 크기 대상", + "tooltip": "bbox: 감지된 사각 영역(bbox)\ncrop_region: 잘라낸 영역" + }, + "max_size": { + "name": "최대 크기", + "tooltip": "'가이드 크기'로 확대 할 때, 가장 긴 면의 길이를 이 크기로 제한합니다. 너무 크게 확대 되는 것을 막아줍니다." + }, + "mask_mode": { + "name": "마스크 모드", + "tooltip": "마스크로 설정된 영역만을 인페인트 할지, 잘라낸 영역 전체를 인페인트 할 것인지를 설정합니다." + }, + "seed": { + "name": "시드" + }, + "steps": { + "name": "스텝수" + }, + "sampler_name": { + "name": "샘플러 이름" + }, + "scheduler": { + "name": "스케쥴러" + }, + "denoise": { + "name": "노이즈 제거양" + }, + "feather": { + "name": "가장자리 흐림", + "tooltip": "확대 해서 인페인트 된 이미지를 원본 이미지에 붙여넣을 때, 이 수치로 마스크의 가장 자리를 흐리게 해서 붙여넣어 이음매의 위화감을 줄여줍니다." + }, + "crop_factor": { + "name": "자르기 배율", + "tooltip": "각 마스크로 설정된 영역에 대해서 몇배 크기를 잘라내어서 인페인트에 사용할지를 설정합니다. 이 크기가 너무 작으면, 인페인트 할 이미지의 주변 정보가 부족해서 위화감이 강한 이미지가 생성됩니다. 이 크기가 너무 크면, 인페인팅에 너무 오랜 시간이 걸릴 수 있으며, 모델의 역량을 초과할 정도로 클 경우 올바르지 않은 이미지를 생성하게 됩니다." + }, + "drop_size": { + "name": "감지 최소 크기", + "tooltip": "사각 영역(bbox) 감지기로 감지한 크기가 이 설정값 보다 작을 경우 무시합니다." + }, + "refiner_ratio": { + "name": "라파이너 적용 비율", + "tooltip": "SDXL 리파이너 모델을 사용할 경우 적용될 후반 스텝수 비율을 설정합니다." + }, + "batch_size": { + "name": "배치 갯수", + "tooltip": "대상 SEGS 에 대해서 배치 갯수만큼 여러개의 후보를 생성합니다. 여러개를 생성할 경우 '고르기 (SEGS)'와 함께 사용하세요." + }, + "cycle": { + "name": "반복수", + "tooltip": "설정된 값만큼 인페인팅을 반복 적용합니다. 인코딩/디코딩 없이 확대된 잠재 이미지 단계에서 반복됩니다." + }, + "refiner_basic_pipe_opt": { + "name": "리파이너 기본 파이프", + "tooltip": "SDXL 리파이너 단계에 적용할 기본 파이프를 연결합니다." + }, + "detailer_hook": { + "name": "디테일러 후크", + "tooltip": "이 노드의 실행 중간단계에서 여러가지 기능을 수행할 수 있는 후크를 연결합니다." + }, + "inpaint_model": { + "name": "인페인트 모델 모드", + "tooltip": "인페인트 전용 모델을 사용할 경우 이 옵션을 켜면, 인페인팅시에 '인페인트 모델 조건 설정'이 적용되어 수행됩니다." + }, + "noise_mask_feather": { + "name": "노이즈 마스크 가장자리 흐림", + "tooltip": "인페인트시에 적용되는 노이즈 마스크의 가장자리를 흐리게 합니다. 이 설정값이 0을 초과할 경우, 내부적으로 자동으로 '차등 확산' 노드를 적용합니다." + }, + "bbox_fill": { + "name": "bbox 채우기", + "tooltip": "각 마스크 조각들을 해당 마스크를 포함하는 가장 작은 사각 영역의 마스크로 간주합니다." + }, + "contour_fill": { + "name": "윤곽 내부 채우기", + "tooltip": "윤곽선 형태의 마스크 조각들의 경우 마스크 내부가 모두 채워진 것으로 간주합니다." + }, + "scheduler_func_opt": { + "name": "스케쥴러 함수", + "tooltip": "GITS 스케쥴러 처럼 기본 스케쥴러 리스트에서 선택할 수 없는 특수 스케쥴러를 사용할 수 있게 해줍니다. 이 입력이 연결되면, 기본 스케쥴러 선택은 무시됩니다." + } + }, + "outputs": { + "0": { + "name": "개선 이미지" + }, + "1": { + "name": "잘라낸 개선 이미지" + }, + "2": { + "name": "잘라낸 투명 개선 이미지" + }, + "3": { + "name": "기본 파이프" + }, + "4": { + "name": "리파이너 기본 파이프" + } + } + }, + + "SEGSPaste": { + "description": "SEGS 디테일러를 통해 개선된 SEGS를 원본 이미지에 붙여넣는 기능을 제공하기 위한 노드입니다.", + "display_name": "SEGS 붙여넣기", + "inputs": { + "image": { + "name": "원본 이미지" + }, + "segs": { + "name": "segs" + }, + "feather": { + "name": "가장자리 흐림", + "tooltip": "개선된 SEGS의 이미지를 원본 이미지에 붙여넣을 때, 이 수치로 마스크의 가장 자리를 흐리게 해서 붙여넣어 이음매의 위화감을 줄여줍니다." + }, + "alpha": { + "name": "투명도", + "tooltip": "원본에 붙여넣는 이미지에 투명도를 설정합니다." + }, + "ref_image_opt": { + "name": "참조 이미지", + "tooltip": "디테일러를 통과시키거나 'SEGS에 기본 이미지 설정'을 한 경우가 아니라면, SEGS는 이미지가 없이 감지 영역 정보만 있습니다. 이 때 감지영역이 참조할 원본 이미지를 설정합니다." + } + }, + "outputs": { + "0": { + "name": "개선 SEGS" + } + } + }, + + "ImpactSEGSPicker": { + "description": "입력된 SEGS 중에서 선택된 SEGS만을 고를 수 있는 있는 기능을 제공합니다.", + "display_name": "고르기 (SEGS)", + "inputs": { + "picks": { + "name": "선택 목록", + "tooltip": "출력할 SEGS 번호 목록을 나열합니다. 'pick' 버튼을 눌러서 선택하세요." + }, + "segs": { + "name": "segs" + }, + "fallback_image_opt": { + "name": "참조 이미지", + "tooltip": "디테일러를 통과시키거나 'SEGS에 기본 이미지 설정'을 한 경우가 아니라면, SEGS는 이미지가 없이 감지 영역 정보만 있습니다. 이 때 감지영역이 참조할 원본 이미지를 설정합니다." + } + }, + "outputs": { + "0": { + "name": "선택된 SEGS" + } + } + }, + + "SetDefaultImageForSEGS": { + "description": "디테일러를 통과시킨 경우가 아니라면, SEGS는 이미지가 없이 감지 영역 정보만 있습니다. 이 노드는 SEGS에 기본 이미지를 설정해 줍니다.", + "display_name": "SEGS에 기본 이미지 설정", + "inputs": { + "segs": { + "name": "segs" + }, + "image": { + "name": "이미지" + }, + "override": { + "name": "덮어쓰기", + "tooltip": "이미 설정된 이미지가 있는 경우 덮어쓸지 여부를 설정합니다." + } + }, + "outputs": { + "0": { + "name": "segs" + } + } + }, + + "ImpactWildcardProcessor": { + "description": "이 노드는 와일드카드 구문으로 작성된 텍스트 프롬프트를 처리하고, 처리된 텍스트 프롬프트를 출력합니다.\n\nTIP: 워크플로가 실행되기 전에 '와일드카드 텍스트'의 처리 결과가 '채워진(populated) 텍스트'에 표시되며, 이 값은 워크플로와 함께 저장됩니다. 입력으로 변환된 시드를 사용하려면 '와일드카드 텍스트' 대신 '채워진(populated) 텍스트'에 직접 프롬프트를 작성하고, 모드를 '고정(fixed)'로 설정하세요.", + "display_name": "와일드카드 처리기 (Impact)", + "inputs": { + "wildcard_text": { + "name": "와일드카드 텍스트", + "tooltip": "와일드카드 문법으로 작성된 텍스트 프롬프트를 입력하세요." + }, + "populated_text": { + "name": "채워진 텍스트", + "tooltip": "이 노드에 실행 중에 전달되는 실제 값은 여기 표시된 값입니다. 동작은 모드에 따라 약간 다를 수 있으며, '채워진 텍스트'에서도 와일드카드 구문을 사용할 수 있습니다." + }, + "mode": { + "name": "모드", + "tooltip": "채우기(populate): 워크플로를 실행하기 전에 '와일드카드 텍스트'에서 처리된 프롬프트로 '채워진 텍스트'의 기존 값을 덮어씁니다. 이 모드에서는 '채워진 텍스트'를 수정할 수 없습니다.\n\n고정(fixed): '와일드카드 텍스트'를 무시하고 '채워진 텍스트'의 값을 그대로 유지합니다. 이 모드에서는 '채워진 텍스트'를 수정할 수 있습니다.\n\n재현(reproduce): 이 모드는 한 번만 '고정(fixed)' 모드로 작동하여 재현한 후, 이후에는 '채우기(populate)' 모드로 전환됩니다." + }, + "seed": { + "name": "시드", + "tooltip": "와일드카드의 무작위 선택에 사용할 시드 입니다" + }, + "Select to add Wildcard": { + "name": "추가할 와일드카드 선택" + } + }, + "outputs": { + "0": { + "name": "처리된 텍스트" + } + } + }, + + "ImpactWildcardEncode": { + "description": "이 노드는 와일드카드 구문으로 작성된 텍스트 프롬프트를 처리하고 이를 조건으로 출력합니다. 또한 LoRA 구문을 지원하며, 적용된 LoRA는 모델 출력에 반영됩니다.\n\nTIP1: 워크플로가 실행되기 전에 '와일드카드 텍스트'의 처리 결과가 '채워진 텍스트'에 표시되며, 이 값은 워크플로와 함께 저장됩니다. 입력으로 변환된 시드를 사용하려면 '와일드카드 텍스트' 대신 '채워진 텍스트'에 직접 프롬프트를 작성하고, 모드를 '고정(fixed)'로 설정하세요.\nTIP2: 'Inspire Pack'이 설치되어 있으면 LBW(로라 블록 웨이트) 구문도 적용할 수 있습니다.", + "display_name": "와일드카드 인코딩 (Impact)", + "inputs": { + "wildcard_text": { + "name": "와일드카드 텍스트", + "tooltip": "와일드카드 문법으로 작성된 텍스트 프롬프트를 입력하세요." + }, + "populated_text": { + "name": "채워진 텍스트", + "tooltip": "이 노드에 실행 중에 전달되는 실제 값은 여기 표시된 값입니다. 동작은 모드에 따라 약간 다를 수 있으며, '채워진 텍스트'에서도 와일드카드 구문을 사용할 수 있습니다." + }, + "mode": { + "name": "모드", + "tooltip": "채우기(populate): 워크플로를 실행하기 전에 '와일드카드 텍스트'에서 처리된 프롬프트로 '채워진 텍스트'의 기존 값을 덮어씁니다. 이 모드에서는 '채워진 텍스트'를 수정할 수 없습니다.\n\n고정(fixed): '와일드카드 텍스트'를 무시하고 '채워진 텍스트'의 값을 그대로 유지합니다. 이 모드에서는 '채워진 텍스트'를 수정할 수 있습니다.\n\n재현(reproduce): 이 모드는 한 번만 '고정(fixed)' 모드로 작동하여 재현한 후, 이후에는 '채우기(populate)' 모드로 전환됩니다." + }, + "Select to add LoRA": { + "name": "추가할 LoRA 선택" + }, + "Select to add Wildcard": { + "name": "추가할 와일드카드 선택" + }, + "seed": { + "name": "시드", + "tooltip": "와일드카드의 무작위 선택에 사용할 시드 입니다" + } + }, + "outputs": { + "0": { + "name": "model", + "tooltip": "LoRA 적용 문법이 사용된 경우, LoRA 가 적용된 model이 출력됩니다." + }, + "1": { + "name": "clip", + "tooltip": "LoRA 적용 문법이 사용된 경우, LoRA 가 적용된 clip이 출력됩니다." + }, + "2": { + "name": "조건" + }, + "3": { + "name": "채워진 텍스트" + } + } + } +} \ No newline at end of file diff --git a/comfyui-impact-pack/modules/impact/__pycache__/animatediff_nodes.cpython-310.pyc b/comfyui-impact-pack/modules/impact/__pycache__/animatediff_nodes.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..bc6d86a5f4f1e718f973a96579dee4ea530d519f Binary files /dev/null and b/comfyui-impact-pack/modules/impact/__pycache__/animatediff_nodes.cpython-310.pyc differ diff --git a/comfyui-impact-pack/modules/impact/__pycache__/bridge_nodes.cpython-310.pyc b/comfyui-impact-pack/modules/impact/__pycache__/bridge_nodes.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..06778f7cfa6e5832d31a56f90889f3ab06f48801 Binary files /dev/null and b/comfyui-impact-pack/modules/impact/__pycache__/bridge_nodes.cpython-310.pyc differ diff --git a/comfyui-impact-pack/modules/impact/__pycache__/config.cpython-310.pyc b/comfyui-impact-pack/modules/impact/__pycache__/config.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..312115b2a648308e5112ec715086ec09eb1d1e57 Binary files /dev/null and b/comfyui-impact-pack/modules/impact/__pycache__/config.cpython-310.pyc differ diff --git a/comfyui-impact-pack/modules/impact/__pycache__/core.cpython-310.pyc b/comfyui-impact-pack/modules/impact/__pycache__/core.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..216bd24bdb99b041e98ff9a699f95f769e594f33 Binary files /dev/null and b/comfyui-impact-pack/modules/impact/__pycache__/core.cpython-310.pyc differ diff --git a/comfyui-impact-pack/modules/impact/__pycache__/defs.cpython-310.pyc b/comfyui-impact-pack/modules/impact/__pycache__/defs.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4a2c5a1bcfb733ad9e649dd0d4eadef823845f2b Binary files /dev/null and b/comfyui-impact-pack/modules/impact/__pycache__/defs.cpython-310.pyc differ diff --git a/comfyui-impact-pack/modules/impact/__pycache__/detectors.cpython-310.pyc b/comfyui-impact-pack/modules/impact/__pycache__/detectors.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..665ee3714d5d714509a68dbb38fc2e89340bbb95 Binary files /dev/null and b/comfyui-impact-pack/modules/impact/__pycache__/detectors.cpython-310.pyc differ diff --git a/comfyui-impact-pack/modules/impact/__pycache__/hf_nodes.cpython-310.pyc b/comfyui-impact-pack/modules/impact/__pycache__/hf_nodes.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..568e91ebf4a3143084843f74c746e35618d67a0c Binary files /dev/null and b/comfyui-impact-pack/modules/impact/__pycache__/hf_nodes.cpython-310.pyc differ diff --git a/comfyui-impact-pack/modules/impact/__pycache__/hook_nodes.cpython-310.pyc b/comfyui-impact-pack/modules/impact/__pycache__/hook_nodes.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d5b1c20c1376f71d8318815a45613fc79dbb5e7d Binary files /dev/null and b/comfyui-impact-pack/modules/impact/__pycache__/hook_nodes.cpython-310.pyc differ diff --git a/comfyui-impact-pack/modules/impact/__pycache__/hooks.cpython-310.pyc b/comfyui-impact-pack/modules/impact/__pycache__/hooks.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b08be6182871e56cc8d6c228929a7c75afdb2acd Binary files /dev/null and b/comfyui-impact-pack/modules/impact/__pycache__/hooks.cpython-310.pyc differ diff --git a/comfyui-impact-pack/modules/impact/__pycache__/impact_pack.cpython-310.pyc b/comfyui-impact-pack/modules/impact/__pycache__/impact_pack.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0796e66f12f09072a479a5e1d7e1a8642770c889 Binary files /dev/null and b/comfyui-impact-pack/modules/impact/__pycache__/impact_pack.cpython-310.pyc differ diff --git a/comfyui-impact-pack/modules/impact/__pycache__/impact_sampling.cpython-310.pyc b/comfyui-impact-pack/modules/impact/__pycache__/impact_sampling.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..bf6e06d30c20f0cae013f51d054525e638d015f6 Binary files /dev/null and b/comfyui-impact-pack/modules/impact/__pycache__/impact_sampling.cpython-310.pyc differ diff --git a/comfyui-impact-pack/modules/impact/__pycache__/impact_server.cpython-310.pyc b/comfyui-impact-pack/modules/impact/__pycache__/impact_server.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..bed1eef594996f7975cf1fe186e86176f6012f7a Binary files /dev/null and b/comfyui-impact-pack/modules/impact/__pycache__/impact_server.cpython-310.pyc differ diff --git a/comfyui-impact-pack/modules/impact/__pycache__/logics.cpython-310.pyc b/comfyui-impact-pack/modules/impact/__pycache__/logics.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5d1246bec52d37eaa597dc9e649da08e3d91d02b Binary files /dev/null and b/comfyui-impact-pack/modules/impact/__pycache__/logics.cpython-310.pyc differ diff --git a/comfyui-impact-pack/modules/impact/__pycache__/pipe.cpython-310.pyc b/comfyui-impact-pack/modules/impact/__pycache__/pipe.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..404392243fa6f9fb4261a2c92f648feb858f2faf Binary files /dev/null and b/comfyui-impact-pack/modules/impact/__pycache__/pipe.cpython-310.pyc differ diff --git a/comfyui-impact-pack/modules/impact/__pycache__/segs_nodes.cpython-310.pyc b/comfyui-impact-pack/modules/impact/__pycache__/segs_nodes.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..15a104766ea47718c13ab065d4816a47bd3f8595 Binary files /dev/null and b/comfyui-impact-pack/modules/impact/__pycache__/segs_nodes.cpython-310.pyc differ diff --git a/comfyui-impact-pack/modules/impact/__pycache__/segs_upscaler.cpython-310.pyc b/comfyui-impact-pack/modules/impact/__pycache__/segs_upscaler.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b902c0ab98033d515352fbe8f772e4b5629631c6 Binary files /dev/null and b/comfyui-impact-pack/modules/impact/__pycache__/segs_upscaler.cpython-310.pyc differ diff --git a/comfyui-impact-pack/modules/impact/__pycache__/special_samplers.cpython-310.pyc b/comfyui-impact-pack/modules/impact/__pycache__/special_samplers.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b06c6e53992fed1a4670daf607dbafad33b967a7 Binary files /dev/null and b/comfyui-impact-pack/modules/impact/__pycache__/special_samplers.cpython-310.pyc differ diff --git a/comfyui-impact-pack/modules/impact/__pycache__/util_nodes.cpython-310.pyc b/comfyui-impact-pack/modules/impact/__pycache__/util_nodes.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1b22d0b4c366e764a00e61831f8a5ea82efdd0a2 Binary files /dev/null and b/comfyui-impact-pack/modules/impact/__pycache__/util_nodes.cpython-310.pyc differ diff --git a/comfyui-impact-pack/modules/impact/__pycache__/utils.cpython-310.pyc b/comfyui-impact-pack/modules/impact/__pycache__/utils.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..24281d020e1604bd8fa623be2f8742c8c6c4ec73 Binary files /dev/null and b/comfyui-impact-pack/modules/impact/__pycache__/utils.cpython-310.pyc differ diff --git a/comfyui-impact-pack/modules/impact/__pycache__/wildcards.cpython-310.pyc b/comfyui-impact-pack/modules/impact/__pycache__/wildcards.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..fff96d9eb55a1146d9ec0ad36bf126fa77ce4e7d Binary files /dev/null and b/comfyui-impact-pack/modules/impact/__pycache__/wildcards.cpython-310.pyc differ diff --git a/comfyui-impact-pack/modules/impact/additional_dependencies.py b/comfyui-impact-pack/modules/impact/additional_dependencies.py new file mode 100644 index 0000000000000000000000000000000000000000..904c729f05492a185b97b00829807da9313f7164 --- /dev/null +++ b/comfyui-impact-pack/modules/impact/additional_dependencies.py @@ -0,0 +1,12 @@ +import sys +import subprocess + + +def ensure_onnx_package(): + try: + import onnxruntime # noqa: F401 + except Exception: + if "python_embeded" in sys.executable or "python_embedded" in sys.executable: + subprocess.check_call([sys.executable, '-s', '-m', 'pip', 'install', 'onnxruntime']) + else: + subprocess.check_call([sys.executable, '-s', '-m', 'pip', 'install', 'onnxruntime']) diff --git a/comfyui-impact-pack/modules/impact/animatediff_nodes.py b/comfyui-impact-pack/modules/impact/animatediff_nodes.py new file mode 100644 index 0000000000000000000000000000000000000000..5b45e82fd6850bdee9eac053f3ec4622d7157d80 --- /dev/null +++ b/comfyui-impact-pack/modules/impact/animatediff_nodes.py @@ -0,0 +1,200 @@ +from nodes import MAX_RESOLUTION +import impact.core as core +from impact.core import SEG +from impact.segs_nodes import SEGSPaste +import comfy +from impact import utils +import torch +import nodes +import logging + +try: + from comfy_extras import nodes_differential_diffusion +except Exception: + logging.warning("\n#############################################\n[Impact Pack] ComfyUI is an outdated version.\n#############################################\n") + raise Exception("[Impact Pack] ComfyUI is an outdated version.") + + +class SEGSDetailerForAnimateDiff: + @classmethod + def INPUT_TYPES(cls): + return {"required": { + "image_frames": ("IMAGE", ), + "segs": ("SEGS", ), + "guide_size": ("FLOAT", {"default": 512, "min": 64, "max": MAX_RESOLUTION, "step": 8}), + "guide_size_for": ("BOOLEAN", {"default": True, "label_on": "bbox", "label_off": "crop_region"}), + "max_size": ("FLOAT", {"default": 768, "min": 64, "max": MAX_RESOLUTION, "step": 8}), + "seed": ("INT", {"default": 0, "min": 0, "max": 0xffffffffffffffff}), + "steps": ("INT", {"default": 20, "min": 1, "max": 10000}), + "cfg": ("FLOAT", {"default": 8.0, "min": 0.0, "max": 100.0}), + "sampler_name": (comfy.samplers.KSampler.SAMPLERS,), + "scheduler": (core.get_schedulers(),), + "denoise": ("FLOAT", {"default": 0.5, "min": 0.0001, "max": 1.0, "step": 0.01}), + "basic_pipe": ("BASIC_PIPE", {"tooltip": "If the `ImpactDummyInput` is connected to the model in the basic_pipe, the inference stage is skipped."}), + "refiner_ratio": ("FLOAT", {"default": 0.2, "min": 0.0, "max": 1.0}), + }, + "optional": { + "refiner_basic_pipe_opt": ("BASIC_PIPE",), + "noise_mask_feather": ("INT", {"default": 20, "min": 0, "max": 100, "step": 1}), + "scheduler_func_opt": ("SCHEDULER_FUNC",), + } + } + + RETURN_TYPES = ("SEGS", "IMAGE") + RETURN_NAMES = ("segs", "cnet_images") + OUTPUT_IS_LIST = (False, True) + + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Detailer" + + DESCRIPTION = "This node enhances details by inpainting each region within the detected area bundle (SEGS) after enlarging them based on the guide size.\nThis node is applied specifically to SEGS rather than the entire image. To apply it to the entire image, use the 'SEGS Paste' node.\nAs a specialized detailer node for improving video details, such as in AnimateDiff, this node can handle cases where the masks contained in SEGS serve as batch masks spanning multiple frames." + + @staticmethod + def do_detail(image_frames, segs, guide_size, guide_size_for, max_size, seed, steps, cfg, sampler_name, scheduler, + denoise, basic_pipe, refiner_ratio=None, refiner_basic_pipe_opt=None, noise_mask_feather=0, scheduler_func_opt=None): + + model, clip, vae, positive, negative = basic_pipe + if refiner_basic_pipe_opt is None: + refiner_model, refiner_clip, refiner_positive, refiner_negative = None, None, None, None + else: + refiner_model, refiner_clip, _, refiner_positive, refiner_negative = refiner_basic_pipe_opt + + segs = core.segs_scale_match(segs, image_frames.shape) + + new_segs = [] + cnet_image_list = [] + + if not (isinstance(model, str) and model == "DUMMY") and noise_mask_feather > 0 and 'denoise_mask_function' not in model.model_options: + model = nodes_differential_diffusion.DifferentialDiffusion().execute(model)[0] + + for seg in segs[1]: + cropped_image_frames = None + + for image in image_frames: + image = image.unsqueeze(0) + cropped_image = seg.cropped_image if seg.cropped_image is not None else utils.crop_tensor4(image, seg.crop_region) + cropped_image = utils.to_tensor(cropped_image) + if cropped_image_frames is None: + cropped_image_frames = cropped_image + else: + cropped_image_frames = torch.concat((cropped_image_frames, cropped_image), dim=0) + + cropped_image_frames = cropped_image_frames.cpu().numpy() + + # It is assumed that AnimateDiff does not support conditioning masks based on test results, but it will be added for future consideration. + cropped_positive = [ + [condition, { + k: core.crop_condition_mask(v, cropped_image_frames, seg.crop_region) if k == "mask" else v + for k, v in details.items() + }] + for condition, details in positive + ] + + cropped_negative = [ + [condition, { + k: core.crop_condition_mask(v, cropped_image_frames, seg.crop_region) if k == "mask" else v + for k, v in details.items() + }] + for condition, details in negative + ] + + if not (isinstance(model, str) and model == "DUMMY"): + enhanced_image_tensor, cnet_images = core.enhance_detail_for_animatediff(cropped_image_frames, model, clip, vae, guide_size, guide_size_for, max_size, + seg.bbox, seed, steps, cfg, sampler_name, scheduler, + cropped_positive, cropped_negative, denoise, seg.cropped_mask, + refiner_ratio=refiner_ratio, refiner_model=refiner_model, + refiner_clip=refiner_clip, refiner_positive=refiner_positive, + refiner_negative=refiner_negative, control_net_wrapper=seg.control_net_wrapper, + noise_mask_feather=noise_mask_feather, scheduler_func=scheduler_func_opt) + else: + enhanced_image_tensor = cropped_image_frames + cnet_images = None + + if cnet_images is not None: + cnet_image_list.extend(cnet_images) + + if enhanced_image_tensor is None: + new_cropped_image = cropped_image_frames + else: + new_cropped_image = enhanced_image_tensor.cpu().numpy() + + new_seg = SEG(new_cropped_image, seg.cropped_mask, seg.confidence, seg.crop_region, seg.bbox, seg.label, None) + new_segs.append(new_seg) + + return (segs[0], new_segs), cnet_image_list + + def doit(self, image_frames, segs, guide_size, guide_size_for, max_size, seed, steps, cfg, sampler_name, scheduler, + denoise, basic_pipe, refiner_ratio=None, refiner_basic_pipe_opt=None, inpaint_model=False, noise_mask_feather=0, scheduler_func_opt=None): + + segs, cnet_images = SEGSDetailerForAnimateDiff.do_detail(image_frames, segs, guide_size, guide_size_for, max_size, seed, steps, cfg, sampler_name, + scheduler, denoise, basic_pipe, refiner_ratio, refiner_basic_pipe_opt, + noise_mask_feather=noise_mask_feather, scheduler_func_opt=scheduler_func_opt) + + if len(cnet_images) == 0: + cnet_images = [utils.empty_pil_tensor()] + + return (segs, cnet_images) + + +class DetailerForEachPipeForAnimateDiff: + @classmethod + def INPUT_TYPES(cls): + return {"required": { + "image_frames": ("IMAGE", ), + "segs": ("SEGS", ), + "guide_size": ("FLOAT", {"default": 512, "min": 64, "max": nodes.MAX_RESOLUTION, "step": 8}), + "guide_size_for": ("BOOLEAN", {"default": True, "label_on": "bbox", "label_off": "crop_region"}), + "max_size": ("FLOAT", {"default": 1024, "min": 64, "max": nodes.MAX_RESOLUTION, "step": 8}), + "seed": ("INT", {"default": 0, "min": 0, "max": 0xffffffffffffffff}), + "steps": ("INT", {"default": 20, "min": 1, "max": 10000}), + "cfg": ("FLOAT", {"default": 8.0, "min": 0.0, "max": 100.0}), + "sampler_name": (comfy.samplers.KSampler.SAMPLERS,), + "scheduler": (core.get_schedulers(),), + "denoise": ("FLOAT", {"default": 0.5, "min": 0.0001, "max": 1.0, "step": 0.01}), + "feather": ("INT", {"default": 5, "min": 0, "max": 100, "step": 1}), + "basic_pipe": ("BASIC_PIPE", {"tooltip": "If the `ImpactDummyInput` is connected to the model in the basic_pipe, the inference stage is skipped."}), + "refiner_ratio": ("FLOAT", {"default": 0.2, "min": 0.0, "max": 1.0}), + }, + "optional": { + "detailer_hook": ("DETAILER_HOOK",), + "refiner_basic_pipe_opt": ("BASIC_PIPE",), + "noise_mask_feather": ("INT", {"default": 20, "min": 0, "max": 100, "step": 1}), + "scheduler_func_opt": ("SCHEDULER_FUNC",), + } + } + + RETURN_TYPES = ("IMAGE", "SEGS", "BASIC_PIPE", "IMAGE") + RETURN_NAMES = ("image", "segs", "basic_pipe", "cnet_images") + OUTPUT_IS_LIST = (False, False, False, True) + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Detailer" + + DESCRIPTION = "This node enhances details by inpainting each region within the detected area bundle (SEGS) after enlarging them based on the guide size.\nThis node is a specialized detailer node for enhancing video details, such as in AnimateDiff. It can handle cases where the masks contained in SEGS serve as batch masks spanning multiple frames." + + @staticmethod + def doit(image_frames, segs, guide_size, guide_size_for, max_size, seed, steps, cfg, sampler_name, scheduler, + denoise, feather, basic_pipe, refiner_ratio=None, detailer_hook=None, refiner_basic_pipe_opt=None, + noise_mask_feather=0, scheduler_func_opt=None): + + enhanced_segs = [] + cnet_image_list = [] + + for sub_seg in segs[1]: + single_seg = segs[0], [sub_seg] + enhanced_seg, cnet_images = SEGSDetailerForAnimateDiff().do_detail(image_frames, single_seg, guide_size, guide_size_for, max_size, seed, steps, cfg, sampler_name, scheduler, + denoise, basic_pipe, refiner_ratio, refiner_basic_pipe_opt, noise_mask_feather, scheduler_func_opt=scheduler_func_opt) + + image_frames = SEGSPaste.doit(image_frames, enhanced_seg, feather, alpha=255)[0] + + if cnet_images is not None: + cnet_image_list.extend(cnet_images) + + if detailer_hook is not None: + image_frames = detailer_hook.post_paste(image_frames) + + enhanced_segs += enhanced_seg[1] + + new_segs = segs[0], enhanced_segs + return image_frames, new_segs, basic_pipe, cnet_image_list diff --git a/comfyui-impact-pack/modules/impact/bridge_nodes.py b/comfyui-impact-pack/modules/impact/bridge_nodes.py new file mode 100644 index 0000000000000000000000000000000000000000..b3923b58a99bba6afdecdbf143228803c9c16eed --- /dev/null +++ b/comfyui-impact-pack/modules/impact/bridge_nodes.py @@ -0,0 +1,490 @@ +import os +from PIL import ImageOps +import logging +import folder_paths +import torch +import nodes +from PIL import Image +import numpy as np +from impact import utils + +# NOTE: this should not be `from . import core`. +# I don't know why but... 'from .' and 'from impact' refer to different core modules. +# This separates global variables of the core module and breaks the preview bridge. +from impact import core +# <-- +import random + + +class PreviewBridge: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "images": ("IMAGE",), + "image": ("STRING", {"default": ""}), + }, + "optional": { + "block": ("BOOLEAN", {"default": False, "label_on": "if_empty_mask", "label_off": "never", "tooltip": "is_empty_mask: If the mask is empty, the execution is stopped.\nnever: The execution is never stopped."}), + "restore_mask": (["never", "always", "if_same_size"], {"tooltip": "if_same_size: If the changed input image is the same size as the previous image, restore using the last saved mask\nalways: Whenever the input image changes, always restore using the last saved mask\nnever: Do not restore the mask.\n`restore_mask` has higher priority than `block`"}), + }, + "hidden": {"unique_id": "UNIQUE_ID", "extra_pnginfo": "EXTRA_PNGINFO"}, + } + + RETURN_TYPES = ("IMAGE", "MASK", ) + + FUNCTION = "doit" + + OUTPUT_NODE = True + + CATEGORY = "ImpactPack/Util" + + DESCRIPTION = "This is a feature that allows you to edit and send a Mask over a image.\nIf the block is set to 'is_empty_mask', the execution is stopped when the mask is empty." + + def __init__(self): + super().__init__() + self.output_dir = folder_paths.get_temp_directory() + self.type = "temp" + self.prev_hash = None + + @staticmethod + def load_image(pb_id): + is_fail = False + if pb_id not in core.preview_bridge_image_id_map: + is_fail = True + + if not is_fail: + image_path, ui_item = core.preview_bridge_image_id_map[pb_id] + if not os.path.isfile(image_path): + is_fail = True + + if not is_fail: + i = Image.open(image_path) + i = ImageOps.exif_transpose(i) + image = i.convert("RGB") + image = np.array(image).astype(np.float32) / 255.0 + image = torch.from_numpy(image)[None,] + + if 'A' in i.getbands(): + mask = np.array(i.getchannel('A')).astype(np.float32) / 255.0 + mask = 1. - torch.from_numpy(mask) + else: + mask = torch.zeros((64, 64), dtype=torch.float32, device="cpu") + else: + image = utils.empty_pil_tensor() + mask = torch.zeros((64, 64), dtype=torch.float32, device="cpu") + ui_item = { + "filename": 'empty.png', + "subfolder": '', + "type": 'temp' + } + + return image, mask.unsqueeze(0), ui_item + + @staticmethod + def register_clipspace_image(clipspace_path, node_id): + """Register a clipspace image file in the preview bridge system. + + This handles the case where ComfyUI's mask editor creates clipspace files + that need to be integrated with the preview bridge system. + """ + # Remove [input] suffix if present + clean_path = clipspace_path.replace(" [input]", "").replace("[input]", "") + + # Try to find the actual clipspace file + input_dir = folder_paths.get_input_directory() + potential_paths = [ + clean_path, + os.path.join(input_dir, clean_path), + os.path.join(input_dir, "clipspace", os.path.basename(clean_path)), + os.path.abspath(clean_path), + ] + + actual_file = None + for path in potential_paths: + if os.path.isfile(path): + actual_file = path + break + + if not actual_file: + return False + + # Create ui_item for the clipspace file + ui_item = { + 'filename': os.path.basename(actual_file), + 'subfolder': 'clipspace', + 'type': 'input' + } + + # Register it using the preview bridge system + core.set_previewbridge_image(node_id, actual_file, ui_item) + # Also register under the original clipspace path for compatibility + core.preview_bridge_image_id_map[clipspace_path] = (actual_file, ui_item) + + return True + + def doit(self, images, image, unique_id, block=False, restore_mask="never", prompt=None, extra_pnginfo=None): + need_refresh = False + images_changed = False + + # Check if images have changed (this determines if we start fresh) + if unique_id not in core.preview_bridge_cache: + need_refresh = True + images_changed = True + elif core.preview_bridge_cache[unique_id][0] is not images: + need_refresh = True + images_changed = True + + # If images changed, clear the mask cache to ensure fresh start behavior + # This restores the original behavior where new images start with empty masks + # unless restore_mask is set to "always" or "if_same_size" + if images_changed and restore_mask not in ["always", "if_same_size"] and unique_id in core.preview_bridge_last_mask_cache: + del core.preview_bridge_last_mask_cache[unique_id] + + # Handle clipspace files that aren't registered in the preview bridge system + # This only applies when images haven't changed (same image, new mask scenario) + if not need_refresh and image not in core.preview_bridge_image_id_map: + # Check if this is a clipspace file that needs to be registered + is_clipspace = image and ("clipspace" in image.lower() or "[input]" in image) + if is_clipspace: + if not PreviewBridge.register_clipspace_image(image, unique_id): + need_refresh = True + else: + need_refresh = True + + if not need_refresh: + pixels, mask, path_item = PreviewBridge.load_image(image) + image = [path_item] + else: + # For new images (images_changed=True), we want to start fresh regardless of restore_mask + # For same image with refresh needed, respect the restore_mask setting + # Exception: when restore_mask is "always", restore even with new images + # Exception: when restore_mask is "if_same_size", allow restoration to check size compatibility + if restore_mask != "never" and (not images_changed or restore_mask in ["always", "if_same_size"]): + mask = core.preview_bridge_last_mask_cache.get(unique_id) + if mask is None: + mask = None + elif restore_mask == "if_same_size" and mask.shape[1:] != images.shape[1:3]: + # For if_same_size, clear mask if dimensions don't match + mask = None + # For "always", keep the mask regardless of size + else: + mask = None + + if mask is None: + mask = torch.zeros((64, 64), dtype=torch.float32, device="cpu") + res = nodes.PreviewImage().save_images(images, filename_prefix="PreviewBridge/PB-", prompt=prompt, extra_pnginfo=extra_pnginfo) + else: + masked_images = utils.tensor_convert_rgba(images) + resized_mask = utils.resize_mask(mask, (images.shape[1], images.shape[2])).unsqueeze(3) + resized_mask = 1 - resized_mask + utils.tensor_putalpha(masked_images, resized_mask) + res = nodes.PreviewImage().save_images(masked_images, filename_prefix="PreviewBridge/PB-", prompt=prompt, extra_pnginfo=extra_pnginfo) + + image2 = res['ui']['images'] + pixels = images + + path = os.path.join(folder_paths.get_temp_directory(), 'PreviewBridge', image2[0]['filename']) + core.set_previewbridge_image(unique_id, path, image2[0]) + core.preview_bridge_image_id_map[image] = (path, image2[0]) + core.preview_bridge_image_name_map[unique_id, path] = (image, image2[0]) + core.preview_bridge_cache[unique_id] = (images, image2) + + image = image2 + + is_empty_mask = torch.all(mask == 0) + + if block and is_empty_mask and core.is_execution_model_version_supported(): + from comfy_execution.graph import ExecutionBlocker + result = ExecutionBlocker(None), ExecutionBlocker(None) + elif block and is_empty_mask: + logging.warning("[Impact Pack] PreviewBridge: ComfyUI is outdated - blocking feature is disabled.") + result = pixels, mask + else: + result = pixels, mask + + if not is_empty_mask: + core.preview_bridge_last_mask_cache[unique_id] = mask + + return { + "ui": {"images": image}, + "result": result, + } + + +def decode_latent(latent, preview_method, vae_opt=None): + if vae_opt is not None: + image = nodes.VAEDecode().decode(vae_opt, latent)[0] + return image + + from comfy.cli_args import LatentPreviewMethod + import comfy.latent_formats as latent_formats + + if preview_method.startswith("TAE"): + decoder_name = None + + if preview_method == "TAESD15": + decoder_name = "taesd" + elif preview_method == 'TAESDXL': + decoder_name = "taesdxl" + elif preview_method == 'TAESD3': + decoder_name = "taesd3" + elif preview_method == 'TAEF1': + decoder_name = "taef1" + + if decoder_name: + vae = nodes.VAELoader().load_vae(decoder_name)[0] + image = nodes.VAEDecode().decode(vae, latent)[0] + return image + + if preview_method == "Latent2RGB-SD15": + latent_format = latent_formats.SD15() + method = LatentPreviewMethod.Latent2RGB + elif preview_method == "Latent2RGB-SDXL": + latent_format = latent_formats.SDXL() + method = LatentPreviewMethod.Latent2RGB + elif preview_method == "Latent2RGB-SD3": + latent_format = latent_formats.SD3() + method = LatentPreviewMethod.Latent2RGB + elif preview_method == "Latent2RGB-SD-X4": + latent_format = latent_formats.SD_X4() + method = LatentPreviewMethod.Latent2RGB + elif preview_method == "Latent2RGB-Playground-2.5": + latent_format = latent_formats.SDXL_Playground_2_5() + method = LatentPreviewMethod.Latent2RGB + elif preview_method == "Latent2RGB-SC-Prior": + latent_format = latent_formats.SC_Prior() + method = LatentPreviewMethod.Latent2RGB + elif preview_method == "Latent2RGB-SC-B": + latent_format = latent_formats.SC_B() + method = LatentPreviewMethod.Latent2RGB + elif preview_method == "Latent2RGB-FLUX.1": + latent_format = latent_formats.Flux() + method = LatentPreviewMethod.Latent2RGB + elif preview_method == "Latent2RGB-LTXV": + latent_format = latent_formats.LTXV() + method = LatentPreviewMethod.Latent2RGB + else: + logging.warning(f"[Impact Pack] PreviewBridgeLatent: '{preview_method}' is unsupported preview method.") + latent_format = latent_formats.SD15() + method = LatentPreviewMethod.Latent2RGB + + previewer = core.get_previewer("cpu", latent_format=latent_format, force=True, method=method) + samples = latent_format.process_in(latent['samples']) + + pil_image = previewer.decode_latent_to_preview(samples) + pixels_size = pil_image.size[0]*8, pil_image.size[1]*8 + resized_image = pil_image.resize(pixels_size, resample=utils.LANCZOS) + + return utils.to_tensor(resized_image).unsqueeze(0) + + +class PreviewBridgeLatent: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "latent": ("LATENT",), + "image": ("STRING", {"default": ""}), + "preview_method": (["Latent2RGB-FLUX.1", + "Latent2RGB-SDXL", "Latent2RGB-SD15", "Latent2RGB-SD3", + "Latent2RGB-SD-X4", "Latent2RGB-Playground-2.5", + "Latent2RGB-SC-Prior", "Latent2RGB-SC-B", + "Latent2RGB-LTXV", + "TAEF1", "TAESDXL", "TAESD15", "TAESD3"],), + }, + "optional": { + "vae_opt": ("VAE", ), + "block": ("BOOLEAN", {"default": False, "label_on": "if_empty_mask", "label_off": "never", "tooltip": "is_empty_mask: If the mask is empty, the execution is stopped.\nnever: The execution is never stopped. Instead, it returns a white mask."}), + "restore_mask": (["never", "always", "if_same_size"], {"tooltip": "if_same_size: If the changed input latent is the same size as the previous latent, restore using the last saved mask\nalways: Whenever the input latent changes, always restore using the last saved mask\nnever: Do not restore the mask.\n`restore_mask` has higher priority than `block`\nIf the input latent already has a mask, do not restore mask."}), + }, + "hidden": {"unique_id": "UNIQUE_ID", "prompt": "PROMPT", "extra_pnginfo": "EXTRA_PNGINFO"}, + } + + RETURN_TYPES = ("LATENT", "MASK", ) + + FUNCTION = "doit" + + OUTPUT_NODE = True + + CATEGORY = "ImpactPack/Util" + + DESCRIPTION = "This is a feature that allows you to edit and send a Mask over a latent image.\nIf the block is set to 'is_empty_mask', the execution is stopped when the mask is empty." + + def __init__(self): + super().__init__() + self.output_dir = folder_paths.get_temp_directory() + self.type = "temp" + self.prev_hash = None + self.prefix_append = "_temp_" + ''.join(random.choice("abcdefghijklmnopqrstupvxyz") for x in range(5)) + + @staticmethod + def load_image(pb_id): + is_fail = False + if pb_id not in core.preview_bridge_image_id_map: + is_fail = True + + if not is_fail: + image_path, ui_item = core.preview_bridge_image_id_map[pb_id] + if not os.path.isfile(image_path): + is_fail = True + + if not is_fail: + i = Image.open(image_path) + i = ImageOps.exif_transpose(i) + image = i.convert("RGB") + image = np.array(image).astype(np.float32) / 255.0 + image = torch.from_numpy(image)[None,] + + if 'A' in i.getbands(): + mask = np.array(i.getchannel('A')).astype(np.float32) / 255.0 + mask = 1. - torch.from_numpy(mask) + else: + mask = None + else: + image = utils.empty_pil_tensor() + mask = None + ui_item = { + "filename": 'empty.png', + "subfolder": '', + "type": 'temp' + } + + return image, mask, ui_item + + def doit(self, latent, image, preview_method, vae_opt=None, block=False, unique_id=None, restore_mask='never', prompt=None, extra_pnginfo=None): + latent_channels = latent['samples'].shape[1] + + if 'SD3' in preview_method or 'SC-Prior' in preview_method or 'FLUX.1' in preview_method or 'TAEF1' == preview_method: + preview_method_channels = 16 + elif 'LTXV' in preview_method: + preview_method_channels = 128 + else: + preview_method_channels = 4 + + if vae_opt is None and latent_channels != preview_method_channels: + logging.warning("[PreviewBridgeLatent] The version of latent is not compatible with preview_method.\nSD3, SD1/SD2, SDXL, SC-Prior, SC-B and FLUX.1 are not compatible with each other.") + raise Exception("The version of latent is not compatible with preview_method.
    SD3, SD1/SD2, SDXL, SC-Prior, SC-B and FLUX.1 are not compatible with each other.") + + need_refresh = False + latent_changed = False + + # Check if latent has changed + if unique_id not in core.preview_bridge_cache: + need_refresh = True + latent_changed = True + elif (core.preview_bridge_cache[unique_id][0] is not latent + or (vae_opt is None and core.preview_bridge_cache[unique_id][2] is not None) + or (vae_opt is None and core.preview_bridge_cache[unique_id][1] != preview_method) + or (vae_opt is not None and core.preview_bridge_cache[unique_id][2] is not vae_opt)): + need_refresh = True + latent_changed = True + + # If latent changed, clear the mask cache to ensure fresh start behavior + # unless restore_mask is set to "always" or "if_same_size" + if latent_changed and restore_mask not in ["always", "if_same_size"] and unique_id in core.preview_bridge_last_mask_cache: + del core.preview_bridge_last_mask_cache[unique_id] + + # Handle clipspace files that aren't registered in the preview bridge system + # This only applies when latent hasn't changed (same latent, new mask scenario) + if not need_refresh and image not in core.preview_bridge_image_id_map: + is_clipspace = image and ("clipspace" in image.lower() or "[input]" in image) + if is_clipspace: + if not PreviewBridge.register_clipspace_image(image, unique_id): + need_refresh = True + else: + need_refresh = True + + if not need_refresh: + pixels, mask, path_item = PreviewBridge.load_image(image) + + if mask is None: + mask = torch.ones(latent['samples'].shape[2:], dtype=torch.float32, device="cpu").unsqueeze(0) + if 'noise_mask' in latent: + res_latent = latent.copy() + del res_latent['noise_mask'] + else: + res_latent = latent + + is_empty_mask = True + else: + res_latent = latent.copy() + res_latent['noise_mask'] = mask + + is_empty_mask = torch.all(mask == 1) + + res_image = [path_item] + else: + decoded_image = decode_latent(latent, preview_method, vae_opt) + + if 'noise_mask' in latent: + mask = latent['noise_mask'].squeeze(0) # 4D mask -> 3D mask + + decoded_pil = utils.to_pil(decoded_image) + + inverted_mask = 1 - mask # invert + resized_mask = utils.resize_mask(inverted_mask, (decoded_image.shape[1], decoded_image.shape[2])) + result_pil = utils.apply_mask_alpha_to_pil(decoded_pil, resized_mask) + + full_output_folder, filename, counter, _, _ = folder_paths.get_save_image_path("PreviewBridge/PBL-"+self.prefix_append, folder_paths.get_temp_directory(), result_pil.size[0], result_pil.size[1]) + file = f"{filename}_{counter}.png" + result_pil.save(os.path.join(full_output_folder, file), compress_level=4) + res_image = [{ + 'filename': file, + 'subfolder': 'PreviewBridge', + 'type': 'temp', + }] + + is_empty_mask = False + else: + # For new latents (latent_changed=True), start fresh regardless of restore_mask + # For same latent with refresh needed, respect the restore_mask setting + # Exception: when restore_mask is "always", restore even with new latents + # Exception: when restore_mask is "if_same_size", allow restoration to check size compatibility + if restore_mask != "never" and (not latent_changed or restore_mask in ["always", "if_same_size"]): + mask = core.preview_bridge_last_mask_cache.get(unique_id) + if mask is None: + mask = None + elif restore_mask == "if_same_size" and mask.shape[1:] != decoded_image.shape[1:3]: + # For if_same_size, clear mask if dimensions don't match + mask = None + # For "always", keep the mask regardless of size + else: + mask = None + + if mask is None: + mask = torch.ones(latent['samples'].shape[2:], dtype=torch.float32, device="cpu").unsqueeze(0) + res = nodes.PreviewImage().save_images(decoded_image, filename_prefix="PreviewBridge/PBL-", prompt=prompt, extra_pnginfo=extra_pnginfo) + else: + masked_images = utils.tensor_convert_rgba(decoded_image) + resized_mask = utils.resize_mask(mask, (decoded_image.shape[1], decoded_image.shape[2])).unsqueeze(3) + resized_mask = 1 - resized_mask + utils.tensor_putalpha(masked_images, resized_mask) + res = nodes.PreviewImage().save_images(masked_images, filename_prefix="PreviewBridge/PBL-", prompt=prompt, extra_pnginfo=extra_pnginfo) + + res_image = res['ui']['images'] + + is_empty_mask = torch.all(mask == 1) + + path = os.path.join(folder_paths.get_temp_directory(), 'PreviewBridge', res_image[0]['filename']) + core.set_previewbridge_image(unique_id, path, res_image[0]) + core.preview_bridge_image_id_map[image] = (path, res_image[0]) + core.preview_bridge_image_name_map[unique_id, path] = (image, res_image[0]) + core.preview_bridge_cache[unique_id] = (latent, preview_method, vae_opt, res_image) + + res_latent = latent + + if block and is_empty_mask and core.is_execution_model_version_supported(): + from comfy_execution.graph import ExecutionBlocker + result = ExecutionBlocker(None), ExecutionBlocker(None) + elif block and is_empty_mask: + logging.warning("[Impact Pack] PreviewBridgeLatent: ComfyUI is outdated - blocking feature is disabled.") + result = res_latent, mask + else: + result = res_latent, mask + + if not is_empty_mask: + core.preview_bridge_last_mask_cache[unique_id] = mask + + return { + "ui": {"images": res_image}, + "result": result, + } \ No newline at end of file diff --git a/comfyui-impact-pack/modules/impact/config.py b/comfyui-impact-pack/modules/impact/config.py new file mode 100644 index 0000000000000000000000000000000000000000..19d5278c9f3e2e9ad1eff55b1ee48cf26bf98b82 --- /dev/null +++ b/comfyui-impact-pack/modules/impact/config.py @@ -0,0 +1,78 @@ +import configparser +import logging +import os + +version_code = [8, 28, 2] +version = f"V{version_code[0]}.{version_code[1]}" + (f'.{version_code[2]}' if len(version_code) > 2 else '') + +my_path = os.path.dirname(__file__) +old_config_path = os.path.join(my_path, "impact-pack.ini") +config_path = os.path.join(my_path, "..", "..", "impact-pack.ini") +latent_letter_path = os.path.join(my_path, "..", "..", "latent.png") + + +def write_config(): + config = configparser.ConfigParser() + config['default'] = { + 'sam_editor_cpu': str(get_config()['sam_editor_cpu']), + 'sam_editor_model': get_config()['sam_editor_model'], + 'custom_wildcards': get_config()['custom_wildcards'], + 'disable_gpu_opencv': get_config()['disable_gpu_opencv'], + 'wildcard_cache_limit_mb': str(get_config()['wildcard_cache_limit_mb']), + } + with open(config_path, 'w') as configfile: + config.write(configfile) + + +def read_config(): + try: + config = configparser.ConfigParser() + config.read(config_path) + default_conf = config['default'] + + # Strip quotes from custom_wildcards path if present + custom_wildcards_path = default_conf.get('custom_wildcards', '').strip('\'"') + + if not os.path.exists(custom_wildcards_path): + logging.warning(f"[Impact Pack] custom_wildcards path not found: {custom_wildcards_path}. Using default path.") + custom_wildcards_path = os.path.join(my_path, "..", "..", "custom_wildcards") + + default_conf['custom_wildcards'] = custom_wildcards_path + + # Parse wildcard_cache_limit_mb with default value of 50MB + cache_limit_mb = 50 + if 'wildcard_cache_limit_mb' in default_conf: + try: + cache_limit_mb = float(default_conf['wildcard_cache_limit_mb']) + except ValueError: + logging.warning(f"[Impact Pack] Invalid wildcard_cache_limit_mb value: {default_conf['wildcard_cache_limit_mb']}. Using default: 50") + cache_limit_mb = 50 + + return { + 'sam_editor_cpu': default_conf['sam_editor_cpu'].lower() == 'true' if 'sam_editor_cpu' in default_conf else False, + 'sam_editor_model': default_conf['sam_editor_model'].lower() if 'sam_editor_model' else 'sam_vit_b_01ec64.pth', + 'custom_wildcards': default_conf['custom_wildcards'] if 'custom_wildcards' in default_conf else os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "..", "custom_wildcards")), + 'disable_gpu_opencv': default_conf['disable_gpu_opencv'].lower() == 'true' if 'disable_gpu_opencv' in default_conf else True, + 'wildcard_cache_limit_mb': cache_limit_mb + } + + except Exception: + return { + 'sam_editor_cpu': False, + 'sam_editor_model': 'sam_vit_b_01ec64.pth', + 'custom_wildcards': os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "..", "custom_wildcards")), + 'disable_gpu_opencv': True, + 'wildcard_cache_limit_mb': 50 + } + + +cached_config = None + + +def get_config(): + global cached_config + + if cached_config is None: + cached_config = read_config() + + return cached_config diff --git a/comfyui-impact-pack/modules/impact/core.py b/comfyui-impact-pack/modules/impact/core.py new file mode 100644 index 0000000000000000000000000000000000000000..801b71fb9bb13b7c7dd682f7c4784729ebaad9ca --- /dev/null +++ b/comfyui-impact-pack/modules/impact/core.py @@ -0,0 +1,2417 @@ +import os +import warnings + +import torch +from segment_anything import SamPredictor + +from comfy_extras.nodes_custom_sampler import Noise_RandomNoise +from collections import namedtuple +import numpy as np +from PIL import ImageOps, Image + +import nodes +from server import PromptServer +import comfy +import impact.wildcards as wildcards +import math +import cv2 +import time +from comfy import model_management +from impact import utils +from impact import impact_sampling +from concurrent.futures import ThreadPoolExecutor +import inspect +from collections import OrderedDict +import torch.nn.functional as F +import logging +import sys +import importlib + + +is_sam2_available = importlib.util.find_spec("sam2") +sam2_unavailable_message = f"\n----------------------------------------------------------------------------\n[Impact Pack] The SAM2 functionality is unavailable because the `facebook/sam2` dependency is not installed.\n\nInstallation command:\n{sys.executable} -m pip install git+https://github.com/facebookresearch/sam2\n----------------------------------------------------------------------------\n" +if is_sam2_available: + from sam2.sam2_image_predictor import SAM2ImagePredictor + from sam2.build_sam import build_sam2, build_sam2_video_predictor +else: + logging.warning(sam2_unavailable_message) + +try: + from comfy_extras import nodes_differential_diffusion +except Exception: + logging.warning("\n#############################################\n[Impact Pack] ComfyUI is an outdated version.\n#############################################\n") + raise Exception("[Impact Pack] ComfyUI is an outdated version.") + + +SEG = namedtuple("SEG", + ['cropped_image', 'cropped_mask', 'confidence', 'crop_region', 'bbox', 'label', 'control_net_wrapper'], + defaults=[None]) + +pb_id_cnt = time.time() +preview_bridge_image_id_map = {} +preview_bridge_image_name_map = {} + +preview_bridge_cache = {} +preview_bridge_last_mask_cache = {} + +current_prompt = None + +ADDITIONAL_SCHEDULERS = ['AYS SDXL', 'AYS SD1', 'AYS SVD', 'GITS[coeff=1.2]', 'LTXV[default]', 'OSS FLUX', 'OSS Wan', 'OSS Chroma'] + +def get_schedulers(): + return list(comfy.samplers.SCHEDULER_HANDLERS) + ADDITIONAL_SCHEDULERS + +def is_execution_model_version_supported(): + try: + import comfy_execution # noqa: F401 + return True + except Exception: + return False + + +def set_previewbridge_image(node_id, file, item): + global pb_id_cnt + + if file in preview_bridge_image_name_map: + pb_id = preview_bridge_image_name_map[node_id, file] + if pb_id.startswith(f"${node_id}"): + return pb_id + + pb_id = f"${node_id}-{pb_id_cnt}" + preview_bridge_image_id_map[pb_id] = (file, item) + preview_bridge_image_name_map[node_id, file] = (pb_id, item) + if os.path.isfile(file): + i = Image.open(file) + i = ImageOps.exif_transpose(i) + if 'A' in i.getbands(): + mask = np.array(i.getchannel('A')).astype(np.float32) / 255.0 + mask = 1. - torch.from_numpy(mask) + preview_bridge_last_mask_cache[node_id] = mask.unsqueeze(0) + pb_id_cnt += 1 + + return pb_id + + +def erosion_mask(mask, grow_mask_by): + mask = utils.make_2d_mask(mask) + + w = mask.shape[1] + h = mask.shape[0] + + device = comfy.model_management.get_torch_device() + mask = mask.clone().to(device) + mask2 = torch.nn.functional.interpolate(mask.reshape((-1, 1, mask.shape[-2], mask.shape[-1])), size=(w, h), mode="bilinear").to(device) + if grow_mask_by == 0: + mask_erosion = mask2 + else: + kernel_tensor = torch.ones((1, 1, grow_mask_by, grow_mask_by)).to(device) + padding = math.ceil((grow_mask_by - 1) / 2) + + mask_erosion = torch.clamp(torch.nn.functional.conv2d(mask2.round(), kernel_tensor, padding=padding), 0, 1) + + return mask_erosion[:, :, :w, :h].round().cpu() + + +# CREDIT: https://github.com/BlenderNeko/ComfyUI_Noise/blob/afb14757216257b12268c91845eac248727a55e2/nodes.py#L68 +# https://discuss.pytorch.org/t/help-regarding-slerp-function-for-generative-model-sampling/32475/3 +def slerp(val, low, high): + dims = low.shape + + low = low.reshape(dims[0], -1) + high = high.reshape(dims[0], -1) + + low_norm = low/torch.norm(low, dim=1, keepdim=True) + high_norm = high/torch.norm(high, dim=1, keepdim=True) + + low_norm[low_norm != low_norm] = 0.0 + high_norm[high_norm != high_norm] = 0.0 + + omega = torch.acos((low_norm*high_norm).sum(1)) + so = torch.sin(omega) + res = (torch.sin((1.0-val)*omega)/so).unsqueeze(1)*low + (torch.sin(val*omega)/so).unsqueeze(1) * high + + return res.reshape(dims) + + +def mix_noise(from_noise, to_noise, strength, variation_method): + if variation_method == 'slerp': + mixed_noise = slerp(strength, from_noise, to_noise) + else: + # linear + mixed_noise = (1 - strength) * from_noise + strength * to_noise + + # NOTE: Since the variance of the Gaussian noise in mixed_noise has changed, it must be corrected through scaling. + scale_factor = math.sqrt((1 - strength) ** 2 + strength ** 2) + mixed_noise /= scale_factor + + return mixed_noise + + +class REGIONAL_PROMPT: + def __init__(self, mask, sampler, variation_seed=0, variation_strength=0.0, variation_method='linear'): + mask = utils.make_2d_mask(mask) + + self.mask = mask + self.sampler = sampler + self.mask_erosion = None + self.erosion_factor = None + self.variation_seed = variation_seed + self.variation_strength = variation_strength + self.variation_method = variation_method + + def clone_with_sampler(self, sampler): + rp = REGIONAL_PROMPT(self.mask, sampler) + rp.mask_erosion = self.mask_erosion + rp.erosion_factor = self.erosion_factor + rp.variation_seed = self.variation_seed + rp.variation_strength = self.variation_strength + rp.variation_method = self.variation_method + return rp + + def get_mask_erosion(self, factor): + if self.mask_erosion is None or self.erosion_factor != factor: + self.mask_erosion = erosion_mask(self.mask, factor) + self.erosion_factor = factor + + return self.mask_erosion + + def touch_noise(self, noise): + if self.variation_strength > 0.0: + mask = utils.make_3d_mask(self.mask) + mask = utils.resize_mask(mask, (noise.shape[2], noise.shape[3])).unsqueeze(0) + + regional_noise = Noise_RandomNoise(self.variation_seed).generate_noise({'samples': noise}) + mixed_noise = mix_noise(noise, regional_noise, self.variation_strength, variation_method=self.variation_method) + + return (mask == 1).float() * mixed_noise + (mask == 0).float() * noise + + return noise + + +class NO_BBOX_DETECTOR: + pass + + +class NO_SEGM_DETECTOR: + pass + + +def create_segmasks(results): + bboxs = results[1] + segms = results[2] + confidence = results[3] + + results = [] + for i in range(len(segms)): + item = (bboxs[i], segms[i].astype(np.float32), confidence[i]) + results.append(item) + return results + + +def gen_detection_hints_from_mask_area(x, y, mask, threshold, use_negative): + mask = utils.make_2d_mask(mask) + + points = [] + plabs = [] + + # minimum sampling step >= 3 + y_step = max(3, int(mask.shape[0] / 20)) + x_step = max(3, int(mask.shape[1] / 20)) + + for i in range(0, len(mask), y_step): + for j in range(0, len(mask[i]), x_step): + if mask[i][j] > threshold: + points.append((x + j, y + i)) + plabs.append(1) + elif use_negative and mask[i][j] == 0: + points.append((x + j, y + i)) + plabs.append(0) + + return points, plabs + + +def gen_negative_hints(w, h, x1, y1, x2, y2): + npoints = [] + nplabs = [] + + # minimum sampling step >= 3 + y_step = max(3, int(w / 20)) + x_step = max(3, int(h / 20)) + + for i in range(10, h - 10, y_step): + for j in range(10, w - 10, x_step): + if not (x1 - 10 <= j and j <= x2 + 10 and y1 - 10 <= i and i <= y2 + 10): + npoints.append((j, i)) + nplabs.append(0) + + return npoints, nplabs + + +def enhance_detail(image, model, clip, vae, guide_size, guide_size_for_bbox, max_size, bbox, seed, steps, cfg, + sampler_name, + scheduler, positive, negative, denoise, noise_mask, force_inpaint, + wildcard_opt=None, wildcard_opt_concat_mode=None, + detailer_hook=None, + refiner_ratio=None, refiner_model=None, refiner_clip=None, refiner_positive=None, + refiner_negative=None, control_net_wrapper=None, cycle=1, + inpaint_model=False, noise_mask_feather=0, scheduler_func=None, + vae_tiled_encode=False, vae_tiled_decode=False): + + if noise_mask is not None: + noise_mask = utils.tensor_gaussian_blur_mask(noise_mask, noise_mask_feather) + noise_mask = noise_mask.squeeze(3) + + if noise_mask_feather > 0 and 'denoise_mask_function' not in model.model_options: + model = nodes_differential_diffusion.DifferentialDiffusion().execute(model)[0] + + if wildcard_opt is not None and wildcard_opt != "": + model, _, wildcard_positive = wildcards.process_with_loras(wildcard_opt, model, clip) + + if wildcard_opt_concat_mode == "concat": + positive = nodes.ConditioningConcat().concat(positive, wildcard_positive)[0] + else: + positive = wildcard_positive + positive = [positive[0].copy()] + if 'pooled_output' in wildcard_positive[0][1]: + positive[0][1]['pooled_output'] = wildcard_positive[0][1]['pooled_output'] + elif 'pooled_output' in positive[0][1]: + del positive[0][1]['pooled_output'] + + h = image.shape[1] + w = image.shape[2] + + bbox_h = bbox[3] - bbox[1] + bbox_w = bbox[2] - bbox[0] + + # Skip processing if the detected bbox is already larger than the guide_size + if not force_inpaint and bbox_h >= guide_size and bbox_w >= guide_size: + logging.info("Detailer: segment skip (enough big)") + return None, None + + if guide_size_for_bbox: # == "bbox" + # Scale up based on the smaller dimension between width and height. + upscale = guide_size / min(bbox_w, bbox_h) + else: + # for cropped_size + upscale = guide_size / min(w, h) + + new_w = int(w * upscale) + new_h = int(h * upscale) + + # safeguard + if 'aitemplate_keep_loaded' in model.model_options: + max_size = min(4096, max_size) + + if new_w > max_size or new_h > max_size: + upscale *= max_size / max(new_w, new_h) + new_w = int(w * upscale) + new_h = int(h * upscale) + + if not force_inpaint: + if upscale <= 1.0: + logging.info(f"Detailer: segment skip [determined upscale factor={upscale}]") + return None, None + + if new_w == 0 or new_h == 0: + logging.info(f"Detailer: segment skip [zero size={new_w, new_h}]") + return None, None + else: + if upscale <= 1.0 or new_w == 0 or new_h == 0: + logging.info("Detailer: force inpaint") + upscale = 1.0 + new_w = w + new_h = h + + if detailer_hook is not None: + new_w, new_h = detailer_hook.touch_scaled_size(new_w, new_h) + + logging.info(f"Detailer: segment upscale for ({bbox_w, bbox_h}) | crop region {w, h} x {upscale} -> {new_w, new_h}") + + # upscale + upscaled_image = utils.tensor_resize(image, new_w, new_h) + + if detailer_hook is not None: + upscaled_image = detailer_hook.post_upscale(upscaled_image, noise_mask) + + cnet_pils = None + if control_net_wrapper is not None: + positive, negative, cnet_pils = control_net_wrapper.apply(positive, negative, upscaled_image, noise_mask) + model, cnet_pils2 = control_net_wrapper.doit_ipadapter(model) + cnet_pils.extend(cnet_pils2) + + # prepare mask + if detailer_hook is None or not detailer_hook.get_skip_sampling(): + if noise_mask is not None and inpaint_model: + imc_encode = nodes.InpaintModelConditioning().encode + if 'noise_mask' in inspect.signature(imc_encode).parameters: + positive, negative, latent_image = imc_encode(positive, negative, upscaled_image, vae, mask=noise_mask, noise_mask=True) + else: + logging.warning("[Impact Pack] ComfyUI is an outdated version.") + positive, negative, latent_image = imc_encode(positive, negative, upscaled_image, vae, noise_mask) + else: + latent_image = utils.to_latent_image(upscaled_image, vae, vae_tiled_encode=vae_tiled_encode) + if noise_mask is not None: + latent_image['noise_mask'] = noise_mask + + if detailer_hook is not None: + latent_image = detailer_hook.post_encode(latent_image) + + refined_latent = latent_image + + sampler_opt=None + if detailer_hook is not None: + sampler_opt = detailer_hook.get_custom_sampler() + + # ksampler + for i in range(0, cycle): + if detailer_hook is not None: + if detailer_hook is not None: + detailer_hook.set_steps((i, cycle)) + + refined_latent = detailer_hook.cycle_latent(refined_latent) + + model2, seed2, steps2, cfg2, sampler_name2, scheduler2, positive2, negative2, upscaled_latent2, denoise2 = \ + detailer_hook.pre_ksample(model, seed+i, steps, cfg, sampler_name, scheduler, positive, negative, latent_image, denoise) + noise, is_touched = detailer_hook.get_custom_noise(seed+i, torch.zeros(latent_image['samples'].size()), is_touched=False) + if not is_touched: + noise = None + else: + model2, seed2, steps2, cfg2, sampler_name2, scheduler2, positive2, negative2, _, denoise2 = \ + model, seed + i, steps, cfg, sampler_name, scheduler, positive, negative, latent_image, denoise + noise = None + + refined_latent = impact_sampling.ksampler_wrapper(model2, seed2, steps2, cfg2, sampler_name2, scheduler2, positive2, negative2, + refined_latent, denoise2, refiner_ratio, refiner_model, refiner_clip, refiner_positive, refiner_negative, + noise=noise, scheduler_func=scheduler_func, sampler_opt=sampler_opt) + + if detailer_hook is not None: + refined_latent = detailer_hook.pre_decode(refined_latent) + + # non-latent downscale - latent downscale cause bad quality + start = time.time() + if vae_tiled_decode: + (refined_image,) = nodes.VAEDecodeTiled().decode(vae, refined_latent, 512) # using default settings + logging.info(f"[Impact Pack] vae decoded (tiled) in {time.time() - start:.1f}s") + else: + try: + refined_image = vae.decode(refined_latent['samples']) + except Exception: + # usually an out-of-memory exception from the decode, so try a tiled approach + logging.warning(f"[Impact Pack] failed after {time.time() - start:.1f}s, doing vae.decode_tiled 64...") + refined_image = vae.decode_tiled(refined_latent["samples"], tile_x=64, tile_y=64, ) + logging.info(f"[Impact Pack] vae decoded in {time.time() - start:.1f}s") + else: + # skipped + refined_image = upscaled_image + + if detailer_hook is not None: + refined_image = detailer_hook.post_decode(refined_image) + + # downscale + + # workaround: support WAN as an i2i model + if len(refined_image.shape) == 5: + refined_image = refined_image.squeeze(0) + + refined_image = utils.tensor_resize(refined_image, w, h) + + # prevent mixing of device + refined_image = refined_image.cpu() + + # don't convert to latent - latent break image + # preserving pil is much better + return refined_image, cnet_pils + + +def enhance_detail_for_animatediff(image_frames, model, clip, vae, guide_size, guide_size_for_bbox, max_size, bbox, seed, steps, cfg, + sampler_name, + scheduler, positive, negative, denoise, noise_mask, + wildcard_opt=None, wildcard_opt_concat_mode=None, + detailer_hook=None, + refiner_ratio=None, refiner_model=None, refiner_clip=None, refiner_positive=None, + refiner_negative=None, control_net_wrapper=None, noise_mask_feather=0, scheduler_func=None): + if noise_mask is not None: + noise_mask = utils.tensor_gaussian_blur_mask(noise_mask, noise_mask_feather) + noise_mask = noise_mask.squeeze(3) + + if noise_mask_feather > 0 and 'denoise_mask_function' not in model.model_options: + model = nodes_differential_diffusion.DifferentialDiffusion().execute(model)[0] + + if wildcard_opt is not None and wildcard_opt != "": + model, _, wildcard_positive = wildcards.process_with_loras(wildcard_opt, model, clip) + + if wildcard_opt_concat_mode == "concat": + positive = nodes.ConditioningConcat().concat(positive, wildcard_positive)[0] + else: + positive = wildcard_positive + + h = image_frames.shape[1] + w = image_frames.shape[2] + + bbox_h = bbox[3] - bbox[1] + bbox_w = bbox[2] - bbox[0] + + # Skip processing if the detected bbox is already larger than the guide_size + if guide_size_for_bbox: # == "bbox" + # Scale up based on the smaller dimension between width and height. + upscale = guide_size / min(bbox_w, bbox_h) + else: + # for cropped_size + upscale = guide_size / min(w, h) + + new_w = int(w * upscale) + new_h = int(h * upscale) + + # safeguard + if 'aitemplate_keep_loaded' in model.model_options: + max_size = min(4096, max_size) + + if new_w > max_size or new_h > max_size: + upscale *= max_size / max(new_w, new_h) + new_w = int(w * upscale) + new_h = int(h * upscale) + + if upscale <= 1.0 or new_w == 0 or new_h == 0: + logging.info("Detailer: force inpaint") + upscale = 1.0 + new_w = w + new_h = h + + if detailer_hook is not None: + new_w, new_h = detailer_hook.touch_scaled_size(new_w, new_h) + + logging.info(f"Detailer: segment upscale for ({bbox_w, bbox_h}) | crop region {w, h} x {upscale} -> {new_w, new_h}") + + # upscale the mask tensor by a factor of 2 using bilinear interpolation + if isinstance(noise_mask, np.ndarray): + noise_mask = torch.from_numpy(noise_mask) + + if len(noise_mask.shape) == 2: + noise_mask = noise_mask.unsqueeze(0) + else: # == 3 + noise_mask = noise_mask + + upscaled_mask = None + + for single_mask in noise_mask: + single_mask = single_mask.unsqueeze(0).unsqueeze(0) + upscaled_single_mask = torch.nn.functional.interpolate(single_mask, size=(new_h, new_w), mode='bilinear', align_corners=False) + upscaled_single_mask = upscaled_single_mask.squeeze(0) + + if upscaled_mask is None: + upscaled_mask = upscaled_single_mask + else: + upscaled_mask = torch.cat((upscaled_mask, upscaled_single_mask), dim=0) + + latent_frames = None + for image in image_frames: + image = torch.from_numpy(image).unsqueeze(0) + + # upscale + upscaled_image = utils.tensor_resize(image, new_w, new_h) + + # ksampler + samples = utils.to_latent_image(upscaled_image, vae)['samples'] + + if latent_frames is None: + latent_frames = samples + else: + latent_frames = torch.concat((latent_frames, samples), dim=0) + + cnet_images = None + if control_net_wrapper is not None: + positive, negative, cnet_images = control_net_wrapper.apply(positive, negative, torch.from_numpy(image_frames), noise_mask, use_acn=True) + + if len(upscaled_mask) != len(image_frames) and len(upscaled_mask) > 1: + logging.warning(f"[Impact Pack] DetailerForAnimateDiff: The number of the mask frames({len(upscaled_mask)}) and the image frames({len(image_frames)}) are different. Combine the mask frames and apply.") + combined_mask = upscaled_mask[0].to(torch.uint8) + + for frame_mask in upscaled_mask[1:]: + combined_mask |= (frame_mask * 255).to(torch.uint8) + + combined_mask = (combined_mask/255.0).to(torch.float32) + + upscaled_mask = combined_mask.expand(len(image_frames), -1, -1) + upscaled_mask = utils.to_binary_mask(upscaled_mask, 0.1) + + latent = { + 'noise_mask': upscaled_mask, + 'samples': latent_frames + } + + + sampler_opt=None + if detailer_hook is not None: + sampler_opt = detailer_hook.get_custom_sampler() + + if detailer_hook is not None: + latent = detailer_hook.post_encode(latent) + + refined_latent = impact_sampling.ksampler_wrapper(model, seed, steps, cfg, sampler_name, scheduler, positive, negative, + latent, denoise, refiner_ratio, refiner_model, refiner_clip, refiner_positive, refiner_negative, scheduler_func=scheduler_func, sampler_opt=sampler_opt) + + if detailer_hook is not None: + refined_latent = detailer_hook.pre_decode(refined_latent) + + refined_image_frames = None + for refined_sample in refined_latent['samples']: + refined_sample = refined_sample.unsqueeze(0) + + # non-latent downscale - latent downscale cause bad quality + refined_image = vae.decode(refined_sample) + + if refined_image_frames is None: + refined_image_frames = refined_image + else: + refined_image_frames = torch.concat((refined_image_frames, refined_image), dim=0) + + if detailer_hook is not None: + refined_image_frames = detailer_hook.post_decode(refined_image_frames) + + refined_image_frames = nodes.ImageScale().upscale(image=refined_image_frames, upscale_method='lanczos', width=w, height=h, crop='disabled')[0] + + return refined_image_frames, cnet_images + + +def composite_to(dest_latent, crop_region, src_latent): + x1 = crop_region[0] + y1 = crop_region[1] + + # composite to original latent + lc = nodes.LatentComposite() + orig_image = lc.composite(dest_latent, src_latent, x1, y1) + + return orig_image[0] + + +def sam_predict(predictor, points, plabs, bbox, threshold): + point_coords = None if not points else np.array(points) + point_labels = None if not plabs else np.array(plabs) + + box = np.array([bbox]) if bbox is not None else None + + cur_masks, scores, _ = predictor.predict(point_coords=point_coords, point_labels=point_labels, box=box) + + total_masks = [] + + selected = False + max_score = 0 + max_mask = None + for idx in range(len(scores)): + if scores[idx] > max_score: + max_score = scores[idx] + max_mask = cur_masks[idx] + + if scores[idx] >= threshold: + selected = True + total_masks.append(cur_masks[idx]) + else: + pass + + if not selected and max_mask is not None: + total_masks.append(max_mask) + + return total_masks + + +class SAMWrapper: + def __init__(self, model, is_auto_mode, safe_to_gpu=None): + self.model = model + self.safe_to_gpu = safe_to_gpu if safe_to_gpu is not None else SafeToGPU_stub() + self.is_auto_mode = is_auto_mode + + def prepare_device(self): + if self.is_auto_mode: + device = comfy.model_management.get_torch_device() + self.safe_to_gpu.to_device(self.model, device=device) + + def release_device(self): + if self.is_auto_mode: + self.model.to(device="cpu") + + def predict(self, image, points, plabs, bbox, threshold): + predictor = SamPredictor(self.model) + predictor.set_image(image, "RGB") + + return sam_predict(predictor, points, plabs, bbox, threshold) + + +class SAM2Wrapper: + def __init__(self, config, modelname, is_auto_mode, safe_to_gpu=None, device_mode="AUTO"): + self.config = config + self.modelname = modelname + self.image_predictor = None + self.video_predictor = None + self.device_mode = device_mode + self.safe_to_gpu = safe_to_gpu if safe_to_gpu is not None else SafeToGPU_stub() + self.is_auto_mode = is_auto_mode + + def prepare_device(self): + pass + + def prepare_image_device(self): + if self.is_auto_mode: + device = comfy.model_management.get_torch_device() + self.safe_to_gpu.to_device(self.image_predictor.model, device=device) + + def prepare_video_device(self): + if self.is_auto_mode: + device = comfy.model_management.get_torch_device() + self.safe_to_gpu.to_device(self.video_predictor, device=device) + + def release_device(self): + if self.is_auto_mode: + if self.image_predictor: + self.image_predictor.model.to(device="cpu") + if self.video_predictor: + self.video_predictor.to(device="cpu") + + def predict(self, image, points, plabs, bbox, threshold): + if not is_sam2_available: + raise Exception(sam2_unavailable_message) + + if self.image_predictor is None: + self.image_predictor = SAM2ImagePredictor(build_sam2(self.config, self.modelname)) + + self.prepare_image_device() + + self.image_predictor.set_image(image) + + return sam_predict(self.image_predictor, points, plabs, bbox, threshold) + + def predict_video_segs(self, image_frames, segs): + if not is_sam2_available: + raise Exception(sam2_unavailable_message) + + if self.video_predictor is None: + self.video_predictor = build_sam2_video_predictor(self.config, self.modelname) + + self.prepare_video_device() + + orig_video_height = image_frames.shape[1] + orig_video_width = image_frames.shape[2] + + image_frames, padding = utils.resize_with_padding(image_frames, self.video_predictor.image_size, self.video_predictor.image_size) + image_frames = image_frames.permute(0, 3, 1, 2) + + inference_state = {} + inference_state["images"] = image_frames + inference_state["num_frames"] = len(image_frames) + inference_state["video_height"] = self.video_predictor.image_size + inference_state["video_width"] = self.video_predictor.image_size + inference_state["offload_video_to_cpu"] = True + inference_state["offload_state_to_cpu"] = self.device_mode == "CPU" + inference_state["device"] = self.video_predictor.device + + if inference_state["offload_state_to_cpu"]: + inference_state["storage_device"] = torch.device("cpu") + else: + inference_state["storage_device"] = self.video_predictor.device + + inference_state["point_inputs_per_obj"] = {} + inference_state["mask_inputs_per_obj"] = {} + inference_state["cached_features"] = {} + inference_state["constants"] = {} + + inference_state["obj_id_to_idx"] = OrderedDict() + inference_state["obj_idx_to_id"] = OrderedDict() + inference_state["obj_ids"] = [] + + inference_state["output_dict_per_obj"] = {} + inference_state["temp_output_dict_per_obj"] = {} + inference_state["frames_tracked_per_obj"] = {} + self.video_predictor._get_image_feature(inference_state, frame_idx=0, batch_size=1) + + temp_masks = {} + for i in range(0, len(segs[1])): + bbox = segs[1][i].bbox + + adjusted_bbox = utils.adjust_bbox_after_resize( + bbox, + (orig_video_height, orig_video_width), + (self.video_predictor.image_size, self.video_predictor.image_size), + padding + ) + + points = [utils.center_of_bbox(adjusted_bbox)] + plabs = [1] + self.video_predictor.add_new_points_or_box(inference_state=inference_state, frame_idx=0, obj_id=i, points=points, labels=plabs, box=adjusted_bbox) + temp_masks[i] = [] + + for frame_idx, object_ids, masks in self.video_predictor.propagate_in_video(inference_state): + for i in object_ids: + m = masks[i] + m = m.permute(1, 2, 0) + temp_masks[i].append(m) + + result = {} + for k, v in temp_masks.items(): + m = torch.stack(v, dim=0) + m = utils.remove_padding(m, padding) + result[k] = utils.resize_with_padding(m, orig_video_width, orig_video_height)[0] + + return result + +class ESAMWrapper: + def __init__(self, model, device): + self.model = model + self.func_inference = nodes.NODE_CLASS_MAPPINGS['Yoloworld_ESAM_Zho'] + self.device = device + + def prepare_device(self): + pass + + def release_device(self): + pass + + def predict(self, image, points, plabs, bbox, threshold): + if self.device == 'CPU': + self.device = 'cpu' + else: + self.device = 'cuda' + + detected_masks = self.func_inference.inference_sam_with_boxes(image=image, xyxy=[bbox], model=self.model, device=self.device) + return [detected_masks.squeeze(0)] + + +def make_sam_mask(sam, segs, image, detection_hint, dilation, + threshold, bbox_expansion, mask_hint_threshold, mask_hint_use_negative): + + if not hasattr(sam, 'sam_wrapper') and not isinstance(sam, SAM2Wrapper): + raise Exception("[Impact Pack] Invalid SAMLoader is connected. Make sure 'SAMLoader (Impact)'.\nKnown issue: The ComfyUI-YOLO node overrides the SAMLoader (Impact), making it unusable. You need to uninstall ComfyUI-YOLO.\n\n\n") + + + if isinstance(sam, SAM2Wrapper): + sam_obj = sam + else: + sam_obj = sam.sam_wrapper + + sam_obj.prepare_device() + + try: + image = np.clip(255. * image.cpu().numpy().squeeze(), 0, 255).astype(np.uint8) + + total_masks = [] + + use_small_negative = mask_hint_use_negative == "Small" + + # seg_shape = segs[0] + segs = segs[1] + if detection_hint == "mask-points": + points = [] + plabs = [] + + for i in range(len(segs)): + bbox = segs[i].bbox + center = utils.center_of_bbox(segs[i].bbox) + points.append(center) + + # small point is background, big point is foreground + if use_small_negative and bbox[2] - bbox[0] < 10: + plabs.append(0) + else: + plabs.append(1) + + detected_masks = sam_obj.predict(image, points, plabs, None, threshold) + total_masks += detected_masks + + else: + for i in range(len(segs)): + bbox = segs[i].bbox + center = utils.center_of_bbox(bbox) + + x1 = max(bbox[0] - bbox_expansion, 0) + y1 = max(bbox[1] - bbox_expansion, 0) + x2 = min(bbox[2] + bbox_expansion, image.shape[1]) + y2 = min(bbox[3] + bbox_expansion, image.shape[0]) + + dilated_bbox = [x1, y1, x2, y2] + + points = [] + plabs = [] + if detection_hint == "center-1": + points.append(center) + plabs = [1] # 1 = foreground point, 0 = background point + + elif detection_hint == "horizontal-2": + gap = (x2 - x1) / 3 + points.append((x1 + gap, center[1])) + points.append((x1 + gap * 2, center[1])) + plabs = [1, 1] + + elif detection_hint == "vertical-2": + gap = (y2 - y1) / 3 + points.append((center[0], y1 + gap)) + points.append((center[0], y1 + gap * 2)) + plabs = [1, 1] + + elif detection_hint == "rect-4": + x_gap = (x2 - x1) / 3 + y_gap = (y2 - y1) / 3 + points.append((x1 + x_gap, center[1])) + points.append((x1 + x_gap * 2, center[1])) + points.append((center[0], y1 + y_gap)) + points.append((center[0], y1 + y_gap * 2)) + plabs = [1, 1, 1, 1] + + elif detection_hint == "diamond-4": + x_gap = (x2 - x1) / 3 + y_gap = (y2 - y1) / 3 + points.append((x1 + x_gap, y1 + y_gap)) + points.append((x1 + x_gap * 2, y1 + y_gap)) + points.append((x1 + x_gap, y1 + y_gap * 2)) + points.append((x1 + x_gap * 2, y1 + y_gap * 2)) + plabs = [1, 1, 1, 1] + + elif detection_hint == "mask-point-bbox": + center = utils.center_of_bbox(segs[i].bbox) + points.append(center) + plabs = [1] + + elif detection_hint == "mask-area": + points, plabs = gen_detection_hints_from_mask_area(segs[i].crop_region[0], segs[i].crop_region[1], + segs[i].cropped_mask, + mask_hint_threshold, use_small_negative) + + if mask_hint_use_negative == "Outter": + npoints, nplabs = gen_negative_hints(image.shape[0], image.shape[1], + segs[i].crop_region[0], segs[i].crop_region[1], + segs[i].crop_region[2], segs[i].crop_region[3]) + + points += npoints + plabs += nplabs + + detected_masks = sam_obj.predict(image, points, plabs, dilated_bbox, threshold) + total_masks += detected_masks + + # merge every collected masks + mask = utils.combine_masks2(total_masks) + + finally: + sam_obj.release_device() + + if mask is not None: + mask = mask.float() + mask = utils.dilate_mask(mask.cpu().numpy(), dilation) + mask = torch.from_numpy(mask) + else: + size = image.shape[0], image.shape[1] + mask = torch.zeros(size, dtype=torch.float32, device="cpu") # empty mask + + mask = utils.make_3d_mask(mask) + return mask + + +def generate_detection_hints(image, seg, center, detection_hint, dilated_bbox, mask_hint_threshold, use_small_negative, + mask_hint_use_negative): + [x1, y1, x2, y2] = dilated_bbox + + points = [] + plabs = [] + if detection_hint == "center-1": + points.append(center) + plabs = [1] # 1 = foreground point, 0 = background point + + elif detection_hint == "horizontal-2": + gap = (x2 - x1) / 3 + points.append((x1 + gap, center[1])) + points.append((x1 + gap * 2, center[1])) + plabs = [1, 1] + + elif detection_hint == "vertical-2": + gap = (y2 - y1) / 3 + points.append((center[0], y1 + gap)) + points.append((center[0], y1 + gap * 2)) + plabs = [1, 1] + + elif detection_hint == "rect-4": + x_gap = (x2 - x1) / 3 + y_gap = (y2 - y1) / 3 + points.append((x1 + x_gap, center[1])) + points.append((x1 + x_gap * 2, center[1])) + points.append((center[0], y1 + y_gap)) + points.append((center[0], y1 + y_gap * 2)) + plabs = [1, 1, 1, 1] + + elif detection_hint == "diamond-4": + x_gap = (x2 - x1) / 3 + y_gap = (y2 - y1) / 3 + points.append((x1 + x_gap, y1 + y_gap)) + points.append((x1 + x_gap * 2, y1 + y_gap)) + points.append((x1 + x_gap, y1 + y_gap * 2)) + points.append((x1 + x_gap * 2, y1 + y_gap * 2)) + plabs = [1, 1, 1, 1] + + elif detection_hint == "mask-point-bbox": + center = utils.center_of_bbox(seg.bbox) + points.append(center) + plabs = [1] + + elif detection_hint == "mask-area": + points, plabs = gen_detection_hints_from_mask_area(seg.crop_region[0], seg.crop_region[1], + seg.cropped_mask, + mask_hint_threshold, use_small_negative) + + if mask_hint_use_negative == "Outter": + npoints, nplabs = gen_negative_hints(image.shape[0], image.shape[1], + seg.crop_region[0], seg.crop_region[1], + seg.crop_region[2], seg.crop_region[3]) + + points += npoints + plabs += nplabs + + return points, plabs + + +def convert_and_stack_masks(masks): + if len(masks) == 0: + return None + + mask_tensors = [] + for mask in masks: + mask_array = np.array(mask, dtype=np.uint8) + mask_tensor = torch.from_numpy(mask_array) + mask_tensors.append(mask_tensor) + + stacked_masks = torch.stack(mask_tensors, dim=0) + stacked_masks = stacked_masks.unsqueeze(1) + + return stacked_masks + + +def merge_and_stack_masks(stacked_masks, group_size): + if stacked_masks is None: + return None + + num_masks = stacked_masks.size(0) + merged_masks = [] + + for i in range(0, num_masks, group_size): + subset_masks = stacked_masks[i:i + group_size] + merged_mask = torch.any(subset_masks, dim=0) + merged_masks.append(merged_mask) + + if len(merged_masks) > 0: + merged_masks = torch.stack(merged_masks, dim=0) + + return merged_masks + + +def segs_scale_match(segs, target_shape): + h = segs[0][0] + w = segs[0][1] + + th = target_shape[1] + tw = target_shape[2] + + if (h == th and w == tw) or h == 0 or w == 0: + return segs + + rh = th / h + rw = tw / w + + new_segs = [] + for seg in segs[1]: + cropped_image = seg.cropped_image + cropped_mask = seg.cropped_mask + x1, y1, x2, y2 = seg.crop_region + bx1, by1, bx2, by2 = seg.bbox + + crop_region = int(x1*rw), int(y1*rw), int(x2*rh), int(y2*rh) + bbox = int(bx1*rw), int(by1*rw), int(bx2*rh), int(by2*rh) + new_w = crop_region[2] - crop_region[0] + new_h = crop_region[3] - crop_region[1] + + if isinstance(cropped_mask, np.ndarray): + cropped_mask = torch.from_numpy(cropped_mask) + + if isinstance(cropped_mask, torch.Tensor) and len(cropped_mask.shape) == 3: + cropped_mask = torch.nn.functional.interpolate(cropped_mask.unsqueeze(0), size=(new_h, new_w), mode='bilinear', align_corners=False) + cropped_mask = cropped_mask.squeeze(0) + else: + cropped_mask = torch.nn.functional.interpolate(cropped_mask.unsqueeze(0).unsqueeze(0), size=(new_h, new_w), mode='bilinear', align_corners=False) + cropped_mask = cropped_mask.squeeze(0).squeeze(0).numpy() + + if cropped_image is not None: + cropped_image = utils.tensor_resize(cropped_image if isinstance(cropped_image, torch.Tensor) else torch.from_numpy(cropped_image), new_w, new_h) + cropped_image = cropped_image.numpy() + + new_seg = SEG(cropped_image, cropped_mask, seg.confidence, crop_region, bbox, seg.label, seg.control_net_wrapper) + new_segs.append(new_seg) + + return (th, tw), new_segs + + +# Used Python's slicing feature. stacked_masks[2::3] means starting from index 2, selecting every third tensor with a step size of 3. +# This allows for quickly obtaining the last tensor of every three tensors in stacked_masks. +def every_three_pick_last(stacked_masks): + selected_masks = stacked_masks[2::3] + return selected_masks + + +def make_sam_mask_segmented(sam, segs, image, detection_hint, dilation, + threshold, bbox_expansion, mask_hint_threshold, mask_hint_use_negative): + + if not hasattr(sam, 'sam_wrapper'): + raise Exception("[Impact Pack] Invalid SAMLoader is connected. Make sure 'SAMLoader (Impact)'.") + + sam_obj = sam.sam_wrapper + sam_obj.prepare_device() + + try: + image = np.clip(255. * image.cpu().numpy().squeeze(), 0, 255).astype(np.uint8) + + total_masks = [] + + use_small_negative = mask_hint_use_negative == "Small" + + # seg_shape = segs[0] + segs = segs[1] + if detection_hint == "mask-points": + points = [] + plabs = [] + + for i in range(len(segs)): + bbox = segs[i].bbox + center = utils.center_of_bbox(bbox) + points.append(center) + + # small point is background, big point is foreground + if use_small_negative and bbox[2] - bbox[0] < 10: + plabs.append(0) + else: + plabs.append(1) + + detected_masks = sam_obj.predict(image, points, plabs, None, threshold) + total_masks += detected_masks + + else: + for i in range(len(segs)): + bbox = segs[i].bbox + center = utils.center_of_bbox(bbox) + x1 = max(bbox[0] - bbox_expansion, 0) + y1 = max(bbox[1] - bbox_expansion, 0) + x2 = min(bbox[2] + bbox_expansion, image.shape[1]) + y2 = min(bbox[3] + bbox_expansion, image.shape[0]) + + dilated_bbox = [x1, y1, x2, y2] + + points, plabs = generate_detection_hints(image, segs[i], center, detection_hint, dilated_bbox, + mask_hint_threshold, use_small_negative, + mask_hint_use_negative) + + detected_masks = sam_obj.predict(image, points, plabs, dilated_bbox, threshold) + + total_masks += detected_masks + + # merge every collected masks + mask = utils.combine_masks2(total_masks) + + finally: + sam_obj.release_device() + + mask_working_device = torch.device("cpu") + + if mask is not None: + mask = mask.float() + mask = utils.dilate_mask(mask.cpu().numpy(), dilation) + mask = torch.from_numpy(mask) + mask = mask.to(device=mask_working_device) + else: + # Extracting batch, height and width + height, width, _ = image.shape + mask = torch.zeros( + (height, width), dtype=torch.float32, device=mask_working_device + ) # empty mask + + stacked_masks = convert_and_stack_masks(total_masks) + + return (mask, merge_and_stack_masks(stacked_masks, group_size=3)) + # return every_three_pick_last(stacked_masks) + + +def segs_bitwise_and_mask(segs, mask): + mask = utils.make_2d_mask(mask) + + if mask is None: + logging.warning("[SegsBitwiseAndMask] Cannot operate: MASK is empty.") + return ([],) + + items = [] + + mask = (mask.cpu().numpy() * 255).astype(np.uint8) + + for seg in segs[1]: + cropped_mask = (seg.cropped_mask * 255).astype(np.uint8) + crop_region = seg.crop_region + + cropped_mask2 = mask[crop_region[1]:crop_region[3], crop_region[0]:crop_region[2]] + + new_mask = np.bitwise_and(cropped_mask.astype(np.uint8), cropped_mask2) + new_mask = new_mask.astype(np.float32) / 255.0 + + item = SEG(seg.cropped_image, new_mask, seg.confidence, seg.crop_region, seg.bbox, seg.label, None) + items.append(item) + + return segs[0], items + + +def segs_bitwise_subtract_mask(segs, mask): + mask = utils.make_2d_mask(mask) + + if mask is None: + logging.warning("[SegsBitwiseSubtractMask] Cannot operate: MASK is empty.") + return ([],) + + items = [] + + mask = (mask.cpu().numpy() * 255).astype(np.uint8) + + for seg in segs[1]: + cropped_mask = (seg.cropped_mask * 255).astype(np.uint8) + crop_region = seg.crop_region + + cropped_mask2 = mask[crop_region[1]:crop_region[3], crop_region[0]:crop_region[2]] + + new_mask = cv2.subtract(cropped_mask.astype(np.uint8), cropped_mask2) + new_mask = new_mask.astype(np.float32) / 255.0 + + item = SEG(seg.cropped_image, new_mask, seg.confidence, seg.crop_region, seg.bbox, seg.label, None) + items.append(item) + + return segs[0], items + + +def apply_mask_to_each_seg(segs, masks): + if masks is None: + logging.warning("[SegsBitwiseAndMask] Cannot operate: MASK is empty.") + return (segs[0], [],) + + items = [] + + masks = masks.squeeze(1) + + for seg, mask in zip(segs[1], masks): + cropped_mask = (seg.cropped_mask * 255).astype(np.uint8) + crop_region = seg.crop_region + + cropped_mask2 = (mask.cpu().numpy() * 255).astype(np.uint8) + cropped_mask2 = cropped_mask2[crop_region[1]:crop_region[3], crop_region[0]:crop_region[2]] + + new_mask = np.bitwise_and(cropped_mask.astype(np.uint8), cropped_mask2) + new_mask = new_mask.astype(np.float32) / 255.0 + + item = SEG(seg.cropped_image, new_mask, seg.confidence, seg.crop_region, seg.bbox, seg.label, None) + items.append(item) + + return segs[0], items + + +def dilate_segs(segs, factor): + if factor == 0: + return segs + + new_segs = [] + for seg in segs[1]: + new_mask = utils.dilate_mask(seg.cropped_mask, factor) + new_seg = SEG(seg.cropped_image, new_mask, seg.confidence, seg.crop_region, seg.bbox, seg.label, seg.control_net_wrapper) + new_segs.append(new_seg) + + return (segs[0], new_segs) + + +class ONNXDetector: + onnx_model = None + + def __init__(self, onnx_model): + self.onnx_model = onnx_model + + def detect(self, image, threshold, dilation, crop_factor, drop_size=1, detailer_hook=None): + drop_size = max(drop_size, 1) + try: + import impact.impact_onnx as onnx + + h = image.shape[1] + w = image.shape[2] + + labels, scores, boxes = onnx.onnx_inference(image, self.onnx_model) + + # collect feasible item + result = [] + + for i in range(len(labels)): + if scores[i] > threshold: + item_bbox = boxes[i] + x1, y1, x2, y2 = item_bbox + + if x2 - x1 > drop_size and y2 - y1 > drop_size: # minimum dimension must be (2,2) to avoid squeeze issue + crop_region = utils.make_crop_region(w, h, item_bbox, crop_factor) + + if detailer_hook is not None: + crop_region = item_bbox.post_crop_region(w, h, item_bbox, crop_region) + + crop_x1, crop_y1, crop_x2, crop_y2, = crop_region + + # prepare cropped mask + cropped_mask = np.zeros((crop_y2 - crop_y1, crop_x2 - crop_x1)) + cropped_mask[y1 - crop_y1:y2 - crop_y1, x1 - crop_x1:x2 - crop_x1] = 1 + cropped_mask = utils.dilate_mask(cropped_mask, dilation) + + # make items. just convert the integer label to a string + item = SEG(None, cropped_mask, scores[i], crop_region, item_bbox, str(labels[i]), None) + result.append(item) + + shape = h, w + segs = shape, result + + if detailer_hook is not None and hasattr(detailer_hook, "post_detection"): + segs = detailer_hook.post_detection(segs) + + return segs + except Exception as e: + logging.error(f"ONNXDetector: unable to execute.\n{e}") + + def detect_combined(self, image, threshold, dilation): + return segs_to_combined_mask(self.detect(image, threshold, dilation, 1)) + + def setAux(self, x): + pass + + +def batch_mask_to_segs(mask, combined, crop_factor, bbox_fill, drop_size=1, label='A', crop_min_size=None, detailer_hook=None): + combined_mask = mask.max(dim=0).values + + segs = mask_to_segs(combined_mask, combined, crop_factor, bbox_fill, drop_size, label, crop_min_size, detailer_hook) + + new_segs = [] + for seg in segs[1]: + x1, y1, x2, y2 = seg.crop_region + cropped_mask = mask[:, y1:y2, x1:x2] + item = SEG(None, cropped_mask, 1.0, seg.crop_region, seg.bbox, label, None) + new_segs.append(item) + + return segs[0], new_segs + + +def mask_to_segs(mask, combined, crop_factor, bbox_fill, drop_size=1, label='A', crop_min_size=None, detailer_hook=None, is_contour=True): + drop_size = max(drop_size, 1) + if mask is None: + logging.info("[mask_to_segs] Cannot operate: MASK is empty.") + return ([],) + + if isinstance(mask, np.ndarray): + pass # `mask` is already a NumPy array + else: + try: + mask = mask.numpy() + except AttributeError: + logging.info("[mask_to_segs] Cannot operate: MASK is not a NumPy array or Tensor.") + return ([],) + + if mask is None: + logging.info("[mask_to_segs] Cannot operate: MASK is empty.") + return ([],) + + result = [] + + if len(mask.shape) == 2: + mask = np.expand_dims(mask, axis=0) + + for i in range(mask.shape[0]): + mask_i = mask[i] + + if combined: + indices = np.nonzero(mask_i) + if len(indices[0]) > 0 and len(indices[1]) > 0: + bbox = ( + np.min(indices[1]), + np.min(indices[0]), + np.max(indices[1]), + np.max(indices[0]), + ) + crop_region = utils.make_crop_region( + mask_i.shape[1], mask_i.shape[0], bbox, crop_factor + ) + x1, y1, x2, y2 = crop_region + + if detailer_hook is not None: + crop_region = detailer_hook.post_crop_region(mask_i.shape[1], mask_i.shape[0], bbox, crop_region) + + if x2 - x1 > 0 and y2 - y1 > 0: + cropped_mask = mask_i[y1:y2, x1:x2] + + if bbox_fill: + bx1, by1, bx2, by2 = bbox + cropped_mask = cropped_mask.copy() + cropped_mask[by1:by2, bx1:bx2] = 1.0 + + if cropped_mask is not None: + item = SEG(None, cropped_mask, 1.0, crop_region, bbox, label, None) + result.append(item) + + else: + mask_i_uint8 = (mask_i * 255.0).astype(np.uint8) + contours, ctree = cv2.findContours(mask_i_uint8, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) + for j, contour in enumerate(contours): + hierarchy = ctree[0][j] + if hierarchy[3] != -1: + continue + + separated_mask = np.zeros_like(mask_i_uint8) + cv2.drawContours(separated_mask, [contour], 0, 255, -1) + separated_mask = np.array(separated_mask / 255.0).astype(np.float32) + + x, y, w, h = cv2.boundingRect(contour) + bbox = x, y, x + w, y + h + crop_region = utils.make_crop_region( + mask_i.shape[1], mask_i.shape[0], bbox, crop_factor, crop_min_size + ) + + if detailer_hook is not None: + crop_region = detailer_hook.post_crop_region(mask_i.shape[1], mask_i.shape[0], bbox, crop_region) + + if w > drop_size and h > drop_size: + if is_contour: + mask_src = separated_mask + else: + mask_src = mask_i * separated_mask + + cropped_mask = np.array( + mask_src[ + crop_region[1]: crop_region[3], + crop_region[0]: crop_region[2], + ] + ) + + if bbox_fill: + cx1, cy1, _, _ = crop_region + bx1 = x - cx1 + bx2 = x+w - cx1 + by1 = y - cy1 + by2 = y+h - cy1 + cropped_mask[by1:by2, bx1:bx2] = 1.0 + + if cropped_mask is not None: + cropped_mask = torch.clip(torch.from_numpy(cropped_mask), 0, 1.0) + item = SEG(None, cropped_mask.numpy(), 1.0, crop_region, bbox, label, None) + result.append(item) + + if not result: + logging.info("[mask_to_segs] Empty mask.") + + logging.info(f"# of Detected SEGS: {len(result)}") + # for r in result: + # print(f"\tbbox={r.bbox}, crop={r.crop_region}, label={r.label}") + + # shape: (b,h,w) -> (h,w) + return (mask.shape[1], mask.shape[2]), result + + +def mediapipe_facemesh_to_segs(image, crop_factor, bbox_fill, crop_min_size, drop_size, dilation, face, mouth, left_eyebrow, left_eye, left_pupil, right_eyebrow, right_eye, right_pupil): + parts = { + "face": np.array([0x0A, 0xC8, 0x0A]), + "mouth": np.array([0x0A, 0xB4, 0x0A]), + "left_eyebrow": np.array([0xB4, 0xDC, 0x0A]), + "left_eye": np.array([0xB4, 0xC8, 0x0A]), + "left_pupil": np.array([0xFA, 0xC8, 0x0A]), + "right_eyebrow": np.array([0x0A, 0xDC, 0xB4]), + "right_eye": np.array([0x0A, 0xC8, 0xB4]), + "right_pupil": np.array([0x0A, 0xC8, 0xFA]), + } + + def create_segments(image, color): + image = (image * 255).to(torch.uint8) + image = image.squeeze(0).numpy() + mask = cv2.inRange(image, color, color) + + contours, ctree = cv2.findContours(mask, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) + mask_list = [] + for i, contour in enumerate(contours): + hierarchy = ctree[0][i] + if hierarchy[3] == -1: + convex_hull = cv2.convexHull(contour) + convex_segment = np.zeros_like(image) + cv2.fillPoly(convex_segment, [convex_hull], (255, 255, 255)) + + convex_segment = np.expand_dims(convex_segment, axis=0).astype(np.float32) / 255.0 + tensor = torch.from_numpy(convex_segment) + mask_tensor = torch.any(tensor != 0, dim=-1).float() + mask_tensor = mask_tensor.squeeze(0) + mask_tensor = torch.from_numpy(utils.dilate_mask(mask_tensor.numpy(), dilation)) + mask_list.append(mask_tensor.unsqueeze(0)) + + return mask_list + + segs = [] + + def create_seg(label): + mask_list = create_segments(image, parts[label]) + for mask in mask_list: + seg = mask_to_segs(mask, False, crop_factor, bbox_fill, drop_size=drop_size, label=label, crop_min_size=crop_min_size) + if len(seg[1]) > 0: + segs.extend(seg[1]) + + if face: + create_seg('face') + + if mouth: + create_seg('mouth') + + if left_eyebrow: + create_seg('left_eyebrow') + + if left_eye: + create_seg('left_eye') + + if left_pupil: + create_seg('left_pupil') + + if right_eyebrow: + create_seg('right_eyebrow') + + if right_eye: + create_seg('right_eye') + + if right_pupil: + create_seg('right_pupil') + + return (image.shape[1], image.shape[2]), segs + + +def segs_to_combined_mask(segs): + shape = segs[0] + h = shape[0] + w = shape[1] + + mask = np.zeros((h, w), dtype=np.uint8) + + for seg in segs[1]: + cropped_mask = seg.cropped_mask + crop_region = seg.crop_region + mask[crop_region[1]:crop_region[3], crop_region[0]:crop_region[2]] |= (cropped_mask * 255).astype(np.uint8) + + return torch.from_numpy(mask.astype(np.float32) / 255.0) + + +def segs_to_masklist(segs): + shape = segs[0] + h = shape[0] + w = shape[1] + + masks = [] + for seg in segs[1]: + if isinstance(seg.cropped_mask, np.ndarray): + cropped_mask = torch.from_numpy(seg.cropped_mask) + else: + cropped_mask = seg.cropped_mask + + if cropped_mask.ndim == 2: + cropped_mask = cropped_mask.unsqueeze(0) + + n = len(cropped_mask) + + mask = torch.zeros((n, h, w), dtype=torch.uint8) + crop_region = seg.crop_region + mask[:, crop_region[1]:crop_region[3], crop_region[0]:crop_region[2]] |= (cropped_mask * 255).to(torch.uint8) + mask = (mask / 255.0).to(torch.float32) + + for x in mask: + masks.append(x) + + if len(masks) == 0: + empty_mask = torch.zeros((h, w), dtype=torch.float32, device="cpu") + masks = [empty_mask] + + return masks + + +def vae_decode(vae, samples, use_tile, hook, tile_size=512, overlap=64): + if use_tile: + decoder = nodes.VAEDecodeTiled() + if 'overlap' in inspect.signature(decoder.decode).parameters: + pixels = decoder.decode(vae, samples, tile_size, overlap=overlap)[0] + else: + logging.warning("[Impact Pack] Your ComfyUI is outdated.") + pixels = decoder.decode(vae, samples, tile_size)[0] + else: + pixels = nodes.VAEDecode().decode(vae, samples)[0] + + if hook is not None: + pixels = hook.post_decode(pixels) + + return pixels + + +def vae_encode(vae, pixels, use_tile, hook, tile_size=512, overlap=64): + if use_tile: + encoder = nodes.VAEEncodeTiled() + if 'overlap' in inspect.signature(encoder.encode).parameters: + samples = encoder.encode(vae, pixels, tile_size, overlap=overlap)[0] + else: + logging.warning("[Impact Pack] Your ComfyUI is outdated.") + samples = encoder.encode(vae, pixels, tile_size)[0] + else: + samples = nodes.VAEEncode().encode(vae, pixels)[0] + + if hook is not None: + samples = hook.post_encode(samples) + + return samples + + +def latent_upscale_on_pixel_space_shape(samples, scale_method, w, h, vae, use_tile=False, tile_size=512, save_temp_prefix=None, hook=None, overlap=64): + return latent_upscale_on_pixel_space_shape2(samples, scale_method, w, h, vae, use_tile, tile_size, save_temp_prefix, hook, overlap=overlap)[0] + + +def latent_upscale_on_pixel_space_shape2(samples, scale_method, w, h, vae, use_tile=False, tile_size=512, save_temp_prefix=None, hook=None, overlap=64): + pixels = vae_decode(vae, samples, use_tile, hook, tile_size=tile_size, overlap=overlap) + + if save_temp_prefix is not None: + nodes.PreviewImage().save_images(pixels, filename_prefix=save_temp_prefix) + + pixels = nodes.ImageScale().upscale(pixels, scale_method, int(w), int(h), False)[0] + + old_pixels = pixels + if hook is not None: + pixels = hook.post_upscale(pixels) + + return vae_encode(vae, pixels, use_tile, hook, tile_size=tile_size, overlap=overlap), old_pixels + + +def latent_upscale_on_pixel_space(samples, scale_method, scale_factor, vae, use_tile=False, tile_size=512, save_temp_prefix=None, hook=None, overlap=64): + return latent_upscale_on_pixel_space2(samples, scale_method, scale_factor, vae, use_tile, tile_size, save_temp_prefix, hook, overlap=overlap)[0] + + +def latent_upscale_on_pixel_space2(samples, scale_method, scale_factor, vae, use_tile=False, tile_size=512, save_temp_prefix=None, hook=None, overlap=64): + pixels = vae_decode(vae, samples, use_tile, hook, tile_size=tile_size, overlap=overlap) + + if save_temp_prefix is not None: + nodes.PreviewImage().save_images(pixels, filename_prefix=save_temp_prefix) + + w = pixels.shape[2] * scale_factor + h = pixels.shape[1] * scale_factor + pixels = nodes.ImageScale().upscale(pixels, scale_method, int(w), int(h), False)[0] + + old_pixels = pixels + if hook is not None: + pixels = hook.post_upscale(pixels) + + return vae_encode(vae, pixels, use_tile, hook, tile_size=tile_size, overlap=overlap), old_pixels + + +def latent_upscale_on_pixel_space_with_model_shape(samples, scale_method, upscale_model, new_w, new_h, vae, use_tile=False, tile_size=512, save_temp_prefix=None, hook=None, overlap=64): + return latent_upscale_on_pixel_space_with_model_shape2(samples, scale_method, upscale_model, new_w, new_h, vae, use_tile, tile_size, save_temp_prefix, hook, overlap=overlap)[0] + + +def latent_upscale_on_pixel_space_with_model_shape2(samples, scale_method, upscale_model, new_w, new_h, vae, use_tile=False, tile_size=512, save_temp_prefix=None, hook=None, overlap=64): + pixels = vae_decode(vae, samples, use_tile, hook, tile_size=tile_size, overlap=overlap) + + if save_temp_prefix is not None: + nodes.PreviewImage().save_images(pixels, filename_prefix=save_temp_prefix) + + w = pixels.shape[2] + + # upscale by model upscaler + current_w = w + while current_w < new_w: + model_upscaler = nodes.NODE_CLASS_MAPPINGS['ImageUpscaleWithModel']() + if hasattr(model_upscaler, 'execute'): + pixels = model_upscaler.execute(upscale_model, pixels)[0] + else: + pixels = model_upscaler.upscale(upscale_model, pixels)[0] + + current_w = pixels.shape[2] + if current_w == w: + logging.info("[latent_upscale_on_pixel_space_with_model] x1 upscale model selected") + break + + # downscale to target scale + pixels = nodes.ImageScale().upscale(pixels, scale_method, int(new_w), int(new_h), False)[0] + + old_pixels = pixels + if hook is not None: + pixels = hook.post_upscale(pixels) + + return vae_encode(vae, pixels, use_tile, hook, tile_size=tile_size, overlap=overlap), old_pixels + + +def latent_upscale_on_pixel_space_with_model(samples, scale_method, upscale_model, scale_factor, vae, use_tile=False, + tile_size=512, save_temp_prefix=None, hook=None, overlap=64): + return latent_upscale_on_pixel_space_with_model2(samples, scale_method, upscale_model, scale_factor, vae, use_tile, tile_size, save_temp_prefix, hook, overlap=overlap)[0] + +def latent_upscale_on_pixel_space_with_model2(samples, scale_method, upscale_model, scale_factor, vae, use_tile=False, + tile_size=512, save_temp_prefix=None, hook=None, overlap=64): + pixels = vae_decode(vae, samples, use_tile, hook, tile_size=tile_size, overlap=overlap) + + if save_temp_prefix is not None: + nodes.PreviewImage().save_images(pixels, filename_prefix=save_temp_prefix) + + w = pixels.shape[2] + h = pixels.shape[1] + + new_w = w * scale_factor + new_h = h * scale_factor + + # upscale by model upscaler + current_w = w + while current_w < new_w: + model_upscaler = nodes.NODE_CLASS_MAPPINGS['ImageUpscaleWithModel']() + if hasattr(model_upscaler, 'execute'): + pixels = model_upscaler.execute(upscale_model, pixels)[0] + else: + pixels = model_upscaler.upscale(upscale_model, pixels)[0] + + current_w = pixels.shape[2] + if current_w == w: + logging.info("[latent_upscale_on_pixel_space_with_model] x1 upscale model selected") + break + + # downscale to target scale + pixels = nodes.ImageScale().upscale(pixels, scale_method, int(new_w), int(new_h), False)[0] + + old_pixels = pixels + if hook is not None: + pixels = hook.post_upscale(pixels) + + return vae_encode(vae, pixels, use_tile, hook, tile_size=tile_size, overlap=overlap), old_pixels + + +class TwoSamplersForMaskUpscaler: + def __init__(self, scale_method, sample_schedule, use_tiled_vae, base_sampler, mask_sampler, mask, vae, + full_sampler_opt=None, upscale_model_opt=None, hook_base_opt=None, hook_mask_opt=None, + hook_full_opt=None, + tile_size=512): + + mask = utils.make_2d_mask(mask) + + mask = mask.reshape((-1, 1, mask.shape[-2], mask.shape[-1])) + + self.params = scale_method, sample_schedule, use_tiled_vae, base_sampler, mask_sampler, mask, vae + self.upscale_model = upscale_model_opt + self.full_sampler = full_sampler_opt + self.hook_base = hook_base_opt + self.hook_mask = hook_mask_opt + self.hook_full = hook_full_opt + self.use_tiled_vae = use_tiled_vae + self.tile_size = tile_size + self.is_tiled = False + self.vae = vae + + def upscale(self, step_info, samples, upscale_factor, save_temp_prefix=None): + scale_method, sample_schedule, use_tiled_vae, base_sampler, mask_sampler, mask, vae = self.params + + mask = utils.make_2d_mask(mask) + + self.prepare_hook(step_info) + + # upscale latent + if self.upscale_model is None: + upscaled_latent = latent_upscale_on_pixel_space(samples, scale_method, upscale_factor, vae, + use_tile=self.use_tiled_vae, + save_temp_prefix=save_temp_prefix, + hook=self.hook_base, tile_size=self.tile_size) + else: + upscaled_latent = latent_upscale_on_pixel_space_with_model(samples, scale_method, self.upscale_model, + upscale_factor, vae, + use_tile=self.use_tiled_vae, + save_temp_prefix=save_temp_prefix, + hook=self.hook_mask, tile_size=self.tile_size) + + return self.do_samples(step_info, base_sampler, mask_sampler, sample_schedule, mask, upscaled_latent) + + def prepare_hook(self, step_info): + if self.hook_base is not None: + self.hook_base.set_steps(step_info) + if self.hook_mask is not None: + self.hook_mask.set_steps(step_info) + if self.hook_full is not None: + self.hook_full.set_steps(step_info) + + def upscale_shape(self, step_info, samples, w, h, save_temp_prefix=None): + scale_method, sample_schedule, use_tiled_vae, base_sampler, mask_sampler, mask, vae = self.params + + mask = utils.make_2d_mask(mask) + + self.prepare_hook(step_info) + + # upscale latent + if self.upscale_model is None: + upscaled_latent = latent_upscale_on_pixel_space_shape(samples, scale_method, w, h, vae, + use_tile=self.use_tiled_vae, + save_temp_prefix=save_temp_prefix, + hook=self.hook_base, + tile_size=self.tile_size) + else: + upscaled_latent = latent_upscale_on_pixel_space_with_model_shape(samples, scale_method, self.upscale_model, + w, h, vae, + use_tile=self.use_tiled_vae, + save_temp_prefix=save_temp_prefix, + hook=self.hook_mask, + tile_size=self.tile_size) + + return self.do_samples(step_info, base_sampler, mask_sampler, sample_schedule, mask, upscaled_latent) + + def is_full_sample_time(self, step_info, sample_schedule): + cur_step, total_step = step_info + + # make start from 1 instead of zero + cur_step += 1 + total_step += 1 + + if sample_schedule == "none": + return False + + elif sample_schedule == "interleave1": + return cur_step % 2 == 0 + + elif sample_schedule == "interleave2": + return cur_step % 3 == 0 + + elif sample_schedule == "interleave3": + return cur_step % 4 == 0 + + elif sample_schedule == "last1": + return cur_step == total_step + + elif sample_schedule == "last2": + return cur_step >= total_step - 1 + + elif sample_schedule == "interleave1+last1": + return cur_step % 2 == 0 or cur_step >= total_step - 1 + + elif sample_schedule == "interleave2+last1": + return cur_step % 2 == 0 or cur_step >= total_step - 1 + + elif sample_schedule == "interleave3+last1": + return cur_step % 2 == 0 or cur_step >= total_step - 1 + + def do_samples(self, step_info, base_sampler, mask_sampler, sample_schedule, mask, upscaled_latent): + mask = utils.make_2d_mask(mask) + + if self.is_full_sample_time(step_info, sample_schedule): + logging.info(f"step_info={step_info} / full time") + + upscaled_latent = base_sampler.sample(upscaled_latent, self.hook_base) + sampler = self.full_sampler if self.full_sampler is not None else base_sampler + return sampler.sample(upscaled_latent, self.hook_full) + + else: + logging.info(f"step_info={step_info} / non-full time") + # upscale mask + if mask.ndim == 2: + mask = mask[None, :, :, None] + upscaled_mask = F.interpolate(mask, size=(upscaled_latent['samples'].shape[2], upscaled_latent['samples'].shape[3]), mode='bilinear', align_corners=True) + upscaled_mask = upscaled_mask[:, :, :upscaled_latent['samples'].shape[2], :upscaled_latent['samples'].shape[3]] + + # base sampler + upscaled_inv_mask = torch.where(upscaled_mask != 1.0, torch.tensor(1.0), torch.tensor(0.0)) + upscaled_latent['noise_mask'] = upscaled_inv_mask + upscaled_latent = base_sampler.sample(upscaled_latent, self.hook_base) + + # mask sampler + upscaled_latent['noise_mask'] = upscaled_mask + upscaled_latent = mask_sampler.sample(upscaled_latent, self.hook_mask) + + # remove mask + del upscaled_latent['noise_mask'] + return upscaled_latent + + +class PixelKSampleUpscaler: + def __init__(self, scale_method, model, vae, seed, steps, cfg, sampler_name, scheduler, positive, negative, denoise, + use_tiled_vae, upscale_model_opt=None, hook_opt=None, tile_size=512, scheduler_func=None, + tile_cnet_opt=None, tile_cnet_strength=1.0): + self.params = scale_method, model, vae, seed, steps, cfg, sampler_name, scheduler, positive, negative, denoise + self.upscale_model = upscale_model_opt + self.hook = hook_opt + self.use_tiled_vae = use_tiled_vae + self.tile_size = tile_size + self.is_tiled = False + self.vae = vae + self.scheduler_func = scheduler_func + self.tile_cnet = tile_cnet_opt + self.tile_cnet_strength = tile_cnet_strength + + def sample(self, model, seed, steps, cfg, sampler_name, scheduler, positive, negative, upscaled_latent, denoise, images): + if self.tile_cnet is not None: + image_batch, image_w, image_h, _ = images.shape + if image_batch > 1: + warnings.warn('Multiple latents in batch, Tile ControlNet being ignored') + else: + if 'TilePreprocessor' not in nodes.NODE_CLASS_MAPPINGS: + raise RuntimeError("'TilePreprocessor' node (from comfyui_controlnet_aux) isn't installed.") + preprocessor = nodes.NODE_CLASS_MAPPINGS['TilePreprocessor']() + # might add capacity to set pyrUp_iters later, not needed for now though + preprocessed = preprocessor.execute(images, pyrUp_iters=3, resolution=min(image_w, image_h))[0] + positive, negative = nodes.ControlNetApplyAdvanced().apply_controlnet(positive=positive, + negative=negative, + control_net=self.tile_cnet, + image=preprocessed, + strength=self.tile_cnet_strength, + start_percent=0, + end_percent=1.0, + vae=self.vae) + + refined_latent = impact_sampling.impact_sample(model, seed, steps, cfg, sampler_name, scheduler, + positive, negative, upscaled_latent, denoise, scheduler_func=self.scheduler_func) + + return refined_latent + + def upscale(self, step_info, samples, upscale_factor, save_temp_prefix=None): + scale_method, model, vae, seed, steps, cfg, sampler_name, scheduler, positive, negative, denoise = self.params + + if self.hook is not None: + self.hook.set_steps(step_info) + + if self.upscale_model is None: + upscaled_latent, upscaled_images = \ + latent_upscale_on_pixel_space2(samples, scale_method, upscale_factor, vae, + use_tile=self.use_tiled_vae, + save_temp_prefix=save_temp_prefix, hook=self.hook, tile_size=512) + else: + upscaled_latent, upscaled_images = \ + latent_upscale_on_pixel_space_with_model2(samples, scale_method, self.upscale_model, + upscale_factor, vae, + use_tile=self.use_tiled_vae, + save_temp_prefix=save_temp_prefix, + hook=self.hook, + tile_size=self.tile_size) + + if self.hook is not None: + model, seed, steps, cfg, sampler_name, scheduler, positive, negative, upscaled_latent, denoise = \ + self.hook.pre_ksample(model, seed, steps, cfg, sampler_name, scheduler, positive, negative, + upscaled_latent, denoise) + + if 'noise_mask' in samples: + upscaled_latent['noise_mask'] = samples['noise_mask'] + + refined_latent = self.sample(model, seed, steps, cfg, sampler_name, scheduler, positive, negative, upscaled_latent, denoise, upscaled_images) + return refined_latent + + def upscale_shape(self, step_info, samples, w, h, save_temp_prefix=None): + scale_method, model, vae, seed, steps, cfg, sampler_name, scheduler, positive, negative, denoise = self.params + + if self.hook is not None: + self.hook.set_steps(step_info) + + if self.upscale_model is None: + upscaled_latent, upscaled_images = \ + latent_upscale_on_pixel_space_shape2(samples, scale_method, w, h, vae, + use_tile=self.use_tiled_vae, + save_temp_prefix=save_temp_prefix, hook=self.hook, + tile_size=self.tile_size) + else: + upscaled_latent, upscaled_images = \ + latent_upscale_on_pixel_space_with_model_shape2(samples, scale_method, self.upscale_model, + w, h, vae, + use_tile=self.use_tiled_vae, + save_temp_prefix=save_temp_prefix, + hook=self.hook, + tile_size=self.tile_size) + + if self.hook is not None: + model, seed, steps, cfg, sampler_name, scheduler, positive, negative, upscaled_latent, denoise = \ + self.hook.pre_ksample(model, seed, steps, cfg, sampler_name, scheduler, positive, negative, + upscaled_latent, denoise) + + if 'noise_mask' in samples: + upscaled_latent['noise_mask'] = samples['noise_mask'] + + refined_latent = self.sample(model, seed, steps, cfg, sampler_name, scheduler, positive, negative, upscaled_latent, denoise, upscaled_images) + return refined_latent + + +class IPAdapterWrapper: + def __init__(self, ipadapter_pipe, weight, noise, weight_type, start_at, end_at, unfold_batch, weight_v2, reference_image, neg_image=None, prev_control_net=None, combine_embeds='concat'): + self.reference_image = reference_image + self.ipadapter_pipe = ipadapter_pipe + self.weight = weight + self.weight_type = weight_type + self.noise = noise + self.start_at = start_at + self.end_at = end_at + self.unfold_batch = unfold_batch + self.prev_control_net = prev_control_net + self.weight_v2 = weight_v2 + self.image = reference_image + self.neg_image = neg_image + self.combine_embeds = combine_embeds + + # name 'apply_ipadapter' isn't allowed + def doit_ipadapter(self, model): + cnet_image_list = [self.image] + prev_cnet_images = [] + + if 'IPAdapterAdvanced' not in nodes.NODE_CLASS_MAPPINGS: + if 'IPAdapterApply' in nodes.NODE_CLASS_MAPPINGS: + raise Exception("[ERROR] 'ComfyUI IPAdapter Plus' is outdated.") + + utils.try_install_custom_node('https://github.com/cubiq/ComfyUI_IPAdapter_plus', + "To use 'IPAdapterApplySEGS' node, 'ComfyUI IPAdapter Plus' extension is required.") + raise Exception("[ERROR] To use IPAdapterApplySEGS, you need to install 'ComfyUI IPAdapter Plus'") + + obj = nodes.NODE_CLASS_MAPPINGS['IPAdapterAdvanced'] + + ipadapter, _, clip_vision, insightface, lora_loader = self.ipadapter_pipe + model = lora_loader(model) + + if self.prev_control_net is not None: + model, prev_cnet_images = self.prev_control_net.doit_ipadapter(model) + + model = obj().apply_ipadapter(model=model, ipadapter=ipadapter, weight=self.weight, weight_type=self.weight_type, + start_at=self.start_at, end_at=self.end_at, combine_embeds=self.combine_embeds, + clip_vision=clip_vision, image=self.image, image_negative=self.neg_image, attn_mask=None, + insightface=insightface, weight_faceidv2=self.weight_v2)[0] + + cnet_image_list.extend(prev_cnet_images) + + return model, cnet_image_list + + def apply(self, positive, negative, image, mask=None, use_acn=False): + if self.prev_control_net is not None: + return self.prev_control_net.apply(positive, negative, image, mask, use_acn=use_acn) + else: + return positive, negative, [] + + +class ControlNetWrapper: + def __init__(self, control_net, strength, preprocessor, prev_control_net=None, original_size=None, crop_region=None, control_image=None): + self.control_net = control_net + self.strength = strength + self.preprocessor = preprocessor + self.prev_control_net = prev_control_net + + if original_size is not None and crop_region is not None and control_image is not None: + self.control_image = utils.tensor_resize(control_image, original_size[1], original_size[0]) + self.control_image = torch.tensor(utils.tensor_crop(self.control_image, crop_region)) + else: + self.control_image = None + + def apply(self, positive, negative, image, mask=None, use_acn=False): + cnet_image_list = [] + prev_cnet_images = [] + + if self.prev_control_net is not None: + positive, negative, prev_cnet_images = self.prev_control_net.apply(positive, negative, image, mask, use_acn=use_acn) + + if self.control_image is not None: + cnet_image = self.control_image + elif self.preprocessor is not None: + cnet_image = self.preprocessor.apply(image, mask) + else: + cnet_image = image + + cnet_image_list.extend(prev_cnet_images) + cnet_image_list.append(cnet_image) + + if use_acn: + if "ACN_AdvancedControlNetApply" in nodes.NODE_CLASS_MAPPINGS: + acn = nodes.NODE_CLASS_MAPPINGS['ACN_AdvancedControlNetApply']() + positive, negative, _ = acn.apply_controlnet(positive=positive, negative=negative, control_net=self.control_net, image=cnet_image, + strength=self.strength, start_percent=0.0, end_percent=1.0) + else: + utils.try_install_custom_node('https://github.com/BlenderNeko/ComfyUI_TiledKSampler', + "To use 'ControlNetWrapper' for AnimateDiff, 'ComfyUI-Advanced-ControlNet' extension is required.") + raise Exception("'ACN_AdvancedControlNetApply' node isn't installed.") + else: + positive = nodes.ControlNetApply().apply_controlnet(positive, self.control_net, cnet_image, self.strength)[0] + + return positive, negative, cnet_image_list + + def doit_ipadapter(self, model): + if self.prev_control_net is not None: + return self.prev_control_net.doit_ipadapter(model) + else: + return model, [] + + +class ControlNetAdvancedWrapper: + def __init__(self, control_net, strength, start_percent, end_percent, preprocessor, prev_control_net=None, + original_size=None, crop_region=None, control_image=None, vae=None): + self.control_net = control_net + self.strength = strength + self.preprocessor = preprocessor + self.prev_control_net = prev_control_net + self.start_percent = start_percent + self.end_percent = end_percent + self.vae = vae + + if original_size is not None and crop_region is not None and control_image is not None: + self.control_image = utils.tensor_resize(control_image, original_size[1], original_size[0]) + self.control_image = torch.tensor(utils.tensor_crop(self.control_image, crop_region)) + else: + self.control_image = None + + def doit_ipadapter(self, model): + if self.prev_control_net is not None: + return self.prev_control_net.doit_ipadapter(model) + else: + return model, [] + + def apply(self, positive, negative, image, mask=None, use_acn=False): + cnet_image_list = [] + prev_cnet_images = [] + + if self.prev_control_net is not None: + positive, negative, prev_cnet_images = self.prev_control_net.apply(positive, negative, image, mask) + + if self.control_image is not None: + cnet_image = self.control_image + elif self.preprocessor is not None: + cnet_image = self.preprocessor.apply(image, mask) + else: + cnet_image = image + + cnet_image_list.extend(prev_cnet_images) + cnet_image_list.append(cnet_image) + + if use_acn: + if "ACN_AdvancedControlNetApply" in nodes.NODE_CLASS_MAPPINGS: + acn = nodes.NODE_CLASS_MAPPINGS['ACN_AdvancedControlNetApply']() + positive, negative, _ = acn.apply_controlnet(positive=positive, negative=negative, control_net=self.control_net, image=cnet_image, + strength=self.strength, start_percent=self.start_percent, end_percent=self.end_percent) + else: + utils.try_install_custom_node('https://github.com/BlenderNeko/ComfyUI_TiledKSampler', + "To use 'ControlNetAdvancedWrapper' for AnimateDiff, 'ComfyUI-Advanced-ControlNet' extension is required.") + raise Exception("'ACN_AdvancedControlNetApply' node isn't installed.") + else: + if self.vae is not None: + apply_controlnet = nodes.ControlNetApplyAdvanced().apply_controlnet + signature = inspect.signature(apply_controlnet) + + if 'vae' in signature.parameters: + positive, negative = nodes.ControlNetApplyAdvanced().apply_controlnet(positive, negative, self.control_net, cnet_image, self.strength, self.start_percent, self.end_percent, vae=self.vae) + else: + logging.error("[Impact Pack] ERROR: The ComfyUI version is outdated. VAE cannot be used in ApplyControlNet.") + raise Exception("[Impact Pack] ERROR: The ComfyUI version is outdated. VAE cannot be used in ApplyControlNet.") + else: + positive, negative = nodes.ControlNetApplyAdvanced().apply_controlnet(positive, negative, self.control_net, cnet_image, self.strength, self.start_percent, self.end_percent) + + return positive, negative, cnet_image_list + + +# REQUIREMENTS: BlenderNeko/ComfyUI_TiledKSampler +class TiledKSamplerWrapper: + params = None + + def __init__(self, model, seed, steps, cfg, sampler_name, scheduler, positive, negative, denoise, + tile_width, tile_height, tiling_strategy): + self.params = model, seed, steps, cfg, sampler_name, scheduler, positive, negative, denoise, tile_width, tile_height, tiling_strategy + + def sample(self, latent_image, hook=None): + if "BNK_TiledKSampler" in nodes.NODE_CLASS_MAPPINGS: + TiledKSampler = nodes.NODE_CLASS_MAPPINGS['BNK_TiledKSampler'] + else: + utils.try_install_custom_node('https://github.com/BlenderNeko/ComfyUI_TiledKSampler', + "To use 'TiledKSamplerProvider', 'Tiled sampling for ComfyUI' extension is required.") + raise Exception("'BNK_TiledKSampler' node isn't installed.") + + model, seed, steps, cfg, sampler_name, scheduler, positive, negative, denoise, tile_width, tile_height, tiling_strategy = self.params + + if hook is not None: + model, seed, steps, cfg, sampler_name, scheduler, positive, negative, upscaled_latent, denoise = \ + hook.pre_ksample(model, seed, steps, cfg, sampler_name, scheduler, positive, negative, latent_image, + denoise) + + return TiledKSampler().sample(model, seed, tile_width, tile_height, tiling_strategy, steps, cfg, sampler_name, + scheduler, positive, negative, latent_image, denoise)[0] + + +class PixelTiledKSampleUpscaler: + def __init__(self, scale_method, model, vae, seed, steps, cfg, sampler_name, scheduler, positive, negative, + denoise, + tile_width, tile_height, tiling_strategy, + upscale_model_opt=None, hook_opt=None, tile_cnet_opt=None, tile_size=512, tile_cnet_strength=1.0, overlap=64): + self.params = scale_method, model, vae, seed, steps, cfg, sampler_name, scheduler, positive, negative, denoise + self.vae = vae + self.tile_params = tile_width, tile_height, tiling_strategy + self.upscale_model = upscale_model_opt + self.hook = hook_opt + self.tile_cnet = tile_cnet_opt + self.tile_size = tile_size + self.is_tiled = True + self.tile_cnet_strength = tile_cnet_strength + self.overlap = overlap + + def tiled_ksample(self, latent, images): + if "BNK_TiledKSampler" in nodes.NODE_CLASS_MAPPINGS: + TiledKSampler = nodes.NODE_CLASS_MAPPINGS['BNK_TiledKSampler'] + else: + utils.try_install_custom_node('https://github.com/BlenderNeko/ComfyUI_TiledKSampler', + "To use 'PixelTiledKSampleUpscalerProvider', 'Tiled sampling for ComfyUI' extension is required.") + raise RuntimeError("'BNK_TiledKSampler' node isn't installed.") + + scale_method, model, vae, seed, steps, cfg, sampler_name, scheduler, positive, negative, denoise = self.params + tile_width, tile_height, tiling_strategy = self.tile_params + + if self.tile_cnet is not None: + image_batch, image_w, image_h, _ = images.shape + if image_batch > 1: + warnings.warn('Multiple latents in batch, Tile ControlNet being ignored') + else: + if 'TilePreprocessor' not in nodes.NODE_CLASS_MAPPINGS: + raise RuntimeError("'TilePreprocessor' node (from comfyui_controlnet_aux) isn't installed.") + preprocessor = nodes.NODE_CLASS_MAPPINGS['TilePreprocessor']() + # might add capacity to set pyrUp_iters later, not needed for now though + preprocessed = preprocessor.execute(images, pyrUp_iters=3, resolution=min(image_w, image_h))[0] + + positive, negative = nodes.ControlNetApplyAdvanced().apply_controlnet(positive=positive, + negative=negative, + control_net=self.tile_cnet, + image=preprocessed, + strength=self.tile_cnet_strength, + start_percent=0, end_percent=1.0, + vae=self.vae) + + return TiledKSampler().sample(model, seed, tile_width, tile_height, tiling_strategy, steps, cfg, sampler_name, + scheduler, positive, negative, latent, denoise)[0] + + def upscale(self, step_info, samples, upscale_factor, save_temp_prefix=None): + scale_method, model, vae, seed, steps, cfg, sampler_name, scheduler, positive, negative, denoise = self.params + + if self.hook is not None: + self.hook.set_steps(step_info) + + if self.upscale_model is None: + upscaled_latent, upscaled_images = \ + latent_upscale_on_pixel_space2(samples, scale_method, upscale_factor, vae, + use_tile=True, save_temp_prefix=save_temp_prefix, + hook=self.hook, tile_size=self.tile_size) + else: + upscaled_latent, upscaled_images = \ + latent_upscale_on_pixel_space_with_model2(samples, scale_method, self.upscale_model, + upscale_factor, vae, use_tile=True, + save_temp_prefix=save_temp_prefix, + hook=self.hook, tile_size=self.tile_size) + + refined_latent = self.tiled_ksample(upscaled_latent, upscaled_images) + + return refined_latent + + def upscale_shape(self, step_info, samples, w, h, save_temp_prefix=None): + scale_method, model, vae, seed, steps, cfg, sampler_name, scheduler, positive, negative, denoise = self.params + + if self.hook is not None: + self.hook.set_steps(step_info) + + if self.upscale_model is None: + upscaled_latent, upscaled_images = \ + latent_upscale_on_pixel_space_shape2(samples, scale_method, w, h, vae, + use_tile=True, save_temp_prefix=save_temp_prefix, + hook=self.hook, tile_size=self.tile_size) + else: + upscaled_latent, upscaled_images = \ + latent_upscale_on_pixel_space_with_model_shape2(samples, scale_method, + self.upscale_model, w, h, vae, + use_tile=True, + save_temp_prefix=save_temp_prefix, + hook=self.hook, + tile_size=self.tile_size) + + refined_latent = self.tiled_ksample(upscaled_latent, upscaled_images) + + return refined_latent + + +# REQUIREMENTS: biegert/ComfyUI-CLIPSeg +class BBoxDetectorBasedOnCLIPSeg: + prompt = None + blur = None + threshold = None + dilation_factor = None + aux = None + + def __init__(self, prompt, blur, threshold, dilation_factor): + self.prompt = prompt + self.blur = blur + self.threshold = threshold + self.dilation_factor = dilation_factor + + def detect(self, image, bbox_threshold, bbox_dilation, bbox_crop_factor, drop_size=1, detailer_hook=None): + mask = self.detect_combined(image, bbox_threshold, bbox_dilation) + + mask = utils.make_2d_mask(mask) + + segs = mask_to_segs(mask, False, bbox_crop_factor, True, drop_size, detailer_hook=detailer_hook) + + if detailer_hook is not None and hasattr(detailer_hook, "post_detection"): + segs = detailer_hook.post_detection(segs) + + return segs + + def detect_combined(self, image, bbox_threshold, bbox_dilation): + if "CLIPSeg" in nodes.NODE_CLASS_MAPPINGS: + CLIPSeg = nodes.NODE_CLASS_MAPPINGS['CLIPSeg'] + else: + utils.try_install_custom_node('https://github.com/biegert/ComfyUI-CLIPSeg/raw/main/custom_nodes/clipseg.py', + "To use 'CLIPSegDetectorProvider', 'CLIPSeg' extension is required.") + raise Exception("'CLIPSeg' node isn't installed.") + + if self.threshold is None: + threshold = bbox_threshold + else: + threshold = self.threshold + + if self.dilation_factor is None: + dilation_factor = bbox_dilation + else: + dilation_factor = self.dilation_factor + + prompt = self.aux if self.prompt == '' and self.aux is not None else self.prompt + + mask, _, _ = CLIPSeg().segment_image(image, prompt, self.blur, threshold, dilation_factor) + mask = utils.to_binary_mask(mask) + return mask + + def setAux(self, x): + self.aux = x + + +def update_node_status(node, text, progress=None): + if PromptServer.instance.client_id is None: + return + + PromptServer.instance.send_sync("impact/update_status", { + "node": node, + "progress": progress, + "text": text + }, PromptServer.instance.client_id) + + +def random_mask_raw(mask, bbox, factor): + x1, y1, x2, y2 = bbox + w = x2 - x1 + h = y2 - y1 + + factor = max(6, int(min(w, h) * factor / 4)) + + def draw_random_circle(center, radius): + i, j = center + for x in range(int(i - radius), int(i + radius)): + for y in range(int(j - radius), int(j + radius)): + if np.linalg.norm(np.array([x, y]) - np.array([i, j])) <= radius: + mask[x, y] = 1 + + def draw_irregular_line(start, end, pivot, is_vertical): + i = start + while i < end: + base_radius = np.random.randint(5, factor) + radius = int(base_radius) + + if is_vertical: + draw_random_circle((i, pivot), radius) + else: + draw_random_circle((pivot, i), radius) + + i += radius + + def draw_irregular_line_parallel(start, end, pivot, is_vertical): + with ThreadPoolExecutor(max_workers=16) as executor: + futures = [] + step = (end - start) // 16 + for i in range(start, end, step): + future = executor.submit(draw_irregular_line, i, min(i + step, end), pivot, is_vertical) + futures.append(future) + + for future in futures: + future.result() + + draw_irregular_line_parallel(y1 + factor, y2 - factor, x1 + factor, True) + draw_irregular_line_parallel(y1 + factor, y2 - factor, x2 - factor, True) + draw_irregular_line_parallel(x1 + factor, x2 - factor, y1 + factor, False) + draw_irregular_line_parallel(x1 + factor, x2 - factor, y2 - factor, False) + + mask[y1 + factor:y2 - factor, x1 + factor:x2 - factor] = 1.0 + + +def random_mask(mask, bbox, factor, size=128): + small_mask = np.zeros((size, size)).astype(np.float32) + random_mask_raw(small_mask, (0, 0, size, size), factor) + + x1, y1, x2, y2 = bbox + small_mask = torch.tensor(small_mask).unsqueeze(0).unsqueeze(0) + bbox_mask = torch.nn.functional.interpolate(small_mask, size=(y2 - y1, x2 - x1), mode='bilinear', align_corners=False) + bbox_mask = bbox_mask.squeeze(0).squeeze(0) + mask[y1:y2, x1:x2] = bbox_mask + + +def adaptive_mask_paste(dest_mask, src_mask, bbox): + x1, y1, x2, y2 = bbox + small_mask = torch.tensor(src_mask).unsqueeze(0).unsqueeze(0) + bbox_mask = torch.nn.functional.interpolate(small_mask, size=(y2 - y1, x2 - x1), mode='bilinear', align_corners=False) + bbox_mask = bbox_mask.squeeze(0).squeeze(0) + dest_mask[y1:y2, x1:x2] = bbox_mask + + +def crop_condition_mask(mask, image, crop_region): + cond_scale = (mask.shape[1] / image.shape[1], mask.shape[2] / image.shape[2]) + mask_region = [round(v * cond_scale[i % 2]) for i, v in enumerate(crop_region)] + return utils.crop_ndarray3(mask, mask_region) + + +class SafeToGPU: + def __init__(self, size): + self.size = size + + def to_device(self, obj, device): + if utils.is_same_device(device, 'cpu'): + obj.to(device) + else: + if utils.is_same_device(obj.device, 'cpu'): # cpu to gpu + model_management.free_memory(self.size * 1.3, device) + if model_management.get_free_memory(device) > self.size * 1.3: + try: + obj.to(device) + except Exception: + logging.warning(f"[Impact Pack] The model is not moved to the '{device}' due to insufficient memory. [1]") + else: + logging.warning(f"[Impact Pack] The model is not moved to the '{device}' due to insufficient memory. [2]") + + +class SafeToGPU_stub(): + def to_device(self, obj, device): + pass + + +from comfy.cli_args import args, LatentPreviewMethod +import folder_paths +from latent_preview import TAESD, TAESDPreviewerImpl, Latent2RGBPreviewer + +try: + import comfy.latent_formats as latent_formats + + + def get_previewer(device, latent_format=latent_formats.SD15(), force=False, method=None): + previewer = None + + if method is None: + method = args.preview_method + + if method != LatentPreviewMethod.NoPreviews or force: + # TODO previewer methods + taesd_decoder_path = None + + if hasattr(latent_format, "taesd_decoder_path"): + taesd_decoder_path = folder_paths.get_full_path("vae_approx", latent_format.taesd_decoder_name) + + if method == LatentPreviewMethod.Auto: + method = LatentPreviewMethod.Latent2RGB + if taesd_decoder_path: + method = LatentPreviewMethod.TAESD + + if method == LatentPreviewMethod.TAESD: + if taesd_decoder_path: + taesd = TAESD(None, taesd_decoder_path, latent_channels=latent_format.latent_channels).to(device) + previewer = TAESDPreviewerImpl(taesd) + else: + logging.warning("[Impact Pack] TAESD previews enabled, but could not find models/vae_approx/{}".format( + latent_format.taesd_decoder_name)) + + if previewer is None: + previewer = Latent2RGBPreviewer(latent_format.latent_rgb_factors) + return previewer + +except Exception: + logging.error("#########################################################################") + logging.error("[ERROR] ComfyUI-Impact-Pack: Please update ComfyUI to the latest version.") + logging.error("#########################################################################") diff --git a/comfyui-impact-pack/modules/impact/defs.py b/comfyui-impact-pack/modules/impact/defs.py new file mode 100644 index 0000000000000000000000000000000000000000..39b099cfedc047438777aa1f5ca5379d478362d1 --- /dev/null +++ b/comfyui-impact-pack/modules/impact/defs.py @@ -0,0 +1,17 @@ +detection_labels = [ + 'hand', 'face', 'mouth', 'eyes', 'eyebrows', 'pupils', + 'left_eyebrow', 'left_eye', 'left_pupil', 'right_eyebrow', 'right_eye', 'right_pupil', + 'short_sleeved_shirt', 'long_sleeved_shirt', 'short_sleeved_outwear', 'long_sleeved_outwear', + 'vest', 'sling', 'shorts', 'trousers', 'skirt', 'short_sleeved_dress', 'long_sleeved_dress', 'vest_dress', 'sling_dress', + "person", "bicycle", "car", "motorcycle", "airplane", "bus", "train", "truck", "boat", + "traffic light", "fire hydrant", "stop sign", "parking meter", "bench", + "bird", "cat", "dog", "horse", "sheep", "cow", "elephant", "bear", "zebra", "giraffe", + "backpack", "umbrella", "handbag", "tie", "suitcase", "frisbee", "skis", "snowboard", + "sports ball", "kite", "baseball bat", "baseball glove", "skateboard", "surfboard", + "tennis racket", "bottle", "wine glass", "cup", "fork", "knife", "spoon", "bowl", + "banana", "apple", "sandwich", "orange", "broccoli", "carrot", "hot dog", "pizza", + "donut", "cake", "chair", "couch", "potted plant", "bed", "dining table", "toilet", + "tv", "laptop", "mouse", "remote", "keyboard", "cell phone", "microwave", "oven", + "toaster", "sink", "refrigerator", "book", "clock", "vase", "scissors", "teddy bear", + "hair drier", "toothbrush" + ] diff --git a/comfyui-impact-pack/modules/impact/detectors.py b/comfyui-impact-pack/modules/impact/detectors.py new file mode 100644 index 0000000000000000000000000000000000000000..05a9a8d6c6bb24c58fc9aee08861c1c27f52a78d --- /dev/null +++ b/comfyui-impact-pack/modules/impact/detectors.py @@ -0,0 +1,560 @@ +import logging + +import impact.core as core +from nodes import MAX_RESOLUTION +import impact.segs_nodes as segs_nodes +import impact.utils as utils +import torch +from impact.core import SEG + +SAM_MODEL_TOOLTIP = {"tooltip": "Segment Anything Model for Silhouette Detection.\nBe sure to use the SAM_MODEL loaded through the SAMLoader (Impact) node as input."} +SAM_MODEL_TOOLTIP_OPTIONAL = {"tooltip": "[OPTIONAL]\nSegment Anything Model for Silhouette Detection.\nBe sure to use the SAM_MODEL loaded through the SAMLoader (Impact) node as input.\nGiven this input, it refines the rectangular areas detected by BBOX_DETECTOR into silhouette shapes through SAM.\nsam_model_opt takes priority over segm_detector_opt."} + +MASK_HINT_THRESHOLD_TOOLTIP = "When detection_hint is mask-area, the mask of SEGS is used as a point hint for SAM (Segment Anything).\nIn this case, only the areas of the mask with brightness values equal to or greater than mask_hint_threshold are used as hints." +MASK_HINT_USE_NEGATIVE_TOOLTIP = "When detecting with SAM (Segment Anything), negative hints are applied as follows:\nSmall: When the SEGS is smaller than 10 pixels in size\nOuter: Sampling the image area outside the SEGS region at regular intervals" + +DILATION_TOOLTIP = "Set the value to dilate the result mask. If the value is negative, it erodes the mask." +DETECTION_HINT_TOOLTIP = {"tooltip": "It is recommended to use only center-1.\nWhen refining the mask of SEGS with the SAM (Segment Anything) model, center-1 uses only the rectangular area of SEGS and a single point at the exact center as hints.\nOther options were added during the experimental stage and do not work well."} + +BBOX_EXPANSION_TOOLTIP = "When performing SAM (Segment Anything) detection within the SEGS area, the rectangular area of SEGS is expanded and used as a hint." + +class SAMDetectorCombined: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "sam_model": ("SAM_MODEL", SAM_MODEL_TOOLTIP), + "segs": ("SEGS", {"tooltip": "This is the segment information detected by the detector.\nIt refines the Mask through the SAM (Segment Anything) detector for all areas pointed to by SEGS, and combines all Masks to return as a single Mask."}), + "image": ("IMAGE", {"tooltip": "It is assumed that segs contains only the information about the detected areas, and does not include the image. SAM (Segment Anything) operates by referencing this image."}), + "detection_hint": (["center-1", "horizontal-2", "vertical-2", "rect-4", "diamond-4", "mask-area", + "mask-points", "mask-point-bbox", "none"], DETECTION_HINT_TOOLTIP), + "dilation": ("INT", {"default": 0, "min": -512, "max": 512, "step": 1, "tooltip": DILATION_TOOLTIP}), + "threshold": ("FLOAT", {"default": 0.93, "min": 0.0, "max": 1.0, "step": 0.01, "tooltip": "Set the sensitivity threshold for the mask detected by SAM (Segment Anything). A higher value generates a more specific mask with a narrower range. For example, when pointing to a person's area, it might detect clothes, which is a narrower range, instead of the entire person."}), + "bbox_expansion": ("INT", {"default": 0, "min": 0, "max": 1000, "step": 1, "tooltip": BBOX_EXPANSION_TOOLTIP}), + "mask_hint_threshold": ("FLOAT", {"default": 0.7, "min": 0.0, "max": 1.0, "step": 0.01, "tooltip": MASK_HINT_THRESHOLD_TOOLTIP}), + "mask_hint_use_negative": (["False", "Small", "Outter"], {"tooltip": MASK_HINT_USE_NEGATIVE_TOOLTIP}) + } + } + + RETURN_TYPES = ("MASK",) + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Detector" + + def doit(self, sam_model, segs, image, detection_hint, dilation, + threshold, bbox_expansion, mask_hint_threshold, mask_hint_use_negative): + return (core.make_sam_mask(sam_model, segs, image, detection_hint, dilation, + threshold, bbox_expansion, mask_hint_threshold, mask_hint_use_negative), ) + + +class SAMDetectorSegmented: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "sam_model": ("SAM_MODEL", SAM_MODEL_TOOLTIP), + "segs": ("SEGS", {"tooltip": "This is the segment information detected by the detector.\nFor the SEGS region, the masks detected by SAM (Segment Anything) are created as a unified mask and a batch of individual masks."}), + "image": ("IMAGE", {"tooltip": "It is assumed that segs contains only the information about the detected areas, and does not include the image. SAM (Segment Anything) operates by referencing this image."}), + "detection_hint": (["center-1", "horizontal-2", "vertical-2", "rect-4", "diamond-4", "mask-area", + "mask-points", "mask-point-bbox", "none"], DETECTION_HINT_TOOLTIP), + "dilation": ("INT", {"default": 0, "min": -512, "max": 512, "step": 1, "tooltip": DILATION_TOOLTIP}), + "threshold": ("FLOAT", {"default": 0.93, "min": 0.0, "max": 1.0, "step": 0.01}), + "bbox_expansion": ("INT", {"default": 0, "min": 0, "max": 1000, "step": 1, "tooltip": BBOX_EXPANSION_TOOLTIP}), + "mask_hint_threshold": ("FLOAT", {"default": 0.7, "min": 0.0, "max": 1.0, "step": 0.01, "tooltip": MASK_HINT_THRESHOLD_TOOLTIP}), + "mask_hint_use_negative": (["False", "Small", "Outter"], {"tooltip": MASK_HINT_USE_NEGATIVE_TOOLTIP}) + } + } + + RETURN_TYPES = ("MASK", "MASK") + RETURN_NAMES = ("combined_mask", "batch_masks") + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Detector" + + def doit(self, sam_model, segs, image, detection_hint, dilation, + threshold, bbox_expansion, mask_hint_threshold, mask_hint_use_negative): + combined_mask, batch_masks = core.make_sam_mask_segmented(sam_model, segs, image, detection_hint, dilation, + threshold, bbox_expansion, mask_hint_threshold, + mask_hint_use_negative) + return (combined_mask, batch_masks, ) + + +class BboxDetectorForEach: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "bbox_detector": ("BBOX_DETECTOR", ), + "image": ("IMAGE", ), + "threshold": ("FLOAT", {"default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01}), + "dilation": ("INT", {"default": 10, "min": -512, "max": 512, "step": 1}), + "crop_factor": ("FLOAT", {"default": 3.0, "min": 1.0, "max": 100, "step": 0.1}), + "drop_size": ("INT", {"min": 1, "max": MAX_RESOLUTION, "step": 1, "default": 10}), + "labels": ("STRING", {"multiline": True, "default": "all", "placeholder": "List the types of segments to be allowed, separated by commas"}), + }, + "optional": {"detailer_hook": ("DETAILER_HOOK",), } + } + + RETURN_TYPES = ("SEGS", ) + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Detector" + + def doit(self, bbox_detector, image, threshold, dilation, crop_factor, drop_size, labels=None, detailer_hook=None): + if len(image) > 1: + raise Exception('[Impact Pack] ERROR: BboxDetectorForEach does not allow image batches.\nPlease refer to https://github.com/ltdrdata/ComfyUI-extension-tutorials/blob/Main/ComfyUI-Impact-Pack/tutorial/batching-detailer.md for more information.') + + segs = bbox_detector.detect(image, threshold, dilation, crop_factor, drop_size, detailer_hook) + + if labels is not None and labels != '': + labels = labels.split(',') + if len(labels) > 0: + segs, _ = segs_nodes.SEGSLabelFilter.filter(segs, labels) + + return (segs, ) + + +class SegmDetectorForEach: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "segm_detector": ("SEGM_DETECTOR", ), + "image": ("IMAGE", ), + "threshold": ("FLOAT", {"default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01}), + "dilation": ("INT", {"default": 10, "min": -512, "max": 512, "step": 1}), + "crop_factor": ("FLOAT", {"default": 3.0, "min": 1.0, "max": 100, "step": 0.1}), + "drop_size": ("INT", {"min": 1, "max": MAX_RESOLUTION, "step": 1, "default": 10}), + "labels": ("STRING", {"multiline": True, "default": "all", "placeholder": "List the types of segments to be allowed, separated by commas"}), + }, + "optional": {"detailer_hook": ("DETAILER_HOOK",), } + } + + RETURN_TYPES = ("SEGS", ) + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Detector" + + def doit(self, segm_detector, image, threshold, dilation, crop_factor, drop_size, labels=None, detailer_hook=None): + if len(image) > 1: + raise Exception('[Impact Pack] ERROR: SegmDetectorForEach does not allow image batches.\nPlease refer to https://github.com/ltdrdata/ComfyUI-extension-tutorials/blob/Main/ComfyUI-Impact-Pack/tutorial/batching-detailer.md for more information.') + + segs = segm_detector.detect(image, threshold, dilation, crop_factor, drop_size, detailer_hook) + + if labels is not None and labels != '': + labels = labels.split(',') + if len(labels) > 0: + segs, _ = segs_nodes.SEGSLabelFilter.filter(segs, labels) + + return (segs, ) + + +class SegmDetectorCombined: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "segm_detector": ("SEGM_DETECTOR", ), + "image": ("IMAGE", ), + "threshold": ("FLOAT", {"default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01}), + "dilation": ("INT", {"default": 0, "min": -512, "max": 512, "step": 1}), + } + } + + RETURN_TYPES = ("MASK",) + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Detector" + + def doit(self, segm_detector, image, threshold, dilation): + mask = segm_detector.detect_combined(image, threshold, dilation) + + if mask is None: + mask = torch.zeros((image.shape[1], image.shape[2]), dtype=torch.float32, device="cpu") + + return (mask.unsqueeze(0),) + + +class BboxDetectorCombined(SegmDetectorCombined): + @classmethod + def INPUT_TYPES(s): + return {"required": { + "bbox_detector": ("BBOX_DETECTOR", ), + "image": ("IMAGE", ), + "threshold": ("FLOAT", {"default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01}), + "dilation": ("INT", {"default": 4, "min": -512, "max": 512, "step": 1}), + } + } + + def doit(self, bbox_detector, image, threshold, dilation): + mask = bbox_detector.detect_combined(image, threshold, dilation) + + if mask is None: + mask = torch.zeros((image.shape[1], image.shape[2]), dtype=torch.float32, device="cpu") + + return (mask.unsqueeze(0),) + + +class SimpleDetectorForEach: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "bbox_detector": ("BBOX_DETECTOR", ), + "image": ("IMAGE", ), + + "bbox_threshold": ("FLOAT", {"default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01}), + "bbox_dilation": ("INT", {"default": 0, "min": -512, "max": 512, "step": 1}), + + "crop_factor": ("FLOAT", {"default": 3.0, "min": 1.0, "max": 100, "step": 0.1}), + "drop_size": ("INT", {"min": 1, "max": MAX_RESOLUTION, "step": 1, "default": 10}), + + "sub_threshold": ("FLOAT", {"default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01}), + "sub_dilation": ("INT", {"default": 0, "min": -512, "max": 512, "step": 1}), + "sub_bbox_expansion": ("INT", {"default": 0, "min": 0, "max": 1000, "step": 1}), + + "sam_mask_hint_threshold": ("FLOAT", {"default": 0.7, "min": 0.0, "max": 1.0, "step": 0.01}), + }, + "optional": { + "post_dilation": ("INT", {"default": 0, "min": -512, "max": 512, "step": 1}), + "sam_model_opt": ("SAM_MODEL", SAM_MODEL_TOOLTIP_OPTIONAL), + "segm_detector_opt": ("SEGM_DETECTOR", ), + } + } + + RETURN_TYPES = ("SEGS",) + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Detector" + + @staticmethod + def detect(bbox_detector, image, bbox_threshold, bbox_dilation, crop_factor, drop_size, + sub_threshold, sub_dilation, sub_bbox_expansion, + sam_mask_hint_threshold, post_dilation=0, sam_model_opt=None, segm_detector_opt=None, + detailer_hook=None): + if len(image) > 1: + raise Exception('[Impact Pack] ERROR: SimpleDetectorForEach does not allow image batches.\nPlease refer to https://github.com/ltdrdata/ComfyUI-extension-tutorials/blob/Main/ComfyUI-Impact-Pack/tutorial/batching-detailer.md for more information.') + + if segm_detector_opt is not None and hasattr(segm_detector_opt, 'bbox_detector') and segm_detector_opt.bbox_detector == bbox_detector: + # Better segm support for YOLO-World detector + segs = segm_detector_opt.detect(image, sub_threshold, sub_dilation, crop_factor, drop_size, detailer_hook=detailer_hook) + else: + segs = bbox_detector.detect(image, bbox_threshold, bbox_dilation, crop_factor, drop_size, detailer_hook=detailer_hook) + + if sam_model_opt is not None: + mask = core.make_sam_mask(sam_model_opt, segs, image, "center-1", sub_dilation, + sub_threshold, sub_bbox_expansion, sam_mask_hint_threshold, False) + segs = core.segs_bitwise_and_mask(segs, mask) + elif segm_detector_opt is not None: + segm_segs = segm_detector_opt.detect(image, sub_threshold, sub_dilation, crop_factor, drop_size, detailer_hook=detailer_hook) + mask = core.segs_to_combined_mask(segm_segs) + segs = core.segs_bitwise_and_mask(segs, mask) + + segs = core.dilate_segs(segs, post_dilation) + + return (segs,) + + def doit(self, bbox_detector, image, bbox_threshold, bbox_dilation, crop_factor, drop_size, + sub_threshold, sub_dilation, sub_bbox_expansion, + sam_mask_hint_threshold, post_dilation=0, sam_model_opt=None, segm_detector_opt=None): + + return SimpleDetectorForEach.detect(bbox_detector, image, bbox_threshold, bbox_dilation, crop_factor, drop_size, + sub_threshold, sub_dilation, sub_bbox_expansion, + sam_mask_hint_threshold, post_dilation=post_dilation, + sam_model_opt=sam_model_opt, segm_detector_opt=segm_detector_opt) + + +class SimpleDetectorForEachPipe: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "detailer_pipe": ("DETAILER_PIPE", ), + "image": ("IMAGE", ), + + "bbox_threshold": ("FLOAT", {"default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01}), + "bbox_dilation": ("INT", {"default": 0, "min": -512, "max": 512, "step": 1}), + + "crop_factor": ("FLOAT", {"default": 3.0, "min": 1.0, "max": 100, "step": 0.1}), + "drop_size": ("INT", {"min": 1, "max": MAX_RESOLUTION, "step": 1, "default": 10}), + + "sub_threshold": ("FLOAT", {"default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01}), + "sub_dilation": ("INT", {"default": 0, "min": -512, "max": 512, "step": 1}), + "sub_bbox_expansion": ("INT", {"default": 0, "min": 0, "max": 1000, "step": 1}), + + "sam_mask_hint_threshold": ("FLOAT", {"default": 0.7, "min": 0.0, "max": 1.0, "step": 0.01}), + }, + "optional": { + "post_dilation": ("INT", {"default": 0, "min": -512, "max": 512, "step": 1}), + } + } + + RETURN_TYPES = ("SEGS",) + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Detector" + + def doit(self, detailer_pipe, image, bbox_threshold, bbox_dilation, crop_factor, drop_size, + sub_threshold, sub_dilation, sub_bbox_expansion, sam_mask_hint_threshold, post_dilation=0): + + if len(image) > 1: + raise Exception('[Impact Pack] ERROR: SimpleDetectorForEach does not allow image batches.\nPlease refer to https://github.com/ltdrdata/ComfyUI-extension-tutorials/blob/Main/ComfyUI-Impact-Pack/tutorial/batching-detailer.md for more information.') + + model, clip, vae, positive, negative, wildcard, bbox_detector, segm_detector_opt, sam_model_opt, detailer_hook, refiner_model, refiner_clip, refiner_positive, refiner_negative = detailer_pipe + + return SimpleDetectorForEach.detect(bbox_detector, image, bbox_threshold, bbox_dilation, crop_factor, drop_size, + sub_threshold, sub_dilation, sub_bbox_expansion, + sam_mask_hint_threshold, post_dilation=post_dilation, sam_model_opt=sam_model_opt, segm_detector_opt=segm_detector_opt, + detailer_hook=detailer_hook) + +class SAM2VideoDetectorSEGS: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "image_frames": ("IMAGE", ), + + "bbox_detector": ("BBOX_DETECTOR", ), + "sam2_model": ("SAM_MODEL", ), + + "bbox_threshold": ("FLOAT", {"default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01}), + "sam2_threshold": ("FLOAT", {"default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01}), + + "crop_factor": ("FLOAT", {"default": 3.0, "min": 1.0, "max": 100, "step": 0.1}), + "drop_size": ("INT", {"min": 1, "max": MAX_RESOLUTION, "step": 1, "default": 10}), + } + } + + RETURN_TYPES = ("SEGS", ) + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Detector" + + @staticmethod + def doit(bbox_detector, sam2_model, image_frames, bbox_threshold, sam2_threshold, crop_factor, drop_size): + # ---- Check SAM2 model ---- + if not isinstance(sam2_model, core.SAM2Wrapper): + logging.error("[Impact Pack] To use the SAM2VideoDetectorSEGS node, a valid SAM2 model must be provided as input to `sam2_model`.") + raise Exception("To use the SAM2VideoDetectorSEGS node, a SAM2 model must be provided as input to `sam2_model`.") + + # ---- Detect bboxes ---- + segs = bbox_detector.detect(image_frames[0].unsqueeze(0), bbox_threshold, 0, 0, drop_size) + + # ---- If no detections, try reversed frames before giving up ---- + if len(segs[1]) == 0: + reversed_frames = torch.flip(image_frames, dims=[0]) + segs_rev = bbox_detector.detect(reversed_frames[0].unsqueeze(0), bbox_threshold, 0, 0, drop_size) + + if len(segs_rev[1]) == 0: + # No Bboxes when reversed -> Give up + h, w = image_frames.shape[1:3] + return (((h, w), []), ) + + # ---- Predict masks in reversed mode ---- + segs_masks = sam2_model.predict_video_segs(reversed_frames, segs_rev) + + # segs_masks wieder umdrehen, damit sie mit Originalframes matchen + for k in segs_masks.keys(): + segs_masks[k] = torch.flip(segs_masks[k], dims=[0]) + else: + # ---- Predict masks if BBOXES were found in forward pass---- + segs_masks = sam2_model.predict_video_segs(image_frames, segs) + + def get_whole_merged_mask(all_masks): + merged_mask = (all_masks[0] * 255).to(torch.uint8) + for mask in all_masks[1:]: + merged_mask |= (mask * 255).to(torch.uint8) + + merged_mask = (merged_mask / 255.0).to(torch.float32) + merged_mask = utils.to_binary_mask(merged_mask, 0.1)[0] + return merged_mask + + new_segs = [] + for k, v in segs_masks.items(): + v = v.squeeze(3) + m = get_whole_merged_mask(v) + seg = segs_nodes.MaskToSEGS.doit(m, False, crop_factor, False, drop_size, contour_fill=True)[0][1] + + if len(seg) == 0: + continue + + seg = seg[0] + + x1, y1, x2, y2 = seg.crop_region + masks = [] + for mask in v: + masks.append(mask[y1:y2, x1:x2]) + cropped_mask = torch.stack(masks) + cropped_mask = (cropped_mask >= (sam2_threshold * 100 - 50)).to(torch.uint8).cpu() + + new_seg = SEG( + seg.cropped_image, + cropped_mask, + seg.confidence, + seg.crop_region, + seg.bbox, + seg.label, + seg.control_net_wrapper + ) + new_segs.append(new_seg) + + return ((segs[0], new_segs), ) + + + +class SimpleDetectorForAnimateDiff: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "bbox_detector": ("BBOX_DETECTOR", ), + "image_frames": ("IMAGE", ), + + "bbox_threshold": ("FLOAT", {"default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01}), + "bbox_dilation": ("INT", {"default": 0, "min": -255, "max": 255, "step": 1}), + + "crop_factor": ("FLOAT", {"default": 3.0, "min": 1.0, "max": 100, "step": 0.1}), + "drop_size": ("INT", {"min": 1, "max": MAX_RESOLUTION, "step": 1, "default": 10}), + + "sub_threshold": ("FLOAT", {"default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01}), + "sub_dilation": ("INT", {"default": 0, "min": -255, "max": 255, "step": 1}), + "sub_bbox_expansion": ("INT", {"default": 0, "min": 0, "max": 1000, "step": 1}), + + "sam_mask_hint_threshold": ("FLOAT", {"default": 0.7, "min": 0.0, "max": 1.0, "step": 0.01}), + }, + "optional": { + "masking_mode": (["Pivot SEGS", "Combine neighboring frames", "Don't combine"],), + "segs_pivot": (["Combined mask", "1st frame mask"],), + "sam_model_opt": ("SAM_MODEL", SAM_MODEL_TOOLTIP_OPTIONAL), + "segm_detector_opt": ("SEGM_DETECTOR", ), + } + } + + RETURN_TYPES = ("SEGS",) + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Detector" + + @staticmethod + def detect(bbox_detector, image_frames, bbox_threshold, bbox_dilation, crop_factor, drop_size, + sub_threshold, sub_dilation, sub_bbox_expansion, sam_mask_hint_threshold, + masking_mode="Pivot SEGS", segs_pivot="Combined mask", sam_model_opt=None, segm_detector_opt=None): + + h = image_frames.shape[1] + w = image_frames.shape[2] + + # gather segs for all frames + segs_by_frames = [] + for image in image_frames: + image = image.unsqueeze(0) + segs = bbox_detector.detect(image, bbox_threshold, bbox_dilation, crop_factor, drop_size) + + if sam_model_opt is not None: + mask = core.make_sam_mask(sam_model_opt, segs, image, "center-1", sub_dilation, + sub_threshold, sub_bbox_expansion, sam_mask_hint_threshold, False) + segs = core.segs_bitwise_and_mask(segs, mask) + elif segm_detector_opt is not None: + segm_segs = segm_detector_opt.detect(image, sub_threshold, sub_dilation, crop_factor, drop_size) + mask = core.segs_to_combined_mask(segm_segs) + segs = core.segs_bitwise_and_mask(segs, mask) + + segs_by_frames.append(segs) + + def get_masked_frames(): + masks_by_frame = [] + for i, segs in enumerate(segs_by_frames): + masks_in_frame = segs_nodes.SEGSToMaskList().doit(segs)[0] + current_frame_mask = (masks_in_frame[0] * 255).to(torch.uint8) + + for mask in masks_in_frame[1:]: + current_frame_mask |= (mask * 255).to(torch.uint8) + + current_frame_mask = (current_frame_mask/255.0).to(torch.float32) + current_frame_mask = utils.to_binary_mask(current_frame_mask, 0.1)[0] + + masks_by_frame.append(current_frame_mask) + + return masks_by_frame + + def get_empty_mask(): + return torch.zeros((h, w), dtype=torch.float32, device="cpu") + + def get_neighboring_mask_at(i, masks_by_frame): + prv = masks_by_frame[i-1] if i > 1 else get_empty_mask() + cur = masks_by_frame[i] + nxt = masks_by_frame[i-1] if i > 1 else get_empty_mask() + + prv = prv if prv is not None else get_empty_mask() + cur = cur.clone() if cur is not None else get_empty_mask() + nxt = nxt if nxt is not None else get_empty_mask() + + return prv, cur, nxt + + def get_merged_neighboring_mask(masks_by_frame): + if len(masks_by_frame) <= 1: + return masks_by_frame + + result = [] + for i in range(0, len(masks_by_frame)): + prv, cur, nxt = get_neighboring_mask_at(i, masks_by_frame) + cur = (cur * 255).to(torch.uint8) + cur |= (prv * 255).to(torch.uint8) + cur |= (nxt * 255).to(torch.uint8) + cur = (cur / 255.0).to(torch.float32) + cur = utils.to_binary_mask(cur, 0.1)[0] + result.append(cur) + + return result + + def get_whole_merged_mask(): + all_masks = [] + for segs in segs_by_frames: + all_masks += segs_nodes.SEGSToMaskList().doit(segs)[0] + + merged_mask = (all_masks[0] * 255).to(torch.uint8) + for mask in all_masks[1:]: + merged_mask |= (mask * 255).to(torch.uint8) + + merged_mask = (merged_mask / 255.0).to(torch.float32) + merged_mask = utils.to_binary_mask(merged_mask, 0.1)[0] + return merged_mask + + def get_pivot_segs(): + if segs_pivot == "1st frame mask": + return segs_by_frames[0][1] + else: + merged_mask = get_whole_merged_mask() + return segs_nodes.MaskToSEGS.doit(merged_mask, False, crop_factor, False, drop_size, contour_fill=True)[0] + + def get_segs(merged_neighboring=False): + pivot_segs = get_pivot_segs() + + masks_by_frame = get_masked_frames() + if merged_neighboring: + masks_by_frame = get_merged_neighboring_mask(masks_by_frame) + + new_segs = [] + for seg in pivot_segs[1]: + cropped_mask = torch.zeros(seg.cropped_mask.shape, dtype=torch.float32, device="cpu").unsqueeze(0) + pivot_mask = torch.from_numpy(seg.cropped_mask) + x1, y1, x2, y2 = seg.crop_region + for mask in masks_by_frame: + cropped_mask_at_frame = (mask[y1:y2, x1:x2] * pivot_mask).unsqueeze(0) + cropped_mask = torch.cat((cropped_mask, cropped_mask_at_frame), dim=0) + + if len(cropped_mask) > 1: + cropped_mask = cropped_mask[1:] + + new_seg = SEG(seg.cropped_image, cropped_mask, seg.confidence, seg.crop_region, seg.bbox, seg.label, seg.control_net_wrapper) + new_segs.append(new_seg) + + return pivot_segs[0], new_segs + + # create result mask + if masking_mode == "Pivot SEGS": + return (get_pivot_segs(), ) + + elif masking_mode == "Combine neighboring frames": + return (get_segs(merged_neighboring=True), ) + + else: # elif masking_mode == "Don't combine": + return (get_segs(merged_neighboring=False), ) + + def doit(self, bbox_detector, image_frames, bbox_threshold, bbox_dilation, crop_factor, drop_size, + sub_threshold, sub_dilation, sub_bbox_expansion, sam_mask_hint_threshold, + masking_mode="Pivot SEGS", segs_pivot="Combined mask", sam_model_opt=None, segm_detector_opt=None): + + return SimpleDetectorForAnimateDiff.detect(bbox_detector, image_frames, bbox_threshold, bbox_dilation, crop_factor, drop_size, + sub_threshold, sub_dilation, sub_bbox_expansion, sam_mask_hint_threshold, + masking_mode, segs_pivot, sam_model_opt, segm_detector_opt) diff --git a/comfyui-impact-pack/modules/impact/hf_nodes.py b/comfyui-impact-pack/modules/impact/hf_nodes.py new file mode 100644 index 0000000000000000000000000000000000000000..9c8e4208732e15870426f11ca22da9b14f9db930 --- /dev/null +++ b/comfyui-impact-pack/modules/impact/hf_nodes.py @@ -0,0 +1,189 @@ +import comfy +import re +from impact import utils + + +hf_transformer_model_urls = [ + "rizvandwiki/gender-classification-2", + "NTQAI/pedestrian_gender_recognition", + "Leilab/gender_class", + "ProjectPersonal/GenderClassifier", + "crangana/trained-gender", + "cledoux42/GenderNew_v002", + "ivensamdh/genderage2" +] + + +class HF_TransformersClassifierProvider: + @classmethod + def INPUT_TYPES(s): + global hf_transformer_model_urls + return {"required": { + "preset_repo_id": (hf_transformer_model_urls + ['Manual repo id'],), + "manual_repo_id": ("STRING", {"multiline": False}), + "device_mode": (["AUTO", "Prefer GPU", "CPU"],), + }, + } + + RETURN_TYPES = ("TRANSFORMERS_CLASSIFIER",) + FUNCTION = "doit" + + CATEGORY = "ImpactPack/HuggingFace" + + def doit(self, preset_repo_id, manual_repo_id, device_mode): + from transformers import pipeline + + if preset_repo_id == 'Manual repo id': + url = manual_repo_id + else: + url = preset_repo_id + + if device_mode != 'CPU': + device = comfy.model_management.get_torch_device() + else: + device = "cpu" + + classifier = pipeline('image-classification', model=url, device=device) + + return (classifier,) + + +preset_classify_expr = [ + '#Female > #Male', + '#Female < #Male', + 'female > 0.5', + 'male > 0.5', + 'Age16to25 > 0.1', + 'Age50to69 > 0.1', +] + +symbolic_label_map = { + '#Female': {'female', 'Female', 'Human Female', 'woman', 'women', 'girl'}, + '#Male': {'male', 'Male', 'Human Male', 'man', 'men', 'boy'} +} + +def is_numeric_string(input_str): + return re.match(r'^-?\d+(\.\d+)?$', input_str) is not None + + +classify_expr_pattern = r'([^><= ]+)\s*(>|<|>=|<=|=)\s*([^><= ]+)' + + +class SEGS_Classify: + @classmethod + def INPUT_TYPES(s): + global preset_classify_expr + return {"required": { + "classifier": ("TRANSFORMERS_CLASSIFIER",), + "segs": ("SEGS",), + "preset_expr": (preset_classify_expr + ['Manual expr'],), + "manual_expr": ("STRING", {"multiline": False}), + }, + "optional": { + "ref_image_opt": ("IMAGE", ), + } + } + + RETURN_TYPES = ("SEGS", "SEGS", "STRING") + RETURN_NAMES = ("filtered_SEGS", "remained_SEGS", "detected_labels") + OUTPUT_IS_LIST = (False, False, True) + + FUNCTION = "doit" + + CATEGORY = "ImpactPack/HuggingFace" + + @staticmethod + def lookup_classified_label_score(score_infos, label): + global symbolic_label_map + + if label.startswith('#'): + if label not in symbolic_label_map: + return None + else: + label = symbolic_label_map[label] + else: + label = {label} + + for x in score_infos: + if x['label'] in label: + return x['score'] + + return None + + def doit(self, classifier, segs, preset_expr, manual_expr, ref_image_opt=None): + if preset_expr == 'Manual expr': + expr_str = manual_expr + else: + expr_str = preset_expr + + match = re.match(classify_expr_pattern, expr_str) + + if match is None: + return (segs[0], []), segs, [] + + a = match.group(1) + op = match.group(2) + b = match.group(3) + + a_is_lab = not is_numeric_string(a) + b_is_lab = not is_numeric_string(b) + + classified = [] + remained_SEGS = [] + provided_labels = set() + + for seg in segs[1]: + cropped_image = None + + if seg.cropped_image is not None: + cropped_image = seg.cropped_image + elif ref_image_opt is not None: + # take from original image + cropped_image = utils.crop_image(ref_image_opt, seg.crop_region) + + if cropped_image is not None: + cropped_image = utils.to_pil(cropped_image) + res = classifier(cropped_image) + classified.append((seg, res)) + + for x in res: + provided_labels.add(x['label']) + else: + remained_SEGS.append(seg) + + filtered_SEGS = [] + for seg, res in classified: + if a_is_lab: + avalue = SEGS_Classify.lookup_classified_label_score(res, a) + else: + avalue = a + + if b_is_lab: + bvalue = SEGS_Classify.lookup_classified_label_score(res, b) + else: + bvalue = b + + if avalue is None or bvalue is None: + remained_SEGS.append(seg) + continue + + avalue = float(avalue) + bvalue = float(bvalue) + + if op == '>': + cond = avalue > bvalue + elif op == '<': + cond = avalue < bvalue + elif op == '>=': + cond = avalue >= bvalue + elif op == '<=': + cond = avalue <= bvalue + else: + cond = avalue == bvalue + + if cond: + filtered_SEGS.append(seg) + else: + remained_SEGS.append(seg) + + return (segs[0], filtered_SEGS), (segs[0], remained_SEGS), list(provided_labels) diff --git a/comfyui-impact-pack/modules/impact/hook_nodes.py b/comfyui-impact-pack/modules/impact/hook_nodes.py new file mode 100644 index 0000000000000000000000000000000000000000..f17166976c1f58e77bb3a57042851c3ca9844b08 --- /dev/null +++ b/comfyui-impact-pack/modules/impact/hook_nodes.py @@ -0,0 +1,128 @@ +import sys +from . import hooks +from . import defs + + +class SEGSOrderedFilterDetailerHookProvider: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "target": (["area(=w*h)", "width", "height", "x1", "y1", "x2", "y2"],), + "order": ("BOOLEAN", {"default": True, "label_on": "descending", "label_off": "ascending"}), + "take_start": ("INT", {"default": 0, "min": 0, "max": sys.maxsize, "step": 1}), + "take_count": ("INT", {"default": 1, "min": 0, "max": sys.maxsize, "step": 1}), + }, + } + + RETURN_TYPES = ("DETAILER_HOOK", ) + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Util" + + def doit(self, target, order, take_start, take_count): + hook = hooks.SEGSOrderedFilterDetailerHook(target, order, take_start, take_count) + return (hook, ) + + +class SEGSRangeFilterDetailerHookProvider: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "target": (["area(=w*h)", "width", "height", "x1", "y1", "x2", "y2", "length_percent"],), + "mode": ("BOOLEAN", {"default": True, "label_on": "inside", "label_off": "outside"}), + "min_value": ("INT", {"default": 0, "min": 0, "max": sys.maxsize, "step": 1}), + "max_value": ("INT", {"default": 67108864, "min": 0, "max": sys.maxsize, "step": 1}), + }, + } + + RETURN_TYPES = ("DETAILER_HOOK", ) + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Util" + + def doit(self, target, mode, min_value, max_value): + hook = hooks.SEGSRangeFilterDetailerHook(target, mode, min_value, max_value) + return (hook, ) + + +class SEGSLabelFilterDetailerHookProvider: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "segs": ("SEGS", ), + "preset": (['all'] + defs.detection_labels,), + "labels": ("STRING", {"multiline": True, "placeholder": "List the types of segments to be allowed, separated by commas"}), + }, + } + + RETURN_TYPES = ("DETAILER_HOOK", ) + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Util" + + def doit(self, preset, labels): + hook = hooks.SEGSLabelFilterDetailerHook(labels) + return (hook, ) + + +class PreviewDetailerHookProvider: + @classmethod + def INPUT_TYPES(s): + return { + "required": {"quality": ("INT", {"default": 95, "min": 20, "max": 100})}, + "hidden": {"unique_id": "UNIQUE_ID"}, + } + + RETURN_TYPES = ("DETAILER_HOOK", "UPSCALER_HOOK") + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Util" + + NOT_IDEMPOTENT = True + + def doit(self, quality, unique_id): + hook = hooks.PreviewDetailerHook(unique_id, quality) + return hook, hook + + +class LamaRemoverDetailerHookProvider: + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "mask_threshold":("INT", {"default": 250, "min": 0, "max": 255, "step": 1, "display": "slider"}), + "gaussblur_radius": ("INT", {"default": 8, "min": 0, "max": 20, "step": 1, "display": "slider"}), + "skip_sampling": ("BOOLEAN", {"default": True}), + } + } + + RETURN_TYPES = ("DETAILER_HOOK", ) + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Util" + + def doit(self, mask_threshold, gaussblur_radius, skip_sampling): + hook = hooks.LamaRemoverDetailerHook(mask_threshold, gaussblur_radius, skip_sampling) + return (hook, ) + + +class BlackPatchRetryHookProvider: + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "mean_thresh": ("INT", {"default": 10, "min": 0, "max": 255}), + "var_thresh": ("INT", {"default": 5, "min": 0, "max": 255}) + }, + } + + RETURN_TYPES = ("DETAILER_HOOK", ) + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Util" + + NOT_IDEMPOTENT = True + + def doit(self, mean_thresh, var_thresh): + hook = hooks.BlackPatchRetryHook(mean_thresh, var_thresh) + return hook, diff --git a/comfyui-impact-pack/modules/impact/hooks.py b/comfyui-impact-pack/modules/impact/hooks.py new file mode 100644 index 0000000000000000000000000000000000000000..2a8c14df58767f515228a38240c4c2e2eab11df4 --- /dev/null +++ b/comfyui-impact-pack/modules/impact/hooks.py @@ -0,0 +1,595 @@ +import copy +import torch +import nodes +from impact import utils +from . import segs_nodes +from thirdparty import noise_nodes +from server import PromptServer +import asyncio +import folder_paths +import os +from comfy_extras import nodes_custom_sampler +import math +import logging + + +class PixelKSampleHook: + cur_step = 0 + total_step = 0 + + def __init__(self): + pass + + def set_steps(self, info): + self.cur_step, self.total_step = info + + def post_decode(self, pixels): + return pixels + + def post_upscale(self, pixels, mask=None): + return pixels + + def post_encode(self, samples): + return samples + + def pre_decode(self, samples): + return samples + + def pre_ksample(self, model, seed, steps, cfg, sampler_name, scheduler, positive, negative, upscaled_latent, + denoise): + return model, seed, steps, cfg, sampler_name, scheduler, positive, negative, upscaled_latent, denoise + + def post_crop_region(self, w, h, item_bbox, crop_region): + return crop_region + + def touch_scaled_size(self, w, h): + return w, h + + +class PixelKSampleHookCombine(PixelKSampleHook): + hook1 = None + hook2 = None + + def __init__(self, hook1, hook2): + super().__init__() + self.hook1 = hook1 + self.hook2 = hook2 + + def set_steps(self, info): + self.hook1.set_steps(info) + self.hook2.set_steps(info) + + def pre_decode(self, samples): + return self.hook2.pre_decode(self.hook1.pre_decode(samples)) + + def post_decode(self, pixels): + return self.hook2.post_decode(self.hook1.post_decode(pixels)) + + def post_upscale(self, pixels, mask=None): + return self.hook2.post_upscale(self.hook1.post_upscale(pixels, mask), mask) + + def post_encode(self, samples): + return self.hook2.post_encode(self.hook1.post_encode(samples)) + + def post_crop_region(self, w, h, item_bbox, crop_region): + crop_region = self.hook1.post_crop_region(w, h, item_bbox, crop_region) + return self.hook2.post_crop_region(w, h, item_bbox, crop_region) + + def touch_scaled_size(self, w, h): + w, h = self.hook1.touch_scaled_size(w, h) + return self.hook2.touch_scaled_size(w, h) + + def pre_ksample(self, model, seed, steps, cfg, sampler_name, scheduler, positive, negative, upscaled_latent, + denoise): + model, seed, steps, cfg, sampler_name, scheduler, positive, negative, upscaled_latent, denoise = \ + self.hook1.pre_ksample(model, seed, steps, cfg, sampler_name, scheduler, positive, negative, + upscaled_latent, denoise) + + return self.hook2.pre_ksample(model, seed, steps, cfg, sampler_name, scheduler, positive, negative, + upscaled_latent, denoise) + + +class DetailerHookCombine(PixelKSampleHookCombine): + def cycle_latent(self, latent): + latent = self.hook1.cycle_latent(latent) + latent = self.hook2.cycle_latent(latent) + return latent + + def post_detection(self, segs): + segs = self.hook1.post_detection(segs) + segs = self.hook2.post_detection(segs) + return segs + + def post_paste(self, image): + image = self.hook1.post_paste(image) + image = self.hook2.post_paste(image) + return image + + def get_custom_noise(self, seed, noise, is_touched): + noise_1st, is_touched = self.hook1.get_custom_noise(seed, noise, is_touched) + noise_2nd, is_touched = self.hook2.get_custom_noise(seed, noise, is_touched) + return noise, is_touched + + def get_custom_sampler(self): + if self.hook1.get_custom_sampler() is not None: + return self.hook1.get_custom_sampler() + else: + return self.hook2.get_custom_sampler() + + def get_skip_sampling(self): + return self.hook1.get_skip_sampling() and self.hook2.get_skip_sampling() + + def should_retry_patch(self, patch): + return self.hook1.should_retry_patch(patch) or self.hook2.should_retry_patch(patch) + + +class SimpleCfgScheduleHook(PixelKSampleHook): + target_cfg = 0 + + def __init__(self, target_cfg): + super().__init__() + self.target_cfg = target_cfg + + def pre_ksample(self, model, seed, steps, cfg, sampler_name, scheduler, positive, negative, upscaled_latent, denoise): + if self.total_step > 1: + progress = self.cur_step / (self.total_step - 1) + gap = self.target_cfg - cfg + current_cfg = int(cfg + gap * progress) + else: + current_cfg = self.target_cfg + + return model, seed, steps, current_cfg, sampler_name, scheduler, positive, negative, upscaled_latent, denoise + + +class SimpleDenoiseScheduleHook(PixelKSampleHook): + def __init__(self, target_denoise): + super().__init__() + self.target_denoise = target_denoise + + def pre_ksample(self, model, seed, steps, cfg, sampler_name, scheduler, positive, negative, upscaled_latent, denoise): + if self.total_step > 1: + progress = self.cur_step / (self.total_step - 1) + gap = self.target_denoise - denoise + current_denoise = denoise + gap * progress + else: + current_denoise = self.target_denoise + + return model, seed, steps, cfg, sampler_name, scheduler, positive, negative, upscaled_latent, current_denoise + + +class SimpleStepsScheduleHook(PixelKSampleHook): + def __init__(self, target_steps): + super().__init__() + self.target_steps = target_steps + + def pre_ksample(self, model, seed, steps, cfg, sampler_name, scheduler, positive, negative, upscaled_latent, denoise): + if self.total_step > 1: + progress = self.cur_step / (self.total_step - 1) + gap = self.target_steps - steps + current_steps = int(steps + gap * progress) + else: + current_steps = self.target_steps + + return model, seed, current_steps, cfg, sampler_name, scheduler, positive, negative, upscaled_latent, denoise + + +class DetailerHook(PixelKSampleHook): + def cycle_latent(self, latent): + return latent + + def post_detection(self, segs): + return segs + + def post_paste(self, image): + return image + + def get_custom_noise(self, seed, noise, is_touched): + return noise, is_touched + + def get_custom_sampler(self): + return None + + def get_skip_sampling(self): + return False + + def should_retry_patch(self, patch): + return False + + +class CustomSamplerDetailerHookProvider(DetailerHook): + def __init__(self, sampler): + super().__init__() + self.sampler = sampler + + def get_custom_sampler(self): + return self.sampler + + +# class CustomNoiseDetailerHookProvider(DetailerHook): +# def __init__(self, noise): +# super().__init__() +# self.noise = noise +# +# def get_custom_noise(self, seed, noise, is_start): +# return self.noise + + +class VariationNoiseDetailerHookProvider(DetailerHook): + def __init__(self, variation_seed, variation_strength): + super().__init__() + self.variation_seed = variation_seed + self.variation_strength = variation_strength + + def get_custom_noise(self, seed, noise, is_touched): + empty_noise = {'samples': torch.zeros(noise.size())} + if not is_touched: + noise = nodes_custom_sampler.Noise_RandomNoise(seed).generate_noise(empty_noise) + noise_2nd = nodes_custom_sampler.Noise_RandomNoise(self.variation_seed).generate_noise(empty_noise) + + mixed_noise = ((1 - self.variation_strength) * noise + self.variation_strength * noise_2nd) + + # NOTE: Since the variance of the Gaussian noise in mixed_noise has changed, it must be corrected through scaling. + scale_factor = math.sqrt((1 - self.variation_strength) ** 2 + self.variation_strength ** 2) + corrected_noise = mixed_noise / scale_factor # Scale the noise to maintain variance of 1 + + return corrected_noise, True + + +class SimpleDetailerDenoiseSchedulerHook(DetailerHook): + def __init__(self, target_denoise): + super().__init__() + self.target_denoise = target_denoise + + def pre_ksample(self, model, seed, steps, cfg, sampler_name, scheduler, positive, negative, latent, denoise): + if self.total_step > 1: + progress = self.cur_step / (self.total_step - 1) + gap = self.target_denoise - denoise + current_denoise = denoise + gap * progress + else: + # ignore hook if total cycle <= 1 + current_denoise = denoise + + return model, seed, steps, cfg, sampler_name, scheduler, positive, negative, latent, current_denoise + + +class CoreMLHook(DetailerHook): + def __init__(self, mode): + super().__init__() + resolution = mode.split('x') + + self.w = int(resolution[0]) + self.h = int(resolution[1]) + + self.override_bbox_by_segm = False + + def pre_decode(self, samples): + new_samples = copy.deepcopy(samples) + new_samples['samples'] = samples['samples'][0].unsqueeze(0) + return new_samples + + def post_encode(self, samples): + new_samples = copy.deepcopy(samples) + new_samples['samples'] = samples['samples'].repeat(2, 1, 1, 1) + return new_samples + + def post_crop_region(self, w, h, item_bbox, crop_region): + x1, y1, x2, y2 = crop_region + bx1, by1, bx2, by2 = item_bbox + crop_w = x2-x1 + crop_h = y2-y1 + + crop_ratio = crop_w/crop_h + target_ratio = self.w/self.h + if crop_ratio < target_ratio: + # shrink height + top_gap = by1 - y1 + bottom_gap = y2 - by2 + + gap_ratio = top_gap / bottom_gap + + target_height = 1/target_ratio*crop_w + delta_height = crop_h - target_height + + new_y1 = int(y1 + delta_height*gap_ratio) + new_y2 = int(new_y1 + target_height) + crop_region = x1, new_y1, x2, new_y2 + + elif crop_ratio > target_ratio: + # shrink width + left_gap = bx1 - x1 + right_gap = x2 - bx2 + + gap_ratio = left_gap / right_gap + + target_width = target_ratio*crop_h + delta_width = crop_w - target_width + + new_x1 = int(x1 + delta_width*gap_ratio) + new_x2 = int(new_x1 + target_width) + crop_region = new_x1, y1, new_x2, y2 + + return crop_region + + def touch_scaled_size(self, w, h): + return self.w, self.h + + +# REQUIREMENTS: BlenderNeko/ComfyUI Noise +class InjectNoiseHook(PixelKSampleHook): + def __init__(self, source, seed, start_strength, end_strength): + super().__init__() + self.source = source + self.seed = seed + self.start_strength = start_strength + self.end_strength = end_strength + + def post_encode(self, samples): + cur_step = self.cur_step + + size = samples['samples'].shape + seed = cur_step + self.seed + cur_step + + if "BNK_NoisyLatentImage" in nodes.NODE_CLASS_MAPPINGS and "BNK_InjectNoise" in nodes.NODE_CLASS_MAPPINGS: + NoisyLatentImage = nodes.NODE_CLASS_MAPPINGS["BNK_NoisyLatentImage"] + InjectNoise = nodes.NODE_CLASS_MAPPINGS["BNK_InjectNoise"] + else: + utils.try_install_custom_node('https://github.com/BlenderNeko/ComfyUI_Noise', + "To use 'NoiseInjectionHookProvider', 'ComfyUI Noise' extension is required.") + raise Exception("'BNK_NoisyLatentImage', 'BNK_InjectNoise' nodes are not installed.") + + noise = NoisyLatentImage().create_noisy_latents(self.source, seed, size[3] * 8, size[2] * 8, size[0])[0] + + # inj noise + mask = None + if 'noise_mask' in samples: + mask = samples['noise_mask'] + + strength = self.start_strength + (self.end_strength - self.start_strength) * cur_step / self.total_step + samples = InjectNoise().inject_noise(samples, strength, noise, mask)[0] + logging.info(f"[Impact Pack] InjectNoiseHook: strength = {strength}") + + if mask is not None: + samples['noise_mask'] = mask + + return samples + + +class UnsamplerHook(PixelKSampleHook): + def __init__(self, model, steps, start_end_at_step, end_end_at_step, cfg, sampler_name, + scheduler, normalize, positive, negative): + super().__init__() + self.model = model + self.cfg = cfg + self.sampler_name = sampler_name + self.steps = steps + self.start_end_at_step = start_end_at_step + self.end_end_at_step = end_end_at_step + self.scheduler = scheduler + self.normalize = normalize + self.positive = positive + self.negative = negative + + def post_encode(self, samples): + cur_step = self.cur_step + + Unsampler = noise_nodes.Unsampler + + end_at_step = self.start_end_at_step + (self.end_end_at_step - self.start_end_at_step) * cur_step / self.total_step + end_at_step = int(end_at_step) + + logging.info(f"[Impact Pack] UnsamplerHook: end_at_step = {end_at_step}") + + # inj noise + mask = None + if 'noise_mask' in samples: + mask = samples['noise_mask'] + + samples = Unsampler().unsampler(self.model, self.cfg, self.sampler_name, self.steps, end_at_step, + self.scheduler, self.normalize, self.positive, self.negative, samples)[0] + + if mask is not None: + samples['noise_mask'] = mask + + return samples + + +class InjectNoiseHookForDetailer(DetailerHook): + def __init__(self, source, seed, start_strength, end_strength, from_start=False): + super().__init__() + self.source = source + self.seed = seed + self.start_strength = start_strength + self.end_strength = end_strength + self.from_start = from_start + + def inject_noise(self, samples): + cur_step = self.cur_step if self.from_start else self.cur_step - 1 + total_step = self.total_step if self.from_start else self.total_step - 1 + + size = samples['samples'].shape + seed = cur_step + self.seed + cur_step + + if "BNK_NoisyLatentImage" in nodes.NODE_CLASS_MAPPINGS and "BNK_InjectNoise" in nodes.NODE_CLASS_MAPPINGS: + NoisyLatentImage = nodes.NODE_CLASS_MAPPINGS["BNK_NoisyLatentImage"] + InjectNoise = nodes.NODE_CLASS_MAPPINGS["BNK_InjectNoise"] + else: + utils.try_install_custom_node('https://github.com/BlenderNeko/ComfyUI_Noise', + "To use 'NoiseInjectionDetailerHookProvider', 'ComfyUI Noise' extension is required.") + raise Exception("'BNK_NoisyLatentImage', 'BNK_InjectNoise' nodes are not installed.") + + noise = NoisyLatentImage().create_noisy_latents(self.source, seed, size[3] * 8, size[2] * 8, size[0])[0] + + # inj noise + mask = None + if 'noise_mask' in samples: + mask = samples['noise_mask'] + + strength = self.start_strength + (self.end_strength - self.start_strength) * cur_step / total_step + samples = InjectNoise().inject_noise(samples, strength, noise, mask)[0] + + if mask is not None: + samples['noise_mask'] = mask + + return samples + + def cycle_latent(self, latent): + if self.cur_step == 0 and not self.from_start: + return latent + else: + return self.inject_noise(latent) + + +class UnsamplerDetailerHook(DetailerHook): + def __init__(self, model, steps, start_end_at_step, end_end_at_step, cfg, sampler_name, + scheduler, normalize, positive, negative, from_start=False): + super().__init__() + self.model = model + self.cfg = cfg + self.sampler_name = sampler_name + self.steps = steps + self.start_end_at_step = start_end_at_step + self.end_end_at_step = end_end_at_step + self.scheduler = scheduler + self.normalize = normalize + self.positive = positive + self.negative = negative + self.from_start = from_start + + def unsample(self, samples): + cur_step = self.cur_step if self.from_start else self.cur_step - 1 + total_step = self.total_step if self.from_start else self.total_step - 1 + + Unsampler = noise_nodes.Unsampler + + end_at_step = self.start_end_at_step + (self.end_end_at_step - self.start_end_at_step) * cur_step / total_step + end_at_step = int(end_at_step) + + # inj noise + mask = None + if 'noise_mask' in samples: + mask = samples['noise_mask'] + + samples = Unsampler().unsampler(self.model, self.cfg, self.sampler_name, self.steps, end_at_step, + self.scheduler, self.normalize, self.positive, self.negative, samples)[0] + + if mask is not None: + samples['noise_mask'] = mask + + return samples + + def cycle_latent(self, latent): + if self.cur_step == 0 and not self.from_start: + return latent + else: + return self.unsample(latent) + + +class SEGSOrderedFilterDetailerHook(DetailerHook): + def __init__(self, target, order, take_start, take_count): + super().__init__() + self.target = target + self.order = order + self.take_start = take_start + self.take_count = take_count + + def post_detection(self, segs): + return segs_nodes.SEGSOrderedFilter().doit(segs, self.target, self.order, self.take_start, self.take_count)[0] + + +class SEGSRangeFilterDetailerHook(DetailerHook): + def __init__(self, target, mode, min_value, max_value): + super().__init__() + self.target = target + self.mode = mode + self.min_value = min_value + self.max_value = max_value + + def post_detection(self, segs): + return segs_nodes.SEGSRangeFilter().doit(segs, self.target, self.mode, self.min_value, self.max_value)[0] + + +class SEGSLabelFilterDetailerHook(DetailerHook): + def __init__(self, labels): + super().__init__() + self.labels = labels + + def post_detection(self, segs): + return segs_nodes.SEGSLabelFilter().doit(segs, "", self.labels)[0] + + +class LamaRemoverDetailerHook(DetailerHook): + def __init__(self, mask_threshold, gaussblur_radius, skip_sampling): + super().__init__() + self.mask_threshold = mask_threshold + self.gaussblur_radius = gaussblur_radius + self.skip_sampling = skip_sampling + + def post_upscale(self, img, mask=None): + if "LamaRemover" in nodes.NODE_CLASS_MAPPINGS: + lama_remover_obj = nodes.NODE_CLASS_MAPPINGS['LamaRemover']() + else: + utils.try_install_custom_node('https://github.com/Layer-norm/comfyui-lama-remover', + "To use 'LAMARemoverDetailerHookProvider', 'comfyui-lama-remover' nodepack is required.") + raise Exception("'LamaRemover' node is not installed.") + + return lama_remover_obj.lama_remover(img, masks=mask, mask_threshold=self.mask_threshold, gaussblur_radius=self.gaussblur_radius, invert_mask=False)[0] + + def get_skip_sampling(self): + return self.skip_sampling + + +class PreviewDetailerHook(DetailerHook): + def __init__(self, node_id, quality): + super().__init__() + self.node_id = node_id + self.quality = quality + + async def send(self, image): + if len(image) > 0: + image = image[0].unsqueeze(0) + img = utils.tensor2pil(image) + + temp_path = os.path.join(folder_paths.get_temp_directory(), 'pvhook') + + if not os.path.exists(temp_path): + os.makedirs(temp_path) + + fullpath = os.path.join(temp_path, f"{self.node_id}.webp") + img.save(fullpath, quality=self.quality) + + item = { + "filename": f"{self.node_id}.webp", + "subfolder": 'pvhook', + "type": 'temp' + } + + PromptServer.instance.send_sync("impact-preview", {'node_id': self.node_id, 'item': item}) + + def post_paste(self, image): + loop = asyncio.get_running_loop() + loop.create_task(self.send(image)) + return image + + +class BlackPatchRetryHook(DetailerHook): + def __init__(self, mean_thresh, var_thresh): + super().__init__() + assert 0 <= mean_thresh <= 255 and 0 <= var_thresh <= 255 + self.mean_thresh = mean_thresh + self.var_thresh = var_thresh + + def should_retry_patch(self, cropped_region): + # remove the first dimension (batch_size) + if cropped_region.ndim == 4: + assert cropped_region.shape[0] == 1 + cropped_region = cropped_region.squeeze(0) + + # turn image to grayscape + if cropped_region.ndim == 3: + assert cropped_region.shape[-1] in [1, 3] + cropped_region = cropped_region.mean(axis=-1) # simple average grayscale + + mean = cropped_region.mean() + var = cropped_region.var() + + return (mean <= self.mean_thresh/255) and (var <= self.var_thresh/255) \ No newline at end of file diff --git a/comfyui-impact-pack/modules/impact/impact_onnx.py b/comfyui-impact-pack/modules/impact/impact_onnx.py new file mode 100644 index 0000000000000000000000000000000000000000..77c859fdcb88f39261f09032f63f701345abcdd6 --- /dev/null +++ b/comfyui-impact-pack/modules/impact/impact_onnx.py @@ -0,0 +1,39 @@ +import impact.additional_dependencies +import numpy as np +from impact import utils +import logging + +impact.additional_dependencies.ensure_onnx_package() + +try: + import onnxruntime + + def onnx_inference(image, onnx_model): + # prepare image + pil = utils.tensor2pil(image) + image = np.ascontiguousarray(pil) + image = image[:, :, ::-1] # to BGR image + image = image.astype(np.float32) + image -= [103.939, 116.779, 123.68] # 'caffe' mode image preprocessing + + # do detection + onnx_model = onnxruntime.InferenceSession(onnx_model, providers=["CPUExecutionProvider"]) + outputs = onnx_model.run( + [s_i.name for s_i in onnx_model.get_outputs()], + {onnx_model.get_inputs()[0].name: np.expand_dims(image, axis=0)}, + ) + + labels = [op for op in outputs if op.dtype == "int32"][0] + scores = [op for op in outputs if isinstance(op[0][0], np.float32)][0] + boxes = [op for op in outputs if isinstance(op[0][0], np.ndarray)][0] + + # filter-out useless item + idx = np.where(labels[0] == -1)[0][0] + + labels = labels[0][:idx] + scores = scores[0][:idx] + boxes = boxes[0][:idx].astype(np.uint32) + + return labels, scores, boxes +except Exception: + logging.error("[Impact Pack] ComfyUI-Impact-Pack: 'onnxruntime' package doesn't support 'python 3.11', yet.\t{e}") diff --git a/comfyui-impact-pack/modules/impact/impact_pack.py b/comfyui-impact-pack/modules/impact/impact_pack.py new file mode 100644 index 0000000000000000000000000000000000000000..9e25c0bac165690a8d79617d3031fca35a8fa60a --- /dev/null +++ b/comfyui-impact-pack/modules/impact/impact_pack.py @@ -0,0 +1,2767 @@ +import os +import sys + +import comfy.samplers +import comfy.sd +import warnings +from segment_anything import sam_model_registry +from io import BytesIO +import piexif +import zipfile +import re + +import impact.wildcards + +import impact.core as core +from impact.core import SEG +from impact.config import latent_letter_path +from nodes import MAX_RESOLUTION +from PIL import Image, ImageOps +import numpy as np +import hashlib +import json +import safetensors.torch +from PIL.PngImagePlugin import PngInfo +import comfy.model_management +import base64 +import impact.wildcards as wildcards +from . import hooks +from . import utils +import inspect +import folder_paths +import torch +import nodes +import cv2 +import logging + + +try: + from comfy_extras import nodes_differential_diffusion +except Exception: + logging.warning("\n#############################################\n[Impact Pack] ComfyUI is an outdated version.\n#############################################\n") + raise Exception("[Impact Pack] ComfyUI is an outdated version.") + + +warnings.filterwarnings('ignore', category=UserWarning, message='TypedStorage is deprecated') + +model_path = folder_paths.models_dir + + +# folder_paths.supported_pt_extensions +utils.add_folder_path_and_extensions("sams", [os.path.join(model_path, "sams")], folder_paths.supported_pt_extensions) +utils.add_folder_path_and_extensions("onnx", [os.path.join(model_path, "onnx")], {'.onnx'}) + + +# Nodes +class ONNXDetectorProvider: + @classmethod + def INPUT_TYPES(s): + return {"required": {"model_name": (folder_paths.get_filename_list("onnx"), )}} + + RETURN_TYPES = ("BBOX_DETECTOR", ) + FUNCTION = "load_onnx" + + CATEGORY = "ImpactPack" + + def load_onnx(self, model_name): + model = folder_paths.get_full_path("onnx", model_name) + return (core.ONNXDetector(model), ) + + +class CLIPSegDetectorProvider: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "text": ("STRING", {"multiline": False, "tooltip": "Enter the targets to be detected, separated by commas"}), + "blur": ("FLOAT", {"min": 0, "max": 15, "step": 0.1, "default": 7, "tooltip": "Blurs the detected mask"}), + "threshold": ("FLOAT", {"min": 0, "max": 1, "step": 0.05, "default": 0.4, "tooltip": "Detects only areas that are certain above the threshold."}), + "dilation_factor": ("INT", {"min": 0, "max": 10, "step": 1, "default": 4, "tooltip": "Dilates the detected mask."}), + } + } + + RETURN_TYPES = ("BBOX_DETECTOR", ) + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Util" + + DESCRIPTION = "Provides a detection function using CLIPSeg, which generates masks based on text prompts.\nTo use this node, the CLIPSeg custom node must be installed." + + def doit(self, text, blur, threshold, dilation_factor): + if "CLIPSeg" in nodes.NODE_CLASS_MAPPINGS: + return (core.BBoxDetectorBasedOnCLIPSeg(text, blur, threshold, dilation_factor), ) + else: + logging.error("[ERROR] CLIPSegToBboxDetector: CLIPSeg custom node isn't installed. You must install biegert/ComfyUI-CLIPSeg extension to use this node.") + raise Exception("[ERROR] CLIPSegToBboxDetector: CLIPSeg custom node isn't installed. You must install biegert/ComfyUI-CLIPSeg extension to use this node.") + + +sam2_config_table = { + 'sam2.1_hiera_base_plus.pt': 'configs/sam2.1/sam2.1_hiera_b+.yaml', + 'sam2.1_hiera_large.pt': 'configs/sam2.1/sam2.1_hiera_l.yaml', + 'sam2.1_hiera_small.pt': 'configs/sam2.1/sam2.1_hiera_s.yaml', + 'sam2.1_hiera_tiny.pt': 'configs/sam2.1/sam2.1_hiera_t.yaml', + 'sam2_hiera_tiny.pt': 'configs/sam2/sam2_hiera_t.yaml', + 'sam2_hiera_small.pt': 'configs/sam2/sam2_hiera_s.yaml', + 'sam2_hiera_base_plus.pt': 'configs/sam2/sam2_hiera_b+.yaml', + 'sam2_hiera_large.pt': 'configs/sam2/sam2_hiera_l.yaml' +} + +class SAMLoader: + @classmethod + def INPUT_TYPES(cls): + models = [x for x in folder_paths.get_filename_list("sams") if 'hq' not in x and (x.endswith('.pt') or x.endswith('.pth') or x.endswith('.safetensors'))] + + if 'ESAM_ModelLoader_Zho' in nodes.NODE_CLASS_MAPPINGS: + models.append('ESAM') + + return { + "required": { + "model_name": (models, {"tooltip": "The detection accuracy varies depending on the SAM model. ESAM can only be used if ComfyUI-YoloWorld-EfficientSAM is installed."}), + "device_mode": (["AUTO", "Prefer GPU", "CPU"], {"tooltip": "AUTO: Only applicable when a GPU is available. It temporarily loads the SAM_MODEL into VRAM only when the detection function is used.\n" + "Prefer GPU: Tries to keep the SAM_MODEL on the GPU whenever possible. This can be used when there is sufficient VRAM available.\n" + "CPU: Always loads only on the CPU."}), + } + } + + RETURN_TYPES = ("SAM_MODEL", ) + FUNCTION = "load_model" + + CATEGORY = "ImpactPack" + + DESCRIPTION = "Load the SAM (Segment Anything) model. This can be used in places that utilize SAM detection functionality, such as SAMDetector or SimpleDetector.\nThe SAM detection functionality in Impact Pack must use the SAM_MODEL loaded through this node." + + def load_model(self, model_name, device_mode="auto"): + if model_name == 'ESAM': + if 'ESAM_ModelLoader_Zho' not in nodes.NODE_CLASS_MAPPINGS: + utils.try_install_custom_node('https://github.com/ZHO-ZHO-ZHO/ComfyUI-YoloWorld-EfficientSAM', + "To use 'ESAM' model, 'ComfyUI-YoloWorld-EfficientSAM' extension is required.") + raise Exception("'ComfyUI-YoloWorld-EfficientSAM' node isn't installed.") + + esam_loader = nodes.NODE_CLASS_MAPPINGS['ESAM_ModelLoader_Zho']() + + if device_mode == 'CPU': + esam = esam_loader.load_esam_model('CPU')[0] + else: + device_mode = 'CUDA' + esam = esam_loader.load_esam_model('CUDA')[0] + + sam_obj = core.ESAMWrapper(esam, device_mode) + esam.sam_wrapper = sam_obj + + logging.info(f"Loads EfficientSAM model: (device:{device_mode})") + return (esam, ) + elif model_name in sam2_config_table: + model_kind = 'sam2' + config = sam2_config_table[model_name] + modelname = folder_paths.get_full_path("sams", model_name) + else: + modelname = folder_paths.get_full_path("sams", model_name) + + if 'vit_h' in model_name: + model_kind = 'vit_h' + elif 'vit_l' in model_name: + model_kind = 'vit_l' + else: + model_kind = 'vit_b' + + sam = sam_model_registry[model_kind](checkpoint=modelname) + + size = os.path.getsize(modelname) + safe_to = core.SafeToGPU(size) + + # Unless user explicitly wants to use CPU, we use GPU + device = comfy.model_management.get_torch_device() if device_mode == "Prefer GPU" else "CPU" + + if device_mode == "Prefer GPU": + safe_to.to_device(sam, device) + + is_auto_mode = device_mode == "AUTO" + + if model_kind == 'sam2': + sam = core.SAM2Wrapper(config=config, modelname=modelname, is_auto_mode=is_auto_mode, safe_to_gpu=safe_to, device_mode=device_mode) + logging.info(f"Loads SAM2 model: {modelname} (device:{device_mode})") + else: + sam_obj = core.SAMWrapper(sam, is_auto_mode=is_auto_mode, safe_to_gpu=safe_to) + sam.sam_wrapper = sam_obj + logging.info(f"Loads SAM model: {modelname} (device:{device_mode})") + + return (sam, ) + + +class ONNXDetectorForEach: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "onnx_detector": ("ONNX_DETECTOR",), + "image": ("IMAGE",), + "threshold": ("FLOAT", {"default": 0.8, "min": 0.0, "max": 1.0, "step": 0.01}), + "dilation": ("INT", {"default": 10, "min": -512, "max": 512, "step": 1}), + "crop_factor": ("FLOAT", {"default": 1.0, "min": 0.5, "max": 100, "step": 0.1}), + "drop_size": ("INT", {"min": 1, "max": MAX_RESOLUTION, "step": 1, "default": 10}), + } + } + + RETURN_TYPES = ("SEGS", ) + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Detector" + + OUTPUT_NODE = True + + def doit(self, onnx_detector, image, threshold, dilation, crop_factor, drop_size): + segs = onnx_detector.detect(image, threshold, dilation, crop_factor, drop_size) + return (segs, ) + + +class DetailerForEach: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "image": ("IMAGE", ), + "segs": ("SEGS", ), + "model": ("MODEL", {"tooltip": "If the `ImpactDummyInput` is connected to the model, the inference stage is skipped."}), + "clip": ("CLIP",), + "vae": ("VAE",), + "guide_size": ("FLOAT", {"default": 512, "min": 64, "max": nodes.MAX_RESOLUTION, "step": 8}), + "guide_size_for": ("BOOLEAN", {"default": True, "label_on": "bbox", "label_off": "crop_region"}), + "max_size": ("FLOAT", {"default": 1024, "min": 64, "max": nodes.MAX_RESOLUTION, "step": 8}), + "seed": ("INT", {"default": 0, "min": 0, "max": 0xffffffffffffffff}), + "steps": ("INT", {"default": 20, "min": 1, "max": 10000}), + "cfg": ("FLOAT", {"default": 8.0, "min": 0.0, "max": 100.0}), + "sampler_name": (comfy.samplers.KSampler.SAMPLERS,), + "scheduler": (core.get_schedulers(),), + "positive": ("CONDITIONING",), + "negative": ("CONDITIONING",), + "denoise": ("FLOAT", {"default": 0.5, "min": 0.0001, "max": 1.0, "step": 0.01}), + "feather": ("INT", {"default": 5, "min": 0, "max": 100, "step": 1}), + "noise_mask": ("BOOLEAN", {"default": True, "label_on": "enabled", "label_off": "disabled"}), + "force_inpaint": ("BOOLEAN", {"default": True, "label_on": "enabled", "label_off": "disabled"}), + "wildcard": ("STRING", {"multiline": True, "dynamicPrompts": False}), + + "cycle": ("INT", {"default": 1, "min": 1, "max": 10, "step": 1}), + }, + "optional": { + "detailer_hook": ("DETAILER_HOOK",), + "inpaint_model": ("BOOLEAN", {"default": False, "label_on": "enabled", "label_off": "disabled"}), + "noise_mask_feather": ("INT", {"default": 20, "min": 0, "max": 100, "step": 1}), + "scheduler_func_opt": ("SCHEDULER_FUNC",), + "tiled_encode": ("BOOLEAN", {"default": False, "label_on": "enabled", "label_off": "disabled"}), + "tiled_decode": ("BOOLEAN", {"default": False, "label_on": "enabled", "label_off": "disabled"}), + } + } + + RETURN_TYPES = ("IMAGE", ) + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Detailer" + + DESCRIPTION = "It enhances details by inpainting each region within the detected area bundle (SEGS) after enlarging them based on the guide size." + + @staticmethod + def get_core_module(): + return core + + @staticmethod + def do_detail(image, segs, model, clip, vae, guide_size, guide_size_for_bbox, max_size, seed, steps, cfg, sampler_name, scheduler, + positive, negative, denoise, feather, noise_mask, force_inpaint, wildcard_opt=None, detailer_hook=None, + refiner_ratio=None, refiner_model=None, refiner_clip=None, refiner_positive=None, refiner_negative=None, + cycle=1, inpaint_model=False, noise_mask_feather=0, scheduler_func_opt=None, tiled_encode=False, tiled_decode=False): + + if len(image) > 1: + raise Exception('[Impact Pack] ERROR: DetailerForEach does not allow image batches.\nPlease refer to https://github.com/ltdrdata/ComfyUI-extension-tutorials/blob/Main/ComfyUI-Impact-Pack/tutorial/batching-detailer.md for more information.') + + image = image.clone() + enhanced_alpha_list = [] + enhanced_list = [] + cropped_list = [] + cnet_pil_list = [] + + segs = core.segs_scale_match(segs, image.shape) + new_segs = [] + + wildcard_concat_mode = None + if wildcard_opt is not None: + if wildcard_opt.startswith('[CONCAT]'): + wildcard_concat_mode = 'concat' + wildcard_opt = wildcard_opt[8:] + wmode, wildcard_chooser = wildcards.process_wildcard_for_segs(wildcard_opt) + else: + wmode, wildcard_chooser = None, None + + if wmode in ['ASC', 'DSC', 'ASC-SIZE', 'DSC-SIZE']: + if wmode == 'ASC': + ordered_segs = sorted(segs[1], key=lambda x: (x.bbox[0], x.bbox[1])) + elif wmode == 'DSC': + ordered_segs = sorted(segs[1], key=lambda x: (x.bbox[0], x.bbox[1]), reverse=True) + elif wmode == 'ASC-SIZE': + ordered_segs = sorted(segs[1], key=lambda x: (x.bbox[2]-x.bbox[0]) * (x.bbox[3]-x.bbox[1])) + + else: # wmode == 'DSC-SIZE' + ordered_segs = sorted(segs[1], key=lambda x: (x.bbox[2]-x.bbox[0]) * (x.bbox[3]-x.bbox[1]), reverse=True) + else: + ordered_segs = segs[1] + + if not (isinstance(model, str) and model == "DUMMY") and noise_mask_feather > 0 and 'denoise_mask_function' not in model.model_options: + model = nodes_differential_diffusion.DifferentialDiffusion().execute(model)[0] + + for i, seg in enumerate(ordered_segs): + cropped_image = utils.crop_ndarray4(image.cpu().numpy(), seg.crop_region) # Never use seg.cropped_image to handle overlapping area + cropped_image = utils.to_tensor(cropped_image) + mask = utils.to_tensor(seg.cropped_mask) + mask = utils.tensor_gaussian_blur_mask(mask, feather) + + is_mask_all_zeros = (seg.cropped_mask == 0).all().item() + if is_mask_all_zeros: + logging.info("Detailer: segment skip [empty mask]") + continue + + if noise_mask: + cropped_mask = seg.cropped_mask + else: + cropped_mask = None + + if wildcard_chooser is not None and wmode != "LAB": + seg_seed, wildcard_item = wildcard_chooser.get(seg) + elif wildcard_chooser is not None and wmode == "LAB": + seg_seed, wildcard_item = None, wildcard_chooser.get(seg) + else: + seg_seed, wildcard_item = None, None + + seg_seed = seed + i if seg_seed is None else seg_seed + + if not isinstance(positive, str): + cropped_positive = [ + [condition, { + k: core.crop_condition_mask(v, image, seg.crop_region) if k == "mask" else v + for k, v in details.items() + }] + for condition, details in positive + ] + else: + cropped_positive = positive + + if not isinstance(negative, str): + cropped_negative = [ + [condition, { + k: core.crop_condition_mask(v, image, seg.crop_region) if k == "mask" else v + for k, v in details.items() + }] + for condition, details in negative + ] + else: + # Negative Conditioning is placeholder such as FLUX.1 + cropped_negative = negative + + if wildcard_item and wildcard_item.strip() == '[SKIP]': + continue + + if wildcard_item and wildcard_item.strip() == '[STOP]': + break + + orig_cropped_image = cropped_image.clone() + if not (isinstance(model, str) and model == "DUMMY"): + enhanced_image, cnet_pils = core.enhance_detail(cropped_image, model, clip, vae, guide_size, guide_size_for_bbox, max_size, + seg.bbox, seg_seed, steps, cfg, sampler_name, scheduler, + cropped_positive, cropped_negative, denoise, cropped_mask, force_inpaint, + wildcard_opt=wildcard_item, wildcard_opt_concat_mode=wildcard_concat_mode, + detailer_hook=detailer_hook, + refiner_ratio=refiner_ratio, refiner_model=refiner_model, + refiner_clip=refiner_clip, refiner_positive=refiner_positive, + refiner_negative=refiner_negative, control_net_wrapper=seg.control_net_wrapper, + cycle=cycle, inpaint_model=inpaint_model, noise_mask_feather=noise_mask_feather, + scheduler_func=scheduler_func_opt, vae_tiled_encode=tiled_encode, + vae_tiled_decode=tiled_decode) + else: + enhanced_image = cropped_image + cnet_pils = None + + if cnet_pils is not None: + cnet_pil_list.extend(cnet_pils) + + if enhanced_image is not None: + # don't latent composite-> converting to latent caused poor quality + # use image paste + image = image.cpu() + enhanced_image = enhanced_image.cpu() + utils.tensor_paste(image, enhanced_image, (seg.crop_region[0], seg.crop_region[1]), mask) # this code affecting to `cropped_image`. + enhanced_list.append(enhanced_image) + + if detailer_hook is not None: + image = detailer_hook.post_paste(image) + + if enhanced_image is not None: + # Convert enhanced_pil_alpha to RGBA mode + enhanced_image_alpha = utils.tensor_convert_rgba(enhanced_image) + new_seg_image = enhanced_image.numpy() # alpha should not be applied to seg_image + + # Apply the mask + mask = utils.tensor_resize(mask, *utils.tensor_get_size(enhanced_image)) + utils.tensor_putalpha(enhanced_image_alpha, mask) + enhanced_alpha_list.append(enhanced_image_alpha) + else: + new_seg_image = None + + cropped_list.append(orig_cropped_image) # NOTE: Don't use `cropped_image` + + new_seg = SEG(new_seg_image, seg.cropped_mask, seg.confidence, seg.crop_region, seg.bbox, seg.label, seg.control_net_wrapper) + new_segs.append(new_seg) + + image_tensor = utils.tensor_convert_rgb(image) + + cropped_list.sort(key=lambda x: x.shape, reverse=True) + enhanced_list.sort(key=lambda x: x.shape, reverse=True) + enhanced_alpha_list.sort(key=lambda x: x.shape, reverse=True) + + return image_tensor, cropped_list, enhanced_list, enhanced_alpha_list, cnet_pil_list, (segs[0], new_segs) + + def doit(self, image, segs, model, clip, vae, guide_size, guide_size_for, max_size, seed, steps, cfg, sampler_name, + scheduler, positive, negative, denoise, feather, noise_mask, force_inpaint, wildcard, cycle=1, + detailer_hook=None, inpaint_model=False, noise_mask_feather=0, scheduler_func_opt=None, + tiled_encode=False, tiled_decode=False): + + enhanced_img, *_ = \ + DetailerForEach.do_detail(image, segs, model, clip, vae, guide_size, guide_size_for, max_size, seed, steps, + cfg, sampler_name, scheduler, positive, negative, denoise, feather, noise_mask, + force_inpaint, wildcard, detailer_hook, + cycle=cycle, inpaint_model=inpaint_model, noise_mask_feather=noise_mask_feather, + scheduler_func_opt=scheduler_func_opt, tiled_encode=tiled_encode, tiled_decode=tiled_decode) + + return (enhanced_img, ) + + +class DetailerForEachAutoRetry: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "image": ("IMAGE", ), + "segs": ("SEGS", ), + "model": ("MODEL", {"tooltip": "If the `ImpactDummyInput` is connected to the model, the inference stage is skipped."}), + "clip": ("CLIP",), + "vae": ("VAE",), + "guide_size": ("FLOAT", {"default": 512, "min": 64, "max": nodes.MAX_RESOLUTION, "step": 8}), + "guide_size_for": ("BOOLEAN", {"default": True, "label_on": "bbox", "label_off": "crop_region"}), + "max_size": ("FLOAT", {"default": 1024, "min": 64, "max": nodes.MAX_RESOLUTION, "step": 8}), + "seed": ("INT", {"default": 0, "min": 0, "max": 0xffffffffffffffff}), + "steps": ("INT", {"default": 20, "min": 1, "max": 10000}), + "cfg": ("FLOAT", {"default": 8.0, "min": 0.0, "max": 100.0}), + "sampler_name": (comfy.samplers.KSampler.SAMPLERS,), + "scheduler": (core.get_schedulers(),), + "positive": ("CONDITIONING",), + "negative": ("CONDITIONING",), + "denoise": ("FLOAT", {"default": 0.5, "min": 0.0001, "max": 1.0, "step": 0.01}), + "feather": ("INT", {"default": 5, "min": 0, "max": 100, "step": 1}), + "noise_mask": ("BOOLEAN", {"default": True, "label_on": "enabled", "label_off": "disabled"}), + "force_inpaint": ("BOOLEAN", {"default": True, "label_on": "enabled", "label_off": "disabled"}), + "wildcard": ("STRING", {"multiline": True, "dynamicPrompts": False}), + + "cycle": ("INT", {"default": 1, "min": 1, "max": 10, "step": 1}), + "max_retries": ("INT", {"default": 1, "min": 1, "max": 10, "step": 1}), + }, + "optional": { + "detailer_hook": ("DETAILER_HOOK",), + "inpaint_model": ("BOOLEAN", {"default": False, "label_on": "enabled", "label_off": "disabled"}), + "noise_mask_feather": ("INT", {"default": 20, "min": 0, "max": 100, "step": 1}), + "scheduler_func_opt": ("SCHEDULER_FUNC",), + "tiled_encode": ("BOOLEAN", {"default": False, "label_on": "enabled", "label_off": "disabled"}), + "tiled_decode": ("BOOLEAN", {"default": False, "label_on": "enabled", "label_off": "disabled"}), + } + } + + RETURN_TYPES = ("IMAGE", ) + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Detailer" + + DESCRIPTION = "It enhances details by inpainting each region within the detected area bundle (SEGS) after enlarging them based on the guide size." + + @staticmethod + def get_core_module(): + return core + + @staticmethod + def do_detail(image, segs, model, clip, vae, guide_size, guide_size_for_bbox, max_size, seed, steps, cfg, sampler_name, scheduler, + positive, negative, denoise, feather, noise_mask, force_inpaint, wildcard_opt=None, detailer_hook=None, + refiner_ratio=None, refiner_model=None, refiner_clip=None, refiner_positive=None, refiner_negative=None, + cycle=1, inpaint_model=False, noise_mask_feather=0, scheduler_func_opt=None, tiled_encode=False, tiled_decode=False, max_retries=1): + + if len(image) > 1: + raise Exception('[Impact Pack] ERROR: DetailerForEach does not allow image batches.\nPlease refer to https://github.com/ltdrdata/ComfyUI-extension-tutorials/blob/Main/ComfyUI-Impact-Pack/tutorial/batching-detailer.md for more information.') + + image = image.clone() + enhanced_alpha_list = [] + enhanced_list = [] + cropped_list = [] + cnet_pil_list = [] + + segs = core.segs_scale_match(segs, image.shape) + new_segs = [] + + wildcard_concat_mode = None + if wildcard_opt is not None: + if wildcard_opt.startswith('[CONCAT]'): + wildcard_concat_mode = 'concat' + wildcard_opt = wildcard_opt[8:] + wmode, wildcard_chooser = wildcards.process_wildcard_for_segs(wildcard_opt) + else: + wmode, wildcard_chooser = None, None + + if wmode in ['ASC', 'DSC', 'ASC-SIZE', 'DSC-SIZE']: + if wmode == 'ASC': + ordered_segs = sorted(segs[1], key=lambda x: (x.bbox[0], x.bbox[1])) + elif wmode == 'DSC': + ordered_segs = sorted(segs[1], key=lambda x: (x.bbox[0], x.bbox[1]), reverse=True) + elif wmode == 'ASC-SIZE': + ordered_segs = sorted(segs[1], key=lambda x: (x.bbox[2]-x.bbox[0]) * (x.bbox[3]-x.bbox[1])) + + else: # wmode == 'DSC-SIZE' + ordered_segs = sorted(segs[1], key=lambda x: (x.bbox[2]-x.bbox[0]) * (x.bbox[3]-x.bbox[1]), reverse=True) + else: + ordered_segs = segs[1] + + if not (isinstance(model, str) and model == "DUMMY") and noise_mask_feather > 0 and 'denoise_mask_function' not in model.model_options: + model = nodes_differential_diffusion.DifferentialDiffusion().execute(model)[0] + + for i, seg in enumerate(ordered_segs): + cropped_image = utils.crop_ndarray4(image.cpu().numpy(), seg.crop_region) # Never use seg.cropped_image to handle overlapping area + cropped_image = utils.to_tensor(cropped_image) + mask = utils.to_tensor(seg.cropped_mask) + mask = utils.tensor_gaussian_blur_mask(mask, feather) + + is_mask_all_zeros = (seg.cropped_mask == 0).all().item() + if is_mask_all_zeros: + print("Detailer: segment skip [empty mask]") + continue + + if noise_mask: + cropped_mask = seg.cropped_mask + else: + cropped_mask = None + + if wildcard_chooser is not None and wmode != "LAB": + seg_seed, wildcard_item = wildcard_chooser.get(seg) + elif wildcard_chooser is not None and wmode == "LAB": + seg_seed, wildcard_item = None, wildcard_chooser.get(seg) + else: + seg_seed, wildcard_item = None, None + + seg_seed = seed + i if seg_seed is None else seg_seed + + if not isinstance(positive, str): + cropped_positive = [ + [condition, { + k: core.crop_condition_mask(v, image, seg.crop_region) if k == "mask" else v + for k, v in details.items() + }] + for condition, details in positive + ] + else: + cropped_positive = positive + + if not isinstance(negative, str): + cropped_negative = [ + [condition, { + k: core.crop_condition_mask(v, image, seg.crop_region) if k == "mask" else v + for k, v in details.items() + }] + for condition, details in negative + ] + else: + # Negative Conditioning is placeholder such as FLUX.1 + cropped_negative = negative + + if wildcard_item and wildcard_item.strip() == '[SKIP]': + continue + + if wildcard_item and wildcard_item.strip() == '[STOP]': + break + + orig_cropped_image = cropped_image.clone() + + # initialize + enhanced_image = cropped_image + cnet_pils = None + + if not (isinstance(model, str) and model == "DUMMY"): + for retry in range(max_retries): + enhanced_image, cnet_pils = core.enhance_detail(cropped_image, model, clip, vae, guide_size, guide_size_for_bbox, max_size, + seg.bbox, seg_seed + retry, steps, cfg, sampler_name, scheduler, + cropped_positive, cropped_negative, denoise, cropped_mask, force_inpaint, + wildcard_opt=wildcard_item, wildcard_opt_concat_mode=wildcard_concat_mode, + detailer_hook=detailer_hook, + refiner_ratio=refiner_ratio, refiner_model=refiner_model, + refiner_clip=refiner_clip, refiner_positive=refiner_positive, + refiner_negative=refiner_negative, control_net_wrapper=seg.control_net_wrapper, + cycle=cycle, inpaint_model=inpaint_model, noise_mask_feather=noise_mask_feather, + scheduler_func=scheduler_func_opt, vae_tiled_encode=tiled_encode, + vae_tiled_decode=tiled_decode) + + if detailer_hook is None or not detailer_hook.should_retry_patch(enhanced_image): + break + + if retry + 1 == max_retries: + raise Exception("Max retries reached") + else: + print("Detect bad patch, retrying...") + + if cnet_pils is not None: + cnet_pil_list.extend(cnet_pils) + + if enhanced_image is not None: + # don't latent composite-> converting to latent caused poor quality + # use image paste + image = image.cpu() + enhanced_image = enhanced_image.cpu() + utils.tensor_paste(image, enhanced_image, (seg.crop_region[0], seg.crop_region[1]), mask) # this code affecting to `cropped_image`. + enhanced_list.append(enhanced_image) + + if detailer_hook is not None: + image = detailer_hook.post_paste(image) + + if enhanced_image is not None: + # Convert enhanced_pil_alpha to RGBA mode + enhanced_image_alpha = utils.tensor_convert_rgba(enhanced_image) + new_seg_image = enhanced_image.numpy() # alpha should not be applied to seg_image + + # Apply the mask + mask = utils.tensor_resize(mask, *utils.tensor_get_size(enhanced_image)) + utils.tensor_putalpha(enhanced_image_alpha, mask) + enhanced_alpha_list.append(enhanced_image_alpha) + else: + new_seg_image = None + + cropped_list.append(orig_cropped_image) # NOTE: Don't use `cropped_image` + + new_seg = SEG(new_seg_image, seg.cropped_mask, seg.confidence, seg.crop_region, seg.bbox, seg.label, seg.control_net_wrapper) + new_segs.append(new_seg) + + image_tensor = utils.tensor_convert_rgb(image) + + cropped_list.sort(key=lambda x: x.shape, reverse=True) + enhanced_list.sort(key=lambda x: x.shape, reverse=True) + enhanced_alpha_list.sort(key=lambda x: x.shape, reverse=True) + + return image_tensor, cropped_list, enhanced_list, enhanced_alpha_list, cnet_pil_list, (segs[0], new_segs) + + def doit(self, image, segs, model, clip, vae, guide_size, guide_size_for, max_size, seed, steps, cfg, sampler_name, + scheduler, positive, negative, denoise, feather, noise_mask, force_inpaint, wildcard, cycle=1, + detailer_hook=None, inpaint_model=False, noise_mask_feather=0, scheduler_func_opt=None, + tiled_encode=False, tiled_decode=False, max_retries=1): + + enhanced_img, *_ = \ + DetailerForEachAutoRetry.do_detail(image, segs, model, clip, vae, guide_size, guide_size_for, max_size, seed, steps, + cfg, sampler_name, scheduler, positive, negative, denoise, feather, noise_mask, + force_inpaint, wildcard, detailer_hook, + cycle=cycle, inpaint_model=inpaint_model, noise_mask_feather=noise_mask_feather, + scheduler_func_opt=scheduler_func_opt, tiled_encode=tiled_encode, tiled_decode=tiled_decode, max_retries=max_retries) + + return (enhanced_img, ) + + +class DetailerForEachPipe: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "image": ("IMAGE", ), + "segs": ("SEGS", ), + "guide_size": ("FLOAT", {"default": 512, "min": 64, "max": nodes.MAX_RESOLUTION, "step": 8}), + "guide_size_for": ("BOOLEAN", {"default": True, "label_on": "bbox", "label_off": "crop_region"}), + "max_size": ("FLOAT", {"default": 1024, "min": 64, "max": nodes.MAX_RESOLUTION, "step": 8}), + "seed": ("INT", {"default": 0, "min": 0, "max": 0xffffffffffffffff}), + "steps": ("INT", {"default": 20, "min": 1, "max": 10000}), + "cfg": ("FLOAT", {"default": 8.0, "min": 0.0, "max": 100.0}), + "sampler_name": (comfy.samplers.KSampler.SAMPLERS,), + "scheduler": (core.get_schedulers(),), + "denoise": ("FLOAT", {"default": 0.5, "min": 0.0001, "max": 1.0, "step": 0.01}), + "feather": ("INT", {"default": 5, "min": 0, "max": 100, "step": 1}), + "noise_mask": ("BOOLEAN", {"default": True, "label_on": "enabled", "label_off": "disabled"}), + "force_inpaint": ("BOOLEAN", {"default": True, "label_on": "enabled", "label_off": "disabled"}), + "basic_pipe": ("BASIC_PIPE", {"tooltip": "If the `ImpactDummyInput` is connected to the model in the basic_pipe, the inference stage is skipped."}), + "wildcard": ("STRING", {"multiline": True, "dynamicPrompts": False}), + "refiner_ratio": ("FLOAT", {"default": 0.2, "min": 0.0, "max": 1.0}), + + "cycle": ("INT", {"default": 1, "min": 1, "max": 10, "step": 1}), + }, + "optional": { + "detailer_hook": ("DETAILER_HOOK",), + "refiner_basic_pipe_opt": ("BASIC_PIPE",), + "inpaint_model": ("BOOLEAN", {"default": False, "label_on": "enabled", "label_off": "disabled"}), + "noise_mask_feather": ("INT", {"default": 20, "min": 0, "max": 100, "step": 1}), + "scheduler_func_opt": ("SCHEDULER_FUNC",), + "tiled_encode": ("BOOLEAN", {"default": False, "label_on": "enabled", "label_off": "disabled"}), + "tiled_decode": ("BOOLEAN", {"default": False, "label_on": "enabled", "label_off": "disabled"}), + } + } + + RETURN_TYPES = ("IMAGE", "SEGS", "BASIC_PIPE", "IMAGE") + RETURN_NAMES = ("image", "segs", "basic_pipe", "cnet_images") + OUTPUT_IS_LIST = (False, False, False, True) + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Detailer" + + DESCRIPTION = DetailerForEach.DESCRIPTION + + def doit(self, image, segs, guide_size, guide_size_for, max_size, seed, steps, cfg, sampler_name, scheduler, + denoise, feather, noise_mask, force_inpaint, basic_pipe, wildcard, + refiner_ratio=None, detailer_hook=None, refiner_basic_pipe_opt=None, + cycle=1, inpaint_model=False, noise_mask_feather=0, scheduler_func_opt=None, + tiled_encode=False, tiled_decode=False): + + if len(image) > 1: + raise Exception('[Impact Pack] ERROR: DetailerForEach does not allow image batches.\nPlease refer to https://github.com/ltdrdata/ComfyUI-extension-tutorials/blob/Main/ComfyUI-Impact-Pack/tutorial/batching-detailer.md for more information.') + + model, clip, vae, positive, negative = basic_pipe + + if refiner_basic_pipe_opt is None: + refiner_model, refiner_clip, refiner_positive, refiner_negative = None, None, None, None + else: + refiner_model, refiner_clip, _, refiner_positive, refiner_negative = refiner_basic_pipe_opt + + enhanced_img, cropped, cropped_enhanced, cropped_enhanced_alpha, cnet_pil_list, new_segs = \ + DetailerForEach.do_detail(image, segs, model, clip, vae, guide_size, guide_size_for, max_size, seed, steps, cfg, + sampler_name, scheduler, positive, negative, denoise, feather, noise_mask, + force_inpaint, wildcard, detailer_hook, + refiner_ratio=refiner_ratio, refiner_model=refiner_model, + refiner_clip=refiner_clip, refiner_positive=refiner_positive, refiner_negative=refiner_negative, + cycle=cycle, inpaint_model=inpaint_model, noise_mask_feather=noise_mask_feather, scheduler_func_opt=scheduler_func_opt, + tiled_encode=tiled_encode, tiled_decode=tiled_decode) + + # set fallback image + if len(cnet_pil_list) == 0: + cnet_pil_list = [utils.empty_pil_tensor()] + + return enhanced_img, new_segs, basic_pipe, cnet_pil_list + + +class FaceDetailer: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "image": ("IMAGE", ), + "model": ("MODEL", {"tooltip": "If the `ImpactDummyInput` is connected to the model, the inference stage is skipped."}), + "clip": ("CLIP",), + "vae": ("VAE",), + "guide_size": ("FLOAT", {"default": 512, "min": 64, "max": nodes.MAX_RESOLUTION, "step": 8}), + "guide_size_for": ("BOOLEAN", {"default": True, "label_on": "bbox", "label_off": "crop_region"}), + "max_size": ("FLOAT", {"default": 1024, "min": 64, "max": nodes.MAX_RESOLUTION, "step": 8}), + "seed": ("INT", {"default": 0, "min": 0, "max": 0xffffffffffffffff}), + "steps": ("INT", {"default": 20, "min": 1, "max": 10000}), + "cfg": ("FLOAT", {"default": 8.0, "min": 0.0, "max": 100.0}), + "sampler_name": (comfy.samplers.KSampler.SAMPLERS,), + "scheduler": (core.get_schedulers(),), + "positive": ("CONDITIONING",), + "negative": ("CONDITIONING",), + "denoise": ("FLOAT", {"default": 0.5, "min": 0.0001, "max": 1.0, "step": 0.01}), + "feather": ("INT", {"default": 5, "min": 0, "max": 100, "step": 1}), + "noise_mask": ("BOOLEAN", {"default": True, "label_on": "enabled", "label_off": "disabled"}), + "force_inpaint": ("BOOLEAN", {"default": True, "label_on": "enabled", "label_off": "disabled"}), + + "bbox_threshold": ("FLOAT", {"default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01}), + "bbox_dilation": ("INT", {"default": 10, "min": -512, "max": 512, "step": 1}), + "bbox_crop_factor": ("FLOAT", {"default": 3.0, "min": 1.0, "max": 10, "step": 0.1}), + + "sam_detection_hint": (["center-1", "horizontal-2", "vertical-2", "rect-4", "diamond-4", "mask-area", "mask-points", "mask-point-bbox", "none"],), + "sam_dilation": ("INT", {"default": 0, "min": -512, "max": 512, "step": 1}), + "sam_threshold": ("FLOAT", {"default": 0.93, "min": 0.0, "max": 1.0, "step": 0.01}), + "sam_bbox_expansion": ("INT", {"default": 0, "min": 0, "max": 1000, "step": 1}), + "sam_mask_hint_threshold": ("FLOAT", {"default": 0.7, "min": 0.0, "max": 1.0, "step": 0.01}), + "sam_mask_hint_use_negative": (["False", "Small", "Outter"],), + + "drop_size": ("INT", {"min": 1, "max": MAX_RESOLUTION, "step": 1, "default": 10}), + + "bbox_detector": ("BBOX_DETECTOR", ), + "wildcard": ("STRING", {"multiline": True, "dynamicPrompts": False}), + + "cycle": ("INT", {"default": 1, "min": 1, "max": 10, "step": 1}), + }, + "optional": { + "sam_model_opt": ("SAM_MODEL", ), + "segm_detector_opt": ("SEGM_DETECTOR", ), + "detailer_hook": ("DETAILER_HOOK",), + "inpaint_model": ("BOOLEAN", {"default": False, "label_on": "enabled", "label_off": "disabled"}), + "noise_mask_feather": ("INT", {"default": 20, "min": 0, "max": 100, "step": 1}), + "scheduler_func_opt": ("SCHEDULER_FUNC",), + "tiled_encode": ("BOOLEAN", {"default": False, "label_on": "enabled", "label_off": "disabled"}), + "tiled_decode": ("BOOLEAN", {"default": False, "label_on": "enabled", "label_off": "disabled"}), + }} + + RETURN_TYPES = ("IMAGE", "IMAGE", "IMAGE", "MASK", "DETAILER_PIPE", "IMAGE") + RETURN_NAMES = ("image", "cropped_refined", "cropped_enhanced_alpha", "mask", "detailer_pipe", "cnet_images") + OUTPUT_IS_LIST = (False, True, True, False, False, True) + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Simple" + + DESCRIPTION = "This node enhances details by automatically detecting specific objects in the input image using detection models (bbox, segm, sam) and regenerating the image by enlarging the detected area based on the guide size.\nAlthough this node is specialized to simplify the commonly used facial detail enhancement workflow, it can also be used for various automatic inpainting purposes depending on the detection model." + + @staticmethod + def enhance_face(image, model, clip, vae, guide_size, guide_size_for_bbox, max_size, seed, steps, cfg, sampler_name, scheduler, + positive, negative, denoise, feather, noise_mask, force_inpaint, + bbox_threshold, bbox_dilation, bbox_crop_factor, + sam_detection_hint, sam_dilation, sam_threshold, sam_bbox_expansion, sam_mask_hint_threshold, + sam_mask_hint_use_negative, drop_size, + bbox_detector, segm_detector=None, sam_model_opt=None, wildcard_opt=None, detailer_hook=None, + refiner_ratio=None, refiner_model=None, refiner_clip=None, refiner_positive=None, refiner_negative=None, cycle=1, + inpaint_model=False, noise_mask_feather=0, scheduler_func_opt=None, tiled_encode=False, tiled_decode=False): + + # make default prompt as 'face' if empty prompt for CLIPSeg + bbox_detector.setAux('face') + segs = bbox_detector.detect(image, bbox_threshold, bbox_dilation, bbox_crop_factor, drop_size, detailer_hook=detailer_hook) + bbox_detector.setAux(None) + + # bbox + sam combination + if sam_model_opt is not None: + sam_mask = core.make_sam_mask(sam_model_opt, segs, image, sam_detection_hint, sam_dilation, + sam_threshold, sam_bbox_expansion, sam_mask_hint_threshold, + sam_mask_hint_use_negative, ) + segs = core.segs_bitwise_and_mask(segs, sam_mask) + + elif segm_detector is not None: + segm_segs = segm_detector.detect(image, bbox_threshold, bbox_dilation, bbox_crop_factor, drop_size) + + if (hasattr(segm_detector, 'override_bbox_by_segm') and segm_detector.override_bbox_by_segm and + not (detailer_hook is not None and not hasattr(detailer_hook, 'override_bbox_by_segm'))): + segs = segm_segs + else: + segm_mask = core.segs_to_combined_mask(segm_segs) + segs = core.segs_bitwise_and_mask(segs, segm_mask) + + if len(segs[1]) > 0: + enhanced_img, _, cropped_enhanced, cropped_enhanced_alpha, cnet_pil_list, new_segs = \ + DetailerForEach.do_detail(image, segs, model, clip, vae, guide_size, guide_size_for_bbox, max_size, seed, steps, cfg, + sampler_name, scheduler, positive, negative, denoise, feather, noise_mask, + force_inpaint, wildcard_opt, detailer_hook, + refiner_ratio=refiner_ratio, refiner_model=refiner_model, + refiner_clip=refiner_clip, refiner_positive=refiner_positive, + refiner_negative=refiner_negative, + cycle=cycle, inpaint_model=inpaint_model, noise_mask_feather=noise_mask_feather, + scheduler_func_opt=scheduler_func_opt, tiled_encode=tiled_encode, tiled_decode=tiled_decode) + else: + enhanced_img = image + cropped_enhanced = [] + cropped_enhanced_alpha = [] + cnet_pil_list = [] + + # Mask Generator + mask = core.segs_to_combined_mask(segs) + + if len(cropped_enhanced) == 0: + cropped_enhanced = [utils.empty_pil_tensor()] + + if len(cropped_enhanced_alpha) == 0: + cropped_enhanced_alpha = [utils.empty_pil_tensor()] + + if len(cnet_pil_list) == 0: + cnet_pil_list = [utils.empty_pil_tensor()] + + return enhanced_img, cropped_enhanced, cropped_enhanced_alpha, mask, cnet_pil_list + + def doit(self, image, model, clip, vae, guide_size, guide_size_for, max_size, seed, steps, cfg, sampler_name, scheduler, + positive, negative, denoise, feather, noise_mask, force_inpaint, + bbox_threshold, bbox_dilation, bbox_crop_factor, + sam_detection_hint, sam_dilation, sam_threshold, sam_bbox_expansion, sam_mask_hint_threshold, + sam_mask_hint_use_negative, drop_size, bbox_detector, wildcard, cycle=1, + sam_model_opt=None, segm_detector_opt=None, detailer_hook=None, inpaint_model=False, noise_mask_feather=0, + scheduler_func_opt=None, tiled_encode=False, tiled_decode=False): + + result_img = None + result_mask = None + result_cropped_enhanced = [] + result_cropped_enhanced_alpha = [] + result_cnet_images = [] + + if len(image) > 1: + logging.warning("[Impact Pack] WARN: FaceDetailer is not a node designed for video detailing. If you intend to perform video detailing, please use Detailer For AnimateDiff.") + + for i, single_image in enumerate(image): + enhanced_img, cropped_enhanced, cropped_enhanced_alpha, mask, cnet_pil_list = FaceDetailer.enhance_face( + single_image.unsqueeze(0), model, clip, vae, guide_size, guide_size_for, max_size, seed + i, steps, cfg, sampler_name, scheduler, + positive, negative, denoise, feather, noise_mask, force_inpaint, + bbox_threshold, bbox_dilation, bbox_crop_factor, + sam_detection_hint, sam_dilation, sam_threshold, sam_bbox_expansion, sam_mask_hint_threshold, + sam_mask_hint_use_negative, drop_size, bbox_detector, segm_detector_opt, sam_model_opt, wildcard, detailer_hook, + cycle=cycle, inpaint_model=inpaint_model, noise_mask_feather=noise_mask_feather, scheduler_func_opt=scheduler_func_opt, + tiled_encode=tiled_encode, tiled_decode=tiled_decode) + + result_img = torch.cat((result_img, enhanced_img), dim=0) if result_img is not None else enhanced_img + result_mask = torch.cat((result_mask, mask), dim=0) if result_mask is not None else mask + result_cropped_enhanced.extend(cropped_enhanced) + result_cropped_enhanced_alpha.extend(cropped_enhanced_alpha) + result_cnet_images.extend(cnet_pil_list) + + pipe = (model, clip, vae, positive, negative, wildcard, bbox_detector, segm_detector_opt, sam_model_opt, detailer_hook, None, None, None, None) + return result_img, result_cropped_enhanced, result_cropped_enhanced_alpha, result_mask, pipe, result_cnet_images + + +class LatentPixelScale: + upscale_methods = ["nearest-exact", "bilinear", "lanczos", "area"] + + @classmethod + def INPUT_TYPES(s): + return {"required": { + "samples": ("LATENT", ), + "scale_method": (s.upscale_methods,), + "scale_factor": ("FLOAT", {"default": 1.5, "min": 0.1, "max": 10000, "step": 0.05}), + "vae": ("VAE", ), + "use_tiled_vae": ("BOOLEAN", {"default": False, "label_on": "enabled", "label_off": "disabled"}), + }, + "optional": { + "upscale_model_opt": ("UPSCALE_MODEL", ), + } + } + + RETURN_TYPES = ("LATENT", "IMAGE") + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Upscale" + + def doit(self, samples, scale_method, scale_factor, vae, use_tiled_vae, upscale_model_opt=None): + if upscale_model_opt is None: + latimg = core.latent_upscale_on_pixel_space2(samples, scale_method, scale_factor, vae, use_tile=use_tiled_vae) + else: + latimg = core.latent_upscale_on_pixel_space_with_model2(samples, scale_method, upscale_model_opt, scale_factor, vae, use_tile=use_tiled_vae) + return latimg + + +class NoiseInjectionDetailerHookProvider: + schedules = ["skip_start", "from_start"] + + @classmethod + def INPUT_TYPES(s): + return {"required": { + "schedule_for_cycle": (s.schedules,), + "source": (["CPU", "GPU"],), + "seed": ("INT", {"default": 0, "min": 0, "max": 0xffffffffffffffff}), + "start_strength": ("FLOAT", {"default": 2.0, "min": 0.0, "max": 200.0, "step": 0.01}), + "end_strength": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 200.0, "step": 0.01}), + }, + } + + RETURN_TYPES = ("DETAILER_HOOK",) + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Detailer" + + def doit(self, schedule_for_cycle, source, seed, start_strength, end_strength): + try: + hook = hooks.InjectNoiseHookForDetailer(source, seed, start_strength, end_strength, + from_start=('from_start' in schedule_for_cycle)) + return (hook, ) + except Exception as e: + logging.error(f"[Impact Pack] NoiseInjectionDetailerHookProvider: 'ComfyUI Noise' custom node isn't installed. You must install 'BlenderNeko/ComfyUI Noise' extension to use this node.\t{e}") + + +# class CustomNoiseDetailerHookProvider: +# @classmethod +# def INPUT_TYPES(s): +# return {"required": { +# "noise": ("NOISE",)}, +# } +# +# RETURN_TYPES = ("DETAILER_HOOK",) +# FUNCTION = "doit" +# +# CATEGORY = "ImpactPack/Detailer" +# +# def doit(self, noise): +# hook = hooks.CustomNoiseDetailerHookProvider(noise) +# return (hook, ) + + +class VariationNoiseDetailerHookProvider: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "seed": ("INT", {"default": 0, "min": 0, "max": 0xffffffffffffffff}), + "strength": ("FLOAT", {"default": 0.0, "min": 0.0, "max": 1.0, "step": 0.01})} + } + + RETURN_TYPES = ("DETAILER_HOOK",) + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Detailer" + + def doit(self, seed, strength): + hook = hooks.VariationNoiseDetailerHookProvider(seed, strength) + return (hook, ) + + +class UnsamplerDetailerHookProvider: + schedules = ["skip_start", "from_start"] + + @classmethod + def INPUT_TYPES(s): + return {"required": + {"model": ("MODEL",), + "steps": ("INT", {"default": 25, "min": 1, "max": 10000}), + "start_end_at_step": ("INT", {"default": 21, "min": 0, "max": 10000}), + "end_end_at_step": ("INT", {"default": 24, "min": 0, "max": 10000}), + "cfg": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 100.0}), + "sampler_name": (comfy.samplers.KSampler.SAMPLERS, ), + "scheduler": (comfy.samplers.KSampler.SCHEDULERS, ), + "normalize": (["disable", "enable"], ), + "positive": ("CONDITIONING", ), + "negative": ("CONDITIONING", ), + "schedule_for_cycle": (s.schedules,), + }} + + RETURN_TYPES = ("DETAILER_HOOK",) + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Detailer" + + def doit(self, model, steps, start_end_at_step, end_end_at_step, cfg, sampler_name, + scheduler, normalize, positive, negative, schedule_for_cycle): + try: + hook = hooks.UnsamplerDetailerHook(model, steps, start_end_at_step, end_end_at_step, cfg, sampler_name, + scheduler, normalize, positive, negative, + from_start=('from_start' in schedule_for_cycle)) + + return (hook, ) + except Exception as e: + logging.error(f"[Impact Pack] UnsamplerDetailerHookProvider: 'ComfyUI Noise' custom node isn't installed. You must install 'BlenderNeko/ComfyUI Noise' extension to use this node.\t{e}") + pass + + +class DenoiseSchedulerDetailerHookProvider: + schedules = ["simple"] + + @classmethod + def INPUT_TYPES(s): + return {"required": { + "schedule_for_cycle": (s.schedules,), + "target_denoise": ("FLOAT", {"default": 0.3, "min": 0.0, "max": 1.0, "step": 0.01}), + }, + } + + RETURN_TYPES = ("DETAILER_HOOK",) + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Detailer" + + def doit(self, schedule_for_cycle, target_denoise): + hook = hooks.SimpleDetailerDenoiseSchedulerHook(target_denoise) + return (hook, ) + + +class CoreMLDetailerHookProvider: + @classmethod + def INPUT_TYPES(s): + return {"required": {"mode": (["512x512", "768x768", "512x768", "768x512"], )}, } + + RETURN_TYPES = ("DETAILER_HOOK",) + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Detailer" + + def doit(self, mode): + hook = hooks.CoreMLHook(mode) + return (hook, ) + + +class CustomSamplerDetailerHookProvider: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "sampler": ("SAMPLER", ), + }, + } + + RETURN_TYPES = ("DETAILER_HOOK",) + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Detailer" + + DESCRIPTION = "Apply a hook that allows you to use a custom sampler in the Detailer nodes. When using `DetailerHookCombine`, the sampler from the first hook is applied." + + def doit(self, sampler): + hook = hooks.CustomSamplerDetailerHookProvider(sampler) + return (hook, ) + + +class CfgScheduleHookProvider: + schedules = ["simple"] + + @classmethod + def INPUT_TYPES(s): + return {"required": { + "schedule_for_iteration": (s.schedules,), + "target_cfg": ("FLOAT", {"default": 3.0, "min": 0.0, "max": 100.0}), + }, + } + + RETURN_TYPES = ("PK_HOOK",) + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Upscale" + + def doit(self, schedule_for_iteration, target_cfg): + hook = None + if schedule_for_iteration == "simple": + hook = hooks.SimpleCfgScheduleHook(target_cfg) + + return (hook, ) + + +class UnsamplerHookProvider: + schedules = ["simple"] + + @classmethod + def INPUT_TYPES(s): + return {"required": + {"model": ("MODEL",), + "steps": ("INT", {"default": 25, "min": 1, "max": 10000}), + "start_end_at_step": ("INT", {"default": 21, "min": 0, "max": 10000}), + "end_end_at_step": ("INT", {"default": 24, "min": 0, "max": 10000}), + "cfg": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 100.0}), + "sampler_name": (comfy.samplers.KSampler.SAMPLERS, ), + "scheduler": (comfy.samplers.KSampler.SCHEDULERS, ), + "normalize": (["disable", "enable"], ), + "positive": ("CONDITIONING", ), + "negative": ("CONDITIONING", ), + "schedule_for_iteration": (s.schedules,), + }} + + RETURN_TYPES = ("PK_HOOK",) + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Upscale" + + def doit(self, model, steps, start_end_at_step, end_end_at_step, cfg, sampler_name, + scheduler, normalize, positive, negative, schedule_for_iteration): + try: + hook = None + if schedule_for_iteration == "simple": + hook = hooks.UnsamplerHook(model, steps, start_end_at_step, end_end_at_step, cfg, sampler_name, + scheduler, normalize, positive, negative) + + return (hook, ) + except Exception as e: + logging.error(f"[Impact Pack] UnsamplerHookProvider: 'ComfyUI Noise' custom node isn't installed. You must install 'BlenderNeko/ComfyUI Noise' extension to use this node.\t{e}") + + +class NoiseInjectionHookProvider: + schedules = ["simple"] + + @classmethod + def INPUT_TYPES(s): + return {"required": { + "schedule_for_iteration": (s.schedules,), + "source": (["CPU", "GPU"],), + "seed": ("INT", {"default": 0, "min": 0, "max": 0xffffffffffffffff}), + "start_strength": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 200.0, "step": 0.01}), + "end_strength": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 200.0, "step": 0.01}), + }, + } + + RETURN_TYPES = ("PK_HOOK",) + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Upscale" + + def doit(self, schedule_for_iteration, source, seed, start_strength, end_strength): + try: + hook = None + if schedule_for_iteration == "simple": + hook = hooks.InjectNoiseHook(source, seed, start_strength, end_strength) + + return (hook, ) + except Exception as e: + logging.error(f"[Impact Pack] NoiseInjectionHookProvider: 'ComfyUI Noise' custom node isn't installed. You must install 'BlenderNeko/ComfyUI Noise' extension to use this node.\t{e}") + + +class DenoiseScheduleHookProvider: + schedules = ["simple"] + + @classmethod + def INPUT_TYPES(s): + return {"required": { + "schedule_for_iteration": (s.schedules,), + "target_denoise": ("FLOAT", {"default": 0.2, "min": 0.0, "max": 1.0, "step": 0.01}), + }, + } + + RETURN_TYPES = ("PK_HOOK",) + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Upscale" + + def doit(self, schedule_for_iteration, target_denoise): + hook = None + if schedule_for_iteration == "simple": + hook = hooks.SimpleDenoiseScheduleHook(target_denoise) + + return (hook, ) + + +class StepsScheduleHookProvider: + schedules = ["simple"] + + @classmethod + def INPUT_TYPES(s): + return {"required": { + "schedule_for_iteration": (s.schedules,), + "target_steps": ("INT", {"default": 20, "min": 1, "max": 10000}), + }, + } + + RETURN_TYPES = ("PK_HOOK",) + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Upscale" + + def doit(self, schedule_for_iteration, target_steps): + hook = None + if schedule_for_iteration == "simple": + hook = hooks.SimpleStepsScheduleHook(target_steps) + + return (hook, ) + + +class DetailerHookCombine: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "hook1": ("DETAILER_HOOK",), + "hook2": ("DETAILER_HOOK",), + }, + } + + RETURN_TYPES = ("DETAILER_HOOK",) + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Upscale" + + def doit(self, hook1, hook2): + hook = hooks.DetailerHookCombine(hook1, hook2) + return (hook, ) + + +class PixelKSampleHookCombine: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "hook1": ("PK_HOOK",), + "hook2": ("PK_HOOK",), + }, + } + + RETURN_TYPES = ("PK_HOOK",) + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Upscale" + + def doit(self, hook1, hook2): + hook = hooks.PixelKSampleHookCombine(hook1, hook2) + return (hook, ) + + +class PixelTiledKSampleUpscalerProvider: + upscale_methods = ["nearest-exact", "bilinear", "lanczos", "area"] + + @classmethod + def INPUT_TYPES(s): + return {"required": { + "scale_method": (s.upscale_methods,), + "model": ("MODEL",), + "vae": ("VAE",), + "seed": ("INT", {"default": 0, "min": 0, "max": 0xffffffffffffffff}), + "steps": ("INT", {"default": 20, "min": 1, "max": 10000}), + "cfg": ("FLOAT", {"default": 8.0, "min": 0.0, "max": 100.0}), + "sampler_name": (comfy.samplers.KSampler.SAMPLERS, ), + "scheduler": (comfy.samplers.KSampler.SCHEDULERS, ), + "positive": ("CONDITIONING", ), + "negative": ("CONDITIONING", ), + "denoise": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}), + "tile_width": ("INT", {"default": 512, "min": 320, "max": MAX_RESOLUTION, "step": 64}), + "tile_height": ("INT", {"default": 512, "min": 320, "max": MAX_RESOLUTION, "step": 64}), + "tiling_strategy": (["random", "padded", 'simple'], ), + }, + "optional": { + "upscale_model_opt": ("UPSCALE_MODEL", ), + "pk_hook_opt": ("PK_HOOK", ), + "tile_cnet_opt": ("CONTROL_NET", ), + "tile_cnet_strength": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}), + "overlap": ("INT", {"default": 64, "min": 0, "max": 4096, "step": 32}), + } + } + + RETURN_TYPES = ("UPSCALER",) + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Upscale" + + def doit(self, scale_method, model, vae, seed, steps, cfg, sampler_name, scheduler, positive, negative, denoise, tile_width, tile_height, tiling_strategy, upscale_model_opt=None, + pk_hook_opt=None, tile_cnet_opt=None, tile_cnet_strength=1.0, overlap=64): + if "BNK_TiledKSampler" in nodes.NODE_CLASS_MAPPINGS: + upscaler = core.PixelTiledKSampleUpscaler(scale_method, model, vae, seed, steps, cfg, sampler_name, scheduler, positive, negative, denoise, + tile_width, tile_height, tiling_strategy, upscale_model_opt, pk_hook_opt, tile_cnet_opt, + tile_size=max(tile_width, tile_height), tile_cnet_strength=tile_cnet_strength, overlap=overlap) + return (upscaler, ) + else: + utils.try_install_custom_node('https://github.com/BlenderNeko/ComfyUI_TiledKSampler', + "To use 'PixelTiledKSampleUpscalerProvider' node, 'BlenderNeko/ComfyUI_TiledKSampler' extension is required.") + + raise Exception("[ERROR] PixelTiledKSampleUpscalerProvider: ComfyUI_TiledKSampler custom node isn't installed. You must install BlenderNeko/ComfyUI_TiledKSampler extension to use this node.") + + +class PixelTiledKSampleUpscalerProviderPipe: + upscale_methods = ["nearest-exact", "bilinear", "lanczos", "area"] + + @classmethod + def INPUT_TYPES(s): + return {"required": { + "scale_method": (s.upscale_methods,), + "seed": ("INT", {"default": 0, "min": 0, "max": 0xffffffffffffffff}), + "steps": ("INT", {"default": 20, "min": 1, "max": 10000}), + "cfg": ("FLOAT", {"default": 8.0, "min": 0.0, "max": 100.0}), + "sampler_name": (comfy.samplers.KSampler.SAMPLERS, ), + "scheduler": (comfy.samplers.KSampler.SCHEDULERS, ), + "denoise": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}), + "tile_width": ("INT", {"default": 512, "min": 320, "max": MAX_RESOLUTION, "step": 64}), + "tile_height": ("INT", {"default": 512, "min": 320, "max": MAX_RESOLUTION, "step": 64}), + "tiling_strategy": (["random", "padded", 'simple'], ), + "basic_pipe": ("BASIC_PIPE",) + }, + "optional": { + "upscale_model_opt": ("UPSCALE_MODEL", ), + "pk_hook_opt": ("PK_HOOK", ), + "tile_cnet_opt": ("CONTROL_NET", ), + "tile_cnet_strength": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}), + } + } + + RETURN_TYPES = ("UPSCALER",) + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Upscale" + + def doit(self, scale_method, seed, steps, cfg, sampler_name, scheduler, denoise, tile_width, tile_height, tiling_strategy, basic_pipe, upscale_model_opt=None, pk_hook_opt=None, + tile_cnet_opt=None, tile_cnet_strength=1.0): + if "BNK_TiledKSampler" in nodes.NODE_CLASS_MAPPINGS: + model, _, vae, positive, negative = basic_pipe + upscaler = core.PixelTiledKSampleUpscaler(scale_method, model, vae, seed, steps, cfg, sampler_name, scheduler, positive, negative, denoise, + tile_width, tile_height, tiling_strategy, upscale_model_opt, pk_hook_opt, tile_cnet_opt, + tile_size=max(tile_width, tile_height), tile_cnet_strength=tile_cnet_strength) + return (upscaler, ) + else: + logging.error("[Impact Pack] PixelTiledKSampleUpscalerProviderPipe: ComfyUI_TiledKSampler custom node isn't installed. You must install BlenderNeko/ComfyUI_TiledKSampler extension to use this node.") + raise Exception("[Impact Pack] PixelTiledKSampleUpscalerProviderPipe: ComfyUI_TiledKSampler custom node isn't installed. You must install BlenderNeko/ComfyUI_TiledKSampler extension to use this node.") + + +class PixelKSampleUpscalerProvider: + upscale_methods = ["nearest-exact", "bilinear", "lanczos", "area"] + + @classmethod + def INPUT_TYPES(s): + return {"required": { + "scale_method": (s.upscale_methods,), + "model": ("MODEL",), + "vae": ("VAE",), + "seed": ("INT", {"default": 0, "min": 0, "max": 0xffffffffffffffff}), + "steps": ("INT", {"default": 20, "min": 1, "max": 10000}), + "cfg": ("FLOAT", {"default": 8.0, "min": 0.0, "max": 100.0}), + "sampler_name": (comfy.samplers.KSampler.SAMPLERS, ), + "scheduler": (core.get_schedulers(), ), + "positive": ("CONDITIONING", ), + "negative": ("CONDITIONING", ), + "denoise": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}), + "use_tiled_vae": ("BOOLEAN", {"default": False, "label_on": "enabled", "label_off": "disabled"}), + "tile_size": ("INT", {"default": 512, "min": 320, "max": 4096, "step": 64}), + }, + "optional": { + "upscale_model_opt": ("UPSCALE_MODEL", ), + "pk_hook_opt": ("PK_HOOK", ), + "scheduler_func_opt": ("SCHEDULER_FUNC",), + } + } + + RETURN_TYPES = ("UPSCALER",) + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Upscale" + + def doit(self, scale_method, model, vae, seed, steps, cfg, sampler_name, scheduler, positive, negative, denoise, + use_tiled_vae, upscale_model_opt=None, pk_hook_opt=None, tile_size=512, scheduler_func_opt=None): + upscaler = core.PixelKSampleUpscaler(scale_method, model, vae, seed, steps, cfg, sampler_name, scheduler, + positive, negative, denoise, use_tiled_vae, upscale_model_opt, pk_hook_opt, + tile_size=tile_size, scheduler_func=scheduler_func_opt) + return (upscaler, ) + + +class PixelKSampleUpscalerProviderPipe(PixelKSampleUpscalerProvider): + upscale_methods = ["nearest-exact", "bilinear", "lanczos", "area"] + + @classmethod + def INPUT_TYPES(s): + return {"required": { + "scale_method": (s.upscale_methods,), + "seed": ("INT", {"default": 0, "min": 0, "max": 0xffffffffffffffff}), + "steps": ("INT", {"default": 20, "min": 1, "max": 10000}), + "cfg": ("FLOAT", {"default": 8.0, "min": 0.0, "max": 100.0}), + "sampler_name": (comfy.samplers.KSampler.SAMPLERS, ), + "scheduler": (core.get_schedulers(), ), + "denoise": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}), + "use_tiled_vae": ("BOOLEAN", {"default": False, "label_on": "enabled", "label_off": "disabled"}), + "basic_pipe": ("BASIC_PIPE",), + "tile_size": ("INT", {"default": 512, "min": 320, "max": 4096, "step": 64}), + }, + "optional": { + "upscale_model_opt": ("UPSCALE_MODEL", ), + "pk_hook_opt": ("PK_HOOK", ), + "scheduler_func_opt": ("SCHEDULER_FUNC",), + "tile_cnet_opt": ("CONTROL_NET", ), + "tile_cnet_strength": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}), + } + } + + RETURN_TYPES = ("UPSCALER",) + FUNCTION = "doit_pipe" + + CATEGORY = "ImpactPack/Upscale" + + def doit_pipe(self, scale_method, seed, steps, cfg, sampler_name, scheduler, denoise, + use_tiled_vae, basic_pipe, upscale_model_opt=None, pk_hook_opt=None, + tile_size=512, scheduler_func_opt=None, tile_cnet_opt=None, tile_cnet_strength=1.0): + model, _, vae, positive, negative = basic_pipe + upscaler = core.PixelKSampleUpscaler(scale_method, model, vae, seed, steps, cfg, sampler_name, scheduler, + positive, negative, denoise, use_tiled_vae, upscale_model_opt, pk_hook_opt, + tile_size=tile_size, scheduler_func=scheduler_func_opt, + tile_cnet_opt=tile_cnet_opt, tile_cnet_strength=tile_cnet_strength) + return (upscaler, ) + + +class TwoSamplersForMaskUpscalerProvider: + upscale_methods = ["nearest-exact", "bilinear", "lanczos", "area"] + + @classmethod + def INPUT_TYPES(s): + return {"required": { + "scale_method": (s.upscale_methods,), + "full_sample_schedule": ( + ["none", "interleave1", "interleave2", "interleave3", + "last1", "last2", + "interleave1+last1", "interleave2+last1", "interleave3+last1", + ],), + "use_tiled_vae": ("BOOLEAN", {"default": False, "label_on": "enabled", "label_off": "disabled"}), + "base_sampler": ("KSAMPLER", ), + "mask_sampler": ("KSAMPLER", ), + "mask": ("MASK", ), + "vae": ("VAE",), + "tile_size": ("INT", {"default": 512, "min": 320, "max": 4096, "step": 64}), + }, + "optional": { + "full_sampler_opt": ("KSAMPLER",), + "upscale_model_opt": ("UPSCALE_MODEL", ), + "pk_hook_base_opt": ("PK_HOOK", ), + "pk_hook_mask_opt": ("PK_HOOK", ), + "pk_hook_full_opt": ("PK_HOOK", ), + } + } + + RETURN_TYPES = ("UPSCALER", ) + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Upscale" + + def doit(self, scale_method, full_sample_schedule, use_tiled_vae, base_sampler, mask_sampler, mask, vae, + full_sampler_opt=None, upscale_model_opt=None, + pk_hook_base_opt=None, pk_hook_mask_opt=None, pk_hook_full_opt=None, tile_size=512): + upscaler = core.TwoSamplersForMaskUpscaler(scale_method, full_sample_schedule, use_tiled_vae, + base_sampler, mask_sampler, mask, vae, full_sampler_opt, upscale_model_opt, + pk_hook_base_opt, pk_hook_mask_opt, pk_hook_full_opt, tile_size=tile_size) + return (upscaler, ) + + +class TwoSamplersForMaskUpscalerProviderPipe: + upscale_methods = ["nearest-exact", "bilinear", "lanczos", "area"] + + @classmethod + def INPUT_TYPES(s): + return {"required": { + "scale_method": (s.upscale_methods,), + "full_sample_schedule": ( + ["none", "interleave1", "interleave2", "interleave3", + "last1", "last2", + "interleave1+last1", "interleave2+last1", "interleave3+last1", + ],), + "use_tiled_vae": ("BOOLEAN", {"default": False, "label_on": "enabled", "label_off": "disabled"}), + "base_sampler": ("KSAMPLER", ), + "mask_sampler": ("KSAMPLER", ), + "mask": ("MASK", ), + "basic_pipe": ("BASIC_PIPE",), + "tile_size": ("INT", {"default": 512, "min": 320, "max": 4096, "step": 64}), + }, + "optional": { + "full_sampler_opt": ("KSAMPLER",), + "upscale_model_opt": ("UPSCALE_MODEL", ), + "pk_hook_base_opt": ("PK_HOOK", ), + "pk_hook_mask_opt": ("PK_HOOK", ), + "pk_hook_full_opt": ("PK_HOOK", ), + } + } + + RETURN_TYPES = ("UPSCALER", ) + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Upscale" + + def doit(self, scale_method, full_sample_schedule, use_tiled_vae, base_sampler, mask_sampler, mask, basic_pipe, + full_sampler_opt=None, upscale_model_opt=None, + pk_hook_base_opt=None, pk_hook_mask_opt=None, pk_hook_full_opt=None, tile_size=512): + + mask = utils.make_2d_mask(mask) + + _, _, vae, _, _ = basic_pipe + upscaler = core.TwoSamplersForMaskUpscaler(scale_method, full_sample_schedule, use_tiled_vae, + base_sampler, mask_sampler, mask, vae, full_sampler_opt, upscale_model_opt, + pk_hook_base_opt, pk_hook_mask_opt, pk_hook_full_opt, tile_size=tile_size) + return (upscaler, ) + + +class IterativeLatentUpscale: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "samples": ("LATENT", ), + "upscale_factor": ("FLOAT", {"default": 1.5, "min": 1, "max": 10000, "step": 0.1}), + "steps": ("INT", {"default": 3, "min": 1, "max": 10000, "step": 1}), + "temp_prefix": ("STRING", {"default": ""}), + "upscaler": ("UPSCALER",), + "step_mode": (["simple", "geometric"], {"default": "simple"}), + "vae_compression": ("INT", {"default": 8, "min": 0, "max": 256, "step": 8}) + }, + "hidden": {"unique_id": "UNIQUE_ID"}, + } + + RETURN_TYPES = ("LATENT", "VAE") + RETURN_NAMES = ("latent", "vae") + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Upscale" + + # dim_reduction_factor=8 for SD1/SDXL, used to calculate actual dims from latents based on VAE + def doit(self, samples, upscale_factor, steps, temp_prefix, upscaler, step_mode="simple", vae_compression=8, unique_id=None): + h, w = samples['samples'].shape[-2:] + w, h = w * vae_compression, h * vae_compression + + if temp_prefix == "": + temp_prefix = None + + if step_mode == "geometric": + upscale_factor_unit = pow(upscale_factor, 1.0/steps) + else: # simple + upscale_factor_unit = max(0, (upscale_factor - 1.0) / steps) + + current_latent = samples + noise_mask = current_latent.get('noise_mask') + scale = 1 + + for i in range(steps-1): + if step_mode == "geometric": + scale *= upscale_factor_unit + else: # simple + scale += upscale_factor_unit + + new_w = w*scale + new_h = h*scale + core.update_node_status(unique_id, f"{i+1}/{steps} steps | x{scale:.2f}", (i+1)/steps) + logging.info(f"IterativeLatentUpscale[{i+1}/{steps}]: {new_w:.1f}x{new_h:.1f} (scale:{scale:.2f}) ") + step_info = i, steps + current_latent = upscaler.upscale_shape(step_info, current_latent, new_w, new_h, temp_prefix) + if noise_mask is not None: + current_latent['noise_mask'] = noise_mask + + if scale < upscale_factor: + new_w = w*upscale_factor + new_h = h*upscale_factor + core.update_node_status(unique_id, f"Final step | x{upscale_factor:.2f}", 1.0) + logging.info(f"IterativeLatentUpscale[Final]: {new_w:.1f}x{new_h:.1f} (scale:{upscale_factor:.2f}) ") + step_info = steps-1, steps + current_latent = upscaler.upscale_shape(step_info, current_latent, new_w, new_h, temp_prefix) + + core.update_node_status(unique_id, "", None) + + return current_latent, upscaler.vae + + +class IterativeImageUpscale: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "pixels": ("IMAGE", ), + "upscale_factor": ("FLOAT", {"default": 1.5, "min": 1, "max": 10000, "step": 0.1}), + "steps": ("INT", {"default": 3, "min": 1, "max": 10000, "step": 1}), + "temp_prefix": ("STRING", {"default": ""}), + "upscaler": ("UPSCALER",), + "vae": ("VAE",), + "step_mode": (["simple", "geometric"], {"default": "simple"}), + "vae_compression": ("INT", {"default": 8, "min": 0, "max": 256, "step": 8}) + }, + "hidden": {"unique_id": "UNIQUE_ID"} + } + + RETURN_TYPES = ("IMAGE",) + RETURN_NAMES = ("image",) + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Upscale" + + def doit(self, pixels, upscale_factor, steps, temp_prefix, upscaler, vae, step_mode="simple", vae_compression=8, unique_id=None): + if temp_prefix == "": + temp_prefix = None + + core.update_node_status(unique_id, "VAEEncode (first)", 0) + if upscaler.is_tiled: + encoder = nodes.VAEEncodeTiled() + if 'overlap' in inspect.signature(encoder.encode).parameters: + latent = encoder.encode(vae, pixels, upscaler.tile_size, overlap=upscaler.overlap)[0] + else: + latent = encoder.encode(vae, pixels, upscaler.tile_size)[0] + else: + latent = nodes.VAEEncode().encode(vae, pixels)[0] + + refined_latent = IterativeLatentUpscale().doit(latent, upscale_factor, steps, temp_prefix, upscaler, step_mode, vae_compression, unique_id) + + core.update_node_status(unique_id, "VAEDecode (final)", 1.0) + if upscaler.is_tiled: + pixels = nodes.VAEDecodeTiled().decode(vae, refined_latent[0], upscaler.tile_size)[0] + else: + pixels = nodes.VAEDecode().decode(vae, refined_latent[0])[0] + + core.update_node_status(unique_id, "", None) + + return (pixels, ) + + +class FaceDetailerPipe: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "image": ("IMAGE", ), + "detailer_pipe": ("DETAILER_PIPE", {"tooltip": "If the `ImpactDummyInput` is connected to the model in the detailer_pipe, the inference stage is skipped."}), + "guide_size": ("FLOAT", {"default": 512, "min": 64, "max": nodes.MAX_RESOLUTION, "step": 8}), + "guide_size_for": ("BOOLEAN", {"default": True, "label_on": "bbox", "label_off": "crop_region"}), + "max_size": ("FLOAT", {"default": 1024, "min": 64, "max": nodes.MAX_RESOLUTION, "step": 8}), + "seed": ("INT", {"default": 0, "min": 0, "max": 0xffffffffffffffff}), + "steps": ("INT", {"default": 20, "min": 1, "max": 10000}), + "cfg": ("FLOAT", {"default": 8.0, "min": 0.0, "max": 100.0}), + "sampler_name": (comfy.samplers.KSampler.SAMPLERS,), + "scheduler": (core.get_schedulers(),), + "denoise": ("FLOAT", {"default": 0.5, "min": 0.0001, "max": 1.0, "step": 0.01}), + "feather": ("INT", {"default": 5, "min": 0, "max": 100, "step": 1}), + "noise_mask": ("BOOLEAN", {"default": True, "label_on": "enabled", "label_off": "disabled"}), + "force_inpaint": ("BOOLEAN", {"default": True, "label_on": "enabled", "label_off": "disabled"}), + + "bbox_threshold": ("FLOAT", {"default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01}), + "bbox_dilation": ("INT", {"default": 10, "min": -512, "max": 512, "step": 1}), + "bbox_crop_factor": ("FLOAT", {"default": 3.0, "min": 1.0, "max": 10, "step": 0.1}), + + "sam_detection_hint": (["center-1", "horizontal-2", "vertical-2", "rect-4", "diamond-4", "mask-area", "mask-points", "mask-point-bbox", "none"],), + "sam_dilation": ("INT", {"default": 0, "min": -512, "max": 512, "step": 1}), + "sam_threshold": ("FLOAT", {"default": 0.93, "min": 0.0, "max": 1.0, "step": 0.01}), + "sam_bbox_expansion": ("INT", {"default": 0, "min": 0, "max": 1000, "step": 1}), + "sam_mask_hint_threshold": ("FLOAT", {"default": 0.7, "min": 0.0, "max": 1.0, "step": 0.01}), + "sam_mask_hint_use_negative": (["False", "Small", "Outter"],), + + "drop_size": ("INT", {"min": 1, "max": MAX_RESOLUTION, "step": 1, "default": 10}), + "refiner_ratio": ("FLOAT", {"default": 0.2, "min": 0.0, "max": 1.0}), + + "cycle": ("INT", {"default": 1, "min": 1, "max": 10, "step": 1}), + }, + "optional": { + "inpaint_model": ("BOOLEAN", {"default": False, "label_on": "enabled", "label_off": "disabled"}), + "noise_mask_feather": ("INT", {"default": 20, "min": 0, "max": 100, "step": 1}), + "scheduler_func_opt": ("SCHEDULER_FUNC",), + "tiled_encode": ("BOOLEAN", {"default": False, "label_on": "enabled", "label_off": "disabled"}), + "tiled_decode": ("BOOLEAN", {"default": False, "label_on": "enabled", "label_off": "disabled"}), + } + } + + RETURN_TYPES = ("IMAGE", "IMAGE", "IMAGE", "MASK", "DETAILER_PIPE", "IMAGE") + RETURN_NAMES = ("image", "cropped_refined", "cropped_enhanced_alpha", "mask", "detailer_pipe", "cnet_images") + OUTPUT_IS_LIST = (False, True, True, False, False, True) + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Simple" + + DESCRIPTION = FaceDetailer.DESCRIPTION + + def doit(self, image, detailer_pipe, guide_size, guide_size_for, max_size, seed, steps, cfg, sampler_name, scheduler, + denoise, feather, noise_mask, force_inpaint, bbox_threshold, bbox_dilation, bbox_crop_factor, + sam_detection_hint, sam_dilation, sam_threshold, sam_bbox_expansion, + sam_mask_hint_threshold, sam_mask_hint_use_negative, drop_size, refiner_ratio=None, + cycle=1, inpaint_model=False, noise_mask_feather=0, scheduler_func_opt=None, + tiled_encode=False, tiled_decode=False): + + result_img = None + result_mask = None + result_cropped_enhanced = [] + result_cropped_enhanced_alpha = [] + result_cnet_images = [] + + if len(image) > 1: + logging.warning("[Impact Pack] WARN: FaceDetailer is not a node designed for video detailing. If you intend to perform video detailing, please use Detailer For AnimateDiff.") + + model, clip, vae, positive, negative, wildcard, bbox_detector, segm_detector, sam_model_opt, detailer_hook, \ + refiner_model, refiner_clip, refiner_positive, refiner_negative = detailer_pipe + + for i, single_image in enumerate(image): + enhanced_img, cropped_enhanced, cropped_enhanced_alpha, mask, cnet_pil_list = FaceDetailer.enhance_face( + single_image.unsqueeze(0), model, clip, vae, guide_size, guide_size_for, max_size, seed + i, steps, cfg, sampler_name, scheduler, + positive, negative, denoise, feather, noise_mask, force_inpaint, + bbox_threshold, bbox_dilation, bbox_crop_factor, + sam_detection_hint, sam_dilation, sam_threshold, sam_bbox_expansion, sam_mask_hint_threshold, + sam_mask_hint_use_negative, drop_size, bbox_detector, segm_detector, sam_model_opt, wildcard, detailer_hook, + refiner_ratio=refiner_ratio, refiner_model=refiner_model, + refiner_clip=refiner_clip, refiner_positive=refiner_positive, refiner_negative=refiner_negative, + cycle=cycle, inpaint_model=inpaint_model, noise_mask_feather=noise_mask_feather, scheduler_func_opt=scheduler_func_opt, + tiled_encode=tiled_encode, tiled_decode=tiled_decode) + + result_img = torch.cat((result_img, enhanced_img), dim=0) if result_img is not None else enhanced_img + result_mask = torch.cat((result_mask, mask), dim=0) if result_mask is not None else mask + result_cropped_enhanced.extend(cropped_enhanced) + result_cropped_enhanced_alpha.extend(cropped_enhanced_alpha) + result_cnet_images.extend(cnet_pil_list) + + if len(result_cropped_enhanced) == 0: + result_cropped_enhanced = [utils.empty_pil_tensor()] + + if len(result_cropped_enhanced_alpha) == 0: + result_cropped_enhanced_alpha = [utils.empty_pil_tensor()] + + if len(result_cnet_images) == 0: + result_cnet_images = [utils.empty_pil_tensor()] + + return result_img, result_cropped_enhanced, result_cropped_enhanced_alpha, result_mask, detailer_pipe, result_cnet_images + + +class MaskDetailerPipe: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "image": ("IMAGE", ), + "mask": ("MASK", ), + "basic_pipe": ("BASIC_PIPE",), + + "guide_size": ("FLOAT", {"default": 512, "min": 64, "max": nodes.MAX_RESOLUTION, "step": 8}), + "guide_size_for": ("BOOLEAN", {"default": True, "label_on": "mask bbox", "label_off": "crop region"}), + "max_size": ("FLOAT", {"default": 1024, "min": 64, "max": nodes.MAX_RESOLUTION, "step": 8}), + "mask_mode": ("BOOLEAN", {"default": True, "label_on": "masked only", "label_off": "whole"}), + + "seed": ("INT", {"default": 0, "min": 0, "max": 0xffffffffffffffff}), + "steps": ("INT", {"default": 20, "min": 1, "max": 10000}), + "cfg": ("FLOAT", {"default": 8.0, "min": 0.0, "max": 100.0}), + "sampler_name": (comfy.samplers.KSampler.SAMPLERS,), + "scheduler": (core.get_schedulers(),), + "denoise": ("FLOAT", {"default": 0.5, "min": 0.0001, "max": 1.0, "step": 0.01}), + + "feather": ("INT", {"default": 5, "min": 0, "max": 100, "step": 1}), + "crop_factor": ("FLOAT", {"default": 3.0, "min": 1.0, "max": 10, "step": 0.1}), + "drop_size": ("INT", {"min": 1, "max": MAX_RESOLUTION, "step": 1, "default": 10}), + "refiner_ratio": ("FLOAT", {"default": 0.2, "min": 0.0, "max": 1.0}), + "batch_size": ("INT", {"default": 1, "min": 1, "max": 100}), + + "cycle": ("INT", {"default": 1, "min": 1, "max": 10, "step": 1}), + }, + "optional": { + "refiner_basic_pipe_opt": ("BASIC_PIPE", ), + "detailer_hook": ("DETAILER_HOOK",), + "inpaint_model": ("BOOLEAN", {"default": False, "label_on": "enabled", "label_off": "disabled"}), + "noise_mask_feather": ("INT", {"default": 20, "min": 0, "max": 100, "step": 1}), + "bbox_fill": ("BOOLEAN", {"default": False, "label_on": "enabled", "label_off": "disabled"}), + "contour_fill": ("BOOLEAN", {"default": True, "label_on": "enabled", "label_off": "disabled"}), + "scheduler_func_opt": ("SCHEDULER_FUNC",), + } + } + + RETURN_TYPES = ("IMAGE", "IMAGE", "IMAGE", "BASIC_PIPE", "BASIC_PIPE") + RETURN_NAMES = ("image", "cropped_refined", "cropped_enhanced_alpha", "basic_pipe", "refiner_basic_pipe_opt") + OUTPUT_IS_LIST = (False, True, True, False, False) + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Detailer" + + DESCRIPTION = "" + + def doit(self, image, mask, basic_pipe, guide_size, guide_size_for, max_size, mask_mode, + seed, steps, cfg, sampler_name, scheduler, denoise, + feather, crop_factor, drop_size, refiner_ratio, batch_size, cycle=1, + refiner_basic_pipe_opt=None, detailer_hook=None, inpaint_model=False, noise_mask_feather=0, + bbox_fill=False, contour_fill=True, scheduler_func_opt=None): + + if len(image) > 1: + raise Exception('[Impact Pack] ERROR: MaskDetailer does not allow image batches.\nPlease refer to https://github.com/ltdrdata/ComfyUI-extension-tutorials/blob/Main/ComfyUI-Impact-Pack/tutorial/batching-detailer.md for more information.') + + model, clip, vae, positive, negative = basic_pipe + + if refiner_basic_pipe_opt is None: + refiner_model, refiner_clip, refiner_positive, refiner_negative = None, None, None, None + else: + refiner_model, refiner_clip, _, refiner_positive, refiner_negative = refiner_basic_pipe_opt + + # create segs + if mask is not None: + mask = utils.make_2d_mask(mask) + segs = core.mask_to_segs(mask, False, crop_factor, bbox_fill, drop_size, is_contour=contour_fill) + else: + segs = ((image.shape[1], image.shape[2]), []) + + enhanced_img_batch = None + cropped_enhanced_list = [] + cropped_enhanced_alpha_list = [] + + for i in range(batch_size): + if mask is not None: + enhanced_img, _, cropped_enhanced, cropped_enhanced_alpha, _, _ = \ + DetailerForEach.do_detail(image, segs, model, clip, vae, guide_size, guide_size_for, max_size, seed+i, steps, + cfg, sampler_name, scheduler, positive, negative, denoise, feather, mask_mode, + force_inpaint=True, wildcard_opt=None, detailer_hook=detailer_hook, + refiner_ratio=refiner_ratio, refiner_model=refiner_model, refiner_clip=refiner_clip, + refiner_positive=refiner_positive, refiner_negative=refiner_negative, + cycle=cycle, inpaint_model=inpaint_model, noise_mask_feather=noise_mask_feather, scheduler_func_opt=scheduler_func_opt) + else: + enhanced_img, cropped_enhanced, cropped_enhanced_alpha = image, [], [] + + if enhanced_img_batch is None: + enhanced_img_batch = enhanced_img + else: + enhanced_img_batch = torch.cat((enhanced_img_batch, enhanced_img), dim=0) + + cropped_enhanced_list += cropped_enhanced + cropped_enhanced_alpha_list += cropped_enhanced_alpha + + # set fallback image + if len(cropped_enhanced_list) == 0: + cropped_enhanced_list = [utils.empty_pil_tensor()] + + if len(cropped_enhanced_alpha_list) == 0: + cropped_enhanced_alpha_list = [utils.empty_pil_tensor()] + + return enhanced_img_batch, cropped_enhanced_list, cropped_enhanced_alpha_list, basic_pipe, refiner_basic_pipe_opt + + +class DetailerForEachTest(DetailerForEach): + RETURN_TYPES = ("IMAGE", "IMAGE", "IMAGE", "IMAGE", "IMAGE") + RETURN_NAMES = ("image", "cropped", "cropped_refined", "cropped_refined_alpha", "cnet_images") + OUTPUT_IS_LIST = (False, True, True, True, True) + + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Detailer" + + def doit(self, image, segs, model, clip, vae, guide_size, guide_size_for, max_size, seed, steps, cfg, sampler_name, + scheduler, positive, negative, denoise, feather, noise_mask, force_inpaint, wildcard, detailer_hook=None, + cycle=1, inpaint_model=False, noise_mask_feather=0, scheduler_func_opt=None, tiled_encode=False, tiled_decode=False): + + if len(image) > 1: + raise Exception('[Impact Pack] ERROR: DetailerForEach does not allow image batches.\nPlease refer to https://github.com/ltdrdata/ComfyUI-extension-tutorials/blob/Main/ComfyUI-Impact-Pack/tutorial/batching-detailer.md for more information.') + + enhanced_img, cropped, cropped_enhanced, cropped_enhanced_alpha, cnet_pil_list, new_segs = \ + DetailerForEach.do_detail(image, segs, model, clip, vae, guide_size, guide_size_for, max_size, seed, steps, + cfg, sampler_name, scheduler, positive, negative, denoise, feather, noise_mask, + force_inpaint, wildcard, detailer_hook, + cycle=cycle, inpaint_model=inpaint_model, noise_mask_feather=noise_mask_feather, + scheduler_func_opt=scheduler_func_opt, tiled_encode=tiled_encode, tiled_decode=tiled_decode) + + # set fallback image + if len(cropped) == 0: + cropped = [utils.empty_pil_tensor()] + + if len(cropped_enhanced) == 0: + cropped_enhanced = [utils.empty_pil_tensor()] + + if len(cropped_enhanced_alpha) == 0: + cropped_enhanced_alpha = [utils.empty_pil_tensor()] + + if len(cnet_pil_list) == 0: + cnet_pil_list = [utils.empty_pil_tensor()] + + return enhanced_img, cropped, cropped_enhanced, cropped_enhanced_alpha, cnet_pil_list + + +class DetailerForEachTestPipe(DetailerForEachPipe): + RETURN_TYPES = ("IMAGE", "SEGS", "BASIC_PIPE", "IMAGE", "IMAGE", "IMAGE", "IMAGE", ) + RETURN_NAMES = ("image", "segs", "basic_pipe", "cropped", "cropped_refined", "cropped_refined_alpha", 'cnet_images') + OUTPUT_IS_LIST = (False, False, False, True, True, True, True) + + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Detailer" + + DESCRIPTION = DetailerForEach.DESCRIPTION + + def doit(self, image, segs, guide_size, guide_size_for, max_size, seed, steps, cfg, sampler_name, scheduler, + denoise, feather, noise_mask, force_inpaint, basic_pipe, wildcard, cycle=1, + refiner_ratio=None, detailer_hook=None, refiner_basic_pipe_opt=None, inpaint_model=False, noise_mask_feather=0, + scheduler_func_opt=None, tiled_encode=False, tiled_decode=False): + + if len(image) > 1: + raise Exception('[Impact Pack] ERROR: DetailerForEach does not allow image batches.\nPlease refer to https://github.com/ltdrdata/ComfyUI-extension-tutorials/blob/Main/ComfyUI-Impact-Pack/tutorial/batching-detailer.md for more information.') + + model, clip, vae, positive, negative = basic_pipe + + if refiner_basic_pipe_opt is None: + refiner_model, refiner_clip, refiner_positive, refiner_negative = None, None, None, None + else: + refiner_model, refiner_clip, _, refiner_positive, refiner_negative = refiner_basic_pipe_opt + + enhanced_img, cropped, cropped_enhanced, cropped_enhanced_alpha, cnet_pil_list, new_segs = \ + DetailerForEach.do_detail(image, segs, model, clip, vae, guide_size, guide_size_for, max_size, seed, steps, cfg, + sampler_name, scheduler, positive, negative, denoise, feather, noise_mask, + force_inpaint, wildcard, detailer_hook, + refiner_ratio=refiner_ratio, refiner_model=refiner_model, + refiner_clip=refiner_clip, refiner_positive=refiner_positive, + refiner_negative=refiner_negative, + cycle=cycle, inpaint_model=inpaint_model, noise_mask_feather=noise_mask_feather, + scheduler_func_opt=scheduler_func_opt, tiled_encode=tiled_encode, tiled_decode=tiled_decode) + + # set fallback image + if len(cropped) == 0: + cropped = [utils.empty_pil_tensor()] + + if len(cropped_enhanced) == 0: + cropped_enhanced = [utils.empty_pil_tensor()] + + if len(cropped_enhanced_alpha) == 0: + cropped_enhanced_alpha = [utils.empty_pil_tensor()] + + if len(cnet_pil_list) == 0: + cnet_pil_list = [utils.empty_pil_tensor()] + + return enhanced_img, new_segs, basic_pipe, cropped, cropped_enhanced, cropped_enhanced_alpha, cnet_pil_list + + +class SegsBitwiseAndMask: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "segs": ("SEGS",), + "mask": ("MASK",), + } + } + + RETURN_TYPES = ("SEGS",) + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Operation" + + def doit(self, segs, mask): + return (core.segs_bitwise_and_mask(segs, mask), ) + + +class SegsBitwiseAndMaskForEach: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "segs": ("SEGS",), + "masks": ("MASK",), + } + } + + RETURN_TYPES = ("SEGS",) + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Operation" + + def doit(self, segs, masks): + return (core.apply_mask_to_each_seg(segs, masks), ) + + +class BitwiseAndMaskForEach: + @classmethod + def INPUT_TYPES(s): + return {"required": + { + "base_segs": ("SEGS",), + "mask_segs": ("SEGS",), + } + } + + RETURN_TYPES = ("SEGS",) + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Operation" + + DESCRIPTION = "Retains only the overlapping areas between the masks included in base_segs and the mask regions of mask_segs. SEGS with no overlapping mask areas are filtered out." + + def doit(self, base_segs, mask_segs): + mask = core.segs_to_combined_mask(mask_segs) + mask = utils.make_3d_mask(mask) + + return SegsBitwiseAndMask().doit(base_segs, mask) + + +class SubtractMaskForEach: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "base_segs": ("SEGS",), + "mask_segs": ("SEGS",), + } + } + + RETURN_TYPES = ("SEGS",) + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Operation" + + DESCRIPTION = "Removes only the overlapping areas between the masks included in base_segs and the mask regions of mask_segs. SEGS with no overlapping mask areas are filtered out." + + def doit(self, base_segs, mask_segs): + mask = core.segs_to_combined_mask(mask_segs) + mask = utils.make_3d_mask(mask) + return (core.segs_bitwise_subtract_mask(base_segs, mask), ) + + +class ToBinaryMask: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "mask": ("MASK",), + "threshold": ("INT", {"default": 20, "min": 1, "max": 255}), + } + } + + RETURN_TYPES = ("MASK",) + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Operation" + + def doit(self, mask, threshold): + mask = utils.to_binary_mask(mask, threshold/255.0) + return (mask,) + + +class FlattenMask: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "masks": ("MASK",), + } + } + + RETURN_TYPES = ("MASK",) + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Operation" + + def doit(self, masks): + masks = utils.make_3d_mask(masks) + masks = utils.flatten_mask(masks) + return (masks,) + + +class BitwiseAndMask: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "mask1": ("MASK",), + "mask2": ("MASK",), + } + } + + RETURN_TYPES = ("MASK",) + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Operation" + + def doit(self, mask1, mask2): + mask = utils.bitwise_and_masks(mask1, mask2) + return (mask,) + + +class SubtractMask: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "mask1": ("MASK", ), + "mask2": ("MASK", ), + } + } + + RETURN_TYPES = ("MASK",) + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Operation" + + def doit(self, mask1, mask2): + mask = utils.subtract_masks(mask1, mask2) + return (mask,) + + +class AddMask: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "mask1": ("MASK",), + "mask2": ("MASK",), + } + } + + RETURN_TYPES = ("MASK",) + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Operation" + + def doit(self, mask1, mask2): + mask = utils.add_masks(mask1, mask2) + return (mask,) + + +def get_image_hash(arr): + split_index1 = arr.shape[0] // 2 + split_index2 = arr.shape[1] // 2 + part1 = arr[:split_index1, :split_index2] + part2 = arr[:split_index1, split_index2:] + part3 = arr[split_index1:, :split_index2] + part4 = arr[split_index1:, split_index2:] + + # 각 부분을 합산 + sum1 = np.sum(part1) + sum2 = np.sum(part2) + sum3 = np.sum(part3) + sum4 = np.sum(part4) + + return hash((sum1, sum2, sum3, sum4)) + + +def get_file_item(base_type, path): + path_type = base_type + + if path == "[output]": + path_type = "output" + path = path[:-9] + elif path == "[input]": + path_type = "input" + path = path[:-8] + elif path == "[temp]": + path_type = "temp" + path = path[:-7] + + subfolder = os.path.dirname(path) + filename = os.path.basename(path) + + return { + "filename": filename, + "subfolder": subfolder, + "type": path_type + } + + +class MaskRectArea: + # Creates a rectangle mask using percentage. + def __init__(self): + pass + + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + # Added typed INT inputs so this node can be driven by other INT nodes. + "x": ("INT", {"default": 0, "min": 0, "max": 100, "step": 1}), + "y": ("INT", {"default": 0, "min": 0, "max": 100, "step": 1}), + "width": ("INT", {"default": 50, "min": 0, "max": 100, "step": 1}), + "height": ("INT", {"default": 50, "min": 0, "max": 100, "step": 1}), + "blur_radius": ("INT", {"default": 0, "min": 0, "step": 1}) + }, + "hidden": {"extra_pnginfo": "EXTRA_PNGINFO", "unique_id": "UNIQUE_ID"} + } + + RETURN_TYPES = ("MASK",) + + CATEGORY = "ImpactPack/Operation" + FUNCTION = "create_mask" + + def create_mask(self, x, y, width, height, blur_radius, extra_pnginfo, unique_id): + # Backward-compat: if node properties exist in workflow, prefer them. + try: + for node in extra_pnginfo["workflow"]["nodes"]: + if str(node["id"]) == str(unique_id): + props = node.get("properties", {}) + x = int(props.get("x", x)) + y = int(props.get("y", y)) + width = int(props.get("w", width)) + height = int(props.get("h", height)) + blur_radius = int(props.get("blur_radius", blur_radius)) + break + except Exception: + pass + + # Clamp percent inputs + if x < 0: + x = 0 + if y < 0: + y = 0 + if width < 0: + width = 0 + if height < 0: + height = 0 + if x > 100: + x = 100 + if y > 100: + y = 100 + if width > 100: + width = 100 + if height > 100: + height = 100 + + # Convert percent to ratio + min_x = x / 100.0 + min_y = y / 100.0 + w_ratio = width / 100.0 + h_ratio = height / 100.0 + + # Create a mask with standard resolution (e.g., 512x512) + resolution = 512 + mask = torch.zeros((resolution, resolution), dtype=torch.float32) + + # Calculate pixel coordinates + min_x_px = int(min_x * resolution) + min_y_px = int(min_y * resolution) + max_x_px = int((min_x + w_ratio) * resolution) + max_y_px = int((min_y + h_ratio) * resolution) + + # Clamp pixel bounds + if min_x_px < 0: + min_x_px = 0 + if min_y_px < 0: + min_y_px = 0 + if max_x_px > resolution: + max_x_px = resolution + if max_y_px > resolution: + max_y_px = resolution + + # Draw the rectangle on the mask + if max_x_px > min_x_px and max_y_px > min_y_px: + mask[min_y_px:max_y_px, min_x_px:max_x_px] = 1.0 + + # Apply blur if the radii are greater than 0 + if blur_radius > 0: + dx = blur_radius * 2 + 1 + dy = blur_radius * 2 + 1 + + # Convert the mask to a format compatible with OpenCV (numpy array) + mask_np = mask.cpu().numpy().astype("float32") + + # Apply Gaussian Blur + blurred_mask = cv2.GaussianBlur(mask_np, (dx, dy), 0) + + # Convert back to tensor + mask = torch.from_numpy(blurred_mask) + + # Return the mask as a tensor with an additional channel + return (mask.unsqueeze(0),) + + +class MaskRectAreaAdvanced: + # Creates a rectangle mask using pixels relative to image size. + def __init__(self): + pass + + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + "x": ("INT", {"default": 0, "min": 0, "step": 1}), + "y": ("INT", {"default": 0, "min": 0, "step": 1}), + "width": ("INT", {"default": 256, "min": 0, "step": 1}), + "height": ("INT", {"default": 320, "min": 0, "step": 1}), + "image_width": ("INT", {"default": 512, "min": 1, "step": 1}), + "image_height": ("INT", {"default": 320, "min": 1, "step": 1}), + "blur_radius": ("INT", {"default": 0, "min": 0, "step": 1}) + }, + "hidden": {"extra_pnginfo": "EXTRA_PNGINFO", "unique_id": "UNIQUE_ID"} + } + + RETURN_TYPES = ("MASK",) + + CATEGORY = "ImpactPack/Operation" + FUNCTION = "create_mask_advanced" + + def create_mask_advanced(self, x, y, width, height, image_width, image_height, blur_radius, extra_pnginfo, unique_id): + # Backward-compat fallback: if node properties exist in workflow, prefer them + try: + for node in extra_pnginfo["workflow"]["nodes"]: + if node["id"] == int(unique_id): + props = node.get("properties", {}) + x = int(props.get("x", x)) + y = int(props.get("y", y)) + width = int(props.get("w", width)) + height = int(props.get("h", height)) + image_width = int(props.get("width", image_width)) + image_height = int(props.get("height", image_height)) + blur_radius = int(props.get("blur_radius", blur_radius)) + break + except Exception: + pass + + # Clamp to safe bounds + if image_width < 1: + image_width = 1 + if image_height < 1: + image_height = 1 + if width < 0: + width = 0 + if height < 0: + height = 0 + if x < 0: + x = 0 + if y < 0: + y = 0 + + max_x = min(x + width, image_width) + max_y = min(y + height, image_height) + + mask = torch.zeros((image_height, image_width), dtype=torch.float32) + + if max_x > x and max_y > y: + mask[y:max_y, x:max_x] = 1.0 + + # Apply blur if the radii are greater than 0 + if blur_radius > 0: + k = blur_radius * 2 + 1 + mask_np = mask.cpu().numpy().astype("float32") + blurred_mask = cv2.GaussianBlur(mask_np, (k, k), 0) + mask = torch.from_numpy(blurred_mask) + + # Return the mask as a tensor with an additional channel + return (mask.unsqueeze(0),) + + +class ImageReceiver: + @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))] + return {"required": { + "image": (sorted(files), ), + "link_id": ("INT", {"default": 0, "min": 0, "max": sys.maxsize, "step": 1}), + "save_to_workflow": ("BOOLEAN", {"default": False}), + "image_data": ("STRING", {"multiline": False}), + "trigger_always": ("BOOLEAN", {"default": False, "label_on": "enable", "label_off": "disable"}), + }, + } + + FUNCTION = "doit" + + RETURN_TYPES = ("IMAGE", "MASK") + + CATEGORY = "ImpactPack/Util" + + def doit(self, image, link_id, save_to_workflow, image_data, trigger_always): + if save_to_workflow: + try: + image_data = base64.b64decode(image_data.split(",")[1]) + i = Image.open(BytesIO(image_data)) + i = ImageOps.exif_transpose(i) + image = i.convert("RGB") + image = np.array(image).astype(np.float32) / 255.0 + image = torch.from_numpy(image)[None,] + if 'A' in i.getbands(): + mask = np.array(i.getchannel('A')).astype(np.float32) / 255.0 + mask = 1. - torch.from_numpy(mask) + else: + mask = torch.zeros((64, 64), dtype=torch.float32, device="cpu") + return image, mask.unsqueeze(0) + except Exception: + logging.warning("[WARN] ComfyUI-Impact-Pack: ImageReceiver - invalid 'image_data'") + mask = torch.zeros((64, 64), dtype=torch.float32, device="cpu") + return utils.empty_pil_tensor(64, 64), mask + else: + return nodes.LoadImage().load_image(image) + + @classmethod + def VALIDATE_INPUTS(s, image, link_id, save_to_workflow, image_data, trigger_always): + if image != '#DATA' and not folder_paths.exists_annotated_filepath(image) or image.startswith("/") or ".." in image: + return "Invalid image file: {}".format(image) + + return True + + @classmethod + def IS_CHANGED(s, image, link_id, save_to_workflow, image_data, trigger_always): + if trigger_always: + return float("NaN") + else: + if save_to_workflow: + return hash(image_data) + else: + return hash(image) + + +from server import PromptServer + +class ImageSender(nodes.PreviewImage): + @classmethod + def INPUT_TYPES(s): + return {"required": { + "images": ("IMAGE", ), + "filename_prefix": ("STRING", {"default": "ImgSender"}), + "link_id": ("INT", {"default": 0, "min": 0, "max": sys.maxsize, "step": 1}), }, + "hidden": {"prompt": "PROMPT", "extra_pnginfo": "EXTRA_PNGINFO"}, + } + + OUTPUT_NODE = True + + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Util" + + def doit(self, images, filename_prefix="ImgSender", link_id=0, prompt=None, extra_pnginfo=None): + result = nodes.PreviewImage().save_images(images, filename_prefix, prompt, extra_pnginfo) + PromptServer.instance.send_sync("img-send", {"link_id": link_id, "images": result['ui']['images']}) + return result + + +class LatentReceiver: + def __init__(self): + self.input_dir = folder_paths.get_input_directory() + self.type = "input" + + @classmethod + def INPUT_TYPES(s): + def check_file_extension(x): + return x.endswith(".latent") or x.endswith(".latent.png") + + 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 check_file_extension(f)] + return {"required": { + "latent": (sorted(files), ), + "link_id": ("INT", {"default": 0, "min": 0, "max": sys.maxsize, "step": 1}), + "trigger_always": ("BOOLEAN", {"default": False, "label_on": "enable", "label_off": "disable"}), + }, + } + + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Util" + + RETURN_TYPES = ("LATENT",) + + @staticmethod + def load_preview_latent(image_path): + if not os.path.exists(image_path): + return None + + image = Image.open(image_path) + exif_data = piexif.load(image.info["exif"]) + + if piexif.ExifIFD.UserComment in exif_data["Exif"]: + compressed_data = exif_data["Exif"][piexif.ExifIFD.UserComment] + compressed_data_io = BytesIO(compressed_data) + with zipfile.ZipFile(compressed_data_io, mode='r') as archive: + tensor_bytes = archive.read("latent") + tensor = safetensors.torch.load(tensor_bytes) + return {"samples": tensor['latent_tensor']} + return None + + def parse_filename(self, filename): + pattern = r"^(.*)/(.*?)\[(.*)\]\s*$" + match = re.match(pattern, filename) + if match: + subfolder = match.group(1) + filename = match.group(2).rstrip() + file_type = match.group(3) + else: + subfolder = '' + file_type = self.type + + return {'filename': filename, 'subfolder': subfolder, 'type': file_type} + + def doit(self, **kwargs): + if 'latent' not in kwargs: + return (torch.zeros([1, 4, 8, 8]), ) + + latent = kwargs['latent'] + + latent_name = latent + latent_path = folder_paths.get_annotated_filepath(latent_name) + + if latent.endswith(".latent"): + latent = safetensors.torch.load_file(latent_path, device="cpu") + multiplier = 1.0 + if "latent_format_version_0" not in latent: + multiplier = 1.0 / 0.18215 + samples = {"samples": latent["latent_tensor"].float() * multiplier} + else: + samples = LatentReceiver.load_preview_latent(latent_path) + + if samples is None: + samples = {'samples': torch.zeros([1, 4, 8, 8])} + + preview = self.parse_filename(latent_name) + + return { + 'ui': {"images": [preview]}, + 'result': (samples, ) + } + + @classmethod + def IS_CHANGED(s, latent, link_id, trigger_always): + if trigger_always: + return float("NaN") + else: + image_path = folder_paths.get_annotated_filepath(latent) + m = hashlib.sha256() + with open(image_path, 'rb') as f: + m.update(f.read()) + return m.digest().hex() + + @classmethod + def VALIDATE_INPUTS(s, latent, link_id, trigger_always): + if not folder_paths.exists_annotated_filepath(latent) or latent.startswith("/") or ".." in latent: + return "Invalid latent file: {}".format(latent) + return True + + +class LatentSender(nodes.SaveLatent): + def __init__(self): + super().__init__() + self.output_dir = folder_paths.get_temp_directory() + self.type = "temp" + + @classmethod + def INPUT_TYPES(s): + return {"required": { + "samples": ("LATENT", ), + "filename_prefix": ("STRING", {"default": "latents/LatentSender"}), + "link_id": ("INT", {"default": 0, "min": 0, "max": sys.maxsize, "step": 1}), + "preview_method": (["Latent2RGB-FLUX.1", + "Latent2RGB-SDXL", "Latent2RGB-SD15", "Latent2RGB-SD3", + "Latent2RGB-SD-X4", "Latent2RGB-Playground-2.5", + "Latent2RGB-SC-Prior", "Latent2RGB-SC-B", + "Latent2RGB-LTXV", + "TAEF1", "TAESDXL", "TAESD15", "TAESD3"],) + }, + "hidden": {"prompt": "PROMPT", "extra_pnginfo": "EXTRA_PNGINFO"}, + } + + OUTPUT_NODE = True + + RETURN_TYPES = () + + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Util" + + @staticmethod + def save_to_file(tensor_bytes, prompt, extra_pnginfo, image, image_path): + compressed_data = BytesIO() + with zipfile.ZipFile(compressed_data, mode='w') as archive: + archive.writestr("latent", tensor_bytes) + image = image.copy() + exif_data = {"Exif": {piexif.ExifIFD.UserComment: compressed_data.getvalue()}} + + metadata = PngInfo() + if prompt is not None: + metadata.add_text("prompt", json.dumps(prompt)) + if extra_pnginfo is not None: + for x in extra_pnginfo: + metadata.add_text(x, json.dumps(extra_pnginfo[x])) + + exif_bytes = piexif.dump(exif_data) + image.save(image_path, format='png', exif=exif_bytes, pnginfo=metadata, optimize=True) + + @staticmethod + def prepare_preview(latent_tensor, preview_method): + from comfy.cli_args import LatentPreviewMethod + import comfy.latent_formats as latent_formats + + lower_bound = 128 + upper_bound = 256 + + if preview_method == "Latent2RGB-SD15": + latent_format = latent_formats.SD15() + method = LatentPreviewMethod.Latent2RGB + elif preview_method == "Latent2RGB-SDXL": + latent_format = latent_formats.SDXL() + method = LatentPreviewMethod.Latent2RGB + elif preview_method == "Latent2RGB-SD3": + latent_format = latent_formats.SD3() + method = LatentPreviewMethod.Latent2RGB + elif preview_method == "Latent2RGB-SD-X4": + latent_format = latent_formats.SD_X4() + method = LatentPreviewMethod.Latent2RGB + elif preview_method == "Latent2RGB-Playground-2.5": + latent_format = latent_formats.SDXL_Playground_2_5() + method = LatentPreviewMethod.Latent2RGB + elif preview_method == "Latent2RGB-SC-Prior": + latent_format = latent_formats.SC_Prior() + method = LatentPreviewMethod.Latent2RGB + elif preview_method == "Latent2RGB-SC-B": + latent_format = latent_formats.SC_B() + method = LatentPreviewMethod.Latent2RGB + elif preview_method == "Latent2RGB-FLUX.1": + latent_format = latent_formats.Flux() + method = LatentPreviewMethod.Latent2RGB + elif preview_method == "Latent2RGB-LTXV": + latent_format = latent_formats.LTXV() + method = LatentPreviewMethod.Latent2RGB + else: + logging.warning(f"[Impact Pack] LatentSender: '{preview_method}' is unsupported preview method.") + latent_format = latent_formats.SD15() + method = LatentPreviewMethod.Latent2RGB + + previewer = core.get_previewer("cpu", latent_format=latent_format, force=True, method=method) + + image = previewer.decode_latent_to_preview(latent_tensor) + min_size = min(image.size[0], image.size[1]) + max_size = max(image.size[0], image.size[1]) + + scale_factor = 1 + if max_size > upper_bound: + scale_factor = upper_bound/max_size + + # prevent too small preview + if min_size*scale_factor < lower_bound: + scale_factor = lower_bound/min_size + + w = int(image.size[0] * scale_factor) + h = int(image.size[1] * scale_factor) + + image = image.resize((w, h), resample=Image.NEAREST) + + return LatentSender.attach_format_text(image) + + @staticmethod + def attach_format_text(image): + width_a, height_a = image.size + + letter_image = Image.open(latent_letter_path) + width_b, height_b = letter_image.size + + new_width = max(width_a, width_b) + new_height = height_a + height_b + + new_image = Image.new('RGB', (new_width, new_height), (0, 0, 0)) + + offset_x = (new_width - width_b) // 2 + offset_y = (height_a + (new_height - height_a - height_b) // 2) + new_image.paste(letter_image, (offset_x, offset_y)) + + new_image.paste(image, (0, 0)) + + return new_image + + def doit(self, samples, filename_prefix="latents/LatentSender", link_id=0, preview_method="Latent2RGB-SDXL", prompt=None, extra_pnginfo=None): + full_output_folder, filename, counter, subfolder, filename_prefix = folder_paths.get_save_image_path(filename_prefix, self.output_dir) + + # load preview + preview = LatentSender.prepare_preview(samples['samples'], preview_method) + + # support save metadata for latent sharing + file = f"{filename}_{counter:05}_.latent.png" + fullpath = os.path.join(full_output_folder, file) + + output = {"latent_tensor": samples["samples"]} + + tensor_bytes = safetensors.torch.save(output) + LatentSender.save_to_file(tensor_bytes, prompt, extra_pnginfo, preview, fullpath) + + latent_path = { + 'filename': file, + 'subfolder': subfolder, + 'type': self.type + } + + PromptServer.instance.send_sync("latent-send", {"link_id": link_id, "images": [latent_path]}) + + return {'ui': {'images': [latent_path]}} + + +class ImpactWildcardProcessor: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "wildcard_text": ("STRING", {"multiline": True, "dynamicPrompts": False, "tooltip": "Enter a prompt using wildcard syntax."}), + "populated_text": ("STRING", {"multiline": True, "dynamicPrompts": False, "tooltip": "The actual value passed during the execution of 'ImpactWildcardProcessor' is what is shown here. The behavior varies slightly depending on the mode. Wildcard syntax can also be used in 'populated_text'."}), + "mode": (["populate", "fixed", "reproduce"], {"default": "populate", "tooltip": + "populate: Before running the workflow, it overwrites the existing value of 'populated_text' with the prompt processed from 'wildcard_text'. In this mode, 'populated_text' cannot be edited.\n" + "fixed: Ignores wildcard_text and keeps 'populated_text' as is. You can edit 'populated_text' in this mode.\n" + "reproduce: This mode operates as 'fixed' mode only once for reproduction, and then it switches to 'populate' mode." + }), + "seed": ("INT", {"default": 0, "min": 0, "max": 0xffffffffffffffff, "tooltip": "Determines the random seed to be used for wildcard processing."}), + "Select to add Wildcard": (["Select the Wildcard to add to the text"],), + }, + } + + CATEGORY = "ImpactPack/Prompt" + + DESCRIPTION = ("The 'ImpactWildcardProcessor' processes text prompts written in wildcard syntax and outputs the processed text prompt.\n\n" + "TIP: Before the workflow is executed, the processing result of 'wildcard_text' is displayed in 'populated_text', and the populated text is saved along with the workflow. If you want to use a seed converted as input, write the prompt directly in 'populated_text' instead of 'wildcard_text', and set the mode to 'fixed'.") + + RETURN_TYPES = ("STRING", ) + RETURN_NAMES = ("processed text",) + FUNCTION = "doit" + + @staticmethod + def process(**kwargs): + return impact.wildcards.process(**kwargs) + + def doit(self, *args, **kwargs): + populated_text = ImpactWildcardProcessor.process(text=kwargs['populated_text'], seed=kwargs['seed']) + return (populated_text, ) + + +class ImpactWildcardEncode: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "model": ("MODEL",), + "clip": ("CLIP",), + "wildcard_text": ("STRING", {"multiline": True, "dynamicPrompts": False, "tooltip": "Enter a prompt using wildcard syntax."}), + "populated_text": ("STRING", {"multiline": True, "dynamicPrompts": False, "tooltip": "The actual value passed during the execution of 'ImpactWildcardEncode' is what is shown here. The behavior varies slightly depending on the mode. Wildcard syntax can also be used in 'populated_text'."}), + "mode": (["populate", "fixed", "reproduce"], {"tooltip": + "populate: Before running the workflow, it overwrites the existing value of 'populated_text' with the prompt processed from 'wildcard_text'. In this mode, 'populated_text' cannot be edited.\n" + "fixed: Ignores wildcard_text and keeps 'populated_text' as is. You can edit 'populated_text' in this mode\n." + "reproduce: This mode operates as 'fixed' mode only once for reproduction, and then it switches to 'populate' mode."}), + "Select to add LoRA": (["Select the LoRA to add to the text"] + folder_paths.get_filename_list("loras"), ), + "Select to add Wildcard": (["Select the Wildcard to add to the text"], ), + "seed": ("INT", {"default": 0, "min": 0, "max": 0xffffffffffffffff, "tooltip": "Determines the random seed to be used for wildcard processing."}), + }, + } + + CATEGORY = "ImpactPack/Prompt" + + DESCRIPTION = ("The 'ImpactWildcardEncode' node processes text prompts written in wildcard syntax and outputs them as conditioning. It also supports LoRA syntax, with the applied LoRA reflected in the model's output.\n\n" + "TIP1: Before the workflow is executed, the processing result of 'wildcard_text' is displayed in 'populated_text', and the populated text is saved along with the workflow. If you want to use a seed converted as input, write the prompt directly in 'populated_text' instead of 'wildcard_text', and set the mode to 'fixed'.\n" + "TIP2: If the 'Inspire Pack' is installed, LBW(LoRA Block Weight) syntax can also be applied.") + + RETURN_TYPES = ("MODEL", "CLIP", "CONDITIONING", "STRING") + RETURN_NAMES = ("model", "clip", "conditioning", "populated_text") + FUNCTION = "doit" + + @staticmethod + def process_with_loras(**kwargs): + return impact.wildcards.process_with_loras(**kwargs) + + @staticmethod + def get_wildcard_list(): + return impact.wildcards.get_wildcard_list() + + def doit(self, *args, **kwargs): + populated = kwargs['populated_text'] + processed = [] + model, clip, conditioning = impact.wildcards.process_with_loras(wildcard_opt=populated, model=kwargs['model'], clip=kwargs['clip'], seed=kwargs['seed'], processed=processed) + return model, clip, conditioning, processed[0] + + +class ImpactSchedulerAdapter: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "scheduler": (comfy.samplers.KSampler.SCHEDULERS, {"defaultInput": True, }), + "extra_scheduler": (['None', 'AYS SDXL', 'AYS SD1', 'AYS SVD', 'GITS[coeff=1.2]', 'LTXV[default]', 'OSS FLUX', 'OSS Wan', 'OSS Chroma'],), + }} + + CATEGORY = "ImpactPack/Util" + + RETURN_TYPES = (core.get_schedulers(),) + RETURN_NAMES = ("scheduler",) + + FUNCTION = "doit" + + def doit(self, scheduler, extra_scheduler): + if extra_scheduler != 'None': + return (extra_scheduler,) + + return (scheduler,) diff --git a/comfyui-impact-pack/modules/impact/impact_sampling.py b/comfyui-impact-pack/modules/impact/impact_sampling.py new file mode 100644 index 0000000000000000000000000000000000000000..06de0b572f1e2fc661514f5911b86f1de3790b0f --- /dev/null +++ b/comfyui-impact-pack/modules/impact/impact_sampling.py @@ -0,0 +1,323 @@ +import logging + +import nodes +from comfy.k_diffusion import sampling as k_diffusion_sampling +from comfy import samplers +from comfy_extras import nodes_custom_sampler +import latent_preview +import comfy +import torch +import math +import comfy.model_management as mm + + +try: + from comfy_extras.nodes_custom_sampler import Noise_EmptyNoise, Noise_RandomNoise + import node_helpers +except Exception: + logging.warning("\n#############################################\n[Impact Pack] ComfyUI is an outdated version.\n#############################################\n") + raise Exception("[Impact Pack] ComfyUI is an outdated version.") + + +def calculate_sigmas(model, sampler, scheduler, steps): + discard_penultimate_sigma = False + if sampler in ['dpm_2', 'dpm_2_ancestral', 'uni_pc', 'uni_pc_bh2']: + steps += 1 + discard_penultimate_sigma = True + + if scheduler.startswith('AYS'): + sigmas = nodes.NODE_CLASS_MAPPINGS['AlignYourStepsScheduler']().get_sigmas(scheduler[4:], steps, denoise=1.0)[0] + elif scheduler.startswith('GITS[coeff='): + sigmas = nodes.NODE_CLASS_MAPPINGS['GITSScheduler']().execute(float(scheduler[11:-1]), steps, denoise=1.0)[0] + elif scheduler == 'LTXV[default]': + sigmas = nodes.NODE_CLASS_MAPPINGS['LTXVScheduler']().execute(20, 2.05, 0.95, True, 0.1)[0] + elif scheduler.startswith('OSS'): + sigmas = nodes.NODE_CLASS_MAPPINGS['OptimalStepsScheduler']().execute(scheduler[4:], steps, denoise=1.0)[0] + else: + sigmas = samplers.calculate_sigmas(model.get_model_object("model_sampling"), scheduler, steps) + + if discard_penultimate_sigma: + sigmas = torch.cat([sigmas[:-2], sigmas[-1:]]) + return sigmas + + +def get_noise_sampler(x, cpu, total_sigmas, **kwargs): + if 'extra_args' in kwargs and 'seed' in kwargs['extra_args']: + sigma_min, sigma_max = total_sigmas[total_sigmas > 0].min(), total_sigmas.max() + seed = kwargs['extra_args'].get("seed", None) + return k_diffusion_sampling.BrownianTreeNoiseSampler(x, sigma_min, sigma_max, seed=seed, cpu=cpu) + return None + + +def ksampler(sampler_name, total_sigmas, extra_options={}, inpaint_options={}): + if sampler_name in ["dpmpp_sde", "dpmpp_sde_gpu", "dpmpp_2m_sde", "dpmpp_2m_sde_gpu", "dpmpp_3m_sde", "dpmpp_3m_sde_gpu"]: + if sampler_name == "dpmpp_sde": + orig_sampler_function = k_diffusion_sampling.sample_dpmpp_sde + elif sampler_name == "dpmpp_sde_gpu": + orig_sampler_function = k_diffusion_sampling.sample_dpmpp_sde_gpu + elif sampler_name == "dpmpp_2m_sde": + orig_sampler_function = k_diffusion_sampling.sample_dpmpp_2m_sde + elif sampler_name == "dpmpp_2m_sde_gpu": + orig_sampler_function = k_diffusion_sampling.sample_dpmpp_2m_sde_gpu + elif sampler_name == "dpmpp_3m_sde": + orig_sampler_function = k_diffusion_sampling.sample_dpmpp_3m_sde + elif sampler_name == "dpmpp_3m_sde_gpu": + orig_sampler_function = k_diffusion_sampling.sample_dpmpp_3m_sde_gpu + + def sampler_function_wrapper(model, x, sigmas, **kwargs): + if 'noise_sampler' not in kwargs: + kwargs['noise_sampler'] = get_noise_sampler(x, 'gpu' not in sampler_name, total_sigmas, **kwargs) + + return orig_sampler_function(model, x, sigmas, **kwargs) + + sampler_function = sampler_function_wrapper + + else: + return comfy.samplers.sampler_object(sampler_name) + + return samplers.KSAMPLER(sampler_function, extra_options, inpaint_options) + + +# modified version of SamplerCustom.sample +def sample_with_custom_noise(model, add_noise, noise_seed, cfg, positive, negative, sampler, sigmas, latent_image, noise=None, callback=None): + latent = latent_image + latent_image = latent["samples"] + + if hasattr(comfy.sample, 'fix_empty_latent_channels'): + latent_image = comfy.sample.fix_empty_latent_channels(model, latent_image) + + out = latent.copy() + out['samples'] = latent_image + + if noise is None: + if not add_noise: + noise = Noise_EmptyNoise().generate_noise(out) + else: + noise = Noise_RandomNoise(noise_seed).generate_noise(out) + + noise_mask = None + if "noise_mask" in latent: + noise_mask = latent["noise_mask"] + + x0_output = {} + preview_callback = latent_preview.prepare_callback(model, sigmas.shape[-1] - 1, x0_output) + + if callback is not None: + def touched_callback(step, x0, x, total_steps): + callback(step, x0, x, total_steps) + preview_callback(step, x0, x, total_steps) + else: + touched_callback = preview_callback + + disable_pbar = not comfy.utils.PROGRESS_BAR_ENABLED + + device = mm.get_torch_device() + + noise = noise.to(device) + latent_image = latent_image.to(device) + if noise_mask is not None: + noise_mask = noise_mask.to(device) + + if negative != 'NegativePlaceholder': + # This way is incompatible with Advanced ControlNet, yet. + # guider = comfy.samplers.CFGGuider(model) + # guider.set_conds(positive, negative) + # guider.set_cfg(cfg) + samples = comfy.sample.sample_custom(model, noise, cfg, sampler, sigmas, positive, negative, latent_image, + noise_mask=noise_mask, callback=touched_callback, + disable_pbar=disable_pbar, seed=noise_seed) + else: + guider = nodes_custom_sampler.Guider_Basic(model) + positive = node_helpers.conditioning_set_values(positive, {"guidance": cfg}) + guider.set_conds(positive) + samples = guider.sample(noise, latent_image, sampler, sigmas, denoise_mask=noise_mask, callback=touched_callback, disable_pbar=disable_pbar, seed=noise_seed) + + samples = samples.to(comfy.model_management.intermediate_device()) + + out["samples"] = samples + if "x0" in x0_output: + out_denoised = latent.copy() + out_denoised["samples"] = model.model.process_latent_out(x0_output["x0"].cpu()) + else: + out_denoised = out + return out, out_denoised + + +# When sampling one step at a time, it mitigates the problem. (especially for _sde series samplers) +def separated_sample(model, add_noise, seed, steps, cfg, sampler_name, scheduler, positive, negative, + latent_image, start_at_step, end_at_step, return_with_leftover_noise, sigma_ratio=1.0, sampler_opt=None, noise=None, callback=None, scheduler_func=None): + + if scheduler_func is not None: + total_sigmas = scheduler_func(model, sampler_name, steps) + else: + if sampler_opt is None: + total_sigmas = calculate_sigmas(model, sampler_name, scheduler, steps) + else: + total_sigmas = calculate_sigmas(model, "", scheduler, steps) + + sigmas = total_sigmas + + if end_at_step is not None and end_at_step < (len(total_sigmas) - 1): + sigmas = total_sigmas[:end_at_step + 1] + if not return_with_leftover_noise: + sigmas[-1] = 0 + + if start_at_step is not None: + if start_at_step < (len(sigmas) - 1): + sigmas = sigmas[start_at_step:] * sigma_ratio + else: + if latent_image is not None: + return latent_image + else: + return {'samples': torch.zeros_like(noise)} + + if sampler_opt is None: + impact_sampler = ksampler(sampler_name, total_sigmas) + else: + impact_sampler = sampler_opt + + if len(sigmas) == 0 or (len(sigmas) == 1 and sigmas[0] == 0): + return latent_image + + res = sample_with_custom_noise(model, add_noise, seed, cfg, positive, negative, impact_sampler, sigmas, latent_image, noise=noise, callback=callback) + + if return_with_leftover_noise: + return res[0] + else: + return res[1] + + +def impact_sample(model, seed, steps, cfg, sampler_name, scheduler, positive, negative, latent_image, denoise=1.0, sigma_ratio=1.0, sampler_opt=None, noise=None, scheduler_func=None): + advanced_steps = math.floor(steps / denoise) + start_at_step = advanced_steps - steps + end_at_step = start_at_step + steps + return separated_sample(model, True, seed, advanced_steps, cfg, sampler_name, scheduler, positive, negative, latent_image, + start_at_step, end_at_step, False, scheduler_func=scheduler_func) + + +def ksampler_wrapper(model, seed, steps, cfg, sampler_name, scheduler, positive, negative, latent_image, denoise, + refiner_ratio=None, refiner_model=None, refiner_clip=None, refiner_positive=None, refiner_negative=None, sigma_factor=1.0, noise=None, scheduler_func=None, sampler_opt=None): + + if refiner_ratio is None or refiner_model is None or refiner_clip is None or refiner_positive is None or refiner_negative is None: + # Use separated_sample instead of KSampler for `AYS scheduler` + # refined_latent = nodes.KSampler().sample(model, seed, steps, cfg, sampler_name, scheduler, positive, negative, latent_image, denoise * sigma_factor)[0] + + advanced_steps = math.floor(steps / denoise) + start_at_step = advanced_steps - steps + end_at_step = start_at_step + steps + + refined_latent = separated_sample(model, True, seed, advanced_steps, cfg, sampler_name, scheduler, + positive, negative, latent_image, start_at_step, end_at_step, False, + sigma_ratio=sigma_factor, sampler_opt=sampler_opt, noise=noise, scheduler_func=scheduler_func) + else: + advanced_steps = math.floor(steps / denoise) + start_at_step = advanced_steps - steps + end_at_step = start_at_step + math.floor(steps * (1.0 - refiner_ratio)) + + # print(f"pre: {start_at_step} .. {end_at_step} / {advanced_steps}") + temp_latent = separated_sample(model, True, seed, advanced_steps, cfg, sampler_name, scheduler, + positive, negative, latent_image, start_at_step, end_at_step, True, + sigma_ratio=sigma_factor, sampler_opt=sampler_opt, noise=noise, scheduler_func=scheduler_func) + + if 'noise_mask' in latent_image: + # noise_latent = \ + # impact_sampling.separated_sample(refiner_model, "enable", seed, advanced_steps, cfg, sampler_name, + # scheduler, refiner_positive, refiner_negative, latent_image, end_at_step, + # end_at_step, "enable") + + latent_compositor = nodes.NODE_CLASS_MAPPINGS['LatentCompositeMasked']() + temp_latent = latent_compositor.composite(latent_image, temp_latent, 0, 0, False, latent_image['noise_mask'])[0] + + # print(f"post: {end_at_step} .. {advanced_steps + 1} / {advanced_steps}") + refined_latent = separated_sample(refiner_model, False, seed, advanced_steps, cfg, sampler_name, scheduler, + refiner_positive, refiner_negative, temp_latent, end_at_step, advanced_steps + 1, False, + sigma_ratio=sigma_factor, sampler_opt=sampler_opt, scheduler_func=scheduler_func) + + return refined_latent + + +class KSamplerAdvancedWrapper: + params = None + + def __init__(self, model, cfg, sampler_name, scheduler, positive, negative, sampler_opt=None, sigma_factor=1.0, scheduler_func=None): + self.params = model, cfg, sampler_name, scheduler, positive, negative, sigma_factor + self.sampler_opt = sampler_opt + self.scheduler_func = scheduler_func + + def clone_with_conditionings(self, positive, negative): + model, cfg, sampler_name, scheduler, _, _, _ = self.params + return KSamplerAdvancedWrapper(model, cfg, sampler_name, scheduler, positive, negative, self.sampler_opt) + + def sample_advanced(self, add_noise, seed, steps, latent_image, start_at_step, end_at_step, return_with_leftover_noise, hook=None, + recovery_mode="ratio additional", recovery_sampler="AUTO", recovery_sigma_ratio=1.0, noise=None): + + model, cfg, sampler_name, scheduler, positive, negative, sigma_factor = self.params + # steps, start_at_step, end_at_step = self.compensate_denoise(steps, start_at_step, end_at_step) + + if hook is not None: + model, seed, steps, cfg, sampler_name, scheduler, positive, negative, upscaled_latent = hook.pre_ksample_advanced(model, add_noise, seed, steps, cfg, sampler_name, scheduler, + positive, negative, latent_image, start_at_step, end_at_step, + return_with_leftover_noise) + + if recovery_mode != 'DISABLE' and sampler_name in ['uni_pc', 'uni_pc_bh2', 'dpmpp_sde', 'dpmpp_sde_gpu', 'dpmpp_2m_sde', 'dpmpp_2m_sde_gpu', 'dpmpp_3m_sde', 'dpmpp_3m_sde_gpu']: + base_image = latent_image.copy() + if recovery_mode == "ratio between": + sigma_ratio = 1.0 - recovery_sigma_ratio + else: + sigma_ratio = 1.0 + else: + base_image = None + sigma_ratio = 1.0 + + try: + if sigma_ratio > 0: + latent_image = separated_sample(model, add_noise, seed, steps, cfg, sampler_name, scheduler, + positive, negative, latent_image, start_at_step, end_at_step, + return_with_leftover_noise, sigma_ratio=sigma_ratio * sigma_factor, + sampler_opt=self.sampler_opt, noise=noise, scheduler_func=self.scheduler_func) + except ValueError as e: + if str(e) == 'sigma_min and sigma_max must not be 0': + logging.warning("\nWARN: sampling skipped - sigma_min and sigma_max are 0") + return latent_image + + if (recovery_sigma_ratio > 0 and recovery_mode != 'DISABLE' and + sampler_name in ['uni_pc', 'uni_pc_bh2', 'dpmpp_sde', 'dpmpp_sde_gpu', 'dpmpp_2m_sde', 'dpmpp_2m_sde_gpu', 'dpmpp_3m_sde', 'dpmpp_3m_sde_gpu']): + compensate = 0 if sampler_name in ['uni_pc', 'uni_pc_bh2', 'dpmpp_sde', 'dpmpp_sde_gpu', 'dpmpp_2m_sde', 'dpmpp_2m_sde_gpu', 'dpmpp_3m_sde', 'dpmpp_3m_sde_gpu'] else 2 + if recovery_sampler == "AUTO": + recovery_sampler = 'dpm_fast' if sampler_name in ['uni_pc', 'uni_pc_bh2', 'dpmpp_sde', 'dpmpp_sde_gpu'] else 'dpmpp_2m' + + latent_compositor = nodes.NODE_CLASS_MAPPINGS['LatentCompositeMasked']() + + noise_mask = latent_image['noise_mask'] + + if len(noise_mask.shape) == 4: + noise_mask = noise_mask.squeeze(0).squeeze(0) + + latent_image = latent_compositor.composite(base_image, latent_image, 0, 0, False, noise_mask)[0] + + try: + latent_image = separated_sample(model, add_noise, seed, steps, cfg, recovery_sampler, scheduler, + positive, negative, latent_image, start_at_step-compensate, end_at_step, return_with_leftover_noise, + sigma_ratio=recovery_sigma_ratio * sigma_factor, sampler_opt=self.sampler_opt, scheduler_func=self.scheduler_func) + except ValueError as e: + if str(e) == 'sigma_min and sigma_max must not be 0': + logging.warning("\nWARN: sampling skipped - sigma_min and sigma_max are 0") + + return latent_image + + +class KSamplerWrapper: + params = None + + def __init__(self, model, seed, steps, cfg, sampler_name, scheduler, positive, negative, denoise, scheduler_func=None): + self.params = model, seed, steps, cfg, sampler_name, scheduler, positive, negative, denoise + self.scheduler_func = scheduler_func + + def sample(self, latent_image, hook=None): + model, seed, steps, cfg, sampler_name, scheduler, positive, negative, denoise = self.params + + if hook is not None: + model, seed, steps, cfg, sampler_name, scheduler, positive, negative, upscaled_latent, denoise = \ + hook.pre_ksample(model, seed, steps, cfg, sampler_name, scheduler, positive, negative, latent_image, denoise) + + return impact_sample(model, seed, steps, cfg, sampler_name, scheduler, positive, negative, latent_image, denoise, scheduler_func=self.scheduler_func) diff --git a/comfyui-impact-pack/modules/impact/impact_server.py b/comfyui-impact-pack/modules/impact/impact_server.py new file mode 100644 index 0000000000000000000000000000000000000000..af20f1169ee1f134eab10663cd682d60d278263a --- /dev/null +++ b/comfyui-impact-pack/modules/impact/impact_server.py @@ -0,0 +1,619 @@ +import io +import logging +import os +import random +import threading +import traceback +from io import BytesIO + +import comfy +import folder_paths +import impact +import impact.core as core +import impact.impact_pack as impact_pack +import impact.utils as utils +import nodes +import numpy as np +import torchvision +from aiohttp import web +from impact.utils import to_tensor +from PIL import Image +from segment_anything import SamPredictor, sam_model_registry +from server import PromptServer + +sam_predictor = None +default_sam_model_name = os.path.join(impact_pack.model_path, "sams", "sam_vit_b_01ec64.pth") + +sam_lock = threading.Condition() + +last_prepare_data = None + + +def async_prepare_sam(image_dir, model_name, filename): + with sam_lock: + global sam_predictor + + if 'vit_h' in model_name: + model_kind = 'vit_h' + elif 'vit_l' in model_name: + model_kind = 'vit_l' + else: + model_kind = 'vit_b' + + sam_model = sam_model_registry[model_kind](checkpoint=model_name) + sam_predictor = SamPredictor(sam_model) + + image_path = os.path.join(image_dir, filename) + image = nodes.LoadImage().load_image(image_path)[0] + image = np.clip(255. * image.cpu().numpy().squeeze(), 0, 255).astype(np.uint8) + + if impact.config.get_config()['sam_editor_cpu']: + device = 'cpu' + else: + device = comfy.model_management.get_torch_device() + + sam_predictor.model.to(device=device) + sam_predictor.set_image(image, "RGB") + sam_predictor.model.cpu() + + +@PromptServer.instance.routes.post("/sam/prepare") +async def sam_prepare(request): + global sam_predictor + global last_prepare_data + data = await request.json() + + with sam_lock: + if last_prepare_data is not None and last_prepare_data == data: + # already loaded: skip -- prevent redundant loading + return web.Response(status=200) + + last_prepare_data = data + + model_name = 'sam_vit_b_01ec64.pth' + if data['sam_model_name'] == 'auto': + model_name = impact.config.get_config()['sam_editor_model'] + + model_path = folder_paths.get_full_path("sams", model_name) + + if model_path is None: + logging.error(f"[Impact Pack] The '{model_name}' model file cannot be found in any sams model path.") + return web.Response(status=400) + + logging.info(f"[Impact Pack] Loading SAM model '{model_path}'") + + filename, image_dir = folder_paths.annotated_filepath(data["filename"]) + + if image_dir is None: + typ = data['type'] if data['type'] != '' else 'output' + image_dir = folder_paths.get_directory_by_type(typ) + if data['subfolder'] is not None and data['subfolder'] != '': + image_dir += f"/{data['subfolder']}" + + if image_dir is None: + return web.Response(status=400) + + thread = threading.Thread(target=async_prepare_sam, args=(image_dir, model_path, filename,)) + thread.start() + + logging.info("[Impact Pack] SAM model loaded. ") + return web.Response(status=200) + + +@PromptServer.instance.routes.post("/sam/release") +async def release_sam(request): + global sam_predictor + + with sam_lock: + temp = sam_predictor + del temp + sam_predictor = None + + logging.info("[Impact Pack]: unloading SAM model") + + +@PromptServer.instance.routes.post("/sam/detect") +async def sam_detect(request): + global sam_predictor + with sam_lock: + if sam_predictor is not None: + if impact.config.get_config()['sam_editor_cpu']: + device = 'cpu' + else: + device = comfy.model_management.get_torch_device() + + sam_predictor.model.to(device=device) + try: + data = await request.json() + + positive_points = data['positive_points'] + negative_points = data['negative_points'] + threshold = data['threshold'] + + points = [] + plabs = [] + + for p in positive_points: + points.append(p) + plabs.append(1) + + for p in negative_points: + points.append(p) + plabs.append(0) + + detected_masks = core.sam_predict(sam_predictor, points, plabs, None, threshold) + mask = utils.combine_masks2(detected_masks) + + if mask is None: + return web.Response(status=400) + + image = mask.reshape((-1, 1, mask.shape[-2], mask.shape[-1])).movedim(1, -1).expand(-1, -1, -1, 3) + i = 255. * image.cpu().numpy() + + img = Image.fromarray(np.clip(i[0], 0, 255).astype(np.uint8)) + + img_buffer = io.BytesIO() + img.save(img_buffer, format='png') + + headers = {'Content-Type': 'image/png'} + finally: + sam_predictor.model.to(device="cpu") + + return web.Response(body=img_buffer.getvalue(), headers=headers) + + else: + return web.Response(status=400) + + +@PromptServer.instance.routes.get("/impact/wildcards/refresh") +async def wildcards_refresh(request): + impact.wildcards.wildcard_load() + return web.Response(status=200) + + +@PromptServer.instance.routes.get("/impact/wildcards/list") +async def wildcards_list(request): + data = {'data': impact.wildcards.get_wildcard_list()} + return web.json_response(data) + + +@PromptServer.instance.routes.get("/impact/wildcards/list/loaded") +async def wildcards_list_loaded(request): + """ + Get list of actually loaded wildcards (progressive loading in on-demand mode). + + Returns: + - In on-demand mode: only wildcards that have been loaded into memory + - In full cache mode: same as /wildcards/list (all wildcards) + """ + data = { + 'data': impact.wildcards.get_loaded_wildcard_list(), + 'on_demand_mode': impact.wildcards.is_on_demand_mode(), + 'total_available': len(impact.wildcards.available_wildcards) if impact.wildcards.is_on_demand_mode() else len(impact.wildcards.wildcard_dict) + } + return web.json_response(data) + + +@PromptServer.instance.routes.post("/impact/wildcards") +async def populate_wildcards(request): + data = await request.json() + populated = impact.wildcards.process(data['text'], data.get('seed', None)) + return web.json_response({"text": populated}) + + +segs_picker_map = {} + +@PromptServer.instance.routes.get("/impact/segs/picker/count") +async def segs_picker_count(request): + node_id = request.rel_url.query.get('id', '') + + if node_id in segs_picker_map: + res = len(segs_picker_map[node_id]) + return web.Response(status=200, text=str(res)) + + return web.Response(status=400) + + +@PromptServer.instance.routes.get("/impact/segs/picker/view") +async def segs_picker(request): + node_id = request.rel_url.query.get('id', '') + idx = int(request.rel_url.query.get('idx', '')) + + if node_id in segs_picker_map and idx < len(segs_picker_map[node_id]): + img = to_tensor(segs_picker_map[node_id][idx]).permute(0, 3, 1, 2).squeeze(0) + pil = torchvision.transforms.ToPILImage('RGB')(img) + + image_bytes = BytesIO() + pil.save(image_bytes, format="PNG") + image_bytes.seek(0) + return web.Response(status=200, body=image_bytes, content_type='image/png', headers={"Content-Disposition": f"filename={node_id}{idx}.png"}) + + return web.Response(status=400) + + +@PromptServer.instance.routes.get("/view/validate") +async def view_validate(request): + if "filename" in request.rel_url.query: + filename = request.rel_url.query["filename"] + subfolder = request.rel_url.query["subfolder"] + filename, base_dir = folder_paths.annotated_filepath(filename) + + if filename == '' or filename[0] == '/' or '..' in filename: + return web.Response(status=400) + + if base_dir is None: + base_dir = folder_paths.get_input_directory() + + file = os.path.join(base_dir, subfolder, filename) + + if os.path.isfile(file): + return web.Response(status=200) + + return web.Response(status=400) + + +@PromptServer.instance.routes.get("/impact/validate/pb_id_image") +async def view_pb_id_image(request): + if "id" in request.rel_url.query: + pb_id = request.rel_url.query["id"] + + if pb_id not in core.preview_bridge_image_id_map: + return web.Response(status=400) + + file = core.preview_bridge_image_id_map[pb_id] + if os.path.isfile(file): + return web.Response(status=200) + + return web.Response(status=400) + + +@PromptServer.instance.routes.get("/impact/set/pb_id_image") +async def set_previewbridge_image(request): + try: + if "filename" in request.rel_url.query: + node_id = request.rel_url.query["node_id"] + filename = request.rel_url.query["filename"] + path_type = request.rel_url.query["type"] + subfolder = request.rel_url.query["subfolder"] + filename, output_dir = folder_paths.annotated_filepath(filename) + + if filename == '' or filename[0] == '/' or '..' in filename: + return web.Response(status=400) + + if output_dir is None: + if path_type == 'input': + output_dir = folder_paths.get_input_directory() + elif path_type == 'output': + output_dir = folder_paths.get_output_directory() + else: + output_dir = folder_paths.get_temp_directory() + + file = os.path.join(output_dir, subfolder, filename) + item = { + 'filename': filename, + 'type': path_type, + 'subfolder': subfolder, + } + pb_id = core.set_previewbridge_image(node_id, file, item) + + return web.Response(status=200, text=pb_id) + except Exception: + traceback.print_exc() + + return web.Response(status=400) + + +@PromptServer.instance.routes.get("/impact/get/pb_id_image") +async def get_previewbridge_image(request): + if "id" in request.rel_url.query: + pb_id = request.rel_url.query["id"] + + if pb_id in core.preview_bridge_image_id_map: + _, path_item = core.preview_bridge_image_id_map[pb_id] + return web.json_response(path_item) + + return web.Response(status=400) + + +@PromptServer.instance.routes.get("/impact/view/pb_id_image") +async def view_previewbridge_image(request): + if "id" in request.rel_url.query: + pb_id = request.rel_url.query["id"] + + if pb_id in core.preview_bridge_image_id_map: + file = core.preview_bridge_image_id_map[pb_id] + + with Image.open(file): + filename = os.path.basename(file) + return web.FileResponse(file, headers={"Content-Disposition": f"filename=\"{filename}\""}) + + return web.Response(status=400) + + +def onprompt_for_switch(json_data): + inversed_switch_info = {} + onprompt_switch_info = {} + onprompt_cond_branch_info = {} + disabled_switch = set() + + + for k, v in json_data['prompt'].items(): + if 'class_type' not in v: + continue + + cls = v['class_type'] + if cls == 'ImpactInversedSwitch': + # if 'sel_mode' is 'select_on_prompt' + if 'sel_mode' in v['inputs'] and v['inputs']['sel_mode'] and 'select' in v['inputs']: + select_input = v['inputs']['select'] + # if 'select' is converted input + if isinstance(select_input, list) and len(select_input) == 2: + input_node = json_data['prompt'][select_input[0]] + if input_node['class_type'] == 'ImpactInt' and 'inputs' in input_node and 'value' in input_node['inputs']: + inversed_switch_info[k] = input_node['inputs']['value'] + else: + logging.warning(f"\n##### ##### #####\n[Impact Pack] {cls}: For the 'select' operation, only 'select_index' of the 'ImpactInversedSwitch', which is not an input, or 'ImpactInt' and 'Primitive' are allowed as inputs if 'select_on_prompt' is selected.\n##### ##### #####\n") + else: + inversed_switch_info[k] = select_input + + elif cls in ['ImpactSwitch', 'LatentSwitch', 'SEGSSwitch', 'ImpactMakeImageList']: + # if 'sel_mode' is 'select_on_prompt' + if 'sel_mode' in v['inputs'] and v['inputs']['sel_mode'] and 'select' in v['inputs']: + select_input = v['inputs']['select'] + # if 'select' is converted input + if isinstance(select_input, list) and len(select_input) == 2: + input_node = json_data['prompt'][select_input[0]] + if input_node['class_type'] == 'ImpactInt' and 'inputs' in input_node and 'value' in input_node['inputs']: + onprompt_switch_info[k] = input_node['inputs']['value'] + if input_node['class_type'] == 'ImpactSwitch' and 'inputs' in input_node and 'select' in input_node['inputs']: + if isinstance(input_node['inputs']['select'], int): + onprompt_switch_info[k] = input_node['inputs']['select'] + else: + logging.warning(f"\n##### ##### #####\n[Impact Pack] {cls}: For the 'select' operation, only 'select_index' of the 'ImpactSwitch', which is not an input, or 'ImpactInt' and 'Primitive' are allowed as inputs if 'select_on_prompt' is selected.\n##### ##### #####\n") + else: + onprompt_switch_info[k] = select_input + + if k in onprompt_switch_info and f'input{onprompt_switch_info[k]}' not in v['inputs']: + # disconnect output + disabled_switch.add(k) + + elif cls == 'ImpactConditionalBranchSelMode': + if 'sel_mode' in v['inputs'] and v['inputs']['sel_mode'] and 'cond' in v['inputs']: + cond_input = v['inputs']['cond'] + if isinstance(cond_input, list) and len(cond_input) == 2: + input_node = json_data['prompt'][cond_input[0]] + if (input_node['class_type'] == 'ImpactValueReceiver' and 'inputs' in input_node + and 'value' in input_node['inputs'] and 'typ' in input_node['inputs']): + if 'BOOLEAN' == input_node['inputs']['typ']: + try: + onprompt_cond_branch_info[k] = input_node['inputs']['value'].lower() == "true" + except Exception: + pass + else: + onprompt_cond_branch_info[k] = cond_input + + for k, v in json_data['prompt'].items(): + disable_targets = set() + + for kk, vv in v['inputs'].items(): + if isinstance(vv, list) and len(vv) == 2: + if vv[0] in inversed_switch_info: + if vv[1] + 1 != inversed_switch_info[vv[0]]: + disable_targets.add(kk) + else: + del inversed_switch_info[k] + + if vv[0] in disabled_switch: + disable_targets.add(kk) + + if k in onprompt_switch_info: + selected_slot_name = f"input{onprompt_switch_info[k]}" + for kk, vv in v['inputs'].items(): + if kk != selected_slot_name and kk.startswith('input'): + disable_targets.add(kk) + + if k in onprompt_cond_branch_info: + selected_slot_name = "tt_value" if onprompt_cond_branch_info[k] else "ff_value" + for kk, vv in v['inputs'].items(): + if kk in ['tt_value', 'ff_value'] and kk != selected_slot_name: + disable_targets.add(kk) + + for kk in disable_targets: + del v['inputs'][kk] + + # inversed_switch - select out of range + for target in inversed_switch_info.keys(): + del json_data['prompt'][target]['inputs']['input'] + + +def onprompt_for_pickers(json_data): + detected_pickers = set() + + for k, v in json_data['prompt'].items(): + if 'class_type' not in v: + continue + + cls = v['class_type'] + if cls == 'ImpactSEGSPicker': + detected_pickers.add(k) + + # garbage collection + keys_to_remove = [key for key in segs_picker_map if key not in detected_pickers] + for key in keys_to_remove: + del segs_picker_map[key] + + +def gc_preview_bridge_cache(json_data): + prompt_keys = json_data['prompt'].keys() + + for key in list(core.preview_bridge_cache.keys()): + if key not in prompt_keys: + # print(f"key deleted [PB]: {key}") + del core.preview_bridge_cache[key] + + for key in list(core.preview_bridge_last_mask_cache.keys()): + if key not in prompt_keys: + # print(f"key deleted [PB_last_mask]: {key}") + del core.preview_bridge_last_mask_cache[key] + + +def workflow_imagereceiver_update(json_data): + prompt = json_data['prompt'] + + for v in prompt.values(): + if 'class_type' in v and v['class_type'] == 'ImageReceiver': + if v['inputs']['save_to_workflow']: + v['inputs']['image'] = "#DATA" + + +def regional_sampler_seed_update(json_data): + prompt = json_data['prompt'] + + for k, v in prompt.items(): + if 'class_type' in v and v['class_type'] == 'RegionalSampler': + seed_2nd_mode = v['inputs']['seed_2nd_mode'] + + new_seed = None + if seed_2nd_mode == 'increment': + new_seed = v['inputs']['seed_2nd']+1 + if new_seed > 1125899906842624: + new_seed = 0 + elif seed_2nd_mode == 'decrement': + new_seed = v['inputs']['seed_2nd']-1 + if new_seed < 0: + new_seed = 1125899906842624 + elif seed_2nd_mode == 'randomize': + new_seed = random.randint(0, 1125899906842624) + + if new_seed is not None: + PromptServer.instance.send_sync("impact-node-feedback", {"node_id": k, "widget_name": "seed_2nd", "type": "INT", "value": new_seed}) + + +def find_input_value(input_node, prompt, input_type=int, input_keys=('value',)): + input_val = None + + try: + for n in input_keys: + input_val = input_node['inputs'].get(n, None) + if isinstance(input_val, input_type): + break + elif isinstance(input_val, list) and len(input_val): + input_val = find_input_value(prompt[input_val[0]], prompt=prompt, input_type=input_type, input_keys=input_keys) + if input_val is not None: + break + + except Exception as e : + logging.warning(f"[Impact Pack] Error encountered on find {input_type} value - {e}") + + return input_val + + +def onprompt_populate_wildcards(json_data): + prompt = json_data['prompt'] + + updated_widget_values = {} + for k, v in prompt.items(): + if 'class_type' in v and (v['class_type'] == 'ImpactWildcardEncode' or v['class_type'] == 'ImpactWildcardProcessor'): + inputs = v['inputs'] + + # legacy adapter + if isinstance(inputs['mode'], bool): + if inputs['mode']: + new_mode = 'populate' + else: + new_mode = 'fixed' + + inputs['mode'] = new_mode + + if inputs['mode'] == 'populate' and isinstance(inputs['populated_text'], str): + if isinstance(inputs['seed'], list): + try: + input_node = prompt[inputs['seed'][0]] + if input_node['class_type'] == 'ImpactInt': + input_seed = int(input_node['inputs']['value']) + if not isinstance(input_seed, int): + continue + elif input_node['class_type'] == 'Seed (rgthree)': + input_seed = int(input_node['inputs']['seed']) + if not isinstance(input_seed, int): + continue + else: + input_seed = find_input_value(input_node, prompt=prompt, input_type=int, input_keys=('int', 'seed', 'value')) + if input_seed is None: + logging.info(f"[Impact Pack] Only `ImpactInt`, `Seed (rgthree)` and `Primitive` Node are allowed as the seed for '{v['class_type']}'. It will be ignored. ") + continue + except Exception: + continue + else: + input_seed = int(inputs['seed']) + + inputs['populated_text'] = impact.wildcards.process(inputs['wildcard_text'], input_seed) + inputs['mode'] = 'reproduce' + + PromptServer.instance.send_sync("impact-node-feedback", {"node_id": k, "widget_name": "populated_text", "type": "STRING", "value": inputs['populated_text']}) + updated_widget_values[k] = inputs['populated_text'] + + if inputs['mode'] == 'reproduce': + PromptServer.instance.send_sync("impact-node-feedback", {"node_id": k, "widget_name": "mode", "type": "STRING", "value": 'populate'}) + + + + match json_data: + case {"extra_data": {"extra_pnginfo": {"workflow": {"nodes": nodes}}}}: + for node in nodes: + match node: + case {"id": id, "widgets_values": widgets_values}: + key = str(id) + if key in updated_widget_values: + widgets_values[1] = updated_widget_values[key] + widgets_values[2] = "reproduce" + + +def onprompt_for_remote(json_data): + prompt = json_data['prompt'] + + for v in prompt.values(): + if 'class_type' in v: + cls = v['class_type'] + if cls == 'ImpactRemoteBoolean' or cls == 'ImpactRemoteInt': + inputs = v['inputs'] + node_id = str(inputs['node_id']) + + if node_id not in prompt: + continue + + target_inputs = prompt[node_id]['inputs'] + + widget_name = inputs['widget_name'] + if widget_name in target_inputs: + widget_type = None + if cls == 'ImpactRemoteBoolean' and isinstance(target_inputs[widget_name], bool): + widget_type = 'BOOLEAN' + + elif cls == 'ImpactRemoteInt' and (isinstance(target_inputs[widget_name], int) or isinstance(target_inputs[widget_name], float)): + widget_type = 'INT' + + if widget_type is None: + break + + target_inputs[widget_name] = inputs['value'] + PromptServer.instance.send_sync("impact-node-feedback", {"node_id": node_id, "widget_name": widget_name, "type": widget_type, "value": inputs['value']}) + + +def onprompt(json_data): + try: + onprompt_for_remote(json_data) # NOTE: top priority + onprompt_for_switch(json_data) + onprompt_for_pickers(json_data) + onprompt_populate_wildcards(json_data) + gc_preview_bridge_cache(json_data) + workflow_imagereceiver_update(json_data) + regional_sampler_seed_update(json_data) + core.current_prompt = json_data + except Exception: + logging.exception("[Impact Pack] ComfyUI-Impact-Pack: Error on prompt - several features will not work.") + + return json_data + + +PromptServer.instance.add_on_prompt_handler(onprompt) diff --git a/comfyui-impact-pack/modules/impact/logics.py b/comfyui-impact-pack/modules/impact/logics.py new file mode 100644 index 0000000000000000000000000000000000000000..413ba494e5128be9d68995735730cb3f80ae1b72 --- /dev/null +++ b/comfyui-impact-pack/modules/impact/logics.py @@ -0,0 +1,779 @@ +import sys +import time + +import execution +import impact.impact_server +from server import PromptServer +from impact.utils import any_typ +import impact.core as core +import re +import nodes +import logging + + +class ImpactCompare: + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + "cmp": (['a = b', 'a <> b', 'a > b', 'a < b', 'a >= b', 'a <= b', 'tt', 'ff'],), + "a": (any_typ, ), + "b": (any_typ, ), + }, + } + + FUNCTION = "doit" + CATEGORY = "ImpactPack/Logic" + + RETURN_TYPES = ("BOOLEAN", ) + + def doit(self, cmp, a, b): + if cmp == "a = b": + return (a == b, ) + elif cmp == "a <> b": + return (a != b, ) + elif cmp == "a > b": + return (a > b, ) + elif cmp == "a < b": + return (a < b, ) + elif cmp == "a >= b": + return (a >= b, ) + elif cmp == "a <= b": + return (a <= b, ) + elif cmp == 'tt': + return (True, ) + else: + return (False, ) + + +class ImpactNotEmptySEGS: + @classmethod + def INPUT_TYPES(cls): + return {"required": {"segs": ("SEGS",)}} + + FUNCTION = "doit" + CATEGORY = "ImpactPack/Logic" + + RETURN_TYPES = ("BOOLEAN", ) + + def doit(self, segs): + return (segs[1] != [], ) + + +class ImpactConditionalBranch: + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + "cond": ("BOOLEAN",), + "tt_value": (any_typ,{"lazy": True}), + "ff_value": (any_typ,{"lazy": True}), + }, + } + + FUNCTION = "doit" + CATEGORY = "ImpactPack/Logic" + + RETURN_TYPES = (any_typ, ) + + def check_lazy_status(self, cond, tt_value=None, ff_value=None): + if cond and tt_value is None: + return ["tt_value"] + if not cond and ff_value is None: + return ["ff_value"] + + def doit(self, cond, tt_value=None, ff_value=None): + if cond: + return (tt_value,) + else: + return (ff_value,) + + +class ImpactConditionalBranchSelMode: + @classmethod + def INPUT_TYPES(cls): + if not core.is_execution_model_version_supported(): + required_inputs = { + "cond": ("BOOLEAN",), + "sel_mode": ("BOOLEAN", {"default": True, "label_on": "select_on_prompt", "label_off": "select_on_execution"}), + } + else: + required_inputs = { + "cond": ("BOOLEAN",), + } + + return { + "required": required_inputs, + "optional": { + "tt_value": (any_typ,), + "ff_value": (any_typ,), + }, + } + + FUNCTION = "doit" + CATEGORY = "ImpactPack/Logic" + + RETURN_TYPES = (any_typ, ) + + def doit(self, cond, tt_value=None, ff_value=None, **kwargs): + if cond: + return (tt_value,) + else: + return (ff_value,) + + +class ImpactConvertDataType: + def __init__(self): + pass + + @classmethod + def INPUT_TYPES(cls): + return {"required": {"value": (any_typ,)}} + + RETURN_TYPES = ("STRING", "FLOAT", "INT", "BOOLEAN") + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Logic" + + @staticmethod + def is_number(string): + pattern = re.compile(r'^[-+]?[0-9]*\.?[0-9]+$') + return bool(pattern.match(string)) + + def doit(self, value): + if self.is_number(str(value)): + num = value + else: + if str.lower(str(value)) != "false": + num = 1 + else: + num = 0 + return (str(value), float(num), int(float(num)), bool(float(num)), ) + + +class ImpactIfNone: + def __init__(self): + pass + + @classmethod + def INPUT_TYPES(cls): + return { + "required": {}, + "optional": {"signal": (any_typ,), "any_input": (any_typ,), } + } + + RETURN_TYPES = (any_typ, "BOOLEAN") + RETURN_NAMES = ("signal_opt", "bool") + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Logic" + + def doit(self, signal=None, any_input=None): + if any_input is None: + return (signal, False, ) + else: + return (signal, True, ) + + +class ImpactLogicalOperators: + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + "operator": (['and', 'or', 'xor'],), + "bool_a": ("BOOLEAN", {"forceInput": True}), + "bool_b": ("BOOLEAN", {"forceInput": True}), + }, + } + + FUNCTION = "doit" + CATEGORY = "ImpactPack/Logic" + + RETURN_TYPES = ("BOOLEAN", ) + + def doit(self, operator, bool_a, bool_b): + if operator == "and": + return (bool_a and bool_b, ) + elif operator == "or": + return (bool_a or bool_b, ) + else: + return (bool_a != bool_b, ) + + +class ImpactConditionalStopIteration: + @classmethod + def INPUT_TYPES(cls): + return { + "required": { "cond": ("BOOLEAN", {"forceInput": True}), }, + } + + FUNCTION = "doit" + CATEGORY = "ImpactPack/Logic" + + RETURN_TYPES = () + + OUTPUT_NODE = True + + def doit(self, cond): + if cond: + PromptServer.instance.send_sync("stop-iteration", {}) + return {} + + +class ImpactNeg: + @classmethod + def INPUT_TYPES(cls): + return { + "required": { "value": ("BOOLEAN", {"forceInput": True}), }, + } + + FUNCTION = "doit" + CATEGORY = "ImpactPack/Logic" + + RETURN_TYPES = ("BOOLEAN", ) + + def doit(self, value): + return (not value, ) + + +class ImpactInt: + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + "value": ("INT", {"default": 0, "min": 0, "max": sys.maxsize, "step": 1}), + }, + } + + FUNCTION = "doit" + CATEGORY = "ImpactPack/Logic" + + RETURN_TYPES = ("INT", ) + + def doit(self, value): + return (value, ) + + +class ImpactFloat: + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + "value": ("FLOAT", {"default": 1.0, "min": -3.402823466e+38, "max": 3.402823466e+38}), + }, + } + + FUNCTION = "doit" + CATEGORY = "ImpactPack/Logic" + + RETURN_TYPES = ("FLOAT", ) + + def doit(self, value): + return (value, ) + + +class ImpactBoolean: + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + "value": ("BOOLEAN", {"default": False}), + }, + } + + FUNCTION = "doit" + CATEGORY = "ImpactPack/Logic" + + RETURN_TYPES = ("BOOLEAN", ) + + def doit(self, value): + return (value, ) + + +class ImpactValueSender: + @classmethod + def INPUT_TYPES(cls): + return {"required": { + "value": (any_typ, ), + "link_id": ("INT", {"default": 0, "min": 0, "max": sys.maxsize, "step": 1}), + }, + "optional": { + "signal_opt": (any_typ,), + } + } + + OUTPUT_NODE = True + + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Logic" + + RETURN_TYPES = (any_typ, ) + RETURN_NAMES = ("signal", ) + + def doit(self, value, link_id=0, signal_opt=None): + PromptServer.instance.send_sync("value-send", {"link_id": link_id, "value": value}) + return (signal_opt, ) + + +class ImpactIntConstSender: + @classmethod + def INPUT_TYPES(cls): + return {"required": { + "signal": (any_typ, ), + "value": ("INT", {"default": 0, "min": 0, "max": sys.maxsize, "step": 1}), + "link_id": ("INT", {"default": 0, "min": 0, "max": sys.maxsize, "step": 1}), + }, + } + + OUTPUT_NODE = True + + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Logic" + + RETURN_TYPES = () + + def doit(self, signal, value, link_id=0): + PromptServer.instance.send_sync("value-send", {"link_id": link_id, "value": value}) + return {} + + +class ImpactValueReceiver: + @classmethod + def INPUT_TYPES(cls): + return {"required": { + "typ": (["STRING", "INT", "FLOAT", "BOOLEAN"], ), + "value": ("STRING", {"default": ""}), + "link_id": ("INT", {"default": 0, "min": 0, "max": sys.maxsize, "step": 1}), + }, + } + + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Logic" + + RETURN_TYPES = (any_typ, ) + + def doit(self, typ, value, link_id=0): + if typ == "INT": + return (int(value), ) + elif typ == "FLOAT": + return (float(value), ) + elif typ == "BOOLEAN": + return (value.lower() == "true", ) + else: + return (value, ) + + +class ImpactImageInfo: + @classmethod + def INPUT_TYPES(cls): + return {"required": { + "value": ("IMAGE", ), + }, + } + + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Logic/_for_test" + + RETURN_TYPES = ("INT", "INT", "INT", "INT") + RETURN_NAMES = ("batch", "height", "width", "channel") + + def doit(self, value): + return (value.shape[0], value.shape[1], value.shape[2], value.shape[3]) + + +class ImpactLatentInfo: + @classmethod + def INPUT_TYPES(cls): + return {"required": { + "value": ("LATENT", ), + }, + } + + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Logic/_for_test" + + RETURN_TYPES = ("INT", "INT", "INT", "INT") + RETURN_NAMES = ("batch", "height", "width", "channel") + + def doit(self, value): + shape = value['samples'].shape + return (shape[0], shape[2] * 8, shape[3] * 8, shape[1]) + + +class ImpactMinMax: + @classmethod + def INPUT_TYPES(cls): + return {"required": { + "mode": ("BOOLEAN", {"default": True, "label_on": "max", "label_off": "min"}), + "a": (any_typ,), + "b": (any_typ,), + }, + } + + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Logic/_for_test" + + RETURN_TYPES = ("INT", ) + + def doit(self, mode, a, b): + if mode: + return (max(a, b), ) + else: + return (min(a, b),) + + +class ImpactQueueTrigger: + @classmethod + def INPUT_TYPES(cls): + return {"required": { + "signal": (any_typ,), + "mode": ("BOOLEAN", {"default": True, "label_on": "Trigger", "label_off": "Don't trigger"}), + } + } + + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Logic/_for_test" + RETURN_TYPES = (any_typ,) + RETURN_NAMES = ("signal_opt",) + OUTPUT_NODE = True + + def doit(self, signal, mode): + if(mode): + PromptServer.instance.send_sync("impact-add-queue", {}) + + return (signal,) + + +class ImpactQueueTriggerCountdown: + @classmethod + def INPUT_TYPES(cls): + return {"required": { + "count": ("INT", {"default": 0, "min": 0, "max": 0xffffffffffffffff}), + "total": ("INT", {"default": 10, "min": 1, "max": 0xffffffffffffffff}), + "mode": ("BOOLEAN", {"default": True, "label_on": "Trigger", "label_off": "Don't trigger"}), + }, + "optional": {"signal": (any_typ,),}, + "hidden": {"unique_id": "UNIQUE_ID"} + } + + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Logic/_for_test" + RETURN_TYPES = (any_typ, "INT", "INT") + RETURN_NAMES = ("signal_opt", "count", "total") + OUTPUT_NODE = True + + def doit(self, count, total, mode, unique_id, signal=None): + if (mode): + if count < total - 1: + PromptServer.instance.send_sync("impact-node-feedback", + {"node_id": unique_id, "widget_name": "count", "type": "int", "value": count+1}) + PromptServer.instance.send_sync("impact-add-queue", {}) + if count >= total - 1: + PromptServer.instance.send_sync("impact-node-feedback", + {"node_id": unique_id, "widget_name": "count", "type": "int", "value": 0}) + + return (signal, count, total) + + + +class ImpactSetWidgetValue: + @classmethod + def INPUT_TYPES(cls): + return {"required": { + "signal": (any_typ,), + "node_id": ("INT", {"default": 0, "min": 0, "max": 0xffffffffffffffff}), + "widget_name": ("STRING", {"multiline": False}), + }, + "optional": { + "boolean_value": ("BOOLEAN", {"forceInput": True}), + "int_value": ("INT", {"forceInput": True}), + "float_value": ("FLOAT", {"forceInput": True}), + "string_value": ("STRING", {"forceInput": True}), + } + } + + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Logic/_for_test" + RETURN_TYPES = (any_typ,) + RETURN_NAMES = ("signal_opt",) + OUTPUT_NODE = True + + def doit(self, signal, node_id, widget_name, boolean_value=None, int_value=None, float_value=None, string_value=None, ): + kind = None + if boolean_value is not None: + value = boolean_value + kind = "BOOLEAN" + elif int_value is not None: + value = int_value + kind = "INT" + elif float_value is not None: + value = float_value + kind = "FLOAT" + elif string_value is not None: + value = string_value + kind = "STRING" + else: + value = None + + if value is not None: + PromptServer.instance.send_sync("impact-node-feedback", + {"node_id": node_id, "widget_name": widget_name, "type": kind, "value": value}) + + return (signal,) + + +class ImpactNodeSetMuteState: + @classmethod + def INPUT_TYPES(cls): + return {"required": { + "signal": (any_typ,), + "node_id": ("INT", {"default": 0, "min": 0, "max": 0xffffffffffffffff}), + "set_state": ("BOOLEAN", {"default": True, "label_on": "active", "label_off": "mute"}), + } + } + + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Logic/_for_test" + RETURN_TYPES = (any_typ,) + RETURN_NAMES = ("signal_opt",) + OUTPUT_NODE = True + + def doit(self, signal, node_id, set_state): + PromptServer.instance.send_sync("impact-node-mute-state", {"node_id": node_id, "is_active": set_state}) + return (signal,) + + +class ImpactSleep: + @classmethod + def INPUT_TYPES(cls): + return {"required": { + "signal": (any_typ,), + "seconds": ("FLOAT", {"default": 0.5, "min": 0, "max": 3600}), + } + } + + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Logic/_for_test" + RETURN_TYPES = (any_typ,) + RETURN_NAMES = ("signal_opt",) + OUTPUT_NODE = True + + def doit(self, signal, seconds): + time.sleep(seconds) + return (signal,) + + +def workflow_to_map(workflow): + nodes = {} + links = {} + for link in workflow['links']: + links[link[0]] = link[1:] + for node in workflow['nodes']: + nodes[str(node['id'])] = node + + return nodes, links + + +class ImpactRemoteBoolean: + @classmethod + def INPUT_TYPES(cls): + return {"required": { + "node_id": ("INT", {"default": 0, "min": 0, "max": 0xffffffffffffffff}), + "widget_name": ("STRING", {"multiline": False}), + "value": ("BOOLEAN", {"default": True, "label_on": "True", "label_off": "False"}), + }} + + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Logic/_for_test" + RETURN_TYPES = () + OUTPUT_NODE = True + + def doit(self, **kwargs): + return {} + + +class ImpactRemoteInt: + @classmethod + def INPUT_TYPES(cls): + return {"required": { + "node_id": ("INT", {"default": 0, "min": 0, "max": 0xffffffffffffffff}), + "widget_name": ("STRING", {"multiline": False}), + "value": ("INT", {"default": 0, "min": -0xffffffffffffffff, "max": 0xffffffffffffffff}), + }} + + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Logic/_for_test" + RETURN_TYPES = () + OUTPUT_NODE = True + + def doit(self, **kwargs): + return {} + +class ImpactControlBridge: + @classmethod + def INPUT_TYPES(cls): + return {"required": { + "value": (any_typ,), + "mode": ("BOOLEAN", {"default": True, "label_on": "Active", "label_off": "Stop/Mute/Bypass"}), + "behavior": (["Stop", "Mute", "Bypass"], ), + }, + "hidden": {"unique_id": "UNIQUE_ID", "prompt": "PROMPT", "extra_pnginfo": "EXTRA_PNGINFO"} + } + + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Logic" + RETURN_TYPES = (any_typ,) + RETURN_NAMES = ("value",) + OUTPUT_NODE = True + + DESCRIPTION = ("When behavior is Stop and mode is active, the input value is passed directly to the output.\n" + "When behavior is Mute/Bypass and mode is active, the node connected to the output is changed to active state.\n" + "When behavior is Stop and mode is Stop/Mute/Bypass, the workflow execution of the current node is halted.\n" + "When behavior is Mute/Bypass and mode is Stop/Mute/Bypass, the node connected to the output is changed to Mute/Bypass state.") + + @classmethod + def IS_CHANGED(self, value, mode, behavior="Stop", unique_id=None, prompt=None, extra_pnginfo=None): + if behavior == "Stop": + return value, mode, behavior + else: + # NOTE: extra_pnginfo is not populated for IS_CHANGED. + # so extra_pnginfo is useless in here + try: + workflow = core.current_prompt['extra_data']['extra_pnginfo']['workflow'] + except Exception: + logging.info("[Impact Pack] core.current_prompt['extra_data']['extra_pnginfo']['workflow']") + return 0 + + nodes, links = workflow_to_map(workflow) + next_nodes = [] + + for link in nodes[unique_id]['outputs'][0]['links']: + node_id = str(links[link][2]) + impact.utils.collect_non_reroute_nodes(nodes, links, next_nodes, node_id) + + return next_nodes + + def doit(self, value, mode, behavior="Stop", unique_id=None, prompt=None, extra_pnginfo=None): + global error_skip_flag + + if core.is_execution_model_version_supported(): + from comfy_execution.graph import ExecutionBlocker + else: + logging.info("[Impact Pack] ImpactControlBridge: ComfyUI is outdated. The 'Stop' behavior cannot function properly.") + + if behavior == "Stop": + if mode: + return (value, ) + else: + return (ExecutionBlocker(None), ) + elif extra_pnginfo is None: + logging.warning(f"[Impact Pack] limitation: '{behavior}' behavior cannot be used in API execution.") + return (value,) + else: + workflow_nodes, links = workflow_to_map(extra_pnginfo['workflow']) + + active_nodes = [] + mute_nodes = [] + bypass_nodes = [] + + for link in workflow_nodes[unique_id]['outputs'][0]['links']: + node_id = str(links[link][2]) + + next_nodes = [] + impact.utils.collect_non_reroute_nodes(workflow_nodes, links, next_nodes, node_id) + + for next_node_id in next_nodes: + node_mode = workflow_nodes[next_node_id]['mode'] + + if node_mode == 0: + active_nodes.append(next_node_id) + elif node_mode == 2: + mute_nodes.append(next_node_id) + elif node_mode == 4: + bypass_nodes.append(next_node_id) + + if mode: + # active + should_be_active_nodes = mute_nodes + bypass_nodes + if len(should_be_active_nodes) > 0: + PromptServer.instance.send_sync("impact-bridge-continue", {"node_id": unique_id, 'actives': list(should_be_active_nodes)}) + nodes.interrupt_processing() + + elif behavior == "Mute" or behavior == True: # noqa: E712 + # mute + should_be_mute_nodes = active_nodes + bypass_nodes + if len(should_be_mute_nodes) > 0: + PromptServer.instance.send_sync("impact-bridge-continue", {"node_id": unique_id, 'mutes': list(should_be_mute_nodes)}) + nodes.interrupt_processing() + + else: + # bypass + should_be_bypass_nodes = active_nodes + mute_nodes + if len(should_be_bypass_nodes) > 0: + PromptServer.instance.send_sync("impact-bridge-continue", {"node_id": unique_id, 'bypasses': list(should_be_bypass_nodes)}) + nodes.interrupt_processing() + + return (value, ) + + +class ImpactExecutionOrderController: + @classmethod + def INPUT_TYPES(cls): + return {"required": { + "signal": (any_typ,), + "value": (any_typ,), + }} + + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Util" + RETURN_TYPES = (any_typ, any_typ) + RETURN_NAMES = ("signal", "value") + + def doit(self, signal, value): + return signal, value + + +class ImpactListBridge: + @classmethod + def INPUT_TYPES(cls): + return {"required": { + "list_input": (any_typ,), + }} + + FUNCTION = "doit" + + DESCRIPTION = "When passing the list output through this node, it collects and organizes the data before forwarding it, which ensures that the previous stage's sub-workflow has been completed." + + CATEGORY = "ImpactPack/Util" + RETURN_TYPES = (any_typ, ) + RETURN_NAMES = ("list_output", ) + + INPUT_IS_LIST = True + OUTPUT_IS_LIST = (True, ) + + @staticmethod + def doit(list_input): + return (list_input,) + + +original_handle_execution = execution.PromptExecutor.handle_execution_error + + +def handle_execution_error(**kwargs): + execution.PromptExecutor.handle_execution_error(**kwargs) + diff --git a/comfyui-impact-pack/modules/impact/pipe.py b/comfyui-impact-pack/modules/impact/pipe.py new file mode 100644 index 0000000000000000000000000000000000000000..4e782f6a88690b3ef6e376746ee0eabb7c8ea08e --- /dev/null +++ b/comfyui-impact-pack/modules/impact/pipe.py @@ -0,0 +1,440 @@ +import folder_paths +from impact.utils import any_typ + + +class ToDetailerPipe: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "model": ("MODEL",), + "clip": ("CLIP",), + "vae": ("VAE",), + "positive": ("CONDITIONING",), + "negative": ("CONDITIONING",), + "bbox_detector": ("BBOX_DETECTOR", ), + "wildcard": ("STRING", {"multiline": True, "dynamicPrompts": False}), + "Select to add LoRA": (["Select the LoRA to add to the text"] + folder_paths.get_filename_list("loras"),), + "Select to add Wildcard": (["Select the Wildcard to add to the text"], ), + }, + "optional": { + "sam_model_opt": ("SAM_MODEL",), + "segm_detector_opt": ("SEGM_DETECTOR",), + "detailer_hook": ("DETAILER_HOOK",), + }} + + RETURN_TYPES = ("DETAILER_PIPE", ) + RETURN_NAMES = ("detailer_pipe", ) + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Pipe" + + def doit(self, *args, **kwargs): + pipe = (kwargs['model'], kwargs['clip'], kwargs['vae'], kwargs['positive'], kwargs['negative'], kwargs['wildcard'], kwargs['bbox_detector'], + kwargs.get('segm_detector_opt', None), kwargs.get('sam_model_opt', None), kwargs.get('detailer_hook', None), + kwargs.get('refiner_model', None), kwargs.get('refiner_clip', None), + kwargs.get('refiner_positive', None), kwargs.get('refiner_negative', None)) + return (pipe, ) + + +class ToDetailerPipeSDXL(ToDetailerPipe): + @classmethod + def INPUT_TYPES(s): + return {"required": { + "model": ("MODEL",), + "clip": ("CLIP",), + "vae": ("VAE",), + "positive": ("CONDITIONING",), + "negative": ("CONDITIONING",), + "refiner_model": ("MODEL",), + "refiner_clip": ("CLIP",), + "refiner_positive": ("CONDITIONING",), + "refiner_negative": ("CONDITIONING",), + "bbox_detector": ("BBOX_DETECTOR", ), + "wildcard": ("STRING", {"multiline": True, "dynamicPrompts": False}), + "Select to add LoRA": (["Select the LoRA to add to the text"] + folder_paths.get_filename_list("loras"),), + "Select to add Wildcard": (["Select the Wildcard to add to the text"],), + }, + "optional": { + "sam_model_opt": ("SAM_MODEL",), + "segm_detector_opt": ("SEGM_DETECTOR",), + "detailer_hook": ("DETAILER_HOOK",), + }} + + +class FromDetailerPipe: + @classmethod + def INPUT_TYPES(s): + return {"required": {"detailer_pipe": ("DETAILER_PIPE",), }, } + + RETURN_TYPES = ("MODEL", "CLIP", "VAE", "CONDITIONING", "CONDITIONING", "BBOX_DETECTOR", "SAM_MODEL", "SEGM_DETECTOR", "DETAILER_HOOK") + RETURN_NAMES = ("model", "clip", "vae", "positive", "negative", "bbox_detector", "sam_model_opt", "segm_detector_opt", "detailer_hook") + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Pipe" + + def doit(self, detailer_pipe): + model, clip, vae, positive, negative, wildcard, bbox_detector, segm_detector_opt, sam_model_opt, detailer_hook, _, _, _, _ = detailer_pipe + return model, clip, vae, positive, negative, bbox_detector, sam_model_opt, segm_detector_opt, detailer_hook + + +class FromDetailerPipe_v2: + @classmethod + def INPUT_TYPES(s): + return {"required": {"detailer_pipe": ("DETAILER_PIPE",), }, } + + RETURN_TYPES = ("DETAILER_PIPE", "MODEL", "CLIP", "VAE", "CONDITIONING", "CONDITIONING", "BBOX_DETECTOR", "SAM_MODEL", "SEGM_DETECTOR", "DETAILER_HOOK") + RETURN_NAMES = ("detailer_pipe", "model", "clip", "vae", "positive", "negative", "bbox_detector", "sam_model_opt", "segm_detector_opt", "detailer_hook") + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Pipe" + + def doit(self, detailer_pipe): + model, clip, vae, positive, negative, wildcard, bbox_detector, segm_detector_opt, sam_model_opt, detailer_hook, _, _, _, _ = detailer_pipe + return detailer_pipe, model, clip, vae, positive, negative, bbox_detector, sam_model_opt, segm_detector_opt, detailer_hook + + +class FromDetailerPipe_SDXL: + @classmethod + def INPUT_TYPES(s): + return {"required": {"detailer_pipe": ("DETAILER_PIPE",), }, } + + RETURN_TYPES = ("DETAILER_PIPE", "MODEL", "CLIP", "VAE", "CONDITIONING", "CONDITIONING", "BBOX_DETECTOR", "SAM_MODEL", "SEGM_DETECTOR", "DETAILER_HOOK", "MODEL", "CLIP", "CONDITIONING", "CONDITIONING") + RETURN_NAMES = ("detailer_pipe", "model", "clip", "vae", "positive", "negative", "bbox_detector", "sam_model_opt", "segm_detector_opt", "detailer_hook", "refiner_model", "refiner_clip", "refiner_positive", "refiner_negative") + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Pipe" + + def doit(self, detailer_pipe): + model, clip, vae, positive, negative, wildcard, bbox_detector, segm_detector_opt, sam_model_opt, detailer_hook, refiner_model, refiner_clip, refiner_positive, refiner_negative = detailer_pipe + return detailer_pipe, model, clip, vae, positive, negative, bbox_detector, sam_model_opt, segm_detector_opt, detailer_hook, refiner_model, refiner_clip, refiner_positive, refiner_negative + + +class AnyPipeToBasic: + @classmethod + def INPUT_TYPES(s): + return { + "required": {"any_pipe": (any_typ,)}, + } + + RETURN_TYPES = ("BASIC_PIPE", ) + RETURN_NAMES = ("basic_pipe", ) + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Pipe" + + def doit(self, any_pipe): + return (any_pipe[:5], ) + + +class ToBasicPipe: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "model": ("MODEL",), + "clip": ("CLIP",), + "vae": ("VAE",), + "positive": ("CONDITIONING",), + "negative": ("CONDITIONING",), + }, + } + + RETURN_TYPES = ("BASIC_PIPE", ) + RETURN_NAMES = ("basic_pipe", ) + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Pipe" + + def doit(self, model, clip, vae, positive, negative): + pipe = (model, clip, vae, positive, negative) + return (pipe, ) + + +class FromBasicPipe: + @classmethod + def INPUT_TYPES(s): + return {"required": {"basic_pipe": ("BASIC_PIPE",), }, } + + RETURN_TYPES = ("MODEL", "CLIP", "VAE", "CONDITIONING", "CONDITIONING") + RETURN_NAMES = ("model", "clip", "vae", "positive", "negative") + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Pipe" + + def doit(self, basic_pipe): + model, clip, vae, positive, negative = basic_pipe + return model, clip, vae, positive, negative + + +class FromBasicPipe_v2: + @classmethod + def INPUT_TYPES(s): + return {"required": {"basic_pipe": ("BASIC_PIPE",), }, } + + RETURN_TYPES = ("BASIC_PIPE", "MODEL", "CLIP", "VAE", "CONDITIONING", "CONDITIONING") + RETURN_NAMES = ("basic_pipe", "model", "clip", "vae", "positive", "negative") + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Pipe" + + def doit(self, basic_pipe): + model, clip, vae, positive, negative = basic_pipe + return basic_pipe, model, clip, vae, positive, negative + + +class BasicPipeToDetailerPipe: + @classmethod + def INPUT_TYPES(s): + return {"required": {"basic_pipe": ("BASIC_PIPE",), + "bbox_detector": ("BBOX_DETECTOR", ), + "wildcard": ("STRING", {"multiline": True, "dynamicPrompts": False}), + "Select to add LoRA": (["Select the LoRA to add to the text"] + folder_paths.get_filename_list("loras"),), + "Select to add Wildcard": (["Select the Wildcard to add to the text"],), + }, + "optional": { + "sam_model_opt": ("SAM_MODEL", ), + "segm_detector_opt": ("SEGM_DETECTOR",), + "detailer_hook": ("DETAILER_HOOK",), + }, + } + + RETURN_TYPES = ("DETAILER_PIPE", ) + RETURN_NAMES = ("detailer_pipe", ) + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Pipe" + + def doit(self, *args, **kwargs): + basic_pipe = kwargs['basic_pipe'] + bbox_detector = kwargs['bbox_detector'] + wildcard = kwargs['wildcard'] + sam_model_opt = kwargs.get('sam_model_opt', None) + segm_detector_opt = kwargs.get('segm_detector_opt', None) + detailer_hook = kwargs.get('detailer_hook', None) + + model, clip, vae, positive, negative = basic_pipe + pipe = model, clip, vae, positive, negative, wildcard, bbox_detector, segm_detector_opt, sam_model_opt, detailer_hook, None, None, None, None + return (pipe, ) + + +class BasicPipeToDetailerPipeSDXL: + @classmethod + def INPUT_TYPES(s): + return {"required": {"base_basic_pipe": ("BASIC_PIPE",), + "refiner_basic_pipe": ("BASIC_PIPE",), + "bbox_detector": ("BBOX_DETECTOR", ), + "wildcard": ("STRING", {"multiline": True, "dynamicPrompts": False}), + "Select to add LoRA": (["Select the LoRA to add to the text"] + folder_paths.get_filename_list("loras"),), + "Select to add Wildcard": (["Select the Wildcard to add to the text"],), + }, + "optional": { + "sam_model_opt": ("SAM_MODEL", ), + "segm_detector_opt": ("SEGM_DETECTOR",), + "detailer_hook": ("DETAILER_HOOK",), + }, + } + + RETURN_TYPES = ("DETAILER_PIPE", ) + RETURN_NAMES = ("detailer_pipe", ) + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Pipe" + + def doit(self, *args, **kwargs): + base_basic_pipe = kwargs['base_basic_pipe'] + refiner_basic_pipe = kwargs['refiner_basic_pipe'] + bbox_detector = kwargs['bbox_detector'] + wildcard = kwargs['wildcard'] + sam_model_opt = kwargs.get('sam_model_opt', None) + segm_detector_opt = kwargs.get('segm_detector_opt', None) + detailer_hook = kwargs.get('detailer_hook', None) + + model, clip, vae, positive, negative = base_basic_pipe + refiner_model, refiner_clip, refiner_vae, refiner_positive, refiner_negative = refiner_basic_pipe + pipe = model, clip, vae, positive, negative, wildcard, bbox_detector, segm_detector_opt, sam_model_opt, detailer_hook, refiner_model, refiner_clip, refiner_positive, refiner_negative + return (pipe, ) + + +class DetailerPipeToBasicPipe: + @classmethod + def INPUT_TYPES(s): + return {"required": {"detailer_pipe": ("DETAILER_PIPE",), }} + + RETURN_TYPES = ("BASIC_PIPE", "BASIC_PIPE") + RETURN_NAMES = ("base_basic_pipe", "refiner_basic_pipe") + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Pipe" + + def doit(self, detailer_pipe): + model, clip, vae, positive, negative, _, _, _, _, _, refiner_model, refiner_clip, refiner_positive, refiner_negative = detailer_pipe + pipe = model, clip, vae, positive, negative + refiner_pipe = refiner_model, refiner_clip, vae, refiner_positive, refiner_negative + return (pipe, refiner_pipe) + + +class EditBasicPipe: + @classmethod + def INPUT_TYPES(s): + return { + "required": {"basic_pipe": ("BASIC_PIPE",), }, + "optional": { + "model": ("MODEL",), + "clip": ("CLIP",), + "vae": ("VAE",), + "positive": ("CONDITIONING",), + "negative": ("CONDITIONING",), + }, + } + + RETURN_TYPES = ("BASIC_PIPE", ) + RETURN_NAMES = ("basic_pipe", ) + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Pipe" + + def doit(self, basic_pipe, model=None, clip=None, vae=None, positive=None, negative=None): + res_model, res_clip, res_vae, res_positive, res_negative = basic_pipe + + if model is not None: + res_model = model + + if clip is not None: + res_clip = clip + + if vae is not None: + res_vae = vae + + if positive is not None: + res_positive = positive + + if negative is not None: + res_negative = negative + + pipe = res_model, res_clip, res_vae, res_positive, res_negative + + return (pipe, ) + + +class EditDetailerPipe: + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "detailer_pipe": ("DETAILER_PIPE",), + "wildcard": ("STRING", {"multiline": True, "dynamicPrompts": False}), + "Select to add LoRA": (["Select the LoRA to add to the text"] + folder_paths.get_filename_list("loras"),), + "Select to add Wildcard": (["Select the Wildcard to add to the text"],), + }, + "optional": { + "model": ("MODEL",), + "clip": ("CLIP",), + "vae": ("VAE",), + "positive": ("CONDITIONING",), + "negative": ("CONDITIONING",), + "bbox_detector": ("BBOX_DETECTOR",), + "sam_model": ("SAM_MODEL",), + "segm_detector": ("SEGM_DETECTOR",), + "detailer_hook": ("DETAILER_HOOK",), + }, + } + + RETURN_TYPES = ("DETAILER_PIPE",) + RETURN_NAMES = ("detailer_pipe",) + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Pipe" + + def doit(self, *args, **kwargs): + detailer_pipe = kwargs['detailer_pipe'] + wildcard = kwargs['wildcard'] + model = kwargs.get('model', None) + clip = kwargs.get('clip', None) + vae = kwargs.get('vae', None) + positive = kwargs.get('positive', None) + negative = kwargs.get('negative', None) + bbox_detector = kwargs.get('bbox_detector', None) + sam_model = kwargs.get('sam_model', None) + segm_detector = kwargs.get('segm_detector', None) + detailer_hook = kwargs.get('detailer_hook', None) + refiner_model = kwargs.get('refiner_model', None) + refiner_clip = kwargs.get('refiner_clip', None) + refiner_positive = kwargs.get('refiner_positive', None) + refiner_negative = kwargs.get('refiner_negative', None) + + res_model, res_clip, res_vae, res_positive, res_negative, res_wildcard, res_bbox_detector, res_segm_detector, res_sam_model, res_detailer_hook, res_refiner_model, res_refiner_clip, res_refiner_positive, res_refiner_negative = detailer_pipe + + if model is not None: + res_model = model + + if clip is not None: + res_clip = clip + + if vae is not None: + res_vae = vae + + if positive is not None: + res_positive = positive + + if negative is not None: + res_negative = negative + + if bbox_detector is not None: + res_bbox_detector = bbox_detector + + if segm_detector is not None: + res_segm_detector = segm_detector + + if wildcard != "": + res_wildcard = wildcard + + if sam_model is not None: + res_sam_model = sam_model + + if detailer_hook is not None: + res_detailer_hook = detailer_hook + + if refiner_model is not None: + res_refiner_model = refiner_model + + if refiner_clip is not None: + res_refiner_clip = refiner_clip + + if refiner_positive is not None: + res_refiner_positive = refiner_positive + + if refiner_negative is not None: + res_refiner_negative = refiner_negative + + pipe = (res_model, res_clip, res_vae, res_positive, res_negative, res_wildcard, + res_bbox_detector, res_segm_detector, res_sam_model, res_detailer_hook, + res_refiner_model, res_refiner_clip, res_refiner_positive, res_refiner_negative) + + return (pipe, ) + + +class EditDetailerPipeSDXL(EditDetailerPipe): + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "detailer_pipe": ("DETAILER_PIPE",), + "wildcard": ("STRING", {"multiline": True, "dynamicPrompts": False}), + "Select to add LoRA": (["Select the LoRA to add to the text"] + folder_paths.get_filename_list("loras"),), + "Select to add Wildcard": (["Select the Wildcard to add to the text"],), + }, + "optional": { + "model": ("MODEL",), + "clip": ("CLIP",), + "vae": ("VAE",), + "positive": ("CONDITIONING",), + "negative": ("CONDITIONING",), + "refiner_model": ("MODEL",), + "refiner_clip": ("CLIP",), + "refiner_positive": ("CONDITIONING",), + "refiner_negative": ("CONDITIONING",), + "bbox_detector": ("BBOX_DETECTOR",), + "sam_model": ("SAM_MODEL",), + "segm_detector": ("SEGM_DETECTOR",), + "detailer_hook": ("DETAILER_HOOK",), + }, + } diff --git a/comfyui-impact-pack/modules/impact/segs_nodes.py b/comfyui-impact-pack/modules/impact/segs_nodes.py new file mode 100644 index 0000000000000000000000000000000000000000..ee46df1a6be036ca83df4f6c4bb4b1cec63ac650 --- /dev/null +++ b/comfyui-impact-pack/modules/impact/segs_nodes.py @@ -0,0 +1,2029 @@ +import os +import sys + +import impact.impact_server +from nodes import MAX_RESOLUTION + +from . import core +from .core import SEG +import impact.utils as utils +from . import defs +from . import segs_upscaler +from comfy.cli_args import args +import math +from PIL import Image +import comfy +import numpy as np +import torch +import folder_paths +import logging + + +from typing import Callable, Union + +try: + from comfy_extras import nodes_differential_diffusion +except Exception: + logging.info("\n#############################################\n[Impact Pack] ComfyUI is an outdated version.\n#############################################\n") + raise Exception("[Impact Pack] ComfyUI is an outdated version.") + + +class SEGSDetailer: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "image": ("IMAGE", ), + "segs": ("SEGS", ), + "guide_size": ("FLOAT", {"default": 512, "min": 64, "max": MAX_RESOLUTION, "step": 8}), + "guide_size_for": ("BOOLEAN", {"default": True, "label_on": "bbox", "label_off": "crop_region"}), + "max_size": ("FLOAT", {"default": 768, "min": 64, "max": MAX_RESOLUTION, "step": 8}), + "seed": ("INT", {"default": 0, "min": 0, "max": 0xffffffffffffffff}), + "steps": ("INT", {"default": 20, "min": 1, "max": 10000}), + "cfg": ("FLOAT", {"default": 8.0, "min": 0.0, "max": 100.0}), + "sampler_name": (comfy.samplers.KSampler.SAMPLERS,), + "scheduler": (core.get_schedulers(),), + "denoise": ("FLOAT", {"default": 0.5, "min": 0.0001, "max": 1.0, "step": 0.01}), + "noise_mask": ("BOOLEAN", {"default": True, "label_on": "enabled", "label_off": "disabled"}), + "force_inpaint": ("BOOLEAN", {"default": True, "label_on": "enabled", "label_off": "disabled"}), + "basic_pipe": ("BASIC_PIPE", {"tooltip": "If the `ImpactDummyInput` is connected to the model in the basic_pipe, the inference stage is skipped."}), + "refiner_ratio": ("FLOAT", {"default": 0.2, "min": 0.0, "max": 1.0}), + "batch_size": ("INT", {"default": 1, "min": 1, "max": 100}), + + "cycle": ("INT", {"default": 1, "min": 1, "max": 10, "step": 1}), + }, + "optional": { + "refiner_basic_pipe_opt": ("BASIC_PIPE",), + "inpaint_model": ("BOOLEAN", {"default": False, "label_on": "enabled", "label_off": "disabled"}), + "noise_mask_feather": ("INT", {"default": 20, "min": 0, "max": 100, "step": 1}), + "scheduler_func_opt": ("SCHEDULER_FUNC",), + } + } + + RETURN_TYPES = ("SEGS", "IMAGE") + RETURN_NAMES = ("segs", "cnet_images") + OUTPUT_IS_LIST = (False, True) + + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Detailer" + + DESCRIPTION = "This node enhances details by inpainting each region within the detected area bundle (SEGS) after enlarging them based on the guide size.\nThis node is applied specifically to SEGS rather than the entire image. To apply it to the entire image, use the 'SEGS Paste' node." + + @staticmethod + def do_detail(image, segs, guide_size, guide_size_for, max_size, seed, steps, cfg, sampler_name, scheduler, + denoise, noise_mask, force_inpaint, basic_pipe, refiner_ratio=None, batch_size=1, cycle=1, + refiner_basic_pipe_opt=None, inpaint_model=False, noise_mask_feather=0, scheduler_func_opt=None): + + model, clip, vae, positive, negative = basic_pipe + if refiner_basic_pipe_opt is None: + refiner_model, refiner_clip, refiner_positive, refiner_negative = None, None, None, None + else: + refiner_model, refiner_clip, _, refiner_positive, refiner_negative = refiner_basic_pipe_opt + + segs = core.segs_scale_match(segs, image.shape) + + new_segs = [] + cnet_pil_list = [] + + if not (isinstance(model, str) and model == "DUMMY") and noise_mask_feather > 0 and 'denoise_mask_function' not in model.model_options: + model = nodes_differential_diffusion.DifferentialDiffusion().execute(model)[0] + + for i in range(batch_size): + seed += 1 + for seg in segs[1]: + cropped_image = seg.cropped_image if seg.cropped_image is not None \ + else utils.crop_ndarray4(image.numpy(), seg.crop_region) + cropped_image = utils.to_tensor(cropped_image) + + is_mask_all_zeros = (seg.cropped_mask == 0).all().item() + if is_mask_all_zeros: + logging.info("Detailer: segment skip [empty mask]") + new_segs.append(seg) + continue + + if noise_mask: + cropped_mask = seg.cropped_mask + else: + cropped_mask = None + + cropped_positive = [ + [condition, { + k: core.crop_condition_mask(v, image, seg.crop_region) if k == "mask" else v + for k, v in details.items() + }] + for condition, details in positive + ] + + cropped_negative = [ + [condition, { + k: core.crop_condition_mask(v, image, seg.crop_region) if k == "mask" else v + for k, v in details.items() + }] + for condition, details in negative + ] + + if not (isinstance(model, str) and model == "DUMMY"): + enhanced_image, cnet_pils = core.enhance_detail(cropped_image, model, clip, vae, guide_size, guide_size_for, max_size, + seg.bbox, seed, steps, cfg, sampler_name, scheduler, + cropped_positive, cropped_negative, denoise, cropped_mask, force_inpaint, + refiner_ratio=refiner_ratio, refiner_model=refiner_model, + refiner_clip=refiner_clip, refiner_positive=refiner_positive, refiner_negative=refiner_negative, + control_net_wrapper=seg.control_net_wrapper, cycle=cycle, + inpaint_model=inpaint_model, noise_mask_feather=noise_mask_feather, scheduler_func=scheduler_func_opt) + else: + enhanced_image = cropped_image + cnet_pils = None + + if cnet_pils is not None: + cnet_pil_list.extend(cnet_pils) + + if enhanced_image is None: + new_cropped_image = cropped_image + else: + new_cropped_image = enhanced_image + + new_seg = SEG(utils.to_numpy(new_cropped_image), seg.cropped_mask, seg.confidence, seg.crop_region, seg.bbox, seg.label, None) + new_segs.append(new_seg) + + return (segs[0], new_segs), cnet_pil_list + + def doit(self, image, segs, guide_size, guide_size_for, max_size, seed, steps, cfg, sampler_name, scheduler, + denoise, noise_mask, force_inpaint, basic_pipe, refiner_ratio=None, batch_size=1, cycle=1, + refiner_basic_pipe_opt=None, inpaint_model=False, noise_mask_feather=0, scheduler_func_opt=None): + + if len(image) > 1: + raise Exception('[Impact Pack] ERROR: SEGSDetailer does not allow image batches.\nPlease refer to https://github.com/ltdrdata/ComfyUI-extension-tutorials/blob/Main/ComfyUI-Impact-Pack/tutorial/batching-detailer.md for more information.') + + segs, cnet_pil_list = SEGSDetailer.do_detail(image, segs, guide_size, guide_size_for, max_size, seed, steps, cfg, sampler_name, + scheduler, denoise, noise_mask, force_inpaint, basic_pipe, refiner_ratio, batch_size, cycle=cycle, + refiner_basic_pipe_opt=refiner_basic_pipe_opt, + inpaint_model=inpaint_model, noise_mask_feather=noise_mask_feather, scheduler_func_opt=scheduler_func_opt) + + # set fallback image + if len(cnet_pil_list) == 0: + cnet_pil_list = [utils.empty_pil_tensor()] + + return segs, cnet_pil_list + + + +class SEGSPaste: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "image": ("IMAGE", ), + "segs": ("SEGS", ), + "feather": ("INT", {"default": 5, "min": 0, "max": 100, "step": 1}), + "alpha": ("INT", {"default": 255, "min": 0, "max": 255, "step": 1}), + }, + "optional": {"ref_image_opt": ("IMAGE", ), } + } + + RETURN_TYPES = ("IMAGE", ) + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Detailer" + + DESCRIPTION = "This node provides a function to paste the enhanced SEGS, improved through the SEGS detailer, back onto the original image." + + @staticmethod + def doit(image, segs, feather, alpha=255, ref_image_opt=None): + # Optimized SEGS paste node: preallocates result and avoids repeated concat. + segs = core.segs_scale_match(segs, image.shape) + + batch_size, _, _, _ = image.shape + result = torch.empty_like(image) + + with torch.no_grad(): + for i in range(batch_size): + # avoid extra clone/unsqueeze + image_i = image[i].unsqueeze(0).clone() + + for seg in segs[1]: + ref_image = None + + # ref_image handling + if ref_image_opt is None and seg.cropped_image is not None: + cropped_image = seg.cropped_image + if isinstance(cropped_image, np.ndarray): + cropped_image = torch.from_numpy(cropped_image) + ref_image = cropped_image[i].unsqueeze(0) + elif ref_image_opt is not None: + ref_tensor = ref_image_opt[i].unsqueeze(0) + ref_image = utils.crop_image(ref_tensor, seg.crop_region) + + if ref_image is None: + continue + + # mask handling + cmask = seg.cropped_mask + if cmask.ndim == 3 and len(cmask) == batch_size: + mask = cmask[i] + elif cmask.ndim == 3 and len(cmask) > 1: + # statt OR-Schleife → vektorisiert + mask = torch.any(cmask > 0.1, dim=0).float() + else: # ndim == 2 + mask = cmask + + # blur + alpha + mask = utils.tensor_gaussian_blur_mask(mask, feather) * (alpha / 255.0) + + # ensure same device + mask = mask.to(image_i.device) + ref_image = ref_image.to(image_i.device) + + x, y, *_ = seg.crop_region + utils.tensor_paste(image_i, ref_image, (x, y), mask) + + result[i] = image_i[0] + + if not args.highvram and not args.gpu_only: + result = result.cpu() + + return (result,) + + +class SEGSPreviewCNet: + def __init__(self): + self.output_dir = folder_paths.get_temp_directory() + self.type = "temp" + + @classmethod + def INPUT_TYPES(s): + return {"required": {"segs": ("SEGS", ),}, } + + RETURN_TYPES = ("IMAGE", ) + OUTPUT_IS_LIST = (True, ) + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Util" + + OUTPUT_NODE = True + + def doit(self, segs): + full_output_folder, filename, counter, subfolder, filename_prefix = \ + folder_paths.get_save_image_path("impact_seg_preview", self.output_dir, segs[0][1], segs[0][0]) + + results = list() + result_image_list = [] + + for seg in segs[1]: + file = f"{filename}_{counter:05}_.webp" + + if seg.control_net_wrapper is not None and seg.control_net_wrapper.control_image is not None: + cnet_image = seg.control_net_wrapper.control_image + result_image_list.append(cnet_image) + else: + cnet_image = utils.empty_pil_tensor(64, 64) + + cnet_pil = utils.tensor2pil(cnet_image) + cnet_pil.save(os.path.join(full_output_folder, file)) + + results.append({ + "filename": file, + "subfolder": subfolder, + "type": self.type + }) + + counter += 1 + + return {"ui": {"images": results}, "result": (result_image_list,)} + + +class SEGSPreview: + def __init__(self): + self.output_dir = folder_paths.get_temp_directory() + self.type = "temp" + + @classmethod + def INPUT_TYPES(s): + return {"required": { + "segs": ("SEGS", ), + "alpha_mode": ("BOOLEAN", {"default": True, "label_on": "enable", "label_off": "disable"}), + "min_alpha": ("FLOAT", {"default": 0.2, "min": 0.0, "max": 1.0, "step": 0.01}), + }, + "optional": { + "fallback_image_opt": ("IMAGE", ), + } + } + + RETURN_TYPES = ("IMAGE", ) + OUTPUT_IS_LIST = (True, ) + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Util" + + OUTPUT_NODE = True + + def doit(self, segs, alpha_mode=True, min_alpha=0.0, fallback_image_opt=None): + full_output_folder, filename, counter, subfolder, filename_prefix = \ + folder_paths.get_save_image_path("impact_seg_preview", self.output_dir, segs[0][1], segs[0][0]) + + results = list() + result_image_list = [] + + if fallback_image_opt is not None: + segs = core.segs_scale_match(segs, fallback_image_opt.shape) + + if min_alpha != 0: + min_alpha = int(255 * min_alpha) + + if len(segs[1]) > 0: + if segs[1][0].cropped_image is not None: + batch_count = len(segs[1][0].cropped_image) + elif fallback_image_opt is not None: + batch_count = len(fallback_image_opt) + else: + return {"ui": {"images": results}} + + for seg in segs[1]: + result_image_batch = None + cached_mask = None + + def get_combined_mask(): + nonlocal cached_mask + + if cached_mask is not None: + return cached_mask + else: + if isinstance(seg.cropped_mask, np.ndarray): + masks = torch.tensor(seg.cropped_mask) + else: + masks = seg.cropped_mask + + cached_mask = (masks[0] * 255).to(torch.uint8) + for x in masks[1:]: + cached_mask |= (x * 255).to(torch.uint8) + cached_mask = (cached_mask/255.0).to(torch.float32) + cached_mask = utils.to_binary_mask(cached_mask, 0.1) + cached_mask = cached_mask.numpy() + + return cached_mask + + def stack_image(image, mask=None): + nonlocal result_image_batch + + if isinstance(image, np.ndarray): + image = torch.from_numpy(image) + + if mask is not None: + image *= torch.tensor(mask)[None, ..., None] + + if result_image_batch is None: + result_image_batch = image + else: + result_image_batch = torch.concat((result_image_batch, image), dim=0) + + for i in range(batch_count): + cropped_image = None + + if seg.cropped_image is not None: + cropped_image = seg.cropped_image[i, None] + elif fallback_image_opt is not None: + # take from original image + ref_image = fallback_image_opt[i].unsqueeze(0) + cropped_image = utils.crop_image(ref_image, seg.crop_region) + + if cropped_image is not None: + if isinstance(cropped_image, np.ndarray): + cropped_image = torch.from_numpy(cropped_image) + + cropped_image = cropped_image.clone() + cropped_pil = utils.to_pil(cropped_image) + + if alpha_mode: + if isinstance(seg.cropped_mask, np.ndarray): + cropped_mask = seg.cropped_mask + else: + if seg.cropped_image is not None and len(seg.cropped_image) != len(seg.cropped_mask): + cropped_mask = get_combined_mask() + else: + cropped_mask = seg.cropped_mask[i].numpy() + + mask_array = (cropped_mask * 255).astype(np.uint8) + + if min_alpha != 0: + mask_array[mask_array < min_alpha] = min_alpha + + mask_pil = Image.fromarray(mask_array, mode='L').resize(cropped_pil.size) + cropped_pil.putalpha(mask_pil) + stack_image(cropped_image, cropped_mask) + else: + stack_image(cropped_image) + + file = f"{filename}_{counter:05}_.webp" + cropped_pil.save(os.path.join(full_output_folder, file)) + results.append({ + "filename": file, + "subfolder": subfolder, + "type": self.type + }) + + counter += 1 + + if result_image_batch is not None: + result_image_list.append(result_image_batch) + + return {"ui": {"images": results}, "result": (result_image_list,) } + + +class SEGSLabelFilter: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "segs": ("SEGS", ), + "preset": (['all'] + defs.detection_labels, ), + "labels": ("STRING", {"multiline": True, "placeholder": "List the types of segments to be allowed, separated by commas"}), + }, + } + + RETURN_TYPES = ("SEGS", "SEGS",) + RETURN_NAMES = ("filtered_SEGS", "remained_SEGS",) + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Util" + + @staticmethod + def filter(segs, labels): + labels = set([label.strip() for label in labels]) + + if 'all' in labels: + return (segs, (segs[0], []), ) + else: + res_segs = [] + remained_segs = [] + + for x in segs[1]: + if x.label in labels: + res_segs.append(x) + elif 'eyes' in labels and x.label in ['left_eye', 'right_eye']: + res_segs.append(x) + elif 'eyebrows' in labels and x.label in ['left_eyebrow', 'right_eyebrow']: + res_segs.append(x) + elif 'pupils' in labels and x.label in ['left_pupil', 'right_pupil']: + res_segs.append(x) + else: + remained_segs.append(x) + + return ((segs[0], res_segs), (segs[0], remained_segs), ) + + def doit(self, segs, preset, labels): + labels = labels.split(',') + return SEGSLabelFilter.filter(segs, labels) + + +class SEGSLabelAssign: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "segs": ("SEGS", ), + "labels": ("STRING", {"multiline": True, "placeholder": "List the label to be assigned in order of segs, separated by commas"}), + }, + } + + RETURN_TYPES = ("SEGS",) + RETURN_NAMES = ("SEGS",) + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Util" + + @staticmethod + def assign(segs, labels): + labels = [label.strip() for label in labels] + + if len(labels) != len(segs[1]): + logging.warning(f'[Impact Pack] SEGSLabelAssign: length of labels ({len(labels)}) != length of segs ({len(segs[1])})') + + labeled_segs = [] + + idx = 0 + for x in segs[1]: + if len(labels) > idx: + x = x._replace(label=labels[idx]) + labeled_segs.append(x) + idx += 1 + + return ((segs[0], labeled_segs), ) + + def doit(self, segs, labels): + labels = labels.split(',') + return SEGSLabelAssign.assign(segs, labels) + + +class SEGSOrderedFilter: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "segs": ("SEGS", ), + "target": (["area(=w*h)", "width", "height", "x1", "y1", "x2", "y2", "confidence", "none"],), + "order": ("BOOLEAN", {"default": True, "label_on": "descending", "label_off": "ascending"}), + "take_start": ("INT", {"default": 0, "min": 0, "max": sys.maxsize, "step": 1}), + "take_count": ("INT", {"default": 1, "min": 0, "max": sys.maxsize, "step": 1}), + }, + } + + RETURN_TYPES = ("SEGS", "SEGS",) + RETURN_NAMES = ("filtered_SEGS", "remained_SEGS",) + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Util" + + @staticmethod + def get_sort_key_fn(target: str) -> Union[Callable, None]: + if target == "none": + return None + + def sort_key_fn(seg): + x1, y1, x2, y2 = seg.crop_region + if target == "confidence": return seg.confidence + if target == "area(=w*h)": return (x2 - x1) * (y2 - y1) + if target == "width": return x2 - x1 + if target == "height": return y2 - y1 + if target == "x1": return x1 + if target == "y1": return y1 + if target == "x2": return x2 + if target == "y2": return y2 + raise Exception(f"[Impact Pack] SEGSOrderedFilter - Unexpected target '{target}'") + + return sort_key_fn + + def doit(self, segs, target, order, take_start, take_count): + sort_key_fn = SEGSOrderedFilter.get_sort_key_fn(target) + + sorted_list = list(segs[1]) # make a shallow copy, so it does not mutate the original list when sort + if sort_key_fn is not None: + sorted_list.sort(key=sort_key_fn, reverse=order) + + take_stop = take_start + take_count + return (segs[0], sorted_list[take_start:take_stop]), \ + (segs[0], sorted_list[:take_start] + sorted_list[take_stop:]), + + +class SEGSRangeFilter: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "segs": ("SEGS", ), + "target": (["area(=w*h)", "width", "height", "x1", "y1", "x2", "y2", "length_percent", "confidence(0-100)"],), + "mode": ("BOOLEAN", {"default": True, "label_on": "inside", "label_off": "outside"}), + "min_value": ("INT", {"default": 0, "min": 0, "max": sys.maxsize, "step": 1}), + "max_value": ("INT", {"default": 67108864, "min": 0, "max": sys.maxsize, "step": 1}), + }, + } + + RETURN_TYPES = ("SEGS", "SEGS",) + RETURN_NAMES = ("filtered_SEGS", "remained_SEGS",) + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Util" + + def doit(self, segs, target, mode, min_value, max_value): + new_segs = [] + remained_segs = [] + + for seg in segs[1]: + x1 = seg.crop_region[0] + y1 = seg.crop_region[1] + x2 = seg.crop_region[2] + y2 = seg.crop_region[3] + + if target == "area(=w*h)": + value = (y2 - y1) * (x2 - x1) + elif target == "length_percent": + h = y2 - y1 + w = x2 - x1 + value = max(h/w, w/h)*100 + elif target == "width": + value = x2 - x1 + elif target == "height": + value = y2 - y1 + elif target == "x1": + value = x1 + elif target == "x2": + value = x2 + elif target == "y1": + value = y1 + elif target == "y2": + value = y2 + elif target == "confidence(0-100)": + value = seg.confidence*100 + else: + raise Exception(f"[Impact Pack] SEGSRangeFilter - Unexpected target '{target}'") + + if mode and min_value <= value <= max_value: + logging.info(f"[in] value={value} / {mode}, {min_value}, {max_value}") + new_segs.append(seg) + elif not mode and (value < min_value or value > max_value): + logging.info(f"[out] value={value} / {mode}, {min_value}, {max_value}") + new_segs.append(seg) + else: + remained_segs.append(seg) + logging.info(f"[filter] value={value} / {mode}, {min_value}, {max_value}") + + return (segs[0], new_segs), (segs[0], remained_segs), + + +class SEGSIntersectionFilter: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "segs1": ("SEGS", ), + "segs2": ("SEGS", ), + "ioa_threshold": ("FLOAT", {"default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01}), + }, + } + + RETURN_TYPES = ("SEGS",) + RETURN_NAMES = ("filtered_SEGS",) + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Util" + + def compute_ioa(self, mask1, mask2): + """Compute Intersection over Area (IoA) between two boxes.""" + inter_mask = utils.bitwise_and_masks(mask1, mask2) + + inter_area = (inter_mask > 0).sum() + area1 = (mask1 > 0).sum() + + return inter_area / area1 if area1 > 0 else 0 + + def doit(self, segs1, segs2, ioa_threshold): + """Remove segments from segs1 if their IoA with any segment in segs2 exceeds the threshold.""" + # Extract bounding boxes for all segments in segs1 and segs2 + keep = [] + + # Iterate over all segments in segs1 + for idx1, seg1 in enumerate(segs1[1]): + keep_segment = True # Assume the segment should be kept + mask1 = core.segs_to_combined_mask((segs1[0], [seg1])) + + # Compare with every segment in segs2 + for seg2 in segs2[1]: + mask2 = core.segs_to_combined_mask((segs2[0], [seg2])) + ioa = self.compute_ioa(mask1, mask2) # IoA between segment 1 and segment 2 + + if ioa > ioa_threshold: # If IoA exceeds the threshold, mark the segment for removal + keep_segment = False + break # If one overlap exceeds threshold, break early and mark for removal + + # Keep the segment if it did not exceed the threshold with any other segment + if keep_segment: + keep.append(segs1[1][idx1]) + + return (segs1[0], keep), # Return the updated SEGS + + +class SEGSNMSFilter: + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + "segs": ("SEGS",), + "iou_threshold": ("FLOAT", {"default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01}), + }, + } + + RETURN_TYPES = ("SEGS",) + RETURN_NAMES = ("filtered_SEGS",) + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Util" + + def compute_iou(self, mask1, mask2): + """Compute IoU between two bounding boxes (x1, y1, x2, y2).""" + inter_mask = utils.bitwise_and_masks(mask1, mask2) + union_mask = utils.add_masks(mask1, mask2) + + inter_area = (inter_mask > 0).sum() + union_area = (union_mask > 0).sum() + + return inter_area / union_area if union_area > 0 else 0 + + def doit(self, segs, iou_threshold): + """Perform NMS to filter overlapping segments.""" + confidences = np.ndarray.flatten(np.array([seg.confidence for seg in segs[1]])) + + # Sort boxes by confidence (high to low) + sorted_indices = np.argsort(confidences)[::-1].tolist() + keep = [] + + while len(sorted_indices) > 0: + idx = sorted_indices[0] + mask1 = core.segs_to_combined_mask((segs[0], [segs[1][idx]])) + keep.append(idx) + sorted_indices = sorted_indices[1:] + + # Filter indices only contain the indices where the bbox does not intersect + filtered_indices = [] + for i in sorted_indices: + mask2 = core.segs_to_combined_mask((segs[0], [segs[1][i]])) + iou = self.compute_iou(mask1, mask2) + if iou < iou_threshold: + filtered_indices.append(i) + + sorted_indices = np.array(filtered_indices) + + filtered_segs = [segs[1][i] for i in keep] + return (segs[0], filtered_segs), + + +class SEGSToImageList: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "segs": ("SEGS", ), + }, + "optional": { + "fallback_image_opt": ("IMAGE", ), + } + } + + RETURN_TYPES = ("IMAGE",) + OUTPUT_IS_LIST = (True,) + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Util" + + def doit(self, segs, fallback_image_opt=None): + results = list() + + if fallback_image_opt is not None: + segs = core.segs_scale_match(segs, fallback_image_opt.shape) + + for seg in segs[1]: + if seg.cropped_image is not None: + cropped_image = utils.to_tensor(seg.cropped_image) + elif fallback_image_opt is not None: + # take from original image + cropped_image = utils.to_tensor(utils.crop_image(fallback_image_opt, seg.crop_region)) + else: + cropped_image = utils.empty_pil_tensor() + + results.append(cropped_image) + + if len(results) == 0: + results.append(utils.empty_pil_tensor()) + + return (results,) + + +class SEGSToMaskList: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "segs": ("SEGS", ), + }, + } + + RETURN_TYPES = ("MASK",) + OUTPUT_IS_LIST = (True,) + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Util" + + def doit(self, segs): + masks = core.segs_to_masklist(segs) + if len(masks) == 0: + empty_mask = torch.zeros(segs[0], dtype=torch.float32, device="cpu") + masks = [empty_mask] + masks = [utils.make_3d_mask(mask) for mask in masks] + return (masks,) + + +class SEGSToMaskBatch: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "segs": ("SEGS", ), + }, + } + + RETURN_TYPES = ("MASK",) + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Util" + + def doit(self, segs): + masks = core.segs_to_masklist(segs) + masks = [utils.make_3d_mask(mask) for mask in masks] + mask_batch = torch.concat(masks) + return (mask_batch,) + + +class SEGSMerge: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "segs": ("SEGS", ), + }, + } + + RETURN_TYPES = ("SEGS",) + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Util" + + DESCRIPTION = "SEGS contains multiple SEGs. SEGS Merge integrates several SEGs into a single merged SEG. The label is changed to `merged` and the confidence becomes the minimum confidence. The applied controlnet and cropped_image are removed." + + def doit(self, segs): + crop_left = sys.maxsize + crop_right = 0 + crop_top = sys.maxsize + crop_bottom = 0 + + bbox_left = sys.maxsize + bbox_right = 0 + bbox_top = sys.maxsize + bbox_bottom = 0 + + min_confidence = 1.0 + + for seg in segs[1]: + cx1 = seg.crop_region[0] + cy1 = seg.crop_region[1] + cx2 = seg.crop_region[2] + cy2 = seg.crop_region[3] + + bx1 = seg.bbox[0] + by1 = seg.bbox[1] + bx2 = seg.bbox[2] + by2 = seg.bbox[3] + + crop_left = min(crop_left, cx1) + crop_top = min(crop_top, cy1) + crop_right = max(crop_right, cx2) + crop_bottom = max(crop_bottom, cy2) + + bbox_left = min(bbox_left, bx1) + bbox_top = min(bbox_top, by1) + bbox_right = max(bbox_right, bx2) + bbox_bottom = max(bbox_bottom, by2) + + min_confidence = min(min_confidence, seg.confidence) + + combined_mask = core.segs_to_combined_mask(segs) + cropped_mask = combined_mask[crop_top:crop_bottom, crop_left:crop_right] + cropped_mask = cropped_mask.unsqueeze(0) + + crop_region = [crop_left, crop_top, crop_right, crop_bottom] + bbox = [bbox_left, bbox_top, bbox_right, bbox_bottom] + + seg = SEG(None, cropped_mask, min_confidence, crop_region, bbox, 'merged', None) + return ((segs[0], [seg]),) + + +class SEGSConcat: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "segs1": ("SEGS", ), + }, + } + + RETURN_TYPES = ("SEGS",) + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Util" + + def doit(self, **kwargs): + dim = None + res = None + + for k, v in list(kwargs.items()): + if v[0] == (0, 0) or len(v[1]) == 0: + continue + + if dim is None: + dim = v[0] + res = v[1] + else: + if v[0] == dim: + res = res + v[1] + else: + logging.error(f"[Impact Pack] source shape of 'segs1'{dim} and '{k}'{v[0]} are different. '{k}' will be ignored") + + if dim is None: + empty_segs = ((0, 0), []) + return (empty_segs, ) + else: + return ((dim, res), ) + + +class Count_Elts_in_SEGS: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "segs": ("SEGS", ), + }, + } + + RETURN_TYPES = ("INT",) + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Util" + + def doit(self, segs): + return (len(segs[1]), ) + + +class DecomposeSEGS: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "segs": ("SEGS", ), + }, + } + + RETURN_TYPES = ("SEGS_HEADER", "SEG_ELT",) + OUTPUT_IS_LIST = (False, True, ) + + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Util" + + def doit(self, segs): + return segs + + +class AssembleSEGS: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "seg_header": ("SEGS_HEADER", ), + "seg_elt": ("SEG_ELT", ), + }, + } + + INPUT_IS_LIST = True + + RETURN_TYPES = ("SEGS", ) + + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Util" + + def doit(self, seg_header, seg_elt): + return ((seg_header[0], seg_elt), ) + + +class From_SEG_ELT: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "seg_elt": ("SEG_ELT", ), + }, + } + + RETURN_TYPES = ("SEG_ELT", "IMAGE", "MASK", "SEG_ELT_crop_region", "SEG_ELT_bbox", "SEG_ELT_control_net_wrapper", "FLOAT", "STRING") + RETURN_NAMES = ("seg_elt", "cropped_image", "cropped_mask", "crop_region", "bbox", "control_net_wrapper", "confidence", "label") + + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Util" + + def doit(self, seg_elt): + cropped_image = utils.to_tensor(seg_elt.cropped_image) if seg_elt.cropped_image is not None else None + return (seg_elt, cropped_image, utils.to_tensor(seg_elt.cropped_mask), seg_elt.crop_region, seg_elt.bbox, seg_elt.control_net_wrapper, seg_elt.confidence, seg_elt.label,) + + +class From_SEG_ELT_bbox: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "bbox": ("SEG_ELT_bbox", ), + }, + } + + RETURN_TYPES = ("INT", "INT", "INT", "INT") + RETURN_NAMES = ("left", "top", "right", "bottom") + + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Util" + + def doit(self, bbox): + return [int(c) for c in bbox] + + +class From_SEG_ELT_crop_region: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "crop_region": ("SEG_ELT_crop_region", ), + }, + } + + RETURN_TYPES = ("INT", "INT", "INT", "INT") + RETURN_NAMES = ("left", "top", "right", "bottom") + + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Util" + + def doit(self, crop_region): + return crop_region + + +class Edit_SEG_ELT: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "seg_elt": ("SEG_ELT", ), + }, + "optional": { + "cropped_image_opt": ("IMAGE", ), + "cropped_mask_opt": ("MASK", ), + "crop_region_opt": ("SEG_ELT_crop_region", ), + "bbox_opt": ("SEG_ELT_bbox", ), + "control_net_wrapper_opt": ("SEG_ELT_control_net_wrapper", ), + "confidence_opt": ("FLOAT", {"min": 0, "max": 1.0, "step": 0.1, "forceInput": True}), + "label_opt": ("STRING", {"multiline": False, "forceInput": True}), + } + } + + RETURN_TYPES = ("SEG_ELT", ) + + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Util" + + def doit(self, seg_elt, cropped_image_opt=None, cropped_mask_opt=None, confidence_opt=None, crop_region_opt=None, + bbox_opt=None, label_opt=None, control_net_wrapper_opt=None): + + cropped_image = seg_elt.cropped_image if cropped_image_opt is None else cropped_image_opt + cropped_mask = seg_elt.cropped_mask if cropped_mask_opt is None else cropped_mask_opt + confidence = seg_elt.confidence if confidence_opt is None else confidence_opt + crop_region = seg_elt.crop_region if crop_region_opt is None else crop_region_opt + bbox = seg_elt.bbox if bbox_opt is None else bbox_opt + label = seg_elt.label if label_opt is None else label_opt + control_net_wrapper = seg_elt.control_net_wrapper if control_net_wrapper_opt is None else control_net_wrapper_opt + + cropped_image = cropped_image.numpy() if cropped_image is not None else None + + if isinstance(cropped_mask, torch.Tensor): + if len(cropped_mask.shape) == 3: + cropped_mask = cropped_mask.squeeze(0) + + cropped_mask = cropped_mask.numpy() + + seg = SEG(cropped_image, cropped_mask, confidence, crop_region, bbox, label, control_net_wrapper) + + return (seg,) + + +class DilateMask: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "mask": ("MASK", ), + "dilation": ("INT", {"default": 10, "min": -512, "max": 512, "step": 1}), + }} + + RETURN_TYPES = ("MASK", ) + + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Util" + + def doit(self, mask, dilation): + mask = utils.dilate_mask(mask.numpy(), dilation) + mask = torch.from_numpy(mask) + mask = utils.make_3d_mask(mask) + return (mask, ) + + +class GaussianBlurMask: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "mask": ("MASK", ), + "kernel_size": ("INT", {"default": 10, "min": 0, "max": 100, "step": 1}), + "sigma": ("FLOAT", {"default": 10.0, "min": 0.1, "max": 100.0, "step": 0.1}), + }} + + RETURN_TYPES = ("MASK", ) + + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Util" + + def doit(self, mask, kernel_size, sigma): + # Some custom nodes use abnormal 4-dimensional masks in the format of b, c, h, w. In the impact pack, internal 4-dimensional masks are required in the format of b, h, w, c. Therefore, normalization is performed using the normal mask format, which is 3-dimensional, before proceeding with the operation. + mask = utils.make_3d_mask(mask) + mask = torch.unsqueeze(mask, dim=-1) + mask = utils.tensor_gaussian_blur_mask(mask, kernel_size, sigma) + mask = torch.squeeze(mask, dim=-1) + return (mask, ) + + +class DilateMaskInSEGS: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "segs": ("SEGS", ), + "dilation": ("INT", {"default": 10, "min": -512, "max": 512, "step": 1}), + }} + + RETURN_TYPES = ("SEGS", ) + + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Util" + + def doit(self, segs, dilation): + new_segs = [] + for seg in segs[1]: + mask = utils.dilate_mask(seg.cropped_mask, dilation) + seg = SEG(seg.cropped_image, mask, seg.confidence, seg.crop_region, seg.bbox, seg.label, seg.control_net_wrapper) + new_segs.append(seg) + + return ((segs[0], new_segs), ) + + +class GaussianBlurMaskInSEGS: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "segs": ("SEGS", ), + "kernel_size": ("INT", {"default": 10, "min": 0, "max": 100, "step": 1}), + "sigma": ("FLOAT", {"default": 10.0, "min": 0.1, "max": 100.0, "step": 0.1}), + }} + + RETURN_TYPES = ("SEGS", ) + + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Util" + + def doit(self, segs, kernel_size, sigma): + new_segs = [] + for seg in segs[1]: + mask = utils.tensor_gaussian_blur_mask(seg.cropped_mask, kernel_size, sigma) + mask = torch.squeeze(mask, dim=-1).squeeze(0).numpy() + seg = SEG(seg.cropped_image, mask, seg.confidence, seg.crop_region, seg.bbox, seg.label, seg.control_net_wrapper) + new_segs.append(seg) + + return ((segs[0], new_segs), ) + + +class Dilate_SEG_ELT: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "seg_elt": ("SEG_ELT", ), + "dilation": ("INT", {"default": 10, "min": -512, "max": 512, "step": 1}), + }} + + RETURN_TYPES = ("SEG_ELT", ) + + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Util" + + def doit(self, seg, dilation): + mask = utils.dilate_mask(seg.cropped_mask, dilation) + seg = SEG(seg.cropped_image, mask, seg.confidence, seg.crop_region, seg.bbox, seg.label, seg.control_net_wrapper) + return (seg,) + + +class SEG_ELT_BBOX_ScaleBy: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "seg": ("SEG_ELT", ), + "scale_by": ("FLOAT", {"default": 1.0, "min": 0.01, "max": 8.0, "step": 0.01}), } + } + + RETURN_TYPES = ("SEG_ELT", ) + + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Util" + + @staticmethod + def fill_zero_outside_bbox(mask, crop_region, bbox): + cx1, cy1, _, _ = crop_region + x1, y1, x2, y2 = bbox + x1, y1, x2, y2 = x1-cx1, y1-cy1, x2-cx1, y2-cy1 + h, w = mask.shape + + x1 = int(min(w-1, max(0, x1))) + x2 = int(min(w-1, max(0, x2))) + y1 = int(min(h-1, max(0, y1))) + y2 = int(min(h-1, max(0, y2))) + + mask_cropped = mask.copy() + mask_cropped[:, :x1] = 0 # zero fill left side + mask_cropped[:, x2:] = 0 # zero fill right side + mask_cropped[:y1, :] = 0 # zero fill top side + mask_cropped[y2:, :] = 0 # zero fill bottom side + return mask_cropped + + def doit(self, seg, scale_by): + x1, y1, x2, y2 = seg.bbox + w = x2-x1 + h = y2-y1 + + dw = int((w * scale_by - w)/2) + dh = int((h * scale_by - h)/2) + + bbox = (x1-dw, y1-dh, x2+dw, y2+dh) + + cropped_mask = SEG_ELT_BBOX_ScaleBy.fill_zero_outside_bbox(seg.cropped_mask, seg.crop_region, bbox) + seg = SEG(seg.cropped_image, cropped_mask, seg.confidence, seg.crop_region, bbox, seg.label, seg.control_net_wrapper) + return (seg,) + + +class EmptySEGS: + @classmethod + def INPUT_TYPES(s): + return {"required": {}, } + + RETURN_TYPES = ("SEGS",) + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Util" + + def doit(self): + shape = 0, 0 + return ((shape, []),) + + +class SegsToCombinedMask: + @classmethod + def INPUT_TYPES(s): + return {"required": {"segs": ("SEGS",), }} + + RETURN_TYPES = ("MASK",) + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Operation" + + def doit(self, segs): + mask = core.segs_to_combined_mask(segs) + mask = utils.make_3d_mask(mask) + return (mask,) + + +class MediaPipeFaceMeshToSEGS: + @classmethod + def INPUT_TYPES(s): + bool_true_widget = ("BOOLEAN", {"default": True, "label_on": "Enabled", "label_off": "Disabled"}) + bool_false_widget = ("BOOLEAN", {"default": False, "label_on": "Enabled", "label_off": "Disabled"}) + return {"required": { + "image": ("IMAGE",), + "crop_factor": ("FLOAT", {"default": 3.0, "min": 1.0, "max": 100, "step": 0.1}), + "bbox_fill": ("BOOLEAN", {"default": False, "label_on": "enabled", "label_off": "disabled"}), + "crop_min_size": ("INT", {"min": 10, "max": MAX_RESOLUTION, "step": 1, "default": 50}), + "drop_size": ("INT", {"min": 1, "max": MAX_RESOLUTION, "step": 1, "default": 1}), + "dilation": ("INT", {"default": 0, "min": -512, "max": 512, "step": 1}), + "face": bool_true_widget, + "mouth": bool_false_widget, + "left_eyebrow": bool_false_widget, + "left_eye": bool_false_widget, + "left_pupil": bool_false_widget, + "right_eyebrow": bool_false_widget, + "right_eye": bool_false_widget, + "right_pupil": bool_false_widget, + }, + # "optional": {"reference_image_opt": ("IMAGE", ), } + } + + RETURN_TYPES = ("SEGS",) + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Operation" + + def doit(self, image, crop_factor, bbox_fill, crop_min_size, drop_size, dilation, face, mouth, left_eyebrow, left_eye, left_pupil, right_eyebrow, right_eye, right_pupil): + # padding is obsolete now + # https://github.com/Fannovel16/comfyui_controlnet_aux/blob/1ec41fceff1ee99596445a0c73392fd91df407dc/utils.py#L33 + # def calc_pad(h_raw, w_raw): + # resolution = normalize_size_base_64(h_raw, w_raw) + # + # def pad64(x): + # return int(np.ceil(float(x) / 64.0) * 64 - x) + # + # k = float(resolution) / float(min(h_raw, w_raw)) + # h_target = int(np.round(float(h_raw) * k)) + # w_target = int(np.round(float(w_raw) * k)) + # + # return pad64(h_target), pad64(w_target) + + # if reference_image_opt is not None: + # if image.shape[1:] != reference_image_opt.shape[1:]: + # scale_by1 = reference_image_opt.shape[1] / image.shape[1] + # scale_by2 = reference_image_opt.shape[2] / image.shape[2] + # scale_by = min(scale_by1, scale_by2) + # + # # padding is obsolete now + # # h_pad, w_pad = calc_pad(reference_image_opt.shape[1], reference_image_opt.shape[2]) + # # if h_pad != 0: + # # # height padded + # # image = image[:, :-h_pad, :, :] + # # elif w_pad != 0: + # # # width padded + # # image = image[:, :, :-w_pad, :] + # + # image = nodes.ImageScaleBy().upscale(image, "bilinear", scale_by)[0] + + result = core.mediapipe_facemesh_to_segs(image, crop_factor, bbox_fill, crop_min_size, drop_size, dilation, face, mouth, left_eyebrow, left_eye, left_pupil, right_eyebrow, right_eye, right_pupil) + return (result, ) + + +class MaskToSEGS: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "mask": ("MASK",), + "combined": ("BOOLEAN", {"default": False, "label_on": "True", "label_off": "False"}), + "crop_factor": ("FLOAT", {"default": 3.0, "min": 1.0, "max": 100, "step": 0.1}), + "bbox_fill": ("BOOLEAN", {"default": False, "label_on": "enabled", "label_off": "disabled"}), + "drop_size": ("INT", {"min": 1, "max": MAX_RESOLUTION, "step": 1, "default": 10}), + "contour_fill": ("BOOLEAN", {"default": False, "label_on": "enabled", "label_off": "disabled"}), + } + } + + RETURN_TYPES = ("SEGS",) + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Operation" + + @staticmethod + def doit(mask, combined, crop_factor, bbox_fill, drop_size, contour_fill=False): + mask = utils.make_2d_mask(mask) + result = core.mask_to_segs(mask, combined, crop_factor, bbox_fill, drop_size, is_contour=contour_fill) + + return (result, ) + + +class MaskToSEGS_for_AnimateDiff: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "mask": ("MASK",), + "combined": ("BOOLEAN", {"default": False, "label_on": "True", "label_off": "False"}), + "crop_factor": ("FLOAT", {"default": 3.0, "min": 1.0, "max": 100, "step": 0.1}), + "bbox_fill": ("BOOLEAN", {"default": False, "label_on": "enabled", "label_off": "disabled"}), + "drop_size": ("INT", {"min": 1, "max": MAX_RESOLUTION, "step": 1, "default": 10}), + "contour_fill": ("BOOLEAN", {"default": False, "label_on": "enabled", "label_off": "disabled"}), + } + } + + RETURN_TYPES = ("SEGS",) + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Operation" + + @staticmethod + def doit(mask, combined, crop_factor, bbox_fill, drop_size, contour_fill=False): + if (len(mask.shape) == 4 and mask.shape[1] > 1) or (len(mask.shape) == 3 and mask.shape[0] > 1): + mask = utils.make_3d_mask(mask) + if contour_fill: + logging.info("[Impact Pack] MaskToSEGS_for_AnimateDiff: 'contour_fill' is ignored because batch mask 'contour_fill' is not supported.") + result = core.batch_mask_to_segs(mask, combined, crop_factor, bbox_fill, drop_size) + return (result, ) + + mask = utils.make_2d_mask(mask) + segs = core.mask_to_segs(mask, combined, crop_factor, bbox_fill, drop_size, is_contour=contour_fill) + all_masks = SEGSToMaskList().doit(segs)[0] + + result_mask = (all_masks[0] * 255).to(torch.uint8) + for mask in all_masks[1:]: + result_mask |= (mask * 255).to(torch.uint8) + + result_mask = (result_mask/255.0).to(torch.float32) + result_mask = utils.to_binary_mask(result_mask, 0.1)[0] + + return MaskToSEGS.doit(result_mask, False, crop_factor, False, drop_size, contour_fill) + + +class IPAdapterApplySEGS: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "segs": ("SEGS",), + "ipadapter_pipe": ("IPADAPTER_PIPE",), + "weight": ("FLOAT", {"default": 0.7, "min": -1, "max": 3, "step": 0.05}), + "noise": ("FLOAT", {"default": 0.4, "min": 0.0, "max": 1.0, "step": 0.01}), + "weight_type": (["original", "linear", "channel penalty"], {"default": 'channel penalty'}), + "start_at": ("FLOAT", {"default": 0.0, "min": 0.0, "max": 1.0, "step": 0.001}), + "end_at": ("FLOAT", {"default": 0.9, "min": 0.0, "max": 1.0, "step": 0.001}), + "unfold_batch": ("BOOLEAN", {"default": False}), + "faceid_v2": ("BOOLEAN", {"default": False}), + "weight_v2": ("FLOAT", {"default": 1.0, "min": -1, "max": 3, "step": 0.05}), + "context_crop_factor": ("FLOAT", {"default": 1.2, "min": 1.0, "max": 100, "step": 0.1}), + "reference_image": ("IMAGE",), + }, + "optional": { + "combine_embeds": (["concat", "add", "subtract", "average", "norm average"],), + "neg_image": ("IMAGE",), + }, + } + + RETURN_TYPES = ("SEGS",) + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Util" + + @staticmethod + def doit(segs, ipadapter_pipe, weight, noise, weight_type, start_at, end_at, unfold_batch, faceid_v2, weight_v2, context_crop_factor, reference_image, combine_embeds="concat", neg_image=None): + + if len(ipadapter_pipe) == 4: + logging.info("[Impact Pack] IPAdapterApplySEGS: Installed Inspire Pack is outdated.") + raise Exception("Inspire Pack is outdated.") + + new_segs = [] + + h, w = segs[0] + + if reference_image.shape[2] != w or reference_image.shape[1] != h: + reference_image = utils.tensor_resize(reference_image, w, h) + + for seg in segs[1]: + # The context_crop_region sets how much wider the IPAdapter context will reflect compared to the crop_region, not the bbox + context_crop_region = utils.make_crop_region(w, h, seg.crop_region, context_crop_factor) + cropped_image = utils.crop_image(reference_image, context_crop_region) + + control_net_wrapper = core.IPAdapterWrapper(ipadapter_pipe, weight, noise, weight_type, start_at, end_at, unfold_batch, weight_v2, cropped_image, neg_image=neg_image, prev_control_net=seg.control_net_wrapper, combine_embeds=combine_embeds) + new_seg = SEG(seg.cropped_image, seg.cropped_mask, seg.confidence, seg.crop_region, seg.bbox, seg.label, control_net_wrapper) + new_segs.append(new_seg) + + return ((segs[0], new_segs), ) + + +class ControlNetApplySEGS: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "segs": ("SEGS",), + "control_net": ("CONTROL_NET",), + "strength": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01}), + }, + "optional": { + "segs_preprocessor": ("SEGS_PREPROCESSOR",), + "control_image": ("IMAGE",) + } + } + + RETURN_TYPES = ("SEGS",) + FUNCTION = "doit" + + DEPRECATED = True + + CATEGORY = "ImpactPack/Util" + + @staticmethod + def doit(segs, control_net, strength, segs_preprocessor=None, control_image=None): + new_segs = [] + + for seg in segs[1]: + control_net_wrapper = core.ControlNetWrapper(control_net, strength, segs_preprocessor, seg.control_net_wrapper, + original_size=segs[0], crop_region=seg.crop_region, control_image=control_image) + new_seg = SEG(seg.cropped_image, seg.cropped_mask, seg.confidence, seg.crop_region, seg.bbox, seg.label, control_net_wrapper) + new_segs.append(new_seg) + + return ((segs[0], new_segs), ) + + +class ControlNetApplyAdvancedSEGS: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "segs": ("SEGS",), + "control_net": ("CONTROL_NET",), + "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": { + "segs_preprocessor": ("SEGS_PREPROCESSOR",), + "control_image": ("IMAGE",), + "vae": ("VAE",) + } + } + + RETURN_TYPES = ("SEGS",) + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Util" + + @staticmethod + def doit(segs, control_net, strength, start_percent, end_percent, segs_preprocessor=None, control_image=None, vae=None): + new_segs = [] + + for seg in segs[1]: + control_net_wrapper = core.ControlNetAdvancedWrapper(control_net, strength, start_percent, end_percent, segs_preprocessor, + seg.control_net_wrapper, original_size=segs[0], crop_region=seg.crop_region, + control_image=control_image, vae=vae) + new_seg = SEG(seg.cropped_image, seg.cropped_mask, seg.confidence, seg.crop_region, seg.bbox, seg.label, control_net_wrapper) + new_segs.append(new_seg) + + return ((segs[0], new_segs), ) + + +class ControlNetClearSEGS: + @classmethod + def INPUT_TYPES(s): + return {"required": {"segs": ("SEGS",), }, } + + RETURN_TYPES = ("SEGS",) + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Util" + + @staticmethod + def doit(segs): + new_segs = [] + + for seg in segs[1]: + new_seg = SEG(seg.cropped_image, seg.cropped_mask, seg.confidence, seg.crop_region, seg.bbox, seg.label, None) + new_segs.append(new_seg) + + return ((segs[0], new_segs), ) + + +class SEGSSwitch: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "select": ("INT", {"default": 1, "min": 1, "max": 99999, "step": 1}), + "segs1": ("SEGS",), + }, + } + + RETURN_TYPES = ("SEGS", ) + + OUTPUT_NODE = True + + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Util" + + def doit(self, *args, **kwargs): + input_name = f"segs{int(kwargs['select'])}" + + if input_name in kwargs: + return (kwargs[input_name],) + else: + logging.info("SEGSSwitch: invalid select index ('segs1' is selected)") + return (kwargs['segs1'],) + + +class SEGSPicker: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "picks": ("STRING", {"multiline": True, "dynamicPrompts": False, "pysssss.autocomplete": False}), + "segs": ("SEGS",), + }, + "optional": { + "fallback_image_opt": ("IMAGE", ), + }, + "hidden": {"unique_id": "UNIQUE_ID"}, + } + + RETURN_TYPES = ("SEGS", ) + + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Util" + + DESCRIPTION = "This node provides a function to select only the chosen SEGS from the input SEGS." + + @staticmethod + def doit(picks, segs, fallback_image_opt=None, unique_id=None): + if fallback_image_opt is not None: + segs = core.segs_scale_match(segs, fallback_image_opt.shape) + + # generate candidates image + cands = [] + for seg in segs[1]: + if seg.cropped_image is not None: + cropped_image = seg.cropped_image + elif fallback_image_opt is not None: + # take from original image + cropped_image = utils.crop_image(fallback_image_opt, seg.crop_region) + else: + cropped_image = utils.empty_pil_tensor() + + mask_array = seg.cropped_mask.copy() + mask_array[mask_array < 0.3] = 0.3 + mask_array = mask_array[None, ..., None] + cropped_image = cropped_image * mask_array + + cands.append(cropped_image) + + impact.impact_server.segs_picker_map[unique_id] = cands + + # pass only selected + pick_ids = set() + + for pick in picks.split(","): + try: + pick_ids.add(int(pick)-1) + except Exception: + pass + + new_segs = [] + for i in pick_ids: + if 0 <= i < len(segs[1]): + new_segs.append(segs[1][i]) + + return ((segs[0], new_segs),) + + +class DefaultImageForSEGS: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "segs": ("SEGS", ), + "image": ("IMAGE", ), + "override": ("BOOLEAN", {"default": True}), + }} + + RETURN_TYPES = ("SEGS", ) + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Util" + + DESCRIPTION = "If the SEGS have not passed through the detailer, they contain only detection area information without an image. This node sets a default image for the SEGS." + + @staticmethod + def doit(segs, image, override): + results = [] + + segs = core.segs_scale_match(segs, image.shape) + + if len(segs[1]) > 0: + if segs[1][0].cropped_image is not None: + batch_count = len(segs[1][0].cropped_image) + else: + batch_count = len(image) + + for seg in segs[1]: + if seg.cropped_image is not None and not override: + cropped_image = seg.cropped_image + else: + cropped_image = None + for i in range(0, batch_count): + # take from original image + ref_image = image[i].unsqueeze(0) + cropped_image2 = utils.crop_image(ref_image, seg.crop_region) + + if cropped_image is None: + cropped_image = cropped_image2 + else: + cropped_image = torch.cat((cropped_image, cropped_image2), dim=0) + + new_seg = SEG(cropped_image, seg.cropped_mask, seg.confidence, seg.crop_region, seg.bbox, seg.label, seg.control_net_wrapper) + results.append(new_seg) + + return ((segs[0], results), ) + else: + return (segs, ) + + +class RemoveImageFromSEGS: + @classmethod + def INPUT_TYPES(s): + return {"required": {"segs": ("SEGS", ), }} + + RETURN_TYPES = ("SEGS", ) + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Util" + + @staticmethod + def doit(segs): + results = [] + + if len(segs[1]) > 0: + for seg in segs[1]: + new_seg = SEG(None, seg.cropped_mask, seg.confidence, seg.crop_region, seg.bbox, seg.label, seg.control_net_wrapper) + results.append(new_seg) + + return ((segs[0], results), ) + else: + return (segs, ) + + +class MakeTileSEGS: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "images": ("IMAGE", ), + "bbox_size": ("INT", {"default": 512, "min": 64, "max": 4096, "step": 8}), + "crop_factor": ("FLOAT", {"default": 3.0, "min": 1.0, "max": 10, "step": 0.01}), + "min_overlap": ("INT", {"default": 5, "min": 0, "max": 512, "step": 1}), + "filter_segs_dilation": ("INT", {"default": 20, "min": -255, "max": 255, "step": 1}), + "mask_irregularity": ("FLOAT", {"default": 0, "min": 0, "max": 1.0, "step": 0.01}), + "irregular_mask_mode": (["Reuse fast", "Reuse quality", "All random fast", "All random quality"],) + }, + "optional": { + "filter_in_segs_opt": ("SEGS", ), + "filter_out_segs_opt": ("SEGS", ), + } + } + + RETURN_TYPES = ("SEGS",) + + FUNCTION = "doit" + + CATEGORY = "ImpactPack/__for_testing" + + @staticmethod + def doit(images, bbox_size, crop_factor, min_overlap, filter_segs_dilation, mask_irregularity=0, irregular_mask_mode="Reuse fast", filter_in_segs_opt=None, filter_out_segs_opt=None): + if bbox_size <= 2*min_overlap: + new_min_overlap = bbox_size / 2 + logging.info(f"[MakeTileSEGS] min_overlap should be greater than bbox_size. (value changed: {min_overlap} => {new_min_overlap})") + min_overlap = new_min_overlap + + _, ih, iw, _ = images.size() + + mask_cache = None + mask_quality = 512 + if mask_irregularity > 0: + if irregular_mask_mode == "Reuse fast": + mask_quality = 128 + mask_cache = np.zeros((128, 128)).astype(np.float32) + core.random_mask(mask_cache, (0, 0, 128, 128), factor=mask_irregularity, size=mask_quality) + elif irregular_mask_mode == "Reuse quality": + mask_quality = 512 + mask_cache = np.zeros((512, 512)).astype(np.float32) + core.random_mask(mask_cache, (0, 0, 512, 512), factor=mask_irregularity, size=mask_quality) + elif irregular_mask_mode == "All random fast": + mask_quality = 512 + + # compensate overlap/bbox_size for irregular mask + if mask_irregularity > 0: + compensate = max(6, int(mask_quality * mask_irregularity / 4)) + min_overlap += compensate + bbox_size += compensate*2 + + # create exclusion mask + if filter_out_segs_opt is not None: + exclusion_mask = core.segs_to_combined_mask(filter_out_segs_opt) + exclusion_mask = utils.make_3d_mask(exclusion_mask) + exclusion_mask = utils.resize_mask(exclusion_mask, (ih, iw)) + exclusion_mask = utils.dilate_mask(exclusion_mask.cpu().numpy(), filter_segs_dilation) + else: + exclusion_mask = None + + if filter_in_segs_opt is not None: + and_mask = core.segs_to_combined_mask(filter_in_segs_opt) + and_mask = utils.make_3d_mask(and_mask) + and_mask = utils.resize_mask(and_mask, (ih, iw)) + and_mask = utils.dilate_mask(and_mask.cpu().numpy(), filter_segs_dilation) + + a, b = core.mask_to_segs(and_mask, True, 1.0, False, 0) + if len(b) == 0: + return ((a, b),) + + start_x, start_y, c, d = b[0].crop_region + w = c - start_x + h = d - start_y + else: + start_x = 0 + start_y = 0 + h, w = ih, iw + and_mask = None + + # calculate tile factors + if bbox_size > h or bbox_size > w: + new_bbox_size = min(bbox_size, min(w, h)) + logging.info(f"[MaskTileSEGS] bbox_size is greater than resolution (value changed: {bbox_size} => {new_bbox_size}") + bbox_size = new_bbox_size + + n_horizontal = math.ceil(w / (bbox_size - min_overlap)) + n_vertical = math.ceil(h / (bbox_size - min_overlap)) + + w_overlap_sum = (bbox_size * n_horizontal) - w + if w_overlap_sum < 0: + n_horizontal += 1 + w_overlap_sum = (bbox_size * n_horizontal) - w + + w_overlap_size = 0 if n_horizontal == 1 else int(w_overlap_sum/(n_horizontal-1)) + + h_overlap_sum = (bbox_size * n_vertical) - h + if h_overlap_sum < 0: + n_vertical += 1 + h_overlap_sum = (bbox_size * n_vertical) - h + + h_overlap_size = 0 if n_vertical == 1 else int(h_overlap_sum/(n_vertical-1)) + + new_segs = [] + + if w_overlap_size == bbox_size: + n_horizontal = 1 + + if h_overlap_size == bbox_size: + n_vertical = 1 + + y = start_y + for j in range(0, n_vertical): + x = start_x + for i in range(0, n_horizontal): + x1 = x + y1 = y + + if x+bbox_size < iw-1: + x2 = x+bbox_size + else: + x2 = iw + x1 = iw-bbox_size + + if y+bbox_size < ih-1: + y2 = y+bbox_size + else: + y2 = ih + y1 = ih-bbox_size + + bbox = x1, y1, x2, y2 + crop_region = utils.make_crop_region(iw, ih, bbox, crop_factor) + cx1, cy1, cx2, cy2 = crop_region + + mask = np.zeros((cy2 - cy1, cx2 - cx1)).astype(np.float32) + + rel_left = x1 - cx1 + rel_top = y1 - cy1 + rel_right = x2 - cx1 + rel_bot = y2 - cy1 + + if mask_irregularity > 0: + if mask_cache is not None: + core.adaptive_mask_paste(mask, mask_cache, (rel_left, rel_top, rel_right, rel_bot)) + else: + core.random_mask(mask, (rel_left, rel_top, rel_right, rel_bot), factor=mask_irregularity, size=mask_quality) + + # corner filling + if rel_left == 0: + pad = int((x2 - x1) / 8) + mask[rel_top:rel_bot, :pad] = 1.0 + + if rel_top == 0: + pad = int((y2 - y1) / 8) + mask[:pad, rel_left:rel_right] = 1.0 + + if rel_right == mask.shape[1]: + pad = int((x2 - x1) / 8) + mask[rel_top:rel_bot, -pad:] = 1.0 + + if rel_bot == mask.shape[0]: + pad = int((y2 - y1) / 8) + mask[-pad:, rel_left:rel_right] = 1.0 + else: + mask[rel_top:rel_bot, rel_left:rel_right] = 1.0 + + mask = torch.tensor(mask) + + if exclusion_mask is not None: + exclusion_mask_cropped = exclusion_mask[cy1:cy2, cx1:cx2] + mask[exclusion_mask_cropped != 0] = 0.0 + + if and_mask is not None: + and_mask_cropped = and_mask[cy1:cy2, cx1:cx2] + mask[and_mask_cropped == 0] = 0.0 + + is_mask_zero = torch.all(mask == 0.0).item() + + if not is_mask_zero: + item = SEG(None, mask.numpy(), 1.0, crop_region, bbox, "", None) + new_segs.append(item) + + x += bbox_size - w_overlap_size + y += bbox_size - h_overlap_size + + res = (ih, iw), new_segs # segs + return (res,) + + +class SEGSUpscaler: + @classmethod + def INPUT_TYPES(s): + resampling_methods = ["lanczos", "nearest", "bilinear", "bicubic"] + + return {"required": { + "image": ("IMAGE",), + "segs": ("SEGS",), + "model": ("MODEL",), + "clip": ("CLIP",), + "vae": ("VAE",), + "rescale_factor": ("FLOAT", {"default": 2, "min": 0.01, "max": 100.0, "step": 0.01}), + "resampling_method": (resampling_methods,), + "supersample": (["true", "false"],), + "rounding_modulus": ("INT", {"default": 8, "min": 8, "max": 1024, "step": 8}), + "seed": ("INT", {"default": 0, "min": 0, "max": 0xffffffffffffffff}), + "steps": ("INT", {"default": 20, "min": 1, "max": 10000}), + "cfg": ("FLOAT", {"default": 8.0, "min": 0.0, "max": 100.0}), + "sampler_name": (comfy.samplers.KSampler.SAMPLERS,), + "scheduler": (core.get_schedulers(),), + "positive": ("CONDITIONING",), + "negative": ("CONDITIONING",), + "denoise": ("FLOAT", {"default": 0.5, "min": 0.0001, "max": 1.0, "step": 0.01}), + "feather": ("INT", {"default": 5, "min": 0, "max": 100, "step": 1}), + "inpaint_model": ("BOOLEAN", {"default": False, "label_on": "enabled", "label_off": "disabled"}), + "noise_mask_feather": ("INT", {"default": 20, "min": 0, "max": 100, "step": 1}), + }, + "optional": { + "upscale_model_opt": ("UPSCALE_MODEL",), + "upscaler_hook_opt": ("UPSCALER_HOOK",), + "scheduler_func_opt": ("SCHEDULER_FUNC",), + } + } + + RETURN_TYPES = ("IMAGE",) + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Upscale" + + @staticmethod + def doit(image, segs, model, clip, vae, rescale_factor, resampling_method, supersample, rounding_modulus, + seed, steps, cfg, sampler_name, scheduler, positive, negative, denoise, feather, inpaint_model, noise_mask_feather, + upscale_model_opt=None, upscaler_hook_opt=None, scheduler_func_opt=None): + + new_image = segs_upscaler.upscaler(image, upscale_model_opt, rescale_factor, resampling_method, supersample, rounding_modulus) + + segs = core.segs_scale_match(segs, new_image.shape) + + ordered_segs = segs[1] + + for i, seg in enumerate(ordered_segs): + cropped_image = utils.crop_ndarray4(new_image.numpy(), seg.crop_region) + cropped_image = utils.to_tensor(cropped_image) + mask = utils.to_tensor(seg.cropped_mask) + mask = utils.tensor_gaussian_blur_mask(mask, feather) + + is_mask_all_zeros = (seg.cropped_mask == 0).all().item() + if is_mask_all_zeros: + logging.info("SEGSUpscaler: segment skip [empty mask]") + continue + + cropped_mask = seg.cropped_mask + + seg_seed = seed + i + + enhanced_image = segs_upscaler.img2img_segs(cropped_image, model, clip, vae, seg_seed, steps, cfg, sampler_name, scheduler, + positive, negative, denoise, + noise_mask=cropped_mask, control_net_wrapper=seg.control_net_wrapper, + inpaint_model=inpaint_model, noise_mask_feather=noise_mask_feather, scheduler_func_opt=scheduler_func_opt) + if enhanced_image is not None: + new_image = new_image.cpu() + enhanced_image = enhanced_image.cpu() + left = seg.crop_region[0] + top = seg.crop_region[1] + utils.tensor_paste(new_image, enhanced_image, (left, top), mask) + + if upscaler_hook_opt is not None: + new_image = upscaler_hook_opt.post_paste(new_image) + + enhanced_img = utils.tensor_convert_rgb(new_image) + + return (enhanced_img,) + + +class SEGSUpscalerPipe: + @classmethod + def INPUT_TYPES(s): + resampling_methods = ["lanczos", "nearest", "bilinear", "bicubic"] + + return {"required": { + "image": ("IMAGE",), + "segs": ("SEGS",), + "basic_pipe": ("BASIC_PIPE",), + "rescale_factor": ("FLOAT", {"default": 2, "min": 0.01, "max": 100.0, "step": 0.01}), + "resampling_method": (resampling_methods,), + "supersample": (["true", "false"],), + "rounding_modulus": ("INT", {"default": 8, "min": 8, "max": 1024, "step": 8}), + "seed": ("INT", {"default": 0, "min": 0, "max": 0xffffffffffffffff}), + "steps": ("INT", {"default": 20, "min": 1, "max": 10000}), + "cfg": ("FLOAT", {"default": 8.0, "min": 0.0, "max": 100.0}), + "sampler_name": (comfy.samplers.KSampler.SAMPLERS,), + "scheduler": (core.get_schedulers(),), + "denoise": ("FLOAT", {"default": 0.5, "min": 0.0001, "max": 1.0, "step": 0.01}), + "feather": ("INT", {"default": 5, "min": 0, "max": 100, "step": 1}), + "inpaint_model": ("BOOLEAN", {"default": False, "label_on": "enabled", "label_off": "disabled"}), + "noise_mask_feather": ("INT", {"default": 20, "min": 0, "max": 100, "step": 1}), + }, + "optional": { + "upscale_model_opt": ("UPSCALE_MODEL",), + "upscaler_hook_opt": ("UPSCALER_HOOK",), + "scheduler_func_opt": ("SCHEDULER_FUNC",), + } + } + + RETURN_TYPES = ("IMAGE",) + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Upscale" + + @staticmethod + def doit(image, segs, basic_pipe, rescale_factor, resampling_method, supersample, rounding_modulus, + seed, steps, cfg, sampler_name, scheduler, denoise, feather, inpaint_model, noise_mask_feather, + upscale_model_opt=None, upscaler_hook_opt=None, scheduler_func_opt=None): + + model, clip, vae, positive, negative = basic_pipe + + return SEGSUpscaler.doit(image, segs, model, clip, vae, rescale_factor, resampling_method, supersample, rounding_modulus, + seed, steps, cfg, sampler_name, scheduler, positive, negative, denoise, feather, inpaint_model, noise_mask_feather, + upscale_model_opt=upscale_model_opt, upscaler_hook_opt=upscaler_hook_opt, scheduler_func_opt=scheduler_func_opt) diff --git a/comfyui-impact-pack/modules/impact/segs_upscaler.py b/comfyui-impact-pack/modules/impact/segs_upscaler.py new file mode 100644 index 0000000000000000000000000000000000000000..fb3cd304215f1891c0e2b6473397d439872802fc --- /dev/null +++ b/comfyui-impact-pack/modules/impact/segs_upscaler.py @@ -0,0 +1,140 @@ +from impact import impact_sampling +from comfy import model_management +from impact import utils +from PIL import Image +import nodes +import torch +import inspect +import logging +import comfy + +try: + from comfy_extras import nodes_differential_diffusion +except Exception: + logging.info("[Impact Pack] ComfyUI is an outdated version. The DifferentialDiffusion feature will be disabled.") + + +# Implementation based on `https://github.com/lingondricka2/Upscaler-Detailer` + +# code from comfyroll ---> +# https://github.com/Suzie1/ComfyUI_Comfyroll_CustomNodes/blob/main/nodes/functions_upscale.py + +def upscale_with_model(upscale_model, image): + device = model_management.get_torch_device() + upscale_model.to(device) + in_img = image.movedim(-1, -3).to(device) + + tile = 512 + overlap = 32 + + oom = True + while oom: + try: + steps = in_img.shape[0] * comfy.utils.get_tiled_scale_steps(in_img.shape[3], in_img.shape[2], tile_x=tile, tile_y=tile, overlap=overlap) + pbar = comfy.utils.ProgressBar(steps) + s = comfy.utils.tiled_scale(in_img, lambda a: upscale_model(a), tile_x=tile, tile_y=tile, overlap=overlap, upscale_amount=upscale_model.scale, pbar=pbar) + oom = False + except model_management.OOM_EXCEPTION as e: + tile //= 2 + if tile < 128: + raise e + + s = torch.clamp(s.movedim(-3, -1), min=0, max=1.0) + return s + + +def apply_resize_image(image: Image.Image, original_width, original_height, rounding_modulus, mode='scale', supersample='true', factor: int = 2, width: int = 1024, height: int = 1024, + resample='bicubic'): + # Calculate the new width and height based on the given mode and parameters + if mode == 'rescale': + new_width, new_height = int(original_width * factor), int(original_height * factor) + else: + m = rounding_modulus + original_ratio = original_height / original_width + height = int(width * original_ratio) + + new_width = width if width % m == 0 else width + (m - width % m) + new_height = height if height % m == 0 else height + (m - height % m) + + # Define a dictionary of resampling filters + resample_filters = {'nearest': 0, 'bilinear': 2, 'bicubic': 3, 'lanczos': 1} + + # Apply supersample + if supersample == 'true': + image = image.resize((new_width * 8, new_height * 8), resample=Image.Resampling(resample_filters[resample])) + + # Resize the image using the given resampling filter + resized_image = image.resize((new_width, new_height), resample=Image.Resampling(resample_filters[resample])) + + return resized_image + + +def upscaler(image, upscale_model, rescale_factor, resampling_method, supersample, rounding_modulus): + if upscale_model is not None: + up_image = upscale_with_model(upscale_model, image) + else: + up_image = image + + pil_img = utils.tensor2pil(image) + original_width, original_height = pil_img.size + scaled_image = utils.pil2tensor(apply_resize_image(utils.tensor2pil(up_image), original_width, original_height, rounding_modulus, 'rescale', + supersample, rescale_factor, 1024, resampling_method)) + return scaled_image + +# <--- + + +def img2img_segs(image, model, clip, vae, seed, steps, cfg, sampler_name, scheduler, + positive, negative, denoise, noise_mask, control_net_wrapper=None, + inpaint_model=False, noise_mask_feather=0, scheduler_func_opt=None): + + original_image_size = image.shape[1:3] + + # Match to original image size + if original_image_size[0] % 8 > 0 or original_image_size[1] % 8 > 0: + scale = 8/min(original_image_size[0], original_image_size[1]) + 1 + w = int(original_image_size[1] * scale) + h = int(original_image_size[0] * scale) + image = utils.tensor_resize(image, w, h) + + if noise_mask is not None: + noise_mask = utils.tensor_gaussian_blur_mask(noise_mask, noise_mask_feather) + noise_mask = noise_mask.squeeze(3) + + if noise_mask_feather > 0 and 'denoise_mask_function' not in model.model_options: + model = nodes_differential_diffusion.DifferentialDiffusion().execute(model)[0] + + if control_net_wrapper is not None: + positive, negative, _ = control_net_wrapper.apply(positive, negative, image, noise_mask) + + # prepare mask + if noise_mask is not None and inpaint_model: + imc_encode = nodes.InpaintModelConditioning().encode + if 'noise_mask' in inspect.signature(imc_encode).parameters: + positive, negative, latent_image = imc_encode(positive, negative, image, vae, mask=noise_mask, noise_mask=True) + else: + logging.info("[Impact Pack] ComfyUI is an outdated version.") + positive, negative, latent_image = imc_encode(positive, negative, image, vae, noise_mask) + else: + latent_image = utils.to_latent_image(image, vae) + if noise_mask is not None: + latent_image['noise_mask'] = noise_mask + + refined_latent = latent_image + + # ksampler + refined_latent = impact_sampling.ksampler_wrapper(model, seed, steps, cfg, sampler_name, scheduler, positive, negative, refined_latent, denoise, scheduler_func=scheduler_func_opt) + + # non-latent downscale - latent downscale cause bad quality + refined_image = vae.decode(refined_latent['samples']) + + # prevent mixing of device + refined_image = refined_image.cpu() + + # Match to original image size + if refined_image.shape[1:3] != original_image_size: + refined_image = utils.tensor_resize(refined_image, original_image_size[1], original_image_size[0]) + + # don't convert to latent - latent break image + # preserving pil is much better + return refined_image diff --git a/comfyui-impact-pack/modules/impact/special_samplers.py b/comfyui-impact-pack/modules/impact/special_samplers.py new file mode 100644 index 0000000000000000000000000000000000000000..ffa1c7689f4bd0320efebeafb9721b9ffb2686e3 --- /dev/null +++ b/comfyui-impact-pack/modules/impact/special_samplers.py @@ -0,0 +1,686 @@ +import math +import impact.core as core +from comfy_extras.nodes_custom_sampler import Noise_RandomNoise +from nodes import MAX_RESOLUTION +import nodes +from impact.impact_sampling import KSamplerWrapper, KSamplerAdvancedWrapper, separated_sample, impact_sample +import comfy +import torch +import numpy as np +import logging + + +class TiledKSamplerProvider: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "seed": ("INT", {"default": 0, "min": 0, "max": 0xffffffffffffffff, "tooltip": "Random seed to use for generating CPU noise for sampling."}), + "steps": ("INT", {"default": 20, "min": 1, "max": 10000, "tooltip": "total sampling steps"}), + "cfg": ("FLOAT", {"default": 8.0, "min": 0.0, "max": 100.0, "tooltip": "classifier free guidance value"}), + "sampler_name": (comfy.samplers.KSampler.SAMPLERS, {"tooltip": "sampler"}), + "scheduler": (comfy.samplers.KSampler.SCHEDULERS, {"tooltip": "noise schedule"}), + "denoise": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01, "tooltip": "The amount of noise to remove. This amount is the noise added at the start, and the higher it is, the more the input latent will be modified before being returned."}), + "tile_width": ("INT", {"default": 512, "min": 320, "max": MAX_RESOLUTION, "step": 64, "tooltip": "Sets the width of the tile to be used in TiledKSampler."}), + "tile_height": ("INT", {"default": 512, "min": 320, "max": MAX_RESOLUTION, "step": 64, "tooltip": "Sets the height of the tile to be used in TiledKSampler."}), + "tiling_strategy": (["random", "padded", 'simple'], {"tooltip": "Sets the tiling strategy for TiledKSampler."} ), + "basic_pipe": ("BASIC_PIPE", {"tooltip": "basic_pipe input for sampling"}) + }} + + OUTPUT_TOOLTIPS = ("sampler wrapper. (Can be used when generating a regional_prompt.)", ) + + RETURN_TYPES = ("KSAMPLER",) + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Sampler" + + @staticmethod + def doit(seed, steps, cfg, sampler_name, scheduler, denoise, + tile_width, tile_height, tiling_strategy, basic_pipe): + model, _, _, positive, negative = basic_pipe + sampler = core.TiledKSamplerWrapper(model, seed, steps, cfg, sampler_name, scheduler, positive, negative, denoise, + tile_width, tile_height, tiling_strategy) + return (sampler, ) + + +class KSamplerProvider: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "seed": ("INT", {"default": 0, "min": 0, "max": 0xffffffffffffffff, "tooltip": "Random seed to use for generating CPU noise for sampling."}), + "steps": ("INT", {"default": 20, "min": 1, "max": 10000, "tooltip": "total sampling steps"}), + "cfg": ("FLOAT", {"default": 8.0, "min": 0.0, "max": 100.0, "tooltip": "classifier free guidance value"}), + "sampler_name": (comfy.samplers.KSampler.SAMPLERS, {"tooltip": "sampler"}), + "scheduler": (core.get_schedulers(), {"tooltip": "noise schedule"}), + "denoise": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01, "tooltip": "The amount of noise to remove. This amount is the noise added at the start, and the higher it is, the more the input latent will be modified before being returned."}), + "basic_pipe": ("BASIC_PIPE", {"tooltip": "basic_pipe input for sampling"}) + }, + "optional": { + "scheduler_func_opt": ("SCHEDULER_FUNC", {"tooltip": "[OPTIONAL] Noise schedule generation function. If this is set, the scheduler widget will be ignored."}), + } + } + + OUTPUT_TOOLTIPS = ("sampler wrapper. (Can be used when generating a regional_prompt.)",) + + RETURN_TYPES = ("KSAMPLER",) + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Sampler" + + @staticmethod + def doit(seed, steps, cfg, sampler_name, scheduler, denoise, basic_pipe, scheduler_func_opt=None): + model, _, _, positive, negative = basic_pipe + sampler = KSamplerWrapper(model, seed, steps, cfg, sampler_name, scheduler, positive, negative, denoise, scheduler_func=scheduler_func_opt) + return (sampler, ) + + +class KSamplerAdvancedProvider: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "cfg": ("FLOAT", {"default": 8.0, "min": 0.0, "max": 100.0, "toolip": "classifier free guidance value"}), + "sampler_name": (comfy.samplers.KSampler.SAMPLERS, {"toolip": "sampler"}), + "scheduler": (core.get_schedulers(), {"toolip": "noise schedule"}), + "sigma_factor": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01, "toolip": "Multiplier of noise schedule"}), + "basic_pipe": ("BASIC_PIPE", {"toolip": "basic_pipe input for sampling"}) + }, + "optional": { + "sampler_opt": ("SAMPLER", {"toolip": "[OPTIONAL] Uses the passed sampler instead of internal impact_sampler."}), + "scheduler_func_opt": ("SCHEDULER_FUNC", {"toolip": "[OPTIONAL] Noise schedule generation function. If this is set, the scheduler widget will be ignored."}), + } + } + + OUTPUT_TOOLTIPS = ("sampler wrapper. (Can be used when generating a regional_prompt.)", ) + + RETURN_TYPES = ("KSAMPLER_ADVANCED",) + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Sampler" + + @staticmethod + def doit(cfg, sampler_name, scheduler, basic_pipe, sigma_factor=1.0, sampler_opt=None, scheduler_func_opt=None): + model, _, _, positive, negative = basic_pipe + sampler = KSamplerAdvancedWrapper(model, cfg, sampler_name, scheduler, positive, negative, sampler_opt=sampler_opt, sigma_factor=sigma_factor, scheduler_func=scheduler_func_opt) + return (sampler, ) + + +class TwoSamplersForMask: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "latent_image": ("LATENT", {"tooltip": "input latent image"}), + "base_sampler": ("KSAMPLER", {"tooltip": "Sampler to apply to the region outside the mask."}), + "mask_sampler": ("KSAMPLER", {"tooltip": "Sampler to apply to the masked region."}), + "mask": ("MASK", {"tooltip": "region mask"}) + }, + } + + OUTPUT_TOOLTIPS = ("result latent", ) + + RETURN_TYPES = ("LATENT", ) + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Sampler" + + @staticmethod + def doit(latent_image, base_sampler, mask_sampler, mask): + inv_mask = torch.where(mask != 1.0, torch.tensor(1.0), torch.tensor(0.0)) + + latent_image['noise_mask'] = inv_mask + new_latent_image = base_sampler.sample(latent_image) + + new_latent_image['noise_mask'] = mask + new_latent_image = mask_sampler.sample(new_latent_image) + + del new_latent_image['noise_mask'] + + return (new_latent_image, ) + + +class TwoAdvancedSamplersForMask: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "seed": ("INT", {"default": 0, "min": 0, "max": 0xffffffffffffffff, "tooltip": "Random seed to use for generating CPU noise for sampling."}), + "steps": ("INT", {"default": 20, "min": 1, "max": 10000, "tooltip": "total sampling steps"}), + "denoise": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01, "tooltip": "The amount of noise to remove. This amount is the noise added at the start, and the higher it is, the more the input latent will be modified before being returned."}), + "samples": ("LATENT", {"tooltip": "input latent image"}), + "base_sampler": ("KSAMPLER_ADVANCED", {"tooltip": "Sampler to apply to the region outside the mask."}), + "mask_sampler": ("KSAMPLER_ADVANCED", {"tooltip": "Sampler to apply to the masked region."}), + "mask": ("MASK", {"tooltip": "region mask"}), + "overlap_factor": ("INT", {"default": 10, "min": 0, "max": 10000, "tooltip": "To smooth the seams of the region boundaries, expand the mask by the overlap_factor amount to overlap with other regions."}) + }, + } + + OUTPUT_TOOLTIPS = ("result latent", ) + + RETURN_TYPES = ("LATENT", ) + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Sampler" + + @staticmethod + def doit(seed, steps, denoise, samples, base_sampler, mask_sampler, mask, overlap_factor): + regional_prompts = RegionalPrompt().doit(mask=mask, advanced_sampler=mask_sampler)[0] + + return RegionalSampler().doit(seed=seed, seed_2nd=0, seed_2nd_mode="ignore", steps=steps, base_only_steps=1, + denoise=denoise, samples=samples, base_sampler=base_sampler, + regional_prompts=regional_prompts, overlap_factor=overlap_factor, + restore_latent=True, additional_mode="ratio between", + additional_sampler="AUTO", additional_sigma_ratio=0.3) + + +class RegionalPrompt: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "mask": ("MASK", {"tooltip": "region mask"}), + "advanced_sampler": ("KSAMPLER_ADVANCED", {"tooltip": "sampler for specified region"}), + }, + "optional": { + "variation_seed": ("INT", {"default": 0, "min": 0, "max": 0xffffffffffffffff, "tooltip": "Sets the extra seed to be used for noise variation."}), + "variation_strength": ("FLOAT", {"default": 0.0, "min": 0.0, "max": 1.0, "step": 0.01, "tooltip": "Sets the strength of the noise variation."}), + "variation_method": (["linear", "slerp"], {"tooltip": "Sets how the original noise and extra noise are blended together."}), + } + } + + OUTPUT_TOOLTIPS = ("regional prompts. (Can be used in the RegionalSampler.)", ) + + RETURN_TYPES = ("REGIONAL_PROMPTS", ) + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Regional" + + @staticmethod + def doit(mask, advanced_sampler, variation_seed=0, variation_strength=0.0, variation_method="linear"): + regional_prompt = core.REGIONAL_PROMPT(mask, advanced_sampler, variation_seed=variation_seed, variation_strength=variation_strength, variation_method=variation_method) + return ([regional_prompt], ) + + +class CombineRegionalPrompts: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "regional_prompts1": ("REGIONAL_PROMPTS", {"tooltip": "input regional_prompts. (Connecting to the input slot increases the number of additional slots.)"}), + }, + } + + OUTPUT_TOOLTIPS = ("Combined REGIONAL_PROMPTS", ) + + RETURN_TYPES = ("REGIONAL_PROMPTS", ) + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Regional" + + @staticmethod + def doit(**kwargs): + res = [] + for k, v in kwargs.items(): + res += v + + return (res, ) + + +class CombineConditionings: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "conditioning1": ("CONDITIONING", { "tooltip": "input conditionings. (Connecting to the input slot increases the number of additional slots.)" }), + }, + } + + OUTPUT_TOOLTIPS = ("Combined conditioning", ) + + RETURN_TYPES = ("CONDITIONING", ) + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Util" + + @staticmethod + def doit(**kwargs): + res = [] + for k, v in kwargs.items(): + res += v + + return (res, ) + + +class ConcatConditionings: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "conditioning1": ("CONDITIONING", { "tooltip": "input conditionings. (Connecting to the input slot increases the number of additional slots.)" }), + }, + } + + OUTPUT_TOOLTIPS = ("Concatenated conditioning", ) + + RETURN_TYPES = ("CONDITIONING", ) + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Util" + + @staticmethod + def doit(**kwargs): + conditioning_to = list(kwargs.values())[0] + + for k, conditioning_from in list(kwargs.items())[1:]: + out = [] + if len(conditioning_from) > 1: + logging.warning("Warning: ConcatConditionings {k} contains more than 1 cond, only the first one will actually be applied to conditioning1.") + + cond_from = conditioning_from[0][0] + + for i in range(len(conditioning_to)): + t1 = conditioning_to[i][0] + tw = torch.cat((t1, cond_from), 1) + n = [tw, conditioning_to[i][1].copy()] + out.append(n) + + conditioning_to = out + + return (out, ) + + +class RegionalSampler: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "seed": ("INT", {"default": 0, "min": 0, "max": 0xffffffffffffffff, "tooltip": "Random seed to use for generating CPU noise for sampling."}), + "seed_2nd": ("INT", {"default": 0, "min": 0, "max": 0xffffffffffffffff, "tooltip": "Additional noise seed. The behavior is determined by seed_2nd_mode."}), + "seed_2nd_mode": (["ignore", "fixed", "seed+seed_2nd", "seed-seed_2nd", "increment", "decrement", "randomize"], {"tooltip": "application method of seed_2nd. 1) ignore: Do not use seed_2nd. In the base only sampling stage, the seed is applied as a noise seed, and in the regional sampling stage, denoising is performed as it is without additional noise. 2) Others: In the base only sampling stage, the seed is applied as a noise seed, and once it is closed so that there is no leftover noise, new noise is added with seed_2nd and the regional samping stage is performed. a) fixed: Use seed_2nd as it is as an additional noise seed. b) seed+seed_2nd: Apply the value of seed+seed_2nd as an additional noise seed. c) seed-seed_2nd: Apply the value of seed-seed_2nd as an additional noise seed. d) increment: Not implemented yet. Same with fixed. e) decrement: Not implemented yet. Same with fixed. f) randomize: Not implemented yet. Same with fixed."}), + "steps": ("INT", {"default": 20, "min": 1, "max": 10000, "tooltip": "total sampling steps"}), + "base_only_steps": ("INT", {"default": 2, "min": 0, "max": 10000, "tooltip": "total sampling steps"}), + "denoise": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01, "tooltip": "The amount of noise to remove. This amount is the noise added at the start, and the higher it is, the more the input latent will be modified before being returned."}), + "samples": ("LATENT", {"tooltip": "input latent image"}), + "base_sampler": ("KSAMPLER_ADVANCED", {"tooltip": "The sampler applied outside the area set by the regional_prompt."}), + "regional_prompts": ("REGIONAL_PROMPTS", {"tooltip": "The prompt applied to each region"}), + "overlap_factor": ("INT", {"default": 10, "min": 0, "max": 10000, "tooltip": "To smooth the seams of the region boundaries, expand the mask set in regional_prompts by the overlap_factor amount to overlap with other regions."}), + "restore_latent": ("BOOLEAN", {"default": True, "label_on": "enabled", "label_off": "disabled", "tooltip": "At each step, restore the noise outside the mask area to its original state, as per the principle of inpainting. This option is provided for backward compatibility, and it is recommended to always set it to true."}), + "additional_mode": (["DISABLE", "ratio additional", "ratio between"], {"default": "ratio between", "tooltip": "..._sde or uni_pc and other special samplers are used, the region is not properly denoised, and it causes a phenomenon that destroys the overall harmony. To compensate for this, a recovery operation is performed using another sampler. This requires a longer time for sampling because a second sampling is performed at each step in each region using a special sampler. 1) DISABLE: Disable this feature. 2) ratio additional: After performing the denoise amount to be performed in the step with the sampler set in the region, the recovery sampler is additionally applied by the additional_sigma_ratio. If you use this option, the total denoise amount increases by additional_sigma_ratio. 3) ratio between: The denoise amount to be performed in the step with the sampler set in the region and the denoise amount to be applied to the recovery sampler are divided by additional_sigma_ratio, and denoise is performed for each denoise amount. If you use this option, the total denoise amount does not change."}), + "additional_sampler": (["AUTO", "euler", "heun", "heunpp2", "dpm_2", "dpm_fast", "dpmpp_2m", "ddpm"], {"tooltip": "1) AUTO: Automatically set the recovery sampler. If the sampler is uni_pc, uni_pc_bh2, dpmpp_sde, dpmpp_sde_gpu, the dpm_fast sampler is selected If the sampler is dpmpp_2m_sde, dpmpp_2m_sde_gpu, dpmpp_3m_sde, dpmpp_3m_sde_gpu, the dpmpp_2m sampler is selected. 2) Others: Manually set the recovery sampler."}), + "additional_sigma_ratio": ("FLOAT", {"default": 0.3, "min": 0.0, "max": 1.0, "step": 0.01, "tooltip": "Multiplier of noise schedule to be applied according to additional_mode."}), + }, + "hidden": {"unique_id": "UNIQUE_ID"}, + } + + OUTPUT_TOOLTIPS = ("result latent", ) + + RETURN_TYPES = ("LATENT", ) + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Regional" + + @staticmethod + def separated_sample(*args, **kwargs): + return separated_sample(*args, **kwargs) + + @staticmethod + def mask_erosion(samples, mask, grow_mask_by): + mask = mask.clone() + + w = samples['samples'].shape[3] + h = samples['samples'].shape[2] + + mask2 = torch.nn.functional.interpolate(mask.reshape((-1, 1, mask.shape[-2], mask.shape[-1])), size=(w, h), mode="bilinear") + if grow_mask_by == 0: + mask_erosion = mask2 + else: + kernel_tensor = torch.ones((1, 1, grow_mask_by, grow_mask_by)) + padding = math.ceil((grow_mask_by - 1) / 2) + + mask_erosion = torch.clamp(torch.nn.functional.conv2d(mask2.round(), kernel_tensor, padding=padding), 0, 1) + + return mask_erosion[:, :, :w, :h].round() + + @staticmethod + def doit(seed, seed_2nd, seed_2nd_mode, steps, base_only_steps, denoise, samples, base_sampler, regional_prompts, overlap_factor, restore_latent, + additional_mode, additional_sampler, additional_sigma_ratio, unique_id=None): + + samples = samples.copy() + samples['samples'] = comfy.sample.fix_empty_latent_channels(base_sampler.params[0], samples['samples']) + + if restore_latent: + latent_compositor = nodes.NODE_CLASS_MAPPINGS['LatentCompositeMasked']() + else: + latent_compositor = None + + masks = [regional_prompt.mask.numpy() for regional_prompt in regional_prompts] + masks = [np.ceil(mask).astype(np.int32) for mask in masks] + combined_mask = torch.from_numpy(np.bitwise_or.reduce(masks)) + + inv_mask = torch.where(combined_mask == 0, torch.tensor(1.0), torch.tensor(0.0)) + + adv_steps = int(steps / denoise) + start_at_step = adv_steps - steps + + region_len = len(regional_prompts) + total = steps*region_len + + leftover_noise = False + if base_only_steps > 0: + if seed_2nd_mode == 'ignore': + leftover_noise = True + + noise = Noise_RandomNoise(seed).generate_noise(samples) + + for rp in regional_prompts: + noise = rp.touch_noise(noise) + + samples = base_sampler.sample_advanced(True, seed, adv_steps, samples, start_at_step, start_at_step + base_only_steps, leftover_noise, recovery_mode="DISABLE", noise=noise) + + if seed_2nd_mode == "seed+seed_2nd": + seed += seed_2nd + if seed > 1125899906842624: + seed = seed - 1125899906842624 + elif seed_2nd_mode == "seed-seed_2nd": + seed -= seed_2nd + if seed < 0: + seed += 1125899906842624 + elif seed_2nd_mode != 'ignore': + seed = seed_2nd + + new_latent_image = samples.copy() + base_latent_image = None + + if not leftover_noise: + add_noise = True + noise = Noise_RandomNoise(seed).generate_noise(samples) + + for rp in regional_prompts: + noise = rp.touch_noise(noise) + else: + add_noise = False + noise = None + + for i in range(start_at_step+base_only_steps, adv_steps): + core.update_node_status(unique_id, f"{i}/{steps} steps | ", ((i-start_at_step)*region_len)/total) + + new_latent_image['noise_mask'] = inv_mask + new_latent_image = base_sampler.sample_advanced(add_noise, seed, adv_steps, new_latent_image, + start_at_step=i, end_at_step=i + 1, return_with_leftover_noise=True, + recovery_mode=additional_mode, recovery_sampler=additional_sampler, recovery_sigma_ratio=additional_sigma_ratio, noise=noise) + + if restore_latent: + if 'noise_mask' in new_latent_image: + del new_latent_image['noise_mask'] + base_latent_image = new_latent_image.copy() + + j = 1 + for regional_prompt in regional_prompts: + if restore_latent: + new_latent_image = base_latent_image.copy() + + core.update_node_status(unique_id, f"{i}/{steps} steps | {j}/{region_len}", ((i-start_at_step)*region_len + j)/total) + + region_mask = regional_prompt.get_mask_erosion(overlap_factor).squeeze(0).squeeze(0) + + new_latent_image['noise_mask'] = region_mask + new_latent_image = regional_prompt.sampler.sample_advanced(False, seed, adv_steps, new_latent_image, i, i + 1, True, + recovery_mode=additional_mode, recovery_sampler=additional_sampler, recovery_sigma_ratio=additional_sigma_ratio) + + if restore_latent: + del new_latent_image['noise_mask'] + base_latent_image = latent_compositor.composite(base_latent_image, new_latent_image, 0, 0, False, region_mask)[0] + new_latent_image = base_latent_image + + j += 1 + + add_noise = False + + # finalize + core.update_node_status(unique_id, "finalize") + if base_latent_image is not None: + new_latent_image = base_latent_image + else: + base_latent_image = new_latent_image + + new_latent_image['noise_mask'] = inv_mask + new_latent_image = base_sampler.sample_advanced(False, seed, adv_steps, new_latent_image, adv_steps, adv_steps+1, False, + recovery_mode=additional_mode, recovery_sampler=additional_sampler, recovery_sigma_ratio=additional_sigma_ratio) + + core.update_node_status(unique_id, f"{steps}/{steps} steps", total) + core.update_node_status(unique_id, "", None) + + if restore_latent: + new_latent_image = base_latent_image + + if 'noise_mask' in new_latent_image: + del new_latent_image['noise_mask'] + + return (new_latent_image, ) + + +class RegionalSamplerAdvanced: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "add_noise": ("BOOLEAN", {"default": True, "label_on": "enabled", "label_off": "disabled", "tooltip": "Whether to add noise"}), + "noise_seed": ("INT", {"default": 0, "min": 0, "max": 0xffffffffffffffff, "tooltip": "Random seed to use for generating CPU noise for sampling."}), + "steps": ("INT", {"default": 20, "min": 1, "max": 10000, "tooltip": "total sampling steps"}), + "start_at_step": ("INT", {"default": 0, "min": 0, "max": 10000, "tooltip": "The starting step of the sampling to be applied at this node within the range of 'steps'."}), + "end_at_step": ("INT", {"default": 10000, "min": 0, "max": 10000, "tooltip": "The step at which sampling applied at this node will stop within the range of steps (if greater than steps, sampling will continue only up to steps)."}), + "overlap_factor": ("INT", {"default": 10, "min": 0, "max": 10000, "tooltip": "To smooth the seams of the region boundaries, expand the mask set in regional_prompts by the overlap_factor amount to overlap with other regions."}), + "restore_latent": ("BOOLEAN", {"default": True, "label_on": "enabled", "label_off": "disabled", "tooltip": "At each step, restore the noise outside the mask area to its original state, as per the principle of inpainting. This option is provided for backward compatibility, and it is recommended to always set it to true."}), + "return_with_leftover_noise": ("BOOLEAN", {"default": False, "label_on": "enabled", "label_off": "disabled", "tooltip": "Whether to return the latent with noise remaining if the noise has not been completely removed according to the noise schedule, or to completely remove the noise before returning it."}), + "latent_image": ("LATENT", {"tooltip": "input latent image"}), + "base_sampler": ("KSAMPLER_ADVANCED", {"tooltip": "The sampler applied outside the area set by the regional_prompt."}), + "regional_prompts": ("REGIONAL_PROMPTS", {"tooltip": "The prompt applied to each region"}), + "additional_mode": (["DISABLE", "ratio additional", "ratio between"], {"default": "ratio between", "tooltip": "..._sde or uni_pc and other special samplers are used, the region is not properly denoised, and it causes a phenomenon that destroys the overall harmony. To compensate for this, a recovery operation is performed using another sampler. This requires a longer time for sampling because a second sampling is performed at each step in each region using a special sampler. 1) DISABLE: Disable this feature. 2) ratio additional: After performing the denoise amount to be performed in the step with the sampler set in the region, the recovery sampler is additionally applied by the additional_sigma_ratio. If you use this option, the total denoise amount increases by additional_sigma_ratio. 3) ratio between: The denoise amount to be performed in the step with the sampler set in the region and the denoise amount to be applied to the recovery sampler are divided by additional_sigma_ratio, and denoise is performed for each denoise amount. If you use this option, the total denoise amount does not change."}), + "additional_sampler": (["AUTO", "euler", "heun", "heunpp2", "dpm_2", "dpm_fast", "dpmpp_2m", "ddpm"], {"tooltip": "1) AUTO: Automatically set the recovery sampler. If the sampler is uni_pc, uni_pc_bh2, dpmpp_sde, dpmpp_sde_gpu, the dpm_fast sampler is selected If the sampler is dpmpp_2m_sde, dpmpp_2m_sde_gpu, dpmpp_3m_sde, dpmpp_3m_sde_gpu, the dpmpp_2m sampler is selected. 2) Others: Manually set the recovery sampler."}), + "additional_sigma_ratio": ("FLOAT", {"default": 0.3, "min": 0.0, "max": 1.0, "step": 0.01, "tooltip": "Multiplier of noise schedule to be applied according to additional_mode."}), + }, + "hidden": {"unique_id": "UNIQUE_ID"}, + } + + OUTPUT_TOOLTIPS = ("result latent", ) + + RETURN_TYPES = ("LATENT", ) + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Regional" + + @staticmethod + def doit(add_noise, noise_seed, steps, start_at_step, end_at_step, overlap_factor, restore_latent, return_with_leftover_noise, latent_image, base_sampler, regional_prompts, + additional_mode, additional_sampler, additional_sigma_ratio, unique_id): + + new_latent_image = latent_image.copy() + new_latent_image['samples'] = comfy.sample.fix_empty_latent_channels(base_sampler.params[0], new_latent_image['samples']) + + if restore_latent: + latent_compositor = nodes.NODE_CLASS_MAPPINGS['LatentCompositeMasked']() + else: + latent_compositor = None + + masks = [regional_prompt.mask.numpy() for regional_prompt in regional_prompts] + masks = [np.ceil(mask).astype(np.int32) for mask in masks] + combined_mask = torch.from_numpy(np.bitwise_or.reduce(masks)) + + inv_mask = torch.where(combined_mask == 0, torch.tensor(1.0), torch.tensor(0.0)) + + region_len = len(regional_prompts) + end_at_step = min(steps, end_at_step) + total = (end_at_step - start_at_step) * region_len + + base_latent_image = None + region_masks = {} + + for i in range(start_at_step, end_at_step-1): + core.update_node_status(unique_id, f"{start_at_step+i}/{end_at_step} steps | ", ((i-start_at_step)*region_len)/total) + + cur_add_noise = True if i == start_at_step and add_noise else False + + if cur_add_noise: + noise = Noise_RandomNoise(noise_seed).generate_noise(new_latent_image) + for rp in regional_prompts: + noise = rp.touch_noise(noise) + else: + noise = None + + new_latent_image['noise_mask'] = inv_mask + new_latent_image = base_sampler.sample_advanced(cur_add_noise, noise_seed, steps, new_latent_image, i, i + 1, True, + recovery_mode=additional_mode, recovery_sampler=additional_sampler, recovery_sigma_ratio=additional_sigma_ratio, noise=noise) + + if restore_latent: + del new_latent_image['noise_mask'] + base_latent_image = new_latent_image.copy() + + j = 1 + for regional_prompt in regional_prompts: + if restore_latent: + new_latent_image = base_latent_image.copy() + + core.update_node_status(unique_id, f"{start_at_step+i}/{end_at_step} steps | {j}/{region_len}", ((i-start_at_step)*region_len + j)/total) + + if j not in region_masks: + region_mask = regional_prompt.get_mask_erosion(overlap_factor).squeeze(0).squeeze(0) + region_masks[j] = region_mask + else: + region_mask = region_masks[j] + + new_latent_image['noise_mask'] = region_mask + new_latent_image = regional_prompt.sampler.sample_advanced(False, noise_seed, steps, new_latent_image, i, i + 1, True, + recovery_mode=additional_mode, recovery_sampler=additional_sampler, recovery_sigma_ratio=additional_sigma_ratio) + + if restore_latent: + del new_latent_image['noise_mask'] + base_latent_image = latent_compositor.composite(base_latent_image, new_latent_image, 0, 0, False, region_mask)[0] + new_latent_image = base_latent_image + + j += 1 + + # finalize + core.update_node_status(unique_id, "finalize") + if base_latent_image is not None: + new_latent_image = base_latent_image + else: + base_latent_image = new_latent_image + + new_latent_image['noise_mask'] = inv_mask + new_latent_image = base_sampler.sample_advanced(False, noise_seed, steps, new_latent_image, end_at_step-1, end_at_step, return_with_leftover_noise, + recovery_mode=additional_mode, recovery_sampler=additional_sampler, recovery_sigma_ratio=additional_sigma_ratio) + + core.update_node_status(unique_id, f"{end_at_step}/{end_at_step} steps", total) + core.update_node_status(unique_id, "", None) + + if restore_latent: + new_latent_image = base_latent_image + + if 'noise_mask' in new_latent_image: + del new_latent_image['noise_mask'] + + return (new_latent_image, ) + + +class KSamplerBasicPipe: + @classmethod + def INPUT_TYPES(s): + return {"required": + {"basic_pipe": ("BASIC_PIPE", {"tooltip": "basic_pipe input for sampling"}), + "seed": ("INT", {"default": 0, "min": 0, "max": 0xffffffffffffffff, "tooltip": "Random seed to use for generating CPU noise for sampling."}), + "steps": ("INT", {"default": 20, "min": 1, "max": 10000, "tooltip": "total sampling steps"}), + "cfg": ("FLOAT", {"default": 8.0, "min": 0.0, "max": 100.0, "tooltip": "classifier free guidance value"}), + "sampler_name": (comfy.samplers.KSampler.SAMPLERS, {"tooltip": "sampler"}), + "scheduler": (core.get_schedulers(), {"tooltip": "noise schedule"}), + "latent_image": ("LATENT", {"tooltip": "input latent image"}), + "denoise": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01, "tooltip": "The amount of noise to remove. This amount is the noise added at the start, and the higher it is, the more the input latent will be modified before being returned."}), + }, + "optional": + { + "scheduler_func_opt": ("SCHEDULER_FUNC", {"tooltip": "[OPTIONAL] Noise schedule generation function. If this is set, the scheduler widget will be ignored."}), + } + } + + OUTPUT_TOOLTIPS = ("passthrough input basic_pipe", "result latent", "VAE in basic_pipe") + + RETURN_TYPES = ("BASIC_PIPE", "LATENT", "VAE") + FUNCTION = "sample" + + CATEGORY = "ImpactPack/sampling" + + @staticmethod + def sample(basic_pipe, seed, steps, cfg, sampler_name, scheduler, latent_image, denoise=1.0, scheduler_func_opt=None): + model, clip, vae, positive, negative = basic_pipe + latent = impact_sample(model, seed, steps, cfg, sampler_name, scheduler, positive, negative, latent_image, denoise, scheduler_func=scheduler_func_opt) + return basic_pipe, latent, vae + + +class KSamplerAdvancedBasicPipe: + @classmethod + def INPUT_TYPES(s): + return {"required": + {"basic_pipe": ("BASIC_PIPE", {"tooltip": "basic_pipe input for sampling"}), + "add_noise": ("BOOLEAN", {"default": True, "label_on": "enable", "label_off": "disable", "tooltip": "Whether to add noise"}), + "noise_seed": ("INT", {"default": 0, "min": 0, "max": 0xffffffffffffffff, "tooltip": "Random seed to use for generating CPU noise for sampling."}), + "steps": ("INT", {"default": 20, "min": 1, "max": 10000, "tooltip": "total sampling steps"}), + "cfg": ("FLOAT", {"default": 8.0, "min": 0.0, "max": 100.0, "tooltip": "classifier free guidance value"}), + "sampler_name": (comfy.samplers.KSampler.SAMPLERS, {"tooltip": "sampler"}), + "scheduler": (core.get_schedulers(), {"tooltip": "noise schedule"}), + "latent_image": ("LATENT", {"tooltip": "input latent image"}), + "start_at_step": ("INT", {"default": 0, "min": 0, "max": 10000, "tooltip": "The starting step of the sampling to be applied at this node within the range of 'steps'."}), + "end_at_step": ("INT", {"default": 10000, "min": 0, "max": 10000, "tooltip": "The step at which sampling applied at this node will stop within the range of steps (if greater than steps, sampling will continue only up to steps)."}), + "return_with_leftover_noise": ("BOOLEAN", {"default": False, "label_on": "enable", "label_off": "disable", "tooltip": "Whether to return the latent with noise remaining if the noise has not been completely removed according to the noise schedule, or to completely remove the noise before returning it."}), + }, + "optional": + { + "scheduler_func_opt": ("SCHEDULER_FUNC", {"tooltip": "[OPTIONAL] Noise schedule generation function. If this is set, the scheduler widget will be ignored."}), + } + } + + OUTPUT_TOOLTIPS = ("passthrough input basic_pipe", "result latent", "VAE in basic_pipe") + + RETURN_TYPES = ("BASIC_PIPE", "LATENT", "VAE") + FUNCTION = "sample" + + CATEGORY = "ImpactPack/sampling" + + @staticmethod + def sample(basic_pipe, add_noise, noise_seed, steps, cfg, sampler_name, scheduler, latent_image, start_at_step, end_at_step, return_with_leftover_noise, denoise=1.0, scheduler_func_opt=None): + model, clip, vae, positive, negative = basic_pipe + + latent = separated_sample(model, add_noise, noise_seed, steps, cfg, sampler_name, scheduler, positive, negative, latent_image, start_at_step, end_at_step, return_with_leftover_noise, scheduler_func=scheduler_func_opt) + return basic_pipe, latent, vae + + +class GITSSchedulerFuncProvider: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "coeff": ("FLOAT", {"default": 1.20, "min": 0.80, "max": 1.50, "step": 0.05, "tooltip": "coeff factor of GITS Scheduler"}), + "denoise": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01, "tooltip": "denoise amount for noise schedule"}), + } + } + + OUTPUT_TOOLTIPS = ("Returns a function that generates a noise schedule using GITSScheduler. This can be used in place of a predetermined noise schedule to dynamically generate a noise schedule based on the steps.",) + + RETURN_TYPES = ("SCHEDULER_FUNC",) + CATEGORY = "ImpactPack/sampling" + + FUNCTION = "doit" + + @staticmethod + def doit(coeff, denoise): + def f(model, sampler, steps): + if 'GITSScheduler' not in nodes.NODE_CLASS_MAPPINGS: + raise Exception("[Impact Pack] ComfyUI is an outdated version. Cannot use GITSScheduler.") + + scheduler = nodes.NODE_CLASS_MAPPINGS['GITSScheduler']() + return scheduler.get_sigmas(coeff, steps, denoise)[0] + + return (f, ) + + +class NegativeConditioningPlaceholder: + @classmethod + def INPUT_TYPES(s): + return {"required": {}} + + OUTPUT_TOOLTIPS = ("This is a Placeholder for the FLUX model that does not use Negative Conditioning.",) + + RETURN_TYPES = ("CONDITIONING",) + CATEGORY = "ImpactPack/sampling" + + FUNCTION = "doit" + + @staticmethod + def doit(): + return ("NegativePlaceholder", ) diff --git a/comfyui-impact-pack/modules/impact/util_nodes.py b/comfyui-impact-pack/modules/impact/util_nodes.py new file mode 100644 index 0000000000000000000000000000000000000000..1c94c48f96d66fcf100b84ecaf9097e23baaceb0 --- /dev/null +++ b/comfyui-impact-pack/modules/impact/util_nodes.py @@ -0,0 +1,775 @@ +from impact.utils import any_typ, ByPassTypeTuple, make_3d_mask +import comfy_extras.nodes_mask +from nodes import MAX_RESOLUTION +import torch +import comfy +import sys +import nodes +import re +import impact.core as core +from server import PromptServer +import inspect +import logging + + +class GeneralSwitch: + @classmethod + def INPUT_TYPES(s): + dyn_inputs = {"input1": (any_typ, {"lazy": True, "tooltip": "Any input. When connected, one more input slot is added."}), } + if core.is_execution_model_version_supported(): + stack = inspect.stack() + if stack[2].function == 'get_input_info': + # bypass validation + class AllContainer: + def __contains__(self, item): + return True + + def __getitem__(self, key): + return any_typ, {"lazy": True} + + dyn_inputs = AllContainer() + + inputs = {"required": { + "select": ("INT", {"default": 1, "min": 1, "max": 999999, "step": 1, "tooltip": "The input number you want to output among the inputs"}), + "sel_mode": ("BOOLEAN", {"default": False, "label_on": "select_on_prompt", "label_off": "select_on_execution", "forceInput": False, + "tooltip": "In the case of 'select_on_execution', the selection is dynamically determined at the time of workflow execution. 'select_on_prompt' is an option that exists for older versions of ComfyUI, and it makes the decision before the workflow execution."}), + }, + "optional": dyn_inputs, + "hidden": {"unique_id": "UNIQUE_ID", "extra_pnginfo": "EXTRA_PNGINFO"} + } + + return inputs + + RETURN_TYPES = (any_typ, "STRING", "INT") + RETURN_NAMES = ("selected_value", "selected_label", "selected_index") + OUTPUT_TOOLTIPS = ("Output is generated only from the input chosen by the 'select' value.", "Slot label of the selected input slot", "Outputs the select value as is") + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Util" + + def check_lazy_status(self, *args, **kwargs): + selected_index = int(kwargs['select']) + input_name = f"input{selected_index}" + + logging.info(f"SELECTED: {input_name}") + + if input_name in kwargs: + return [input_name] + else: + return [] + + @staticmethod + def doit(*args, **kwargs): + selected_index = int(kwargs['select']) + input_name = f"input{selected_index}" + + selected_label = input_name + node_id = kwargs['unique_id'] + + if 'extra_pnginfo' in kwargs and kwargs['extra_pnginfo'] is not None: + nodelist = kwargs['extra_pnginfo']['workflow']['nodes'] + for node in nodelist: + if str(node['id']) == node_id: + inputs = node['inputs'] + + for slot in inputs: + if slot['name'] == input_name and 'label' in slot: + selected_label = slot['label'] + + break + else: + logging.info("[Impact-Pack] The switch node does not guarantee proper functioning in API mode.") + + if input_name in kwargs: + return kwargs[input_name], selected_label, selected_index + else: + logging.info("ImpactSwitch: invalid select index (ignored)") + return None, "", selected_index + +class LatentSwitch: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "select": ("INT", {"default": 1, "min": 1, "max": 99999, "step": 1}), + "latent1": ("LATENT",), + }, + } + + RETURN_TYPES = ("LATENT", ) + + OUTPUT_NODE = True + + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Util" + + def doit(self, *args, **kwargs): + input_name = f"latent{int(kwargs['select'])}" + + if input_name in kwargs: + return (kwargs[input_name],) + else: + logging.info("LatentSwitch: invalid select index ('latent1' is selected)") + return (kwargs['latent1'],) + + +class ImageMaskSwitch: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "select": ("INT", {"default": 1, "min": 1, "max": 4, "step": 1}), + "images1": ("IMAGE",), + }, + + "optional": { + "mask1_opt": ("MASK",), + "images2_opt": ("IMAGE",), + "mask2_opt": ("MASK",), + "images3_opt": ("IMAGE",), + "mask3_opt": ("MASK",), + "images4_opt": ("IMAGE",), + "mask4_opt": ("MASK",), + }, + } + + RETURN_TYPES = ("IMAGE", "MASK",) + + OUTPUT_NODE = True + + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Util" + + def doit(self, select, images1, mask1_opt=None, images2_opt=None, mask2_opt=None, images3_opt=None, mask3_opt=None, + images4_opt=None, mask4_opt=None): + if select == 1: + return images1, mask1_opt, + elif select == 2: + return images2_opt, mask2_opt, + elif select == 3: + return images3_opt, mask3_opt, + else: + return images4_opt, mask4_opt, + + +class GeneralInversedSwitch: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "select": ("INT", {"default": 1, "min": 1, "max": 999999, "step": 1, "tooltip": "The output number you want to send from the input"}), + "input": (any_typ, {"tooltip": "Any input. When connected, one more input slot is added."}), + + }, + "optional": { + "sel_mode": ("BOOLEAN", {"default": False, "label_on": "select_on_prompt", "label_off": "select_on_execution", "forceInput": False, + "tooltip": "In the case of 'select_on_execution', the selection is dynamically determined at the time of workflow execution. 'select_on_prompt' is an option that exists for older versions of ComfyUI, and it makes the decision before the workflow execution."}), + }, + "hidden": {"prompt": "PROMPT", "unique_id": "UNIQUE_ID"}, + } + + RETURN_TYPES = ByPassTypeTuple((any_typ, )) + OUTPUT_TOOLTIPS = ("Output occurs only from the output selected by the 'select' value.\nWhen slots are connected, additional slots are created.", ) + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Util" + + def doit(self, select, prompt, unique_id, input, **kwargs): + if core.is_execution_model_version_supported(): + from comfy_execution.graph import ExecutionBlocker + else: + logging.warning("[Impact Pack] InversedSwitch: ComfyUI is outdated. The 'select_on_execution' mode cannot function properly.") + + res = [] + + # search max output count in prompt + cnt = 0 + for x in prompt.values(): + for y in x.get('inputs', {}).values(): + if isinstance(y, list) and len(y) == 2: + if y[0] == unique_id: + cnt = max(cnt, y[1]) + + for i in range(0, cnt + 1): + if select == i+1: + res.append(input) + elif core.is_execution_model_version_supported(): + res.append(ExecutionBlocker(None)) + else: + res.append(None) + + return res + + +class RemoveNoiseMask: + @classmethod + def INPUT_TYPES(s): + return {"required": {"samples": ("LATENT",)}} + + RETURN_TYPES = ("LATENT",) + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Util" + + def doit(self, samples): + res = {key: value for key, value in samples.items() if key != 'noise_mask'} + return (res, ) + + +class ImagePasteMasked: + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "destination": ("IMAGE",), + "source": ("IMAGE",), + "x": ("INT", {"default": 0, "min": 0, "max": MAX_RESOLUTION, "step": 1}), + "y": ("INT", {"default": 0, "min": 0, "max": MAX_RESOLUTION, "step": 1}), + "resize_source": ("BOOLEAN", {"default": False}), + }, + "optional": { + "mask": ("MASK",), + } + } + RETURN_TYPES = ("IMAGE",) + FUNCTION = "composite" + + CATEGORY = "image" + + def composite(self, destination, source, x, y, resize_source, mask = None): + destination = destination.clone().movedim(-1, 1) + output = comfy_extras.nodes_mask.composite(destination, source.movedim(-1, 1), x, y, mask, 1, resize_source).movedim(1, -1) + return (output,) + + +from impact.utils import any_typ + +class ImpactLogger: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "data": (any_typ,), + "text": ("STRING", {"multiline": True}), + }, + "hidden": {"prompt": "PROMPT", "extra_pnginfo": "EXTRA_PNGINFO", "unique_id": "UNIQUE_ID"}, + } + + CATEGORY = "ImpactPack/Debug" + + OUTPUT_NODE = True + + RETURN_TYPES = () + FUNCTION = "doit" + + def doit(self, data, text, prompt, extra_pnginfo, unique_id): + shape = "" + if hasattr(data, "shape"): + shape = f"{data.shape} / " + + logging.info(f"[IMPACT LOGGER]: {shape}{data}") + + logging.info(f" PROMPT: {prompt}") + + # for x in prompt: + # if 'inputs' in x and 'populated_text' in x['inputs']: + # print(f"PROMPT: {x['10']['inputs']['populated_text']}") + # + # for x in extra_pnginfo['workflow']['nodes']: + # if x['type'] == 'ImpactWildcardProcessor': + # print(f" WV : {x['widgets_values'][1]}\n") + + PromptServer.instance.send_sync("impact-node-feedback", {"node_id": unique_id, "widget_name": "text", "type": "TEXT", "value": f"{data}"}) + return {} + + +class ImpactDummyInput: + @classmethod + def INPUT_TYPES(s): + return {"required": {}} + + CATEGORY = "ImpactPack/Debug" + + RETURN_TYPES = (any_typ,) + FUNCTION = "doit" + + def doit(self): + return ("DUMMY",) + + +class MasksToMaskList: + @classmethod + def INPUT_TYPES(s): + return {"optional": { + "masks": ("MASK", ), + } + } + + RETURN_TYPES = ("MASK", ) + OUTPUT_IS_LIST = (True, ) + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Operation" + + def doit(self, masks): + if masks is None: + empty_mask = torch.zeros((64, 64), dtype=torch.float32, device="cpu") + return ([empty_mask], ) + + res = [] + + for mask in masks: + res.append(mask) + + res = [make_3d_mask(x) for x in res] + + return (res, ) + + +class MaskListToMaskBatch: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "mask": ("MASK", ), + } + } + + INPUT_IS_LIST = True + + RETURN_TYPES = ("MASK", ) + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Operation" + + def doit(self, mask): + if len(mask) == 0: + empty_mask = torch.zeros((1, 64, 64), dtype=torch.float32, device="cpu").unsqueeze(0) + return (empty_mask,) + + masks_3d = [make_3d_mask(m) for m in mask] + target_shape = masks_3d[0].shape[1:] + upscaled_masks = [] + for m in masks_3d: + if m.shape[1:] != target_shape: + m = m.unsqueeze(1).repeat(1, 3, 1, 1) + m = comfy.utils.common_upscale(m, target_shape[1], target_shape[0], "lanczos", "center") + m = m[:, 0, :, :] + + upscaled_masks.append(m) + # Concatenate all at once + result = torch.cat(upscaled_masks, dim=0) + return (result,) + + +class ImageListToImageBatch: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "images": ("IMAGE", ), + } + } + + INPUT_IS_LIST = True + + RETURN_TYPES = ("IMAGE", ) + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Operation" + + def doit(self, images): + if len(images) == 0: + return () + if len(images) == 1: + img = images[0] + if img.ndim == 3: # add batch dim if missing + img = img.unsqueeze(0) + return (img,) + + # Start with the first image + image1 = images[0] + if image1.ndim == 3: + image1 = image1.unsqueeze(0) + + for image2 in images[1:]: + # Ensure batch dim + if image2.ndim == 3: + image2 = image2.unsqueeze(0) + + # Ensure same device + if image2.device != image1.device: + image2 = image2.to(image1.device) + + # Ensure HxW match exactly + H, W = image1.shape[1], image1.shape[2] + if image2.shape[1] != H or image2.shape[2] != W: + image2 = comfy.utils.common_upscale( + image2.movedim(-1, 1), # move channels first + W, # width + H, # height + "lanczos", + "center" + ).movedim(1, -1) # move channels back last + + # Ensure channels match + if image2.shape[3] != image1.shape[3]: + # simple fix: truncate or pad channels + min_C = min(image1.shape[3], image2.shape[3]) + image1 = image1[:, :, :, :min_C] + image2 = image2[:, :, :, :min_C] + + # Concatenate along batch dimension + image1 = torch.cat((image1, image2), dim=0) + + return (image1,) + + +class ImageBatchToImageList: + @classmethod + def INPUT_TYPES(s): + return {"required": {"image": ("IMAGE",), }} + + RETURN_TYPES = ("IMAGE",) + OUTPUT_IS_LIST = (True,) + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Util" + + def doit(self, image): + images = [image[i:i + 1, ...] for i in range(image.shape[0])] + return (images, ) + + +class MakeAnyList: + @classmethod + def INPUT_TYPES(s): + return { + "required": {}, + "optional": {"value1": (any_typ,), } + } + + RETURN_TYPES = (any_typ,) + OUTPUT_IS_LIST = (True,) + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Util" + + def doit(self, **kwargs): + values = [] + + for k, v in kwargs.items(): + if v is not None: + values.append(v) + + return (values, ) + + +class MakeMaskList: + @classmethod + def INPUT_TYPES(s): + return {"required": {"mask1": ("MASK",), }} + + RETURN_TYPES = ("MASK",) + OUTPUT_IS_LIST = (True,) + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Util" + + def doit(self, **kwargs): + masks = [] + + for k, v in kwargs.items(): + masks.append(v) + + return (masks, ) + + +class NthItemOfAnyList: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "any_list": (any_typ,), + "index": ("INT", {"default": 0, "min": -sys.maxsize, "max": sys.maxsize, "step": 1, "tooltip": "The index of the item you want to select from the list. Use negative values to select from the end (e.g., -1 for last item, -2 for second to last)."}), + } + } + + RETURN_TYPES = (any_typ,) + INPUT_IS_LIST = True + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Util" + + DESCRIPTION = "Selects the Nth item from a list. If the index is out of range, it returns the last item in the list." + + def doit(self, any_list, index): + i = index[0] + list_len = len(any_list) + if i >= list_len or i < -list_len: + return (any_list[-1],) + else: + return (any_list[i],) + + +class MakeImageList: + @classmethod + def INPUT_TYPES(s): + return {"optional": {"image1": ("IMAGE",), }} + + RETURN_TYPES = ("IMAGE",) + OUTPUT_IS_LIST = (True,) + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Util" + + def doit(self, **kwargs): + images = [] + + for k, v in kwargs.items(): + images.append(v) + + return (images, ) + + +class MakeImageBatch: + @classmethod + def INPUT_TYPES(s): + return {"optional": {"image1": ("IMAGE",), }} + + RETURN_TYPES = ("IMAGE",) + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Util" + + def doit(self, **kwargs): + images = [value for value in kwargs.values()] + + if len(images) == 1: + return (images[0],) + else: + image1 = images[0] + for image2 in images[1:]: + if image1.shape[1:] != image2.shape[1:]: + image2 = comfy.utils.common_upscale(image2.movedim(-1, 1), image1.shape[2], image1.shape[1], "lanczos", "center").movedim(1, -1) + image1 = torch.cat((image1, image2), dim=0) + return (image1,) + + +class MakeMaskBatch: + @classmethod + def INPUT_TYPES(s): + return {"optional": {"mask1": ("MASK",), }} + + RETURN_TYPES = ("MASK",) + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Util" + + def doit(self, **kwargs): + masks = [make_3d_mask(value) for value in kwargs.values()] + + if len(masks) == 1: + return (masks[0],) + else: + mask1 = masks[0] + for mask2 in masks[1:]: + if mask1.shape[1:] != mask2.shape[1:]: + mask2 = comfy.utils.common_upscale(mask2.movedim(-1, 1), mask1.shape[2], mask1.shape[1], "lanczos", "center").movedim(1, -1) + mask1 = torch.cat((mask1, mask2), dim=0) + return (mask1,) + + +class ReencodeLatent: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "samples": ("LATENT", ), + "tile_mode": (["None", "Both", "Decode(input) only", "Encode(output) only"],), + "input_vae": ("VAE", ), + "output_vae": ("VAE", ), + "tile_size": ("INT", {"default": 512, "min": 320, "max": 4096, "step": 64}), + }, + "optional": { + "overlap": ("INT", {"default": 64, "min": 0, "max": 4096, "step": 32, "tooltip": "This setting applies when 'tile_mode' is enabled."}), + } + } + + CATEGORY = "ImpactPack/Util" + + RETURN_TYPES = ("LATENT", ) + FUNCTION = "doit" + + def doit(self, samples, tile_mode, input_vae, output_vae, tile_size=512, overlap=64): + if tile_mode in ["Both", "Decode(input) only"]: + decoder = nodes.VAEDecodeTiled() + if 'overlap' in inspect.signature(decoder.decode).parameters: + pixels = decoder.decode(input_vae, samples, tile_size, overlap=overlap)[0] + else: + pixels = decoder.decode(input_vae, samples, tile_size, overlap=overlap)[0] + else: + pixels = nodes.VAEDecode().decode(input_vae, samples)[0] + + if tile_mode in ["Both", "Encode(output) only"]: + encoder = nodes.VAEEncodeTiled() + if 'overlap' in inspect.signature(encoder.encode).parameters: + return encoder.encode(output_vae, pixels, tile_size, overlap=overlap) + else: + return encoder.encode(output_vae, pixels, tile_size) + else: + return nodes.VAEEncode().encode(output_vae, pixels) + + +class ReencodeLatentPipe: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "samples": ("LATENT", ), + "tile_mode": (["None", "Both", "Decode(input) only", "Encode(output) only"],), + "input_basic_pipe": ("BASIC_PIPE", ), + "output_basic_pipe": ("BASIC_PIPE", ), + }, + } + + CATEGORY = "ImpactPack/Util" + + RETURN_TYPES = ("LATENT", ) + FUNCTION = "doit" + + def doit(self, samples, tile_mode, input_basic_pipe, output_basic_pipe): + _, _, input_vae, _, _ = input_basic_pipe + _, _, output_vae, _, _ = output_basic_pipe + return ReencodeLatent().doit(samples, tile_mode, input_vae, output_vae) + + +class StringSelector: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "strings": ("STRING", {"multiline": True}), + "multiline": ("BOOLEAN", {"default": False, "label_on": "enabled", "label_off": "disabled"}), + "select": ("INT", {"min": 0, "max": sys.maxsize, "step": 1, "default": 0}), + }} + + RETURN_TYPES = ("STRING",) + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Util" + + def doit(self, strings, multiline, select): + lines = strings.split('\n') + + if multiline: + result = [] + current_string = "" + + for line in lines: + if line.startswith("#"): + if current_string: + result.append(current_string.strip()) + current_string = "" + current_string += line + "\n" + + if current_string: + result.append(current_string.strip()) + + if len(result) == 0: + selected = strings + else: + selected = result[select % len(result)] + + if selected.startswith('#'): + selected = selected[1:] + else: + if len(lines) == 0: + selected = strings + else: + selected = lines[select % len(lines)] + + return (selected, ) + + +class StringListToString: + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "join_with": ("STRING", {"default": "\\n"}), + "string_list": ("STRING", {"forceInput": True}), + } + } + + INPUT_IS_LIST = True + RETURN_TYPES = ("STRING",) + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Util" + + def doit(self, join_with, string_list): + # convert \\n to newline character + if join_with[0] == "\\n": + join_with[0] = "\n" + + joined_text = join_with[0].join(string_list) + + return (joined_text,) + + +class WildcardPromptFromString: + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "string": ("STRING", {"forceInput": True}), + "delimiter": ("STRING", {"multiline": False, "default": "\\n" }), + "prefix_all": ("STRING", {"multiline": False}), + "postfix_all": ("STRING", {"multiline": False}), + "restrict_to_tags": ("STRING", {"multiline": False}), + "exclude_tags": ("STRING", {"multiline": False}) + }, + } + + RETURN_TYPES = ("STRING", "STRING",) + RETURN_NAMES = ("wildcard", "segs_labels",) + FUNCTION = "doit" + + CATEGORY = "ImpactPack/Util" + + def doit(self, string, delimiter, prefix_all, postfix_all, restrict_to_tags, exclude_tags): + # convert \\n to newline character + if delimiter == "\\n": + delimiter = "\n" + + # some sanity checks and normalization for later processing + if prefix_all is None: + prefix_all = "" + if postfix_all is None: + postfix_all = "" + if restrict_to_tags is None: + restrict_to_tags = "" + if exclude_tags is None: + exclude_tags = "" + + restrict_to_tags = restrict_to_tags.split(", ") + exclude_tags = exclude_tags.split(", ") + + # build the wildcard prompt per list entry + output = ["[LAB]"] + labels = [] + for x in string.split(delimiter): + label = str(len(labels) + 1) + labels.append(label) + x = x.split(", ") + # restrict to tags + if restrict_to_tags != [""]: + x = list(set(x) & set(restrict_to_tags)) + # remove tags + if exclude_tags != [""]: + x = list(set(x) - set(exclude_tags)) + # next row: